diff --git a/CHANGELOG b/CHANGELOG index a85b5e45..0678394d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,24 @@ +=== ** v1.2.0.0-rc1 === + +* [ADD] Security improvements preventing common threats (SQL Injection, XSS, CSRF) +* [ADD] Fully MVC +* [ADD] Using PDO for database queries +* [ADD] Using PKI for forms passwords encryption (for insecure channels) +* [ADD] Using TOTP for 2-factor authentication +* [ADD] Custom fields can be created for several modules +* [ADD] Export to sysPass encrypted XML file +* [ADD] View passwords as images +* [ADD] Temporary master password for limited time logins +* [ADD] Password generator with complexity options +* [ADD] API authorizations +* [ADD] New visual theme with Material Design Lite by Google +* [ADD] Theming features +* [ADD] Special searches +* [ADD] Image thumbnail preview +* [MOD] 60% of code rewriting for improve performance and reusability (2x faster) +* [MOD] Better error handling +* [MOD] Better in-context help + === ** v1.1.2.24 === * [FIX] Fixed error on saving files extensions. diff --git a/CHANGELOG-ES b/CHANGELOG-ES index 48187276..799a8a35 100644 --- a/CHANGELOG-ES +++ b/CHANGELOG-ES @@ -1,3 +1,24 @@ +=== ** v1.2.0.0-rc1 === + +* [ADD] Mejoras de seguridad para prevenir ataques comunes (SQL Injection, XSS, CSRF) +* [ADD] Totalmente MVC +* [ADD] Uso de PDO para consultas a la base de datos +* [ADD] Uso de PKI para encriptar las claves de los formularios (para canales inseguros) +* [ADD] Uso de TOTP para autentificación de doble factor +* [ADD] Campos personalizados para insertarlos en varios módulos +* [ADD] Exportación a formato XML de sysPass encriptado +* [ADD] Visualización de claves como imágenes +* [ADD] Clave maestra temporal para accesos limitados en tiempo +* [ADD] Generador de claves con opciones de complejidad +* [ADD] Autorizaciones de acceso a la API +* [ADD] Nuevo estilo visual com Material Design Lite by Google +* [ADD] Posibilidad de crear temas personalizados +* [ADD] Búsquedas especiales +* [ADD] Previsualización de imágenes en miniatura +* [MOD] Reescrito el 60% del código para mejorar el rendimiento y la reusabilidad (2x más rápido) +* [MOD] Mejoras en el manejo de errores +* [MOD] Mejoras en la ayuda en contexto + === ** v1.1.2.24 === * [FIX] Corregido error al guardar extensiones de archivos. diff --git a/README b/README index a9dd8204..a1983657 100644 --- a/README +++ b/README @@ -25,8 +25,7 @@ sysPass es una aplicación web en PHP para la gestión de claves en un entorno multiusuario. -Esta aplicación es derivada de phpPasswordManager, la cual ha sido reescrita -casi por completo, añadiendo nuevas funcionalidades que permiten: +Funcionalidades: - Seguridad basada en grupos y pefiles de usuario. - Acceso mediante LDAP y BBDD. @@ -34,10 +33,12 @@ casi por completo, añadiendo nuevas funcionalidades que permiten: - Gestión de usuarios, grupos y perfiles. - Posibilidad de subir adjuntos para las cuentas. - Log de eventos de auditoría. - - Backup "portable". + - Exportación a XML y packup "portable". - Enlaces a Wiki. - Histórico de cambios en cuentas. - - Importación desde phpPMS. + - Importación desde XML, CSV y phpPMS. + - Temas visuales + - Multilenguaje Para realizar la instalación siga los pasos que se indican en http://wiki.syspass.org/doku.php/es:instalar @@ -49,8 +50,7 @@ en el archivo COPYING se encuentra una copia de esta. sysPass is a PHP web based application, for passwords management in a multiuser environment. -This application derives from phpPasswordManager, that was almost fully rewritten, -and added new features that allows: +Functionalities: - Group/Profile based security. - LDAP and DB access. @@ -58,10 +58,12 @@ and added new features that allows: - Users/Groups management. - Attachments can be uploaded. - Audit event log. - - Backup "portable". + - XML exporting and "portable" backups. - Wiki links. - Accounts changes history. - - Import from phpPMS. + - Import from XML, CSV and phpPMS. + - Visual themes + - Multilanguage To install you can follow steps at http://wiki.syspass.org/doku.php/en:install diff --git a/README.md b/README.md index 485100b2..ae243cc2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ #### ACTUALIZAR / UPDATE -Para actualizar desde 1.0 seguir los pasos en http://wiki.syspass.org/doku.php/es:actualizar +Para actualizar desde 1.1 seguir los pasos en http://wiki.syspass.org/doku.php/es:actualizar -In order to update from 1.0 you need to follow the steps at http://wiki.syspass.org/doku.php/en:upgrade +In order to update from 1.1 you need to follow the steps at http://wiki.syspass.org/doku.php/en:upgrade ---------------- @@ -27,6 +27,9 @@ Installation instructions and changelog at Wiki ---------------- http://syspass.org + http://demo.syspass.org + http://wiki.syspass.org -http://sourceforge.net/projects/syspass \ No newline at end of file + +https://github.com/nuxsmin/sysPass \ No newline at end of file diff --git a/ajax/ajax_2fa.php b/ajax/ajax_2fa.php new file mode 100644 index 00000000..aad64ad8 --- /dev/null +++ b/ajax/ajax_2fa.php @@ -0,0 +1,59 @@ +. + * + */ + +define('APP_ROOT', '..'); + +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +SP\Request::checkReferer('POST'); + +$sk = SP\Request::analyze('sk', false); + +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); +} + +$userId = SP\Request::analyze('itemId', 0); +$pin = SP\Request::analyze('security_pin', 0); + +$twoFa = new \SP\Auth\Auth2FA($userId, $userLogin); + +if($userId && $pin && $twoFa->verifyKey($pin)){ + \SP\Session::set2FApassed(true); + + // Comprobar si existen parámetros adicionales en URL via GET + foreach ($_POST as $param => $value) { + if (preg_match('/g_.*/', $param)) { + $params[] = substr($param, 2) . '=' . $value; + } + } + + $urlParams = isset($params) ? '?' . implode('&', $params) : ''; + + SP\Common::printJSON(_('Código correcto'), 0, 'redirect(\'index.php\')'); +} else { + \SP\Session::set2FApassed(false); + SP\Common::printJSON(_('Código incorrecto')); +} \ No newline at end of file diff --git a/ajax/ajax_accountSave.php b/ajax/ajax_accountSave.php index c60b82b8..da3232ec 100644 --- a/ajax/ajax_accountSave.php +++ b/ajax/ajax_accountSave.php @@ -1,5 +1,4 @@ decryptRSA(base64_decode($accountPassword)); + $clearAccountPassR = $CryptPKI->decryptRSA(base64_decode($accountPasswordR)); + + if ($clearAccountPass != $clearAccountPassR) { + SP\Common::printJSON(_('Las claves no coinciden')); } // Encriptar clave de cuenta - $accountPass = SP_Crypt::mkEncrypt($frmPassword); - - if ($accountPass === false || is_null($accountPass)) { - SP_Common::printJSON(_('Error al generar datos cifrados')); + try { + $accountEncPass = SP\Crypt::encryptData($clearAccountPass); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage()); } - - $accountIV = SP_Crypt::$strInitialVector; } -$account = new SP_Account; +$Account = new SP\Account; -switch ($frmSaveType) { - case 1: - SP_Customer::$customerName = $frmNewCustomer; +switch ($actionId) { + case \SP\Controller\ActionsInterface::ACTION_ACC_NEW: + SP\Customer::$customerName = $newCustomer; // Comprobar si se ha introducido un nuevo cliente - if ($frmNewCustomer) { - if (!SP_Customer::checkDupCustomer()) { - SP_Common::printJSON(_('Cliente duplicado')); + if ($newCustomer) { + try { + SP\Customer::addCustomer(); + $customerId = SP\Customer::$customerLastId; + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage()); } - - if (!SP_Customer::addCustomer()) { - SP_Common::printJSON(_('Error al crear el cliente')); - } - - $account->accountCustomerId = SP_Customer::$customerLastId; - } else { - $account->accountCustomerId = $frmSelCustomer; } - $account->accountName = $frmName; - $account->accountCategoryId = $frmCategoryId; - $account->accountLogin = $frmLogin; - $account->accountUrl = $frmUrl; - $account->accountPass = $accountPass; - $account->accountIV = $accountIV; - $account->accountNotes = $frmNotes; - $account->accountUserId = $userId; - $account->accountUserGroupId = $groupId; - $account->accountUserGroupsId = $frmOtherGroups; - $account->accountUsersId = $frmOtherUsers; - $account->accountOtherUserEdit = $frmUserEditEnabled; - $account->accountOtherGroupEdit = $frmGroupEditEnabled; + $Account->setAccountName($accountName); + $Account->setAccountCategoryId($categoryId); + $Account->setAccountCustomerId($customerId); + $Account->setAccountLogin($accountLogin); + $Account->setAccountUrl($accountUrl); + $Account->setAccountPass($accountEncPass['data']); + $Account->setAccountIV($accountEncPass['iv']); + $Account->setAccountNotes($accountNotes); + $Account->setAccountUserId($currentUserId); + $Account->setAccountUserGroupId($accountMainGroupId); + $Account->setAccountUsersId($accountOtherUsers); + $Account->setAccountUserGroupsId($accountOtherGroups); + $Account->setAccountOtherUserEdit($accountUserEditEnabled); + $Account->setAccountOtherGroupEdit($accountGroupEditEnabled); // Crear cuenta - if ($account->createAccount()) { - SP_Common::printJSON(_('Cuenta creada'), 0); + if ($Account->createAccount()) { + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $Account->getAccountId(), $value); + $CustomFields->addCustomField(); + } + } + + SP\Common::printJSON(_('Cuenta creada'), 0); } - SP_Common::printJSON(_('Error al crear la cuenta'), 0); + + SP\Common::printJSON(_('Error al crear la cuenta'), 0); break; - case 2: - SP_Customer::$customerName = $frmNewCustomer; - $account->accountId = $frmAccountId; - $account->accountName = $frmName; - $account->accountCategoryId = $frmCategoryId; - $account->accountLogin = $frmLogin; - $account->accountUrl = $frmUrl; - $account->accountNotes = $frmNotes; - $account->accountUserEditId = $userId; - $account->accountUserGroupsId = $frmOtherGroups; - $account->accountUsersId = $frmOtherUsers; - $account->accountOtherUserEdit = $frmUserEditEnabled; - $account->accountOtherGroupEdit = $frmGroupEditEnabled; + case \SP\Controller\ActionsInterface::ACTION_ACC_EDIT: + SP\Customer::$customerName = $newCustomer; // Comprobar si se ha introducido un nuevo cliente - if ($frmNewCustomer) { - if (!SP_Customer::checkDupCustomer()) { - SP_Common::printJSON(_('Cliente duplicado')); + if ($newCustomer) { + try { + SP\Customer::addCustomer(); + $customerId = SP\Customer::$customerLastId; + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage()); } + } - if (!SP_Customer::addCustomer()) { - SP_Common::printJSON(_('Error al crear el cliente')); - } + $Account->setAccountId($accountId); + $Account->setAccountName($accountName); + $Account->setAccountCategoryId($categoryId); + $Account->setAccountCustomerId($customerId); + $Account->setAccountLogin($accountLogin); + $Account->setAccountUrl($accountUrl); + $Account->setAccountNotes($accountNotes); + $Account->setAccountUserEditId($currentUserId); + $Account->setAccountUsersId($accountOtherUsers); + $Account->setAccountUserGroupsId($accountOtherGroups); + $Account->setAccountOtherUserEdit($accountUserEditEnabled); + $Account->setAccountOtherGroupEdit($accountGroupEditEnabled); - $account->accountCustomerId = SP_Customer::$customerLastId; - } else { - $account->accountCustomerId = $frmSelCustomer; + // Cambiar el grupo principal si el usuario es Admin + if (SP\Session::getUserIsAdminApp() || SP\Session::getUserIsAdminAcc()) { + $Account->setAccountUserGroupId($accountMainGroupId); } // Comprobar si han habido cambios - if ($frmChangesHash == $account->calcChangesHash()) { - SP_Common::printJSON(_('Sin cambios'), 0); + if ($accountChangesHash == $Account->calcChangesHash()) { + SP\Common::printJSON(_('Sin cambios'), 0); } // Actualizar cuenta - if ($account->updateAccount()) { - SP_Common::printJSON(_('Cuenta actualizada'), 0); + if ($Account->updateAccount()) { + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $accountId, $value); + $CustomFields->updateCustomField(); + } + } + + SP\Common::printJSON(_('Cuenta actualizada'), 0); } - SP_Common::printJSON(_('Error al modificar la cuenta')); + + SP\Common::printJSON(_('Error al modificar la cuenta')); break; - case 3: - $account->accountId = $frmAccountId; + case \SP\Controller\ActionsInterface::ACTION_ACC_DELETE: + $Account->setAccountId($accountId); // Eliminar cuenta - if ($account->deleteAccount()) { - SP_Common::printJSON(_('Cuenta eliminada'), 0, "doAction('accsearch');"); + if ($Account->deleteAccount() && \SP\CustomFields::deleteCustomFieldForItem($accountId, \SP\Controller\ActionsInterface::ACTION_ACC_NEW)) { + SP\Common::printJSON(_('Cuenta eliminada'), 0, "sysPassUtil.Common.doAction('" . \SP\Controller\ActionsInterface::ACTION_ACC_SEARCH . "');"); } - SP_Common::printJSON(_('Error al eliminar la cuenta')); + + SP\Common::printJSON(_('Error al eliminar la cuenta')); break; - case 4: - $account->accountId = $frmAccountId; - $account->accountPass = $accountPass; - $account->accountIV = $accountIV; - $account->accountUserEditId = $userId; + case \SP\Controller\ActionsInterface::ACTION_ACC_EDIT_PASS: + $Account->setAccountId($accountId); + $Account->setAccountPass($accountEncPass['data']); + $Account->setAccountIV($accountEncPass['iv']); + $Account->setAccountUserEditId($currentUserId); // Actualizar clave de cuenta - if ($account->updateAccountPass()) { - SP_Common::printJSON(_('Clave actualizada'), 0); + if ($Account->updateAccountPass()) { + SP\Common::printJSON(_('Clave actualizada'), 0); } - SP_Common::printJSON(_('Error al actualizar la clave')); + + SP\Common::printJSON(_('Error al actualizar la clave')); break; - case 5: - $account->accountId = $frmAccountId; - $accountHistData = $account->getAccountHistory(); + case \SP\Controller\ActionsInterface::ACTION_ACC_EDIT_RESTORE: + $Account->setAccountId(SP\AccountHistory::getAccountIdFromId($accountId)); + $Account->setAccountUserEditId($currentUserId); - $account->accountId = $accountHistData->account_id; - $account->accountName = $accountHistData->account_name; - $account->accountCategoryId = $accountHistData->account_categoryId; - $account->accountCustomerId = $accountHistData->account_customerId; - $account->accountLogin = $accountHistData->account_login; - $account->accountUrl = $accountHistData->account_url; - $account->accountPass = $accountHistData->account_pass; - $account->accountIV = $accountHistData->account_IV; - $account->accountNotes = $accountHistData->account_notes; - $account->accountUserId = $accountHistData->account_userId; - $account->accountUserGroupId = $accountHistData->account_userGroupId; - $account->accountOtherUserEdit = $accountHistData->account_otherUserEdit; - $account->accountOtherGroupEdit = $accountHistData->account_otherGroupEdit; - $account->accountUserEditId = $userId; - - // Restaurar cuenta y clave - if ($account->updateAccount(true) && $account->updateAccountPass(false, true)) { - SP_Common::printJSON(_('Cuenta restaurada'), 0); + if ($Account->restoreFromHistory($accountId)) { + SP\Common::printJSON(_('Cuenta restaurada'), 0); } - SP_Common::printJSON(_('Error al restaurar cuenta')); + SP\Common::printJSON(_('Error al restaurar cuenta')); + break; default: - SP_Common::printJSON(_('Acción Inválida')); + SP\Common::printJSON(_('Acción Inválida')); } \ No newline at end of file diff --git a/ajax/ajax_appMgmtData.php b/ajax/ajax_appMgmtData.php index f18b5772..c8cb0e9b 100644 --- a/ajax/ajax_appMgmtData.php +++ b/ajax/ajax_appMgmtData.php @@ -23,77 +23,162 @@ * */ +use SP\Request; + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Util::logout(); +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Util::logout(); } -if (SP_Common::parseParams('p', 'id', false, true) && SP_Common::parseParams('p', 'type', false, true)) { - $tplvars['itemid'] = SP_Common::parseParams('p', 'id', 0); - $itemType = $tplvars['itemtype'] = SP_Common::parseParams('p', 'type', 0); - $tplvars['activeTab'] = SP_Common::parseParams('p', 'active', 0); - $tplvars['view'] = SP_Common::parseParams('p', 'view', 0); -} else { - return; +if (!SP\Request::analyze('itemId', false, true) + || !SP\Request::analyze('actionId', false, true) +) { + exit(); } -switch ($itemType) { - case 1: - $tplvars['header'] = _('Editar Usuario'); - $tplvars['onCloseAction'] = 'usersmenu'; - $template = 'users'; +$actionId = SP\Request::analyze('actionId', 0); + +$tpl = new SP\Template(); +$tpl->assign('itemId', SP\Request::analyze('itemId', 0)); +$tpl->assign('activeTab', SP\Request::analyze('activeTab', 0)); +$tpl->assign('actionId', $actionId); +$tpl->assign('isView', false); + +switch ($actionId) { + case \SP\Controller\ActionsInterface::ACTION_USR_USERS_VIEW: + $tpl->assign('header', _('Ver Usuario')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $tpl->assign('isView', true); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getUser(); break; - case 2: - $tplvars['header'] = _('Nuevo Usuario'); - $tplvars['onCloseAction'] = 'usersmenu'; - $template = 'users'; + case \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDIT: + $tpl->assign('header', _('Editar Usuario')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getUser(); break; - case 3: - $tplvars['header'] = _('Editar Grupo'); - $tplvars['onCloseAction'] = 'usersmenu'; - $template = 'groups'; + case \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW: + $tpl->assign('header', _('Nuevo Usuario')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getUser(); break; - case 4: - $tplvars['header'] = _('Nuevo Grupo'); - $tplvars['onCloseAction'] = 'usersmenu'; - $template = 'groups'; + case \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_VIEW: + $tpl->assign('header', _('Ver Grupo')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $tpl->assign('isView', true); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getGroup(); break; - case 5: - $tplvars['header'] = _('Editar Perfil'); - $tplvars['onCloseAction'] = 'usersmenu'; - $template = 'profiles'; + case \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT: + $tpl->assign('header', _('Editar Grupo')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getGroup(); break; - case 6: - $tplvars['header'] = _('Nuevo Perfil'); - $tplvars['onCloseAction'] = 'usersmenu'; - $template = 'profiles'; + case \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW: + $tpl->assign('header', _('Nuevo Grupo')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getGroup(); break; - case 7: - $tplvars['header'] = _('Editar Cliente'); - $tplvars['onCloseAction'] = 'appmgmtmenu'; - $template = 'customers'; + case \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_VIEW: + $tpl->assign('header', _('Ver Perfil')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $tpl->assign('isView', true); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getProfile(); break; - case 8: - $tplvars['header'] = _('Nuevo Cliente'); - $tplvars['onCloseAction'] = 'appmgmtmenu'; - $template = 'customers'; + case \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_EDIT: + $tpl->assign('header', _('Editar Perfil')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getProfile(); break; - case 9: - $tplvars['header'] = _('Editar Categoría'); - $tplvars['onCloseAction'] = 'appmgmtmenu'; - $template = 'categories'; + case \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_NEW: + $tpl->assign('header', _('Nuevo Perfil')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getProfile(); break; - case 10: - $tplvars['header'] = _('Nueva Categoría'); - $tplvars['onCloseAction'] = 'appmgmtmenu'; - $template = 'categories'; + case \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_VIEW: + $tpl->assign('header', _('Ver Cliente')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $tpl->assign('isView', true); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCustomer(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT: + $tpl->assign('header', _('Editar Cliente')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCustomer(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_NEW: + $tpl->assign('header', _('Nuevo Cliente')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCustomer(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_VIEW: + $tpl->assign('header', _('Ver Categoría')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $tpl->assign('isView', true); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCategory(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_EDIT: + $tpl->assign('header', _('Editar Categoría')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCategory(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_NEW: + $tpl->assign('header', _('Nueva Categoría')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCategory(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_VIEW: + $tpl->assign('header', _('Ver Autorización')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $tpl->assign('isView', true); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getToken(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_NEW: + $tpl->assign('header', _('Nueva Autorización')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getToken(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_EDIT: + $tpl->assign('header', _('Editar Autorización')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_USR); + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->getToken(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW: + $tpl->assign('header', _('Nuevo Campo')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCustomField(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT: + $tpl->assign('header', _('Editar Campo')); + $tpl->assign('onCloseAction', \SP\Controller\ActionsInterface::ACTION_MGM); + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->getCustomField(); break; default : + exit(); break; } -SP_Html::getTemplate($template, $tplvars); \ No newline at end of file +$controller->view(); \ No newline at end of file diff --git a/ajax/ajax_appMgmtSave.php b/ajax/ajax_appMgmtSave.php index 798b3c73..3a72dd3f 100644 --- a/ajax/ajax_appMgmtSave.php +++ b/ajax/ajax_appMgmtSave.php @@ -1,5 +1,4 @@ setUserId($itemId); + $User->setUserName(SP\Request::analyze('name')); + $User->setUserLogin(SP\Request::analyze('login')); + $User->setUserEmail(SP\Request::analyze('email')); + $User->setUserNotes(SP\Request::analyze('notes')); + $User->setUserGroupId(SP\Request::analyze('groupid', 0)); + $User->setUserProfileId(SP\Request::analyze('profileid', 0)); + $User->setUserIsAdminApp(SP\Request::analyze('adminapp', 0, false, 1)); + $User->setUserIsAdminAcc(SP\Request::analyze('adminacc', 0, false, 1)); + $User->setUserIsDisabled(SP\Request::analyze('disabled', 0, false, 1)); + $User->setUserChangePass(SP\Request::analyze('changepass', 0, false, 1)); + $User->setUserPass(SP\Request::analyze('pass', '', false, false, false)); // Nuevo usuario o editar - if ($frmAction == 1 OR $frmAction == 2) { - if (!$frmUsrName && !$frmLdap) { - SP_Common::printJSON(_('Es necesario un nombre de usuario'), 2); + if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDIT + ) { + if (!$User->getUserName() && !$isLdap) { + SP\Common::printJSON(_('Es necesario un nombre de usuario'), 2); + } elseif (!$User->getUserLogin() && !$isLdap) { + SP\Common::printJSON(_('Es necesario un login'), 2); + } elseif (!$User->getUserProfileId()) { + SP\Common::printJSON(_('Es necesario un perfil'), 2); + } elseif (!$User->getUserGroupId()) { + SP\Common::printJSON(_('Es necesario un grupo'), 2); + } elseif (!$User->getUserEmail() && !$isLdap) { + SP\Common::printJSON(_('Es necesario un email'), 2); + } elseif (SP\Util::demoIsEnabled() && !\SP\Session::getUserIsAdminApp() && $User->getUserLogin() == 'demo') { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); } - if (!$frmUsrLogin && !$frmLdap) { - SP_Common::printJSON(_('Es necesario un login'), 2); - } - - if ($frmUsrProfile == "") { - SP_Common::printJSON(_('Es necesario un perfil'), 2); - } - - if (!$frmUsrGroup) { - SP_Common::printJSON(_('Es necesario un grupo'), 2); - } - - if (!$frmUsrEmail && !$frmLdap) { - SP_Common::printJSON(_('Es necesario un email'), 2); - } - - $objUser->userId = $frmItemId; - $objUser->userName = $frmUsrName; - $objUser->userLogin = $frmUsrLogin; - $objUser->userEmail = $frmUsrEmail; - $objUser->userNotes = $frmUsrNotes; - $objUser->userGroupId = $frmUsrGroup; - $objUser->userProfileId = $frmUsrProfile; - $objUser->userIsAdminApp = $frmAdminApp; - $objUser->userIsAdminAcc = $frmAdminAcc; - $objUser->userIsDisabled = $frmDisabled; - $objUser->userChangePass = $frmChangePass; - $objUser->userPass = $frmUsrPass; - - switch ($objUser->checkUserExist()) { - case 1: - SP_Common::printJSON(_('Login de usuario duplicado'), 2); + switch ($User->checkUserExist()) { + case UserUtil::USER_LOGIN_EXIST: + SP\Common::printJSON(_('Login de usuario duplicado'), 2); break; - case 2: - SP_Common::printJSON(_('Email de usuario duplicado'), 2); + case UserUtil::USER_MAIL_EXIST: + SP\Common::printJSON(_('Email de usuario duplicado'), 2); break; } - if ($frmAction == 1) { - if (!$frmUsrPass && !$frmUsrPassV) { - SP_Common::printJSON(_('La clave no puede estar en blanco'), 2); + if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW) { + if (!$User->getUserPass() && !$userPassR) { + SP\Common::printJSON(_('La clave no puede estar en blanco'), 2); + } elseif ($User->getUserPass() != $userPassR) { + SP\Common::printJSON(_('Las claves no coinciden'), 2); } - if ($frmUsrPass != $frmUsrPassV) { - SP_Common::printJSON(_('Las claves no coinciden'), 2); + if ($User->addUser()) { + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $User->getUserId(), $value); + $CustomFields->addCustomField(); + } + } + + SP\Common::printJSON(_('Usuario creado'), 0, $doActionOnClose); } - if ($objUser->addUser()) { - SP_Common::printJSON(_('Usuario creado'), 0, $doActionOnClose); + SP\Common::printJSON(_('Error al crear el usuario')); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDIT) { + if ($User->updateUser()) { + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $User->getUserId(), $value); + $CustomFields->updateCustomField(); + } + } + + SP\Common::printJSON(_('Usuario actualizado'), 0, $doActionOnClose); } - SP_Common::printJSON(_('Error al crear el usuario')); - } elseif ($frmAction == 2) { - if ($objUser->updateUser()) { - SP_Common::printJSON(_('Usuario actualizado'), 0, $doActionOnClose); - } - - SP_Common::printJSON(_('Error al actualizar el usuario')); + SP\Common::printJSON(_('Error al actualizar el usuario')); } - // Cambio de clave - } elseif ($frmAction == 3) { - if (SP_Util::demoIsEnabled() && $userLogin == 'demo') { - SP_Common::printJSON(_('Ey, esto es una DEMO!!')); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDITPASS) { + + + if (SP\Util::demoIsEnabled() && UserUtil::getUserLoginById($itemId) == 'demo') { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); + } elseif (!$User->getUserPass() || !$userPassR) { + SP\Common::printJSON(_('La clave no puede estar en blanco'), 2); } - if (!$frmUsrPass || !$frmUsrPassV) { - SP_Common::printJSON(_('La clave no puede estar en blanco'), 2); + // Desencriptar con la clave RSA + $CryptPKI = new \SP\CryptPKI(); + $clearUserPass = $CryptPKI->decryptRSA(base64_decode($User->getUserPass())); + $clearUserPassR = $CryptPKI->decryptRSA(base64_decode($userPassR)); + + if ($clearUserPass != $clearUserPassR) { + SP\Common::printJSON(_('Las claves no coinciden'), 2); } - if ($frmUsrPass != $frmUsrPassV) { - SP_Common::printJSON(_('Las claves no coinciden'), 2); + $User->setUserPass($clearUserPass); + + if ($User->updateUserPass()) { + SP\Common::printJSON(_('Clave actualizada'), 0); } - $objUser->userId = $frmItemId; - $objUser->userPass = $frmUsrPass; - - if ($objUser->updateUserPass()) { - SP_Common::printJSON(_('Clave actualizada'), 0); - } - - SP_Common::printJSON(_('Error al modificar la clave')); + SP\Common::printJSON(_('Error al modificar la clave')); // Eliminar usuario - } elseif ($frmAction == 4) { - if (SP_Util::demoIsEnabled() && $userLogin == 'demo') { - SP_Common::printJSON(_('Ey, esto es una DEMO!!')); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_DELETE) { + if (SP\Util::demoIsEnabled() && UserUtil::getUserLoginById($itemId) == 'demo') { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); + } elseif ($User->getUserId() == SP\Session::getUserId()) { + SP\Common::printJSON(_('No es posible eliminar, usuario en uso')); } - $objUser->userId = $frmItemId; - - if ($frmItemId == $_SESSION["uid"]) { - SP_Common::printJSON(_('No es posible eliminar, usuario en uso')); + if ($User->deleteUser() && SP\CustomFields::deleteCustomFieldForItem($User->getUserId(), \SP\Controller\ActionsInterface::ACTION_USR_USERS)) { + SP\Common::printJSON(_('Usuario eliminado'), 0, $doActionOnClose); } - if ($objUser->deleteUser()) { - SP_Common::printJSON(_('Usuario eliminado'), 0, $doActionOnClose); - } - - SP_Common::printJSON(_('Error al eliminar el usuario')); + SP\Common::printJSON(_('Error al eliminar el usuario')); } - - SP_Common::printJSON(_('Acción Inválida')); -} elseif ($frmSaveType == 3 || $frmSaveType == 4) { +} elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_DELETE +) { // Variables POST del formulario - $frmGrpName = SP_Common::parseParams('p', 'name'); - $frmGrpDesc = SP_Common::parseParams('p', 'description'); + $frmGrpName = SP\Request::analyze('name'); + $frmGrpDesc = SP\Request::analyze('description'); + $frmGrpUsers = SP\Request::analyze('users'); - // Nuevo grupo o editar - if ($frmAction == 1 OR $frmAction == 2) { + if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT + ) { if (!$frmGrpName) { - SP_Common::printJSON(_('Es necesario un nombre de grupo'), 2); + SP\Common::printJSON(_('Es necesario un nombre de grupo'), 2); } - SP_Groups::$groupId = $frmItemId; - SP_Groups::$groupName = $frmGrpName; - SP_Groups::$groupDescription = $frmGrpDesc; + SP\Groups::$groupId = $itemId; + SP\Groups::$groupName = $frmGrpName; + SP\Groups::$groupDescription = $frmGrpDesc; - if (!SP_Groups::checkGroupExist()) { - SP_Common::printJSON(_('Nombre de grupo duplicado'), 2); + if (SP\Groups::checkGroupExist()) { + SP\Common::printJSON(_('Nombre de grupo duplicado'), 2); } - if ($frmAction == 1) { - if (SP_Groups::addGroup()) { - SP_Common::printJSON(_('Grupo creado'), 0, $doActionOnClose); + if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW) { + if (SP\Groups::addGroup($frmGrpUsers)) { + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, SP\Groups::$queryLastId, $value); + $CustomFields->addCustomField(); + } + } + + SP\Common::printJSON(_('Grupo creado'), 0, $doActionOnClose); } else { - SP_Common::printJSON(_('Error al crear el grupo')); + SP\Common::printJSON(_('Error al crear el grupo')); } - } else if ($frmAction == 2) { - if (SP_Groups::updateGroup()) { - SP_Common::printJSON(_('Grupo actualizado'), 0, $doActionOnClose); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT) { + if (SP\Groups::updateGroup($frmGrpUsers)) { + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $itemId, $value); + $CustomFields->updateCustomField(); + } + } + + SP\Common::printJSON(_('Grupo actualizado'), 0, $doActionOnClose); } - SP_Common::printJSON(_('Error al actualizar el grupo')); + SP\Common::printJSON(_('Error al actualizar el grupo')); } + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_DELETE) { + SP\Groups::$groupId = $itemId; - // Eliminar grupo - } elseif ($frmAction == 4) { - SP_Groups::$groupId = $frmItemId; - - $resGroupUse = SP_Groups::checkGroupInUse(); + $resGroupUse = SP\Groups::checkGroupInUse(); if ($resGroupUse['users'] > 0 || $resGroupUse['accounts'] > 0) { if ($resGroupUse['users'] > 0) { @@ -225,195 +241,304 @@ if ($frmSaveType == 1 || $frmSaveType == 2) { $uses[] = _('Cuentas') . " (" . $resGroupUse['accounts'] . ")"; } - SP_Common::printJSON(_('No es posible eliminar') . ';;' . _('Grupo en uso por:') . ';;' . implode(';;', $uses)); + SP\Common::printJSON(_('No es posible eliminar') . ';;' . _('Grupo en uso por:') . ';;' . implode(';;', $uses)); } else { - $groupName = SP_Groups::getGroupNameById($frmItemId); + $groupName = SP\Groups::getGroupNameById($itemId); - if (SP_Groups::deleteGroup()) { - SP_Common::printJSON(_('Grupo eliminado'), 0, $doActionOnClose); + if (SP\Groups::deleteGroup() && SP\CustomFields::deleteCustomFieldForItem($itemId, \SP\Controller\ActionsInterface::ACTION_USR_GROUPS)) { + SP\Common::printJSON(_('Grupo eliminado'), 0, $doActionOnClose); } - SP_Common::printJSON(_('Error al eliminar el grupo')); + SP\Common::printJSON(_('Error al eliminar el grupo')); } } - - SP_Common::printJSON(_('Acción Inválida')); -} elseif ($frmSaveType == 5 || $frmSaveType == 6) { - $profileProp = array(); +} elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_EDIT + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_DELETE +) { + $Profile = new \SP\Profile(); // Variables POST del formulario - $frmProfileName = SP_Common::parseParams('p', 'profile_name'); - SP_Profiles::$profileId = $frmItemId; + $name = SP\Request::analyze('profile_name'); - // Profile properties Array - $profileProp["pAccView"] = SP_Common::parseParams('p', 'profile_accview', 0, false, 1); - $profileProp["pAccViewPass"] = SP_Common::parseParams('p', 'profile_accviewpass', 0, false, 1); - $profileProp["pAccViewHistory"] = SP_Common::parseParams('p', 'profile_accviewhistory', 0, false, 1); - $profileProp["pAccEdit"] = SP_Common::parseParams('p', 'profile_accedit', 0, false, 1); - $profileProp["pAccEditPass"] = SP_Common::parseParams('p', 'profile_acceditpass', 0, false, 1); - $profileProp["pAccAdd"] = SP_Common::parseParams('p', 'profile_accadd', 0, false, 1); - $profileProp["pAccDel"] = SP_Common::parseParams('p', 'profile_accdel', 0, false, 1); - $profileProp["pAccFiles"] = SP_Common::parseParams('p', 'profile_accfiles', 0, false, 1); - $profileProp["pConfig"] = SP_Common::parseParams('p', 'profile_config', 0, false, 1); - $profileProp["pAppMgmtCat"] = SP_Common::parseParams('p', 'profile_categories', 0, false, 1); - $profileProp["pAppMgmtCust"] = SP_Common::parseParams('p', 'profile_customers', 0, false, 1); - $profileProp["pConfigMpw"] = SP_Common::parseParams('p', 'profile_configmpw', 0, false, 1); - $profileProp["pConfigBack"] = SP_Common::parseParams('p', 'profile_configback', 0, false, 1); - $profileProp["pUsers"] = SP_Common::parseParams('p', 'profile_users', 0, false, 1); - $profileProp["pGroups"] = SP_Common::parseParams('p', 'profile_groups', 0, false, 1); - $profileProp["pProfiles"] = SP_Common::parseParams('p', 'profile_profiles', 0, false, 1); - $profileProp["pEventlog"] = SP_Common::parseParams('p', 'profile_eventlog', 0, false, 1); + $Profile->setName($name); + $Profile->setId(SP\Request::analyze('itemId', 0)); + $Profile->setAccAdd(SP\Request::analyze('profile_accadd', 0, false, 1)); + $Profile->setAccView(SP\Request::analyze('profile_accview', 0, false, 1)); + $Profile->setAccViewPass(SP\Request::analyze('profile_accviewpass', 0, false, 1)); + $Profile->setAccViewHistory(SP\Request::analyze('profile_accviewhistory', 0, false, 1)); + $Profile->setAccEdit(SP\Request::analyze('profile_accedit', 0, false, 1)); + $Profile->setAccEditPass(SP\Request::analyze('profile_acceditpass', 0, false, 1)); + $Profile->setAccDelete(SP\Request::analyze('profile_accdel', 0, false, 1)); + $Profile->setAccFiles(SP\Request::analyze('profile_accfiles', 0, false, 1)); + $Profile->setConfigGeneral(SP\Request::analyze('profile_config', 0, false, 1)); + $Profile->setConfigEncryption(SP\Request::analyze('profile_configmpw', 0, false, 1)); + $Profile->setConfigBackup(SP\Request::analyze('profile_configback', 0, false, 1)); + $Profile->setConfigImport(SP\Request::analyze('profile_configimport', 0, false, 1)); + $Profile->setMgmCategories(SP\Request::analyze('profile_categories', 0, false, 1)); + $Profile->setMgmCustomers(SP\Request::analyze('profile_customers', 0, false, 1)); + $Profile->setMgmCustomFields(SP\Request::analyze('profile_customfields', 0, false, 1)); + $Profile->setMgmUsers(SP\Request::analyze('profile_users', 0, false, 1)); + $Profile->setMgmGroups(SP\Request::analyze('profile_groups', 0, false, 1)); + $Profile->setMgmProfiles(SP\Request::analyze('profile_profiles', 0, false, 1)); + $Profile->setMgmApiTokens(SP\Request::analyze('profile_apitokens', 0, false, 1)); + $Profile->setEvl(SP\Request::analyze('profile_eventlog', 0, false, 1)); - // Nuevo perfil o editar - if ($frmAction == 1 OR $frmAction == 2) { - if (!$frmProfileName) { - SP_Common::printJSON(_('Es necesario un nombre de perfil'), 2); + if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_EDIT + ) { + if (!$Profile->getName()) { + SP\Common::printJSON(_('Es necesario un nombre de perfil'), 2); + } elseif (SP\Profile::checkProfileExist($Profile->getId(), $Profile->getName())) { + SP\Common::printJSON(_('Nombre de perfil duplicado'), 2); } - SP_Profiles::$profileName = $frmProfileName; - - if (!SP_Profiles::checkProfileExist()) { - SP_Common::printJSON(_('Nombre de perfil duplicado'), 2); - } - - if ($frmAction == 1) { - if (SP_Profiles::addProfile($profileProp)) { - SP_Common::printJSON(_('Perfil creado'), 0, $doActionOnClose); + if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_NEW) { + if ($Profile->profileAdd()) { + SP\Common::printJSON(_('Perfil creado'), 0, $doActionOnClose); } - SP_Common::printJSON(_('Error al crear el perfil')); - } else if ($frmAction == 2) { - if (SP_Profiles::updateProfile($profileProp)) { - SP_Common::printJSON(_('Perfil actualizado'), 0, $doActionOnClose); + SP\Common::printJSON(_('Error al crear el perfil')); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_EDIT) { + if ($Profile->profileUpdate()) { + SP\Common::printJSON(_('Perfil actualizado'), 0, $doActionOnClose); } - SP_Common::printJSON(_('Error al actualizar el perfil')); + SP\Common::printJSON(_('Error al actualizar el perfil')); } - // Eliminar perfil - } elseif ($frmAction == 4) { - $resProfileUse = SP_Profiles::checkProfileInUse(); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_DELETE) { + $resProfileUse = SP\Profile::checkProfileInUse($Profile->getId()); if ($resProfileUse['users'] > 0) { $uses[] = _('Usuarios') . " (" . $resProfileUse['users'] . ")"; - SP_Common::printJSON(_('No es posible eliminar') . ';;' . _('Perfil en uso por:') . ';;' . implode(';;', $uses)); + SP\Common::printJSON(_('No es posible eliminar') . ';;' . _('Perfil en uso por:') . ';;' . implode(';;', $uses)); } else { - $profileName = SP_Profiles::getProfileNameById($frmItemId); - - if (SP_Profiles::deleteProfile()) { - $message['action'] = _('Eliminar Perfil'); - $message['text'][] = SP_Html::strongText(_('Perfil') . ': ') . $profileName; - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - SP_Common::printJSON(_('Perfil eliminado'), 0, $doActionOnClose); + if ($Profile->profileDelete()) { + SP\Common::printJSON(_('Perfil eliminado'), 0, $doActionOnClose); } - SP_Common::printJSON(_('Error al eliminar el perfil')); + SP\Common::printJSON(_('Error al eliminar el perfil')); } } - - SP_Common::printJSON(_('Acción Inválida')); -} elseif ($frmSaveType == 7 || $frmSaveType == 8) { +} elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_DELETE +) { // Variables POST del formulario - $frmCustomerName = SP_Common::parseParams('p', 'name'); - $frmCustomerDesc = SP_Common::parseParams('p', 'description'); + $frmCustomerName = SP\Request::analyze('name'); + $frmCustomerDesc = SP\Request::analyze('description'); - // Nuevo cliente o editar - if ($frmAction == 1 OR $frmAction == 2) { + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT + ) { if (!$frmCustomerName) { - SP_Common::printJSON(_('Es necesario un nombre de cliente'), 2); + SP\Common::printJSON(_('Es necesario un nombre de cliente'), 2); } - SP_Customer::$customerName = $frmCustomerName; - SP_Customer::$customerDescription = $frmCustomerDesc; + SP\Customer::$customerName = $frmCustomerName; + SP\Customer::$customerDescription = $frmCustomerDesc; - if (!SP_Customer::checkDupCustomer($frmItemId)) { - SP_Common::printJSON(_('Nombre de cliente duplicado'), 2); - } + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_NEW) { + try { + SP\Customer::addCustomer($itemId); - if ($frmAction == 1) { - if (SP_Customer::addCustomer()) { - SP_Common::printJSON(_('Cliente creado'), 0, $doActionOnClose); - } else { - SP_Common::printJSON(_('Error al crear el cliente')); - } - } else if ($frmAction == 2) { - if (SP_Customer::updateCustomer($frmItemId)) { - SP_Common::printJSON(_('Cliente actualizado'), 0, $doActionOnClose); + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, SP\Customer::$customerLastId, $value); + $CustomFields->addCustomField(); + } + } + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); } - SP_Common::printJSON(_('Error al actualizar el cliente')); - } + SP\Common::printJSON(_('Cliente creado'), 0, $doActionOnClose); + } else if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT) { + try { + SP\Customer::updateCustomer($itemId); - // Eliminar cliente - } elseif ($frmAction == 4) { - $resCustomerUse = SP_Customer::checkCustomerInUse($frmItemId); - - if ($resCustomerUse['accounts'] > 0) { - $uses[] = _('Cuentas') . " (" . $resCustomerUse['accounts'] . ")"; - - SP_Common::printJSON(_('No es posible eliminar') . ';;' . _('Cliente en uso por:') . ';;' . implode(';;', $uses)); - } else { - - if (SP_Customer::delCustomer($frmItemId)) { - SP_Common::printJSON(_('Cliente eliminado'), 0, $doActionOnClose); + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $itemId, $value); + $CustomFields->updateCustomField(); + } + } + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); } - SP_Common::printJSON(_('Error al eliminar el cliente')); + SP\Common::printJSON(_('Cliente actualizado'), 0, $doActionOnClose); } + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_DELETE) { + try { + SP\Customer::deleteCustomer($itemId); + SP\CustomFields::deleteCustomFieldForItem($itemId, \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage()); + } + + SP\Common::printJSON(_('Cliente eliminado'), 0, $doActionOnClose); } - - SP_Common::printJSON(_('Acción Inválida')); -} elseif ($frmSaveType == 9 || $frmSaveType == 10) { +} elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_EDIT + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_DELETE +) { // Variables POST del formulario - $frmCategoryName = SP_Common::parseParams('p', 'name'); - $frmCategoryDesc = SP_Common::parseParams('p', 'description'); + $frmCategoryName = SP\Request::analyze('name'); + $frmCategoryDesc = SP\Request::analyze('description'); - // Nueva categoría o editar - if ($frmAction == 1 OR $frmAction == 2) { + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_EDIT + ) { if (!$frmCategoryName) { - SP_Common::printJSON(_('Es necesario un nombre de categoría'), 2); + SP\Common::printJSON(_('Es necesario un nombre de categoría'), 2); } - SP_Category::$categoryName = $frmCategoryName; - SP_Category::$categoryDescription = $frmCategoryDesc; + SP\Category::$categoryName = $frmCategoryName; + SP\Category::$categoryDescription = $frmCategoryDesc; - if (!SP_Category::checkDupCategory($frmItemId)) { - SP_Common::printJSON(_('Nombre de categoría duplicado'), 2); - } + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_NEW) { + try { + SP\Category::addCategory(); - if ($frmAction == 1) { - if (SP_Category::addCategory()) { - SP_Common::printJSON(_('Categoría creada'), 0, $doActionOnClose); - } else { - SP_Common::printJSON(_('Error al crear la categoría')); - } - } else if ($frmAction == 2) { - if (SP_Category::updateCategory($frmItemId)) { - SP_Common::printJSON(_('Categoría actualizada'), 0, $doActionOnClose); + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, SP\Category::$categoryLastId, $value); + $CustomFields->addCustomField(); + } + } + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); } - SP_Common::printJSON(_('Error al actualizar la categoría')); - } + SP\Common::printJSON(_('Categoría creada'), 0, $doActionOnClose); + } else if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_EDIT) { + try { + SP\Category::updateCategory($itemId); - // Eliminar categoría - } elseif ($frmAction == 4) { - $resCategoryUse = SP_Category::checkCategoryInUse($frmItemId); - - if ($resCategoryUse !== true) { - SP_Common::printJSON(_('No es posible eliminar') . ';;' . _('Categoría en uso por:') . ';;' . $resCategoryUse); - } else { - - if (SP_Category::delCategory($frmItemId)) { - SP_Common::printJSON(_('Categoría eliminada'), 0, $doActionOnClose); + if (is_array($customFields)) { + foreach ($customFields as $id => $value) { + $CustomFields = new \SP\CustomFields($id, $itemId, $value); + $CustomFields->updateCustomField(); + } + } + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); } - SP_Common::printJSON(_('Error al eliminar la categoría')); + SP\Common::printJSON(_('Categoría actualizada'), 0, $doActionOnClose); } + + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_DELETE) { + try { + SP\Category::deleteCategory($itemId); + SP\CustomFields::deleteCustomFieldForItem($itemId, \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage()); + } + + SP\Common::printJSON(_('Categoría eliminada'), 0, $doActionOnClose); } +} elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_EDIT + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_DELETE +) { + $ApiTokens = new \SP\ApiTokens(); + $ApiTokens->setTokenId($itemId); + $ApiTokens->setUserId(SP\Request::analyze('users', 0)); + $ApiTokens->setActionId(SP\Request::analyze('actions', 0)); + $ApiTokens->setRefreshToken(SP\Request::analyze('refreshtoken', false, false, true)); - SP_Common::printJSON(_('Acción Inválida')); + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_EDIT) + { + if ($ApiTokens->getUserId() === 0 || $ApiTokens->getActionId() === 0) { + SP\Common::printJSON(_('Usuario o acción no indicado'), 2); + } + + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_NEW){ + try { + $ApiTokens->addToken(); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); + } + + SP\Common::printJSON(_('Autorización creada'), 0, $doActionOnClose); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_EDIT){ + try { + $ApiTokens->updateToken(); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); + } + + SP\Common::printJSON(_('Autorización actualizada'), 0, $doActionOnClose); + } + + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_APITOKENS_DELETE){ + try { + $ApiTokens->deleteToken(); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); + } + + SP\Common::printJSON(_('Autorización eliminada'), 0, $doActionOnClose); + } +} elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_DELETE +) { + // Variables POST del formulario + $frmFieldName = SP\Request::analyze('name'); + $frmFieldType = SP\Request::analyze('type', 0); + $frmFieldModule = SP\Request::analyze('module', 0); + $frmFieldHelp = SP\Request::analyze('help'); + $frmFieldRequired = SP\Request::analyze('required', false, false, true); + + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW + || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT) + { + if (!$frmFieldName) { + SP\Common::printJSON(_('Nombre del campo no indicado'), 2); + } elseif ($frmFieldType === 0) { + SP\Common::printJSON(_('Tipo del campo no indicado'), 2); + } elseif ($frmFieldModule === 0) { + SP\Common::printJSON(_('Módulo del campo no indicado'), 2); + } + + $CustomFieldDef = new \SP\CustomFieldDef($frmFieldName, $frmFieldType, $frmFieldModule); + $CustomFieldDef->setHelp($frmFieldHelp); + $CustomFieldDef->setRequired($frmFieldRequired); + + if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW){ + try { + $CustomFieldDef->addCustomField(); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); + } + + SP\Common::printJSON(_('Campo creado'), 0, $doActionOnClose); + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT){ + try { + $CustomFieldDef->setId($itemId); + $CustomFieldDef->updateCustomField(); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); + } + + SP\Common::printJSON(_('Campo actualizado'), 0, $doActionOnClose); + } + + } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMFIELDS_DELETE){ + try { + \SP\CustomFieldDef::deleteCustomField($itemId); + } catch (\SP\SPException $e) { + SP\Common::printJSON($e->getMessage(), 2); + } + + SP\Common::printJSON(_('Campo eliminado'), 0, $doActionOnClose); + } +} else { + SP\Common::printJSON(_('Acción Inválida')); } \ No newline at end of file diff --git a/ajax/ajax_backup.php b/ajax/ajax_backup.php index eb9ab966..3f37794d 100644 --- a/ajax/ajax_backup.php +++ b/ajax/ajax_backup.php @@ -24,36 +24,59 @@ */ define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); +SP\Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); } -$sk = SP_Common::parseParams('p', 'sk', false); +$sk = SP\Request::analyze('sk', false); -if (!$sk || !SP_Common::checkSessionKey($sk)) { - SP_Common::printJSON(_('CONSULTA INVÁLIDA')); +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); } -$doBackup = SP_Common::parseParams('p', 'backup', 0); -$frmOnCloseAction = SP_Common::parseParams('p', 'onCloseAction'); -$frmActiveTab = SP_Common::parseParams('p', 'activeTab', 0); +$actionId = SP\Request::analyze('actionId', 0); +$onCloseAction = SP\Request::analyze('onCloseAction'); +$activeTab = SP\Request::analyze('activeTab', 0); +$exportPassword = SP\Request::analyze('exportPwd', '', false, false, false); +$exportPasswordR = SP\Request::analyze('exportPwdR', '', false, false, false); -$doActionOnClose = "doAction('$frmOnCloseAction','',$frmActiveTab);"; +$doActionOnClose = "sysPassUtil.Common.doAction($actionId,'',$activeTab);"; -if ($doBackup) { - if (!SP_Backup::doBackup()) { - SP_Common::printJSON(_('Error al realizar el backup') . ';;' . _('Revise el registro de eventos para más detalles')); +if ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_BACKUP) { + if (!SP\Backup::doBackup()) { + SP\Log::writeNewLogAndEmail(_('Realizar Backup'), _('Error al realizar el backup')); + + SP\Common::printJSON(_('Error al realizar el backup') . ';;' . _('Revise el registro de eventos para más detalles')); } - $message['action'] = _('Realizar Backup'); - $message['text'][] = _('Copia de la aplicación y base de datos realizada correctamente'); + SP\Log::writeNewLogAndEmail(_('Realizar Backup'), _('Copia de la aplicación y base de datos realizada correctamente')); - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); + SP\Common::printJSON(_('Proceso de backup finalizado'), 0, $doActionOnClose); +} elseif ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_EXPORT) { + try { + $CryptPKI = new \SP\CryptPKI(); + $clearExportPwd = $CryptPKI->decryptRSA(base64_decode($exportPassword)); + $clearExportPwdR = $CryptPKI->decryptRSA(base64_decode($exportPasswordR)); + } catch (Exception $e) { + SP\Common::printJSON(_('Error en clave RSA')); + } - SP_Common::printJSON(_('Proceso de backup finalizado'), 0, $doActionOnClose); + if (!empty($clearExportPwd) && $clearExportPwd !== $clearExportPwdR){ + SP\Common::printJSON(_('Las claves no coinciden')); + } + + if(!\SP\XmlExport::doExport($clearExportPwd)){ + SP\Log::writeNewLogAndEmail(_('Realizar Exportación'), _('Error al realizar la exportación de cuentas')); + + SP\Common::printJSON(_('Error al realizar la exportación') . ';;' . _('Revise el registro de eventos para más detalles')); + } + + SP\Log::writeNewLogAndEmail(_('Realizar Exportación'), _('Exportación de cuentas realizada correctamente')); + + SP\Common::printJSON(_('Proceso de exportación finalizado'), 0, $doActionOnClose); } \ No newline at end of file diff --git a/ajax/ajax_checkLdap.php b/ajax/ajax_checkLdap.php index 15049006..c492e8f4 100644 --- a/ajax/ajax_checkLdap.php +++ b/ajax/ajax_checkLdap.php @@ -23,35 +23,38 @@ * */ +use SP\Request; + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); } -$sk = SP_Common::parseParams('p', 'sk', false); +$sk = SP\Request::analyze('sk', false); -if (!$sk || !SP_Common::checkSessionKey($sk)) { - SP_Common::printJSON(_('CONSULTA INVÁLIDA')); +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); } -$frmLdapServer = SP_Common::parseParams('p', 'ldap_server'); -$frmLdapBase = SP_Common::parseParams('p', 'ldap_base'); -$frmLdapGroup = SP_Common::parseParams('p', 'ldap_group'); -$frmLdapBindUser = SP_Common::parseParams('p', 'ldap_binduser'); -$frmLdapBindPass = SP_Common::parseParams('p', 'ldap_bindpass'); +$frmLdapServer = SP\Request::analyze('ldap_server'); +$frmLdapBase = SP\Request::analyze('ldap_base'); +$frmLdapGroup = SP\Request::analyze('ldap_group'); +$frmLdapBindUser = SP\Request::analyze('ldap_binduser'); +$frmLdapBindPass = SP\Request::analyze('ldap_bindpass'); if (!$frmLdapServer || !$frmLdapBase || !$frmLdapBindUser || !$frmLdapBindPass) { - SP_Common::printJSON(_('Los parámetros de LDAP no están configurados')); + SP\Common::printJSON(_('Los parámetros de LDAP no están configurados')); } -$resCheckLdap = SP_LDAP::checkLDAPConn($frmLdapServer, $frmLdapBindUser, $frmLdapBindPass, $frmLdapBase, $frmLdapGroup); +$resCheckLdap = SP\Ldap::checkLDAPConn($frmLdapServer, $frmLdapBindUser, $frmLdapBindPass, $frmLdapBase, $frmLdapGroup); if ($resCheckLdap === false) { - SP_Common::printJSON(_('Error de conexión a LDAP') . ';;' . _('Revise el registro de eventos para más detalles')); + SP\Common::printJSON(_('Error de conexión a LDAP') . ';;' . _('Revise el registro de eventos para más detalles')); } else { - SP_Common::printJSON(_('Conexión a LDAP correcta') . ';;' . _('Objetos encontrados') . ': ' . $resCheckLdap, 0); + SP\Common::printJSON(_('Conexión a LDAP correcta') . ';;' . _('Objetos encontrados') . ': ' . $resCheckLdap, 0); } \ No newline at end of file diff --git a/ajax/ajax_checkUpds.php b/ajax/ajax_checkUpds.php index 988e27df..25d6fd78 100644 --- a/ajax/ajax_checkUpds.php +++ b/ajax/ajax_checkUpds.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -23,25 +23,13 @@ * */ + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('GET'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -$checkVersion = SP_Common::parseParams('s', 'UPDATED', false, true); +SP\Request::checkReferer('GET'); -// Una vez por sesión -if (!$checkVersion) { - $_SESSION["UPDATED"] = $checkVersion = SP_Util::checkUpdates(); -} - -session_write_close(); - -if (is_array($checkVersion)) { - $title = _('Descargar nueva versión') . ' - ' . $checkVersion['version'] . '

' . nl2br($checkVersion['description']); - echo ' ' . $checkVersion['title'] . ''; -} elseif ($checkVersion === true) { - echo ''; -} elseif ($checkVersion === false) { - echo '!'; -} \ No newline at end of file +$controller = new \SP\Controller\MainC(null, null, false); +$controller->getCheckUpdates(); +$controller->view(); \ No newline at end of file diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php index 585c7772..100aa1d6 100644 --- a/ajax/ajax_configSave.php +++ b/ajax/ajax_configSave.php @@ -1,5 +1,4 @@ = 16384) { + SP\Common::printJSON(_('El tamaño máximo por archivo es de 16MB')); } - } else { - SP_Config::setValue("mail_enabled", false); - SP_Config::setValue("mail_requestsenabled", false); - SP_Config::setValue("mail_authenabled", false); + + // Proxy + $proxyEnabled = SP\Request::analyze('proxy_enabled', false, false, true); + $proxyServer = SP\Request::analyze('proxy_server'); + $proxyPort = SP\Request::analyze('proxy_port', 0); + $proxyUser = SP\Request::analyze('proxy_user'); + $proxyPass = SP\Request::analyze('proxy_pass'); + + + // Valores para Proxy + if ($proxyEnabled && (!$proxyServer || !$proxyPort)) { + SP\Common::printJSON(_('Faltan parámetros de Proxy')); + } elseif ($proxyEnabled) { + SP\Config::setValue('proxy_enabled', true); + SP\Config::setValue('proxy_server', $proxyServer); + SP\Config::setValue('proxy_port', $proxyPort); + SP\Config::setValue('proxy_user', $proxyUser); + SP\Config::setValue('proxy_pass', $proxyPass); + } else { + SP\Config::setValue('proxy_enabled', false); + } + + $log->addDescription(_('General')); + } elseif ( $actionId === SP\Controller\ActionsInterface::ACTION_CFG_WIKI ) { + // Wiki + $wikiEnabled = SP\Request::analyze('wiki_enabled', false, false, true); + $wikiSearchUrl = SP\Request::analyze('wiki_searchurl'); + $wikiPageUrl = SP\Request::analyze('wiki_pageurl'); + $wikiFilter = SP\Request::analyze('wiki_filter'); + + // Valores para la conexión a la Wiki + if ($wikiEnabled && (!$wikiSearchUrl || !$wikiPageUrl || !$wikiFilter)) { + SP\Common::printJSON(_('Faltan parámetros de Wiki')); + } elseif ($wikiEnabled) { + SP\Config::setValue('wiki_enabled', true); + SP\Config::setValue('wiki_searchurl', $wikiSearchUrl); + SP\Config::setValue('wiki_pageurl', $wikiPageUrl); + SP\Config::setValue('wiki_filter', $wikiFilter); + } else { + SP\Config::setValue('wiki_enabled', false); + } + + $log->addDescription(_('Wiki')); + } elseif ( $actionId === SP\Controller\ActionsInterface::ACTION_CFG_LDAP ) { + // LDAP + $ldapEnabled = SP\Request::analyze('ldap_enabled', false, false, true); + $ldapADSEnabled = SP\Request::analyze('ldap_ads', false, false, true); + $ldapServer = SP\Request::analyze('ldap_server'); + $ldapBase = SP\Request::analyze('ldap_base'); + $ldapGroup = SP\Request::analyze('ldap_group'); + $ldapDefaultGroup = SP\Request::analyze('ldap_defaultgroup', 0); + $ldapDefaultProfile = SP\Request::analyze('ldap_defaultprofile', 0); + $ldapBindUser = SP\Request::analyze('ldap_binduser'); + $ldapBindPass = SP\Request::analyze('ldap_bindpass', '', false, false, false); + + // Valores para la configuración de LDAP + if ($ldapEnabled && (!$ldapServer || !$ldapBase || !$ldapBindUser)) { + SP\Common::printJSON(_('Faltan parámetros de LDAP')); + } elseif ($ldapEnabled) { + SP\Config::setValue('ldap_enabled', true); + SP\Config::setValue('ldap_ads', $ldapADSEnabled); + SP\Config::setValue('ldap_server', $ldapServer); + SP\Config::setValue('ldap_base', $ldapBase); + SP\Config::setValue('ldap_group', $ldapGroup); + SP\Config::setValue('ldap_defaultgroup', $ldapDefaultGroup); + SP\Config::setValue('ldap_defaultprofile', $ldapDefaultProfile); + SP\Config::setValue('ldap_binduser', $ldapBindUser); + SP\Config::setValue('ldap_bindpass', $ldapBindPass); + } else { + SP\Config::setValue('ldap_enabled', false); + } + + $log->addDescription(_('LDAP')); + } elseif ( $actionId === SP\Controller\ActionsInterface::ACTION_CFG_MAIL ) { + // Mail + $mailEnabled = SP\Request::analyze('mail_enabled', false, false, true); + $mailServer = SP\Request::analyze('mail_server'); + $mailPort = SP\Request::analyze('mail_port', 25); + $mailUser = SP\Request::analyze('mail_user'); + $mailPass = SP\Request::analyze('mail_pass', '', false, false, false); + $mailSecurity = SP\Request::analyze('mail_security'); + $mailFrom = SP\Request::analyze('mail_from'); + $mailRequests = SP\Request::analyze('mail_requestsenabled', false, false, true); + $mailAuth = SP\Request::analyze('mail_authenabled', false, false, true); + + // Valores para la configuración del Correo + if ($mailEnabled && (!$mailServer || !$mailFrom)) { + SP\Common::printJSON(_('Faltan parámetros de Correo')); + } elseif ($mailEnabled) { + SP\Config::setValue('mail_enabled', true); + SP\Config::setValue('mail_requestsenabled', $mailRequests); + SP\Config::setValue('mail_server', $mailServer); + SP\Config::setValue('mail_port', $mailPort); + SP\Config::setValue('mail_security', $mailSecurity); + SP\Config::setValue('mail_from', $mailFrom); + + if ($mailAuth) { + SP\Config::setValue('mail_authenabled', $mailAuth); + SP\Config::setValue('mail_user', $mailUser); + SP\Config::setValue('mail_pass', $mailPass); + } + } else { + SP\Config::setValue('mail_enabled', false); + SP\Config::setValue('mail_requestsenabled', false); + SP\Config::setValue('mail_authenabled', false); + } + + $log->addDescription(_('Correo')); } - if ($frmAllowedSize > 16384) { - SP_Common::printJSON(_('El tamaño máximo de archivo es de 16MB')); + $log->writeLog(); + + SP\Email::sendEmail($log); + + if ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_GENERAL) { + // Recargar la aplicación completa para establecer nuevos valores + SP\Util::reload(); } - SP_Config::setValue("account_link", $frmAccountLink); - SP_Config::setValue("account_count", $frmAccountCount); - SP_Config::setValue("sitelang", $frmSiteLang); - SP_Config::setValue("session_timeout", $frmSessionTimeout); - SP_Config::setValue("log_enabled", $frmLog); - SP_Config::setValue("debug", $frmDebug); - SP_Config::setValue("maintenance", $frmMaintenance); - SP_Config::setValue("checkupdates", $frmCheckUpdates); - SP_Config::setValue("files_enabled", $frmFiles); - SP_Config::setValue("resultsascards", $frmResultsAsCards); - SP_Config::setValue("globalsearch", $frmGlobalSearch); - SP_Config::setValue("files_allowed_size", $frmAllowedSize); - SP_Config::setValue("files_allowed_exts", $frmAllowedExts); + SP\Common::printJSON(_('Configuración actualizada'), 0, $doActionOnClose); +} elseif ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_ENCRYPTION) { + $currentMasterPass = SP\Request::analyze('curMasterPwd', '', false, false, false); + $newMasterPass = SP\Request::analyze('newMasterPwd', '', false, false, false); + $newMasterPassR = SP\Request::analyze('newMasterPwdR', '', false, false, false); + $confirmPassChange = SP\Request::analyze('confirmPassChange', 0, false, 1); + $noAccountPassChange = SP\Request::analyze('chkNoAccountChange', 0, false, 1); - $message['action'] = _('Modificar Configuración'); - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - // Recargar la aplicación completa para establecer nuevos valores - SP_Util::reload(); - - SP_Common::printJSON(_('Configuración actualizada'), 0, $doActionOnClose); -} elseif ($frmAction == "crypt") { - $currentMasterPass = SP_Common::parseParams('p', 'curMasterPwd', '', false, false, false); - $newMasterPass = SP_Common::parseParams('p', 'newMasterPwd', '', false, false, false); - $newMasterPassR = SP_Common::parseParams('p', 'newMasterPwdR', '', false, false, false); - $confirmPassChange = SP_Common::parseParams('p', 'confirmPassChange', 0, false, 1); - $noAccountPassChange = SP_Common::parseParams('p', 'chkNoAccountChange', 0, false, 1); - - if (!SP_Users::checkUserUpdateMPass()) { - SP_Common::printJSON(_('Clave maestra actualizada') . ';;' . _('Reinicie la sesión para cambiarla')); + if (!UserUtil::checkUserUpdateMPass()) { + SP\Common::printJSON(_('Clave maestra actualizada') . ';;' . _('Reinicie la sesión para cambiarla')); + } elseif ($newMasterPass == '' && $currentMasterPass == '') { + SP\Common::printJSON(_('Clave maestra no indicada')); + } elseif ($confirmPassChange == 0) { + SP\Common::printJSON(_('Se ha de confirmar el cambio de clave')); } - if ($newMasterPass == "" && $currentMasterPass == "") { - SP_Common::printJSON(_('Clave maestra no indicada')); + try { + // Desencriptar con la clave RSA + $CryptPKI = new \SP\CryptPKI(); + $clearCurMasterPass = $CryptPKI->decryptRSA(base64_decode($currentMasterPass)); + $clearNewMasterPass = $CryptPKI->decryptRSA(base64_decode($newMasterPass)); + $clearNewMasterPassR = $CryptPKI->decryptRSA(base64_decode($newMasterPassR)); + } catch (Exception $e) { + SP\Common::printJSON(_('Error en clave RSA')); } - if ($confirmPassChange == 0) { - SP_Common::printJSON(_('Se ha de confirmar el cambio de clave')); + if ($clearNewMasterPass == $clearCurMasterPass) { + SP\Common::printJSON(_('Las claves son idénticas')); + } elseif ($clearNewMasterPass != $clearNewMasterPassR) { + SP\Common::printJSON(_('Las claves maestras no coinciden')); + } elseif (!SP\Crypt::checkHashPass($clearCurMasterPass, SP\Config::getConfigDbValue('masterPwd'))) { + SP\Common::printJSON(_('La clave maestra actual no coincide')); } - if ($newMasterPass == $currentMasterPass) { - SP_Common::printJSON(_('Las claves son idénticas')); - } - - if ($newMasterPass != $newMasterPassR) { - SP_Common::printJSON(_('Las claves maestras no coinciden')); - } - - if (!SP_Crypt::checkHashPass($currentMasterPass, SP_Config::getConfigValue("masterPwd"))) { - SP_Common::printJSON(_('La clave maestra actual no coincide')); - } - - $hashMPass = SP_Crypt::mkHashPassword($newMasterPass); + $hashMPass = SP\Crypt::mkHashPassword($clearNewMasterPass); if (!$noAccountPassChange) { - $objAccount = new SP_Account; + $Account = new SP\Account(); - if (!$objAccount->updateAllAccountsMPass($currentMasterPass, $newMasterPass)) { - SP_Common::printJSON(_('Errores al actualizar las claves de las cuentas')); + if (!$Account->updateAccountsMasterPass($clearCurMasterPass, $clearNewMasterPass)) { + SP\Common::printJSON(_('Errores al actualizar las claves de las cuentas')); } - $objAccount->updateAllAccountsHistoryMPass($currentMasterPass, $newMasterPass, $hashMPass); + $AccountHistory = new SP\AccountHistory(); + + if (!$AccountHistory->updateAccountsMasterPass($clearCurMasterPass, $clearNewMasterPass, $hashMPass)) { + SP\Common::printJSON(_('Errores al actualizar las claves de las cuentas del histórico')); + } } - if (SP_Util::demoIsEnabled()) { - SP_Common::printJSON(_('Ey, esto es una DEMO!!')); + if (SP\Util::demoIsEnabled()) { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); } - SP_Config::$arrConfigValue["masterPwd"] = $hashMPass; - SP_Config::$arrConfigValue["lastupdatempass"] = time(); + SP\Config::getConfigDb(); + SP\Config::setArrConfigValue('masterPwd', $hashMPass); + SP\Config::setArrConfigValue('lastupdatempass', time()); - if (SP_Config::writeConfig()) { - $message['action'] = _('Actualizar Clave Maestra'); + if (SP\Config::writeConfigDb()) { + SP\Log::writeNewLogAndEmail(_('Actualizar Clave Maestra')); - SP_Common::sendEmail($message); - SP_Common::printJSON(_('Clave maestra actualizada'), 0); + SP\Common::printJSON(_('Clave maestra actualizada'), 0); + } else { + SP\Common::printJSON(_('Error al guardar el hash de la clave maestra')); } - SP_Common::printJSON(_('Error al guardar el hash de la clave maestra')); -} elseif ($frmAction == "flpass") { - $passLogin = SP_Config::setFirstLoginPass(); +} elseif ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_ENCRYPTION_TEMPPASS) { + $tempMasterMaxTime = SP\Request::analyze('tmpass_maxtime', 3600); + $tempMasterPass = SP\Config::setTempMasterPass($tempMasterMaxTime); - if (!empty($passLogin)){ - $message['action'] = _('Generar Clave Temporal'); - $message['text'][] = SP_Html::strongText(_('Clave') . ": ") . $passLogin; + if (!empty($tempMasterPass)) { + SP\Email::sendEmail(new \SP\Log(_('Generar Clave Temporal'), SP\Html::strongText(_('Clave') . ': ') . $tempMasterPass)); - SP_Common::sendEmail($message); - SP_Common::printJSON(_('Clave Temporal Generada'), 0, $doActionOnClose); + SP\Common::printJSON(_('Clave Temporal Generada'), 0, $doActionOnClose); } } else { - SP_Common::printJSON(_('Acción Inválida')); + SP\Common::printJSON(_('Acción Inválida')); } \ No newline at end of file diff --git a/ajax/ajax_doLogin.php b/ajax/ajax_doLogin.php index cdd27d35..808053e4 100644 --- a/ajax/ajax_doLogin.php +++ b/ajax/ajax_doLogin.php @@ -1,5 +1,4 @@ decryptRSA(base64_decode($userPass)); +} catch (Exception $e) { + SP\Common::printJSON(_('Error en clave RSA')); +} -$objUser = new SP_Users; -$objUser->userLogin = $userLogin; -$objUser->userPass = $userPass; -$objUser->userName = SP_Auth::$userName; -$objUser->userEmail = SP_Auth::$userEmail; +$User = new SP\User(); +$User->setUserLogin($userLogin); +$User->setUserPass($clearUserPass); + +if ($resLdap = SP\Auth::authUserLDAP($userLogin, $clearUserPass)) { + $User->setUserName(SP\Auth::$userName); + $User->setUserEmail(SP\Auth::$userEmail); +} + +$Log = new \SP\Log(_('Inicio sesión')); // Autentificamos por LDAP if ($resLdap === true) { - $message['action'] = _('Inicio sesión (LDAP)'); + $Log->addDescription('(LDAP)'); + $Log->addDescription(sprintf('%s : %s', _('Servidor Login'), \SP\Ldap::getLdapServer())); // Verificamos si el usuario existe en la BBDD - if (!$objUser->checkLDAPUserInDB()) { + if (!UserLdap::checkLDAPUserInDB($userLogin)) { // Creamos el usuario de LDAP en MySQL - if (!$objUser->newUserLDAP()) { - $message['text'][] = _('Error al guardar los datos de LDAP'); - SP_Log::wrLogInfo($message); + if (!\SP\UserLdap::newUserLDAP($User)) { + $Log->addDescription(_('Error al guardar los datos de LDAP')); + $Log->writeLog(); - SP_Common::printJSON(_('Error interno')); + SP\Common::printJSON(_('Error interno')); } } else { // Actualizamos la clave del usuario en MySQL - if (!$objUser->updateLDAPUserInDB()) { - $message['text'][] = _('Error al actualizar la clave del usuario en la BBDD'); - SP_Log::wrLogInfo($message); + if (!UserLdap::updateLDAPUserInDB($User)) { + $Log->addDescription(_('Error al actualizar la clave del usuario en la BBDD')); + $Log->writeLog(); - SP_Common::printJSON(_('Error interno')); + SP\Common::printJSON(_('Error interno')); } } } else if ($resLdap == 49) { - $message['action'] = _('Inicio sesión (LDAP)'); - $message['text'][] = _('Login incorrecto'); - $message['text'][] = _('Usuario') . ": " . $userLogin; - SP_Log::wrLogInfo($message); + $Log->addDescription('(LDAP)'); + $Log->addDescription(_('Login incorrecto')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); - SP_Common::printJSON(_('Usuario/Clave incorrectos')); + SP\Common::printJSON(_('Usuario/Clave incorrectos')); } else if ($resLdap === 701) { - $message['action'] = _('Inicio sesión (LDAP)'); - $message['text'][] = _('Cuenta expirada'); - $message['text'][] = _('Usuario') . ": " . $userLogin; - SP_Log::wrLogInfo($message); + $Log->addDescription('(LDAP)'); + $Log->addDescription(_('Cuenta expirada')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); - SP_Common::printJSON(_('Cuenta expirada')); + SP\Common::printJSON(_('Cuenta expirada')); } else if ($resLdap === 702) { - $message['action'] = _('Inicio sesión (LDAP)'); - $message['text'][] = _('El usuario no tiene grupos asociados'); - $message['text'][] = _('Usuario') . ": " . $userLogin; - SP_Log::wrLogInfo($message); + $Log->addDescription('(LDAP)'); + $Log->addDescription(_('El usuario no tiene grupos asociados')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); - SP_Common::printJSON(_('Usuario/Clave incorrectos')); + SP\Common::printJSON(_('Usuario/Clave incorrectos')); } else { // Autentificamos por MySQL (ha fallado LDAP) - $message['action'] = _('Inicio sesión (MySQL)'); + $Log->resetDescription(); + $Log->addDescription('(MySQL)'); // Autentificamos con la BBDD - if (!SP_Auth::authUserMySQL($userLogin, $userPass)) { - $message['text'][] = _('Login incorrecto'); - $message['text'][] = _('Usuario') . ": " . $userLogin; - SP_Log::wrLogInfo($message); + if (!SP\Auth::authUserMySQL($userLogin, $clearUserPass)) { + $Log->addDescription(_('Login incorrecto')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); - SP_Common::printJSON(_('Usuario/Clave incorrectos')); + SP\Common::printJSON(_('Usuario/Clave incorrectos')); } } // Comprobar si el usuario está deshabilitado -if (SP_Users::checkUserIsDisabled($userLogin)) { - $message['text'][] = _('Usuario deshabilitado'); - $message['text'][] = _('Usuario') . ": " . $userLogin; - SP_Log::wrLogInfo($message); +if (UserUtil::checkUserIsDisabled($userLogin)) { + $Log->addDescription(_('Usuario deshabilitado')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); - SP_Common::printJSON(_('Usuario deshabilitado')); + SP\Common::printJSON(_('Usuario deshabilitado')); } // Obtenemos los datos del usuario -if (!$objUser->getUserInfo()) { - $message['text'][] = _('Error al obtener los datos del usuario de la BBDD'); - SP_Log::wrLogInfo($message); +if (!$User->getUserInfo()) { + $Log->addDescription(_('Error al obtener los datos del usuario de la BBDD')); + $Log->writeLog(); - SP_Common::printJSON(_('Error interno')); + SP\Common::printJSON(_('Error interno')); } // Comprobamos que la clave maestra del usuario es correcta y está actualizada -if (!$masterPass && (!$objUser->checkUserMPass() || !SP_Users::checkUserUpdateMPass($userLogin))) { - SP_Common::printJSON(_('La clave maestra no ha sido guardada o es incorrecta'), 3); +if (!$masterPass + && (!UserUtil::checkUserMPass($User) || !UserUtil::checkUserUpdateMPass($userLogin)) +) { + SP\Common::printJSON(_('La clave maestra no ha sido guardada o es incorrecta'), 3); } elseif ($masterPass) { - if(SP_Config::checkFirstLoginPass($masterPass)){ - $masterPass = SP_Config::getFirstLoginPass($masterPass); + $clearMasterPass = $CryptPKI->decryptRSA(base64_decode($masterPass)); + + if (SP\Config::checkTempMasterPass($clearMasterPass)) { + $clearMasterPass = SP\Config::getTempMasterPass($clearMasterPass); } - if (!$objUser->updateUserMPass($masterPass)) { - $message['text'][] = _('Clave maestra incorrecta'); - SP_Log::wrLogInfo($message); + if (!$User->updateUserMPass($clearMasterPass)) { + $Log->addDescription(_('Clave maestra incorrecta')); + $Log->writeLog(); - SP_Common::printJSON(_('Clave maestra incorrecta'), 4); + SP\Common::printJSON(_('Clave maestra incorrecta'), 4); } } // Comprobar si se ha forzado un cambio de clave -if ($objUser->userChangePass) { - $hash = SP_Util::generate_random_bytes(); +if ($User->isUserChangePass()) { + $hash = SP\Util::generate_random_bytes(); - if (SP_Users::addPassRecover($userLogin, $hash)) { - $url = SP_Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time() . '&f=1'; - SP_Common::printJSON($url, 0); + if (UserUtil::addPassRecover($userLogin, $hash)) { + $url = SP\Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time() . '&f=1'; + SP\Common::printJSON($url, 0); } } // Obtenemos la clave maestra del usuario -if ($objUser->getUserMPass()) { - // Establecemos las variables de sesión - $objUser->setUserSession(); +if ($User->getUserMPass()) { + // Actualizar el último login del usuario + UserUtil::setUserLastLogin($User->getUserId()); - $message['text'][] = _('Usuario') . ": " . $userLogin; - $message['text'][] = _('Perfil') . ": " . SP_Profiles::getProfileNameById($objUser->userProfileId); - $message['text'][] = _('Grupo') . ": " . SP_Groups::getGroupNameById($objUser->userGroupId); + // Cargar las variables de sesión del usuario + SessionUtil::loadUserSession($User); - SP_Log::wrLogInfo($message); + $Log->addDescription(sprintf('%s : %s', _('Usuario'), $userLogin)); + $Log->addDescription(sprintf('%s : %s', _('Perfil'), SP\Profile::getProfileNameById($User->getUserProfileId()))); + $Log->addDescription(sprintf('%s : %s', _('Grupo'), SP\Groups::getGroupNameById($User->getUserGroupId()))); + $Log->writeLog(); +} else { + SP\Common::printJSON(_('Error interno')); +} - // Comprobar si existen parámetros adicionales en URL via GET - foreach ($_POST as $param => $value) { - if (preg_match('/g_.*/', $param)) { - $params[] = substr($param, 2) . '=' . $value; - } +$userPrefs = new \SP\UserPreferences(); +$prefs = $userPrefs->getPreferences($User->getUserId()); + +if ($prefs->isUse2Fa()) { + SP\Session::set2FApassed(false); + $url = SP\Init::$WEBURI . '/index.php?a=2fa&i=' . $User->getUserId() . '&t=' . time() . '&f=1'; + SP\Common::printJSON($url, 0); +} else { + SP\Session::set2FApassed(true); +} + +$params = array(); + +// Comprobar si existen parámetros adicionales en URL via POST para pasarlos por GET +foreach ($_POST as $param => $value) { + \SP\Html::sanitize($param); + \SP\Html::sanitize($value); + + if (!strncmp($param, 'g_', 2)) { + $params[] = substr($param, 2) . '=' . $value; } +} - $urlParams = isset($params) ? '?' . implode('&', $params) : ''; +$urlParams = (count($params) > 0) ? '?' . implode('&', $params) : ''; - SP_Common::printJSON('index.php' . $urlParams, 0); -} \ No newline at end of file +SP\Common::printJSON('index.php' . $urlParams, 0); \ No newline at end of file diff --git a/ajax/ajax_eventlog.php b/ajax/ajax_eventlog.php index cfaf781f..063e5a9a 100644 --- a/ajax/ajax_eventlog.php +++ b/ajax/ajax_eventlog.php @@ -1,50 +1,49 @@ . -* -*/ + * + * This file is part of sysPass. + * + * sysPass is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * sysPass 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 sysPass. If not, see . + * + */ + +use SP\Request; define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Util::logout(); +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Util::logout(); } -SP_ACL::checkUserAccess('eventlog') || SP_Html::showCommonError('unavailable'); +$start = SP\Request::analyze('start', 0); +$clear = SP\Request::analyze('clear', 0); +$sk = SP\Request::analyze('sk', false); -$start = SP_Common::parseParams('p', 'start', 0); -$clear = SP_Common::parseParams('p', 'clear', 0); -$sk = SP_Common::parseParams('p', 'sk', false); - -if ($clear && $sk && SP_Common::checkSessionKey($sk)) { - if (SP_Log::clearEvents()) { - SP_Common::printJSON(_('Registro de eventos vaciado'), 0, "doAction('eventlog');scrollUp();"); - } else { - SP_Common::printJSON(_('Error al vaciar el registro de eventos')); - } -} - -$tplvars = array('start' => $start); -SP_Html::getTemplate('eventlog', $tplvars); \ No newline at end of file +$tpl = new SP\Template(); +$tpl->assign('limitStart', $start); +$tpl->assign('clear', $clear); +$tpl->assign('sk', $sk); +$controller = new SP\Controller\EventlogC($tpl); +$controller->checkClear(); +$controller->getEventlog(); +echo $tpl->render(); \ No newline at end of file diff --git a/ajax/ajax_files.php b/ajax/ajax_files.php index 162e8e1d..a470128a 100644 --- a/ajax/ajax_files.php +++ b/ajax/ajax_files.php @@ -1,12 +1,11 @@ . * */ -// TODO: comprobar permisos para eliminar archivos + +use SP\Request; define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Util::logout(); +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Util::logout(); } -$sk = SP_Common::parseParams('p', 'sk', false); +$sk = SP\Request::analyze('sk', false); -if (!$sk || !SP_Common::checkSessionKey($sk)) { +if (!$sk || !SP\Common::checkSessionKey($sk)) { die(_('CONSULTA INVÁLIDA')); } -if (!SP_Util::fileIsEnabled()) { +if (!SP\Util::fileIsEnabled()) { exit(_('Gestión de archivos deshabilitada')); } -$action = SP_Common::parseParams('p', 'action'); -$accountId = SP_Common::parseParams('p', 'accountId', 0); -$fileId = SP_Common::parseParams('p', 'fileId', 0); +$action = SP\Request::analyze('action'); +$accountId = SP\Request::analyze('accountId', 0); +$fileId = SP\Request::analyze('fileId', 0); + +$log = new \SP\Log(); if ($action == 'upload') { if (!is_array($_FILES["inFile"]) || !$accountId === 0) { exit(); } - $allowedExts = strtoupper(SP_Config::getValue('files_allowed_exts')); - $allowedSize = SP_Config::getValue('files_allowed_size'); + $log->setAction(_('Subir Archivo')); + + $allowedExts = strtoupper(SP\Config::getValue('files_allowed_exts')); + $allowedSize = SP\Config::getValue('files_allowed_size'); if ($allowedExts) { // Extensiones aceptadas $extsOk = explode(",", $allowedExts); } else { - exit(_('No hay extensiones permitidas')); + $log->addDescription(_('No hay extensiones permitidas')); + $log->writeLog(); + + exit($log->getDescription()); } if (is_array($_FILES) && $_FILES['inFile']['name']) { @@ -68,45 +76,61 @@ if ($action == 'upload') { $fileData['extension'] = strtoupper(pathinfo($_FILES['inFile']['name'], PATHINFO_EXTENSION)); if (!in_array($fileData['extension'], $extsOk)) { - exit(_('Tipo de archivo no soportado') . " '" . $fileData['extension'] . "' "); + $log->addDescription(_('Tipo de archivo no soportado') . " '" . $fileData['extension'] . "' "); + $log->writeLog(); + + exit($log->getDescription()); } } else { - exit(_('Archivo inválido') . ":
" . $_FILES['inFile']['name']); + $log->addDescription(_('Archivo inválido') . ":
" . $_FILES['inFile']['name']); + $log->writeLog(); + + exit($log->getDescription()); } // Variables con información del archivo - $fileData['name'] = SP_Html::sanitize($_FILES['inFile']['name']); - $tmpName = SP_Html::sanitize($_FILES['inFile']['tmp_name']); + $fileData['name'] = SP\Html::sanitize($_FILES['inFile']['name']); + $tmpName = SP\Html::sanitize($_FILES['inFile']['tmp_name']); $fileData['size'] = $_FILES['inFile']['size']; $fileData['type'] = $_FILES['inFile']['type']; if (!file_exists($tmpName)) { // Registramos el máximo tamaño permitido por PHP - SP_Util::getMaxUpload(); + SP\Util::getMaxUpload(); - exit(_('Error interno al leer el archivo')); + $log->addDescription(_('Error interno al leer el archivo')); + $log->writeLog(); + + exit($log->getDescription()); } if ($fileData['size'] > ($allowedSize * 1000)) { - exit(_('El archivo es mayor de ') . " " . round(($allowedSize / 1000), 1) . "MB"); + $log->addDescription(_('El archivo es mayor de ') . " " . round(($allowedSize / 1000), 1) . "MB"); + $log->writeLog(); + + exit($log->getDescription()); } // Leemos el archivo a una variable $fileData['content'] = file_get_contents($tmpName); if ($fileData['content'] === false) { - $message['action'] = _('Subir Archivo'); - $message['text'][] = _('Error interno al leer el archivo'); + $log->addDescription(_('Error interno al leer el archivo')); + $log->writeLog(); - SP_Log::wrLogInfo($message); - - exit(_('Error interno al leer el archivo')); + exit($log->getDescription()); } - if (SP_Files::fileUpload($accountId, $fileData)) { - exit(_('Archivo guardado')); + if (SP\Files::fileUpload($accountId, $fileData)) { + $log->addDescription(_('Archivo guardado')); + $log->writeLog(); + + exit($log->getDescription()); } else { - exit(_('No se pudo guardar el archivo')); + $log->addDescription(_('No se pudo guardar el archivo')); + $log->writeLog(); + + exit($log->getDescription()); } } @@ -118,7 +142,7 @@ if ($action == 'download' || $action == 'view') { $isView = ($action == 'view') ? true : false; - $file = SP_Files::fileDownload($fileId); + $file = SP\Files::fileDownload($fileId); if (!$file) { exit(_('El archivo no existe')); @@ -130,15 +154,15 @@ if ($action == 'download' || $action == 'view') { $fileExt = $file->accfile_extension; $fileData = $file->accfile_content; - $message['action'] = _('Descargar Archivo'); - $message['text'][] = _('ID') . ": " . $fileId; - $message['text'][] = _('Archivo') . ": " . $fileName; - $message['text'][] = _('Tipo') . ": " . $fileType; - $message['text'][] = _('Tamaño') . ": " . round($fileSize / 1024, 2) . " KB"; + $log->setAction(_('Descargar Archivo')); + $log->addDescription(_('ID') . ": " . $fileId); + $log->addDescription(_('Archivo') . ": " . $fileName); + $log->addDescription(_('Tipo') . ": " . $fileType); + $log->addDescription(_('Tamaño') . ": " . round($fileSize / 1024, 2) . " KB"); if (!$isView) { - SP_Log::wrLogInfo($message); - + $log->writeLog(); + // Enviamos el archivo al navegador header('Set-Cookie: fileDownload=true; path=/'); header('Cache-Control: max-age=60, must-revalidate'); @@ -151,17 +175,18 @@ if ($action == 'download' || $action == 'view') { exit($fileData); } else { $extsOkImg = array("JPG", "GIF", "PNG"); + if (in_array(strtoupper($fileExt), $extsOkImg)) { - SP_Log::wrLogInfo($message); - + $log->writeLog(); + $imgData = chunk_split(base64_encode($fileData)); exit(''); // } elseif ( strtoupper($fileExt) == "PDF" ){ // echo ''; } elseif (strtoupper($fileExt) == "TXT") { - SP_Log::wrLogInfo($message); - - exit('
' . $fileData . '
'); + $log->writeLog(); + + exit('
' . htmlentities($fileData) . '
'); } else { exit(); } @@ -174,9 +199,15 @@ if ($action == "delete") { exit(_('No es un ID de archivo válido')); } - if (SP_Files::fileDelete($fileId)) { - exit(_('Archivo eliminado')); + if (SP\Files::fileDelete($fileId)) { + $log->addDescription(_('Archivo eliminado')); + $log->writeLog(); + + exit($log->getDescription()); } else { - exit(_('Error al eliminar el archivo')); + $log->addDescription(_('Error al eliminar el archivo')); + $log->writeLog(); + + exit($log->getDescription()); } } \ No newline at end of file diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php index 50b1b2b4..f046e694 100644 --- a/ajax/ajax_getContent.php +++ b/ajax/ajax_getContent.php @@ -1,5 +1,4 @@ . * */ + +use SP\Request; + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Util::logout(); +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Util::logout(); } -SP_Util::checkReload(); +SP\Util::checkReload(); -if (SP_Common::parseParams('p', 'action', '', true)) { - $action = $tplvars['action'] = SP_Common::parseParams('p', 'action'); - $itemId = $tplvars['id'] = SP_Common::parseParams('p', 'id', 0); - $tplvars['lastaction'] = filter_var(SP_Common::parseParams('p', 'lastAction', 'accsearch', false, false, false), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); -} else { +if (!SP\Request::analyze('actionId', 0, true)) { die('
' . _('Parámetros incorrectos') . '
'); } -switch ($action) { - case "accsearch": - SP_Account::$accountSearchTxt = SP_Common::parseParams('s', 'accountSearchTxt'); - SP_Account::$accountSearchCustomer = SP_Common::parseParams('s', 'accountSearchCustomer'); - SP_Account::$accountSearchCategory = SP_Common::parseParams('s', 'accountSearchCategory', 0); - SP_Account::$accountSearchOrder = SP_Common::parseParams('s', 'accountSearchOrder', 0); - SP_Account::$accountSearchKey = SP_Common::parseParams('s', 'accountSearchKey', 0); +$actionId = SP\Request::analyze('actionId'); +$itemId = SP\Request::analyze('itemId', 0); +$lastAction = SP\Request::analyze('lastAction', \SP\Controller\ActionsInterface::ACTION_ACC_SEARCH); - SP_Html::getTemplate('search', $tplvars); - break; - case "accnew": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - SP_Users::checkUserUpdateMPass() || SP_Html::showCommonError('updatempass'); +$tpl = new SP\Template(); +$tpl->assign('actionId', $actionId); +$tpl->assign('id', $itemId); +$tpl->assign('activeTabId', $itemId); +$tpl->assign('queryTimeStart', microtime()); +$tpl->assign('userId', SP\Session::getUserId()); +$tpl->assign('userGroupId', SP\Session::getUserGroupId()); +$tpl->assign('userIsAdminApp', SP\Session::getUserIsAdminApp()); +$tpl->assign('userIsAdminAcc', SP\Session::getUserIsAdminAcc()); +$tpl->assign('themeUri', \SP\Init::$THEMEURI); - SP_Html::getTemplate('accounts', $tplvars); - break; - case "acccopy": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - SP_Users::checkUserUpdateMPass() || SP_Html::showCommonError('updatempass'); +// Control de ruta de acciones +if ($actionId != \SP\Controller\ActionsInterface::ACTION_ACC_SEARCH) { + $actionsPath = &$_SESSION['actionsPath']; + $actionsPath[] = $actionId; + $actions = count($actionsPath); - SP_Html::getTemplate('accounts', $tplvars); - break; - case "accedit": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - SP_Users::checkUserUpdateMPass() || SP_Html::showCommonError('updatempass'); - - SP_Html::getTemplate('accounts', $tplvars); - break; - case "acceditpass": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - SP_Users::checkUserUpdateMPass() || SP_Html::showCommonError('updatempass'); - - SP_Html::getTemplate('editpass', $tplvars); - break; - case "accview": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - - SP_Html::getTemplate('accounts', $tplvars); - break; - case "accviewhistory": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - - SP_Html::getTemplate('accounts', $tplvars); - break; - case "accdelete": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - - SP_Html::getTemplate('accounts', $tplvars); - break; - case "accrequest": - SP_Html::getTemplate('request', $tplvars); - break; - case "usersmenu": - echo '
'; - echo ''; - - $activeTab = 0; - - if (SP_ACL::checkUserAccess("users")) { - $arrUsersTableProp = array( - 'tblId' => 'tblUsers', - 'header' => '', - 'tblHeaders' => array( - _('Nombre'), - _('Login'), - _('Perfil'), - _('Grupo'), - _('Propiedades')), - 'tblRowSrc' => array( - 'user_name', - 'user_login', - 'userprofile_name', - 'usergroup_name', array( - 'user_isAdminApp' => array('img_file' => 'check_blue.png', 'img_title' => _('Admin Aplicación')), - 'user_isAdminAcc' => array('img_file' => 'check_orange.png', 'img_title' => _('Admin Cuentas')), - 'user_isLdap' => array('img_file' => 'ldap.png', 'img_title' => _('Usuario de LDAP')), - 'user_isDisabled' => array('img_file' => 'disabled.png', 'img_title' => _('Deshabilitado')) - ) - ), - 'tblRowSrcId' => 'user_id', - 'frmId' => 'frm_tblusers', - 'onCloseAction' => $action, - 'actionId' => 1, - 'newActionId' => 2, - 'activeTab' => $activeTab++, - 'actions' => array( - 'new' => array('title' => _('Nuevo Usuario'), 'action' => 'appMgmtData'), - 'view' => array('title' => _('Ver Detalles de Usuario'), 'action' => 'appMgmtData'), - 'edit' => array('title' => _('Editar Usuario'), 'action' => 'appMgmtData'), - 'del' => array('title' => _('Eliminar Usuario'), 'action' => 'appMgmtSave'), - 'pass' => array('title' => _('Cambiar Clave de Usuario'), 'action' => 'usrUpdPass') - ) - ); - - echo '
'; - $startTime = microtime(); - $users = SP_Users::getUsers(); - - if ($users) { - SP_Html::getQueryTable($arrUsersTableProp, $users); - SP_Html::printQueryInfoBar(count($users), $startTime); - } - echo '
'; - } - - if (SP_ACL::checkUserAccess("groups")) { - $arrGroupsTableProp = array( - 'tblId' => 'tblGroups', - 'header' => '', - 'tblHeaders' => array(_('Nombre'), _('Descripción')), - 'tblRowSrc' => array('usergroup_name', 'usergroup_description'), - 'tblRowSrcId' => 'usergroup_id', - 'frmId' => 'frm_tblgroups', - 'onCloseAction' => $action, - 'actionId' => 3, - 'newActionId' => 4, - 'activeTab' => $activeTab++, - 'actions' => array( - 'new' => array('title' => _('Nuevo Grupo'), 'action' => 'appMgmtData'), - 'edit' => array('title' => _('Editar Grupo'), 'action' => 'appMgmtData'), - 'del' => array('title' => _('Eliminar Grupo'), 'action' => 'appMgmtSave') - ) - ); - - echo '
'; - - $startTime = microtime(); - $groups = SP_Groups::getGroups(); - - if ($groups) { - SP_Html::getQueryTable($arrGroupsTableProp, $groups); - SP_Html::printQueryInfoBar(count($groups), $startTime); - } - - echo '
'; - } - - if (SP_ACL::checkUserAccess("profiles")) { - $arrProfilesTableProp = array( - 'tblId' => 'tblProfiles', - 'header' => '', - 'tblHeaders' => array(_('Nombre')), - 'tblRowSrc' => array('userprofile_name'), - 'tblRowSrcId' => 'userprofile_id', - 'frmId' => 'frm_tblprofiles', - 'onCloseAction' => $action, - 'actionId' => 5, - 'newActionId' => 6, - 'activeTab' => $activeTab++, - 'actions' => array( - 'new' => array('title' => _('Nuevo Perfil'), 'action' => 'appMgmtData'), - 'edit' => array('title' => _('Editar Perfil'), 'action' => 'appMgmtData'), - 'del' => array('title' => _('Eliminar Perfil'), 'action' => 'appMgmtSave') - ) - ); - - echo '
'; - - $startTime = microtime(); - $profiles = SP_Profiles::getProfiles(); - - if ($profiles) { - SP_Html::getQueryTable($arrProfilesTableProp, $profiles); - SP_Html::printQueryInfoBar(count($profiles), $startTime); - } - - echo '
'; - } - - echo '
'; - - echo ''; - break; - case "appmgmtmenu": - echo '
'; - echo ''; - - $activeTab = 0; - - if (SP_ACL::checkUserAccess("categories")) { - $arrCategoriesTableProp = array( - 'tblId' => 'tblCategories', - 'header' => '', - 'tblHeaders' => array(_('Nombre'), _('Descripción')), - 'tblRowSrc' => array('category_name', 'category_description'), - 'tblRowSrcId' => 'category_id', - 'frmId' => 'frm_tblcategories', - 'onCloseAction' => $action, - 'actionId' => 9, - 'newActionId' => 10, - 'activeTab' => $activeTab++, - 'actions' => array( - 'new' => array('title' => _('Nueva Categoría'), 'action' => 'appMgmtData'), - 'edit' => array('title' => _('Editar Categoría'), 'action' => 'appMgmtData'), - 'del' => array('title' => _('Eliminar Categoría'), 'action' => 'appMgmtSave') - ) - ); - - echo '
'; - - $startTime = microtime(); - $categories = SP_Category::getCategories(); - - if ($categories !== false) { - SP_Html::getQueryTable($arrCategoriesTableProp, $categories); - SP_Html::printQueryInfoBar(count($categories), $startTime); - } - - echo '
'; - } - - if (SP_ACL::checkUserAccess("customers")) { - $arrCustomersTableProp = array( - 'tblId' => 'tblCustomers', - 'header' => '', - 'tblHeaders' => array(_('Nombre'), _('Descripción')), - 'tblRowSrc' => array('customer_name', 'customer_description'), - 'tblRowSrcId' => 'customer_id', - 'frmId' => 'frm_tblcustomers', - 'onCloseAction' => $action, - 'actionId' => 7, - 'newActionId' => 8, - 'activeTab' => $activeTab++, - 'actions' => array( - 'new' => array('title' => _('Nuevo Cliente'), 'action' => 'appMgmtData'), - 'edit' => array('title' => _('Editar Cliente'), 'action' => 'appMgmtData'), - 'del' => array('title' => _('Eliminar Cliente'), 'action' => 'appMgmtSave') - ) - ); - - echo '
'; - - $startTime = microtime(); - $customers = SP_Customer::getCustomers(); - - if ($customers !== false) { - SP_Html::getQueryTable($arrCustomersTableProp, $customers); - SP_Html::printQueryInfoBar(count($customers), $startTime); - } - - echo '
'; - } - - echo '
'; - - echo ''; - break; - case "configmenu": - echo '
'; - echo ''; - - $tplvars['activeTab'] = 0; - $tplvars['onCloseAction'] = $action; - - if (SP_ACL::checkUserAccess("config")) { - echo '
'; - SP_Html::getTemplate('config', $tplvars); - echo '
'; - } - - if (SP_ACL::checkUserAccess("masterpass")) { - $tplvars['activeTab']++; - - echo '
'; - SP_Html::getTemplate('masterpass', $tplvars); - echo '
'; - } - - if (SP_ACL::checkUserAccess("backup")) { - $tplvars['activeTab']++; - - echo '
'; - SP_Html::getTemplate('backup', $tplvars); - echo '
'; - } - - if (SP_ACL::checkUserAccess("config")) { - $tplvars['activeTab']++; - - echo '
'; - SP_Html::getTemplate('migrate', $tplvars); - echo '
'; - } - - echo '
'; - - echo ''; - break; - case "eventlog": - SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - - SP_Html::getTemplate('eventlog', $tplvars); - break; -} - -if (isset($_SESSION["uisadminapp"]) && SP_Config::getValue('debug')) { - $time_stop = SP_Init::microtime_float(); - $time = ($time_stop - $time_start); - $memEnd = memory_get_usage(); - - $debugTxt[] = "
"; - $debugTxt[] = "

DEBUG INFO

"; - $debugTxt[] = "
"; - - foreach ($debugTxt as $out) { - echo $out; + // Se eliminan las acciones ya realizadas + if ($actions > 2 && $actionsPath[$actions - 3] == $actionId) { + unset($actionsPath[$actions - 3]); + unset($actionsPath[$actions - 2]); + $actionsPath = array_values($actionsPath); + $actions = count($actionsPath); } + + $tpl->assign('lastAction', $actionsPath[$actions - 2]); } -// Se comprueba si hay actualizaciones. -// Es necesario que se haga al final de obtener el contenido ya que la -// consulta ajax detiene al resto si se ejecuta antes -if ($_SESSION['uisadminapp'] && SP_Config::getValue('checkupdates') === true && !SP_Common::parseParams('s', 'UPDATED', false, true)) { - echo ''; -} \ No newline at end of file +switch ($actionId) { + case \SP\Controller\ActionsInterface::ACTION_ACC_SEARCH: + $_SESSION['actionsPath'] = array(\SP\Controller\ActionsInterface::ACTION_ACC_SEARCH); + + $tpl->assign('lastAction', $lastAction); + + $controller = new SP\Controller\SearchC($tpl); + $controller->getSearchBox(); + $controller->getSearch(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_NEW: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getNewAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_COPY: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getCopyAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_EDIT: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getEditAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_EDIT_PASS: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getEditPassAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_VIEW: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getViewAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_VIEW_HISTORY: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getViewHistoryAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_DELETE: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getDeleteAccount(); + break; + case \SP\Controller\ActionsInterface::ACTION_ACC_REQUEST: + $controller = new SP\Controller\AccountC($tpl, null, $itemId); + $controller->getRequestAccountAccess(); + break; + case \SP\Controller\ActionsInterface::ACTION_USR: + $controller = new SP\Controller\UsersMgmtC($tpl); + $controller->useTabs(); + $controller->getUsersList(); + $controller->getGroupsList(); + $controller->getProfilesList(); + $controller->getAPITokensList(); + break; + case \SP\Controller\ActionsInterface::ACTION_MGM: + $controller = new SP\Controller\AccountsMgmtC($tpl); + $controller->useTabs(); + $controller->getCategories(); + $controller->getCustomers(); + $controller->getCustomFields(); + break; + case \SP\Controller\ActionsInterface::ACTION_CFG: + case \SP\Controller\ActionsInterface::ACTION_CFG_GENERAL: + case \SP\Controller\ActionsInterface::ACTION_CFG_WIKI: + case \SP\Controller\ActionsInterface::ACTION_CFG_LDAP: + case \SP\Controller\ActionsInterface::ACTION_CFG_MAIL: + case \SP\Controller\ActionsInterface::ACTION_CFG_ENCRYPTION: + case \SP\Controller\ActionsInterface::ACTION_CFG_ENCRYPTION_TEMPPASS: + case \SP\Controller\ActionsInterface::ACTION_CFG_BACKUP: + case \SP\Controller\ActionsInterface::ACTION_CFG_EXPORT: + case \SP\Controller\ActionsInterface::ACTION_CFG_IMPORT: + $tpl->assign('onCloseAction', $actionId); + $tpl->addTemplate('tabs-start'); + + $controller = new SP\Controller\ConfigC($tpl); + $controller->getGeneralTab(); + $controller->getWikiTab(); + $controller->getLdapTab(); + $controller->getMailTab(); + $controller->getEncryptionTab(); + $controller->getBackupTab(); + $controller->getImportTab(); + $controller->getInfoTab(); + + $tpl->addTemplate('tabs-end'); + break; + case \SP\Controller\ActionsInterface::ACTION_EVL: + $controller = new SP\Controller\EventlogC($tpl); + $controller->getEventlog(); + break; + case \SP\Controller\ActionsInterface::ACTION_USR_PREFERENCES: + case \SP\Controller\ActionsInterface::ACTION_USR_PREFERENCES_SECURITY: + $tpl->addTemplate('tabs-start'); + + $controller = new \SP\Controller\UsersPrefsC($tpl); + $controller->getSecurityTab(); + + $tpl->addTemplate('tabs-end'); + break; +} + +// Se comprueba si se debe de mostrar la vista de depuración +if (\SP\Session::getUserIsAdminApp() && SP\Config::getValue('debug')) { + $controller->getDebug(); +} + +$tpl->addTemplate('js-common'); +$controller->view(); diff --git a/ajax/ajax_getEnvironment.php b/ajax/ajax_getEnvironment.php new file mode 100644 index 00000000..45d6e54c --- /dev/null +++ b/ajax/ajax_getEnvironment.php @@ -0,0 +1,42 @@ +. + * + */ + +use SP\Request; + +define('APP_ROOT', '..'); + +require APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; +require APP_ROOT . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'strings.js.php'; + +Request::checkReferer('GET'); + +$data = array( + 'lang' => $stringsJsLang, + 'app_root' => SP\Init::$WEBURI, + 'pk' => str_replace("\r\n", "", \SP\Session::getPublicKey()) +); + +SP\Common::printJSON($data, 0); + diff --git a/ajax/ajax_getFiles.php b/ajax/ajax_getFiles.php index b5c209b3..877a2042 100644 --- a/ajax/ajax_getFiles.php +++ b/ajax/ajax_getFiles.php @@ -23,54 +23,29 @@ * */ +use SP\Request; + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('GET'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { +Request::checkReferer('GET'); + +if (!SP\Init::isLoggedIn()) { return; } -if (!SP_Util::fileIsEnabled()) { +if (!SP\Util::fileIsEnabled()) { echo _('Gestión de archivos deshabilitada'); return false; } -$sk = SP_Common::parseParams('g', 'sk', false); +$sk = SP\Request::analyze('sk', false); -if (!$sk || !SP_Common::checkSessionKey($sk)) { - SP_Common::printXML(_('CONSULTA INVÁLIDA')); +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printXML(_('CONSULTA INVÁLIDA')); } -$accountId = SP_Common::parseParams('g', 'id', 0); -$deleteEnabled = SP_Common::parseParams('g', 'del', 0); - -$files = SP_Files::getFileList($accountId, $deleteEnabled); - -if (!is_array($files) || count($files) === 0) { - return; -} -?> - -
- -
\ No newline at end of file +$controller = new SP\Controller\AccountsMgmtC(); +$controller->getFiles(); +$controller->view(); \ No newline at end of file diff --git a/ajax/ajax_import.php b/ajax/ajax_import.php index f05bb901..942573b8 100644 --- a/ajax/ajax_import.php +++ b/ajax/ajax_import.php @@ -1 +1,76 @@ -. * */ define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; SP_Util::checkReferer('POST'); if (!SP_Init::isLoggedIn()) { SP_Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); } if (SP_Util::demoIsEnabled()) { SP_Common::printJSON(_('Ey, esto es una DEMO!!')); } $sk = SP_Common::parseParams('p', 'sk', false); if (!$sk || !SP_Common::checkSessionKey($sk)) { SP_Common::printJSON(_('CONSULTA INVÁLIDA')); } $res = SP_Import::doImport($_FILES["inFile"]); if (isset($res['error']) && is_array($res['error'])) { foreach ($res['error'] as $error) { $errors [] = $error['description']; $errors [] = $error['hint']; error_log($error['hint']); } $out = implode('\n\n', $errors); SP_Common::printJSON($out); } else if (is_array($res['ok'])) { $out = implode('\n\n', $res['ok']); SP_Common::printJSON($out, 0); } \ No newline at end of file +. + * + */ + +use SP\Request; + +define('APP_ROOT', '..'); + +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); +} + +if (SP\Util::demoIsEnabled()) { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); +} + +$sk = SP\Request::analyze('sk', false); +$defaultUser= SP\Request::analyze('defUser', 0); +$defaultGroup = SP\Request::analyze('defGroup', 0); +$importPwd = SP\Request::analyze('importPwd', '', false, false, false); +$csvDelimiter = SP\Request::analyze('csvDelimiter'); + +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); +} + +try { + $CryptPKI = new \SP\CryptPKI(); + $clearImportPwd = $CryptPKI->decryptRSA(base64_decode($importPwd)); +} catch (Exception $e) { + SP\Common::printJSON(_('Error en clave RSA')); +} + +SP\Import::setDefUser($defaultUser); +SP\Import::setDefGroup($defaultGroup); +SP\Import::setImportPwd($clearImportPwd); +SP\Import::setCsvDelimiter($csvDelimiter); + +$res = SP\Import::doImport($_FILES["inFile"]); + +if (isset($res['error']) && is_array($res['error'])) { + error_log($res['error']['hint']); + + $out = implode('\n\n', $res['error']); + + SP\Common::printJSON($out); +} else if (is_array($res['ok'])) { + $out = implode('\n\n', $res['ok']); + + SP\Common::printJSON($out, 0); +} \ No newline at end of file diff --git a/ajax/ajax_migrate.php b/ajax/ajax_migrate.php index 555075e0..76c1c2e3 100644 --- a/ajax/ajax_migrate.php +++ b/ajax/ajax_migrate.php @@ -1 +1,86 @@ -. * */ define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; SP_Util::checkReferer('POST'); if (!SP_Init::isLoggedIn()) { SP_Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); } if (SP_Util::demoIsEnabled()) { SP_Common::printJSON(_('Ey, esto es una DEMO!!')); } $sk = SP_Common::parseParams('p', 'sk', false); if (!$sk || !SP_Common::checkSessionKey($sk)) { SP_Common::printJSON(_('CONSULTA INVÁLIDA')); } $frmDBUser = SP_Common::parseParams('p', 'dbuser'); $frmDBPass = SP_Common::parseParams('p', 'dbpass'); $frmDBName = SP_Common::parseParams('p', 'dbname'); $frmDBHost = SP_Common::parseParams('p', 'dbhost'); $frmMigrateEnabled = SP_Common::parseParams('p', 'chkmigrate', 0, false, 1); if (!$frmMigrateEnabled) { SP_Common::printJSON(_('Confirmar la importación de cuentas')); } if (!$frmDBUser) { SP_Common::printJSON(_('Es necesario un usuario de conexión')); } if (!$frmDBPass) { SP_Common::printJSON(_('Es necesaria una clave de conexión')); } if (!$frmDBName) { SP_Common::printJSON(_('Es necesario el nombre de la BBDD')); } if (!$frmDBHost) { SP_Common::printJSON(_('Es necesario un nombre de host')); } $options['dbhost'] = $frmDBHost; $options['dbname'] = $frmDBName; $options['dbuser'] = $frmDBUser; $options['dbpass'] = $frmDBPass; $res = SP_Migrate::migrate($options); if (is_array($res['error'])) { foreach ($res['error'] as $error) { $errors [] = $error['description']; $errors [] = $error['hint']; error_log($error['hint']); } $out = implode('
', $errors); SP_Common::printJSON($out); } else if (is_array($res['ok'])) { $out = implode('
', $res['ok']); SP_Common::printJSON($out, 0); } \ No newline at end of file +. + * + */ + +use SP\Request; + +define('APP_ROOT', '..'); + +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); +} + +if (SP\Util::demoIsEnabled()) { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); +} + +$sk = SP\Request::analyze('sk', false); + +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); +} + +$frmDBUser = SP\Request::analyze('dbuser'); +$frmDBPass = SP\Request::analyze('dbpass'); +$frmDBName = SP\Request::analyze('dbname'); +$frmDBHost = SP\Request::analyze('dbhost'); +$frmMigrateEnabled = SP\Request::analyze('chkmigrate', 0, false, 1); + +if (!$frmMigrateEnabled) { + SP\Common::printJSON(_('Confirmar la importación de cuentas')); +} elseif (!$frmDBUser) { + SP\Common::printJSON(_('Es necesario un usuario de conexión')); +} elseif (!$frmDBPass) { + SP\Common::printJSON(_('Es necesaria una clave de conexión')); +} elseif (!$frmDBName) { + SP\Common::printJSON(_('Es necesario el nombre de la BBDD')); +} elseif (!$frmDBHost) { + SP\Common::printJSON(_('Es necesario un nombre de host')); +} + +$options['dbhost'] = $frmDBHost; +$options['dbname'] = $frmDBName; +$options['dbuser'] = $frmDBUser; +$options['dbpass'] = $frmDBPass; + +$res = SP\Migrate::migrate($options); + +if (is_array($res['error'])) { + foreach ($res['error'] as $error) { + $errors [] = $error['description']; + $errors [] = $error['hint']; + error_log($error['hint']); + } + + $out = implode('
', $errors); + SP\Common::printJSON($out); +} elseif (is_array($res['ok'])) { + $out = implode('
', $res['ok']); + + SP\Common::printJSON($out, 0); +} \ No newline at end of file diff --git a/ajax/ajax_passReset.php b/ajax/ajax_passReset.php index 55d647c2..29b32bd0 100644 --- a/ajax/ajax_passReset.php +++ b/ajax/ajax_passReset.php @@ -23,64 +23,59 @@ * */ +use SP\UserUtil; + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -$sk = SP_Common::parseParams('p', 'sk', false); +SP\Request::checkReferer('POST'); -if (!$sk || !SP_Common::checkSessionKey($sk)) { - SP_Common::printJSON(_('CONSULTA INVÁLIDA')); +$sk = SP\Request::analyze('sk', false); + +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); } -$userLogin = SP_Common::parseParams('p', 'login'); -$userEmail = SP_Common::parseParams('p', 'email'); -$userPass = SP_Common::parseParams('p', 'pass'); -$userPassV = SP_Common::parseParams('p', 'passv'); -$hash = SP_Common::parseParams('p', 'hash'); -$time = SP_Common::parseParams('p', 'time'); +$userLogin = SP\Request::analyze('login'); +$userEmail = SP\Request::analyze('email'); +$userPass = SP\Request::analyze('pass'); +$userPassV = SP\Request::analyze('passv'); +$hash = SP\Request::analyze('hash'); +$time = SP\Request::analyze('time'); $message['action'] = _('Recuperación de Clave'); if ($userLogin && $userEmail) { - if (SP_Auth::mailPassRecover($userLogin, $userEmail)) { - $message['text'][] = SP_Html::strongText(_('Solicitado para') . ': ') . ' ' . $userLogin . ' (' . $userEmail . ')'; + $log = new \SP\Log(_('Recuperación de Clave')); - SP_Common::sendEmail($message); - SP_Log::wrLogInfo($message); - SP_Common::printJSON(_('Solicitud enviada') . ';;' . _('En breve recibirá un correo para completar la solicitud.'), 0, 'goLogin();'); + if (SP\Auth::mailPassRecover($userLogin, $userEmail)) { + $log->addDescription(SP\Html::strongText(_('Solicitado para') . ': ') . ' ' . $userLogin . ' (' . $userEmail . ')'); + + SP\Common::printJSON(_('Solicitud enviada') . ';;' . _('En breve recibirá un correo para completar la solicitud.'), 0, 'goLogin();'); } else { - $message['text'][] = 'ERROR'; - $message['text'][] = SP_Html::strongText(_('Solicitado para') . ': ') . ' ' . $userLogin . ' (' . $userEmail . ')'; + $log->addDescription('ERROR'); + $log->addDescription(SP\Html::strongText(_('Solicitado para') . ': ') . ' ' . $userLogin . ' (' . $userEmail . ')'); - SP_Common::sendEmail($message); - SP_Log::wrLogInfo($message); - SP_Common::printJSON(_('No se ha podido realizar la solicitud. Consulte con el administrador.')); + SP\Common::printJSON(_('No se ha podido realizar la solicitud. Consulte con el administrador.')); } + + $log->writeLog(); + SP\Email::sendEmail($log); } if ($userPass && $userPassV && $userPass === $userPassV) { - $userId = SP_Users::checkHashPassRecover($hash); + $userId = UserUtil::checkHashPassRecover($hash); if ($userId) { - $user = new SP_Users(); + if (UserUtil::updateUserPass($userId, $userPass) && UserUtil::updateHashPassRecover($hash)) { + \SP\Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), SP\Html::strongText(_('Login') . ': ') . UserUtil::getUserLoginById($userId)); - $user->userId = $userId; - $user->userPass = $userPass; - - if ($user->updateUserPass() && SP_Users::updateHashPassRecover($hash)) { - $message['action'] = _('Modificar Clave Usuario'); - $message['text'][] = SP_Html::strongText(_('Login') . ': ') . $user->getUserLoginById($userId); - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - SP_Common::printJSON(_('Clave actualizada'), 0, 'goLogin();'); + SP\Common::printJSON(_('Clave actualizada'), 0, 'goLogin();'); } } - SP_Common::printJSON(_('Error al modificar la clave')); + SP\Common::printJSON(_('Error al modificar la clave')); } else { - SP_Common::printJSON(_('La clave es incorrecta o no coincide')); + SP\Common::printJSON(_('La clave es incorrecta o no coincide')); } \ No newline at end of file diff --git a/ajax/ajax_search.php b/ajax/ajax_search.php index 28ae5c9c..0377314f 100644 --- a/ajax/ajax_search.php +++ b/ajax/ajax_search.php @@ -23,330 +23,24 @@ * */ +use SP\Request; + define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Util::checkReferer('POST'); +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; -if (!SP_Init::isLoggedIn()) { - SP_Util::logout(); +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Util::logout(); } -$sk = SP_Common::parseParams('p', 'sk', false); +$sk = SP\Request::analyze('sk', false); -if (!$sk || !SP_Common::checkSessionKey($sk)) { +if (!$sk || !SP\Common::checkSessionKey($sk)) { die('
' . _('CONSULTA INVÁLIDA') . '
'); } -$startTime = microtime(); - -// Valores Configuración -$accountLink = SP_Config::getValue('account_link', 0); -$accountCount = (isset($_POST["rpp"]) && $_POST["rpp"] > 0) ? (int)$_POST["rpp"] : SP_Config::getValue('account_count', 10); -$filesEnabled = SP_Util::fileIsEnabled(); -$wikiEnabled = SP_Util::wikiIsEnabled(); -if ($wikiEnabled) { - $wikiSearchUrl = SP_Config::getValue('wiki_searchurl', false); - $wikiFilter = explode(',', SP_Config::getValue('wiki_filter')); - $wikiPageUrl = SP_Config::getValue('wiki_pageurl'); -} -$requestEnabled = SP_Util::mailrequestIsEnabled(); -$maxTextLength = (SP_Util::resultsCardsIsEnabled()) ? 40 : 60; -$isDemoMode = SP_Util::demoIsEnabled(); - -// Valores POST -$sortKey = SP_Common::parseParams('p', 'skey', 0); -$sortOrder = SP_Common::parseParams('p', 'sorder', 0); -$customerId = SP_Common::parseParams('p', 'customer', 0); -$categoryId = SP_Common::parseParams('p', 'category', 0); -$searchTxt = SP_Common::parseParams('p', 'search', ''); -$limitStart = SP_Common::parseParams('p', 'start', 0); -$globalSearch = SP_Common::parseParams('p', 'gsearch', 0, false, 1); - -// Valores Sesión -$userGroupId = SP_Common::parseParams('s', 'ugroup', 0); -$userProfileId = SP_Common::parseParams('s', 'uprofile', 0); -$userId = SP_Common::parseParams('s', 'uid', 0); - -$filterOn = ($sortKey > 1 || $customerId || $categoryId || $searchTxt) ? true : false; - -$colors = array( - 'FF66CC', - 'FF99FF', - 'CC99FF', - '9999FF', - '6699FF', - '3399FF', - '0099FF', - '6699FF', - '3399FF', - '00CC66', - '00CC66', - '00CC99', - '00CCCC', - 'FFCC66', - 'FF9999', - 'FF6699', - 'FF99CC' -); - -$objAccount = new SP_Account; -$arrSearchFilter = array("txtSearch" => $searchTxt, - "userId" => $userId, - "groupId" => $userGroupId, - "categoryId" => $categoryId, - "customerId" => $customerId, - "keyId" => $sortKey, - "txtOrder" => $sortOrder, - "limitStart" => $limitStart, - "limitCount" => $accountCount, - "globalSearch" => $globalSearch); - -$resQuery = $objAccount->getAccounts($arrSearchFilter); - -if (!$resQuery) { - die('
' . _('No se encontraron registros') . '
'); -} - -if (count($resQuery) > 0) { - $sortKeyImg = ""; - - if ($sortKey > 0) { - $sortKeyImg = ($sortOrder == 0) ? "imgs/sort_asc.png" : "imgs/sort_desc.png"; - $sortKeyImg = ''; - } - - echo '
'; - echo ''; - echo '
'; -} - -echo ' + + + \ No newline at end of file diff --git a/inc/themes/classic/groups.inc b/inc/themes/classic/groups.inc new file mode 100644 index 00000000..aaae25ec --- /dev/null +++ b/inc/themes/classic/groups.inc @@ -0,0 +1,86 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "/> +
"/> +
+ +
+ text; ?> + help): ?> + + + + + + required) ? 'required' : ''; ?>> + + value; ?> + +
+ + + + "/> + + + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/inc/themes/classic/header.inc b/inc/themes/classic/header.inc new file mode 100644 index 00000000..55eebebb --- /dev/null +++ b/inc/themes/classic/header.inc @@ -0,0 +1,9 @@ + + + + <?php echo $appInfo['appname'],' :: ',$appInfo['appdesc']; ?> + + + + + diff --git a/inc/themes/classic/import.inc b/inc/themes/classic/import.inc new file mode 100644 index 00000000..c9e241ba --- /dev/null +++ b/inc/themes/classic/import.inc @@ -0,0 +1,199 @@ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + <?php echo _('Atención'); ?> + +

+ + +
+ + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + +
+ +
+
+ upload +
+
+ +
+ +
+

+ +

+ +

+ +

+ +

+ +

+ +

+
+
+
+ + \ No newline at end of file diff --git a/inc/themes/classic/index.php b/inc/themes/classic/index.php new file mode 100644 index 00000000..0e84617e --- /dev/null +++ b/inc/themes/classic/index.php @@ -0,0 +1,31 @@ +. + * + */ + +$themeInfo = array( + 'name' => 'Classic', + 'creator' => 'nuxsmin', + 'version' => '1.0', + 'targetversion' => '1.2.0' +); diff --git a/inc/themes/classic/info.inc b/inc/themes/classic/info.inc new file mode 100644 index 00000000..71f5015b --- /dev/null +++ b/inc/themes/classic/info.inc @@ -0,0 +1,51 @@ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ + + +
+ + + $infoval): ?> + +
+ + +
+ + + +
+ +
+ +
+ +
+ + + +
+
\ No newline at end of file diff --git a/inc/themes/classic/install.inc b/inc/themes/classic/install.inc new file mode 100644 index 00000000..dc0ccb5e --- /dev/null +++ b/inc/themes/classic/install.inc @@ -0,0 +1,122 @@ +
+ + + 0): ?> + + + + +
+ + +
+ +

+ + +

+ +

+ +

+
+ +
+ +

+ +

+
+ +
+ + + + +

+ + +

+ +

+ +

+ +

+ + +

+ +

+ + +

+ +
+ +

+ + + /> + +

+
+ +
+
+ +
+ \ No newline at end of file diff --git a/inc/themes/classic/js-common.inc b/inc/themes/classic/js-common.inc new file mode 100644 index 00000000..0534ef3a --- /dev/null +++ b/inc/themes/classic/js-common.inc @@ -0,0 +1,15 @@ + diff --git a/inc/themes/classic/js/functions.js b/inc/themes/classic/js/functions.js new file mode 100644 index 00000000..6586c6d2 --- /dev/null +++ b/inc/themes/classic/js/functions.js @@ -0,0 +1,330 @@ +sysPass.Util.Theme = function () { + "use strict"; + + var Common = new sysPass.Util.Common(), + passwordData = Common.passwordData, + APP_ROOT = Common.APP_ROOT, + LANG = Common.LANG, + PK = Common.PK; + + // Mostrar el spinner de carga + var showLoading = function () { + if (document.getElementById("wrap-loading") !== null) { + $('#wrap-loading').show(); + $('#loading').addClass('is-active'); + } else { + $.fancybox.showLoading(); + } + }; + + // Ocultar el spinner de carga + var hideLoading = function () { + if (document.getElementById("wrap-loading") !== null) { + $('#wrap-loading').hide(); + $('#loading').removeClass('is-active'); + } else { + $.fancybox.hideLoading(); + } + }; + + var activeTooltip = function () { + // Activar tooltips + $('.active-tooltip').tooltip({ + content: function () { + return $(this).attr('title'); + }, + tooltipClass: "tooltip" + }); + + $('.help-tooltip').tooltip({ + content: function () { + return $(this).next('div').html(); + }, + tooltipClass: "tooltip" + }) + }; + + // Función para generar claves aleatorias. + // By Uzbekjon from http://jquery-howto.blogspot.com.es + var password = function (length, special, fancy, targetId) { + var iteration = 0, + genPassword = '', + randomNumber; + + while (iteration < passwordData.complexity.numlength) { + randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33; + if (!passwordData.complexity.symbols) { + if ((randomNumber >= 33) && (randomNumber <= 47)) { + continue; + } + if ((randomNumber >= 58) && (randomNumber <= 64)) { + continue; + } + if ((randomNumber >= 91) && (randomNumber <= 96)) { + continue; + } + if ((randomNumber >= 123) && (randomNumber <= 126)) { + continue; + } + } + + if (!passwordData.complexity.numbers && randomNumber >= 48 && randomNumber <= 57) { + continue; + } + + if (!passwordData.complexity.uppercase && randomNumber >= 65 && randomNumber <= 90) { + continue; + } + + iteration++; + genPassword += String.fromCharCode(randomNumber); + } + + if (fancy === true) { + $("#viewPass").attr("title", genPassword); + //alertify.alert('

' + LANG[6] + '

' + password + '

'); + } else { + alertify.alert('

' + LANG[6] + '

' + genPassword + '

'); + } + + var level = zxcvbn(genPassword); + passwordData.passLength = genPassword.length; + + if (targetId) { + Common.outputResult(level.score, targetId); + + $('#' + targetId).val(genPassword); + $('#' + targetId + 'R').val(genPassword); + } else { + Common.outputResult(level.score, targetId); + + $('input:password, input.password').val(genPassword); + $('#passLevel').show(500); + } + }; + + + // Diálogo de configuración de complejidad de clave + var complexityDialog = function () { + $('
').dialog({ + modal: true, + title: 'Opciones de Complejidad', + width: '450px', + open: function () { + var thisDialog = $(this); + + var content = + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '' + + '
'; + + thisDialog.html(content); + + // Recentrar después de insertar el contenido + thisDialog.dialog('option', 'position', 'center'); + + // Actualizar componentes de MDL + thisDialog.ready(function () { + $('#checkbox-numbers').prop('checked', passwordData.complexity.numbers); + $('#checkbox-uppercase').prop('checked', passwordData.complexity.uppercase); + $('#checkbox-symbols').prop('checked', passwordData.complexity.symbols); + $('#passlength').val(passwordData.complexity.numlength); + + $(".dialog-btns-complexity").buttonset({ + icons: {primary: "ui-icon-transferthick-e-w"} + }); + + $(".inputNumber").spinner(); + + $(".btnDialogOk") + .button() + .click(function () { + passwordData.complexity.numbers = $(' #checkbox-numbers').is(':checked'); + passwordData.complexity.uppercase = $('#checkbox-uppercase').is(':checked'); + passwordData.complexity.symbols = $('#checkbox-symbols').is(':checked'); + passwordData.complexity.numlength = parseInt($('#passlength').val()); + + thisDialog.dialog('close'); + } + ); + }); + }, + // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo + close: function () { + $(this).dialog("destroy"); + } + }); + }; + + /** + * Detectar los campos de clave y añadir funciones + */ + var passwordDetect = function () { + // Crear los iconos de acciones sobre claves + $('.passwordfield__input').each(function () { + var thisInput = $(this); + var targetId = $(this).attr('id'); + + if (thisInput.next().hasClass('password-actions')) { + return; + } + + var btnMenu = '
'; + btnMenu += '
'; + btnMenu += '
    '; + btnMenu += '
  • ' + LANG[28] + '
  • '; + btnMenu += '
  • ' + LANG[29] + '
  • '; + btnMenu += '
  • ' + LANG[30] + '
  • '; + btnMenu += '
'; + + thisInput.after('
'); + + thisInput.next('.password-actions') + .prepend(btnMenu) + .prepend('') + .prepend(''); + + $(".quickGenPass") + .button({ + text: false, + icons: { + primary: "ui-icon-gear" + } + }) + .click(function () { + password(11, true, true, targetId); + }) + .next() + .button({ + text: false, + icons: { + primary: "ui-icon-key" + } + }) + .click(function () { + var menu = $(this).parent().next().show().position({ + my: "left top", + at: "left bottom", + of: this + }); + $(document).one("click", function () { + menu.hide(); + }); + return false; + }) + .parent() + .buttonset() + .next() + .hide() + .menu(); + + + $(this).on('keyup', function () { + Common.checkPassLevel($(this).val(), targetId); + }); + }); + + // Crear los iconos de acciones sobre claves (sólo mostrar clave) + $('.passwordfield__input-show').each(function () { + var thisParent = $(this); + var targetId = $(this).attr('id'); + + thisParent + .after(''); + }); + + // Crear evento para generar clave aleatoria + $('.passGen').each(function () { + $(this).on('click', function () { + var targetId = $(this).data('targetid'); + password(11, true, true, targetId); + }); + }); + + $('.passComplexity').each(function () { + $(this).on('click', function () { + complexityDialog(); + }); + }); + + // Crear evento para mostrar clave generada/introducida + $('.showpass').each(function () { + $(this).on('mouseover', function () { + var targetId = $(this).data('targetid'); + $(this).attr('title', $('#' + targetId).val()); + }); + }); + + // Reset de los campos de clave + $('.reset').each(function () { + $(this).on('click', function () { + var targetId = $(this).data('targetid'); + $('#' + targetId).val(''); + $('#' + targetId + 'R').val(''); + }); + }); + }; + + return { + showLoading: showLoading, + hideLoading: hideLoading, + activeTooltip: activeTooltip, + passwordDetect: passwordDetect, + password : password, + init: function () { + jQuery.extend(jQuery.fancybox.defaults, { + type: 'ajax', + autoWidth: true, + autoHeight: true, + autoResize: true, + autoCenter: true, + fitToView: false, + minHeight: 50, + padding: 0, + helpers: {overlay: {css: {'background': 'rgba(0, 0, 0, 0.1)'}}}, + keys: {close: [27]}, + afterShow: function () { + $('#fancyContainer').find('input:visible:first').focus(); + } + }); + + jQuery.ajaxSetup({ + beforeSend: function () { + showLoading(); + }, + complete: function () { + hideLoading(); + + Common.setContentSize(); + + // Activar tooltips + activeTooltip(); + } + }); + + $(document).ready(function () { + Common.setContentSize(); + //setWindowAdjustSize(); + + // Activar tooltips + activeTooltip(); + }); + }, + Common : Common + }; +}; + +var sysPassUtil = new sysPass.Util.Theme(); +sysPassUtil.init(); \ No newline at end of file diff --git a/inc/themes/classic/js/js.php b/inc/themes/classic/js/js.php new file mode 100644 index 00000000..5dae3852 --- /dev/null +++ b/inc/themes/classic/js/js.php @@ -0,0 +1,28 @@ +. + * + */ + +$jsFilesTheme = array( + array('href' => \SP\Init::$THEMEPATH . '/js/functions.js', 'min' => true) +); \ No newline at end of file diff --git a/inc/themes/classic/ldap.inc b/inc/themes/classic/ldap.inc new file mode 100644 index 00000000..e4fd964f --- /dev/null +++ b/inc/themes/classic/ldap.inc @@ -0,0 +1,233 @@ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + /> +
+ + + + + /> +
+ + + + + /> +
+ + + + /> +
+ + + + + /> +
+ + + + + /> +
+ + + + + +
+ + + + + +
+ + + + + + /> +
+ + + +
+ +
+ + + + + + + + + +
+ +
+ +
+
\ No newline at end of file diff --git a/inc/themes/classic/login.inc b/inc/themes/classic/login.inc new file mode 100644 index 00000000..1b56e669 --- /dev/null +++ b/inc/themes/classic/login.inc @@ -0,0 +1,74 @@ +
+
+
+ +
+ +
+ + +
+ +
+ + + + + + 0): ?> + $value): ?> + + + +
+
+ + +
+ +
+ +
+ + +
+ + + + +
+ + + +
+ <?php echo _('Nuevas Características'); ?> +

+
+
+
    + + ', $feature , ''; ?> + +
+
+ \ No newline at end of file diff --git a/inc/themes/classic/mail.inc b/inc/themes/classic/mail.inc new file mode 100644 index 00000000..53e13fa3 --- /dev/null +++ b/inc/themes/classic/mail.inc @@ -0,0 +1,111 @@ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + /> +
+ + + +
+ + + +
+ + + + /> +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + /> +
+ + + + + + + + + + +
+ +
+ +
+
\ No newline at end of file diff --git a/inc/themes/classic/menu.inc b/inc/themes/classic/menu.inc new file mode 100644 index 00000000..04e609a9 --- /dev/null +++ b/inc/themes/classic/menu.inc @@ -0,0 +1,21 @@ +
+
+
    + + + + + + + + + +
  • + +
+
+
+
diff --git a/inc/themes/classic/mgmttabs.inc b/inc/themes/classic/mgmttabs.inc new file mode 100644 index 00000000..3e7463eb --- /dev/null +++ b/inc/themes/classic/mgmttabs.inc @@ -0,0 +1,80 @@ + $tab): ?> +
+
+ +
+ + +
+ + +
+
    + + +
  • + +
  • + + +
+
+ +
+ + + + $tab['props']['tblRowSrcId']; ?> + +
    + $rowSrc): ?> + + +
  • + $imgProp): ?> + $rowName): ?> + + + + +
  • + +
  • + $rowSrc) ? $item->$rowSrc : ' '; // Fix height ?> +
  • + + + +
  • + $action): ?> + + + + + $maxNumActions): ?> + + +
  • +
+ +
+ + +
+ \ No newline at end of file diff --git a/inc/themes/classic/passreset.inc b/inc/themes/classic/passreset.inc new file mode 100644 index 00000000..6b978da8 --- /dev/null +++ b/inc/themes/classic/passreset.inc @@ -0,0 +1,56 @@ +
+ + + +
+
+ + +

+ +

+

+ +

+ +

+ +

+

+ +

+ + + + + +
+ +
+ + + + + + +
+
+
\ No newline at end of file diff --git a/inc/themes/classic/profiles.inc b/inc/themes/classic/profiles.inc new file mode 100644 index 00000000..5ea8e88c --- /dev/null +++ b/inc/themes/classic/profiles.inc @@ -0,0 +1,173 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ /> +
+
+ + isAccView()) ? 'CHECKED' : ''; ?> /> + + isAccViewPass()) ? 'CHECKED' : ''; ?> /> +
+ + isAccViewHistory()) ? 'CHECKED' : ''; ?> /> + + isAccEdit()) ? 'CHECKED' : ''; ?> /> +
+ + isAccEditPass()) ? 'CHECKED' : ''; ?> /> + + isAccAdd()) ? 'CHECKED' : ''; ?> /> +
+ + isAccDelete()) ? 'CHECKED' : ''; ?> /> + + isAccFiles()) ? 'CHECKED' : ''; ?> /> +
+
+
+ + isConfigGeneral()) ? 'CHECKED' : ''; ?> /> + + isConfigEncryption()) ? 'CHECKED' : ''; ?> /> +
+ + isConfigBackup()) ? 'CHECKED' : ''; ?> /> + + isConfigImport()) ? 'CHECKED' : ''; ?> /> +
+
+
+ + isMgmUsers()) ? 'CHECKED' : ''; ?> /> + + isMgmGroups()) ? 'CHECKED' : ''; ?> /> +
+ + isMgmProfiles()) ? 'CHECKED' : ''; ?> /> + + isMgmCategories()) ? 'CHECKED' : ''; ?> /> +
+ + isMgmCustomers()) ? 'CHECKED' : ''; ?> /> + + isMgmCustomFields()) ? 'CHECKED' : ''; ?> /> +
+ + isMgmApiTokens()) ? 'CHECKED' : ''; ?> /> + +
+
+
+ + isEvl()) ? 'CHECKED' : ''; ?> /> +
+
+ + + user_login, ' | '; ?> + + + + +
+ + + + + + + + + + +
+ + +
+
+ +
+ +
\ No newline at end of file diff --git a/inc/themes/classic/request.inc b/inc/themes/classic/request.inc new file mode 100644 index 00000000..1a34821f --- /dev/null +++ b/inc/themes/classic/request.inc @@ -0,0 +1,41 @@ +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
account_name; ?>
customer_name; ?>
account_url; ?>
account_login; ?>
+ +
+ + + +
+
+ + + +
\ No newline at end of file diff --git a/inc/themes/classic/search.inc b/inc/themes/classic/search.inc new file mode 100644 index 00000000..e4ddf347 --- /dev/null +++ b/inc/themes/classic/search.inc @@ -0,0 +1,205 @@ +
+ +
+ +
+
    + +
  • + +
  • + +
+
+ + + + + + + + + +
\ No newline at end of file diff --git a/inc/themes/classic/searchbox.inc b/inc/themes/classic/searchbox.inc new file mode 100644 index 00000000..0faad01f --- /dev/null +++ b/inc/themes/classic/searchbox.inc @@ -0,0 +1,86 @@ +
+ + + + + +
+ + + + + + + /> + + + + + + + + + + + +
+
+ \ No newline at end of file diff --git a/inc/themes/classic/security.inc b/inc/themes/classic/security.inc new file mode 100644 index 00000000..1e7ad9c5 --- /dev/null +++ b/inc/themes/classic/security.inc @@ -0,0 +1,73 @@ + +
+
+ +
+ +
+ + + + + + + +
+ + + + + + /> + + +

+ QR Code + +

+ +

+ + + +

+ <?php echo _('Atención'); ?> + +
+ + + + + + + +
+
+ +
+
+ \ No newline at end of file diff --git a/inc/themes/classic/sessionbar.inc b/inc/themes/classic/sessionbar.inc new file mode 100644 index 00000000..6c75bb31 --- /dev/null +++ b/inc/themes/classic/sessionbar.inc @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/inc/themes/classic/tabs-end.inc b/inc/themes/classic/tabs-end.inc new file mode 100644 index 00000000..2e74576a --- /dev/null +++ b/inc/themes/classic/tabs-end.inc @@ -0,0 +1,13 @@ +
+ + \ No newline at end of file diff --git a/inc/themes/classic/tabs-start.inc b/inc/themes/classic/tabs-start.inc new file mode 100644 index 00000000..783a9723 --- /dev/null +++ b/inc/themes/classic/tabs-start.inc @@ -0,0 +1,9 @@ + +
+
    + $tab): ?> +
  • + +
  • + +
\ No newline at end of file diff --git a/inc/themes/classic/tokens.inc b/inc/themes/classic/tokens.inc new file mode 100644 index 00000000..9e578d8d --- /dev/null +++ b/inc/themes/classic/tokens.inc @@ -0,0 +1,69 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + +
authtoken_token : ''; ?>
+ + + + + + + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/inc/themes/classic/update.inc b/inc/themes/classic/update.inc new file mode 100644 index 00000000..548478d4 --- /dev/null +++ b/inc/themes/classic/update.inc @@ -0,0 +1,27 @@ + +
+ + feedback + +
+ +
+ + + +    +
cloud_download
+
+ +
+ check_circle +
+ +
warning +
+ +
+ diff --git a/inc/themes/classic/upgrade.inc b/inc/themes/classic/upgrade.inc new file mode 100644 index 00000000..6a09ce88 --- /dev/null +++ b/inc/themes/classic/upgrade.inc @@ -0,0 +1,24 @@ +
+ + +
+
+ +

+ +

+ + + +
+ +
+ +
+
+
diff --git a/inc/themes/classic/users.inc b/inc/themes/classic/users.inc new file mode 100644 index 00000000..fdbea933 --- /dev/null +++ b/inc/themes/classic/users.inc @@ -0,0 +1,203 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + /> + + + + + + +
+ +
+ +
+ + + + + +
+ +
+ +
+ +
+
+ + + /> + + /> + +
+ + /> + + /> +
+
+ text; ?> + help): ?> + + + + + + required) ? 'required' : ''; ?>> + + value; ?> + +
+ + + + + + + + + +
+ + +
+
+ +
+ +
+ \ No newline at end of file diff --git a/inc/themes/classic/userspass.inc b/inc/themes/classic/userspass.inc new file mode 100644 index 00000000..9772e58f --- /dev/null +++ b/inc/themes/classic/userspass.inc @@ -0,0 +1,39 @@ +
+

+ +
+ + + + + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+
+ +
+
\ No newline at end of file diff --git a/inc/themes/classic/wiki.inc b/inc/themes/classic/wiki.inc new file mode 100644 index 00000000..3a625ed9 --- /dev/null +++ b/inc/themes/classic/wiki.inc @@ -0,0 +1,147 @@ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + + + /> +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/inc/themes/material-blue/2fa.inc b/inc/themes/material-blue/2fa.inc new file mode 100644 index 00000000..24fe5e9b --- /dev/null +++ b/inc/themes/material-blue/2fa.inc @@ -0,0 +1,40 @@ +
+ + + +
+
+ +
+ + +
+
+ + + + + +
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc new file mode 100644 index 00000000..7435e048 --- /dev/null +++ b/inc/themes/material-blue/account.inc @@ -0,0 +1,508 @@ +
+ + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0): ?> + + + + + + +user_editName): ?> + + + user_editName): ?> + + + + + +
+ +
+ + +
+ + account_name; ?> + +
+ + +

+
+ + +
+ + customer_name; ?> + +
+ + + + category_name; ?> + +
+ +
+ + +
+ + account_url; ?> + +
+ +
+ + +
+ + account_login; ?> + +
+
+ + +
+
+
+ + +
+
+ +
+ + +
+ + account_notes; ?> + + +
+ + +
+ +
+
+ + + + + +
+ +
+
+ cloud_upload +
+ + + +
+ + +
account_dateEdit; ?> user_editName; ?>
+ + + + + + + + + +
+ text; ?> + help): ?> +
help_outline
+
+

help; ?>

+
+ +
+ +
+ required) ? 'required' : ''; ?>> + +
+ + type === \SP\CustomFields::TYPE_PASSWORD && !$showViewPass):?> + **** + + value; ?> + + +
+ + + + + + + + + + + + + + + + + + + + + + 0): ?> + + + + + + 0): ?> + + + + + + + + + + + + + + + +
account_countView . "(" . $accountData->account_countDecrypt . ")"; ?>
account_dateAdd ?>
user_name) ? $accountData->user_name : $accountData->user_login; ?>
usergroup_name; ?>
+ $userName) { + if ($userId != $accountData->account_userId) { + if (in_array($userId, $accountOtherUsers)) { + $accUsers[] = $userName; + } + } + } + + $usersEdit = ($accountData->account_otherUserEdit) ? '(+)' : ''; + echo $usersEdit . ' ' . implode(" | ", $accUsers); + ?> +
+ $groupName) { + if ($groupId != $accountData->account_userGroupId) { + if (in_array($groupId, $accountOtherGroups)) { + $accGroups[] = $groupName; + } + } + } + + $groupsEdit = ($accountData->account_otherGroupEdit) ? '(+)' : ''; + + echo $groupsEdit . ' ' . implode(" | ", $accGroups); + ?> +
account_dateEdit; ?>
user_editName) ? $accountData->user_editName : $accountData->user_editLogin; ?>
+ + + +
+ + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/inc/themes/material-blue/backup.inc b/inc/themes/material-blue/backup.inc new file mode 100644 index 00000000..a3b197b7 --- /dev/null +++ b/inc/themes/material-blue/backup.inc @@ -0,0 +1,160 @@ + +
+
+ +
+ + + + + + + + + + +
+ + + +
+ + + + + Backup BBDD + + + + Backup + + + +
+ +
+ + + + +
+ +
+ + +
+

+ +

+
+ + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + XML + + + +
+ + +
+ + +
+
+ + +
+ + +
+
+ + + + + +
+ +
+ + +
+

+ +

+ +

+ +

+
+ + + +
+ + +
\ No newline at end of file diff --git a/inc/themes/material-blue/body.inc b/inc/themes/material-blue/body.inc new file mode 100644 index 00000000..f985e595 --- /dev/null +++ b/inc/themes/material-blue/body.inc @@ -0,0 +1,9 @@ + +
+ +
+
+
+
\ No newline at end of file diff --git a/inc/themes/material-blue/categories.inc b/inc/themes/material-blue/categories.inc new file mode 100644 index 00000000..b83d9362 --- /dev/null +++ b/inc/themes/material-blue/categories.inc @@ -0,0 +1,76 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + +
+
+ "> + +
+
+
+ "> + +
+
+ text; ?> + help): ?> +
help_outline
+
+

help; ?>

+
+ +
+ +
+ required) ? 'required' : ''; ?>> + +
+ + value; ?> + +
+ + + + "/> + + + +
+
+
+ +
+
\ No newline at end of file diff --git a/inc/themes/material-blue/config.inc b/inc/themes/material-blue/config.inc new file mode 100644 index 00000000..cf895502 --- /dev/null +++ b/inc/themes/material-blue/config.inc @@ -0,0 +1,421 @@ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+ required/> + +
+
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + +
+ + +
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+
+ required/> + +
+
+ +
help_outline
+
+

+ +

+

+ +

+
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+ +

+ +

+ +

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+ +

+ +

+
+
+
+ /> + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + +
+
+ + +
+ + +
+
+ + +
+ + +
+
+ + +
+ + +
+
+ + + + + + + + + + + +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/inc/themes/material-blue/css/LICENSE b/inc/themes/material-blue/css/LICENSE new file mode 100644 index 00000000..9faf1086 --- /dev/null +++ b/inc/themes/material-blue/css/LICENSE @@ -0,0 +1,212 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 Google Inc + + 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. + + All code in any directories or sub-directories that end with *.html or + *.css is licensed under the Creative Commons Attribution International + 4.0 License, which full text can be found here: + https://creativecommons.org/licenses/by/4.0/legalcode. + + As an exception to this license, all html or css that is generated by + the software at the direction of the user is copyright the user. The + user has full ownership and control over such content, including + whether and how they wish to license it. diff --git a/inc/themes/material-blue/css/alertify.custom.css b/inc/themes/material-blue/css/alertify.custom.css new file mode 100644 index 00000000..6906e6eb --- /dev/null +++ b/inc/themes/material-blue/css/alertify.custom.css @@ -0,0 +1,8 @@ +.alertify-log-error { + background: #F44336 !important; + background: rgba(244, 67, 54, .9) !important; +} +.alertify-log-success { + background: #009688; + background: rgba(0, 150, 136, .9) !important; +} \ No newline at end of file diff --git a/inc/themes/material-blue/css/css.php b/inc/themes/material-blue/css/css.php new file mode 100644 index 00000000..e52c73ba --- /dev/null +++ b/inc/themes/material-blue/css/css.php @@ -0,0 +1,35 @@ +. + * + */ + +$cssFilesTheme = array( +// array('href' => 'https://fonts.googleapis.com/icon?family=Material+Icons', 'min' => false), + array('href' => 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700', 'min' => false), + array('href' => \SP\Init::$THEMEPATH . '/css/material.min.css', 'min' => false), + array('href' => \SP\Init::$THEMEPATH . '/css/material-custom.css', 'min' => true), + array('href' => \SP\Init::$THEMEPATH . '/css/jquery-ui.theme.css', 'min' => true), + array('href' => \SP\Init::$THEMEPATH . '/css/styles.css', 'min' => true), + array('href' => \SP\Init::$THEMEPATH . '/css/search-grid.css', 'min' => true), + array('href' => \SP\Init::$THEMEPATH . '/css/alertify.custom.css', 'min' => true) +); \ No newline at end of file diff --git a/inc/themes/material-blue/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/inc/themes/material-blue/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 00000000..f5c0fb08 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_flat_75_ffffff_40x100.png b/inc/themes/material-blue/css/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 00000000..776203fb Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/inc/themes/material-blue/css/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 00000000..39529a09 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_glass_95_fef1ec_1x400.png b/inc/themes/material-blue/css/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 00000000..73d94227 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png new file mode 100644 index 00000000..b155fb03 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png new file mode 100644 index 00000000..50d07c2e Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png new file mode 100644 index 00000000..107db9f7 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png differ diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png new file mode 100644 index 00000000..98a08859 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png differ diff --git a/inc/themes/material-blue/css/images/ui-icons_222222_256x240.png b/inc/themes/material-blue/css/images/ui-icons_222222_256x240.png new file mode 100644 index 00000000..e9c8e16a Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-icons_222222_256x240.png differ diff --git a/inc/themes/material-blue/css/images/ui-icons_2e83ff_256x240.png b/inc/themes/material-blue/css/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 00000000..f2bf8388 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-icons_2e83ff_256x240.png differ diff --git a/inc/themes/material-blue/css/images/ui-icons_cd0a0a_256x240.png b/inc/themes/material-blue/css/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 00000000..49370189 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-icons_cd0a0a_256x240.png differ diff --git a/inc/themes/material-blue/css/images/ui-icons_fff_256x240.png b/inc/themes/material-blue/css/images/ui-icons_fff_256x240.png new file mode 100644 index 00000000..4d66f596 Binary files /dev/null and b/inc/themes/material-blue/css/images/ui-icons_fff_256x240.png differ diff --git a/inc/themes/material-blue/css/jquery-ui.theme.css b/inc/themes/material-blue/css/jquery-ui.theme.css new file mode 100644 index 00000000..6787a802 --- /dev/null +++ b/inc/themes/material-blue/css/jquery-ui.theme.css @@ -0,0 +1,410 @@ +/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Roboto-Regular%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=%23536DFE&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=%23aaaaaa&fcHeader=%23fff&iconColorHeader=%23fff&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=%23aaaaaa&fcContent=%23222222&iconColorContent=%23222222&bgColorDefault=%23536DFE&bgTextureDefault=highlight_hard&bgImgOpacityDefault=100&borderColorDefault=%23fff&fcDefault=%23fff&iconColorDefault=%23fff&bgColorHover=%23536DFE&bgTextureHover=highlight_hard&bgImgOpacityHover=60&borderColorHover=%23fff&fcHover=%23fff&iconColorHover=%23fff&bgColorActive=%23ffffff&bgTextureActive=highlight_hard&bgImgOpacityActive=100&borderColorActive=%23fff&fcActive=%23444&iconColorActive=%23fff&bgColorHighlight=%23fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=%23fcefa1&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Roboto-Regular,Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Roboto-Regular,Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url("../inc/themes/material-blue/css/images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #536DFE url("../inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png") 50% 50% repeat-x; + color: #fff; + font-weight: bold; +} +.ui-widget-header a { + color: #fff; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #fff; + background: #536DFE url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") 50% 50% repeat-x; + font-weight: bold; + color: #fff; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #fff; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #fff; + background: #536DFE url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png") 50% 50% repeat-x; + font-weight: bold; + color: #fff; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #fff; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #fff; + background: #ffffff url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png") 50% 50% repeat-x; + font-weight: bold; + color: #444; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #444; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("../inc/themes/material-blue/css/images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("../inc/themes/material-blue/css/images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and ../inc/themes/material-blue/css/images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_fff_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_fff_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_fff_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_fff_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("../inc/themes/material-blue/css/images/ui-icons_cd0a0a_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url("../inc/themes/material-blue/css/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url("../inc/themes/material-blue/css/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} diff --git a/inc/themes/material-blue/css/material-custom.css b/inc/themes/material-blue/css/material-custom.css new file mode 100644 index 00000000..5997db10 --- /dev/null +++ b/inc/themes/material-blue/css/material-custom.css @@ -0,0 +1,53 @@ +.mdl-button {margin: 0 .3em;} + +.fg-blue20 {color: rgba(83, 109, 254, .2)} +.fg-blue40 {color: rgba(83, 109, 254, .4)} +.fg-blue60 {color: rgba(83, 109, 254, .6)} +.fg-blue80 {color: rgba(83, 109, 254, .8)} +.fg-blue100 {color: rgb(83, 109, 254)} + +.mdl-button--fab.mdl-button--colored.bg-blue20 {background-color: rgba(83, 109, 254, .2)} +.mdl-button--fab.mdl-button--colored.bg-blue40 {background-color: rgba(83, 109, 254, .4)} +.mdl-button--fab.mdl-button--colored.bg-blue60 {background-color: rgba(83, 109, 254, .6)} +.mdl-button--fab.mdl-button--colored.bg-blue80 {background-color: rgba(83, 109, 254, .8)} +.mdl-button--fab.mdl-button--colored.bg-blue100 {background-color: rgb(83, 109, 254)} + +.fg-orange20 {color: rgba(255, 193, 7, .2)} +.fg-orange40 {color: rgba(255, 193, 7, .4)} +.fg-orange60 {color: rgba(255, 193, 7, .6)} +.fg-orange80 {color: rgba(255, 193, 7, .8)} +.fg-orange100 {color: rgba(255, 193, 7, 1)} + +.mdl-button--fab.mdl-button--colored.bg-orange20 {background-color: rgba(255, 193, 7, .2)} +.mdl-button--fab.mdl-button--colored.bg-orange40 {background-color: rgba(255, 193, 7, .4)} +.mdl-button--fab.mdl-button--colored.bg-orange60 {background-color: rgba(255, 193, 7, .6)} +.mdl-button--fab.mdl-button--colored.bg-orange80 {background-color: rgba(255, 193, 7, .8)} +.mdl-button--fab.mdl-button--colored.bg-orange100 {background-color: rgba(255, 193, 7, 1)} + +.fg-red20 {color: rgba(244, 67, 54, .2)} +.fg-red40 {color: rgba(244, 67, 54, .4)} +.fg-red60 {color: rgba(244, 67, 54, .6)} +.fg-red80 {color: rgba(244, 67, 54, .8)} +.fg-red100 {color: rgb(244, 67, 54)} + +.mdl-button--fab.mdl-button--colored.bg-red20 {background-color: rgba(244, 67, 54, .2)} +.mdl-button--fab.mdl-button--colored.bg-red40 {background-color: rgba(244, 67, 54, .4)} +.mdl-button--fab.mdl-button--colored.bg-red60 {background-color: rgba(244, 67, 54, .6)} +.mdl-button--fab.mdl-button--colored.bg-red80 {background-color: rgba(244, 67, 54, .8)} +.mdl-button--fab.mdl-button--colored.bg-red100 {background-color: rgb(244, 67, 54)} + +.fg-green20 {color: rgba(0, 150, 136, .2)} +.fg-green40 {color: rgba(0, 150, 136, .4)} +.fg-green60 {color: rgba(0, 150, 136, .6)} +.fg-green80 {color: rgba(0, 150, 136, .8)} +.fg-green00 {color: rgb(0, 150, 136)} + +.mdl-button--fab.mdl-button--colored.bg-green20 {background-color: rgba(0, 150, 136, 0.2)} +.mdl-button--fab.mdl-button--colored.bg-green40 {background-color: rgba(0, 150, 136, 0.4)} +.mdl-button--fab.mdl-button--colored.bg-green60 {background-color: rgba(0, 150, 136, .6)} +.mdl-button--fab.mdl-button--colored.bg-green80 {background-color: rgba(0, 150, 136, .8)} +.mdl-button--fab.mdl-button--colored.bg-green100 {background-color: rgb(0, 150, 136)} + +.mdl-tooltip{text-align: justify; max-width: 400px;} + +.mdl-switch--inline {display: inline; margin: 0 1em;} diff --git a/inc/themes/material-blue/css/material.min.css b/inc/themes/material-blue/css/material.min.css new file mode 100644 index 00000000..6537c616 --- /dev/null +++ b/inc/themes/material-blue/css/material.min.css @@ -0,0 +1,8 @@ +/** + * material-design-lite - Material Design Components in CSS, JS and HTML + * @version v1.0.2 + * @license Apache-2.0 + * @copyright 2015 Google, Inc. + * @link https://github.com/google/material-design-lite + */ +@charset "UTF-8";html{color:rgba(0,0,0,.87)}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}audio,canvas,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.browsehappy{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}@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}}a,.mdl-accordion,.mdl-button,.mdl-card,.mdl-checkbox,.mdl-dropdown-menu,.mdl-icon-toggle,.mdl-item,.mdl-radio,.mdl-slider,.mdl-switch,.mdl-tabs__tab{-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(255,255,255,0)}html{width:100%;height:100%;-ms-touch-action:manipulation;touch-action:manipulation}body{width:100%;min-height:100%}main{display:block}*[hidden]{display:none!important}html,body{font-family:"Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:20px}h1,h2,h3,h4,h5,h6,p{padding:0}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;line-height:1.35;letter-spacing:-.02em;opacity:.54;font-size:.6em}h1{font-size:56px;line-height:1.35;letter-spacing:-.02em;margin:24px 0}h1,h2{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h2{font-size:45px;line-height:48px}h2,h3{margin:24px 0}h3{font-size:34px;line-height:40px}h3,h4{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h4{font-size:24px;line-height:32px;-moz-osx-font-smoothing:grayscale;margin:24px 0 16px}h5{font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}h5,h6{font-family:"Roboto","Helvetica","Arial",sans-serif;margin:24px 0 16px}h6{font-size:16px;letter-spacing:.04em}h6,p{font-weight:400;line-height:24px}p{font-size:14px;letter-spacing:0;margin:0 0 16px}a{color:rgb(83,109,254);font-weight:500}blockquote{font-family:"Roboto","Helvetica","Arial",sans-serif;position:relative;font-size:24px;font-weight:300;font-style:italic;line-height:1.35;letter-spacing:.08em}blockquote:before{position:absolute;left:-.5em;content:'“'}blockquote:after{content:'”';margin-left:-.05em}mark{background-color:#f4ff81}dt{font-weight:700}address{font-size:12px;line-height:1;font-style:normal}address,ul,ol{font-weight:400;letter-spacing:0}ul,ol{font-size:14px;line-height:24px}.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:112px;font-weight:300;line-height:1;letter-spacing:-.04em}.mdl-typography--display-4-color-contrast{opacity:.54}.mdl-typography--display-3,.mdl-typography--display-3-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:56px;font-weight:400;line-height:1.35;letter-spacing:-.02em}.mdl-typography--display-3-color-contrast{opacity:.54}.mdl-typography--display-2,.mdl-typography--display-2-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:45px;font-weight:400;line-height:48px}.mdl-typography--display-2-color-contrast{opacity:.54}.mdl-typography--display-1,.mdl-typography--display-1-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:34px;font-weight:400;line-height:40px}.mdl-typography--display-1-color-contrast{opacity:.54}.mdl-typography--headline,.mdl-typography--headline-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:24px;font-weight:400;line-height:32px;-moz-osx-font-smoothing:grayscale}.mdl-typography--headline-color-contrast{opacity:.87}.mdl-typography--title,.mdl-typography--title-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}.mdl-typography--title-color-contrast{opacity:.87}.mdl-typography--subhead,.mdl-typography--subhead-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:.04em}.mdl-typography--subhead-color-contrast{opacity:.87}.mdl-typography--body-2,.mdl-typography--body-2-color-contrast{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0}.mdl-typography--body-2-color-contrast{opacity:.87}.mdl-typography--body-1,.mdl-typography--body-1-color-contrast{font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-color-contrast{opacity:.87}.mdl-typography--body-2-force-preferred-font,.mdl-typography--body-2-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0}.mdl-typography--body-2-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--body-1-force-preferred-font,.mdl-typography--body-1-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--caption,.mdl-typography--caption-force-preferred-font{font-size:12px;font-weight:400;line-height:1;letter-spacing:0}.mdl-typography--caption-force-preferred-font{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--caption-color-contrast,.mdl-typography--caption-force-preferred-font-color-contrast{font-size:12px;font-weight:400;line-height:1;letter-spacing:0;opacity:.54}.mdl-typography--caption-force-preferred-font-color-contrast,.mdl-typography--menu{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--menu{font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--menu-color-contrast{opacity:.87}.mdl-typography--menu-color-contrast,.mdl-typography--button,.mdl-typography--button-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--button,.mdl-typography--button-color-contrast{text-transform:uppercase}.mdl-typography--button-color-contrast{opacity:.87}.mdl-typography--text-left{text-align:left}.mdl-typography--text-right{text-align:right}.mdl-typography--text-center{text-align:center}.mdl-typography--text-justify{text-align:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.mdl-color-text--red{color:#f44336 !important}.mdl-color--red{background-color:#f44336 !important}.mdl-color-text--red-50{color:#ffebee !important}.mdl-color--red-50{background-color:#ffebee !important}.mdl-color-text--red-100{color:#ffcdd2 !important}.mdl-color--red-100{background-color:#ffcdd2 !important}.mdl-color-text--red-200{color:#ef9a9a !important}.mdl-color--red-200{background-color:#ef9a9a !important}.mdl-color-text--red-300{color:#e57373 !important}.mdl-color--red-300{background-color:#e57373 !important}.mdl-color-text--red-400{color:#ef5350 !important}.mdl-color--red-400{background-color:#ef5350 !important}.mdl-color-text--red-500{color:#f44336 !important}.mdl-color--red-500{background-color:#f44336 !important}.mdl-color-text--red-600{color:#e53935 !important}.mdl-color--red-600{background-color:#e53935 !important}.mdl-color-text--red-700{color:#d32f2f !important}.mdl-color--red-700{background-color:#d32f2f !important}.mdl-color-text--red-800{color:#c62828 !important}.mdl-color--red-800{background-color:#c62828 !important}.mdl-color-text--red-900{color:#b71c1c !important}.mdl-color--red-900{background-color:#b71c1c !important}.mdl-color-text--red-A100{color:#ff8a80 !important}.mdl-color--red-A100{background-color:#ff8a80 !important}.mdl-color-text--red-A200{color:#ff5252 !important}.mdl-color--red-A200{background-color:#ff5252 !important}.mdl-color-text--red-A400{color:#ff1744 !important}.mdl-color--red-A400{background-color:#ff1744 !important}.mdl-color-text--red-A700{color:#d50000 !important}.mdl-color--red-A700{background-color:#d50000 !important}.mdl-color-text--pink{color:#e91e63 !important}.mdl-color--pink{background-color:#e91e63 !important}.mdl-color-text--pink-50{color:#fce4ec !important}.mdl-color--pink-50{background-color:#fce4ec !important}.mdl-color-text--pink-100{color:#f8bbd0 !important}.mdl-color--pink-100{background-color:#f8bbd0 !important}.mdl-color-text--pink-200{color:#f48fb1 !important}.mdl-color--pink-200{background-color:#f48fb1 !important}.mdl-color-text--pink-300{color:#f06292 !important}.mdl-color--pink-300{background-color:#f06292 !important}.mdl-color-text--pink-400{color:#ec407a !important}.mdl-color--pink-400{background-color:#ec407a !important}.mdl-color-text--pink-500{color:#e91e63 !important}.mdl-color--pink-500{background-color:#e91e63 !important}.mdl-color-text--pink-600{color:#d81b60 !important}.mdl-color--pink-600{background-color:#d81b60 !important}.mdl-color-text--pink-700{color:#c2185b !important}.mdl-color--pink-700{background-color:#c2185b !important}.mdl-color-text--pink-800{color:#ad1457 !important}.mdl-color--pink-800{background-color:#ad1457 !important}.mdl-color-text--pink-900{color:#880e4f !important}.mdl-color--pink-900{background-color:#880e4f !important}.mdl-color-text--pink-A100{color:#ff80ab !important}.mdl-color--pink-A100{background-color:#ff80ab !important}.mdl-color-text--pink-A200{color:#ff4081 !important}.mdl-color--pink-A200{background-color:#ff4081 !important}.mdl-color-text--pink-A400{color:#f50057 !important}.mdl-color--pink-A400{background-color:#f50057 !important}.mdl-color-text--pink-A700{color:#c51162 !important}.mdl-color--pink-A700{background-color:#c51162 !important}.mdl-color-text--purple{color:#9c27b0 !important}.mdl-color--purple{background-color:#9c27b0 !important}.mdl-color-text--purple-50{color:#f3e5f5 !important}.mdl-color--purple-50{background-color:#f3e5f5 !important}.mdl-color-text--purple-100{color:#e1bee7 !important}.mdl-color--purple-100{background-color:#e1bee7 !important}.mdl-color-text--purple-200{color:#ce93d8 !important}.mdl-color--purple-200{background-color:#ce93d8 !important}.mdl-color-text--purple-300{color:#ba68c8 !important}.mdl-color--purple-300{background-color:#ba68c8 !important}.mdl-color-text--purple-400{color:#ab47bc !important}.mdl-color--purple-400{background-color:#ab47bc !important}.mdl-color-text--purple-500{color:#9c27b0 !important}.mdl-color--purple-500{background-color:#9c27b0 !important}.mdl-color-text--purple-600{color:#8e24aa !important}.mdl-color--purple-600{background-color:#8e24aa !important}.mdl-color-text--purple-700{color:#7b1fa2 !important}.mdl-color--purple-700{background-color:#7b1fa2 !important}.mdl-color-text--purple-800{color:#6a1b9a !important}.mdl-color--purple-800{background-color:#6a1b9a !important}.mdl-color-text--purple-900{color:#4a148c !important}.mdl-color--purple-900{background-color:#4a148c !important}.mdl-color-text--purple-A100{color:#ea80fc !important}.mdl-color--purple-A100{background-color:#ea80fc !important}.mdl-color-text--purple-A200{color:#e040fb !important}.mdl-color--purple-A200{background-color:#e040fb !important}.mdl-color-text--purple-A400{color:#d500f9 !important}.mdl-color--purple-A400{background-color:#d500f9 !important}.mdl-color-text--purple-A700{color:#a0f !important}.mdl-color--purple-A700{background-color:#a0f !important}.mdl-color-text--deep-purple{color:#673ab7 !important}.mdl-color--deep-purple{background-color:#673ab7 !important}.mdl-color-text--deep-purple-50{color:#ede7f6 !important}.mdl-color--deep-purple-50{background-color:#ede7f6 !important}.mdl-color-text--deep-purple-100{color:#d1c4e9 !important}.mdl-color--deep-purple-100{background-color:#d1c4e9 !important}.mdl-color-text--deep-purple-200{color:#b39ddb !important}.mdl-color--deep-purple-200{background-color:#b39ddb !important}.mdl-color-text--deep-purple-300{color:#9575cd !important}.mdl-color--deep-purple-300{background-color:#9575cd !important}.mdl-color-text--deep-purple-400{color:#7e57c2 !important}.mdl-color--deep-purple-400{background-color:#7e57c2 !important}.mdl-color-text--deep-purple-500{color:#673ab7 !important}.mdl-color--deep-purple-500{background-color:#673ab7 !important}.mdl-color-text--deep-purple-600{color:#5e35b1 !important}.mdl-color--deep-purple-600{background-color:#5e35b1 !important}.mdl-color-text--deep-purple-700{color:#512da8 !important}.mdl-color--deep-purple-700{background-color:#512da8 !important}.mdl-color-text--deep-purple-800{color:#4527a0 !important}.mdl-color--deep-purple-800{background-color:#4527a0 !important}.mdl-color-text--deep-purple-900{color:#311b92 !important}.mdl-color--deep-purple-900{background-color:#311b92 !important}.mdl-color-text--deep-purple-A100{color:#b388ff !important}.mdl-color--deep-purple-A100{background-color:#b388ff !important}.mdl-color-text--deep-purple-A200{color:#7c4dff !important}.mdl-color--deep-purple-A200{background-color:#7c4dff !important}.mdl-color-text--deep-purple-A400{color:#651fff !important}.mdl-color--deep-purple-A400{background-color:#651fff !important}.mdl-color-text--deep-purple-A700{color:#6200ea !important}.mdl-color--deep-purple-A700{background-color:#6200ea !important}.mdl-color-text--indigo{color:#3f51b5 !important}.mdl-color--indigo{background-color:#3f51b5 !important}.mdl-color-text--indigo-50{color:#e8eaf6 !important}.mdl-color--indigo-50{background-color:#e8eaf6 !important}.mdl-color-text--indigo-100{color:#c5cae9 !important}.mdl-color--indigo-100{background-color:#c5cae9 !important}.mdl-color-text--indigo-200{color:#9fa8da !important}.mdl-color--indigo-200{background-color:#9fa8da !important}.mdl-color-text--indigo-300{color:#7986cb !important}.mdl-color--indigo-300{background-color:#7986cb !important}.mdl-color-text--indigo-400{color:#5c6bc0 !important}.mdl-color--indigo-400{background-color:#5c6bc0 !important}.mdl-color-text--indigo-500{color:#3f51b5 !important}.mdl-color--indigo-500{background-color:#3f51b5 !important}.mdl-color-text--indigo-600{color:#3949ab !important}.mdl-color--indigo-600{background-color:#3949ab !important}.mdl-color-text--indigo-700{color:#303f9f !important}.mdl-color--indigo-700{background-color:#303f9f !important}.mdl-color-text--indigo-800{color:#283593 !important}.mdl-color--indigo-800{background-color:#283593 !important}.mdl-color-text--indigo-900{color:#1a237e !important}.mdl-color--indigo-900{background-color:#1a237e !important}.mdl-color-text--indigo-A100{color:#8c9eff !important}.mdl-color--indigo-A100{background-color:#8c9eff !important}.mdl-color-text--indigo-A200{color:#536dfe !important}.mdl-color--indigo-A200{background-color:#536dfe !important}.mdl-color-text--indigo-A400{color:#3d5afe !important}.mdl-color--indigo-A400{background-color:#3d5afe !important}.mdl-color-text--indigo-A700{color:#304ffe !important}.mdl-color--indigo-A700{background-color:#304ffe !important}.mdl-color-text--blue{color:#2196f3 !important}.mdl-color--blue{background-color:#2196f3 !important}.mdl-color-text--blue-50{color:#e3f2fd !important}.mdl-color--blue-50{background-color:#e3f2fd !important}.mdl-color-text--blue-100{color:#bbdefb !important}.mdl-color--blue-100{background-color:#bbdefb !important}.mdl-color-text--blue-200{color:#90caf9 !important}.mdl-color--blue-200{background-color:#90caf9 !important}.mdl-color-text--blue-300{color:#64b5f6 !important}.mdl-color--blue-300{background-color:#64b5f6 !important}.mdl-color-text--blue-400{color:#42a5f5 !important}.mdl-color--blue-400{background-color:#42a5f5 !important}.mdl-color-text--blue-500{color:#2196f3 !important}.mdl-color--blue-500{background-color:#2196f3 !important}.mdl-color-text--blue-600{color:#1e88e5 !important}.mdl-color--blue-600{background-color:#1e88e5 !important}.mdl-color-text--blue-700{color:#1976d2 !important}.mdl-color--blue-700{background-color:#1976d2 !important}.mdl-color-text--blue-800{color:#1565c0 !important}.mdl-color--blue-800{background-color:#1565c0 !important}.mdl-color-text--blue-900{color:#0d47a1 !important}.mdl-color--blue-900{background-color:#0d47a1 !important}.mdl-color-text--blue-A100{color:#82b1ff !important}.mdl-color--blue-A100{background-color:#82b1ff !important}.mdl-color-text--blue-A200{color:#448aff !important}.mdl-color--blue-A200{background-color:#448aff !important}.mdl-color-text--blue-A400{color:#2979ff !important}.mdl-color--blue-A400{background-color:#2979ff !important}.mdl-color-text--blue-A700{color:#2962ff !important}.mdl-color--blue-A700{background-color:#2962ff !important}.mdl-color-text--light-blue{color:#03a9f4 !important}.mdl-color--light-blue{background-color:#03a9f4 !important}.mdl-color-text--light-blue-50{color:#e1f5fe !important}.mdl-color--light-blue-50{background-color:#e1f5fe !important}.mdl-color-text--light-blue-100{color:#b3e5fc !important}.mdl-color--light-blue-100{background-color:#b3e5fc !important}.mdl-color-text--light-blue-200{color:#81d4fa !important}.mdl-color--light-blue-200{background-color:#81d4fa !important}.mdl-color-text--light-blue-300{color:#4fc3f7 !important}.mdl-color--light-blue-300{background-color:#4fc3f7 !important}.mdl-color-text--light-blue-400{color:#29b6f6 !important}.mdl-color--light-blue-400{background-color:#29b6f6 !important}.mdl-color-text--light-blue-500{color:#03a9f4 !important}.mdl-color--light-blue-500{background-color:#03a9f4 !important}.mdl-color-text--light-blue-600{color:#039be5 !important}.mdl-color--light-blue-600{background-color:#039be5 !important}.mdl-color-text--light-blue-700{color:#0288d1 !important}.mdl-color--light-blue-700{background-color:#0288d1 !important}.mdl-color-text--light-blue-800{color:#0277bd !important}.mdl-color--light-blue-800{background-color:#0277bd !important}.mdl-color-text--light-blue-900{color:#01579b !important}.mdl-color--light-blue-900{background-color:#01579b !important}.mdl-color-text--light-blue-A100{color:#80d8ff !important}.mdl-color--light-blue-A100{background-color:#80d8ff !important}.mdl-color-text--light-blue-A200{color:#40c4ff !important}.mdl-color--light-blue-A200{background-color:#40c4ff !important}.mdl-color-text--light-blue-A400{color:#00b0ff !important}.mdl-color--light-blue-A400{background-color:#00b0ff !important}.mdl-color-text--light-blue-A700{color:#0091ea !important}.mdl-color--light-blue-A700{background-color:#0091ea !important}.mdl-color-text--cyan{color:#00bcd4 !important}.mdl-color--cyan{background-color:#00bcd4 !important}.mdl-color-text--cyan-50{color:#e0f7fa !important}.mdl-color--cyan-50{background-color:#e0f7fa !important}.mdl-color-text--cyan-100{color:#b2ebf2 !important}.mdl-color--cyan-100{background-color:#b2ebf2 !important}.mdl-color-text--cyan-200{color:#80deea !important}.mdl-color--cyan-200{background-color:#80deea !important}.mdl-color-text--cyan-300{color:#4dd0e1 !important}.mdl-color--cyan-300{background-color:#4dd0e1 !important}.mdl-color-text--cyan-400{color:#26c6da !important}.mdl-color--cyan-400{background-color:#26c6da !important}.mdl-color-text--cyan-500{color:#00bcd4 !important}.mdl-color--cyan-500{background-color:#00bcd4 !important}.mdl-color-text--cyan-600{color:#00acc1 !important}.mdl-color--cyan-600{background-color:#00acc1 !important}.mdl-color-text--cyan-700{color:#0097a7 !important}.mdl-color--cyan-700{background-color:#0097a7 !important}.mdl-color-text--cyan-800{color:#00838f !important}.mdl-color--cyan-800{background-color:#00838f !important}.mdl-color-text--cyan-900{color:#006064 !important}.mdl-color--cyan-900{background-color:#006064 !important}.mdl-color-text--cyan-A100{color:#84ffff !important}.mdl-color--cyan-A100{background-color:#84ffff !important}.mdl-color-text--cyan-A200{color:#18ffff !important}.mdl-color--cyan-A200{background-color:#18ffff !important}.mdl-color-text--cyan-A400{color:#00e5ff !important}.mdl-color--cyan-A400{background-color:#00e5ff !important}.mdl-color-text--cyan-A700{color:#00b8d4 !important}.mdl-color--cyan-A700{background-color:#00b8d4 !important}.mdl-color-text--teal{color:#009688 !important}.mdl-color--teal{background-color:#009688 !important}.mdl-color-text--teal-50{color:#e0f2f1 !important}.mdl-color--teal-50{background-color:#e0f2f1 !important}.mdl-color-text--teal-100{color:#b2dfdb !important}.mdl-color--teal-100{background-color:#b2dfdb !important}.mdl-color-text--teal-200{color:#80cbc4 !important}.mdl-color--teal-200{background-color:#80cbc4 !important}.mdl-color-text--teal-300{color:#4db6ac !important}.mdl-color--teal-300{background-color:#4db6ac !important}.mdl-color-text--teal-400{color:#26a69a !important}.mdl-color--teal-400{background-color:#26a69a !important}.mdl-color-text--teal-500{color:#009688 !important}.mdl-color--teal-500{background-color:#009688 !important}.mdl-color-text--teal-600{color:#00897b !important}.mdl-color--teal-600{background-color:#00897b !important}.mdl-color-text--teal-700{color:#00796b !important}.mdl-color--teal-700{background-color:#00796b !important}.mdl-color-text--teal-800{color:#00695c !important}.mdl-color--teal-800{background-color:#00695c !important}.mdl-color-text--teal-900{color:#004d40 !important}.mdl-color--teal-900{background-color:#004d40 !important}.mdl-color-text--teal-A100{color:#a7ffeb !important}.mdl-color--teal-A100{background-color:#a7ffeb !important}.mdl-color-text--teal-A200{color:#64ffda !important}.mdl-color--teal-A200{background-color:#64ffda !important}.mdl-color-text--teal-A400{color:#1de9b6 !important}.mdl-color--teal-A400{background-color:#1de9b6 !important}.mdl-color-text--teal-A700{color:#00bfa5 !important}.mdl-color--teal-A700{background-color:#00bfa5 !important}.mdl-color-text--green{color:#4caf50 !important}.mdl-color--green{background-color:#4caf50 !important}.mdl-color-text--green-50{color:#e8f5e9 !important}.mdl-color--green-50{background-color:#e8f5e9 !important}.mdl-color-text--green-100{color:#c8e6c9 !important}.mdl-color--green-100{background-color:#c8e6c9 !important}.mdl-color-text--green-200{color:#a5d6a7 !important}.mdl-color--green-200{background-color:#a5d6a7 !important}.mdl-color-text--green-300{color:#81c784 !important}.mdl-color--green-300{background-color:#81c784 !important}.mdl-color-text--green-400{color:#66bb6a !important}.mdl-color--green-400{background-color:#66bb6a !important}.mdl-color-text--green-500{color:#4caf50 !important}.mdl-color--green-500{background-color:#4caf50 !important}.mdl-color-text--green-600{color:#43a047 !important}.mdl-color--green-600{background-color:#43a047 !important}.mdl-color-text--green-700{color:#388e3c !important}.mdl-color--green-700{background-color:#388e3c !important}.mdl-color-text--green-800{color:#2e7d32 !important}.mdl-color--green-800{background-color:#2e7d32 !important}.mdl-color-text--green-900{color:#1b5e20 !important}.mdl-color--green-900{background-color:#1b5e20 !important}.mdl-color-text--green-A100{color:#b9f6ca !important}.mdl-color--green-A100{background-color:#b9f6ca !important}.mdl-color-text--green-A200{color:#69f0ae !important}.mdl-color--green-A200{background-color:#69f0ae !important}.mdl-color-text--green-A400{color:#00e676 !important}.mdl-color--green-A400{background-color:#00e676 !important}.mdl-color-text--green-A700{color:#00c853 !important}.mdl-color--green-A700{background-color:#00c853 !important}.mdl-color-text--light-green{color:#8bc34a !important}.mdl-color--light-green{background-color:#8bc34a !important}.mdl-color-text--light-green-50{color:#f1f8e9 !important}.mdl-color--light-green-50{background-color:#f1f8e9 !important}.mdl-color-text--light-green-100{color:#dcedc8 !important}.mdl-color--light-green-100{background-color:#dcedc8 !important}.mdl-color-text--light-green-200{color:#c5e1a5 !important}.mdl-color--light-green-200{background-color:#c5e1a5 !important}.mdl-color-text--light-green-300{color:#aed581 !important}.mdl-color--light-green-300{background-color:#aed581 !important}.mdl-color-text--light-green-400{color:#9ccc65 !important}.mdl-color--light-green-400{background-color:#9ccc65 !important}.mdl-color-text--light-green-500{color:#8bc34a !important}.mdl-color--light-green-500{background-color:#8bc34a !important}.mdl-color-text--light-green-600{color:#7cb342 !important}.mdl-color--light-green-600{background-color:#7cb342 !important}.mdl-color-text--light-green-700{color:#689f38 !important}.mdl-color--light-green-700{background-color:#689f38 !important}.mdl-color-text--light-green-800{color:#558b2f !important}.mdl-color--light-green-800{background-color:#558b2f !important}.mdl-color-text--light-green-900{color:#33691e !important}.mdl-color--light-green-900{background-color:#33691e !important}.mdl-color-text--light-green-A100{color:#ccff90 !important}.mdl-color--light-green-A100{background-color:#ccff90 !important}.mdl-color-text--light-green-A200{color:#b2ff59 !important}.mdl-color--light-green-A200{background-color:#b2ff59 !important}.mdl-color-text--light-green-A400{color:#76ff03 !important}.mdl-color--light-green-A400{background-color:#76ff03 !important}.mdl-color-text--light-green-A700{color:#64dd17 !important}.mdl-color--light-green-A700{background-color:#64dd17 !important}.mdl-color-text--lime{color:#cddc39 !important}.mdl-color--lime{background-color:#cddc39 !important}.mdl-color-text--lime-50{color:#f9fbe7 !important}.mdl-color--lime-50{background-color:#f9fbe7 !important}.mdl-color-text--lime-100{color:#f0f4c3 !important}.mdl-color--lime-100{background-color:#f0f4c3 !important}.mdl-color-text--lime-200{color:#e6ee9c !important}.mdl-color--lime-200{background-color:#e6ee9c !important}.mdl-color-text--lime-300{color:#dce775 !important}.mdl-color--lime-300{background-color:#dce775 !important}.mdl-color-text--lime-400{color:#d4e157 !important}.mdl-color--lime-400{background-color:#d4e157 !important}.mdl-color-text--lime-500{color:#cddc39 !important}.mdl-color--lime-500{background-color:#cddc39 !important}.mdl-color-text--lime-600{color:#c0ca33 !important}.mdl-color--lime-600{background-color:#c0ca33 !important}.mdl-color-text--lime-700{color:#afb42b !important}.mdl-color--lime-700{background-color:#afb42b !important}.mdl-color-text--lime-800{color:#9e9d24 !important}.mdl-color--lime-800{background-color:#9e9d24 !important}.mdl-color-text--lime-900{color:#827717 !important}.mdl-color--lime-900{background-color:#827717 !important}.mdl-color-text--lime-A100{color:#f4ff81 !important}.mdl-color--lime-A100{background-color:#f4ff81 !important}.mdl-color-text--lime-A200{color:#eeff41 !important}.mdl-color--lime-A200{background-color:#eeff41 !important}.mdl-color-text--lime-A400{color:#c6ff00 !important}.mdl-color--lime-A400{background-color:#c6ff00 !important}.mdl-color-text--lime-A700{color:#aeea00 !important}.mdl-color--lime-A700{background-color:#aeea00 !important}.mdl-color-text--yellow{color:#ffeb3b !important}.mdl-color--yellow{background-color:#ffeb3b !important}.mdl-color-text--yellow-50{color:#fffde7 !important}.mdl-color--yellow-50{background-color:#fffde7 !important}.mdl-color-text--yellow-100{color:#fff9c4 !important}.mdl-color--yellow-100{background-color:#fff9c4 !important}.mdl-color-text--yellow-200{color:#fff59d !important}.mdl-color--yellow-200{background-color:#fff59d !important}.mdl-color-text--yellow-300{color:#fff176 !important}.mdl-color--yellow-300{background-color:#fff176 !important}.mdl-color-text--yellow-400{color:#ffee58 !important}.mdl-color--yellow-400{background-color:#ffee58 !important}.mdl-color-text--yellow-500{color:#ffeb3b !important}.mdl-color--yellow-500{background-color:#ffeb3b !important}.mdl-color-text--yellow-600{color:#fdd835 !important}.mdl-color--yellow-600{background-color:#fdd835 !important}.mdl-color-text--yellow-700{color:#fbc02d !important}.mdl-color--yellow-700{background-color:#fbc02d !important}.mdl-color-text--yellow-800{color:#f9a825 !important}.mdl-color--yellow-800{background-color:#f9a825 !important}.mdl-color-text--yellow-900{color:#f57f17 !important}.mdl-color--yellow-900{background-color:#f57f17 !important}.mdl-color-text--yellow-A100{color:#ffff8d !important}.mdl-color--yellow-A100{background-color:#ffff8d !important}.mdl-color-text--yellow-A200{color:#ff0 !important}.mdl-color--yellow-A200{background-color:#ff0 !important}.mdl-color-text--yellow-A400{color:#ffea00 !important}.mdl-color--yellow-A400{background-color:#ffea00 !important}.mdl-color-text--yellow-A700{color:#ffd600 !important}.mdl-color--yellow-A700{background-color:#ffd600 !important}.mdl-color-text--amber{color:#ffc107 !important}.mdl-color--amber{background-color:#ffc107 !important}.mdl-color-text--amber-50{color:#fff8e1 !important}.mdl-color--amber-50{background-color:#fff8e1 !important}.mdl-color-text--amber-100{color:#ffecb3 !important}.mdl-color--amber-100{background-color:#ffecb3 !important}.mdl-color-text--amber-200{color:#ffe082 !important}.mdl-color--amber-200{background-color:#ffe082 !important}.mdl-color-text--amber-300{color:#ffd54f !important}.mdl-color--amber-300{background-color:#ffd54f !important}.mdl-color-text--amber-400{color:#ffca28 !important}.mdl-color--amber-400{background-color:#ffca28 !important}.mdl-color-text--amber-500{color:#ffc107 !important}.mdl-color--amber-500{background-color:#ffc107 !important}.mdl-color-text--amber-600{color:#ffb300 !important}.mdl-color--amber-600{background-color:#ffb300 !important}.mdl-color-text--amber-700{color:#ffa000 !important}.mdl-color--amber-700{background-color:#ffa000 !important}.mdl-color-text--amber-800{color:#ff8f00 !important}.mdl-color--amber-800{background-color:#ff8f00 !important}.mdl-color-text--amber-900{color:#ff6f00 !important}.mdl-color--amber-900{background-color:#ff6f00 !important}.mdl-color-text--amber-A100{color:#ffe57f !important}.mdl-color--amber-A100{background-color:#ffe57f !important}.mdl-color-text--amber-A200{color:#ffd740 !important}.mdl-color--amber-A200{background-color:#ffd740 !important}.mdl-color-text--amber-A400{color:#ffc400 !important}.mdl-color--amber-A400{background-color:#ffc400 !important}.mdl-color-text--amber-A700{color:#ffab00 !important}.mdl-color--amber-A700{background-color:#ffab00 !important}.mdl-color-text--orange{color:#ff9800 !important}.mdl-color--orange{background-color:#ff9800 !important}.mdl-color-text--orange-50{color:#fff3e0 !important}.mdl-color--orange-50{background-color:#fff3e0 !important}.mdl-color-text--orange-100{color:#ffe0b2 !important}.mdl-color--orange-100{background-color:#ffe0b2 !important}.mdl-color-text--orange-200{color:#ffcc80 !important}.mdl-color--orange-200{background-color:#ffcc80 !important}.mdl-color-text--orange-300{color:#ffb74d !important}.mdl-color--orange-300{background-color:#ffb74d !important}.mdl-color-text--orange-400{color:#ffa726 !important}.mdl-color--orange-400{background-color:#ffa726 !important}.mdl-color-text--orange-500{color:#ff9800 !important}.mdl-color--orange-500{background-color:#ff9800 !important}.mdl-color-text--orange-600{color:#fb8c00 !important}.mdl-color--orange-600{background-color:#fb8c00 !important}.mdl-color-text--orange-700{color:#f57c00 !important}.mdl-color--orange-700{background-color:#f57c00 !important}.mdl-color-text--orange-800{color:#ef6c00 !important}.mdl-color--orange-800{background-color:#ef6c00 !important}.mdl-color-text--orange-900{color:#e65100 !important}.mdl-color--orange-900{background-color:#e65100 !important}.mdl-color-text--orange-A100{color:#ffd180 !important}.mdl-color--orange-A100{background-color:#ffd180 !important}.mdl-color-text--orange-A200{color:#ffab40 !important}.mdl-color--orange-A200{background-color:#ffab40 !important}.mdl-color-text--orange-A400{color:#ff9100 !important}.mdl-color--orange-A400{background-color:#ff9100 !important}.mdl-color-text--orange-A700{color:#ff6d00 !important}.mdl-color--orange-A700{background-color:#ff6d00 !important}.mdl-color-text--deep-orange{color:#ff5722 !important}.mdl-color--deep-orange{background-color:#ff5722 !important}.mdl-color-text--deep-orange-50{color:#fbe9e7 !important}.mdl-color--deep-orange-50{background-color:#fbe9e7 !important}.mdl-color-text--deep-orange-100{color:#ffccbc !important}.mdl-color--deep-orange-100{background-color:#ffccbc !important}.mdl-color-text--deep-orange-200{color:#ffab91 !important}.mdl-color--deep-orange-200{background-color:#ffab91 !important}.mdl-color-text--deep-orange-300{color:#ff8a65 !important}.mdl-color--deep-orange-300{background-color:#ff8a65 !important}.mdl-color-text--deep-orange-400{color:#ff7043 !important}.mdl-color--deep-orange-400{background-color:#ff7043 !important}.mdl-color-text--deep-orange-500{color:#ff5722 !important}.mdl-color--deep-orange-500{background-color:#ff5722 !important}.mdl-color-text--deep-orange-600{color:#f4511e !important}.mdl-color--deep-orange-600{background-color:#f4511e !important}.mdl-color-text--deep-orange-700{color:#e64a19 !important}.mdl-color--deep-orange-700{background-color:#e64a19 !important}.mdl-color-text--deep-orange-800{color:#d84315 !important}.mdl-color--deep-orange-800{background-color:#d84315 !important}.mdl-color-text--deep-orange-900{color:#bf360c !important}.mdl-color--deep-orange-900{background-color:#bf360c !important}.mdl-color-text--deep-orange-A100{color:#ff9e80 !important}.mdl-color--deep-orange-A100{background-color:#ff9e80 !important}.mdl-color-text--deep-orange-A200{color:#ff6e40 !important}.mdl-color--deep-orange-A200{background-color:#ff6e40 !important}.mdl-color-text--deep-orange-A400{color:#ff3d00 !important}.mdl-color--deep-orange-A400{background-color:#ff3d00 !important}.mdl-color-text--deep-orange-A700{color:#dd2c00 !important}.mdl-color--deep-orange-A700{background-color:#dd2c00 !important}.mdl-color-text--brown{color:#795548 !important}.mdl-color--brown{background-color:#795548 !important}.mdl-color-text--brown-50{color:#efebe9 !important}.mdl-color--brown-50{background-color:#efebe9 !important}.mdl-color-text--brown-100{color:#d7ccc8 !important}.mdl-color--brown-100{background-color:#d7ccc8 !important}.mdl-color-text--brown-200{color:#bcaaa4 !important}.mdl-color--brown-200{background-color:#bcaaa4 !important}.mdl-color-text--brown-300{color:#a1887f !important}.mdl-color--brown-300{background-color:#a1887f !important}.mdl-color-text--brown-400{color:#8d6e63 !important}.mdl-color--brown-400{background-color:#8d6e63 !important}.mdl-color-text--brown-500{color:#795548 !important}.mdl-color--brown-500{background-color:#795548 !important}.mdl-color-text--brown-600{color:#6d4c41 !important}.mdl-color--brown-600{background-color:#6d4c41 !important}.mdl-color-text--brown-700{color:#5d4037 !important}.mdl-color--brown-700{background-color:#5d4037 !important}.mdl-color-text--brown-800{color:#4e342e !important}.mdl-color--brown-800{background-color:#4e342e !important}.mdl-color-text--brown-900{color:#3e2723 !important}.mdl-color--brown-900{background-color:#3e2723 !important}.mdl-color-text--grey{color:#9e9e9e !important}.mdl-color--grey{background-color:#9e9e9e !important}.mdl-color-text--grey-50{color:#fafafa !important}.mdl-color--grey-50{background-color:#fafafa !important}.mdl-color-text--grey-100{color:#f5f5f5 !important}.mdl-color--grey-100{background-color:#f5f5f5 !important}.mdl-color-text--grey-200{color:#eee !important}.mdl-color--grey-200{background-color:#eee !important}.mdl-color-text--grey-300{color:#e0e0e0 !important}.mdl-color--grey-300{background-color:#e0e0e0 !important}.mdl-color-text--grey-400{color:#bdbdbd !important}.mdl-color--grey-400{background-color:#bdbdbd !important}.mdl-color-text--grey-500{color:#9e9e9e !important}.mdl-color--grey-500{background-color:#9e9e9e !important}.mdl-color-text--grey-600{color:#757575 !important}.mdl-color--grey-600{background-color:#757575 !important}.mdl-color-text--grey-700{color:#616161 !important}.mdl-color--grey-700{background-color:#616161 !important}.mdl-color-text--grey-800{color:#424242 !important}.mdl-color--grey-800{background-color:#424242 !important}.mdl-color-text--grey-900{color:#212121 !important}.mdl-color--grey-900{background-color:#212121 !important}.mdl-color-text--blue-grey{color:#607d8b !important}.mdl-color--blue-grey{background-color:#607d8b !important}.mdl-color-text--blue-grey-50{color:#eceff1 !important}.mdl-color--blue-grey-50{background-color:#eceff1 !important}.mdl-color-text--blue-grey-100{color:#cfd8dc !important}.mdl-color--blue-grey-100{background-color:#cfd8dc !important}.mdl-color-text--blue-grey-200{color:#b0bec5 !important}.mdl-color--blue-grey-200{background-color:#b0bec5 !important}.mdl-color-text--blue-grey-300{color:#90a4ae !important}.mdl-color--blue-grey-300{background-color:#90a4ae !important}.mdl-color-text--blue-grey-400{color:#78909c !important}.mdl-color--blue-grey-400{background-color:#78909c !important}.mdl-color-text--blue-grey-500{color:#607d8b !important}.mdl-color--blue-grey-500{background-color:#607d8b !important}.mdl-color-text--blue-grey-600{color:#546e7a !important}.mdl-color--blue-grey-600{background-color:#546e7a !important}.mdl-color-text--blue-grey-700{color:#455a64 !important}.mdl-color--blue-grey-700{background-color:#455a64 !important}.mdl-color-text--blue-grey-800{color:#37474f !important}.mdl-color--blue-grey-800{background-color:#37474f !important}.mdl-color-text--blue-grey-900{color:#263238 !important}.mdl-color--blue-grey-900{background-color:#263238 !important}.mdl-color--black{background-color:#000 !important}.mdl-color-text--black{color:#000 !important}.mdl-color--white{background-color:#fff !important}.mdl-color-text--white{color:#fff !important}.mdl-color--primary{background-color:rgb(96,125,139)!important}.mdl-color--primary-contrast{background-color:rgb(255,255,255)!important}.mdl-color--primary-dark{background-color:rgb(69,90,100)!important}.mdl-color--accent{background-color:rgb(83,109,254)!important}.mdl-color--accent-contrast{background-color:rgb(255,255,255)!important}.mdl-color-text--primary{color:rgb(96,125,139)!important}.mdl-color-text--primary-contrast{color:rgb(255,255,255)!important}.mdl-color-text--primary-dark{color:rgb(69,90,100)!important}.mdl-color-text--accent{color:rgb(83,109,254)!important}.mdl-color-text--accent-contrast{color:rgb(255,255,255)!important}.mdl-ripple{background:#000;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:50px;overflow:hidden}.mdl-ripple.is-animating{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1)}.mdl-ripple.is-visible{opacity:.3}.mdl-animation--default,.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.mdl-badge{position:relative;white-space:nowrap;margin-right:24px}.mdl-badge:not([data-badge]){margin-right:auto}.mdl-badge[data-badge]:after{content:attr(data-badge);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:-11px;right:-24px;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:600;font-size:12px;width:22px;height:22px;border-radius:50%;background:rgb(83,109,254);color:#fff}.mdl-button .mdl-badge[data-badge]:after{top:-10px;right:-5px}.mdl-badge.mdl-badge--no-background[data-badge]:after{color:rgb(83,109,254);background:rgba(255,255,255,.2);box-shadow:0 0 1px gray}.mdl-button{background:0 0;border:none;border-radius:2px;color:#000;display:block;position:relative;height:36px;min-width:64px;padding:0 8px;display:inline-block;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;letter-spacing:0;overflow:hidden;will-change:box-shadow,transform;-webkit-transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:rgba(158,158,158,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:rgba(158,158,158,.4)}.mdl-button.mdl-button--colored{color:rgb(96,125,139)}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type="submit"]{-webkit-appearance:none}.mdl-button--raised{background:rgba(158,158,158,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--raised.mdl-button--colored{background:rgb(96,125,139);color:rgb(255,255,255)}.mdl-button--raised.mdl-button--colored:hover{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:active{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:focus:not(:active){background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:rgba(158,158,158,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.mdl-button--fab .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--fab.mdl-button--colored{background:rgb(83,109,254);color:rgb(255,255,255)}.mdl-button--fab.mdl-button--colored:hover{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:focus:not(:active){background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:active{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.mdl-button--icon .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon .material-icons{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:rgb(96,125,139)}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:rgb(255,255,255)}.mdl-button--primary.mdl-button--primary.mdl-button--raised,.mdl-button--primary.mdl-button--primary.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(96,125,139)}.mdl-button--accent.mdl-button--accent{color:rgb(83,109,254)}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:rgb(255,255,255)}.mdl-button--accent.mdl-button--accent.mdl-button--raised,.mdl-button--accent.mdl-button--accent.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(83,109,254)}.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:auto;background-color:transparent}.mdl-button--fab[disabled][disabled],.mdl-button--raised[disabled][disabled],.mdl-button--colored[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:rgb(83,109,254);background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#000;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-webkit-justify-content:stretch;-ms-flex-pack:stretch;justify-content:stretch;line-height:normal;padding:16px;-webkit-perspective-origin:165px 56px;perspective-origin:165px 56px;-webkit-transform-origin:165px 56px;-ms-transform-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;color:inherit;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;-webkit-transform-origin:149px 48px;-ms-transform-origin:149px 48px;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:grey;margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:13px;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-checkbox{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0}.mdl-checkbox.is-upgraded{padding-left:24px}.mdl-checkbox__input{line-height:24px}.mdl-checkbox.is-upgraded .mdl-checkbox__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-checkbox__box-outline{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;overflow:hidden;border:2px solid rgba(0,0,0,.54);border-radius:2px;z-index:2}.mdl-checkbox.is-checked .mdl-checkbox__box-outline{border:2px solid rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__box-outline{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__focus-helper{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;border-radius:50%;background-color:transparent}.mdl-checkbox.is-focused .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-checkbox__tick-outline{position:absolute;top:0;left:0;height:100%;width:100%;-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");background:0 0;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background;transition-property:background}.mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background:rgb(96,125,139)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline{background:rgba(0,0,0,.26)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0}.mdl-checkbox.is-disabled .mdl-checkbox__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__ripple-container{position:absolute;z-index:2;top:-6px;left:-10px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-checkbox__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container{cursor:auto}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple{background:0 0}.mdl-data-table{position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr{position:relative;height:48px;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background-color;transition-property:background-color}.mdl-data-table tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover{background-color:#eee}.mdl-data-table td{text-align:right}.mdl-data-table th{padding:0 18px 0 18px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type{padding-right:24px}.mdl-data-table td{position:relative;vertical-align:top;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding:12px 18px 0;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select{vertical-align:top;position:absolute;left:24px}.mdl-data-table th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th .mdl-data-table__select{position:relative}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric{text-align:left}.mdl-mega-footer{padding:16px 40px;color:#9e9e9e;background-color:#424242}.mdl-mega-footer--top-section:after,.mdl-mega-footer--middle-section:after,.mdl-mega-footer--bottom-section:after,.mdl-mega-footer__top-section:after,.mdl-mega-footer__middle-section:after,.mdl-mega-footer__bottom-section:after{content:'';display:block;clear:both}.mdl-mega-footer--left-section,.mdl-mega-footer__left-section,.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{margin-bottom:16px}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:block;margin-bottom:16px;color:inherit;text-decoration:none}@media screen and (min-width:760px){.mdl-mega-footer--left-section,.mdl-mega-footer__left-section{float:left}.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{float:right}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:inline-block;margin-left:16px;line-height:36px;vertical-align:middle}}.mdl-mega-footer--social-btn,.mdl-mega-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{display:block;position:relative}@media screen and (min-width:760px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{width:33%}.mdl-mega-footer--drop-down-section:nth-child(1),.mdl-mega-footer--drop-down-section:nth-child(2),.mdl-mega-footer__drop-down-section:nth-child(1),.mdl-mega-footer__drop-down-section:nth-child(2){float:left}.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(3){float:right}.mdl-mega-footer--drop-down-section:nth-child(3):after,.mdl-mega-footer__drop-down-section:nth-child(3):after{clear:right}.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section:nth-child(4){clear:right;float:right}.mdl-mega-footer--middle-section:after,.mdl-mega-footer__middle-section:after{content:'';display:block;clear:both}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:0}}@media screen and (min-width:1024px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section,.mdl-mega-footer__drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(4){width:24%;float:left}}.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{position:absolute;width:100%;height:55.8px;padding:32px;margin:-16px 0 0;cursor:pointer;z-index:1;opacity:0}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CE'}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:none}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CF'}.mdl-mega-footer--heading,.mdl-mega-footer__heading{position:relative;width:100%;padding-right:39.8px;margin-bottom:16px;box-sizing:border-box;font-size:14px;line-height:23.8px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#e0e0e0}.mdl-mega-footer--heading:after,.mdl-mega-footer__heading:after{content:'';position:absolute;top:0;right:0;display:block;width:23.8px;height:23.8px;background-size:cover}.mdl-mega-footer--link-list,.mdl-mega-footer__link-list{list-style:none;padding:0;margin:0 0 32px}.mdl-mega-footer--link-list:after,.mdl-mega-footer__link-list:after{clear:both;display:block;content:''}.mdl-mega-footer--link-list li,.mdl-mega-footer__link-list li{font-size:14px;font-weight:400;letter-spacing:0;line-height:20px}.mdl-mega-footer--link-list a,.mdl-mega-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}@media screen and (min-width:760px){.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{display:none}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{background-image:none}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:block}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{content:''}}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:16px;margin-bottom:16px}.mdl-logo{margin-bottom:16px;color:#fff}.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li{float:left;margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-logo{float:left;margin-bottom:0;margin-right:16px}}.mdl-mini-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:'';display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-icon-toggle{position:relative;z-index:1;vertical-align:middle;display:inline-block;height:32px;margin:0;padding:0}.mdl-icon-toggle__input{line-height:32px}.mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-icon-toggle__label{display:inline-block;position:relative;cursor:pointer;height:32px;width:32px;min-width:32px;color:#616161;border-radius:50%;padding:0;margin-left:0;margin-right:0;text-align:center;background-color:transparent;will-change:background-color;-webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.mdl-icon-toggle__label.material-icons{line-height:32px;font-size:24px}.mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:rgb(96,125,139)}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26);cursor:auto;-webkit-transition:none;transition:none}.mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(96,125,139,.26)}.mdl-icon-toggle__ripple-container{position:absolute;z-index:2;top:-2px;left:-2px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container{cursor:auto}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:0 0}.mdl-menu__container{display:block;margin:0;padding:0;border:none;position:absolute;overflow:visible;height:0;width:0;z-index:-1}.mdl-menu__container.is-visible{z-index:999}.mdl-menu__outline{display:block;background:#fff;margin:0;padding:0;border:none;border-radius:2px;position:absolute;top:0;left:0;overflow:hidden;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);will-change:transform;-webkit-transition:-webkit-transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);z-index:-1}.mdl-menu__container.is-visible .mdl-menu__outline{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);z-index:999}.mdl-menu__outline.mdl-menu--bottom-right{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.mdl-menu__outline.mdl-menu--top-left{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.mdl-menu__outline.mdl-menu--top-right{-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.mdl-menu{position:absolute;list-style:none;top:0;left:0;height:auto;width:auto;min-width:124px;padding:8px 0;margin:0;opacity:0;clip:rect(0 0 0 0);z-index:-1}.mdl-menu__container.is-visible .mdl-menu{opacity:1;z-index:999}.mdl-menu.is-animating{-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1)}.mdl-menu.mdl-menu--bottom-right{left:auto;right:0}.mdl-menu.mdl-menu--top-left{top:auto;bottom:0}.mdl-menu.mdl-menu--top-right{top:auto;left:auto;bottom:0;right:0}.mdl-menu.mdl-menu--unaligned{top:auto;left:auto}.mdl-menu__item{display:block;border:none;color:rgba(0,0,0,.87);background-color:transparent;text-align:left;margin:0;padding:0 16px;outline-color:#bdbdbd;position:relative;overflow:hidden;font-size:14px;font-weight:400;letter-spacing:0;text-decoration:none;cursor:pointer;height:48px;line-height:48px;white-space:nowrap;opacity:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-menu__container.is-visible .mdl-menu__item{opacity:1}.mdl-menu__item::-moz-focus-inner{border:0}.mdl-menu__item[disabled]{color:#bdbdbd;background-color:transparent;cursor:auto}.mdl-menu__item[disabled]:hover{background-color:transparent}.mdl-menu__item[disabled]:focus{background-color:transparent}.mdl-menu__item[disabled] .mdl-ripple{background:0 0}.mdl-menu__item:hover{background-color:#eee}.mdl-menu__item:focus{outline:none;background-color:#eee}.mdl-menu__item:active{background-color:#e0e0e0}.mdl-menu__item--ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-progress{display:block;position:relative;height:4px;width:500px}.mdl-progress>.bar{display:block;position:absolute;top:0;bottom:0;width:0%;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-progress>.progressbar{background-color:rgb(96,125,139);z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=")}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139))}.mdl-progress.mdl-progress__indeterminate>.bar1{-webkit-animation-name:indeterminate1;animation-name:indeterminate1}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{background-color:rgb(96,125,139);-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;-webkit-animation-name:indeterminate2;animation-name:indeterminate2}@-webkit-keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@-webkit-keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}@keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only{display:none}.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:rgb(96,125,139)}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:rgb(255,255,255);z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:rgb(255,255,255);background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__header .mdl-layout__drawer-button{margin:4px}}@media screen and (max-width:1024px){.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:rgb(96,125,139);color:rgb(255,255,255);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px}}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout--fixed-drawer>.mdl-layout__header .mdl-layout__header-row{padding-left:40px}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}@media screen and (max-width:1024px){.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact{max-height:56px}}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact.has-tabs{min-height:104px}}@media screen and (max-width:1024px){.mdl-layout__header{display:none}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--seamed,.mdl-layout__header--scroll{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;margin:0;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{margin:0;padding:0;height:64px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}}.mdl-layout__header-row .mdl-navigation__link{display:block;color:rgb(255,255,255);line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:rgb(96,125,139);overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:rgb(96,125,139);color:transparent;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__tab-bar-button.is-active{color:rgb(255,255,255)}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(255,255,255,.6);overflow:hidden}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:rgb(255,255,255)}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(83,109,254);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:rgb(255,255,255)}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio{position:relative;font-size:16px;line-height:24px;display:inline-block;box-sizing:border-box;margin:0;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio__button{line-height:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:2px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:6px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:rgb(96,125,139)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;z-index:2;top:-9px;left:-13px;box-sizing:border-box;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}_:-ms-input-placeholder,:root .mdl-slider.mdl-slider.is-upgraded{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0;padding:0;color:rgb(96,125,139);-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,rgb(96,125,139)16px,rgb(96,125,139)0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26)16px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:rgb(96,125,139);border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background-image:none;background:rgb(96,125,139);border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background-image:none;background:rgb(96,125,139);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background-image:none;background:rgb(96,125,139);transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:rgb(96,125,139);-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgb(96,125,139)0%,rgb(96,125,139)37.5%,rgba(96,125,139,.26)37.5%,rgba(96,125,139,.26)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:rgb(96,125,139);-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0%,transparent 66.67%,rgba(0,0,0,.26)66.67%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12)0%,rgba(0,0,0,.12)25%,rgba(0,0,0,.26)25%,rgba(0,0,0,.26)37.5%,rgba(0,0,0,.12)37.5%,rgba(0,0,0,.12)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0%,transparent 77.78%,rgba(0,0,0,.26)77.78%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0%,transparent 50%,rgba(0,0,0,.26)50%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26)25px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__container,.mdl-slider__background-flex{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:rgb(96,125,139)}.mdl-slider__background-lower,.mdl-slider__background-upper{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite;animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}@keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch__input{line-height:24px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(96,125,139,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;border-radius:50%;cursor:pointer;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:left;transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:rgb(96,125,139);left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;z-index:2;top:-12px;left:-14px;box-sizing:border-box;width:48px;height:48px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;-webkit-transition-property:left;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(96,125,139);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);display:inline-block;font-size:16px;margin:0;padding:4px 0;width:100%;background:16px;text-align:left;color:inherit}.mdl-textfield.is-focused .mdl-textfield__input{outline:none}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12)}.mdl-textfield__label{bottom:0;color:rgba(0,0,0,.26);font-size:16px;left:0;right:0;pointer-events:none;position:absolute;top:24px;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-focused .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__label{color:rgb(96,125,139);font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#de3226;font-size:12px}.mdl-textfield__label:after{background-color:rgb(96,125,139);bottom:20px;content:'';height:2px;left:45%;position:absolute;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{color:#de3226;position:absolute;font-size:12px;margin-top:3px;visibility:hidden}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-focused .mdl-textfield__expandable-holder,.mdl-textfield.is-dirty .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:25%}.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:50%}.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:75%}.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:100%}.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:100%}.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:100%}.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:100%}.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:12.5%}.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:25%}.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:37.5%}.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:50%}.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:62.5%}.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:75%}.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:87.5%}.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.3333333333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:8.3333333333%}.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.3333333333%}.mdl-cell--2-col{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:16.6666666667%}.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.6666666667%}.mdl-cell--3-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:25%}.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:33.3333333333%}.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.3333333333%}.mdl-cell--5-col{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:41.6666666667%}.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.6666666667%}.mdl-cell--6-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:50%}.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:58.3333333333%}.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.3333333333%}.mdl-cell--8-col{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:66.6666666667%}.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.6666666667%}.mdl-cell--9-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:75%}.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:83.3333333333%}.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.3333333333%}.mdl-cell--11-col{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:91.6666666667%}.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.6666666667%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}}body{margin:0}.styleguide-demo h1{margin:48px 24px 0}.styleguide-demo h1:after{content:'';display:block;width:100%;border-bottom:1px solid rgba(0,0,0,.5);margin-top:24px}.styleguide-demo{opacity:0;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}.styleguide-masthead{height:256px;background:#212121;padding:115px 16px 0}.styleguide-container{position:relative;max-width:960px;width:100%}.styleguide-title{color:#fff;bottom:auto;position:relative;font-size:56px;font-weight:300;line-height:1;letter-spacing:-.02em}.styleguide-title:after{border-bottom:0}.styleguide-title span{font-weight:300}.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link{padding:10px 24px}.demosLoaded .styleguide-demo{opacity:1}iframe{display:block;width:100%;border:none}iframe.heightSet{overflow:hidden}.demo-wrapper{margin:24px}.demo-wrapper iframe{border:1px solid rgba(0,0,0,.5)} \ No newline at end of file diff --git a/inc/themes/material-blue/css/material.min.css.map b/inc/themes/material-blue/css/material.min.css.map new file mode 100644 index 00000000..1a0fa95d --- /dev/null +++ b/inc/themes/material-blue/css/material.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["styleguide.css","resets/_h5bp.scss","resets/_mobile.scss","resets/_resets.scss","typography/_typography.scss","_mixins.scss","palette/_palette.scss","shadow/_shadow.scss","ripple/_ripple.scss","animation/_animation.scss","badge/_badge.scss","_variables.scss","button/_button.scss","card/_card.scss","checkbox/_checkbox.scss","data-table/_data-table.scss","footer/_mega_footer.scss","footer/_mini_footer.scss","icon-toggle/_icon-toggle.scss","menu/_menu.scss","progress/_progress.scss","layout/_layout.scss","radio/_radio.scss","slider/_slider.scss","spinner/_spinner.scss","switch/_switch.scss","tabs/_tabs.scss","textfield/_textfield.scss","tooltip/_tooltip.scss","grid/_grid.scss","styleguide.scss"],"names":[],"mappings":"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BrjRF,yBAAA,EAAA;E7BujRE;I6B9nRF,0BAAwB,EAAA;I7BgoRpB;M6BrjRmB,aAAA,EAAA;E7BujRrB;I6BloRsB,0BAAuB,EAAA;I7BooR3C;M6B7jRJ,aAAA,EAAA;E7B+jRE;I6BtoRF,wBAAwB,EAAA;I7BwoRpB;M6B7jRmB,WAAA,EAAA;E7B+jRrB;I6B1oRsB,wBAAuB,EAAA;I7B4oR3C;M6BrkRJ,WAAA,EAAA;E7BukRE;I6B9oRF,0BAAwB,EAAA;I7BgpRpB;M6BrkRmB,aAAA,EAAA;E7BukRrB;I6BlpRF,0BAA+C,EAAA;I7BopR3C;M6B7kRJ,aAAA,EAAA;E7B+kRE;I6BtpRsB,wBAAA,EAAA;I7BwpRpB;M6B7kRmB,WAAA,EAAA;E7B+kRrB;I6B1pR6C,wBAAA,EAAA;I7B4pR3C;M6BrlRJ,WAAA,EAAA;E7BulRE;I6B9pRsB,0BAAA,EAAA;I7BgqRpB;M6BrlRmB,aAAA,EAAA;E7BulRrB;I6BlqRsB,0BAAuB,EAAA;I7BoqR3C;M6B7lRJ,aAAA,EAAA;E7B+lRE;I6BtqRF,wBAAwB,EAAA;I7BwqRpB;M6B7lRmB,WAAA,EAAA;E7B+lRrB;I6B1qR6C,wBAAA,EAAA;I7B4qR3C;M6BrmRJ,WAAA,EAAA;E7BumRE;I6B9qRF,0BAAwB,EAAA;I7BgrRpB;M6BrmRmB,aAAA,EAAA;E7BumRrB;I6BlrRsB,0BAAuB,EAAA;I7BorR3C;M6BlmRJ,aAAA,EAAA;E7BomRE;I6BtrRsB,yBAAA,EAAA;I7BwrRpB;M6BlmRmB,YAAA,EAAA;E7BomRrB;I6B1rRF,yBAA+C,EAAA;I7B4rR3C;M6B1mRJ,YAAA,EAAA;E7B4mRE;I6B9rRF,yBAAwB,EAAA;I7BgsRpB;M6B1mRmB,YAAA,EAAA;E7B4mRrB;I6BlsRsB,yBAAuB,EAAA;I7BosR3C;M6BlnRJ,YAAA,EAAA;E7BonRE;I6BtsRF,yBAAwB,EAAA;I7BwsRpB;M6BlnRoB,YAAA,EAAA;E7BonRtB;I6B1sRsB,yBAAwB,EAAA;I7B4sR5C;M6B1nRJ,YAAA,EAAA;E7B4nRE;I6B9sRsB,yBAAA,EAAA;I7BgtRpB;M6B1nRoB,YAAA,EAAA;E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","file":"material.min.css","sourcesContent":["@charset \"UTF-8\";\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Material Design Lite */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/*\n * What follows is the result of much research on cross-browser styling.\n * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,\n * Kroc Camen, and the H5BP dev community and team.\n */\n/* ==========================================================================\n Base styles: opinionated defaults\n ========================================================================== */\nhtml {\n color: rgba(0,0,0, 0.87);\n font-size: 1em;\n line-height: 1.4; }\n\n/*\n * Remove text-shadow in selection highlight: h5bp.com/i\n * These selection rule sets have to be separate.\n * Customize the background color to match your design.\n */\n::-moz-selection {\n background: #b3d4fc;\n text-shadow: none; }\n\n::selection {\n background: #b3d4fc;\n text-shadow: none; }\n\n/*\n * A better looking default horizontal rule\n */\nhr {\n display: block;\n height: 1px;\n border: 0;\n border-top: 1px solid #ccc;\n margin: 1em 0;\n padding: 0; }\n\n/*\n * Remove the gap between images, videos, audio and canvas and the bottom of\n * their containers: h5bp.com/i/440\n */\naudio, canvas, img, svg, video {\n vertical-align: middle; }\n\n/*\n * Remove default fieldset styles.\n */\nfieldset {\n border: 0;\n margin: 0;\n padding: 0; }\n\n/*\n * Allow only vertical resizing of textareas.\n */\ntextarea {\n resize: vertical; }\n\n/* ==========================================================================\n Browse Happy prompt\n ========================================================================== */\n.browsehappy {\n margin: 0.2em 0;\n background: #ccc;\n color: #000;\n padding: 0.2em 0; }\n\n/* ==========================================================================\n Author's custom styles\n ========================================================================== */\n/* ==========================================================================\n Helper classes\n ========================================================================== */\n/*\n * Hide visually and from screen readers: h5bp.com/u\n */\n.hidden {\n display: none !important;\n visibility: hidden; }\n\n/*\n * Hide only visually, but have it available for screen readers: h5bp.com/v\n */\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px; }\n\n/*\n * Extends the .visuallyhidden class to allow the element to be focusable\n * when navigated to via the keyboard: h5bp.com/p\n */\n.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto; }\n\n/*\n * Hide visually and from screen readers, but maintain layout\n */\n.invisible {\n visibility: hidden; }\n\n/*\n * Clearfix: contain floats\n *\n * For modern browsers\n * 1. The space content is one way to avoid an Opera bug when the\n * `contenteditable` attribute is included anywhere else in the document.\n * Otherwise it causes space to appear at the top and bottom of elements\n * that receive the `clearfix` class.\n * 2. The use of `table` rather than `block` is only necessary if using\n * `:before` to contain the top-margins of child elements.\n */\n.clearfix:before, .clearfix:after {\n content: \" \";\n /* 1 */\n display: table;\n /* 2 */ }\n\n.clearfix:after {\n clear: both; }\n\n/* ==========================================================================\n EXAMPLE Media Queries for Responsive Design.\n These examples override the primary ('mobile first') styles.\n Modify as content requires.\n ========================================================================== */\n/* ==========================================================================\n Print styles.\n Inlined to avoid the additional HTTP request: h5bp.com/r\n ========================================================================== */\n@media print {\n *, *:before, *:after {\n background: transparent !important;\n color: #000 !important;\n /* Black prints faster: h5bp.com/s */\n box-shadow: none !important;\n text-shadow: none !important; }\n a, a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n /*\n * Don't show links that are fragment identifiers,\n * or use the `javascript:` pseudo protocol\n */\n a[href^=\"#\"]:after, a[href^=\"javascript:\"]:after {\n content: \"\"; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n thead {\n display: table-header-group;\n /* h5bp.com/t */ }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n h2, h3 {\n page-break-after: avoid; } }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Remove the unwanted box around FAB buttons */\n/* More info: http://goo.gl/IPwKi */\na, .mdl-accordion, .mdl-button, .mdl-card, .mdl-checkbox, .mdl-dropdown-menu, .mdl-icon-toggle, .mdl-item, .mdl-radio, .mdl-slider, .mdl-switch, .mdl-tabs__tab {\n -webkit-tap-highlight-color: transparent;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0); }\n\n/*\n * Make body take up the entire screen\n */\nhtml {\n width: 100%;\n height: 100%; }\n\nbody {\n width: 100%;\n min-height: 100%; }\n\n/*\n* Remove body margin so layout containers don't cause extra overflow.\n*/\nbody {\n margin: 0; }\n\n/*\n * Main display reset for IE support.\n * Source: http://weblog.west-wind.com/posts/2015/Jan/12/main-HTML5-Tag-not-working-in-Internet-Explorer-91011\n */\nmain {\n display: block; }\n\n/*\n* Apply no display to elements with the hidden attribute.\n* IE 9 and 10 support.\n*/\n*[hidden] {\n display: none !important; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\nhtml, body {\n font-family: 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px; }\n\nh1, h2, h3, h4, h5, h6, p {\n margin: 0;\n padding: 0; }\n\n/**\n* Styles for HTML elements\n*/\nh1 small, h2 small, h3 small, h4 small, h5 small, h6 small {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n opacity: 0.54;\n font-size: 0.6em; }\n\nh1 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n margin-top: 24px;\n margin-bottom: 24px; }\n\nh2 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n margin-top: 24px;\n margin-bottom: 24px; }\n\nh3 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n margin-top: 24px;\n margin-bottom: 24px; }\n\nh4 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n margin-top: 24px;\n margin-bottom: 16px; }\n\nh5 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n margin-top: 24px;\n margin-bottom: 16px; }\n\nh6 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n margin-top: 24px;\n margin-bottom: 16px; }\n\np {\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n margin-bottom: 16px; }\n\na {\n color: rgb(255,64,129);\n font-weight: 500; }\n\nblockquote {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em; }\n blockquote:before {\n position: absolute;\n left: -0.5em;\n content: '“'; }\n blockquote:after {\n content: '”';\n margin-left: -0.05em; }\n\nmark {\n background-color: #f4ff81; }\n\ndt {\n font-weight: 700; }\n\naddress {\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n font-style: normal; }\n\nul, ol {\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0; }\n\n/**\n * Class Name Styles\n */\n.mdl-typography--display-4 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em; }\n\n.mdl-typography--display-4-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n opacity: 0.54; }\n\n.mdl-typography--display-3 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em; }\n\n.mdl-typography--display-3-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n opacity: 0.54; }\n\n.mdl-typography--display-2 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 45px;\n font-weight: 400;\n line-height: 48px; }\n\n.mdl-typography--display-2-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n opacity: 0.54; }\n\n.mdl-typography--display-1 {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 34px;\n font-weight: 400;\n line-height: 40px; }\n\n.mdl-typography--display-1-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n opacity: 0.54; }\n\n.mdl-typography--headline {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale; }\n\n.mdl-typography--headline-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n opacity: 0.87; }\n\n.mdl-typography--title {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em; }\n\n.mdl-typography--title-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n opacity: 0.87; }\n\n.mdl-typography--subhead {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em; }\n\n.mdl-typography--subhead-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n opacity: 0.87; }\n\n.mdl-typography--body-2 {\n font-size: 14px;\n font-weight: bold;\n line-height: 24px;\n letter-spacing: 0; }\n\n.mdl-typography--body-2-color-contrast {\n font-size: 14px;\n font-weight: bold;\n line-height: 24px;\n letter-spacing: 0;\n opacity: 0.87; }\n\n.mdl-typography--body-1 {\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0; }\n\n.mdl-typography--body-1-color-contrast {\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n opacity: 0.87; }\n\n.mdl-typography--body-2-force-preferred-font {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: 0; }\n\n.mdl-typography--body-2-force-preferred-font-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: 0;\n opacity: 0.87; }\n\n.mdl-typography--body-1-force-preferred-font {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0; }\n\n.mdl-typography--body-1-force-preferred-font-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n opacity: 0.87; }\n\n.mdl-typography--caption {\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0; }\n\n.mdl-typography--caption-force-preferred-font {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0; }\n\n.mdl-typography--caption-color-contrast {\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n opacity: 0.54; }\n\n.mdl-typography--caption-force-preferred-font-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n opacity: 0.54; }\n\n.mdl-typography--menu {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0; }\n\n.mdl-typography--menu-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n opacity: 0.87; }\n\n.mdl-typography--button {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0; }\n\n.mdl-typography--button-color-contrast {\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n opacity: 0.87; }\n\n.mdl-typography--text-left {\n text-align: left; }\n\n.mdl-typography--text-right {\n text-align: right; }\n\n.mdl-typography--text-center {\n text-align: center; }\n\n.mdl-typography--text-justify {\n text-align: justify; }\n\n.mdl-typography--text-nowrap {\n white-space: nowrap; }\n\n.mdl-typography--text-lowercase {\n text-transform: lowercase; }\n\n.mdl-typography--text-uppercase {\n text-transform: uppercase; }\n\n.mdl-typography--text-capitalize {\n text-transform: capitalize; }\n\n.mdl-typography--font-thin {\n font-weight: 200 !important; }\n\n.mdl-typography--font-light {\n font-weight: 300 !important; }\n\n.mdl-typography--font-regular {\n font-weight: 400 !important; }\n\n.mdl-typography--font-medium {\n font-weight: 500 !important; }\n\n.mdl-typography--font-bold {\n font-weight: 700 !important; }\n\n.mdl-typography--font-black {\n font-weight: 900 !important; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-color-text--red {\n color: rgb(244,67,54) !important; }\n\n.mdl-color--red {\n background-color: rgb(244,67,54) !important; }\n\n.mdl-color-text--red-50 {\n color: rgb(255,235,238) !important; }\n\n.mdl-color--red-50 {\n background-color: rgb(255,235,238) !important; }\n\n.mdl-color-text--red-100 {\n color: rgb(255,205,210) !important; }\n\n.mdl-color--red-100 {\n background-color: rgb(255,205,210) !important; }\n\n.mdl-color-text--red-200 {\n color: rgb(239,154,154) !important; }\n\n.mdl-color--red-200 {\n background-color: rgb(239,154,154) !important; }\n\n.mdl-color-text--red-300 {\n color: rgb(229,115,115) !important; }\n\n.mdl-color--red-300 {\n background-color: rgb(229,115,115) !important; }\n\n.mdl-color-text--red-400 {\n color: rgb(239,83,80) !important; }\n\n.mdl-color--red-400 {\n background-color: rgb(239,83,80) !important; }\n\n.mdl-color-text--red-500 {\n color: rgb(244,67,54) !important; }\n\n.mdl-color--red-500 {\n background-color: rgb(244,67,54) !important; }\n\n.mdl-color-text--red-600 {\n color: rgb(229,57,53) !important; }\n\n.mdl-color--red-600 {\n background-color: rgb(229,57,53) !important; }\n\n.mdl-color-text--red-700 {\n color: rgb(211,47,47) !important; }\n\n.mdl-color--red-700 {\n background-color: rgb(211,47,47) !important; }\n\n.mdl-color-text--red-800 {\n color: rgb(198,40,40) !important; }\n\n.mdl-color--red-800 {\n background-color: rgb(198,40,40) !important; }\n\n.mdl-color-text--red-900 {\n color: rgb(183,28,28) !important; }\n\n.mdl-color--red-900 {\n background-color: rgb(183,28,28) !important; }\n\n.mdl-color-text--red-A100 {\n color: rgb(255,138,128) !important; }\n\n.mdl-color--red-A100 {\n background-color: rgb(255,138,128) !important; }\n\n.mdl-color-text--red-A200 {\n color: rgb(255,82,82) !important; }\n\n.mdl-color--red-A200 {\n background-color: rgb(255,82,82) !important; }\n\n.mdl-color-text--red-A400 {\n color: rgb(255,23,68) !important; }\n\n.mdl-color--red-A400 {\n background-color: rgb(255,23,68) !important; }\n\n.mdl-color-text--red-A700 {\n color: rgb(213,0,0) !important; }\n\n.mdl-color--red-A700 {\n background-color: rgb(213,0,0) !important; }\n\n.mdl-color-text--pink {\n color: rgb(233,30,99) !important; }\n\n.mdl-color--pink {\n background-color: rgb(233,30,99) !important; }\n\n.mdl-color-text--pink-50 {\n color: rgb(252,228,236) !important; }\n\n.mdl-color--pink-50 {\n background-color: rgb(252,228,236) !important; }\n\n.mdl-color-text--pink-100 {\n color: rgb(248,187,208) !important; }\n\n.mdl-color--pink-100 {\n background-color: rgb(248,187,208) !important; }\n\n.mdl-color-text--pink-200 {\n color: rgb(244,143,177) !important; }\n\n.mdl-color--pink-200 {\n background-color: rgb(244,143,177) !important; }\n\n.mdl-color-text--pink-300 {\n color: rgb(240,98,146) !important; }\n\n.mdl-color--pink-300 {\n background-color: rgb(240,98,146) !important; }\n\n.mdl-color-text--pink-400 {\n color: rgb(236,64,122) !important; }\n\n.mdl-color--pink-400 {\n background-color: rgb(236,64,122) !important; }\n\n.mdl-color-text--pink-500 {\n color: rgb(233,30,99) !important; }\n\n.mdl-color--pink-500 {\n background-color: rgb(233,30,99) !important; }\n\n.mdl-color-text--pink-600 {\n color: rgb(216,27,96) !important; }\n\n.mdl-color--pink-600 {\n background-color: rgb(216,27,96) !important; }\n\n.mdl-color-text--pink-700 {\n color: rgb(194,24,91) !important; }\n\n.mdl-color--pink-700 {\n background-color: rgb(194,24,91) !important; }\n\n.mdl-color-text--pink-800 {\n color: rgb(173,20,87) !important; }\n\n.mdl-color--pink-800 {\n background-color: rgb(173,20,87) !important; }\n\n.mdl-color-text--pink-900 {\n color: rgb(136,14,79) !important; }\n\n.mdl-color--pink-900 {\n background-color: rgb(136,14,79) !important; }\n\n.mdl-color-text--pink-A100 {\n color: rgb(255,128,171) !important; }\n\n.mdl-color--pink-A100 {\n background-color: rgb(255,128,171) !important; }\n\n.mdl-color-text--pink-A200 {\n color: rgb(255,64,129) !important; }\n\n.mdl-color--pink-A200 {\n background-color: rgb(255,64,129) !important; }\n\n.mdl-color-text--pink-A400 {\n color: rgb(245,0,87) !important; }\n\n.mdl-color--pink-A400 {\n background-color: rgb(245,0,87) !important; }\n\n.mdl-color-text--pink-A700 {\n color: rgb(197,17,98) !important; }\n\n.mdl-color--pink-A700 {\n background-color: rgb(197,17,98) !important; }\n\n.mdl-color-text--purple {\n color: rgb(156,39,176) !important; }\n\n.mdl-color--purple {\n background-color: rgb(156,39,176) !important; }\n\n.mdl-color-text--purple-50 {\n color: rgb(243,229,245) !important; }\n\n.mdl-color--purple-50 {\n background-color: rgb(243,229,245) !important; }\n\n.mdl-color-text--purple-100 {\n color: rgb(225,190,231) !important; }\n\n.mdl-color--purple-100 {\n background-color: rgb(225,190,231) !important; }\n\n.mdl-color-text--purple-200 {\n color: rgb(206,147,216) !important; }\n\n.mdl-color--purple-200 {\n background-color: rgb(206,147,216) !important; }\n\n.mdl-color-text--purple-300 {\n color: rgb(186,104,200) !important; }\n\n.mdl-color--purple-300 {\n background-color: rgb(186,104,200) !important; }\n\n.mdl-color-text--purple-400 {\n color: rgb(171,71,188) !important; }\n\n.mdl-color--purple-400 {\n background-color: rgb(171,71,188) !important; }\n\n.mdl-color-text--purple-500 {\n color: rgb(156,39,176) !important; }\n\n.mdl-color--purple-500 {\n background-color: rgb(156,39,176) !important; }\n\n.mdl-color-text--purple-600 {\n color: rgb(142,36,170) !important; }\n\n.mdl-color--purple-600 {\n background-color: rgb(142,36,170) !important; }\n\n.mdl-color-text--purple-700 {\n color: rgb(123,31,162) !important; }\n\n.mdl-color--purple-700 {\n background-color: rgb(123,31,162) !important; }\n\n.mdl-color-text--purple-800 {\n color: rgb(106,27,154) !important; }\n\n.mdl-color--purple-800 {\n background-color: rgb(106,27,154) !important; }\n\n.mdl-color-text--purple-900 {\n color: rgb(74,20,140) !important; }\n\n.mdl-color--purple-900 {\n background-color: rgb(74,20,140) !important; }\n\n.mdl-color-text--purple-A100 {\n color: rgb(234,128,252) !important; }\n\n.mdl-color--purple-A100 {\n background-color: rgb(234,128,252) !important; }\n\n.mdl-color-text--purple-A200 {\n color: rgb(224,64,251) !important; }\n\n.mdl-color--purple-A200 {\n background-color: rgb(224,64,251) !important; }\n\n.mdl-color-text--purple-A400 {\n color: rgb(213,0,249) !important; }\n\n.mdl-color--purple-A400 {\n background-color: rgb(213,0,249) !important; }\n\n.mdl-color-text--purple-A700 {\n color: rgb(170,0,255) !important; }\n\n.mdl-color--purple-A700 {\n background-color: rgb(170,0,255) !important; }\n\n.mdl-color-text--deep-purple {\n color: rgb(103,58,183) !important; }\n\n.mdl-color--deep-purple {\n background-color: rgb(103,58,183) !important; }\n\n.mdl-color-text--deep-purple-50 {\n color: rgb(237,231,246) !important; }\n\n.mdl-color--deep-purple-50 {\n background-color: rgb(237,231,246) !important; }\n\n.mdl-color-text--deep-purple-100 {\n color: rgb(209,196,233) !important; }\n\n.mdl-color--deep-purple-100 {\n background-color: rgb(209,196,233) !important; }\n\n.mdl-color-text--deep-purple-200 {\n color: rgb(179,157,219) !important; }\n\n.mdl-color--deep-purple-200 {\n background-color: rgb(179,157,219) !important; }\n\n.mdl-color-text--deep-purple-300 {\n color: rgb(149,117,205) !important; }\n\n.mdl-color--deep-purple-300 {\n background-color: rgb(149,117,205) !important; }\n\n.mdl-color-text--deep-purple-400 {\n color: rgb(126,87,194) !important; }\n\n.mdl-color--deep-purple-400 {\n background-color: rgb(126,87,194) !important; }\n\n.mdl-color-text--deep-purple-500 {\n color: rgb(103,58,183) !important; }\n\n.mdl-color--deep-purple-500 {\n background-color: rgb(103,58,183) !important; }\n\n.mdl-color-text--deep-purple-600 {\n color: rgb(94,53,177) !important; }\n\n.mdl-color--deep-purple-600 {\n background-color: rgb(94,53,177) !important; }\n\n.mdl-color-text--deep-purple-700 {\n color: rgb(81,45,168) !important; }\n\n.mdl-color--deep-purple-700 {\n background-color: rgb(81,45,168) !important; }\n\n.mdl-color-text--deep-purple-800 {\n color: rgb(69,39,160) !important; }\n\n.mdl-color--deep-purple-800 {\n background-color: rgb(69,39,160) !important; }\n\n.mdl-color-text--deep-purple-900 {\n color: rgb(49,27,146) !important; }\n\n.mdl-color--deep-purple-900 {\n background-color: rgb(49,27,146) !important; }\n\n.mdl-color-text--deep-purple-A100 {\n color: rgb(179,136,255) !important; }\n\n.mdl-color--deep-purple-A100 {\n background-color: rgb(179,136,255) !important; }\n\n.mdl-color-text--deep-purple-A200 {\n color: rgb(124,77,255) !important; }\n\n.mdl-color--deep-purple-A200 {\n background-color: rgb(124,77,255) !important; }\n\n.mdl-color-text--deep-purple-A400 {\n color: rgb(101,31,255) !important; }\n\n.mdl-color--deep-purple-A400 {\n background-color: rgb(101,31,255) !important; }\n\n.mdl-color-text--deep-purple-A700 {\n color: rgb(98,0,234) !important; }\n\n.mdl-color--deep-purple-A700 {\n background-color: rgb(98,0,234) !important; }\n\n.mdl-color-text--indigo {\n color: rgb(63,81,181) !important; }\n\n.mdl-color--indigo {\n background-color: rgb(63,81,181) !important; }\n\n.mdl-color-text--indigo-50 {\n color: rgb(232,234,246) !important; }\n\n.mdl-color--indigo-50 {\n background-color: rgb(232,234,246) !important; }\n\n.mdl-color-text--indigo-100 {\n color: rgb(197,202,233) !important; }\n\n.mdl-color--indigo-100 {\n background-color: rgb(197,202,233) !important; }\n\n.mdl-color-text--indigo-200 {\n color: rgb(159,168,218) !important; }\n\n.mdl-color--indigo-200 {\n background-color: rgb(159,168,218) !important; }\n\n.mdl-color-text--indigo-300 {\n color: rgb(121,134,203) !important; }\n\n.mdl-color--indigo-300 {\n background-color: rgb(121,134,203) !important; }\n\n.mdl-color-text--indigo-400 {\n color: rgb(92,107,192) !important; }\n\n.mdl-color--indigo-400 {\n background-color: rgb(92,107,192) !important; }\n\n.mdl-color-text--indigo-500 {\n color: rgb(63,81,181) !important; }\n\n.mdl-color--indigo-500 {\n background-color: rgb(63,81,181) !important; }\n\n.mdl-color-text--indigo-600 {\n color: rgb(57,73,171) !important; }\n\n.mdl-color--indigo-600 {\n background-color: rgb(57,73,171) !important; }\n\n.mdl-color-text--indigo-700 {\n color: rgb(48,63,159) !important; }\n\n.mdl-color--indigo-700 {\n background-color: rgb(48,63,159) !important; }\n\n.mdl-color-text--indigo-800 {\n color: rgb(40,53,147) !important; }\n\n.mdl-color--indigo-800 {\n background-color: rgb(40,53,147) !important; }\n\n.mdl-color-text--indigo-900 {\n color: rgb(26,35,126) !important; }\n\n.mdl-color--indigo-900 {\n background-color: rgb(26,35,126) !important; }\n\n.mdl-color-text--indigo-A100 {\n color: rgb(140,158,255) !important; }\n\n.mdl-color--indigo-A100 {\n background-color: rgb(140,158,255) !important; }\n\n.mdl-color-text--indigo-A200 {\n color: rgb(83,109,254) !important; }\n\n.mdl-color--indigo-A200 {\n background-color: rgb(83,109,254) !important; }\n\n.mdl-color-text--indigo-A400 {\n color: rgb(61,90,254) !important; }\n\n.mdl-color--indigo-A400 {\n background-color: rgb(61,90,254) !important; }\n\n.mdl-color-text--indigo-A700 {\n color: rgb(48,79,254) !important; }\n\n.mdl-color--indigo-A700 {\n background-color: rgb(48,79,254) !important; }\n\n.mdl-color-text--blue {\n color: rgb(33,150,243) !important; }\n\n.mdl-color--blue {\n background-color: rgb(33,150,243) !important; }\n\n.mdl-color-text--blue-50 {\n color: rgb(227,242,253) !important; }\n\n.mdl-color--blue-50 {\n background-color: rgb(227,242,253) !important; }\n\n.mdl-color-text--blue-100 {\n color: rgb(187,222,251) !important; }\n\n.mdl-color--blue-100 {\n background-color: rgb(187,222,251) !important; }\n\n.mdl-color-text--blue-200 {\n color: rgb(144,202,249) !important; }\n\n.mdl-color--blue-200 {\n background-color: rgb(144,202,249) !important; }\n\n.mdl-color-text--blue-300 {\n color: rgb(100,181,246) !important; }\n\n.mdl-color--blue-300 {\n background-color: rgb(100,181,246) !important; }\n\n.mdl-color-text--blue-400 {\n color: rgb(66,165,245) !important; }\n\n.mdl-color--blue-400 {\n background-color: rgb(66,165,245) !important; }\n\n.mdl-color-text--blue-500 {\n color: rgb(33,150,243) !important; }\n\n.mdl-color--blue-500 {\n background-color: rgb(33,150,243) !important; }\n\n.mdl-color-text--blue-600 {\n color: rgb(30,136,229) !important; }\n\n.mdl-color--blue-600 {\n background-color: rgb(30,136,229) !important; }\n\n.mdl-color-text--blue-700 {\n color: rgb(25,118,210) !important; }\n\n.mdl-color--blue-700 {\n background-color: rgb(25,118,210) !important; }\n\n.mdl-color-text--blue-800 {\n color: rgb(21,101,192) !important; }\n\n.mdl-color--blue-800 {\n background-color: rgb(21,101,192) !important; }\n\n.mdl-color-text--blue-900 {\n color: rgb(13,71,161) !important; }\n\n.mdl-color--blue-900 {\n background-color: rgb(13,71,161) !important; }\n\n.mdl-color-text--blue-A100 {\n color: rgb(130,177,255) !important; }\n\n.mdl-color--blue-A100 {\n background-color: rgb(130,177,255) !important; }\n\n.mdl-color-text--blue-A200 {\n color: rgb(68,138,255) !important; }\n\n.mdl-color--blue-A200 {\n background-color: rgb(68,138,255) !important; }\n\n.mdl-color-text--blue-A400 {\n color: rgb(41,121,255) !important; }\n\n.mdl-color--blue-A400 {\n background-color: rgb(41,121,255) !important; }\n\n.mdl-color-text--blue-A700 {\n color: rgb(41,98,255) !important; }\n\n.mdl-color--blue-A700 {\n background-color: rgb(41,98,255) !important; }\n\n.mdl-color-text--light-blue {\n color: rgb(3,169,244) !important; }\n\n.mdl-color--light-blue {\n background-color: rgb(3,169,244) !important; }\n\n.mdl-color-text--light-blue-50 {\n color: rgb(225,245,254) !important; }\n\n.mdl-color--light-blue-50 {\n background-color: rgb(225,245,254) !important; }\n\n.mdl-color-text--light-blue-100 {\n color: rgb(179,229,252) !important; }\n\n.mdl-color--light-blue-100 {\n background-color: rgb(179,229,252) !important; }\n\n.mdl-color-text--light-blue-200 {\n color: rgb(129,212,250) !important; }\n\n.mdl-color--light-blue-200 {\n background-color: rgb(129,212,250) !important; }\n\n.mdl-color-text--light-blue-300 {\n color: rgb(79,195,247) !important; }\n\n.mdl-color--light-blue-300 {\n background-color: rgb(79,195,247) !important; }\n\n.mdl-color-text--light-blue-400 {\n color: rgb(41,182,246) !important; }\n\n.mdl-color--light-blue-400 {\n background-color: rgb(41,182,246) !important; }\n\n.mdl-color-text--light-blue-500 {\n color: rgb(3,169,244) !important; }\n\n.mdl-color--light-blue-500 {\n background-color: rgb(3,169,244) !important; }\n\n.mdl-color-text--light-blue-600 {\n color: rgb(3,155,229) !important; }\n\n.mdl-color--light-blue-600 {\n background-color: rgb(3,155,229) !important; }\n\n.mdl-color-text--light-blue-700 {\n color: rgb(2,136,209) !important; }\n\n.mdl-color--light-blue-700 {\n background-color: rgb(2,136,209) !important; }\n\n.mdl-color-text--light-blue-800 {\n color: rgb(2,119,189) !important; }\n\n.mdl-color--light-blue-800 {\n background-color: rgb(2,119,189) !important; }\n\n.mdl-color-text--light-blue-900 {\n color: rgb(1,87,155) !important; }\n\n.mdl-color--light-blue-900 {\n background-color: rgb(1,87,155) !important; }\n\n.mdl-color-text--light-blue-A100 {\n color: rgb(128,216,255) !important; }\n\n.mdl-color--light-blue-A100 {\n background-color: rgb(128,216,255) !important; }\n\n.mdl-color-text--light-blue-A200 {\n color: rgb(64,196,255) !important; }\n\n.mdl-color--light-blue-A200 {\n background-color: rgb(64,196,255) !important; }\n\n.mdl-color-text--light-blue-A400 {\n color: rgb(0,176,255) !important; }\n\n.mdl-color--light-blue-A400 {\n background-color: rgb(0,176,255) !important; }\n\n.mdl-color-text--light-blue-A700 {\n color: rgb(0,145,234) !important; }\n\n.mdl-color--light-blue-A700 {\n background-color: rgb(0,145,234) !important; }\n\n.mdl-color-text--cyan {\n color: rgb(0,188,212) !important; }\n\n.mdl-color--cyan {\n background-color: rgb(0,188,212) !important; }\n\n.mdl-color-text--cyan-50 {\n color: rgb(224,247,250) !important; }\n\n.mdl-color--cyan-50 {\n background-color: rgb(224,247,250) !important; }\n\n.mdl-color-text--cyan-100 {\n color: rgb(178,235,242) !important; }\n\n.mdl-color--cyan-100 {\n background-color: rgb(178,235,242) !important; }\n\n.mdl-color-text--cyan-200 {\n color: rgb(128,222,234) !important; }\n\n.mdl-color--cyan-200 {\n background-color: rgb(128,222,234) !important; }\n\n.mdl-color-text--cyan-300 {\n color: rgb(77,208,225) !important; }\n\n.mdl-color--cyan-300 {\n background-color: rgb(77,208,225) !important; }\n\n.mdl-color-text--cyan-400 {\n color: rgb(38,198,218) !important; }\n\n.mdl-color--cyan-400 {\n background-color: rgb(38,198,218) !important; }\n\n.mdl-color-text--cyan-500 {\n color: rgb(0,188,212) !important; }\n\n.mdl-color--cyan-500 {\n background-color: rgb(0,188,212) !important; }\n\n.mdl-color-text--cyan-600 {\n color: rgb(0,172,193) !important; }\n\n.mdl-color--cyan-600 {\n background-color: rgb(0,172,193) !important; }\n\n.mdl-color-text--cyan-700 {\n color: rgb(0,151,167) !important; }\n\n.mdl-color--cyan-700 {\n background-color: rgb(0,151,167) !important; }\n\n.mdl-color-text--cyan-800 {\n color: rgb(0,131,143) !important; }\n\n.mdl-color--cyan-800 {\n background-color: rgb(0,131,143) !important; }\n\n.mdl-color-text--cyan-900 {\n color: rgb(0,96,100) !important; }\n\n.mdl-color--cyan-900 {\n background-color: rgb(0,96,100) !important; }\n\n.mdl-color-text--cyan-A100 {\n color: rgb(132,255,255) !important; }\n\n.mdl-color--cyan-A100 {\n background-color: rgb(132,255,255) !important; }\n\n.mdl-color-text--cyan-A200 {\n color: rgb(24,255,255) !important; }\n\n.mdl-color--cyan-A200 {\n background-color: rgb(24,255,255) !important; }\n\n.mdl-color-text--cyan-A400 {\n color: rgb(0,229,255) !important; }\n\n.mdl-color--cyan-A400 {\n background-color: rgb(0,229,255) !important; }\n\n.mdl-color-text--cyan-A700 {\n color: rgb(0,184,212) !important; }\n\n.mdl-color--cyan-A700 {\n background-color: rgb(0,184,212) !important; }\n\n.mdl-color-text--teal {\n color: rgb(0,150,136) !important; }\n\n.mdl-color--teal {\n background-color: rgb(0,150,136) !important; }\n\n.mdl-color-text--teal-50 {\n color: rgb(224,242,241) !important; }\n\n.mdl-color--teal-50 {\n background-color: rgb(224,242,241) !important; }\n\n.mdl-color-text--teal-100 {\n color: rgb(178,223,219) !important; }\n\n.mdl-color--teal-100 {\n background-color: rgb(178,223,219) !important; }\n\n.mdl-color-text--teal-200 {\n color: rgb(128,203,196) !important; }\n\n.mdl-color--teal-200 {\n background-color: rgb(128,203,196) !important; }\n\n.mdl-color-text--teal-300 {\n color: rgb(77,182,172) !important; }\n\n.mdl-color--teal-300 {\n background-color: rgb(77,182,172) !important; }\n\n.mdl-color-text--teal-400 {\n color: rgb(38,166,154) !important; }\n\n.mdl-color--teal-400 {\n background-color: rgb(38,166,154) !important; }\n\n.mdl-color-text--teal-500 {\n color: rgb(0,150,136) !important; }\n\n.mdl-color--teal-500 {\n background-color: rgb(0,150,136) !important; }\n\n.mdl-color-text--teal-600 {\n color: rgb(0,137,123) !important; }\n\n.mdl-color--teal-600 {\n background-color: rgb(0,137,123) !important; }\n\n.mdl-color-text--teal-700 {\n color: rgb(0,121,107) !important; }\n\n.mdl-color--teal-700 {\n background-color: rgb(0,121,107) !important; }\n\n.mdl-color-text--teal-800 {\n color: rgb(0,105,92) !important; }\n\n.mdl-color--teal-800 {\n background-color: rgb(0,105,92) !important; }\n\n.mdl-color-text--teal-900 {\n color: rgb(0,77,64) !important; }\n\n.mdl-color--teal-900 {\n background-color: rgb(0,77,64) !important; }\n\n.mdl-color-text--teal-A100 {\n color: rgb(167,255,235) !important; }\n\n.mdl-color--teal-A100 {\n background-color: rgb(167,255,235) !important; }\n\n.mdl-color-text--teal-A200 {\n color: rgb(100,255,218) !important; }\n\n.mdl-color--teal-A200 {\n background-color: rgb(100,255,218) !important; }\n\n.mdl-color-text--teal-A400 {\n color: rgb(29,233,182) !important; }\n\n.mdl-color--teal-A400 {\n background-color: rgb(29,233,182) !important; }\n\n.mdl-color-text--teal-A700 {\n color: rgb(0,191,165) !important; }\n\n.mdl-color--teal-A700 {\n background-color: rgb(0,191,165) !important; }\n\n.mdl-color-text--green {\n color: rgb(76,175,80) !important; }\n\n.mdl-color--green {\n background-color: rgb(76,175,80) !important; }\n\n.mdl-color-text--green-50 {\n color: rgb(232,245,233) !important; }\n\n.mdl-color--green-50 {\n background-color: rgb(232,245,233) !important; }\n\n.mdl-color-text--green-100 {\n color: rgb(200,230,201) !important; }\n\n.mdl-color--green-100 {\n background-color: rgb(200,230,201) !important; }\n\n.mdl-color-text--green-200 {\n color: rgb(165,214,167) !important; }\n\n.mdl-color--green-200 {\n background-color: rgb(165,214,167) !important; }\n\n.mdl-color-text--green-300 {\n color: rgb(129,199,132) !important; }\n\n.mdl-color--green-300 {\n background-color: rgb(129,199,132) !important; }\n\n.mdl-color-text--green-400 {\n color: rgb(102,187,106) !important; }\n\n.mdl-color--green-400 {\n background-color: rgb(102,187,106) !important; }\n\n.mdl-color-text--green-500 {\n color: rgb(76,175,80) !important; }\n\n.mdl-color--green-500 {\n background-color: rgb(76,175,80) !important; }\n\n.mdl-color-text--green-600 {\n color: rgb(67,160,71) !important; }\n\n.mdl-color--green-600 {\n background-color: rgb(67,160,71) !important; }\n\n.mdl-color-text--green-700 {\n color: rgb(56,142,60) !important; }\n\n.mdl-color--green-700 {\n background-color: rgb(56,142,60) !important; }\n\n.mdl-color-text--green-800 {\n color: rgb(46,125,50) !important; }\n\n.mdl-color--green-800 {\n background-color: rgb(46,125,50) !important; }\n\n.mdl-color-text--green-900 {\n color: rgb(27,94,32) !important; }\n\n.mdl-color--green-900 {\n background-color: rgb(27,94,32) !important; }\n\n.mdl-color-text--green-A100 {\n color: rgb(185,246,202) !important; }\n\n.mdl-color--green-A100 {\n background-color: rgb(185,246,202) !important; }\n\n.mdl-color-text--green-A200 {\n color: rgb(105,240,174) !important; }\n\n.mdl-color--green-A200 {\n background-color: rgb(105,240,174) !important; }\n\n.mdl-color-text--green-A400 {\n color: rgb(0,230,118) !important; }\n\n.mdl-color--green-A400 {\n background-color: rgb(0,230,118) !important; }\n\n.mdl-color-text--green-A700 {\n color: rgb(0,200,83) !important; }\n\n.mdl-color--green-A700 {\n background-color: rgb(0,200,83) !important; }\n\n.mdl-color-text--light-green {\n color: rgb(139,195,74) !important; }\n\n.mdl-color--light-green {\n background-color: rgb(139,195,74) !important; }\n\n.mdl-color-text--light-green-50 {\n color: rgb(241,248,233) !important; }\n\n.mdl-color--light-green-50 {\n background-color: rgb(241,248,233) !important; }\n\n.mdl-color-text--light-green-100 {\n color: rgb(220,237,200) !important; }\n\n.mdl-color--light-green-100 {\n background-color: rgb(220,237,200) !important; }\n\n.mdl-color-text--light-green-200 {\n color: rgb(197,225,165) !important; }\n\n.mdl-color--light-green-200 {\n background-color: rgb(197,225,165) !important; }\n\n.mdl-color-text--light-green-300 {\n color: rgb(174,213,129) !important; }\n\n.mdl-color--light-green-300 {\n background-color: rgb(174,213,129) !important; }\n\n.mdl-color-text--light-green-400 {\n color: rgb(156,204,101) !important; }\n\n.mdl-color--light-green-400 {\n background-color: rgb(156,204,101) !important; }\n\n.mdl-color-text--light-green-500 {\n color: rgb(139,195,74) !important; }\n\n.mdl-color--light-green-500 {\n background-color: rgb(139,195,74) !important; }\n\n.mdl-color-text--light-green-600 {\n color: rgb(124,179,66) !important; }\n\n.mdl-color--light-green-600 {\n background-color: rgb(124,179,66) !important; }\n\n.mdl-color-text--light-green-700 {\n color: rgb(104,159,56) !important; }\n\n.mdl-color--light-green-700 {\n background-color: rgb(104,159,56) !important; }\n\n.mdl-color-text--light-green-800 {\n color: rgb(85,139,47) !important; }\n\n.mdl-color--light-green-800 {\n background-color: rgb(85,139,47) !important; }\n\n.mdl-color-text--light-green-900 {\n color: rgb(51,105,30) !important; }\n\n.mdl-color--light-green-900 {\n background-color: rgb(51,105,30) !important; }\n\n.mdl-color-text--light-green-A100 {\n color: rgb(204,255,144) !important; }\n\n.mdl-color--light-green-A100 {\n background-color: rgb(204,255,144) !important; }\n\n.mdl-color-text--light-green-A200 {\n color: rgb(178,255,89) !important; }\n\n.mdl-color--light-green-A200 {\n background-color: rgb(178,255,89) !important; }\n\n.mdl-color-text--light-green-A400 {\n color: rgb(118,255,3) !important; }\n\n.mdl-color--light-green-A400 {\n background-color: rgb(118,255,3) !important; }\n\n.mdl-color-text--light-green-A700 {\n color: rgb(100,221,23) !important; }\n\n.mdl-color--light-green-A700 {\n background-color: rgb(100,221,23) !important; }\n\n.mdl-color-text--lime {\n color: rgb(205,220,57) !important; }\n\n.mdl-color--lime {\n background-color: rgb(205,220,57) !important; }\n\n.mdl-color-text--lime-50 {\n color: rgb(249,251,231) !important; }\n\n.mdl-color--lime-50 {\n background-color: rgb(249,251,231) !important; }\n\n.mdl-color-text--lime-100 {\n color: rgb(240,244,195) !important; }\n\n.mdl-color--lime-100 {\n background-color: rgb(240,244,195) !important; }\n\n.mdl-color-text--lime-200 {\n color: rgb(230,238,156) !important; }\n\n.mdl-color--lime-200 {\n background-color: rgb(230,238,156) !important; }\n\n.mdl-color-text--lime-300 {\n color: rgb(220,231,117) !important; }\n\n.mdl-color--lime-300 {\n background-color: rgb(220,231,117) !important; }\n\n.mdl-color-text--lime-400 {\n color: rgb(212,225,87) !important; }\n\n.mdl-color--lime-400 {\n background-color: rgb(212,225,87) !important; }\n\n.mdl-color-text--lime-500 {\n color: rgb(205,220,57) !important; }\n\n.mdl-color--lime-500 {\n background-color: rgb(205,220,57) !important; }\n\n.mdl-color-text--lime-600 {\n color: rgb(192,202,51) !important; }\n\n.mdl-color--lime-600 {\n background-color: rgb(192,202,51) !important; }\n\n.mdl-color-text--lime-700 {\n color: rgb(175,180,43) !important; }\n\n.mdl-color--lime-700 {\n background-color: rgb(175,180,43) !important; }\n\n.mdl-color-text--lime-800 {\n color: rgb(158,157,36) !important; }\n\n.mdl-color--lime-800 {\n background-color: rgb(158,157,36) !important; }\n\n.mdl-color-text--lime-900 {\n color: rgb(130,119,23) !important; }\n\n.mdl-color--lime-900 {\n background-color: rgb(130,119,23) !important; }\n\n.mdl-color-text--lime-A100 {\n color: rgb(244,255,129) !important; }\n\n.mdl-color--lime-A100 {\n background-color: rgb(244,255,129) !important; }\n\n.mdl-color-text--lime-A200 {\n color: rgb(238,255,65) !important; }\n\n.mdl-color--lime-A200 {\n background-color: rgb(238,255,65) !important; }\n\n.mdl-color-text--lime-A400 {\n color: rgb(198,255,0) !important; }\n\n.mdl-color--lime-A400 {\n background-color: rgb(198,255,0) !important; }\n\n.mdl-color-text--lime-A700 {\n color: rgb(174,234,0) !important; }\n\n.mdl-color--lime-A700 {\n background-color: rgb(174,234,0) !important; }\n\n.mdl-color-text--yellow {\n color: rgb(255,235,59) !important; }\n\n.mdl-color--yellow {\n background-color: rgb(255,235,59) !important; }\n\n.mdl-color-text--yellow-50 {\n color: rgb(255,253,231) !important; }\n\n.mdl-color--yellow-50 {\n background-color: rgb(255,253,231) !important; }\n\n.mdl-color-text--yellow-100 {\n color: rgb(255,249,196) !important; }\n\n.mdl-color--yellow-100 {\n background-color: rgb(255,249,196) !important; }\n\n.mdl-color-text--yellow-200 {\n color: rgb(255,245,157) !important; }\n\n.mdl-color--yellow-200 {\n background-color: rgb(255,245,157) !important; }\n\n.mdl-color-text--yellow-300 {\n color: rgb(255,241,118) !important; }\n\n.mdl-color--yellow-300 {\n background-color: rgb(255,241,118) !important; }\n\n.mdl-color-text--yellow-400 {\n color: rgb(255,238,88) !important; }\n\n.mdl-color--yellow-400 {\n background-color: rgb(255,238,88) !important; }\n\n.mdl-color-text--yellow-500 {\n color: rgb(255,235,59) !important; }\n\n.mdl-color--yellow-500 {\n background-color: rgb(255,235,59) !important; }\n\n.mdl-color-text--yellow-600 {\n color: rgb(253,216,53) !important; }\n\n.mdl-color--yellow-600 {\n background-color: rgb(253,216,53) !important; }\n\n.mdl-color-text--yellow-700 {\n color: rgb(251,192,45) !important; }\n\n.mdl-color--yellow-700 {\n background-color: rgb(251,192,45) !important; }\n\n.mdl-color-text--yellow-800 {\n color: rgb(249,168,37) !important; }\n\n.mdl-color--yellow-800 {\n background-color: rgb(249,168,37) !important; }\n\n.mdl-color-text--yellow-900 {\n color: rgb(245,127,23) !important; }\n\n.mdl-color--yellow-900 {\n background-color: rgb(245,127,23) !important; }\n\n.mdl-color-text--yellow-A100 {\n color: rgb(255,255,141) !important; }\n\n.mdl-color--yellow-A100 {\n background-color: rgb(255,255,141) !important; }\n\n.mdl-color-text--yellow-A200 {\n color: rgb(255,255,0) !important; }\n\n.mdl-color--yellow-A200 {\n background-color: rgb(255,255,0) !important; }\n\n.mdl-color-text--yellow-A400 {\n color: rgb(255,234,0) !important; }\n\n.mdl-color--yellow-A400 {\n background-color: rgb(255,234,0) !important; }\n\n.mdl-color-text--yellow-A700 {\n color: rgb(255,214,0) !important; }\n\n.mdl-color--yellow-A700 {\n background-color: rgb(255,214,0) !important; }\n\n.mdl-color-text--amber {\n color: rgb(255,193,7) !important; }\n\n.mdl-color--amber {\n background-color: rgb(255,193,7) !important; }\n\n.mdl-color-text--amber-50 {\n color: rgb(255,248,225) !important; }\n\n.mdl-color--amber-50 {\n background-color: rgb(255,248,225) !important; }\n\n.mdl-color-text--amber-100 {\n color: rgb(255,236,179) !important; }\n\n.mdl-color--amber-100 {\n background-color: rgb(255,236,179) !important; }\n\n.mdl-color-text--amber-200 {\n color: rgb(255,224,130) !important; }\n\n.mdl-color--amber-200 {\n background-color: rgb(255,224,130) !important; }\n\n.mdl-color-text--amber-300 {\n color: rgb(255,213,79) !important; }\n\n.mdl-color--amber-300 {\n background-color: rgb(255,213,79) !important; }\n\n.mdl-color-text--amber-400 {\n color: rgb(255,202,40) !important; }\n\n.mdl-color--amber-400 {\n background-color: rgb(255,202,40) !important; }\n\n.mdl-color-text--amber-500 {\n color: rgb(255,193,7) !important; }\n\n.mdl-color--amber-500 {\n background-color: rgb(255,193,7) !important; }\n\n.mdl-color-text--amber-600 {\n color: rgb(255,179,0) !important; }\n\n.mdl-color--amber-600 {\n background-color: rgb(255,179,0) !important; }\n\n.mdl-color-text--amber-700 {\n color: rgb(255,160,0) !important; }\n\n.mdl-color--amber-700 {\n background-color: rgb(255,160,0) !important; }\n\n.mdl-color-text--amber-800 {\n color: rgb(255,143,0) !important; }\n\n.mdl-color--amber-800 {\n background-color: rgb(255,143,0) !important; }\n\n.mdl-color-text--amber-900 {\n color: rgb(255,111,0) !important; }\n\n.mdl-color--amber-900 {\n background-color: rgb(255,111,0) !important; }\n\n.mdl-color-text--amber-A100 {\n color: rgb(255,229,127) !important; }\n\n.mdl-color--amber-A100 {\n background-color: rgb(255,229,127) !important; }\n\n.mdl-color-text--amber-A200 {\n color: rgb(255,215,64) !important; }\n\n.mdl-color--amber-A200 {\n background-color: rgb(255,215,64) !important; }\n\n.mdl-color-text--amber-A400 {\n color: rgb(255,196,0) !important; }\n\n.mdl-color--amber-A400 {\n background-color: rgb(255,196,0) !important; }\n\n.mdl-color-text--amber-A700 {\n color: rgb(255,171,0) !important; }\n\n.mdl-color--amber-A700 {\n background-color: rgb(255,171,0) !important; }\n\n.mdl-color-text--orange {\n color: rgb(255,152,0) !important; }\n\n.mdl-color--orange {\n background-color: rgb(255,152,0) !important; }\n\n.mdl-color-text--orange-50 {\n color: rgb(255,243,224) !important; }\n\n.mdl-color--orange-50 {\n background-color: rgb(255,243,224) !important; }\n\n.mdl-color-text--orange-100 {\n color: rgb(255,224,178) !important; }\n\n.mdl-color--orange-100 {\n background-color: rgb(255,224,178) !important; }\n\n.mdl-color-text--orange-200 {\n color: rgb(255,204,128) !important; }\n\n.mdl-color--orange-200 {\n background-color: rgb(255,204,128) !important; }\n\n.mdl-color-text--orange-300 {\n color: rgb(255,183,77) !important; }\n\n.mdl-color--orange-300 {\n background-color: rgb(255,183,77) !important; }\n\n.mdl-color-text--orange-400 {\n color: rgb(255,167,38) !important; }\n\n.mdl-color--orange-400 {\n background-color: rgb(255,167,38) !important; }\n\n.mdl-color-text--orange-500 {\n color: rgb(255,152,0) !important; }\n\n.mdl-color--orange-500 {\n background-color: rgb(255,152,0) !important; }\n\n.mdl-color-text--orange-600 {\n color: rgb(251,140,0) !important; }\n\n.mdl-color--orange-600 {\n background-color: rgb(251,140,0) !important; }\n\n.mdl-color-text--orange-700 {\n color: rgb(245,124,0) !important; }\n\n.mdl-color--orange-700 {\n background-color: rgb(245,124,0) !important; }\n\n.mdl-color-text--orange-800 {\n color: rgb(239,108,0) !important; }\n\n.mdl-color--orange-800 {\n background-color: rgb(239,108,0) !important; }\n\n.mdl-color-text--orange-900 {\n color: rgb(230,81,0) !important; }\n\n.mdl-color--orange-900 {\n background-color: rgb(230,81,0) !important; }\n\n.mdl-color-text--orange-A100 {\n color: rgb(255,209,128) !important; }\n\n.mdl-color--orange-A100 {\n background-color: rgb(255,209,128) !important; }\n\n.mdl-color-text--orange-A200 {\n color: rgb(255,171,64) !important; }\n\n.mdl-color--orange-A200 {\n background-color: rgb(255,171,64) !important; }\n\n.mdl-color-text--orange-A400 {\n color: rgb(255,145,0) !important; }\n\n.mdl-color--orange-A400 {\n background-color: rgb(255,145,0) !important; }\n\n.mdl-color-text--orange-A700 {\n color: rgb(255,109,0) !important; }\n\n.mdl-color--orange-A700 {\n background-color: rgb(255,109,0) !important; }\n\n.mdl-color-text--deep-orange {\n color: rgb(255,87,34) !important; }\n\n.mdl-color--deep-orange {\n background-color: rgb(255,87,34) !important; }\n\n.mdl-color-text--deep-orange-50 {\n color: rgb(251,233,231) !important; }\n\n.mdl-color--deep-orange-50 {\n background-color: rgb(251,233,231) !important; }\n\n.mdl-color-text--deep-orange-100 {\n color: rgb(255,204,188) !important; }\n\n.mdl-color--deep-orange-100 {\n background-color: rgb(255,204,188) !important; }\n\n.mdl-color-text--deep-orange-200 {\n color: rgb(255,171,145) !important; }\n\n.mdl-color--deep-orange-200 {\n background-color: rgb(255,171,145) !important; }\n\n.mdl-color-text--deep-orange-300 {\n color: rgb(255,138,101) !important; }\n\n.mdl-color--deep-orange-300 {\n background-color: rgb(255,138,101) !important; }\n\n.mdl-color-text--deep-orange-400 {\n color: rgb(255,112,67) !important; }\n\n.mdl-color--deep-orange-400 {\n background-color: rgb(255,112,67) !important; }\n\n.mdl-color-text--deep-orange-500 {\n color: rgb(255,87,34) !important; }\n\n.mdl-color--deep-orange-500 {\n background-color: rgb(255,87,34) !important; }\n\n.mdl-color-text--deep-orange-600 {\n color: rgb(244,81,30) !important; }\n\n.mdl-color--deep-orange-600 {\n background-color: rgb(244,81,30) !important; }\n\n.mdl-color-text--deep-orange-700 {\n color: rgb(230,74,25) !important; }\n\n.mdl-color--deep-orange-700 {\n background-color: rgb(230,74,25) !important; }\n\n.mdl-color-text--deep-orange-800 {\n color: rgb(216,67,21) !important; }\n\n.mdl-color--deep-orange-800 {\n background-color: rgb(216,67,21) !important; }\n\n.mdl-color-text--deep-orange-900 {\n color: rgb(191,54,12) !important; }\n\n.mdl-color--deep-orange-900 {\n background-color: rgb(191,54,12) !important; }\n\n.mdl-color-text--deep-orange-A100 {\n color: rgb(255,158,128) !important; }\n\n.mdl-color--deep-orange-A100 {\n background-color: rgb(255,158,128) !important; }\n\n.mdl-color-text--deep-orange-A200 {\n color: rgb(255,110,64) !important; }\n\n.mdl-color--deep-orange-A200 {\n background-color: rgb(255,110,64) !important; }\n\n.mdl-color-text--deep-orange-A400 {\n color: rgb(255,61,0) !important; }\n\n.mdl-color--deep-orange-A400 {\n background-color: rgb(255,61,0) !important; }\n\n.mdl-color-text--deep-orange-A700 {\n color: rgb(221,44,0) !important; }\n\n.mdl-color--deep-orange-A700 {\n background-color: rgb(221,44,0) !important; }\n\n.mdl-color-text--brown {\n color: rgb(121,85,72) !important; }\n\n.mdl-color--brown {\n background-color: rgb(121,85,72) !important; }\n\n.mdl-color-text--brown-50 {\n color: rgb(239,235,233) !important; }\n\n.mdl-color--brown-50 {\n background-color: rgb(239,235,233) !important; }\n\n.mdl-color-text--brown-100 {\n color: rgb(215,204,200) !important; }\n\n.mdl-color--brown-100 {\n background-color: rgb(215,204,200) !important; }\n\n.mdl-color-text--brown-200 {\n color: rgb(188,170,164) !important; }\n\n.mdl-color--brown-200 {\n background-color: rgb(188,170,164) !important; }\n\n.mdl-color-text--brown-300 {\n color: rgb(161,136,127) !important; }\n\n.mdl-color--brown-300 {\n background-color: rgb(161,136,127) !important; }\n\n.mdl-color-text--brown-400 {\n color: rgb(141,110,99) !important; }\n\n.mdl-color--brown-400 {\n background-color: rgb(141,110,99) !important; }\n\n.mdl-color-text--brown-500 {\n color: rgb(121,85,72) !important; }\n\n.mdl-color--brown-500 {\n background-color: rgb(121,85,72) !important; }\n\n.mdl-color-text--brown-600 {\n color: rgb(109,76,65) !important; }\n\n.mdl-color--brown-600 {\n background-color: rgb(109,76,65) !important; }\n\n.mdl-color-text--brown-700 {\n color: rgb(93,64,55) !important; }\n\n.mdl-color--brown-700 {\n background-color: rgb(93,64,55) !important; }\n\n.mdl-color-text--brown-800 {\n color: rgb(78,52,46) !important; }\n\n.mdl-color--brown-800 {\n background-color: rgb(78,52,46) !important; }\n\n.mdl-color-text--brown-900 {\n color: rgb(62,39,35) !important; }\n\n.mdl-color--brown-900 {\n background-color: rgb(62,39,35) !important; }\n\n.mdl-color-text--grey {\n color: rgb(158,158,158) !important; }\n\n.mdl-color--grey {\n background-color: rgb(158,158,158) !important; }\n\n.mdl-color-text--grey-50 {\n color: rgb(250,250,250) !important; }\n\n.mdl-color--grey-50 {\n background-color: rgb(250,250,250) !important; }\n\n.mdl-color-text--grey-100 {\n color: rgb(245,245,245) !important; }\n\n.mdl-color--grey-100 {\n background-color: rgb(245,245,245) !important; }\n\n.mdl-color-text--grey-200 {\n color: rgb(238,238,238) !important; }\n\n.mdl-color--grey-200 {\n background-color: rgb(238,238,238) !important; }\n\n.mdl-color-text--grey-300 {\n color: rgb(224,224,224) !important; }\n\n.mdl-color--grey-300 {\n background-color: rgb(224,224,224) !important; }\n\n.mdl-color-text--grey-400 {\n color: rgb(189,189,189) !important; }\n\n.mdl-color--grey-400 {\n background-color: rgb(189,189,189) !important; }\n\n.mdl-color-text--grey-500 {\n color: rgb(158,158,158) !important; }\n\n.mdl-color--grey-500 {\n background-color: rgb(158,158,158) !important; }\n\n.mdl-color-text--grey-600 {\n color: rgb(117,117,117) !important; }\n\n.mdl-color--grey-600 {\n background-color: rgb(117,117,117) !important; }\n\n.mdl-color-text--grey-700 {\n color: rgb(97,97,97) !important; }\n\n.mdl-color--grey-700 {\n background-color: rgb(97,97,97) !important; }\n\n.mdl-color-text--grey-800 {\n color: rgb(66,66,66) !important; }\n\n.mdl-color--grey-800 {\n background-color: rgb(66,66,66) !important; }\n\n.mdl-color-text--grey-900 {\n color: rgb(33,33,33) !important; }\n\n.mdl-color--grey-900 {\n background-color: rgb(33,33,33) !important; }\n\n.mdl-color-text--blue-grey {\n color: rgb(96,125,139) !important; }\n\n.mdl-color--blue-grey {\n background-color: rgb(96,125,139) !important; }\n\n.mdl-color-text--blue-grey-50 {\n color: rgb(236,239,241) !important; }\n\n.mdl-color--blue-grey-50 {\n background-color: rgb(236,239,241) !important; }\n\n.mdl-color-text--blue-grey-100 {\n color: rgb(207,216,220) !important; }\n\n.mdl-color--blue-grey-100 {\n background-color: rgb(207,216,220) !important; }\n\n.mdl-color-text--blue-grey-200 {\n color: rgb(176,190,197) !important; }\n\n.mdl-color--blue-grey-200 {\n background-color: rgb(176,190,197) !important; }\n\n.mdl-color-text--blue-grey-300 {\n color: rgb(144,164,174) !important; }\n\n.mdl-color--blue-grey-300 {\n background-color: rgb(144,164,174) !important; }\n\n.mdl-color-text--blue-grey-400 {\n color: rgb(120,144,156) !important; }\n\n.mdl-color--blue-grey-400 {\n background-color: rgb(120,144,156) !important; }\n\n.mdl-color-text--blue-grey-500 {\n color: rgb(96,125,139) !important; }\n\n.mdl-color--blue-grey-500 {\n background-color: rgb(96,125,139) !important; }\n\n.mdl-color-text--blue-grey-600 {\n color: rgb(84,110,122) !important; }\n\n.mdl-color--blue-grey-600 {\n background-color: rgb(84,110,122) !important; }\n\n.mdl-color-text--blue-grey-700 {\n color: rgb(69,90,100) !important; }\n\n.mdl-color--blue-grey-700 {\n background-color: rgb(69,90,100) !important; }\n\n.mdl-color-text--blue-grey-800 {\n color: rgb(55,71,79) !important; }\n\n.mdl-color--blue-grey-800 {\n background-color: rgb(55,71,79) !important; }\n\n.mdl-color-text--blue-grey-900 {\n color: rgb(38,50,56) !important; }\n\n.mdl-color--blue-grey-900 {\n background-color: rgb(38,50,56) !important; }\n\n.mdl-color--black {\n background-color: rgb(0,0,0) !important; }\n\n.mdl-color-text--black {\n color: rgb(0,0,0) !important; }\n\n.mdl-color--white {\n background-color: rgb(255,255,255) !important; }\n\n.mdl-color-text--white {\n color: rgb(255,255,255) !important; }\n\n.mdl-color--primary {\n background-color: rgb(63,81,181) !important; }\n\n.mdl-color--primary-contrast {\n background-color: rgb(255,255,255) !important; }\n\n.mdl-color--primary-dark {\n background-color: rgb(48,63,159) !important; }\n\n.mdl-color--accent {\n background-color: rgb(255,64,129) !important; }\n\n.mdl-color--accent-contrast {\n background-color: rgb(255,255,255) !important; }\n\n.mdl-color-text--primary {\n color: rgb(63,81,181) !important; }\n\n.mdl-color-text--primary-contrast {\n color: rgb(255,255,255) !important; }\n\n.mdl-color-text--primary-dark {\n color: rgb(48,63,159) !important; }\n\n.mdl-color-text--accent {\n color: rgb(255,64,129) !important; }\n\n.mdl-color-text--accent-contrast {\n color: rgb(255,255,255) !important; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-shadow--2dp {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n\n.mdl-shadow--3dp {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); }\n\n.mdl-shadow--4dp {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); }\n\n.mdl-shadow--6dp {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.2); }\n\n.mdl-shadow--8dp {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); }\n\n.mdl-shadow--16dp {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-ripple {\n background: rgb(0,0,0);\n border-radius: 50%;\n height: 50px;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n transform: translate(-50%, -50%);\n width: 50px;\n overflow: hidden; }\n .mdl-ripple.is-animating {\n transition: transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1); }\n .mdl-ripple.is-visible {\n opacity: 0.3; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-animation--default {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }\n\n.mdl-animation--fast-out-slow-in {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }\n\n.mdl-animation--linear-out-slow-in {\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }\n\n.mdl-animation--fast-out-linear-in {\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-badge {\n position: relative;\n white-space: nowrap;\n margin-right: 24px; }\n .mdl-badge:not([data-badge]) {\n margin-right: auto; }\n .mdl-badge[data-badge]:after {\n content: attr(data-badge);\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n align-content: center;\n align-items: center;\n position: absolute;\n top: -11px;\n right: -24px;\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-weight: 400;\n font-size: 12px;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: rgb(255,64,129);\n color: rgb(255,255,255); }\n .mdl-button .mdl-badge[data-badge]:after {\n top: -10px;\n right: -5px; }\n .mdl-badge.mdl-badge--no-background[data-badge]:after {\n color: rgb(255,64,129);\n background: rgba(255,255,255,0.2);\n box-shadow: 0 0 1px gray; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: 2px;\n color: rgb(0,0,0);\n display: block;\n position: relative;\n height: 36px;\n min-width: 64px;\n padding: 0 8px;\n display: inline-block;\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n overflow: hidden;\n will-change: box-shadow, transform;\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: 36px;\n vertical-align: middle; }\n .mdl-button::-moz-focus-inner {\n border: 0; }\n .mdl-button:hover {\n background-color: rgba(158,158,158, 0.20); }\n .mdl-button:focus:not(:active) {\n background-color: rgba(0,0,0, 0.12); }\n .mdl-button:active {\n background-color: rgba(158,158,158, 0.40); }\n .mdl-button[disabled][disabled] {\n color: rgba(0,0,0, 0.26);\n cursor: auto;\n background-color: transparent; }\n .mdl-button.mdl-button--colored {\n color: rgb(63,81,181); }\n .mdl-button.mdl-button--colored:focus:not(:active) {\n background-color: rgba(0,0,0, 0.12); }\n\n.mdl-button--raised {\n background: rgba(158,158,158, 0.20);\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n .mdl-button--raised:active {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);\n background-color: rgba(158,158,158, 0.40); }\n .mdl-button--raised:focus:not(:active) {\n box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);\n background-color: rgba(158,158,158, 0.40); }\n .mdl-button--raised.mdl-button--colored {\n background: rgb(63,81,181);\n color: rgb(255,255,255); }\n .mdl-button--raised.mdl-button--colored:hover {\n background-color: rgb(63,81,181); }\n .mdl-button--raised.mdl-button--colored:active {\n background-color: rgb(63,81,181); }\n .mdl-button--raised.mdl-button--colored:focus:not(:active) {\n background-color: rgb(63,81,181); }\n .mdl-button--raised.mdl-button--colored .mdl-ripple {\n background: rgb(255,255,255); }\n .mdl-button--raised[disabled][disabled] {\n background-color: rgba(0,0,0, 0.12);\n color: rgba(0,0,0, 0.26);\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n\n.mdl-button--fab {\n border-radius: 50%;\n font-size: 24px;\n height: 56px;\n margin: auto;\n min-width: 56px;\n width: 56px;\n padding: 0;\n overflow: hidden;\n background: rgba(158,158,158, 0.20);\n box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);\n position: relative;\n line-height: normal; }\n .mdl-button--fab .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-12px, -12px);\n line-height: 24px;\n width: 24px; }\n .mdl-button--fab.mdl-button--mini-fab {\n height: 40px;\n min-width: 40px;\n width: 40px; }\n .mdl-button--fab .mdl-button__ripple-container {\n border-radius: 50%;\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }\n .mdl-button--fab:active {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);\n background-color: rgba(158,158,158, 0.40); }\n .mdl-button--fab:focus:not(:active) {\n box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);\n background-color: rgba(158,158,158, 0.40); }\n .mdl-button--fab.mdl-button--colored {\n background: rgb(255,64,129);\n color: rgb(255,255,255); }\n .mdl-button--fab.mdl-button--colored:hover {\n background-color: rgb(255,64,129); }\n .mdl-button--fab.mdl-button--colored:focus:not(:active) {\n background-color: rgb(255,64,129); }\n .mdl-button--fab.mdl-button--colored:active {\n background-color: rgb(255,64,129); }\n .mdl-button--fab.mdl-button--colored .mdl-ripple {\n background: rgb(255,255,255); }\n .mdl-button--fab[disabled][disabled] {\n background-color: rgba(0,0,0, 0.12);\n color: rgba(0,0,0, 0.26);\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n\n.mdl-button--icon {\n border-radius: 50%;\n font-size: 24px;\n height: 32px;\n margin-left: 0;\n margin-right: 0;\n min-width: 32px;\n width: 32px;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal; }\n .mdl-button--icon .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-12px, -12px);\n line-height: 24px;\n width: 24px; }\n .mdl-button--icon.mdl-button--mini-icon {\n height: 24px;\n min-width: 24px;\n width: 24px; }\n .mdl-button--icon.mdl-button--mini-icon .material-icons {\n top: 0px;\n left: 0px; }\n .mdl-button--icon .mdl-button__ripple-container {\n border-radius: 50%;\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }\n\n.mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden; }\n .mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple {\n background-color: transparent; }\n\n.mdl-button--primary.mdl-button--primary {\n color: rgb(63,81,181); }\n .mdl-button--primary.mdl-button--primary .mdl-ripple {\n background: rgb(255,255,255); }\n .mdl-button--primary.mdl-button--primary.mdl-button--raised, .mdl-button--primary.mdl-button--primary.mdl-button--fab {\n color: rgb(255,255,255);\n background-color: rgb(63,81,181); }\n\n.mdl-button--accent.mdl-button--accent {\n color: rgb(255,64,129); }\n .mdl-button--accent.mdl-button--accent .mdl-ripple {\n background: rgb(255,255,255); }\n .mdl-button--accent.mdl-button--accent.mdl-button--raised, .mdl-button--accent.mdl-button--accent.mdl-button--fab {\n color: rgb(255,255,255);\n background-color: rgb(255,64,129); }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: 16px;\n min-height: 200px;\n overflow: hidden;\n width: 330px;\n z-index: 1;\n position: relative;\n background: rgb(255,255,255);\n border-radius: 2px;\n box-sizing: border-box; }\n\n.mdl-card__media {\n background-color: rgb(255,64,129);\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box; }\n\n.mdl-card__title {\n align-items: center;\n color: rgb(0,0,0);\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: 16px 16px;\n perspective-origin: 165px 56px;\n transform-origin: 165px 56px;\n box-sizing: border-box; }\n .mdl-card__title.mdl-card--border {\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: 24px;\n font-weight: 300;\n line-height: normal;\n overflow: hidden;\n transform-origin: 149px 48px;\n margin: 0; }\n\n.mdl-card__subtitle-text {\n font-size: 14px;\n color: grey;\n margin: 0; }\n\n.mdl-card__supporting-text {\n color: rgba(0,0,0, 0.87);\n font-size: 13px;\n line-height: 18px;\n overflow: hidden;\n padding: 16px 16px;\n width: 90%; }\n\n.mdl-card__actions {\n font-size: 16px;\n line-height: normal;\n width: 100%;\n background-color: transparent;\n padding: 8px;\n box-sizing: border-box; }\n .mdl-card__actions.mdl-card--border {\n border-top: 1px solid rgba(0, 0, 0, 0.1); }\n\n.mdl-card--expand {\n flex-grow: 1; }\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-checkbox {\n position: relative;\n z-index: 1;\n vertical-align: middle;\n display: inline-block;\n box-sizing: border-box;\n width: 100%;\n height: 24px;\n margin: 0;\n padding: 0; }\n .mdl-checkbox.is-upgraded {\n padding-left: 24px; }\n\n.mdl-checkbox__input {\n line-height: 24px; }\n .mdl-checkbox.is-upgraded .mdl-checkbox__input {\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n -ms-appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n border: none; }\n\n.mdl-checkbox__box-outline {\n position: absolute;\n top: 3px;\n left: 0;\n display: inline-block;\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n margin: 0;\n cursor: pointer;\n overflow: hidden;\n border: 2px solid rgba(0,0,0, 0.54);\n border-radius: 2px;\n z-index: 2; }\n .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n border: 2px solid rgb(63,81,181); }\n .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n border: 2px solid rgba(0,0,0, 0.26);\n cursor: auto; }\n\n.mdl-checkbox__focus-helper {\n position: absolute;\n top: 3px;\n left: 0;\n display: inline-block;\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background-color: transparent; }\n .mdl-checkbox.is-focused .mdl-checkbox__focus-helper {\n box-shadow: 0 0 0px 8px rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.1); }\n .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n box-shadow: 0 0 0px 8px rgba(63,81,181, 0.26);\n background-color: rgba(63,81,181, 0.26); }\n\n.mdl-checkbox__tick-outline {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n mask: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==\");\n background: transparent;\n transition-duration: 0.28s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-property: background; }\n .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n background: rgb(63,81,181) url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\"); }\n .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n background: rgba(0,0,0, 0.26) url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\"); }\n\n.mdl-checkbox__label {\n position: relative;\n cursor: pointer;\n font-size: 16px;\n line-height: 24px;\n margin: 0; }\n .mdl-checkbox.is-disabled .mdl-checkbox__label {\n color: rgba(0,0,0, 0.26);\n cursor: auto; }\n\n.mdl-checkbox__ripple-container {\n position: absolute;\n z-index: 2;\n top: -6px;\n left: -10px;\n box-sizing: border-box;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n cursor: pointer;\n overflow: hidden;\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }\n .mdl-checkbox__ripple-container .mdl-ripple {\n background: rgb(63,81,181); }\n .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container {\n cursor: auto; }\n .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n background: transparent; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-data-table {\n position: relative;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 13px;\n background-color: rgb(255,255,255); }\n .mdl-data-table thead {\n padding-bottom: 3px; }\n .mdl-data-table thead .mdl-data-table__select {\n margin-top: 0; }\n .mdl-data-table tbody tr {\n position: relative;\n height: 48px;\n transition-duration: 0.28s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-property: background-color; }\n .mdl-data-table tbody tr.is-selected {\n background-color: #e0e0e0; }\n .mdl-data-table tbody tr:hover {\n background-color: #eeeeee; }\n .mdl-data-table td, .mdl-data-table th {\n padding: 0 18px 0 18px;\n text-align: right; }\n .mdl-data-table td:first-of-type, .mdl-data-table th:first-of-type {\n padding-left: 24px; }\n .mdl-data-table td:last-of-type, .mdl-data-table th:last-of-type {\n padding-right: 24px; }\n .mdl-data-table td {\n position: relative;\n vertical-align: top;\n height: 48px;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding-top: 12px;\n box-sizing: border-box; }\n .mdl-data-table td .mdl-data-table__select {\n vertical-align: top;\n position: absolute;\n left: 24px; }\n .mdl-data-table th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n font-size: 14px;\n font-weight: bold;\n line-height: 24px;\n letter-spacing: 0;\n height: 48px;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.54);\n padding-bottom: 8px;\n box-sizing: border-box; }\n .mdl-data-table th .mdl-data-table__select {\n position: relative; }\n\n.mdl-data-table__select {\n width: 16px; }\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-mega-footer {\n padding: 16px 40px;\n color: rgb(158,158,158);\n background-color: rgb(66,66,66); }\n\n.mdl-mega-footer--top-section:after, .mdl-mega-footer--middle-section:after, .mdl-mega-footer--bottom-section:after {\n content: '';\n display: block;\n clear: both; }\n\n.mdl-mega-footer--left-section {\n margin-bottom: 16px; }\n\n.mdl-mega-footer--right-section {\n margin-bottom: 16px; }\n\n.mdl-mega-footer--right-section a {\n display: block;\n margin-bottom: 16px;\n color: inherit;\n text-decoration: none; }\n\n@media screen and (min-width: 760px) {\n .mdl-mega-footer--left-section {\n float: left; }\n .mdl-mega-footer--right-section {\n float: right; }\n .mdl-mega-footer--right-section a {\n display: inline-block;\n margin-left: 16px;\n line-height: 36px;\n vertical-align: middle; } }\n\n.mdl-mega-footer--social-btn {\n width: 36px;\n height: 36px;\n padding: 0;\n margin: 0;\n background-color: rgb(158,158,158);\n border: none; }\n\n.mdl-mega-footer--drop-down-section {\n display: block;\n position: relative; }\n\n@media screen and (min-width: 760px) {\n .mdl-mega-footer--drop-down-section {\n width: 33%; }\n .mdl-mega-footer--drop-down-section:nth-child(1), .mdl-mega-footer--drop-down-section:nth-child(2) {\n float: left; }\n .mdl-mega-footer--drop-down-section:nth-child(3) {\n float: right; }\n .mdl-mega-footer--drop-down-section:nth-child(3):after {\n clear: right; }\n .mdl-mega-footer--drop-down-section:nth-child(4) {\n clear: right;\n float: right; }\n .mdl-mega-footer--middle-section:after {\n content: '';\n display: block;\n clear: both; }\n .mdl-mega-footer--bottom-section {\n padding-top: 0; } }\n\n@media screen and (min-width: 1024px) {\n .mdl-mega-footer--drop-down-section, .mdl-mega-footer--drop-down-section:nth-child(3), .mdl-mega-footer--drop-down-section:nth-child(4) {\n width: 24%;\n float: left; } }\n\n.mdl-mega-footer--heading-checkbox {\n position: absolute;\n width: 100%;\n height: 55.8px;\n padding: 32px;\n margin: 0;\n margin-top: -16px;\n cursor: pointer;\n z-index: 1;\n opacity: 0; }\n .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer--heading:after {\n font-family: 'Material Icons';\n content: '\\E5CE'; }\n\n.mdl-mega-footer--heading-checkbox:checked ~ ul {\n display: none; }\n.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--heading:after {\n font-family: 'Material Icons';\n content: '\\E5CF'; }\n\n.mdl-mega-footer--heading {\n position: relative;\n width: 100%;\n padding-right: 39.8px;\n margin-bottom: 16px;\n box-sizing: border-box;\n font-size: 14px;\n line-height: 23.8px;\n font-weight: 500;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n color: rgb(224,224,224); }\n\n.mdl-mega-footer--heading:after {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n display: block;\n width: 23.8px;\n height: 23.8px;\n background-size: cover; }\n\n.mdl-mega-footer--link-list {\n list-style: none;\n margin: 0;\n padding: 0;\n margin-bottom: 32px; }\n .mdl-mega-footer--link-list:after {\n clear: both;\n display: block;\n content: ''; }\n\n.mdl-mega-footer--link-list li {\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n line-height: 20px; }\n\n.mdl-mega-footer--link-list a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap; }\n\n@media screen and (min-width: 760px) {\n .mdl-mega-footer--heading-checkbox {\n display: none; }\n .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer--heading:after {\n background-image: none; }\n .mdl-mega-footer--heading-checkbox:checked ~ ul {\n display: block; }\n .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--heading:after {\n content: ''; } }\n\n.mdl-mega-footer--bottom-section {\n padding-top: 16px;\n margin-bottom: 16px; }\n\n.mdl-logo {\n margin-bottom: 16px;\n color: white; }\n\n.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li {\n float: left;\n margin-bottom: 0;\n margin-right: 16px; }\n\n@media screen and (min-width: 760px) {\n .mdl-logo {\n float: left;\n margin-bottom: 0;\n margin-right: 16px; } }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n padding: 32px 16px;\n color: rgb(158,158,158);\n background-color: rgb(66,66,66); }\n .mdl-mini-footer:after {\n content: '';\n display: block; }\n .mdl-mini-footer .mdl-logo {\n line-height: 36px; }\n\n.mdl-mini-footer--link-list {\n display: flex;\n flex-flow: row nowrap;\n list-style: none;\n margin: 0;\n padding: 0; }\n .mdl-mini-footer--link-list li {\n margin-bottom: 0;\n margin-right: 16px; }\n @media screen and (min-width: 760px) {\n .mdl-mini-footer--link-list li {\n line-height: 36px; } }\n .mdl-mini-footer--link-list a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap; }\n\n.mdl-mini-footer--left-section {\n display: inline-block;\n order: 0; }\n\n.mdl-mini-footer--right-section {\n display: inline-block;\n order: 1; }\n\n.mdl-mini-footer--social-btn {\n width: 36px;\n height: 36px;\n padding: 0;\n margin: 0;\n background-color: rgb(158,158,158);\n border: none; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-icon-toggle {\n position: relative;\n z-index: 1;\n vertical-align: middle;\n display: inline-block;\n height: 32px;\n margin: 0;\n padding: 0; }\n\n.mdl-icon-toggle__input {\n line-height: 32px; }\n .mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input {\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n -ms-appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n border: none; }\n\n.mdl-icon-toggle__label {\n display: inline-block;\n position: relative;\n cursor: pointer;\n height: 32px;\n width: 32px;\n min-width: 32px;\n color: rgb(97,97,97);\n border-radius: 50%;\n padding: 0;\n margin-left: 0;\n margin-right: 0;\n text-align: center;\n background-color: transparent;\n will-change: background-color;\n transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); }\n .mdl-icon-toggle__label.material-icons {\n line-height: 32px;\n font-size: 24px; }\n .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n color: rgb(63,81,181); }\n .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n color: rgba(0,0,0, 0.26);\n cursor: auto;\n transition: none; }\n .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n background-color: rgba(0,0,0, 0.12); }\n .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n background-color: rgba(63,81,181, 0.26); }\n\n.mdl-icon-toggle__ripple-container {\n position: absolute;\n z-index: 2;\n top: -2px;\n left: -2px;\n box-sizing: border-box;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n cursor: pointer;\n overflow: hidden;\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }\n .mdl-icon-toggle__ripple-container .mdl-ripple {\n background: rgb(97,97,97); }\n .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container {\n cursor: auto; }\n .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n background: transparent; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-menu__container {\n display: block;\n margin: 0;\n padding: 0;\n border: none;\n position: absolute;\n overflow: visible;\n height: 0;\n width: 0;\n z-index: -1; }\n .mdl-menu__container.is-visible {\n z-index: 999; }\n\n.mdl-menu__outline {\n display: block;\n background: rgb(255,255,255);\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 2px;\n position: absolute;\n top: 0;\n left: 0;\n overflow: hidden;\n opacity: 0;\n transform: scale(0);\n transform-origin: 0 0;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n will-change: transform;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n z-index: -1; }\n .mdl-menu__container.is-visible .mdl-menu__outline {\n opacity: 1;\n transform: scale(1);\n z-index: 999; }\n .mdl-menu__outline.mdl-menu--bottom-right {\n transform-origin: 100% 0; }\n .mdl-menu__outline.mdl-menu--top-left {\n transform-origin: 0 100%; }\n .mdl-menu__outline.mdl-menu--top-right {\n transform-origin: 100% 100%; }\n\n.mdl-menu {\n position: absolute;\n list-style: none;\n top: 0;\n left: 0;\n height: auto;\n width: auto;\n min-width: 124px;\n padding: 8px 0;\n margin: 0;\n opacity: 0;\n clip: rect(0 0 0 0);\n z-index: -1; }\n .mdl-menu__container.is-visible .mdl-menu {\n opacity: 1;\n z-index: 999; }\n .mdl-menu.is-animating {\n transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), clip 0.3s cubic-bezier(0.4, 0, 0.2, 1); }\n .mdl-menu.mdl-menu--bottom-right {\n left: auto;\n right: 0; }\n .mdl-menu.mdl-menu--top-left {\n top: auto;\n bottom: 0; }\n .mdl-menu.mdl-menu--top-right {\n top: auto;\n left: auto;\n bottom: 0;\n right: 0; }\n .mdl-menu.mdl-menu--unaligned {\n top: auto;\n left: auto; }\n\n.mdl-menu__item {\n display: block;\n border: none;\n color: rgba(0,0,0, 0.87);\n background-color: transparent;\n text-align: left;\n margin: 0;\n padding: 0 16px;\n outline-color: rgb(189,189,189);\n position: relative;\n overflow: hidden;\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n text-decoration: none;\n cursor: pointer;\n height: 48px;\n width: 100%;\n line-height: 48px;\n white-space: nowrap;\n opacity: 0;\n transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n user-select: none; }\n .mdl-menu__container.is-visible .mdl-menu__item {\n opacity: 1; }\n .mdl-menu__item::-moz-focus-inner {\n border: 0; }\n .mdl-menu__item[disabled] {\n color: rgb(189,189,189);\n background-color: transparent;\n cursor: auto; }\n .mdl-menu__item[disabled]:hover {\n background-color: transparent; }\n .mdl-menu__item[disabled]:focus {\n background-color: transparent; }\n .mdl-menu__item[disabled] .mdl-ripple {\n background: transparent; }\n .mdl-menu__item:hover {\n background-color: rgb(238,238,238); }\n .mdl-menu__item:focus {\n outline: none;\n background-color: rgb(238,238,238); }\n .mdl-menu__item:active {\n background-color: rgb(224,224,224); }\n\n.mdl-menu__item--ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-progress {\n display: block;\n position: relative;\n height: 4px;\n width: 500px; }\n\n.mdl-progress > .bar {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 0%;\n transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1); }\n\n.mdl-progress > .progressbar {\n background-color: rgb(63,81,181);\n z-index: 1;\n left: 0; }\n\n.mdl-progress > .bufferbar {\n background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181));\n z-index: 0;\n left: 0; }\n\n.mdl-progress > .auxbar {\n right: 0; }\n\n@supports (-webkit-appearance: none) {\n .mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate) > .auxbar {\n background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181));\n mask: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo='); } }\n\n.mdl-progress:not(.mdl-progress__indeterminate) > .auxbar {\n background-image: linear-gradient(to right, rgba(255,255,255, 0.9), rgba(255,255,255, 0.9)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); }\n\n.mdl-progress.mdl-progress__indeterminate > .bar1 {\n background-color: rgb(63,81,181);\n animation-name: indeterminate1;\n animation-duration: 2s;\n animation-iteration-count: infinite;\n animation-timing-function: linear; }\n\n.mdl-progress.mdl-progress__indeterminate > .bar3 {\n background-image: none;\n background-color: rgb(63,81,181);\n animation-name: indeterminate2;\n animation-duration: 2s;\n animation-iteration-count: infinite;\n animation-timing-function: linear; }\n\n@keyframes indeterminate1 {\n 0% {\n left: 0%;\n width: 0%; }\n\n 50% {\n left: 25%;\n width: 75%; }\n\n 75% {\n left: 100%;\n width: 0%; } }\n\n@keyframes indeterminate2 {\n 0% {\n left: 0%;\n width: 0%; }\n\n 50% {\n left: 0%;\n width: 0%; }\n\n 75% {\n left: 0%;\n width: 25%; }\n\n 100% {\n left: 100%;\n width: 0%; } }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-navigation {\n display: flex;\n flex-wrap: nowrap;\n box-sizing: border-box; }\n\n.mdl-navigation__link {\n color: rgb(66,66,66);\n text-decoration: none;\n font-weight: 500;\n font-size: 13px;\n margin: 0; }\n\n.mdl-layout {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n position: relative; }\n\n.mdl-layout.is-small-screen .mdl-layout--large-screen-only {\n display: none; }\n\n.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only {\n display: none; }\n\n.mdl-layout__container {\n position: absolute;\n width: 100%;\n height: 100%; }\n\n.mdl-layout-title {\n display: block;\n position: relative;\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n font-weight: 400;\n box-sizing: border-box; }\n\n.mdl-layout-spacer {\n flex-grow: 1; }\n\n.mdl-layout__drawer {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n width: 240px;\n height: 100%;\n max-height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n box-sizing: border-box;\n border-right: 1px solid rgb(224,224,224);\n background: rgb(250,250,250);\n transform: translateX(-250px);\n transform-style: preserve-3d;\n will-change: transform;\n transition-duration: 0.2s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-property: transform;\n color: rgb(66,66,66);\n overflow: visible;\n overflow-y: auto;\n z-index: 5; }\n .mdl-layout__drawer.is-visible {\n transform: translateX(0); }\n .mdl-layout__drawer > * {\n flex-shrink: 0; }\n .mdl-layout__drawer > .mdl-layout-title {\n line-height: 64px;\n padding-left: 40px; }\n @media screen and (max-width: 850px) {\n .mdl-layout__drawer > .mdl-layout-title {\n line-height: 56px;\n padding-left: 16px; } }\n .mdl-layout__drawer .mdl-navigation {\n flex-direction: column;\n align-items: stretch;\n padding-top: 16px; }\n .mdl-layout__drawer .mdl-navigation .mdl-navigation__link {\n display: block;\n flex-shrink: 0;\n padding: 16px 40px;\n margin: 0;\n color: #757575; }\n @media screen and (max-width: 850px) {\n .mdl-layout__drawer .mdl-navigation .mdl-navigation__link {\n padding: 16px 16px; } }\n .mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover {\n background-color: rgb(224,224,224); }\n .mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current {\n background-color: rgb(0,0,0);\n color: rgb(63,81,181); }\n @media screen and (min-width: 851px) {\n .mdl-layout--fixed-drawer > .mdl-layout__drawer {\n transform: translateX(0); } }\n\n.mdl-layout__drawer-button {\n display: block;\n position: absolute;\n height: 48px;\n width: 48px;\n border: 0;\n flex-shrink: 0;\n overflow: hidden;\n text-align: center;\n cursor: pointer;\n font-size: 26px;\n line-height: 50px;\n font-family: Helvetica, Arial, sans-serif;\n margin: 10px 12px;\n top: 0;\n left: 0;\n color: rgb(255,255,255);\n z-index: 4; }\n .mdl-layout__header .mdl-layout__drawer-button {\n position: absolute;\n color: rgb(255,255,255);\n background-color: inherit; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header .mdl-layout__drawer-button {\n margin: 4px; } }\n @media screen and (max-width: 850px) {\n .mdl-layout__drawer-button {\n margin: 4px;\n color: rgba(0, 0, 0, 0.5); } }\n @media screen and (min-width: 851px) {\n .mdl-layout--fixed-drawer > .mdl-layout__drawer-button {\n display: none; } }\n\n.mdl-layout__header {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n min-height: 64px;\n max-height: 1000px;\n z-index: 3;\n background-color: rgb(63,81,181);\n color: rgb(255,255,255);\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n transition-duration: 0.2s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-property: max-height, box-shadow; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header {\n min-height: 56px; } }\n .mdl-layout--fixed-drawer:not(.is-small-screen) > .mdl-layout__header {\n margin-left: 240px;\n width: calc(100% - 240px); }\n .mdl-layout__header > .mdl-layout-icon {\n position: absolute;\n left: 40px;\n top: 16px;\n height: 32px;\n width: 32px;\n overflow: hidden;\n z-index: 3;\n display: block; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header > .mdl-layout-icon {\n left: 16px;\n top: 12px; } }\n .mdl-layout.has-drawer .mdl-layout__header > .mdl-layout-icon {\n display: none; }\n .mdl-layout__header.is-compact {\n max-height: 64px; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header.is-compact {\n max-height: 56px; } }\n .mdl-layout__header.is-compact.has-tabs {\n height: 112px; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header.is-compact.has-tabs {\n min-height: 104px; } }\n @media screen and (max-width: 850px) {\n .mdl-layout__header {\n display: none; }\n .mdl-layout--fixed-header > .mdl-layout__header {\n display: flex; } }\n\n.mdl-layout__header--transparent.mdl-layout__header--transparent {\n background-color: transparent;\n box-shadow: none; }\n\n.mdl-layout__header--seamed {\n box-shadow: none; }\n\n.mdl-layout__header--scroll {\n box-shadow: none; }\n\n.mdl-layout__header--waterfall {\n box-shadow: none;\n overflow: hidden; }\n .mdl-layout__header--waterfall.is-casting-shadow {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n\n.mdl-layout__header-row {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n flex-shrink: 0;\n box-sizing: border-box;\n align-self: stretch;\n align-items: center;\n height: 64px;\n margin: 0;\n padding: 0 40px 0 80px; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header-row {\n height: 56px;\n padding: 0 16px 0 72px; } }\n .mdl-layout__header-row > * {\n flex-shrink: 0; }\n .mdl-layout__header--scroll .mdl-layout__header-row {\n width: 100%; }\n .mdl-layout__header-row .mdl-navigation {\n margin: 0;\n padding: 0;\n height: 64px;\n flex-direction: row;\n align-items: center; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header-row .mdl-navigation {\n height: 56px; } }\n .mdl-layout__header-row .mdl-navigation__link {\n display: block;\n color: rgb(255,255,255);\n line-height: 64px;\n padding: 0 24px; }\n @media screen and (max-width: 850px) {\n .mdl-layout__header-row .mdl-navigation__link {\n line-height: 56px;\n padding: 0 16px; } }\n\n.mdl-layout__obfuscator {\n background-color: transparent;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n z-index: 4;\n visibility: hidden;\n transition-property: background-color;\n transition-duration: 0.2s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }\n .mdl-layout__drawer.is-visible ~ .mdl-layout__obfuscator {\n background-color: rgba(0, 0, 0, 0.5);\n visibility: visible; }\n\n.mdl-layout__content {\n -ms-flex: 0 1 auto;\n display: inline-block;\n overflow-y: auto;\n overflow-x: hidden;\n flex-grow: 1;\n z-index: 1; }\n .mdl-layout--fixed-drawer > .mdl-layout__content {\n margin-left: 240px; }\n .mdl-layout__container.has-scrolling-header .mdl-layout__content {\n overflow: visible; }\n @media screen and (max-width: 850px) {\n .mdl-layout--fixed-drawer > .mdl-layout__content {\n margin-left: 0; }\n .mdl-layout__container.has-scrolling-header .mdl-layout__content {\n overflow-y: auto;\n overflow-x: hidden; } }\n\n.mdl-layout__tab-bar {\n height: 96px;\n margin: 0;\n width: calc(100% -\n 112px);\n padding: 0 0 0 56px;\n display: flex;\n background-color: rgb(63,81,181);\n overflow-y: hidden;\n overflow-x: scroll; }\n .mdl-layout__tab-bar::-webkit-scrollbar {\n display: none; }\n @media screen and (max-width: 850px) {\n .mdl-layout__tab-bar {\n width: calc(100% -\n 60px);\n padding: 0 0 0 60px; } }\n .mdl-layout--fixed-tabs .mdl-layout__tab-bar {\n padding: 0;\n overflow: hidden;\n width: 100%; }\n\n.mdl-layout__tab-bar-container {\n position: relative;\n height: 48px;\n width: 100%;\n border: none;\n margin: 0;\n z-index: 2;\n flex-grow: 0;\n flex-shrink: 0;\n overflow: hidden; }\n .mdl-layout__container > .mdl-layout__tab-bar-container {\n position: absolute;\n top: 0;\n left: 0; }\n\n.mdl-layout__tab-bar-button {\n display: inline-block;\n position: absolute;\n top: 0;\n height: 48px;\n width: 56px;\n z-index: 4;\n text-align: center;\n background-color: rgb(63,81,181);\n color: transparent;\n cursor: pointer;\n user-select: none; }\n @media screen and (max-width: 850px) {\n .mdl-layout__tab-bar-button {\n display: none;\n width: 60px; } }\n .mdl-layout--fixed-tabs .mdl-layout__tab-bar-button {\n display: none; }\n .mdl-layout__tab-bar-button .material-icons {\n line-height: 48px; }\n .mdl-layout__tab-bar-button.is-active {\n color: rgb(255,255,255); }\n\n.mdl-layout__tab-bar-left-button {\n left: 0; }\n\n.mdl-layout__tab-bar-right-button {\n right: 0; }\n\n.mdl-layout__tab {\n margin: 0;\n border: none;\n padding: 0 24px 0 24px;\n float: left;\n position: relative;\n display: block;\n flex-grow: 0;\n flex-shrink: 0;\n text-decoration: none;\n height: 48px;\n line-height: 48px;\n text-align: center;\n font-weight: 500;\n font-size: 14px;\n text-transform: uppercase;\n color: rgba(255,255,255, 0.6);\n overflow: hidden; }\n @media screen and (max-width: 850px) {\n .mdl-layout__tab {\n padding: 0 12px 0 12px; } }\n .mdl-layout--fixed-tabs .mdl-layout__tab {\n float: none;\n flex-grow: 1;\n padding: 0; }\n .mdl-layout.is-upgraded .mdl-layout__tab.is-active {\n color: rgb(255,255,255); }\n .mdl-layout.is-upgraded .mdl-layout__tab.is-active::after {\n height: 2px;\n width: 100%;\n display: block;\n content: \" \";\n bottom: 0;\n left: 0;\n position: absolute;\n background: rgb(255,64,129);\n animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;\n transition: all 1s cubic-bezier(0.4, 0, 1, 1); }\n .mdl-layout__tab .mdl-layout__tab-ripple-container {\n display: block;\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n z-index: 1;\n overflow: hidden; }\n .mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple {\n background-color: rgb(255,255,255); }\n\n.mdl-layout__tab-panel {\n display: block; }\n .mdl-layout.is-upgraded .mdl-layout__tab-panel {\n display: none; }\n .mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active {\n display: block; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-radio {\n position: relative;\n font-size: 16px;\n line-height: 24px;\n display: inline-block;\n box-sizing: border-box;\n margin: 0;\n padding-left: 0; }\n .mdl-radio.is-upgraded {\n padding-left: 24px; }\n\n.mdl-radio__button {\n line-height: 24px; }\n .mdl-radio.is-upgraded .mdl-radio__button {\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n -ms-appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n border: none; }\n\n.mdl-radio__outer-circle {\n position: absolute;\n top: 2px;\n left: 0;\n display: inline-block;\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n margin: 0;\n cursor: pointer;\n border: 2px solid rgba(0,0,0, 0.54);\n border-radius: 50%;\n z-index: 2; }\n .mdl-radio.is-checked .mdl-radio__outer-circle {\n border: 2px solid rgb(63,81,181); }\n .mdl-radio.is-disabled .mdl-radio__outer-circle {\n border: 2px solid rgba(0,0,0, 0.26);\n cursor: auto; }\n\n.mdl-radio__inner-circle {\n position: absolute;\n z-index: 1;\n margin: 0;\n top: 6px;\n left: 4px;\n box-sizing: border-box;\n width: 8px;\n height: 8px;\n cursor: pointer;\n transition-duration: 0.28s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-property: transform;\n transform: scale3d(0, 0, 0);\n border-radius: 50%;\n background: rgb(63,81,181); }\n .mdl-radio.is-checked .mdl-radio__inner-circle {\n transform: scale3d(1, 1, 1); }\n .mdl-radio.is-disabled .mdl-radio__inner-circle {\n background: rgba(0,0,0, 0.26);\n cursor: auto; }\n .mdl-radio.is-focused .mdl-radio__inner-circle {\n box-shadow: 0 0 0px 10px rgba(0, 0, 0, 0.1); }\n\n.mdl-radio__label {\n cursor: pointer; }\n .mdl-radio.is-disabled .mdl-radio__label {\n color: rgba(0,0,0, 0.26);\n cursor: auto; }\n\n.mdl-radio__ripple-container {\n position: absolute;\n z-index: 2;\n top: -9px;\n left: -13px;\n box-sizing: border-box;\n width: 42px;\n height: 42px;\n border-radius: 50%;\n cursor: pointer;\n overflow: hidden;\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }\n .mdl-radio__ripple-container .mdl-ripple {\n background: rgb(63,81,181); }\n .mdl-radio.is-disabled .mdl-radio__ripple-container {\n cursor: auto; }\n .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n background: transparent; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n_:-ms-input-placeholder, :root .mdl-slider.mdl-slider.is-upgraded {\n -ms-appearance: none;\n height: 32px;\n margin: 0; }\n\n.mdl-slider {\n width: calc(100% - 40px);\n margin: 0 20px; }\n .mdl-slider.is-upgraded {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 2px;\n background: transparent;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n outline: 0;\n padding: 0;\n color: rgb(63,81,181);\n align-self: center;\n z-index: 1;\n /**************************** Tracks ****************************/\n /**************************** Thumbs ****************************/\n /**************************** 0-value ****************************/\n /**************************** Disabled ****************************/ }\n .mdl-slider.is-upgraded::-moz-focus-outer {\n border: 0; }\n .mdl-slider.is-upgraded::-ms-tooltip {\n display: none; }\n .mdl-slider.is-upgraded::-webkit-slider-runnable-track {\n background: transparent; }\n .mdl-slider.is-upgraded::-moz-range-track {\n background: transparent;\n border: none; }\n .mdl-slider.is-upgraded::-ms-track {\n background: none;\n color: transparent;\n height: 2px;\n width: 100%;\n border: none; }\n .mdl-slider.is-upgraded::-ms-fill-lower {\n padding: 0;\n background: linear-gradient(to right, transparent, transparent 16px, rgb(63,81,181) 16px, rgb(63,81,181) 0); }\n .mdl-slider.is-upgraded::-ms-fill-upper {\n padding: 0;\n background: linear-gradient(to left, transparent, transparent 16px, rgba(0,0,0, 0.26) 16px, rgba(0,0,0, 0.26) 0); }\n .mdl-slider.is-upgraded::-webkit-slider-thumb {\n -webkit-appearance: none;\n width: 12px;\n height: 12px;\n box-sizing: border-box;\n border-radius: 50%;\n background: rgb(63,81,181);\n border: none;\n transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); }\n .mdl-slider.is-upgraded::-moz-range-thumb {\n -moz-appearance: none;\n width: 12px;\n height: 12px;\n box-sizing: border-box;\n border-radius: 50%;\n background-image: none;\n background: rgb(63,81,181);\n border: none; }\n .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb {\n box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); }\n .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb {\n box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); }\n .mdl-slider.is-upgraded:active::-webkit-slider-thumb {\n background-image: none;\n background: rgb(63,81,181);\n transform: scale(1.5); }\n .mdl-slider.is-upgraded:active::-moz-range-thumb {\n background-image: none;\n background: rgb(63,81,181);\n transform: scale(1.5); }\n .mdl-slider.is-upgraded::-ms-thumb {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 50%;\n background: rgb(63,81,181);\n transform: scale(0.375);\n transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); }\n .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb {\n background: radial-gradient(circle closest-side, rgb(63,81,181) 0%, rgb(63,81,181) 37.5%, rgba(63,81,181, 0.26) 37.5%, rgba(63,81,181, 0.26) 100%);\n transform: scale(1); }\n .mdl-slider.is-upgraded:active::-ms-thumb {\n background: rgb(63,81,181);\n transform: scale(0.5625); }\n .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb {\n border: 2px solid rgba(0,0,0, 0.26);\n background: transparent; }\n .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb {\n border: 2px solid rgba(0,0,0, 0.26);\n background: transparent; }\n .mdl-slider.is-upgraded.is-lowest-value ~ .mdl-slider__background-flex > .mdl-slider__background-upper {\n left: 6px; }\n .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n border: 1.8px solid rgba(0,0,0, 0.26);\n transform: scale(1.33);\n box-shadow: none; }\n .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n border: 1.8px solid rgba(0,0,0, 0.26);\n transform: scale(1.33);\n box-shadow: none; }\n .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active) ~ .mdl-slider__background-flex > .mdl-slider__background-upper {\n left: 8px; }\n .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb {\n border: 1.5px solid rgba(0,0,0, 0.26);\n transform: scale(1.5); }\n .mdl-slider.is-upgraded.is-lowest-value:active ~ .mdl-slider__background-flex > .mdl-slider__background-upper {\n left: 9px; }\n .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb {\n border: 1.5px solid rgba(0,0,0, 0.26);\n transform: scale(1.5); }\n .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb {\n background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(0,0,0, 0.26) 66.67%, rgba(0,0,0, 0.26) 100%); }\n .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb {\n transform: scale(0.5);\n background: radial-gradient(circle closest-side, transparent 0%, transparent 75%, rgba(0,0,0, 0.26) 75%, rgba(0,0,0, 0.26) 100%); }\n .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb {\n transform: scale(0.5625);\n background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(0,0,0, 0.26) 77.78%, rgba(0,0,0, 0.26) 100%); }\n .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower {\n background: transparent; }\n .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper {\n margin-left: 6px; }\n .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-fill-upper {\n margin-left: 8px; }\n .mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper {\n margin-left: 9px; }\n .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb, .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb, .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb {\n transform: scale(0.667);\n background: rgba(0,0,0, 0.26); }\n .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb, .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb, .mdl-slider.is-upgraded:disabled::-moz-range-thumb {\n transform: scale(0.667);\n background: rgba(0,0,0, 0.26); }\n .mdl-slider.is-upgraded:disabled ~ .mdl-slider__background-flex > .mdl-slider__background-lower {\n background-color: rgba(0,0,0, 0.26);\n left: -6px; }\n .mdl-slider.is-upgraded:disabled ~ .mdl-slider__background-flex > .mdl-slider__background-upper {\n left: 6px; }\n .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb {\n border: 3px solid rgba(0,0,0, 0.26);\n background: transparent;\n transform: scale(0.667); }\n .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb {\n border: 3px solid rgba(0,0,0, 0.26);\n background: transparent;\n transform: scale(0.667); }\n .mdl-slider.is-upgraded.is-lowest-value:disabled:active ~ .mdl-slider__background-flex > .mdl-slider__background-upper {\n left: 6px; }\n .mdl-slider.is-upgraded:disabled:focus::-ms-thumb, .mdl-slider.is-upgraded:disabled:active::-ms-thumb, .mdl-slider.is-upgraded:disabled::-ms-thumb {\n transform: scale(0.25);\n background: rgba(0,0,0, 0.26); }\n .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb {\n transform: scale(0.25);\n background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(0,0,0, 0.26) 50%, rgba(0,0,0, 0.26) 100%); }\n .mdl-slider.is-upgraded:disabled::-ms-fill-lower {\n margin-right: 6px;\n background: linear-gradient(to right, transparent, transparent 25px, rgba(0,0,0, 0.26) 25px, rgba(0,0,0, 0.26) 0); }\n .mdl-slider.is-upgraded:disabled::-ms-fill-upper {\n margin-left: 6px; }\n .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper {\n margin-left: 6px; }\n\n.mdl-slider__ie-container {\n height: 18px;\n overflow: visible;\n border: none;\n margin: none;\n padding: none; }\n\n.mdl-slider__container {\n height: 18px;\n position: relative;\n background: none;\n display: flex;\n flex-direction: row; }\n\n.mdl-slider__background-flex {\n background: transparent;\n position: absolute;\n height: 2px;\n width: calc(100% - 52px);\n top: 50%;\n left: 0;\n margin: 0 26px;\n display: flex;\n overflow: hidden;\n border: 0;\n padding: 0;\n transform: translate(0, -1px); }\n\n.mdl-slider__background-lower {\n background: rgb(63,81,181);\n flex: 0;\n position: relative;\n border: 0;\n padding: 0; }\n\n.mdl-slider__background-upper {\n background: rgba(0,0,0, 0.26);\n flex: 0;\n position: relative;\n border: 0;\n padding: 0;\n transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1); }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-spinner {\n display: inline-block;\n position: relative;\n width: 28px;\n height: 28px; }\n .mdl-spinner:not(.is-upgraded).is-active:after {\n content: \"Loading...\"; }\n .mdl-spinner.is-upgraded.is-active {\n animation: mdl-spinner__container-rotate 1568.2352941176ms linear infinite; }\n\n@keyframes mdl-spinner__container-rotate {\n to {\n transform: rotate(360deg); } }\n\n.mdl-spinner__layer {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 0; }\n\n.mdl-spinner__layer-1 {\n border-color: rgb(66,165,245); }\n .mdl-spinner--single-color .mdl-spinner__layer-1 {\n border-color: rgb(63,81,181); }\n .mdl-spinner.is-active .mdl-spinner__layer-1 {\n animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }\n\n.mdl-spinner__layer-2 {\n border-color: rgb(244,67,54); }\n .mdl-spinner--single-color .mdl-spinner__layer-2 {\n border-color: rgb(63,81,181); }\n .mdl-spinner.is-active .mdl-spinner__layer-2 {\n animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }\n\n.mdl-spinner__layer-3 {\n border-color: rgb(253,216,53); }\n .mdl-spinner--single-color .mdl-spinner__layer-3 {\n border-color: rgb(63,81,181); }\n .mdl-spinner.is-active .mdl-spinner__layer-3 {\n animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }\n\n.mdl-spinner__layer-4 {\n border-color: rgb(76,175,80); }\n .mdl-spinner--single-color .mdl-spinner__layer-4 {\n border-color: rgb(63,81,181); }\n .mdl-spinner.is-active .mdl-spinner__layer-4 {\n animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }\n\n@keyframes mdl-spinner__fill-unfill-rotate {\n 12.5% {\n transform: rotate(135deg); }\n\n 25% {\n transform: rotate(270deg); }\n\n 37.5% {\n transform: rotate(405deg); }\n\n 50% {\n transform: rotate(540deg); }\n\n 62.5% {\n transform: rotate(675deg); }\n\n 75% {\n transform: rotate(810deg); }\n\n 87.5% {\n transform: rotate(945deg); }\n\n to {\n transform: rotate(1080deg); } }\n\n/**\n* HACK: Even though the intention is to have the current .mdl-spinner__layer-N\n* at `opacity: 1`, we set it to `opacity: 0.99` instead since this forces Chrome\n* to do proper subpixel rendering for the elements being animated. This is\n* especially visible in Chrome 39 on Ubuntu 14.04. See:\n*\n* - https://github.com/Polymer/paper-spinner/issues/9\n* - https://code.google.com/p/chromium/issues/detail?id=436255\n*/\n@keyframes mdl-spinner__layer-1-fade-in-out {\n from {\n opacity: 0.99; }\n\n 25% {\n opacity: 0.99; }\n\n 26% {\n opacity: 0; }\n\n 89% {\n opacity: 0; }\n\n 90% {\n opacity: 0.99; }\n\n 100% {\n opacity: 0.99; } }\n\n@keyframes mdl-spinner__layer-2-fade-in-out {\n from {\n opacity: 0; }\n\n 15% {\n opacity: 0; }\n\n 25% {\n opacity: 0.99; }\n\n 50% {\n opacity: 0.99; }\n\n 51% {\n opacity: 0; } }\n\n@keyframes mdl-spinner__layer-3-fade-in-out {\n from {\n opacity: 0; }\n\n 40% {\n opacity: 0; }\n\n 50% {\n opacity: 0.99; }\n\n 75% {\n opacity: 0.99; }\n\n 76% {\n opacity: 0; } }\n\n@keyframes mdl-spinner__layer-4-fade-in-out {\n from {\n opacity: 0; }\n\n 65% {\n opacity: 0; }\n\n 75% {\n opacity: 0.99; }\n\n 90% {\n opacity: 0.99; }\n\n 100% {\n opacity: 0; } }\n\n/**\n* Patch the gap that appear between the two adjacent\n* div.mdl-spinner__circle-clipper while the spinner is rotating\n* (appears on Chrome 38, Safari 7.1, and IE 11).\n*\n* Update: the gap no longer appears on Chrome when .mdl-spinner__layer-N's\n* opacity is 0.99, but still does on Safari and IE.\n*/\n.mdl-spinner__gap-patch {\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 45%;\n width: 10%;\n height: 100%;\n overflow: hidden;\n border-color: inherit; }\n .mdl-spinner__gap-patch .mdl-spinner__circle {\n width: 1000%;\n left: -450%; }\n\n.mdl-spinner__circle-clipper {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n border-color: inherit; }\n .mdl-spinner__circle-clipper .mdl-spinner__circle {\n width: 200%; }\n\n.mdl-spinner__circle {\n box-sizing: border-box;\n height: 100%;\n border-width: 3px;\n border-style: solid;\n border-color: inherit;\n border-bottom-color: transparent !important;\n border-radius: 50%;\n animation: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0; }\n .mdl-spinner__left .mdl-spinner__circle {\n border-right-color: transparent !important;\n transform: rotate(129deg); }\n .mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle {\n animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }\n .mdl-spinner__right .mdl-spinner__circle {\n left: -100%;\n border-left-color: transparent !important;\n transform: rotate(-129deg); }\n .mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle {\n animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }\n\n@keyframes mdl-spinner__left-spin {\n from {\n transform: rotate(130deg); }\n\n 50% {\n transform: rotate(-5deg); }\n\n to {\n transform: rotate(130deg); } }\n\n@keyframes mdl-spinner__right-spin {\n from {\n transform: rotate(-130deg); }\n\n 50% {\n transform: rotate(5deg); }\n\n to {\n transform: rotate(-130deg); } }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-switch {\n position: relative;\n z-index: 1;\n vertical-align: middle;\n display: inline-block;\n box-sizing: border-box;\n width: 100%;\n height: 24px;\n margin: 0;\n padding: 0;\n overflow: visible;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .mdl-switch.is-upgraded {\n padding-left: 28px; }\n\n.mdl-switch__input {\n line-height: 24px; }\n .mdl-switch.is-upgraded .mdl-switch__input {\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n -ms-appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n border: none; }\n\n.mdl-switch__track {\n background: rgba(0,0,0, 0.26);\n position: absolute;\n left: 0;\n top: 5px;\n height: 14px;\n width: 36px;\n border-radius: 14px;\n cursor: pointer; }\n .mdl-switch.is-checked .mdl-switch__track {\n background: rgba(63,81,181, 0.5); }\n .mdl-switch.is-disabled .mdl-switch__track {\n background: rgba(0,0,0, 0.12);\n cursor: auto; }\n\n.mdl-switch__thumb {\n background: rgb(250,250,250);\n position: absolute;\n left: 0;\n top: 2px;\n height: 20px;\n width: 20px;\n border-radius: 50%;\n cursor: pointer;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n transition-duration: 0.28s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-property: left; }\n .mdl-switch.is-checked .mdl-switch__thumb {\n background: rgb(63,81,181);\n left: 16px;\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); }\n .mdl-switch.is-disabled .mdl-switch__thumb {\n background: rgb(189,189,189);\n cursor: auto; }\n\n.mdl-switch__focus-helper {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-4px, -4px);\n display: inline-block;\n box-sizing: border-box;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: transparent; }\n .mdl-switch.is-focused .mdl-switch__focus-helper {\n box-shadow: 0 0 0px 20px rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.1); }\n .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n box-shadow: 0 0 0px 20px rgba(63,81,181, 0.26);\n background-color: rgba(63,81,181, 0.26); }\n\n.mdl-switch__label {\n position: relative;\n cursor: pointer;\n font-size: 16px;\n line-height: 24px;\n margin: 0;\n left: 24px; }\n .mdl-switch.is-disabled .mdl-switch__label {\n color: rgb(189,189,189);\n cursor: auto; }\n\n.mdl-switch__ripple-container {\n position: absolute;\n z-index: 2;\n top: -12px;\n left: -14px;\n box-sizing: border-box;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n cursor: pointer;\n overflow: hidden;\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n transition-duration: 0.4s;\n transition-timing-function: step-end;\n transition-property: left; }\n .mdl-switch__ripple-container .mdl-ripple {\n background: rgb(63,81,181); }\n .mdl-switch.is-disabled .mdl-switch__ripple-container {\n cursor: auto; }\n .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n background: transparent; }\n .mdl-switch.is-checked .mdl-switch__ripple-container {\n cursor: auto;\n left: 2px; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-tabs {\n display: block;\n width: 100%; }\n\n.mdl-tabs__tab-bar {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-content: space-between;\n align-items: flex-start;\n height: 48px;\n padding: 0 0 0 0;\n margin: 0;\n border-bottom: 1px solid rgb(224,224,224); }\n\n.mdl-tabs__tab {\n margin: 0;\n border: none;\n padding: 0 24px 0 24px;\n float: left;\n position: relative;\n display: block;\n color: red;\n text-decoration: none;\n height: 48px;\n line-height: 48px;\n text-align: center;\n font-weight: 500;\n font-size: 14px;\n text-transform: uppercase;\n color: rgba(0,0,0, 0.54);\n overflow: hidden; }\n .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active {\n color: rgba(0,0,0, 0.87); }\n .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after {\n height: 2px;\n width: 100%;\n display: block;\n content: \" \";\n bottom: 0px;\n left: 0px;\n position: absolute;\n background: rgb(63,81,181);\n animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;\n transition: all 1s cubic-bezier(0.4, 0, 1, 1); }\n .mdl-tabs__tab .mdl-tabs__ripple-container {\n display: block;\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0px;\n top: 0px;\n z-index: 1;\n overflow: hidden; }\n .mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple {\n background: rgb(63,81,181); }\n\n.mdl-tabs__panel {\n display: block; }\n .mdl-tabs.is-upgraded .mdl-tabs__panel {\n display: none; }\n .mdl-tabs.is-upgraded .mdl-tabs__panel.is-active {\n display: block; }\n\n@keyframes border-expand {\n 0% {\n opacity: 0;\n width: 0; }\n\n 100% {\n opacity: 1;\n width: 100%; } }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Typography */\n/* Shadows */\n/* Animations */\n.mdl-textfield {\n position: relative;\n font-size: 16px;\n display: inline-block;\n box-sizing: border-box;\n width: 300px;\n margin: 0;\n padding: 20px 0; }\n .mdl-textfield .mdl-button {\n position: absolute;\n bottom: 20px; }\n\n.mdl-textfield--align-right {\n text-align: right; }\n\n.mdl-textfield--full-width {\n width: 100%; }\n\n.mdl-textfield--expandable {\n min-width: 32px;\n width: auto;\n min-height: 32px; }\n\n.mdl-textfield__input {\n border: none;\n border-bottom: 1px solid rgba(0,0,0, 0.12);\n display: block;\n font-size: 16px;\n margin: 0;\n padding: 4px 0;\n width: 100%;\n background: 16px;\n text-align: left;\n color: inherit; }\n .mdl-textfield.is-focused .mdl-textfield__input {\n outline: none; }\n .mdl-textfield.is-invalid .mdl-textfield__input {\n border-color: rgb(222, 50, 38);\n box-shadow: none; }\n .mdl-textfield.is-disabled .mdl-textfield__input {\n background-color: transparent;\n border-bottom: 1px dotted rgba(0,0,0, 0.12); }\n\n.mdl-textfield__label {\n bottom: 0;\n color: rgba(0,0,0, 0.26);\n font-size: 16px;\n left: 0;\n right: 0;\n pointer-events: none;\n position: absolute;\n top: 24px;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-align: left; }\n .mdl-textfield.is-dirty .mdl-textfield__label {\n visibility: hidden; }\n .mdl-textfield--floating-label .mdl-textfield__label {\n transition-duration: 0.2s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }\n .mdl-textfield--floating-label.is-focused .mdl-textfield__label, .mdl-textfield--floating-label.is-dirty .mdl-textfield__label {\n color: rgb(63,81,181);\n font-size: 12px;\n top: 4px;\n visibility: visible; }\n .mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label, .mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label {\n top: -16px; }\n .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n color: rgb(222, 50, 38);\n font-size: 12px; }\n .mdl-textfield__label:after {\n background-color: rgb(63,81,181);\n bottom: 20px;\n content: '';\n height: 2px;\n left: 45%;\n position: absolute;\n transition-duration: 0.2s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n visibility: hidden;\n width: 10px; }\n .mdl-textfield.is-focused .mdl-textfield__label:after {\n left: 0;\n visibility: visible;\n width: 100%; }\n .mdl-textfield.is-invalid .mdl-textfield__label:after {\n background-color: rgb(222, 50, 38); }\n\n.mdl-textfield__error {\n color: rgb(222, 50, 38);\n position: absolute;\n font-size: 12px;\n margin-top: 3px;\n visibility: hidden; }\n .mdl-textfield.is-invalid .mdl-textfield__error {\n visibility: visible; }\n\n.mdl-textfield__expandable-holder {\n display: inline-block;\n position: relative;\n margin-left: 32px;\n transition-duration: 0.2s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-block;\n max-width: 0.1px; }\n .mdl-textfield.is-focused .mdl-textfield__expandable-holder, .mdl-textfield.is-dirty .mdl-textfield__expandable-holder {\n max-width: 600px; }\n .mdl-textfield__expandable-holder .mdl-textfield__label:after {\n bottom: 0; }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-tooltip {\n transform: scale(0);\n transform-origin: top center;\n will-change: transform;\n z-index: 999;\n background: rgba(97,97,97, 0.9);\n border-radius: 2px;\n color: rgb(255,255,255);\n display: inline-block;\n font-size: 10px;\n font-weight: 500;\n line-height: 14px;\n max-width: 170px;\n position: fixed;\n top: -500px;\n left: -500px;\n padding: 8px;\n text-align: center; }\n\n.mdl-tooltip.is-active {\n animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards; }\n\n.mdl-tooltip--large {\n line-height: 14px;\n font-size: 14px;\n padding: 16px; }\n\n@keyframes pulse {\n 0% {\n transform: scale(0);\n opacity: 0; }\n\n 50% {\n transform: scale(0.99); }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n visibility: visible; } }\n\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n */\n/* ========== TYPOGRAPHY ========== */\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n/* ========== COLORS ========== */\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* ========== Color Palettes ========== */\n/* colors.scss */\n/* ========== Color & Themes ========== */\n/* ========== Typography ========== */\n/* ========== Components ========== */\n/* ========== Standard Buttons ========== */\n/* ========== Icon Toggles ========== */\n/* ========== Radio Buttons ========== */\n/* ========== Ripple effect ========== */\n/* ========== Layout ========== */\n/* ========== Content Tabs ========== */\n/* ========== Checkboxes ========== */\n/* ========== Switches ========== */\n/* ========== Spinner ========== */\n/* ========== Text fields ========== */\n/* ========== Card ========== */\n/* ========== Sliders ========== */\n/* ========== Progress ========== */\n/* ========== List ========== */\n/* ========== Item ========== */\n/* ========== Dropdown menu ========== */\n/* ========== Tooltips ========== */\n/* ========== Footer ========== */\n/* TEXTFIELD */\n/* SWITCH */\n/* SPINNER */\n/* RADIO */\n/* MENU */\n/* LIST */\n/* ICONS */\n/* ICON TOGGLE */\n/* FOOTER */\n/*mega-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/*mini-footer*/\n/**************\n *\n * Sizes\n *\n *************/\n/* COLUMN LAYOUT */\n/* CHECKBOX */\n/* CARD */\n/* Card dimensions */\n/* Cover image */\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n/* ANIMATION */\n/* PROGRESS */\n/* BADGE */\n/* SHADOWS */\n/* GRID */\n/* DATA TABLE */\n.mdl-grid {\n display: flex;\n flex-flow: row wrap;\n margin: 0 auto 0 auto;\n align-items: stretch; }\n .mdl-grid.mdl-grid--no-spacing {\n padding: 0; }\n\n.mdl-cell {\n box-sizing: border-box; }\n\n.mdl-cell--top {\n align-self: flex-start; }\n\n.mdl-cell--middle {\n align-self: center; }\n\n.mdl-cell--bottom {\n align-self: flex-end; }\n\n.mdl-cell--stretch {\n align-self: stretch; }\n\n.mdl-grid.mdl-grid--no-spacing > .mdl-cell {\n margin: 0; }\n\n@media (max-width: 479px) {\n .mdl-grid {\n padding: 8px; }\n .mdl-cell {\n margin: 8px;\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell {\n width: 100%; }\n .mdl-cell--hide-phone {\n display: none !important; }\n .mdl-cell--1-col {\n width: calc(25% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--1-col {\n width: 25%; }\n .mdl-cell--1-col-phone.mdl-cell--1-col-phone {\n width: calc(25% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--1-col-phone.mdl-cell--1-col-phone {\n width: 25%; }\n .mdl-cell--2-col {\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--2-col {\n width: 50%; }\n .mdl-cell--2-col-phone.mdl-cell--2-col-phone {\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--2-col-phone.mdl-cell--2-col-phone {\n width: 50%; }\n .mdl-cell--3-col {\n width: calc(75% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--3-col {\n width: 75%; }\n .mdl-cell--3-col-phone.mdl-cell--3-col-phone {\n width: calc(75% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--3-col-phone.mdl-cell--3-col-phone {\n width: 75%; }\n .mdl-cell--4-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--4-col {\n width: 100%; }\n .mdl-cell--4-col-phone.mdl-cell--4-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--4-col-phone.mdl-cell--4-col-phone {\n width: 100%; }\n .mdl-cell--5-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--5-col {\n width: 100%; }\n .mdl-cell--5-col-phone.mdl-cell--5-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--5-col-phone.mdl-cell--5-col-phone {\n width: 100%; }\n .mdl-cell--6-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--6-col {\n width: 100%; }\n .mdl-cell--6-col-phone.mdl-cell--6-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--6-col-phone.mdl-cell--6-col-phone {\n width: 100%; }\n .mdl-cell--7-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--7-col {\n width: 100%; }\n .mdl-cell--7-col-phone.mdl-cell--7-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--7-col-phone.mdl-cell--7-col-phone {\n width: 100%; }\n .mdl-cell--8-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--8-col {\n width: 100%; }\n .mdl-cell--8-col-phone.mdl-cell--8-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--8-col-phone.mdl-cell--8-col-phone {\n width: 100%; }\n .mdl-cell--9-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--9-col {\n width: 100%; }\n .mdl-cell--9-col-phone.mdl-cell--9-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--9-col-phone.mdl-cell--9-col-phone {\n width: 100%; }\n .mdl-cell--10-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--10-col {\n width: 100%; }\n .mdl-cell--10-col-phone.mdl-cell--10-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--10-col-phone.mdl-cell--10-col-phone {\n width: 100%; }\n .mdl-cell--11-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--11-col {\n width: 100%; }\n .mdl-cell--11-col-phone.mdl-cell--11-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--11-col-phone.mdl-cell--11-col-phone {\n width: 100%; }\n .mdl-cell--12-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--12-col {\n width: 100%; }\n .mdl-cell--12-col-phone.mdl-cell--12-col-phone {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--12-col-phone.mdl-cell--12-col-phone {\n width: 100%; } }\n\n@media (min-width: 480px) and (max-width: 839px) {\n .mdl-grid {\n padding: 8px; }\n .mdl-cell {\n margin: 8px;\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell {\n width: 50%; }\n .mdl-cell--hide-tablet {\n display: none !important; }\n .mdl-cell--1-col {\n width: calc(12.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--1-col {\n width: 12.5%; }\n .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet {\n width: calc(12.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet {\n width: 12.5%; }\n .mdl-cell--2-col {\n width: calc(25% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--2-col {\n width: 25%; }\n .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet {\n width: calc(25% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet {\n width: 25%; }\n .mdl-cell--3-col {\n width: calc(37.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--3-col {\n width: 37.5%; }\n .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet {\n width: calc(37.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet {\n width: 37.5%; }\n .mdl-cell--4-col {\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--4-col {\n width: 50%; }\n .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet {\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet {\n width: 50%; }\n .mdl-cell--5-col {\n width: calc(62.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--5-col {\n width: 62.5%; }\n .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet {\n width: calc(62.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet {\n width: 62.5%; }\n .mdl-cell--6-col {\n width: calc(75% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--6-col {\n width: 75%; }\n .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet {\n width: calc(75% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet {\n width: 75%; }\n .mdl-cell--7-col {\n width: calc(87.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--7-col {\n width: 87.5%; }\n .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet {\n width: calc(87.5% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet {\n width: 87.5%; }\n .mdl-cell--8-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--8-col {\n width: 100%; }\n .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet {\n width: 100%; }\n .mdl-cell--9-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--9-col {\n width: 100%; }\n .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet {\n width: 100%; }\n .mdl-cell--10-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--10-col {\n width: 100%; }\n .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet {\n width: 100%; }\n .mdl-cell--11-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--11-col {\n width: 100%; }\n .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet {\n width: 100%; }\n .mdl-cell--12-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--12-col {\n width: 100%; }\n .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet {\n width: 100%; } }\n\n@media (min-width: 840px) {\n .mdl-grid {\n padding: 8px; }\n .mdl-cell {\n margin: 8px;\n width: calc(33.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell {\n width: 33.33333%; }\n .mdl-cell--hide-desktop {\n display: none !important; }\n .mdl-cell--1-col {\n width: calc(8.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--1-col {\n width: 8.33333%; }\n .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop {\n width: calc(8.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop {\n width: 8.33333%; }\n .mdl-cell--2-col {\n width: calc(16.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--2-col {\n width: 16.66667%; }\n .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop {\n width: calc(16.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop {\n width: 16.66667%; }\n .mdl-cell--3-col {\n width: calc(25% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--3-col {\n width: 25%; }\n .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop {\n width: calc(25% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop {\n width: 25%; }\n .mdl-cell--4-col {\n width: calc(33.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--4-col {\n width: 33.33333%; }\n .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop {\n width: calc(33.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop {\n width: 33.33333%; }\n .mdl-cell--5-col {\n width: calc(41.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--5-col {\n width: 41.66667%; }\n .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop {\n width: calc(41.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop {\n width: 41.66667%; }\n .mdl-cell--6-col {\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--6-col {\n width: 50%; }\n .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop {\n width: calc(50% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop {\n width: 50%; }\n .mdl-cell--7-col {\n width: calc(58.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--7-col {\n width: 58.33333%; }\n .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop {\n width: calc(58.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop {\n width: 58.33333%; }\n .mdl-cell--8-col {\n width: calc(66.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--8-col {\n width: 66.66667%; }\n .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop {\n width: calc(66.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop {\n width: 66.66667%; }\n .mdl-cell--9-col {\n width: calc(75% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--9-col {\n width: 75%; }\n .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop {\n width: calc(75% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop {\n width: 75%; }\n .mdl-cell--10-col {\n width: calc(83.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--10-col {\n width: 83.33333%; }\n .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop {\n width: calc(83.33333% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop {\n width: 83.33333%; }\n .mdl-cell--11-col {\n width: calc(91.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--11-col {\n width: 91.66667%; }\n .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop {\n width: calc(91.66667% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop {\n width: 91.66667%; }\n .mdl-cell--12-col {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--12-col {\n width: 100%; }\n .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop {\n width: calc(100% - 16px); }\n .mdl-grid--no-spacing > .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop {\n width: 100%; } }\n\nbody {\n margin: 0px; }\n\n.styleguide-demo h1 {\n margin: 48px 24px 0 24px; }\n\n.styleguide-demo h1:after {\n content: '';\n display: block;\n width: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.5);\n margin-top: 24px; }\n\n.styleguide-demo {\n opacity: 0;\n transition: opacity 0.6s ease; }\n\n.styleguide-masthead {\n height: 256px;\n background: rgb(33,33,33);\n padding: 115px 16px 0; }\n\n.styleguide-container {\n position: relative;\n max-width: 960px;\n width: 100%; }\n\n.styleguide-title {\n color: #fff;\n bottom: auto;\n position: relative;\n font-size: 56px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.02em; }\n .styleguide-title:after {\n border-bottom: 0px; }\n .styleguide-title span {\n font-weight: 300; }\n\n.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link {\n padding: 10px 24px; }\n\n.demosLoaded .styleguide-demo {\n opacity: 1; }\n\niframe {\n display: block;\n width: 100%;\n border: none; }\n\niframe.heightSet {\n overflow: hidden; }\n\n.demo-wrapper {\n margin: 24px; }\n .demo-wrapper iframe {\n border: 1px solid rgba(0, 0, 0, 0.5); }\n\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"material-design-lite\";\n\n$padding: 24px;\n\nbody {\n margin: 0px;\n}\n\n.styleguide-demo h1 {\n margin: ($padding * 2) $padding 0 $padding;\n}\n\n.styleguide-demo h1:after {\n content: '';\n\n display: block;\n width: 100%;\n\n border-bottom: 1px solid rgba(0,0,0,0.5);\n margin-top: $padding;\n}\n\n.styleguide-demo {\n opacity: 0;\n\n transition: opacity 0.6s ease;\n}\n\n.styleguide-masthead {\n height: 256px;\n background: unquote(\"rgb(#{nth($palette-grey, 10)})\");\n padding: 115px 16px 0;\n}\n\n.styleguide-container {\n position: relative;\n max-width: 960px;\n width: 100%;\n}\n\n.styleguide-title {\n color: #fff;\n bottom: auto;\n position: relative;\n font-size: 56px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.02em;\n\n &:after {\n border-bottom: 0px;\n }\n\n span {\n font-weight: 300;\n }\n}\n\n.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link {\n padding: 10px 24px;\n}\n\n.demosLoaded .styleguide-demo {\n opacity: 1;\n}\n\niframe {\n display: block;\n\n width: 100%;\n\n border: none;\n}\n\niframe.heightSet {\n overflow: hidden;\n}\n\n.demo-wrapper {\n margin: $padding;\n\n iframe {\n border: 1px solid rgba(0,0,0,0.5);\n }\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/inc/themes/material-blue/css/search-grid.css b/inc/themes/material-blue/css/search-grid.css new file mode 100644 index 00000000..82f0d5a0 --- /dev/null +++ b/inc/themes/material-blue/css/search-grid.css @@ -0,0 +1,54 @@ +#content #data-search .account-info img, +#content #data-search .account-actions img {width: 24px; height: 24px;margin: 0 0.5em;} + +#content #data-search {text-align: center; padding: 0.5em 0; width: 100%;margin: 0 auto;} +#content #data-search .account-label{ + width: 100%; + height: 70px; + text-align: left; + margin: 0 auto; + margin-bottom: 0.2em; + padding: 0.5em; + color: #696969; + background-color: #fcfcfc; + display: inline-block; +} +#content #data-search .account-label .label-field{float: left; width: 18%; height: 3em;} +#content #data-search .account-label .field-name{float: left; width: 80px; padding: 0.3em 0.2em; color: #b9b9b9; display: none} +#content #data-search .account-label .field-text{float: left; width: 95%; padding: 0.3em 0.3em; word-wrap: break-word;} +#content #data-search .account-label .header .field-name{color: white; font-weight: bold} + +#content #data-search .account-label .field-text a{color: #4895FA} +#content #data-search .account-label .no-link, +#content #data-search .account-label .no-link a{color: white; font-weight: bold;} + +#content #data-search .account-label .field-customer .field-text{height: 2.5em; width: 95%;} +#content #data-search .account-label .field-category{width: 10% !important;} + +#content #data-search .account-info{ + float: left; + clear: left; + width: 20%; + /*height: 2em;*/ + padding: 0.5em 0; + text-align: left; + /*border-top: 1px solid #d9d9d9;*/ + border: none; +} + +#content #data-search .account-actions{ + float: right; + position: relative; + top: -3em; + width: auto; + max-width: 18%; + height: auto; + padding: 0.5em; + text-align: right; + /*border-top: 1px solid #c9c9c9;*/ + background-color: transparent; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.075) inset; +} +#content #data-search .account-actions img{margin:3px 5px;} +#content .actions-optional{display: none;} +#content #data-search .account-spacer{float: left; clear: left; height: 2em; width: 20%} \ No newline at end of file diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css new file mode 100644 index 00000000..da7a1689 --- /dev/null +++ b/inc/themes/material-blue/css/styles.css @@ -0,0 +1,1789 @@ +* { + font-family: Roboto-Regular, Verdana, Tahoma, sans-serif; +} + +html, body { + margin: 0; + padding: 0; + text-align: left; + background-color: #f5f5f5; + color: #555; + font-size: 12px; + font-weight: normal; +} + +table { + font-size: 11px; + border-spacing: 0; +} + +#tblTools, #tblAccion { + border: none; + border: 1px solid #d9d9d9; + background-color: #f9f9f9; + vertical-align: middle; +} + +table th { + border-bottom: 2px solid transparent; + vertical-align: middle; +} + +table th .icon { + width: 24px; + height: 24px; +} + +table tr.odd { + background-color: #f9f9f9; +} + +table tr.even > td, table tr.odd > td { + border-bottom: 1px solid #d9d9d9 !important; +} + +table tr.even:hover { + background-color: #E8FF99; +} + +table tr.odd:hover { + background-color: #E8FF99; +} + +table tr { + height: 20px; +} + +table td { + padding: 3px; +} + +table td.txtCliente { + font-weight: bold; + text-align: center; +} + +form { + font-size: 11px; + border: 0px solid #5dd; + margin: 0; +} + +input.inputImg, img.inputImg { + background-color: transparent !important; + width: 24px !important; + height: 24px !important; + border: none; + vertical-align: middle; + margin: 0 0.5em; +} + +input.txtFile { + width: 200px; +} + +input.txtLong { + width: 300px; +} + +textarea { + width: 350px; + resize: none; +} + +select.files { + width: 250px; +} + +input#rpp { + width: 40px; +} + +img { + margin: 0; + padding: 0; + border: 0; + cursor: pointer; +} + +img.inputImgMini { + background-color: transparent !important; + width: 16px !important; + height: 16px !important; + margin: 0 5px 0 5px; + border: none; + vertical-align: middle; +} + +i { + cursor: pointer; +} + +.altTable { + border: 0px; + font-size: 10px; +} + +.altTable .section { + font-size: 14px; + font-weight: bold; +} + +.altTxtError { + color: #CC0000; + font-weight: bold; +} + +.altTxtOk { + color: green; + font-weight: bold; +} + +.altTxtWarn { + color: orange; + font-weight: bold; +} + +.altTxtGreen { + color: green; +} + +.altTxtRed { + color: darkred; +} + +.altTxtBlue { + color: #333399; + font-weight: bold; +} + +a, a:visited { + text-decoration: none; + color: rgba(83, 109, 254, 1); +} + +a:hover, a:active, a:focus { + text-decoration: none; + color: rgba(83, 109, 254, .6); + cursor: pointer; +} + +#nojs { + width: 80%; + margin: auto; + text-align: center; + vertical-align: middle; + margin-bottom: 10px; + margin-top: 10px; + padding: 3px; + background-color: red; + color: white; + font-weight: bold; + font-size: 14px; +} + +#wrap { + height: auto !important; /* ie6 ignores !important, so this will be overridden below */ + min-height: 100%; /* ie6 ignores min-height completely */ + min-width: 1024px; + height: 100%; + width: 100%; + background-color: #f5f5f5; +} + +#wrap-loading { + position: fixed; + z-index: 1000; + top: 50%; + left: 50%; + padding: 1em; + background-color: rgba(255, 255, 255, .8); + border-radius: 5px; + display: none; +} + +#container { + margin: auto; + width: 100%; +} + +#container.login { + padding-top: 10em; +} + +#container.main { + position: absolute; + top: 0; + width: 100%; + height: auto; + min-height: 650px; + background: url("../imgs/logo_full.svg") no-repeat left top transparent; + background-size: auto 200px; +} + +#container.error, #container.install, #container.passreset { + width: 100%; +} + +#container #header { + width: 100%; + margin-bottom: 15px; +} + +#container #session { + width: 35%; + margin: 0px auto; + height: 25px; + background: url("../imgs/bg_session.png") repeat-x scroll left top #e9e9e9; + color: #999; + font-size: 10px; + text-align: right; +} + +#container #session img { + width: 24px; + height: 24px; + margin-left: 10px; + margin-right: 10px; + vertical-align: middle; +} + +#container #session .imgLang { + width: 28px; + height: auto; + filter: alpha(opacity=40); + -moz-opacity: 0.4; + opacity: 0.4; +} + +#container #actionsBar { + position: absolute; + top: 0; + z-index: 100; + width: 100%; + text-align: center; + padding: .5em 0; +} + +#container #actionsBar #actionsBar-logo img { + display: none; + position: absolute; + top: .5em; + left: 1em; + width: 50px; +} + +#container #content { + width: 95%; + min-height: 500px; + margin: 10em auto 5em auto; +} + +#content td.descField, #fancyContainer td.descField { + text-align: right; + padding-right: 20px; + width: 25%; + font-weight: bold; + border-right: 1px solid #d9d9d9; + color: #555; +} + +#content td.valField, #fancyContainer td.valField { + padding-left: 20px; + width: 100%; +} + +#content #searchbox { + position: relative; + left: 10%; + width: 90%; + height: 5em; + padding: 5px; + padding-left: 15px; +} + +#content #tblTools { + height: 5em; + padding: 5px; + padding-left: 15px; +} + +#content #resBuscar { + min-height: 450px; + margin-bottom: 50px; +} + +#content #resBuscar img { + vertical-align: middle; +} + +#content #pageNav { + /*float: left;*/ + /*clear: both;*/ + width: 100%; + margin-top: 15px; + height: 1.5em; + padding: 5px 10px 5px 10px; + vertical-align: middle; + font-size: 11px; + color: #999; + border: 1px solid #d9d9d9; + background-color: #f5f5f5; +} + +#content #pageNav img { + margin-left: 5px; + vertical-align: middle; +} + +#content #pageNav a { + margin-left: 5px; + font-size: 12px; + color: #999; +} + +#content #pageNav .current { + margin-left: 5px; + color: darkorange; +} + +#content #pageNav > div { + float: left; + width: 50%; + height: 1.5em; + line-height: 1.5em +} + +#content #pageNav #pageNavLeft { + text-align: left; +} + +#content #pageNav #pageNavRight { + text-align: right; +} + +#content #title { + width: 50%; + padding: 7px; + margin: auto; + background-color: #d9d9d9; + color: #fff; + font-size: 17px; + letter-spacing: 0.3em; + text-align: center; +} + +#content #title.titleBlue { + background-color: #536dfe; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #536dfe), color-stop(90%, #536dfe)); + background-image: -webkit-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -moz-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -o-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: linear-gradient(#536dfe 20%, #536dfe 90%); + background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; +} + +#content #title.titleNormal { + background-color: rgb(96, 125, 139); + color: #fff; +} + +#content .data { + width: 75%; + padding: 10px; + border: 1px solid #c9c9c9; + margin: auto; + background-color: #f9f9f9; +} + +#content .data #history-icon { + position: relative; + top: 5em; + right: 2em; +} + +#content .data td { + text-align: left; +} + +#content .data td.descField { + text-align: right; + font-size: 12px; + font-weight: bold; + color: #999 +} + +#content .data select { + min-width: 210px; +} + +#content .data #files-wrap { + max-height: 100px; + width: 95%; + overflow-y: auto; + border: 1px solid #DFDFDF; + padding: 0.5em; + margin: 1em 0; +} + +#content .data #files-list { + list-style-type: none; + margin: 0; + padding: 0; +} + +#content .data #files-list li { + background: #f2f2f2; + padding: .5em; + font-size: 1em; + margin-bottom: 5px; +} + +#content .data #files-list li:hover { + background: #fffccd; + color: #000; +} + +#content .data #files-list li div { + display: inline-block; +} + +#content .data #files-list li div.files-item-info { + width: 55%; +} + +#content .data #files-list li div.files-item-info img { + margin: 0 .5em; +} + +#content .data #files-list li div.files-item-actions { + width: 40%; + text-align: right; +} + +#content .data #dropzone { + width: 30em; + padding: 1em; + border: 2px dashed rgb(0, 150, 136); + text-align: center; +} + +#content .data #dropzone img { + vertical-align: middle; +} + +#content .data #fileUpload { + display: none; +} + +#content .data .account-permissions { + float: left; + margin-right: 10px; +} + +#content .data .account-permissions fieldset { + border: 1px solid #c9c9c9; + padding: 1em; +} + +#content .data .account-permissions legend { + font-weight: bold; + color: #999; + padding: 0.2em 0; +} + +#content .data .account-permissions fieldset > span { + font-weight: bold; + color: #999; + padding: 0.2em 0; + display: inline-block; + width: 100px; + text-align: right; +} + +#content .extra-info { + margin-top: 20px; +} + +#content .tblIcon { + background: url("../imgs/clock.png") no-repeat transparent; +} + +#content #tabs .ui-tabs-nav { + position: relative; + left: 12em; + width: 90%; +} + +#content #tabs fieldset { + border: 1px solid #c9c9c9; +} + +#content #tabs #frmConfig label { + float: left; +} + +#content .tblConfig { + margin-bottom: 2em; +} + +#content .tblConfig td.descField { + width: 35%; + font-size: 11px; + font-weight: bold; +} + +#content .tblConfig td.rowHeader { + padding: 5px 0 5px 0; + background-color: #f5f5f5; + text-align: center; + font-weight: bold; + border-top: 15px solid #f9f9f9; + border-bottom: 3px solid #a9c1d7; + letter-spacing: 0.5em; + color: #696969; +} + +#content .tblConfig input.checkbox { + width: 15px; + text-align: left; + padding: 0; +} + +#content .tblConfig .option-disabled { + text-align: center; + background-color: #FFF2D9; + color: orange; + font-weight: bold; +} + +#content #tblAccion { + width: 100%; +} + +#content h2 { + width: 100%; + height: 1.5em; + font-size: 18px; + color: white; + background-color: #a9c1d7; + margin: 0; + padding-top: 0.1em; +} + +#content .section { + margin-top: 2.5em; + border-bottom: 1px solid #d9d9d9; + text-align: left; + font-size: 14px; + font-weight: bold; + color: #045FB4; +} + +#content .row_even > td { + background-color: #f5f5f5; +} + +#content .row_odd > td { + background-color: white; +} + +#content .data-header { + width: 100%; + margin: 0 auto; +} + +#content .data-header ul { + display: table; + list-style: none; + width: 100%; + margin: 0 0 10px 0; + padding: 0; +} + +#content .data-header li { + float: left; + display: block; + padding: 0.5em; + font-weight: bold; + letter-spacing: 0.2em; + /*color: #696969;*/ + color: #fff; +} + +#content .data-header li a { + color: #777; +} + +#content .data-header li img { + float: right; + width: 24px; + height: 24px; + vertical-align: middle; +} + +#content .data-header-minimal { + border-bottom: 1px solid #dfdfdf; +} + +#content .data-header-minimal ul { + margin: 0; +} + +#content .data-header-minimal li { + font-weight: normal; + letter-spacing: normal; +} + +#content .data-header-minimal li a { + color: #b9b9b9; + padding: 0.3em 0.8em; +} + +#content .data-rows ul { + display: table; + list-style: none; + width: 100%; + margin: 0 0 10px 0; + padding: 0; +} + +#content .data-rows li { + float: left; + display: block; + padding: 1.5em 0.5em; + color: #696969; + text-align: center; + background-color: #fcfcfc; + height: 1em; +} + +#content .data-rows li.cell-nodata { + padding: 1em 0; + height: 2em; + text-align: left; +} + +#content .data-rows li.cell-actions { + float: right; + height: 2em; + padding: 1em 0; + text-align: center; + background-color: #fcfcfc; + width: 15em; +} + +#content .data-rows li.cell-actions:hover { + background-color: #FFFEF0 !important; +} + +#content .data-rows li.cell-nodata img, +#content .data-rows li.cell-actions img, +#content #data-search .account-info img, +#content #data-search .account-actions img { + width: 24px; + height: 24px; + margin: 0 0.5em; +} + +#content #data-search { + text-align: center; +} + +#content #data-search .account-label { + width: 310px; + height: 195px; + text-align: left; + margin: 1em; + padding: 0.5em; + color: #696969; + background-color: #fcfcfc; + display: inline-block; +} + +#content #data-search .account-label .label-field { + width: 100%; + height: 2em; +} + +#content #data-search .account-label .field-name { + float: left; + width: 80px; + padding: 0.4em 0.2em; + color: #b9b9b9; +} + +#content #data-search .account-label .field-text { + float: left; + width: 215px; + padding: 0.4em 0.2em; +} + +#content #data-search .account-label .header .field-name { + color: white; + font-weight: bold +} + +#content #data-search .account-label .field-customer .field-name { + display: none +} + +#content #data-search .account-label .field-customer .field-text { + width: 304px; +} + +#content #data-search .account-label .field-url { + height: 2.5em; +} + +#content #data-search .account-label .field-text a { + color: #4895FA +} + +#content #data-search .account-label .no-link, +#content #data-search .account-label .no-link a { + color: white; + font-weight: bold; +} + +#content #data-search .account-info { + width: 100%; + height: 2em; + padding: .5em 0; + text-align: left; + /*border-top: 1px solid #d9d9d9;*/ +} + +#content #data-search .account-actions { + width: 100%; + height: 2.5em; + padding-top: 5px; + text-align: right; + background-color: #f5f5f5; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.075) inset; +} + +#content .actions-optional { + display: none; +} + +#content #data-search .account-spacer { + width: 100%; + height: 7.5em; +} + +#content .rowSpace > .cellBorder { + height: 10px; + border-top: 1px solid #d9d9d9; +} + +#content .rowSpace > .cellBlank { + height: 10px; +} + +#content #resEventLog .data { + width: 100%; +} + +#content #resEventLog thead { + text-align: center +} + +#content #resEventLog tbody { + width: 100%; + height: 500px; + overflow: auto; +} + +#content #resEventLog td { + border-bottom: 1px solid #d9d9d9; +} + +#content #resEventLog .cell { + text-align: center; +} + +#content #resEventLog .cell-description { + width: 60%; +} + +#content #tblTools div.chosen-container { + margin: 0 5px; +} + +#content #tblTools select { + min-width: 180px; +} + +#content #tblTools #toolsLeft { + display: inline-block; + text-align: left; + width: 90%; +} + +#content #tblTools #toolsRight { + display: inline-block; + text-align: right; + width: 8%; +} + +#content #tblTools #toolsRight input { + margin-left: 15px; + text-align: center; +} + +#content #tblTools .custom-combobox { + margin-left: 25px; +} + +#content #tblTools #btnClear { + opacity: 0.35; + filter: alpha(opacity=35); +} + +#content #tblTools #btnClear:hover { + opacity: 1; + filter: alpha(opacity=100); +} + +#content #tblTools #order { + margin-top: 0.5em; + padding: 0.3em; + color: #696969; +} + +#content #tabs > div { + min-height: 475px; +} + +#content #tabs.ui-widget-content { + border: none; + background-color: transparent; +} + +#content #tabs .ui-widget-header { + background: none; + border: none; + border-bottom: 1px solid #c9c9c9; +} + +#content #tabs.ui-widget-content { + background: none !important; +} + +#content #tabs .tabs-spacer { + float: left; + height: 200px; +} + +#content .tabs-bottom .ui-tabs-nav { + clear: left; + padding: 0 .2em .2em .2em; +} + +#content .tabs-bottom .ui-tabs-nav li { + top: auto; + bottom: 0; + margin: 0 .2em 1px 0; + border-top: 0; +} + +#content .tabs-bottom .ui-tabs-nav li.ui-tabs-active { + margin-top: -1px; + padding-top: 1px; +} + +#datos { + float: left; + width: 400px; + text-align: left; + margin-top: 10px; + color: #b9b9b9; +} + +#datos a { + color: orange; + font-weight: bold; + border: none; + padding: 3px; + margin: 5px 0 5px 0; + display: block; + width: 40px; + text-align: center; + background-color: transparent; +} + +#datos img { + border: none; +} + +#resAccion, #resFancyAccion { + height: 20px; + padding: 5px; + margin: 5px; + font-weight: bold; + font-size: 14px; +} + +#resAccion span { + padding: 5px; + border: #A9A9A9 1px solid; +} + +#fancyView { + min-width: 250px; + text-align: center; + padding: 15px; + line-height: 20px; + border: #d9d9d9 1px solid; + font-size: 14px; +} + +#fancyView ul { + list-style: none; +} + +#fancyView.msgError { + margin: 5px; + background-color: #fee8e6; + color: #CC0000; + font-weight: bold; + border: #fed2ce 1px solid; +} + +#fancyView.msgOk { + margin: 5px; + background-color: #ecfde4; + color: green; + font-weight: bold; + border: #dbfdcb 1px solid; +} + +#fancyView.msgWarn { + margin: 5px; + background-color: #FFF2D9; + color: orange; + font-weight: bold; + border: #ffe5b3 1px solid; +} + +#fancyView.msgInfo { + margin: 5px; + background-color: #e9e9e9; + color: orange; + font-weight: bold; + border: #ffe5b3 1px solid; +} + +#fancyView.backGrey { + background-color: #f2f2f2 !important; +} + +#fancyView PRE { + text-align: left; +} + +#fancyView table { + border: none; + width: 100%; + font-size: 14px; + text-align: left; +} + +#fancyView td { + border-bottom: #d9d9d9 1px solid; +} + +#fancyMsg { + min-width: 250px; + height: 150px; + background-color: #f5f5f5; + font-family: Verdana, Arial; + font-size: 16px; + text-align: center; + display: table-cell; + vertical-align: middle; + font-weight: bold; + border: none; + line-height: 20px; + padding: 0 15px; + border-radius: 25px; + -moz-border-radius: 25px; + -webkit-border-radius: 25px; +} + +#fancyMsg table { + border: none; + width: 100%; + font-size: 14px; + text-align: left; +} + +#fancyMsg td { + border-bottom: #d9d9d9 1px solid; +} + +#fancyMsg.msgError { + background: url('../imgs/bg_msg_error.png') white repeat-x; + color: #CC0000; +} + +#fancyMsg.msgOk { + background: url('../imgs/bg_msg_ok.png') white repeat-x; + color: green; +} + +#fancyMsg.msgWarn { + background: url('../imgs/bg_msg_warn.png') white repeat-x; + color: orange; +} + +#fancyMsg.msgInfo { + background: url('../imgs/bg_msg_info.png') white repeat-x; + color: #555; +} + +#fancyView a, #fancyMsg a { + color: #555; +} + +#fancyContainer { + padding: 0 15px 15px 15px; +} + +#fancyContainer h2 { + width: 90%; + font-size: 18px; + color: white; + background-color: rgb(96, 125, 139); + /*background-color: #536dfe;*/ + /*background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #536dfe), color-stop(90%, #536dfe));*/ + /*background-image: -webkit-linear-gradient(#536dfe 20%, #536dfe 90%);*/ + /*background-image: -moz-linear-gradient(#536dfe 20%, #536dfe 90%);*/ + /*background-image: -o-linear-gradient(#536dfe 20%, #536dfe 90%);*/ + /*background-image: linear-gradient(#536dfe 20%, #536dfe 90%);*/ + /*background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%;*/ + margin: 0 0 20px 0; + padding: .5em 0; + line-height: 1em; +} + +#fancyContainer select { + width: 220px; +} + +#fancyContainer.help { + min-height: 100px; + background-color: #f5f5f5; +} + +#fancyContainer.help P { + font-size: 14px; + text-align: justify; + line-height: 2em; +} + +#fancyContainer #resFancyAccion { + display: none +} + +#fancyContainer #resCheck { + display: inline-block; + width: 80%; + height: 4em; + padding: 1em 0; +} + +#debug { + float: left; + text-align: left; +} + +#debuginfo { + width: 100%; + min-height: 10em; + padding: 1em; + background-color: lightgoldenrodyellow; + text-align: left; + line-height: 1.5em; +} + +#debuginfo H3 { + text-align: center; +} + +.fancyNone { + background-color: transparent !important; +} + +.fancydata { + min-width: 400px; + border: none; + text-align: left; +} + +.fancydata .descField { + min-width: 100px; + font-weight: bold; +} + +footer { + position: fixed; + bottom: 0; + z-index: 100; + width: 100%; + height: 1.5em; + margin: 0 auto; + padding: 1em 0; + background-color: #F5F5F5; + color: #b9b9b9; + font-size: 13px; + box-shadow: 0px -8px 6px -6px #c9c9c9; + -webkit-box-shadow: 0px -8px 6px -6px #c9c9c9; + -moz-box-shadow: 0px -8px 6px -6px #c9c9c9; +} + +footer #project { + float: right; + text-align: right; + padding-right: 1em; +} + +footer #updates { + display: inline-block; + padding-left: 20px; + cursor: pointer; +} + +footer #updates div { + display: inline-block; + margin: 0 .5em +} + +footer #status { + float: right; + text-align: right; + color: #b94a48; + padding: 0 1em; +} + +footer #status .status-info{ + padding: .5em; + text-decoration: underline; +} + +footer #session { + float: left; + width: 50em; + text-align: left; + padding: .2em 1em; + color: #999; + font-size: 10px; +} + +footer a, footer a:visited { + color: #b9b9b9; +} + +footer #project a:hover { + color: #a9c1d7; + border-bottom: 1px solid #a9c1d7; +} + +footer #updates a:hover { + color: #a9c1d7; +} + +footer img { + border: none; + width: 16px; + height: 16px; + vertical-align: middle; +} + +/* GENERIC CLASSES */ +.round { + border-radius: 10px !important; + -moz-border-radius: 10px !important; + -webkit-border-radius: 10px !important; +} + +.round5 { + border-radius: 5px !important; + -moz-border-radius: 5px !important; + -webkit-border-radius: 5px !important; +} + +.midround { + border-radius: 0 0 15px 15px !important; + -moz-border-radius: 0 0 15px 15px !important; + -webkit-border-radius: 0 0 15px 15px !important; +} + +.midroundup { + border-radius: 15px 15px 0 0 !important; + -moz-border-radius: 15px 15px 0 0 !important; + -webkit-border-radius: 15px 15px 0 0 !important; +} + +.fullround { + border-radius: 50% !important; + -moz-border-radius: 50% !important; + -webkit-border-radius: 50% !important; +} + +.iconMini { + width: 16px !important; + height: 16px !important; + vertical-align: middle; +} + +#content .error { + width: 350px; + margin: 15px; + padding: 15px; + background-color: #f9f9f9; + color: orange; + border: orange 1px solid; + margin: 0 auto; + text-align: center; + font-size: 16px; + line-height: 1.5em; +} + +.hide { + display: none !important; +} + +.btn-checks { + border: 1px solid #d9d9d9; + padding: 5px; + margin: 5px 0; + width: 30em; +} + +.shadow { + box-shadow: 3px 3px 6px -3px #d9d9d9; + -webkit-box-shadow: 3px 3px 6px -3px #a9a9a9; + -moz-box-shadow: 3px 3px 6px -3px #a9a9a9; +} + +.noRes { + width: 60%; + margin: 15px; + padding: 15px; + background-color: #f9f9f9; + color: #a9a9a9; + border: #c9c9c9 1px solid; + margin: 20px auto; + text-align: center; + font-size: 16px; +} + +.header-blue { + background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; +} + +.header-grey { + background-color: rgb(96, 125, 139); + color: #fff; + height: 30px; + text-align: center; +} + +.no-background { + background: none !important; +} + +.action { + max-width: 75%; + height: 4em; + margin: 0.7em auto; + text-align: right; +} + +.action-in-box { + display: inline-block; + height: 4em; + margin: 0.7em 0; + text-align: right; +} + +.action ul { + list-style: none; + margin: 0; + padding: 0; + padding-right: 2em; +} + +.action-in-box ul { + list-style: none; + margin: 0; + padding: 0; +} + +.action li { + float: right; + width: 2em; + height: 2em; + margin-left: 3em; +} + +.action li img, .action-in-box li img { + padding: 1em; + border: 1px solid #d9d9d9; + border-radius: 3em; + background-color: #f9f9f9 !important; +} + +.fullWidth { + max-width: 100% !important; +} + +.filterOn { + padding: 0.3em 1em; + background-color: #ecfde4;; + color: green ! important; + border: #dbfdcb 1px solid ! important; +} + +.globalOn { + padding: 0.3em 1em; + background-color: #FFF2D9; + color: orange ! important; + border: #ffe5b3 1px solid ! important; +} + +.opacity50 { + filter: alpha(opacity=50); + -moz-opacity: 0.5; + -khtml-opacity: 0.5; + opacity: 0.5; +} + +/* COMBO */ +.custom-combobox { + position: relative; + display: inline-block; +} + +.custom-combobox input { + width: 80%; +} + +.custom-combobox-toggle { + position: absolute; + top: 0; + bottom: 0; + margin-left: -1px; + padding: 0; + /* support: IE7 */ + *height: 1.7em; + *top: 0.1em; +} + +.custom-combobox-input { + margin: 0; + padding: 0.3em; +} + +.ui-tooltip { + background: #FFFFA3; + color: #555; + padding: 10px; + border-radius: 10px; + box-shadow: 0 0 7px #a9a9a9; +} + +.ui-autocomplete, .ui-menu-item { + z-index: 8050; +} + +.fancybox-inner { + overflow: visible !important; +} + +.passLevel { + width: 20px; + height: 20px; + display: inline-block; + position: relative; + top: 2px; +} + +.passLevel.strongest, .passLevel.strongest:hover { + background-color: #ecfde4 !important; + color: green; + font-weight: bold; + border: lightgreen 1px solid; +} + +.passLevel.strong, .passLevel.strong:hover { + background-color: #E6F2FF !important; + color: #64b4f4; + font-weight: bold; + border: #64b4f4 1px solid; +} + +.passLevel.good, .passLevel.good:hover { + background-color: #FFF2D9 !important; + color: orange; + font-weight: bold; + border: #ffe5b3 1px solid; +} + +.passLevel.weak, .passLevel.weak:hover { + background-color: #fee8e6 !important; + color: #CC0000; + font-weight: bold; + border: #fed2ce 1px solid; +} + +.passLevel-float { +} + +#alert #alert-text { + margin: 15px auto; + font-size: 14px; + font-weight: bold; +} + +#alert #alert-pass { + width: 50%; + padding: 10px; + margin: 15px auto; + border: 1px solid #c9c9c9; + color: #555; + font-weight: bold; +} + +.dialog-pass-text { + padding: .5em; + border: transparent 1px solid; + text-align: center; + min-width: 200px; +} + +.dialog-buttons { + text-align: center; + padding: .5em; + border-top: 1px solid #c9c9c9; + line-height: 2.5em; +} + +.dialog-clip-pass-copy { + background-color: #ecfde4;; + color: green; + border: #dbfdcb 1px solid; +} + +.help-box { + background-color: #fff !important; + color: rgb(96, 125, 139); +} + +.help-box > * { + font-weight: bold; +} + +.help-text { + text-align: justify; + line-height: 1.5em; + margin-top: 1em; +} + +.tooltip { + width: 300px; + max-width: 300px; + background-color: #777; + color: #fff; + z-index: 101; +} + +.cursor-pointer { + cursor: pointer; +} + +.password-actions { + display: inline-block; + width: 12em; +} + +.password-actions > span, .password-actions i { + margin-right: .6em; +} + +/*Login Page*/ +#boxLogin { + width: 500px; + min-height: 150px; + margin: 0 auto; + padding: 3em; + background: url("../imgs/logo_full.svg") no-repeat #fff; + background-size: 300px auto; + background-position: .5em .5em; +} + +#boxLogin .error { + float: left; + width: 315px; + margin-top: 15px; + color: orange; + border: 1px orange solid; + margin-left: auto; + margin-right: auto; +} + +#boxLogin #boxData { + position: relative; + top: 4em; + left: 10em; + display: inline-block; + width: 250px; + height: 100%; + min-height: 100px; + text-align: left; + margin-left: auto; + margin-right: auto; + background-color: transparent; +} + +#boxLogin #boxButton { + position: relative; + left: 10em; + width: 130px; + display: inline-block; + text-align: right; + margin: 0 auto; + padding: 6em 0 0 0; +} + +#boxLogin #boxActions { + width: 100%; + height: 1em; + margin-top: 1em; + text-align: right; +} + +#boxLogin #boxActions a { + color: #c9c9c9; +} + +#boxLogout { + width: 250px; + margin: 8em auto 0 auto; + font-size: 14px; + text-align: center; + color: orange; + background: #FFF2D9; + border: #ffe5b3 1px solid; + padding: 0.5em; +} + +#boxUpdated { + width: 350px; + margin: 5em auto 5em auto; + font-size: 14px; + text-align: center; + color: green; + background: #ecfde4; + border: #dbfdcb 1px solid; + padding: 0.5em; +} + +/* Warnings */ +fieldset.warning { + padding: 8px; + color: #b94a48; + background-color: #f2dede; + border: 1px solid #eed3d7; + border-radius: 5px; +} + +fieldset.warning legend { + color: #b94a48 !important; +} + +fieldset.warning a { + color: #b94a48 !important; + font-weight: bold; +} + +/*Actions and Errors Page*/ +#actions { + width: 100%; + margin: auto; + margin-bottom: 50px; + line-height: 2em; +} + +#actions #logo { + width: 100%; + margin-bottom: 30px; + font-size: 18px; + font-weight: bold; + text-align: center; + color: #a9a9a9; + letter-spacing: 3px; + box-shadow: 0px 8px 6px -6px rgba(83, 109, 254, .3); + -webkit-box-shadow: 0px 8px 6px -6px rgba(83, 109, 254, .3); + -moz-box-shadow: 0px 8px 6px -6px rgba(83, 109, 254, .3); +} + +#actions #logo img { + width: 300px; +} + +#actions #logo #pageDesc { + position: relative; + top: 30px; + left: -100px; + color: rgb(96, 125, 139); +} + +#actions ul.errors { + max-width: 40%; + margin: 0 auto; + list-style: none; + font-size: 14px; + text-align: left; +} + +#actions ul.errors > li { + margin: 1.5em auto; + border-radius: 5px; + padding: 0.5em; +} + +#actions ul.errors > li.err_critical { + color: #b94a48; + background: #fed7d7; + border: 1px solid #f00; +} + +#actions ul.errors > li.err_warning { + color: orange; + background: #FFF2D9; + border: #ffe5b3 1px solid; +} + +#actions ul.errors > li.err_ok { + color: green; + background: #ecfde4; + border: #dbfdcb 1px solid; + font-weight: bold; +} + +#actions ul.errors > li > p.hint { + background-image: url('../imgs/info.png'); + background-repeat: no-repeat; + color: #777777; + padding-left: 25px; + background-position: 0 0.3em; + font-size: 12px; +} + +#actions form { + width: 450px; + margin: 0 auto; + text-align: left; +} + +#actions form fieldset legend { + width: 100%; + margin-top: 1em; + /*color: rgb(96, 125, 139);*/ + color: #fff; + /*text-shadow: 0 1px 0 white;*/ + font-size: 14px; + font-weight: bold; + text-align: center; + /*border-bottom: 2px solid rgb(96, 125, 139);*/ + background-color: rgb(96, 125, 139); + margin-bottom: 1em; + border-radius: 5px; + letter-spacing: .2em; + padding: .2em 0; +} + +#actions div.buttons { + margin-top: 2em; + text-align: center; +} + +#whatsNewIcon { + text-align: center; +} + +#whatsNewIcon img { + width: 64px; + height: 64px; +} + +#whatsNewIcon h2 { + display: inline-block; + color: #555; + font-size: 16px; +} + +#whatsNew { + margin: 0 auto; + width: 500px; + background-color: #fffde1; + padding: 2em; + line-height: 1.5em; + font-size: 16px; + color: #555; + border: 1px solid #d9d9d9; + margin-bottom: 3em; + display: none; +} + +#whatsNew ul { + padding: 0; + border: none; +} + +#whatsNew li { + padding-left: 37px; + background: url("../imgs/arrow-list.png") left center no-repeat; + line-height: 32px; + list-style: none; +} + +.no-title .ui-dialog-titlebar { + display: none; +} + +.ui-dialog { + z-index: 9999 !important; +} + +@media all and (max-width: 1024px) { + #container #actionsBar { + text-align: right; + } + + #container #content { + width: 95%; + min-height: 500px; + margin: 15em auto 5em auto; + } + + #content .data { + width: 95%; + padding: 10px; + margin: auto; + } + + #content #tabs .ui-tabs-nav { + left: 0; + width: 100%; + } + + .action { + max-width: 95%; + height: 4em; + margin: 0.7em auto; + } +} \ No newline at end of file diff --git a/inc/themes/material-blue/customers.inc b/inc/themes/material-blue/customers.inc new file mode 100644 index 00000000..5e7d12ee --- /dev/null +++ b/inc/themes/material-blue/customers.inc @@ -0,0 +1,77 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ "> + +
+
+
+ "> + +
+
+ text; ?> + help): ?> +
help_outline
+
+

help; ?>

+
+ +
+ +
+ required) ? 'required' : ''; ?>> + +
+ + value; ?> + +
+ + + + "/> + + + +
+
+
+ +
+
\ No newline at end of file diff --git a/inc/themes/material-blue/customfields.inc b/inc/themes/material-blue/customfields.inc new file mode 100644 index 00000000..b2f6fe58 --- /dev/null +++ b/inc/themes/material-blue/customfields.inc @@ -0,0 +1,83 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ +
+ +
+
+ + +
+
+ +
+ + + + + + + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/inc/themes/material-blue/debug.inc b/inc/themes/material-blue/debug.inc new file mode 100644 index 00000000..2c70cc44 --- /dev/null +++ b/inc/themes/material-blue/debug.inc @@ -0,0 +1,22 @@ +
+

DEBUG INFO

+
    +
  • RENDER -> sec
  • +
  • MEM -> Init: KB - End: KB - + Total: KB +
  • +
  • SESSION: +
    +
  • +
  • MASTER PASS:
  • +
  • CONFIG FILE: +
    +
  • +
+ + + + \ No newline at end of file diff --git a/inc/themes/material-blue/editpass.inc b/inc/themes/material-blue/editpass.inc new file mode 100644 index 00000000..dc26d38b --- /dev/null +++ b/inc/themes/material-blue/editpass.inc @@ -0,0 +1,71 @@ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
account_name; ?>
customer_name; ?>
account_url; ?>
account_login; ?>
+
+ + +
+
+
+ + +
+
+ + + + + + +
+ + + +
+
+ + + diff --git a/inc/themes/material-blue/encryption.inc b/inc/themes/material-blue/encryption.inc new file mode 100644 index 00000000..9030f198 --- /dev/null +++ b/inc/themes/material-blue/encryption.inc @@ -0,0 +1,195 @@ + +
+ +
+ +
+ +
+ + 0): ?> + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + +
+
+ + +
+ + +
+
+ + +
+ + +
+
+ + +
help_outline
+
+

+ +

+
+
+ +
+ + +
warning
+ +
+
warning
+ +
+
warning
+ +
+
+ +
+ + + + +
+
+ + +
+

+ +

+
+ + +
+ +
+ +
+ +
+ + + + + + + + + + + + + +
+ + + 0) ? date("r", $tempMasterPassTime) : _('No generada'); ?> +
+ + + $tempMasterMaxTime): ?> + + 0): echo date("r", $tempMasterMaxTime); ?> + + +
+ + +
+ + +
+
+ + + + +
+
+ + +
+

+
+ + +
+
+ + \ No newline at end of file diff --git a/inc/themes/material-blue/error.inc b/inc/themes/material-blue/error.inc new file mode 100644 index 00000000..06d26bd7 --- /dev/null +++ b/inc/themes/material-blue/error.inc @@ -0,0 +1,21 @@ +
+ + + + + + 0): ?> +
    + + +
  • "> + + ' . $err['hint'] . '

    ' : ''; ?> +
  • + + +
+ +
\ No newline at end of file diff --git a/inc/themes/material-blue/errorfancy.inc b/inc/themes/material-blue/errorfancy.inc new file mode 100644 index 00000000..3bdfba43 --- /dev/null +++ b/inc/themes/material-blue/errorfancy.inc @@ -0,0 +1,14 @@ +
+ 0): ?> +
    + + +
  • "> + + ' . $err['hint'] . '

    ' : ''; ?> +
  • + + +
+ +
\ No newline at end of file diff --git a/inc/themes/material-blue/eventlog.inc b/inc/themes/material-blue/eventlog.inc new file mode 100644 index 00000000..ec9da35e --- /dev/null +++ b/inc/themes/material-blue/eventlog.inc @@ -0,0 +1,103 @@ +
+ +
+ + + ' . _('No se encontraron registros') . '
'); ?> + + +
+ + + + + + + + + + + + + + + log_description) : preg_replace("/\d+\.\d+\.\d+\.\d+/", "*.*.*.*", utf8_decode($log->log_description)); ?> + + + + + + + + + + + +
+ + + + + + + + + + + +
+ log_id; ?> + + log_date; ?> + + log_action); ?> + + log_login); ?> + + log_ipAddress) : $log->log_ipAddress; ?> + + ', $text); + $text = preg_replace('/(UPDATE|DELETE|TRUNCATE|INSERT|SELECT|WHERE|LEFT|ORDER|LIMIT|FROM)/', '
\\1', $text); + } + + if (strlen($text) >= 150) { + echo wordwrap($text, 150, '
', true); + } else { + echo $text . '
'; + } + } + ?> +
+
+ +
+ +
\ No newline at end of file diff --git a/inc/themes/material-blue/files.inc b/inc/themes/material-blue/files.inc new file mode 100644 index 00000000..436b344b --- /dev/null +++ b/inc/themes/material-blue/files.inc @@ -0,0 +1,27 @@ +
+
    + +
  • +
    + ( KB) + + thumbnail + +
    +
    + + delete + + file_download + visibility +
    +
  • + +
+
\ No newline at end of file diff --git a/inc/themes/material-blue/footer.inc b/inc/themes/material-blue/footer.inc new file mode 100644 index 00000000..bd545ebc --- /dev/null +++ b/inc/themes/material-blue/footer.inc @@ -0,0 +1,35 @@ +
+
+ +
+ exit_to_app + + security + + account_circle + +
+ +
+ + + +  ::  + cygnux.org +
+
+ + + +
+
+
+
+ + + \ No newline at end of file diff --git a/inc/themes/material-blue/groups.inc b/inc/themes/material-blue/groups.inc new file mode 100644 index 00000000..728f3042 --- /dev/null +++ b/inc/themes/material-blue/groups.inc @@ -0,0 +1,97 @@ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ "> + +
+
+
+ "> + +
+
+ +
+ text; ?> + help): ?> +
help_outline
+
+

help; ?>

+
+ +
+ +
+ required) ? 'required' : ''; ?>> + +
+ + value; ?> + +
+ + + + "/> + + + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/inc/themes/material-blue/header.inc b/inc/themes/material-blue/header.inc new file mode 100644 index 00000000..ab808da4 --- /dev/null +++ b/inc/themes/material-blue/header.inc @@ -0,0 +1,10 @@ + + + + <?php echo $appInfo['appname'],' :: ',$appInfo['appdesc']; ?> + + + + + + diff --git a/inc/themes/material-blue/import.inc b/inc/themes/material-blue/import.inc new file mode 100644 index 00000000..e7e1595f --- /dev/null +++ b/inc/themes/material-blue/import.inc @@ -0,0 +1,232 @@ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
help_outline
+
+

+ +

+
+
+ +
+ +
help_outline
+
+

+ +

+
+
+ +
+ + +
+ + +
+
+ + +
+ + +
+
+ + +
+ +
+
+ cloud_upload +
+
+
+ + +
+

+ +

+ +

+ +

+ +

+ +

+ +

+
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
help_outline
+
+

+ +

+
+
+
+ + +
+
+ + +
+ + +
+
+ +
help_outline
+
+

+ +

+
+
+
+ + +
+
+ +
help_outline
+
+

+ +

+
+
+
+ + +
+
+ + +
warning
+ +

+ + +
+ + + + + +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/inc/themes/material-blue/index.php b/inc/themes/material-blue/index.php new file mode 100644 index 00000000..2287c241 --- /dev/null +++ b/inc/themes/material-blue/index.php @@ -0,0 +1,31 @@ +. + * + */ + +$themeInfo = array( + 'name' => 'Material Blue', + 'creator' => 'nuxsmin', + 'version' => '1.0', + 'targetversion' => '1.2.0' +); diff --git a/inc/themes/material-blue/info.inc b/inc/themes/material-blue/info.inc new file mode 100644 index 00000000..71f5015b --- /dev/null +++ b/inc/themes/material-blue/info.inc @@ -0,0 +1,51 @@ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ + + +
+ + + $infoval): ?> + +
+ + +
+ + + +
+ +
+ +
+ +
+ + + +
+
\ No newline at end of file diff --git a/inc/themes/material-blue/install.inc b/inc/themes/material-blue/install.inc new file mode 100644 index 00000000..1d8f0f4e --- /dev/null +++ b/inc/themes/material-blue/install.inc @@ -0,0 +1,156 @@ +
+ + + 0): ?> +
    + + +
  • + + ' . $err['hint'] . '

    ' : ''; ?> +
  • + + +
+ + + +
+ + +
+ + +
+ + +
+ +
help_outline
+
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + + + +
+ + +
+ +
help_outline
+
+ +
+ +
+ + +
+ +
+ + +
+ +
help_outline
+
+ +
+ +
+ + +
+ +
help_outline
+
+ +
+ + + +
+ +
+ +
+ +
+ +
+
+ +
+ \ No newline at end of file diff --git a/inc/themes/material-blue/js-common.inc b/inc/themes/material-blue/js-common.inc new file mode 100644 index 00000000..02d7b2ea --- /dev/null +++ b/inc/themes/material-blue/js-common.inc @@ -0,0 +1,54 @@ + diff --git a/inc/themes/material-blue/js/LICENSE b/inc/themes/material-blue/js/LICENSE new file mode 100644 index 00000000..9faf1086 --- /dev/null +++ b/inc/themes/material-blue/js/LICENSE @@ -0,0 +1,212 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 Google Inc + + 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. + + All code in any directories or sub-directories that end with *.html or + *.css is licensed under the Creative Commons Attribution International + 4.0 License, which full text can be found here: + https://creativecommons.org/licenses/by/4.0/legalcode. + + As an exception to this license, all html or css that is generated by + the software at the direction of the user is copyright the user. The + user has full ownership and control over such content, including + whether and how they wish to license it. diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js new file mode 100644 index 00000000..0508535d --- /dev/null +++ b/inc/themes/material-blue/js/functions.js @@ -0,0 +1,290 @@ +sysPass.Util.Theme = function () { + "use strict"; + + var Common = new sysPass.Util.Common(), + passwordData = Common.passwordData, + APP_ROOT = Common.APP_ROOT, + LANG = Common.LANG, + PK = Common.PK; + + // Mostrar el spinner de carga + var showLoading = function () { + $('#wrap-loading').show(); + $('#loading').addClass('is-active'); + }; + + // Ocultar el spinner de carga + var hideLoading = function () { + $('#wrap-loading').hide(); + $('#loading').removeClass('is-active'); + }; + + var activeTooltip = function () { + // Activar tooltips + $('.active-tooltip').tooltip({ + content: function () { + return $(this).attr('title'); + }, + tooltipClass: "tooltip" + }); + }; + + // Función para generar claves aleatorias. + // By Uzbekjon from http://jquery-howto.blogspot.com.es + var password = function (length, special, fancy, targetId) { + var iteration = 0, + genPassword = '', + randomNumber; + + while (iteration < passwordData.complexity.numlength) { + randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33; + if (!passwordData.complexity.symbols) { + if ((randomNumber >= 33) && (randomNumber <= 47)) { + continue; + } + if ((randomNumber >= 58) && (randomNumber <= 64)) { + continue; + } + if ((randomNumber >= 91) && (randomNumber <= 96)) { + continue; + } + if ((randomNumber >= 123) && (randomNumber <= 126)) { + continue; + } + } + + if (!passwordData.complexity.numbers && randomNumber >= 48 && randomNumber <= 57) { + continue; + } + + if (!passwordData.complexity.uppercase && randomNumber >= 65 && randomNumber <= 90) { + continue; + } + + iteration++; + genPassword += String.fromCharCode(randomNumber); + } + + if (fancy === true) { + $("#viewPass").attr("title", genPassword); + //alertify.alert('

' + LANG[6] + '

' + password + '

'); + } else { + alertify.alert('

' + LANG[6] + '

' + genPassword + '

'); + } + + var level = zxcvbn(genPassword); + passwordData.passLength = genPassword.length; + + if (targetId) { + var dstParent = $('#' + targetId).parent(); + + Common.outputResult(level.score, targetId); + + // Actualizar los componentes de MDL + var mdl = new MaterialTextfield(); + + // Poner la clave en los input y actualizar MDL + dstParent.find('input:password').val(genPassword); + dstParent.addClass(mdl.CssClasses_.IS_DIRTY).removeClass(mdl.CssClasses_.IS_INVALID); + // Poner la clave en el input de repetición + $('#' + targetId + 'R').val(genPassword).parent().addClass(mdl.CssClasses_.IS_DIRTY).removeClass(mdl.CssClasses_.IS_INVALID); + + // Mostar el indicador de complejidad + dstParent.find('#passLevel').show(500); + } else { + Common.outputResult(level.score); + $('input:password, input.password').val(genPassword); + $('#passLevel').show(500); + } + }; + + + // Diálogo de configuración de complejidad de clave + var complexityDialog = function () { + $('
').dialog({ + modal: true, + title: 'Opciones de Complejidad', + width: '400px', + open: function () { + var thisDialog = $(this); + + var content = + '' + + '' + + '' + + '
' + + '' + + '' + + '
' + + ''; + + thisDialog.html(content); + + // Recentrar después de insertar el contenido + thisDialog.dialog('option', 'position', 'center'); + + + // Actualizar componentes de MDL + thisDialog.ready(function () { + $('#checkbox-numbers').prop('checked', passwordData.complexity.numbers); + $('#checkbox-uppercase').prop('checked', passwordData.complexity.uppercase); + $('#checkbox-symbols').prop('checked', passwordData.complexity.symbols); + $('#passlength').val(passwordData.complexity.numlength); + + $('#btn-complexity').click(function () { + passwordData.complexity.numbers = $(' #checkbox-numbers').is(':checked'); + passwordData.complexity.uppercase = $('#checkbox-uppercase').is(':checked'); + passwordData.complexity.symbols = $('#checkbox-symbols').is(':checked'); + passwordData.complexity.numlength = parseInt($('#passlength').val()); + + thisDialog.dialog('close'); + }); + + // Actualizar objetos de MDL + componentHandler.upgradeDom(); + }); + }, + // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo + close: function () { + $(this).dialog("destroy"); + } + }); + }; + + /** + * Detectar los campos de clave y añadir funciones + */ + var passwordDetect = function () { + // Crear los iconos de acciones sobre claves + $('.passwordfield__input').each(function () { + var thisParent = $(this).parent(); + var targetId = $(this).attr('id'); + + if (thisParent.next().hasClass('password-actions')) { + return; + } + + var btnMenu = ''; + + btnMenu += '
    '; + btnMenu += '
  • settings' + LANG[28] + '
  • '; + btnMenu += '
  • vpn_key' + LANG[29] + '
  • '; + btnMenu += '
  • refresh' + LANG[30] + '
  • '; + + thisParent.after('
    '); + + thisParent.next('.password-actions') + .prepend('') + .prepend('remove_red_eye') + .prepend(btnMenu); + + $(this).on('keyup', function () { + Common.checkPassLevel($(this).val(), targetId); + }); + }); + + // Crear los iconos de acciones sobre claves (sólo mostrar clave) + $('.passwordfield__input-show').each(function () { + var thisParent = $(this).parent(); + var targetId = $(this).attr('id'); + + thisParent + .after('remove_red_eye'); + }); + + // Crear evento para generar clave aleatoria + $('.passGen').each(function () { + $(this).on('click', function () { + var targetId = $(this).data('targetid'); + password(11, true, true, targetId); + }); + }); + + $('.passComplexity').each(function () { + $(this).on('click', function () { + complexityDialog(); + }); + }); + + // Crear evento para mostrar clave generada/introducida + $('.showpass').each(function () { + $(this).on('mouseover', function () { + var targetId = $(this).data('targetid'); + $(this).attr('title', $('#' + targetId).val()); + }); + }); + + // Reset de los campos de clave + $('.reset').each(function () { + $(this).on('click', function () { + var targetId = $(this).data('targetid'); + $('#' + targetId).val(''); + $('#' + targetId + 'R').val(''); + + // Actualizar objetos de MDL + componentHandler.upgradeDom(); + }); + }); + }; + + return { + showLoading: showLoading, + hideLoading: hideLoading, + activeTooltip: activeTooltip, + passwordDetect: passwordDetect, + password : password, + init: function () { + jQuery.extend(jQuery.fancybox.defaults, { + type: 'ajax', + autoWidth: true, + autoHeight: true, + autoResize: true, + autoCenter: true, + fitToView: false, + minHeight: 50, + padding: 0, + helpers: {overlay: {css: {'background': 'rgba(0, 0, 0, 0.1)'}}}, + keys: {close: [27]}, + afterShow: function () { + $('#fancyContainer').find('input:visible:first').focus(); + } + }); + + jQuery.ajaxSetup({ + beforeSend: function () { + showLoading(); + }, + complete: function () { + hideLoading(); + + // Actualizar componentes de MDL cargados con AJAX + componentHandler.upgradeDom(); + + // Activar tooltips + activeTooltip(); + } + }); + + $(document).ready(function () { + //setContentSize(); + //setWindowAdjustSize(); + + // Activar tooltips + activeTooltip(); + }); + }, + Common : Common + }; +}; + +var sysPassUtil = new sysPass.Util.Theme(); +sysPassUtil.init(); \ No newline at end of file diff --git a/inc/themes/material-blue/js/js.php b/inc/themes/material-blue/js/js.php new file mode 100644 index 00000000..26dacc3e --- /dev/null +++ b/inc/themes/material-blue/js/js.php @@ -0,0 +1,29 @@ +. + * + */ + +$jsFilesTheme = array( + array('href' => \SP\Init::$THEMEPATH . '/js/material.min.js', 'min' => false), + array('href' => \SP\Init::$THEMEPATH . '/js/functions.js', 'min' => true), +); \ No newline at end of file diff --git a/inc/themes/material-blue/js/material.min.js b/inc/themes/material-blue/js/material.min.js new file mode 100644 index 00000000..e791c23b --- /dev/null +++ b/inc/themes/material-blue/js/material.min.js @@ -0,0 +1,11 @@ +/** + * material-design-lite - Material Design Components in CSS, JS and HTML + * @version v1.0.4 + * @license Apache-2.0 + * @copyright 2015 Google, Inc. + * @link https://github.com/google/material-design-lite + */ +!function(){"use strict";function e(e,s){if(e){if(s.element_.classList.contains(s.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var t=document.createElement("span");t.classList.add(s.CssClasses_.MDL_RIPPLE_CONTAINER),t.classList.add(s.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement("span");i.classList.add(s.CssClasses_.MDL_RIPPLE),t.appendChild(i),e.appendChild(t)}e.addEventListener("click",function(t){t.preventDefault();var i=e.href.split("#")[1],n=s.element_.querySelector("#"+i);s.resetTabState_(),s.resetPanelState_(),e.classList.add(s.CssClasses_.ACTIVE_CLASS),n.classList.add(s.CssClasses_.ACTIVE_CLASS)})}}function s(e,s,t,i){if(e){if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var n=document.createElement("span");n.classList.add(i.CssClasses_.RIPPLE_CONTAINER),n.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var a=document.createElement("span");a.classList.add(i.CssClasses_.RIPPLE),n.appendChild(a),e.appendChild(n)}e.addEventListener("click",function(n){n.preventDefault();var a=e.href.split("#")[1],l=i.content_.querySelector("#"+a);i.resetTabState_(s),i.resetPanelState_(t),e.classList.add(i.CssClasses_.IS_ACTIVE),l.classList.add(i.CssClasses_.IS_ACTIVE)})}}window.componentHandler=function(){function e(e,s){for(var t=0;t_;_++){if(r=l[_],!r)throw new Error("Unable to find a registered component for the given class.");a.push(r.className),i.setAttribute("data-upgraded",a.join(","));var h=new r.classConstructor(i);h[C]=r,p.push(h);for(var u=0,m=r.callbacks.length;m>u;u++)r.callbacks[u](i);r.widget&&(i[r.className]=h);var E=document.createEvent("Events");E.initEvent("mdl-componentupgraded",!0,!0),i.dispatchEvent(E)}}function a(e){Array.isArray(e)||(e="function"==typeof e.item?Array.prototype.slice.call(e):[e]);for(var s,t=0,i=e.length;i>t;t++)s=e[t],s instanceof HTMLElement&&(s.children.length>0&&a(s.children),n(s))}function l(s){var t={classConstructor:s.constructor,className:s.classAsString,cssClass:s.cssClass,widget:void 0===s.widget?!0:s.widget,callbacks:[]};if(c.forEach(function(e){if(e.cssClass===t.cssClass)throw new Error("The provided cssClass has already been registered.");if(e.className===t.className)throw new Error("The provided className has already been registered")}),s.constructor.prototype.hasOwnProperty(C))throw new Error("MDL component classes must not have "+C+" defined as a property.");var i=e(s.classAsString,t);i||c.push(t)}function o(s,t){var i=e(s);i&&i.callbacks.push(t)}function r(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),s[s.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),s[0].focus()))}},_.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var s=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(s&&s.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var t=Array.prototype.slice.call(s).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),t>0?s[t-1].focus():s[s.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),s.length>t+1?s[t+1].focus():s[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},_.prototype.handleItemClick_=function(e){null!==e.target.getAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},_.prototype.applyClip_=function(e,s){this.element_.style.clip=this.element_.classList.contains(this.CssClasses_.UNALIGNED)?null:this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?"rect(0 "+s+"px 0 "+s+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?"rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?"rect("+e+"px "+s+"px "+e+"px "+s+"px)":null},_.prototype.addAnimationEndListener_=function(){var e=function(){this.element_.removeEventListener("transitionend",e),this.element_.removeEventListener("webkitTransitionEnd",e),this.element_.classList.remove(this.CssClasses_.IS_ANIMATING)}.bind(this);this.element_.addEventListener("transitionend",e),this.element_.addEventListener("webkitTransitionEnd",e)},_.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var s=this.element_.getBoundingClientRect().height,t=this.element_.getBoundingClientRect().width;this.container_.style.width=t+"px",this.container_.style.height=s+"px",this.outline_.style.width=t+"px",this.outline_.style.height=s+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a=this.maxRows&&e.preventDefault()},m.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},m.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},m.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty()},m.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},m.prototype.checkValidity=function(){this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID)},m.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},m.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},m.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},m.prototype.change=function(e){e&&(this.input_.value=e),this.updateClasses_()},m.prototype.init=function(){this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_&&(this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler)),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)))},m.prototype.mdlDowngrade_=function(){this.input_.removeEventListener("input",this.boundUpdateClassesHandler),this.input_.removeEventListener("focus",this.boundFocusHandler),this.input_.removeEventListener("blur",this.boundBlurHandler),this.boundKeyDownHandler&&this.input_.removeEventListener("keydown",this.boundKeyDownHandler)},componentHandler.register({constructor:m,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0});var E=function(e){this.element_=e,this.init()};window.MaterialTooltip=E,E.prototype.Constant_={},E.prototype.CssClasses_={IS_ACTIVE:"is-active"},E.prototype.handleMouseEnter_=function(e){e.stopPropagation();var s=e.target.getBoundingClientRect(),t=s.left+s.width/2,i=-1*(this.element_.offsetWidth/2);0>t+i?(this.element_.style.left=0,this.element_.style.marginLeft=0):(this.element_.style.left=t+"px",this.element_.style.marginLeft=i+"px"),this.element_.style.top=s.top+s.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE),window.addEventListener("scroll",this.boundMouseLeaveHandler,!1),window.addEventListener("touchmove",this.boundMouseLeaveHandler,!1)},E.prototype.handleMouseLeave_=function(e){e.stopPropagation(),this.element_.classList.remove(this.CssClasses_.IS_ACTIVE),window.removeEventListener("scroll",this.boundMouseLeaveHandler),window.removeEventListener("touchmove",this.boundMouseLeaveHandler,!1)},E.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute("for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.getAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveHandler=this.handleMouseLeave_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("blur",this.boundMouseLeaveHandler),this.forElement_.addEventListener("touchstart",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveHandler))}},E.prototype.mdlDowngrade_=function(){this.forElement_&&(this.forElement_.removeEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("touchstart",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("mouseleave",this.boundMouseLeaveHandler))},componentHandler.register({constructor:E,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"});var L=function(e){this.element_=e,this.init()};window.MaterialLayout=L,L.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,MENU_ICON:"menu",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},L.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},L.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},L.prototype.contentScrollHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)||(this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)))},L.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN))},L.prototype.drawerToggleHandler_=function(){this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN)},L.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},L.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},L.prototype.resetTabState_=function(e){for(var s=0;s0?h.classList.add(this.CssClasses_.IS_ACTIVE):h.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=e.clientX?e.clientX:e.touches[0].clientX,o=e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(o-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},f.prototype.upHandler_=function(e){e&&2!==e.detail&&this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE),window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},f.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,s){this.x_=e,this.y_=s},this.setRippleStyles=function(s){if(null!==this.rippleElement_){var t,i,n,a="translate("+this.x_+"px, "+this.y_+"px)";s?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+"px",e&&(a="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),t="translate(-50%, -50%) "+a+i,this.rippleElement_.style.webkitTransform=t,this.rippleElement_.style.msTransform=t,this.rippleElement_.style.transform=t,s?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-->0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},f.prototype.mdlDowngrade_=function(){this.element_.removeEventListener("mousedown",this.boundDownHandler),this.element_.removeEventListener("touchstart",this.boundDownHandler),this.element_.removeEventListener("mouseup",this.boundUpHandler),this.element_.removeEventListener("mouseleave",this.boundUpHandler),this.element_.removeEventListener("touchend",this.boundUpHandler),this.element_.removeEventListener("blur",this.boundUpHandler)},componentHandler.register({constructor:f,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1})}(); +//# sourceMappingURL=material.min.js.map \ No newline at end of file diff --git a/inc/themes/material-blue/js/material.min.js.map b/inc/themes/material-blue/js/material.min.js.map new file mode 100644 index 00000000..adba41fd --- /dev/null +++ b/inc/themes/material-blue/js/material.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["mdlComponentHandler.js","tabs.js","layout.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","ripple.js","material.js"],"names":["MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","content_","IS_ACTIVE","window","componentHandler","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","undefined","getUpgradedListOfElement_","element","dataUpgraded","getAttribute","isElementUpgraded_","jsClass","upgradedList","indexOf","upgradeDomInternal","optJsClass","optCssClass","cssClass","registeredClass","elements","querySelectorAll","n","upgradeElementInternal","Element","Error","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","ev","createEvent","initEvent","dispatchEvent","upgradeElementsInternal","Array","isArray","item","prototype","slice","call","HTMLElement","children","registerInternal","config","newConfig","constructor","classAsString","hasOwnProperty","found","registerUpgradedCallbackInternal","callback","regClass","upgradeAllRegisteredInternal","findCreatedComponentByNodeInternal","node","deconstructComponentInternal","downgradeMethod_","componentIndex","splice","upgrades","componentPlace","downgradeNodesInternal","nodes","downgradeNode","NodeList","Node","upgradeDom","upgradeElement","upgradeElements","upgradeAllRegistered","registerUpgradedCallback","register","downgradeElements","documentElement","ComponentConfig","Component","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","mdlDowngrade_","removeEventListener","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown","handleItemKeyboardEvent_","boundItemClick","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","stopPropagation","closing_","applyClip_","height","width","clip","addAnimationEndListener_","cleanup","show","transitionDuration","itemDelay","transitionDelay","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","firstChild","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","button","btnElement_","onMouseup_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","onKeyDown_","currentRowCount","checkValidity","checkDirty","input_","validity","valid","label_","hasAttribute","parseInt","isNaN","boundUpdateClassesHandler","boundKeyDownHandler","MaterialTooltip","handleMouseEnter_","props","marginLeft","offsetWidth","boundMouseLeaveHandler","handleMouseLeave_","boundMouseEnterHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","scrollTop","screenSizeHandler_","screenSizeMediaQuery_","matches","drawer_","drawerToggleHandler_","headerTransitionEndHandler_","headerClickHandler_","tabBar","directChildren","childNodes","c","child","mode","matchMedia","addListener","eatEvent","drawerButton","drawerButtonIcon","textContent","obfuscator","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabScrollHandler","scrollWidth","MaterialDataTable","DATA_TABLE","SELECTABLE","IS_SELECTED","selectRow_","checkbox","row","rows","createCheckbox_","label","type","firstHeader","th","headerCheckbox","firstCell","td","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","size","offset","webkitTransform","msTransform","transform"],"mappings":"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","file":"material.min.js","sourcesContent":["/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\nwindow.componentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var downgradeMethod_ = 'mdlDowngrade_';\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {String} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|Boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (optReplace !== undefined) {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!HTMLElement} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!HTMLElement} element The element we want to check.\n * @param {String} jsClass The class to check for.\n * @returns {Boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {String=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {String=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (optJsClass === undefined && optCssClass === undefined) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {String} */ (optJsClass);\n if (optCssClass === undefined) {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!HTMLElement} element The element we wish to upgrade.\n * @param {String=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var ev = document.createEvent('Events');\n ev.initEvent('mdl-componentupgraded', true, true);\n element.dispatchEvent(ev);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!HTMLElement|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (typeof elements.item === 'function') {\n elements = Array.prototype.slice.call(/** @type {Array} */ (elements));\n } else {\n elements = [elements];\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n upgradeElementInternal(element);\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {{constructor: !Function, classAsString: String, cssClass: String, widget: String}} config\n */\n function registerInternal(config) {\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n 'classConstructor': config.constructor,\n 'className': config.classAsString,\n 'cssClass': config.cssClass,\n 'widget': config.widget === undefined ? true : config.widget,\n 'callbacks': []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered.');\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {String} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Finds a created component by a given DOM node.\n *\n * @param {!Node} node\n * @return {*}\n */\n function findCreatedComponentByNodeInternal(node) {\n for (var n = 0; n < createdComponents_.length; n++) {\n var component = createdComponents_[n];\n if (component.element_ === node) {\n return component;\n }\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {*} component\n */\n function deconstructComponentInternal(component) {\n if (component &&\n component[componentConfigProperty_]\n .classConstructor.prototype\n .hasOwnProperty(downgradeMethod_)) {\n component[downgradeMethod_]();\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(\n component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = document.createEvent('Events');\n ev.initEvent('mdl-componentdowngraded', true, true);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n var downgradeNode = function(node) {\n deconstructComponentInternal(findCreatedComponentByNodeInternal(node));\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n componentHandler.upgradeElement =\n componentHandler.register = function() {};\n }\n});\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: String,\n * cssClass: String,\n * widget: String,\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: String,\n * classAsString: String,\n * cssClass: String,\n * widget: String\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialTabs = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialLayout = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n MENU_ICON: 'menu',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Modes.\n *\n * @enum {Number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles toggling of the drawer.\n *\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function () {\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var directChildren = this.element_.childNodes;\n for (var c = 0; c < directChildren.length; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n var eatEvent = function (ev) {\n ev.preventDefault();\n };\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = document.createElement('div');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.textContent = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n this.drawer_.addEventListener('mousewheel', eatEvent);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n obfuscator.addEventListener('mousewheel', eatEvent);\n }\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove buttons depending on scroll position.\n var tabScrollHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabScrollHandler);\n tabScrollHandler();\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n if (tab) {\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n Date.now = function () {\n return new Date().getTime();\n };\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialButton = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n/**\n * Downgrade the element.\n *\n * @private\n */\nMaterialButton.prototype.mdlDowngrade_ = function () {\n if (this.rippleElement_) {\n this.rippleElement_.removeEventListener('mouseup', this.boundRippleBlurHandler);\n }\n this.element_.removeEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.removeEventListener('mouseleave', this.boundButtonBlurHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialCheckbox = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Downgrade the component.\n *\n * @private\n */\nMaterialCheckbox.prototype.mdlDowngrade_ = function () {\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);\n }\n this.inputElement_.removeEventListener('change', this.boundInputOnChange);\n this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);\n this.element_.removeEventListener('mouseup', this.boundElementMouseUp);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialIconToggle = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialIconToggle.prototype.mdlDowngrade_ = function () {\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);\n }\n this.inputElement_.removeEventListener('change', this.boundInputOnChange);\n this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);\n this.element_.removeEventListener('mouseup', this.boundElementOnMouseUp);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialMenu = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {Number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.getAttribute('disabled') !== null) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {Number} height Height of the clip rectangle\n * @param {Number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = null;\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = null;\n }\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n var cleanup = function () {\n this.element_.removeEventListener('transitionend', cleanup);\n this.element_.removeEventListener('webkitTransitionEnd', cleanup);\n this.element_.classList.remove(this.CssClasses_.IS_ANIMATING);\n }.bind(this);\n // Remove animation class once the transition is done.\n this.element_.addEventListener('transitionend', cleanup);\n this.element_.addEventListener('webkitTransitionEnd', cleanup);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n if (e !== evt && !this.closing_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.transitionDelay = null;\n }\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\n/**\n * Downgrade the component.\n *\n * @private\n */\nMaterialMenu.prototype.mdlDowngrade_ = function () {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n items[i].removeEventListener('click', this.boundItemClick);\n items[i].removeEventListener('keydown', this.boundItemKeydown);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialProgress = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {Number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\n/**\n * Set the current progress of the buffer.\n *\n * @param {Number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialProgress.prototype.mdlDowngrade_ = function () {\n while (this.element_.firstChild) {\n this.element_.removeChild(this.element_.firstChild);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialRadio = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n radios[i].MaterialRadio.updateClasses_();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.onMouseup_.bind(this));\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.onChange_.bind(this));\n this.btnElement_.addEventListener('focus', this.onFocus_.bind(this));\n this.btnElement_.addEventListener('blur', this.onBlur_.bind(this));\n this.element_.addEventListener('mouseup', this.onMouseup_.bind(this));\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialSlider = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function (event) {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\n/**\n * Update slider value.\n *\n * @param {Number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialSlider.prototype.mdlDowngrade_ = function () {\n this.element_.removeEventListener('input', this.boundInputHandler);\n this.element_.removeEventListener('change', this.boundChangeHandler);\n this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.removeEventListener('mousedown', this.boundContainerMouseDownHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialSpinner = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {Number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialSwitch = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n/**\n * Downgrade the component.\n *\n * @private\n */\nMaterialSwitch.prototype.mdlDowngrade_ = function () {\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundMouseUpHandler);\n }\n this.inputElement_.removeEventListener('change', this.boundChangeHandler);\n this.inputElement_.removeEventListener('focus', this.boundFocusHandler);\n this.inputElement_.removeEventListener('blur', this.boundBlurHandler);\n this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialTextfield = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n};\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Update text field value.\n *\n * @param {String} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n if (value) {\n this.input_.value = value;\n }\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialTextfield.prototype.mdlDowngrade_ = function () {\n this.input_.removeEventListener('input', this.boundUpdateClassesHandler);\n this.input_.removeEventListener('focus', this.boundFocusHandler);\n this.input_.removeEventListener('blur', this.boundBlurHandler);\n if (this.boundKeyDownHandler) {\n this.input_.removeEventListener('keydown', this.boundKeyDownHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialTooltip = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = { IS_ACTIVE: 'is-active' };\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n event.stopPropagation();\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n if (left + marginLeft < 0) {\n this.element_.style.left = 0;\n this.element_.style.marginLeft = 0;\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n this.element_.style.top = props.top + props.height + 10 + 'px';\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n window.addEventListener('scroll', this.boundMouseLeaveHandler, false);\n window.addEventListener('touchmove', this.boundMouseLeaveHandler, false);\n};\n/**\n * Handle mouseleave for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseLeave_ = function (event) {\n event.stopPropagation();\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n window.removeEventListener('scroll', this.boundMouseLeaveHandler);\n window.removeEventListener('touchmove', this.boundMouseLeaveHandler, false);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // Tabindex needs to be set for `blur` events to be emitted\n if (!this.forElement_.getAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveHandler = this.handleMouseLeave_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('click', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('blur', this.boundMouseLeaveHandler);\n this.forElement_.addEventListener('touchstart', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveHandler);\n }\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialTooltip.prototype.mdlDowngrade_ = function () {\n if (this.forElement_) {\n this.forElement_.removeEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('click', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('touchstart', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('mouseleave', this.boundMouseLeaveHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialDataTable = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {HTMLElement} checkbox Checkbox that toggles the selection state.\n * @param {HTMLElement} row Row to toggle when checkbox changes.\n * @param {HTMLElement[]} rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < rows.length; i++) {\n el = rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el.MaterialCheckbox.check();\n rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < rows.length; i++) {\n el = rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el.MaterialCheckbox.uncheck();\n rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {HTMLElement} row Row to toggle when checkbox changes.\n * @param {HTMLElement[]} rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, rows) {\n var label = document.createElement('label');\n label.classList.add('mdl-checkbox');\n label.classList.add('mdl-js-checkbox');\n label.classList.add('mdl-js-ripple-effect');\n label.classList.add('mdl-data-table__select');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var rows = this.element_.querySelector('tbody').querySelectorAll('tr');\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n rows[i].insertBefore(td, firstCell);\n }\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialRipple = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialRipple.prototype.mdlDowngrade_ = function () {\n this.element_.removeEventListener('mousedown', this.boundDownHandler);\n this.element_.removeEventListener('touchstart', this.boundDownHandler);\n this.element_.removeEventListener('mouseup', this.boundUpHandler);\n this.element_.removeEventListener('mouseleave', this.boundUpHandler);\n this.element_.removeEventListener('touchend', this.boundUpHandler);\n this.element_.removeEventListener('blur', this.boundUpHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});",";(function() {\n\"use strict\";\n\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\nwindow.componentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var downgradeMethod_ = 'mdlDowngrade_';\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {String} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|Boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (optReplace !== undefined) {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!HTMLElement} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!HTMLElement} element The element we want to check.\n * @param {String} jsClass The class to check for.\n * @returns {Boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {String=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {String=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (optJsClass === undefined && optCssClass === undefined) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {String} */ (optJsClass);\n if (optCssClass === undefined) {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!HTMLElement} element The element we wish to upgrade.\n * @param {String=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var ev = document.createEvent('Events');\n ev.initEvent('mdl-componentupgraded', true, true);\n element.dispatchEvent(ev);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!HTMLElement|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (typeof elements.item === 'function') {\n elements = Array.prototype.slice.call(/** @type {Array} */ (elements));\n } else {\n elements = [elements];\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n upgradeElementInternal(element);\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {{constructor: !Function, classAsString: String, cssClass: String, widget: String}} config\n */\n function registerInternal(config) {\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n 'classConstructor': config.constructor,\n 'className': config.classAsString,\n 'cssClass': config.cssClass,\n 'widget': config.widget === undefined ? true : config.widget,\n 'callbacks': []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered.');\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {String} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Finds a created component by a given DOM node.\n *\n * @param {!Node} node\n * @return {*}\n */\n function findCreatedComponentByNodeInternal(node) {\n for (var n = 0; n < createdComponents_.length; n++) {\n var component = createdComponents_[n];\n if (component.element_ === node) {\n return component;\n }\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {*} component\n */\n function deconstructComponentInternal(component) {\n if (component &&\n component[componentConfigProperty_]\n .classConstructor.prototype\n .hasOwnProperty(downgradeMethod_)) {\n component[downgradeMethod_]();\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(\n component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = document.createEvent('Events');\n ev.initEvent('mdl-componentdowngraded', true, true);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n var downgradeNode = function(node) {\n deconstructComponentInternal(findCreatedComponentByNodeInternal(node));\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n componentHandler.upgradeElement =\n componentHandler.register = function() {};\n }\n});\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: String,\n * cssClass: String,\n * widget: String,\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: String,\n * classAsString: String,\n * cssClass: String,\n * widget: String\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n Date.now = function () {\n return new Date().getTime();\n };\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n}\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialButton = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n/**\n * Downgrade the element.\n *\n * @private\n */\nMaterialButton.prototype.mdlDowngrade_ = function () {\n if (this.rippleElement_) {\n this.rippleElement_.removeEventListener('mouseup', this.boundRippleBlurHandler);\n }\n this.element_.removeEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.removeEventListener('mouseleave', this.boundButtonBlurHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialCheckbox = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Downgrade the component.\n *\n * @private\n */\nMaterialCheckbox.prototype.mdlDowngrade_ = function () {\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);\n }\n this.inputElement_.removeEventListener('change', this.boundInputOnChange);\n this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);\n this.element_.removeEventListener('mouseup', this.boundElementMouseUp);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialIconToggle = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialIconToggle.prototype.mdlDowngrade_ = function () {\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);\n }\n this.inputElement_.removeEventListener('change', this.boundInputOnChange);\n this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);\n this.element_.removeEventListener('mouseup', this.boundElementOnMouseUp);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialMenu = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {Number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.getAttribute('disabled') !== null) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {Number} height Height of the clip rectangle\n * @param {Number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = null;\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = null;\n }\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n var cleanup = function () {\n this.element_.removeEventListener('transitionend', cleanup);\n this.element_.removeEventListener('webkitTransitionEnd', cleanup);\n this.element_.classList.remove(this.CssClasses_.IS_ANIMATING);\n }.bind(this);\n // Remove animation class once the transition is done.\n this.element_.addEventListener('transitionend', cleanup);\n this.element_.addEventListener('webkitTransitionEnd', cleanup);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n if (e !== evt && !this.closing_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.transitionDelay = null;\n }\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\n/**\n * Downgrade the component.\n *\n * @private\n */\nMaterialMenu.prototype.mdlDowngrade_ = function () {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n items[i].removeEventListener('click', this.boundItemClick);\n items[i].removeEventListener('keydown', this.boundItemKeydown);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialProgress = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {Number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\n/**\n * Set the current progress of the buffer.\n *\n * @param {Number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialProgress.prototype.mdlDowngrade_ = function () {\n while (this.element_.firstChild) {\n this.element_.removeChild(this.element_.firstChild);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialRadio = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n radios[i].MaterialRadio.updateClasses_();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.onMouseup_.bind(this));\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.onChange_.bind(this));\n this.btnElement_.addEventListener('focus', this.onFocus_.bind(this));\n this.btnElement_.addEventListener('blur', this.onBlur_.bind(this));\n this.element_.addEventListener('mouseup', this.onMouseup_.bind(this));\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialSlider = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function (event) {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\n/**\n * Update slider value.\n *\n * @param {Number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialSlider.prototype.mdlDowngrade_ = function () {\n this.element_.removeEventListener('input', this.boundInputHandler);\n this.element_.removeEventListener('change', this.boundChangeHandler);\n this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.removeEventListener('mousedown', this.boundContainerMouseDownHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialSpinner = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {Number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialSwitch = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function (event) {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n/**\n * Downgrade the component.\n *\n * @private\n */\nMaterialSwitch.prototype.mdlDowngrade_ = function () {\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundMouseUpHandler);\n }\n this.inputElement_.removeEventListener('change', this.boundChangeHandler);\n this.inputElement_.removeEventListener('focus', this.boundFocusHandler);\n this.inputElement_.removeEventListener('blur', this.boundBlurHandler);\n this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialTabs = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialTextfield = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n};\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\n/**\n * Update text field value.\n *\n * @param {String} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n if (value) {\n this.input_.value = value;\n }\n this.updateClasses_();\n};\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialTextfield.prototype.mdlDowngrade_ = function () {\n this.input_.removeEventListener('input', this.boundUpdateClassesHandler);\n this.input_.removeEventListener('focus', this.boundFocusHandler);\n this.input_.removeEventListener('blur', this.boundBlurHandler);\n if (this.boundKeyDownHandler) {\n this.input_.removeEventListener('keydown', this.boundKeyDownHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialTooltip = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = { IS_ACTIVE: 'is-active' };\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n event.stopPropagation();\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n if (left + marginLeft < 0) {\n this.element_.style.left = 0;\n this.element_.style.marginLeft = 0;\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n this.element_.style.top = props.top + props.height + 10 + 'px';\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n window.addEventListener('scroll', this.boundMouseLeaveHandler, false);\n window.addEventListener('touchmove', this.boundMouseLeaveHandler, false);\n};\n/**\n * Handle mouseleave for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseLeave_ = function (event) {\n event.stopPropagation();\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n window.removeEventListener('scroll', this.boundMouseLeaveHandler);\n window.removeEventListener('touchmove', this.boundMouseLeaveHandler, false);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // Tabindex needs to be set for `blur` events to be emitted\n if (!this.forElement_.getAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveHandler = this.handleMouseLeave_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('click', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('blur', this.boundMouseLeaveHandler);\n this.forElement_.addEventListener('touchstart', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveHandler);\n }\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialTooltip.prototype.mdlDowngrade_ = function () {\n if (this.forElement_) {\n this.forElement_.removeEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('click', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('touchstart', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('mouseleave', this.boundMouseLeaveHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialLayout = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n MENU_ICON: 'menu',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Modes.\n *\n * @enum {Number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles toggling of the drawer.\n *\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function () {\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var directChildren = this.element_.childNodes;\n for (var c = 0; c < directChildren.length; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n var eatEvent = function (ev) {\n ev.preventDefault();\n };\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = document.createElement('div');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.textContent = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n this.drawer_.addEventListener('mousewheel', eatEvent);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n obfuscator.addEventListener('mousewheel', eatEvent);\n }\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove buttons depending on scroll position.\n var tabScrollHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabScrollHandler);\n tabScrollHandler();\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n if (tab) {\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialDataTable = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {HTMLElement} checkbox Checkbox that toggles the selection state.\n * @param {HTMLElement} row Row to toggle when checkbox changes.\n * @param {HTMLElement[]} rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < rows.length; i++) {\n el = rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el.MaterialCheckbox.check();\n rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < rows.length; i++) {\n el = rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el.MaterialCheckbox.uncheck();\n rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {HTMLElement} row Row to toggle when checkbox changes.\n * @param {HTMLElement[]} rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, rows) {\n var label = document.createElement('label');\n label.classList.add('mdl-checkbox');\n label.classList.add('mdl-js-checkbox');\n label.classList.add('mdl-js-ripple-effect');\n label.classList.add('mdl-data-table__select');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var rows = this.element_.querySelector('tbody').querySelectorAll('tr');\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n rows[i].insertBefore(td, firstCell);\n }\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow.MaterialRipple = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {String | Number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {String}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n/**\n * Downgrade the component\n *\n * @private\n */\nMaterialRipple.prototype.mdlDowngrade_ = function () {\n this.element_.removeEventListener('mousedown', this.boundDownHandler);\n this.element_.removeEventListener('touchstart', this.boundDownHandler);\n this.element_.removeEventListener('mouseup', this.boundUpHandler);\n this.element_.removeEventListener('mouseleave', this.boundUpHandler);\n this.element_.removeEventListener('touchend', this.boundUpHandler);\n this.element_.removeEventListener('blur', this.boundUpHandler);\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});\n}());\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/inc/themes/material-blue/ldap.inc b/inc/themes/material-blue/ldap.inc new file mode 100644 index 00000000..75fe8108 --- /dev/null +++ b/inc/themes/material-blue/ldap.inc @@ -0,0 +1,261 @@ + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    +
    +
    + +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    + +
      +
    • ldap.example.org
    • +
    • ldap://ldap.example.org
    • +
    • ldaps://ldap.example.org
    • +
    +
    +
    +
    + /> + +
    +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    + +
      +
    • cn=syspass,ou=Users,dc=syspass,o=org
    • +
    • syspass
    • +
    +
    +
    +
    + /> + +
    +
    + +
    help_outline
    +
    +

    + +

    +
    +
    +
    + /> + +
    +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    + +
      +
    • cn=Users,dc=example,dc=org
    • +
    • ou=AdminUsers,dc=example,o=org
    • +
    +
    +
    +
    + /> + +
    +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    + +

    + +

    + +
      +
    • cn=GRP_SPUSERS,cn=Users,dc=example,dc=org
    • +
    • GRP_SPUSERS
    • +
    +
    +
    +
    + /> + +
    +
    + +
    help_outline
    +
    +

    + +

    +
    +
    + +
    + +
    help_outline
    +
    +

    + +

    +
    +
    + +
    + +
    help_outline
    +
    +

    + +

    +
    +
    + +
    + + + +
    + +
    + + + + + + + + + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/inc/themes/material-blue/login.inc b/inc/themes/material-blue/login.inc new file mode 100644 index 00000000..d3861a77 --- /dev/null +++ b/inc/themes/material-blue/login.inc @@ -0,0 +1,102 @@ +
    + +
    +
    + +
    + + +
    +
    + + +
    + + + +
    + + +
    +
    + + +
    + + + + + + + $value): ?> + + + + +
    +
    + +
    +
    + + + +
    + +
    + + +
    + + +
    + + +
    + + + +
    + <?php echo _('Nuevas Características'); ?> + +

    +
    +
    +
      + + ', $feature, ''; ?> + +
    +
    + diff --git a/inc/themes/material-blue/mail.inc b/inc/themes/material-blue/mail.inc new file mode 100644 index 00000000..eb278dad --- /dev/null +++ b/inc/themes/material-blue/mail.inc @@ -0,0 +1,149 @@ + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + /> + +
    +
    + + +
    + /> + +
    +
    + + + +
    + + +
    + /> + +
    +
    + + +
    + /> + +
    +
    + + + +
    + + +
    + /> + +
    +
    + + +
    help_outline
    +
    +

    + +

    +
    +
    + +
    + + + + + + + + + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/inc/themes/material-blue/menu.inc b/inc/themes/material-blue/menu.inc new file mode 100644 index 00000000..e462fbf3 --- /dev/null +++ b/inc/themes/material-blue/menu.inc @@ -0,0 +1,19 @@ +
    + +
    + + + + + + + + + + + +
    +
    +
    diff --git a/inc/themes/material-blue/mgmttabs.inc b/inc/themes/material-blue/mgmttabs.inc new file mode 100644 index 00000000..260dd1e7 --- /dev/null +++ b/inc/themes/material-blue/mgmttabs.inc @@ -0,0 +1,91 @@ + $tab): ?> +
    +
    +
      +
    • + +
    • +
    +
    + + +
    + + +
    +
      + + +
    • + +
    • + + +
    +
    + +
    + + + $tab['props']['tblRowSrcId']; ?> + +
      + $rowSrc): ?> + + +
    • + $imgProp): ?> + $rowName): ?> + + + + + + +
    • + +
    • + $rowSrc) ? $item->$rowSrc : ' '; // Fix height ?> +
    • + + + +
    • + $action): ?> + + + + +
    • +
    + +
    + + +
    + \ No newline at end of file diff --git a/inc/themes/material-blue/passreset.inc b/inc/themes/material-blue/passreset.inc new file mode 100644 index 00000000..b0b81666 --- /dev/null +++ b/inc/themes/material-blue/passreset.inc @@ -0,0 +1,67 @@ +
    + + + +
    +
    + + + +
    + + +
    +
    +
    + + +
    + +
    + + +
    + + + + + +
    + +
    + + + + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/inc/themes/material-blue/profiles.inc b/inc/themes/material-blue/profiles.inc new file mode 100644 index 00000000..9b58133f --- /dev/null +++ b/inc/themes/material-blue/profiles.inc @@ -0,0 +1,182 @@ +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + > + +
    +
    +
    + + + + + + + + +
    +
    +
    + + + + +
    +
    +
    + + + + + + + +
    +
    +
    + +
    +
    + + + user_login, ' | '; ?> + + + + +
    + + + + + + + + + +
    + + +
    +
    + +
    + +
    \ No newline at end of file diff --git a/inc/themes/material-blue/request.inc b/inc/themes/material-blue/request.inc new file mode 100644 index 00000000..aa0306ae --- /dev/null +++ b/inc/themes/material-blue/request.inc @@ -0,0 +1,51 @@ +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    account_name; ?>
    customer_name; ?>
    account_url; ?>
    account_login; ?>
    +
    + + +
    +
    + + + +
    +
    + + + +
    diff --git a/inc/themes/material-blue/search.inc b/inc/themes/material-blue/search.inc new file mode 100644 index 00000000..b7651f5a --- /dev/null +++ b/inc/themes/material-blue/search.inc @@ -0,0 +1,236 @@ +
    + +
    + +
    +
      + +
    • + + + + +
      arrow_drop_down
      +
      arrow_drop_up
      +
    • + +
    +
    + + + + + + + + + +
    \ No newline at end of file diff --git a/inc/themes/material-blue/searchbox.inc b/inc/themes/material-blue/searchbox.inc new file mode 100644 index 00000000..04a03a00 --- /dev/null +++ b/inc/themes/material-blue/searchbox.inc @@ -0,0 +1,92 @@ + + \ No newline at end of file diff --git a/inc/themes/material-blue/security.inc b/inc/themes/material-blue/security.inc new file mode 100644 index 00000000..4d155d4b --- /dev/null +++ b/inc/themes/material-blue/security.inc @@ -0,0 +1,77 @@ + +
    +
    + +
    + +
    + + + + + +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    +
    +
    + + +

    + QR Code + +

    + +

    + +
    + + +
    +
    + +
    warning
    + +
    + + + + + + + +
    +
    + +
    +
    + \ No newline at end of file diff --git a/inc/themes/material-blue/sessionbar.inc b/inc/themes/material-blue/sessionbar.inc new file mode 100644 index 00000000..ce5bdd06 --- /dev/null +++ b/inc/themes/material-blue/sessionbar.inc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/inc/themes/material-blue/tabs-end.inc b/inc/themes/material-blue/tabs-end.inc new file mode 100644 index 00000000..2e74576a --- /dev/null +++ b/inc/themes/material-blue/tabs-end.inc @@ -0,0 +1,13 @@ +
    + + \ No newline at end of file diff --git a/inc/themes/material-blue/tabs-start.inc b/inc/themes/material-blue/tabs-start.inc new file mode 100644 index 00000000..783a9723 --- /dev/null +++ b/inc/themes/material-blue/tabs-start.inc @@ -0,0 +1,9 @@ + +
    +
      + $tab): ?> +
    • + +
    • + +
    \ No newline at end of file diff --git a/inc/themes/material-blue/tokens.inc b/inc/themes/material-blue/tokens.inc new file mode 100644 index 00000000..c70abb67 --- /dev/null +++ b/inc/themes/material-blue/tokens.inc @@ -0,0 +1,72 @@ +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    authtoken_token : ''; ?>
    + + + + + + + +
    +
    +
    + +
    +
    + \ No newline at end of file diff --git a/inc/themes/material-blue/update.inc b/inc/themes/material-blue/update.inc new file mode 100644 index 00000000..cf396477 --- /dev/null +++ b/inc/themes/material-blue/update.inc @@ -0,0 +1,26 @@ + + +
    + + + +    +
    cloud_download
    +
    + +
    check_circle
    + +
    + warning +
    + +
    diff --git a/inc/themes/material-blue/upgrade.inc b/inc/themes/material-blue/upgrade.inc new file mode 100644 index 00000000..a4f6a49b --- /dev/null +++ b/inc/themes/material-blue/upgrade.inc @@ -0,0 +1,29 @@ +
    + + +
    +
    + + +
    + + +
    + + + + +
    + +
    + +
    +
    +
    diff --git a/inc/themes/material-blue/users.inc b/inc/themes/material-blue/users.inc new file mode 100644 index 00000000..f329f769 --- /dev/null +++ b/inc/themes/material-blue/users.inc @@ -0,0 +1,247 @@ +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + " maxlength="80"> + +
    + + + +
    + +
    + " maxlength="80" > + +
    + + + + + + +
    + +
    + +
    + +
    + " maxlength="50"> + +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + +
    + + +
    + + + +
    + + + + + +
    + + + +
    + text; ?> + help): ?> +
    help_outline
    +
    +

    help; ?>

    +
    + +
    + +
    + required) ? 'required' : ''; ?>> + +
    + + value; ?> + +
    + + + + + + + + + +
    + + +
    +
    + +
    + +
    + diff --git a/inc/themes/material-blue/userspass.inc b/inc/themes/material-blue/userspass.inc new file mode 100644 index 00000000..f3587b65 --- /dev/null +++ b/inc/themes/material-blue/userspass.inc @@ -0,0 +1,58 @@ +
    +

    + +
    + + + + + + + + + + + +
    +
    + + +
    +
    +
    + + +
    +
    + + + +
    + +
    + +
    +
    + +
    +
    + + \ No newline at end of file diff --git a/inc/themes/material-blue/wiki.inc b/inc/themes/material-blue/wiki.inc new file mode 100644 index 00000000..cdc7faf9 --- /dev/null +++ b/inc/themes/material-blue/wiki.inc @@ -0,0 +1,161 @@ + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
    help_outline
    +
    +

    + +

    +
    +
    + +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    + +

    + +

    + +

    + https://wiki.example.org/search.php?phrase= +

    +
    +
    +
    + + +
    +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    + +

    + +

    + +

    + https://wiki.example.org/show.php?name= +

    +
    +
    +
    + + +
    +
    + +
    help_outline
    +
    +

    + +

    + +

    + +

    +
    +
    + +
    + + + + + + + + + +
    + +
    + +
    +
    + + \ No newline at end of file diff --git a/inc/tpl/accounts.php b/inc/tpl/accounts.php deleted file mode 100644 index 9501f035..00000000 --- a/inc/tpl/accounts.php +++ /dev/null @@ -1,632 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$action = $data['action']; - -$account = new SP_Account; -$account->accountId = $data['id']; -$account->lastAction = $data['lastaction']; -$account->accountParentId = SP_Common::parseParams('s', 'accParentId', 0); - -$userId = SP_Common::parseParams('s', 'uid', 0); -$userGroupId = SP_Common::parseParams('s', 'ugroup', 0); -$userIsAdminApp = SP_Common::parseParams('s', 'uisadminapp', 0); -$userIsAdminAcc = SP_Common::parseParams('s', 'uisadminacc', 0); - -$changesHash = ''; -$chkUserEdit = ''; -$chkGroupEdit = ''; - -switch ($action) { - case 'accnew': - $savetype = 1; - $title = array('class' => 'titleGreen', 'name' => _('Nueva Cuenta')); - $showform = true; - $nextaction = 'accsearch'; - break; - case "acccopy": - $savetype = 1; - $title = array('class' => 'titleGreen', 'name' => _('Copiar Cuenta')); - $showform = true; - $nextaction = 'acccopy'; - - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); - $accountData = $account->getAccount(); - break; - case "accedit": - $savetype = 2; - $title = array('class' => 'titleOrange', 'name' => _('Editar Cuenta')); - $showform = true; - $nextaction = 'accview'; - - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); - $accountData = $account->getAccount(); - break; - case "accdelete": - $savetype = 0; - $title = array('class' => 'titleRed', 'name' => _('Eliminar Cuenta')); - $showform = false; - - $accountData = $account->getAccount(); - break; - case "accview": - $savetype = 0; - $title = array('class' => 'titleNormal', 'name' => _('Detalles de Cuenta')); - $showform = false; - - $_SESSION["accParentId"] = $data['id']; - $account->incrementViewCounter(); - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); - $accountData = $account->getAccount(); - break; - case "accviewhistory": - $savetype = 5; - $title = array('class' => 'titleNormal', 'name' => _('Detalles de Cuenta')); - $showform = false; - $nextaction = 'accview'; - - $account->accountIsHistory = true; - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); - $accountData = $account->getAccountHistory(); - break; - default : - return; -} - -$gotData = (isset($accountData) && is_object($accountData)); - -if ($data['id'] > 0) { - // Comprobar permisos de acceso - SP_ACL::checkAccountAccess($action, $account->getAccountDataForACL()) || SP_Html::showCommonError('noaccpermission'); - - $changesHash = $account->calcChangesHash(); - $chkUserEdit = ($accountData->account_otherUserEdit) ? 'checked' : ''; - $chkGroupEdit = ($accountData->account_otherGroupEdit) ? 'checked' : ''; -} - -$customersSelProp = array("name" => "customerId", - "id" => "selCustomer", - "class" => "", - "size" => 1, - "label" => "", - "selected" => ($gotData) ? $accountData->account_customerId : '', - "default" => "", - "js" => "", - "attribs" => ""); - -$categoriesSelProp = array("name" => "categoryId", - "id" => "selCategory", - "class" => "", - "size" => 1, - "label" => "", - "selected" => ($gotData) ? $accountData->account_categoryId : '', - "default" => "", - "js" => "", - "attribs" => ""); - -$isModified = ($gotData && $accountData->account_dateEdit && $accountData->account_dateEdit <> '0000-00-00 00:00:00'); -$showHistory = (($action == 'accview' || $action == 'accviewhistory') && SP_ACL::checkUserAccess("accviewhistory") && ($isModified || $action == 'accviewhistory')); -$showDetails = ($action == 'accview' || $action == 'accviewhistory' || $action == 'accdelete'); -$showPass = ($action == "accnew" || $action == 'acccopy'); -$showFiles = (($action == "accedit" || $action == "accview" || $action == "accviewhistory") - && (SP_Util::fileIsEnabled() && SP_ACL::checkUserAccess("accfiles"))); -$showViewPass = (($action == "accview" || $action == "accviewhistory") - && (SP_ACL::checkAccountAccess("accviewpass", $account->getAccountDataForACL()) && SP_ACL::checkUserAccess("accviewpass"))); -$showSave = ($action == "accedit" || $action == "accnew" || $action == "acccopy"); -$showEdit = ($action == "accview" - && SP_ACL::checkAccountAccess("accedit", $account->getAccountDataForACL()) - && SP_ACL::checkUserAccess("accedit") - && !$account->accountIsHistory); -$showEditPass = ($action == "accedit" - && SP_ACL::checkAccountAccess("acceditpass", $account->getAccountDataForACL()) - && SP_ACL::checkUserAccess("acceditpass") - && !$account->accountIsHistory); -$showDelete = ($action == "accdelete" - && SP_ACL::checkAccountAccess("accdelete", $account->getAccountDataForACL()) - && SP_ACL::checkUserAccess("accdelete")); -$showRestore = ($action == "accviewhistory" - && SP_ACL::checkAccountAccess("accedit", $account->getAccountDataForACL($account->accountParentId)) - && SP_ACL::checkUserAccess("accedit")); -$filesDelete = ($action == 'accedit') ? 1 : 0; -$skey = SP_Common::getSessionKey(true); -$maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); -?> - -
    - -
    - -accountIsHistory): ?> - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - user_editName): ?> - - - - -
    - - -account_name; -} -?> -
    - -

    - -customer_name; -} -?> -
    - category_name; -} -?> -
    - - -account_url; -} -?> -
    - - -account_login; -} -?> -
    - - -    - -
    - - -
    - -
    - - -
    -
    - accountIsHistory): ?> - - - - -
    - -
    -
    - upload -
    - - - -
    - "historyId", - "id" => "sel-history", - "class" => "", - "size" => 1, - "label" => "", - "selected" => ($account->accountIsHistory) ? $account->accountId : "", - "default" => "", - "js" => "OnChange=\"if ( $('#sel-history').val() > 0 ) doAction('accviewhistory','accview', $('#sel-history').val());\"", - "attribs" => ''); - - SP_Html::printSelect($account->getAccountHistoryList(), $arrSelectProp); - ?> - -
    account_dateEdit; ?> user_editName; ?>
    - - - - - - - - - - - - - - - - - - - - - 0): ?> - - - - - - 0): ?> - - - - - - - - - - - - - - - -
    account_countView . "(" . $accountData->account_countDecrypt . ")"; ?>
    account_dateAdd ?>
    user_name) ? $accountData->user_name : $accountData->user_login; ?>
    usergroup_name; ?>
    - account_id); - - foreach ($users as $userId => $userName) { - if ($userId != $accountData->account_userId) { - if (in_array($userId, $accountUsers)) { - $accUsers[] = $userName; - } - } - } - - $usersEdit = ($accountData->account_otherUserEdit) ? '(+)' : ''; - echo $usersEdit . ' ' . implode(" | ", $accUsers); - ?> -
    - account_id); - - foreach ($groups as $groupId => $groupName) { - if ($groupId != $accountData->account_userGroupId) { - if (in_array($groupId, $accountGroups)) { - $accGroups[] = $groupName; - } - } - } - - $groupsEdit = ($accountData->account_otherGroupEdit) ? '(+)' : ''; - - echo $groupsEdit . ' ' . implode(" | ", $accGroups); - ?> -
    account_dateEdit; ?>
    user_editName) ? $accountData->user_editName : $accountData->user_editLogin; ?>
    - - -accountIsHistory): ?> -
    - - - - - - -
    - - -
    -
      - accountIsHistory): ?> -
    • - -
    • - -
    • - -
    • - - - -
    • - -
    • - - - -
    • - -
    • -
    • - -
    • - - - -
    • - -
    • - - - -
    • - -
    • - - - -
    • - -
    • - -
    • - -
    • - - - -
    • - -
    • - -
    -
    - - - - - - - - - - \ No newline at end of file diff --git a/inc/tpl/backup.php b/inc/tpl/backup.php deleted file mode 100644 index 24f05b05..00000000 --- a/inc/tpl/backup.php +++ /dev/null @@ -1,86 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$action = $data['action']; -$activeTab = $data['activeTab']; -$onCloseAction = $data['onCloseAction']; - -SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - -$siteName = SP_Html::getAppInfo('appname'); -$backupDir = SP_Init::$SERVERROOT . '/backup'; -$backupPath = SP_Init::$WEBROOT . '/backup'; - -$backupFile = array('absolute' => $backupDir . DIRECTORY_SEPARATOR . $siteName . '.tar.gz', 'relative' => $backupPath . '/' . $siteName . '.tar.gz' -); -$backupDbFile = array('absolute' => $backupDir . DIRECTORY_SEPARATOR . $siteName . '_db.sql', 'relative' => $backupPath . '/' . $siteName . '_db.sql'); - -$lastBackupTime = (file_exists($backupFile['absolute'])) ? _('Último backup') . ": " . date("r", filemtime($backupFile['absolute'])) : _('No se encontraron backups'); -?> - - - - - - - - - - -
    - - - -
    - - - - Backup BBDD - - - Backup - - - -
    - -
    - - - - - - -
    - -
    -
      -
    • - -
    • -
    -
    \ No newline at end of file diff --git a/inc/tpl/categories.php b/inc/tpl/categories.php deleted file mode 100644 index 0383c9b9..00000000 --- a/inc/tpl/categories.php +++ /dev/null @@ -1,72 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$category = SP_Category::getCategoryData($data['itemid']); -$onCloseAction = $data['onCloseAction']; -$activeTab = $data['activeTab']; -?> - -
    -

    - -
    - - - - - - - - - - - - -
    - "/> -
    "/> -
    - - - - "/> - "/> - - - -
    -
    -
    -
      -
    • -
    -
    -
    \ No newline at end of file diff --git a/inc/tpl/config.php b/inc/tpl/config.php deleted file mode 100644 index 559f7101..00000000 --- a/inc/tpl/config.php +++ /dev/null @@ -1,608 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$action = $data['action']; -$activeTab = $data['activeTab']; -$onCloseAction = $data['onCloseAction']; - -SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - -$arrLangAvailable = array( - 'Español' => 'es_ES', - 'English' => 'en_US', - 'Deutsch' => 'de_DE', - 'Magyar' => 'hu_HU', - 'Français' => 'fr_FR', - 'русский' => 'ru_RU' -); - -$arrAccountCount = array(6, 9, 12, 15, 21, 27, 30, 51, 99); -$mailSecurity = array('SSL', 'TLS'); - -$isDemoMode = SP_Util::demoIsEnabled(); - -$isDisabled = ($isDemoMode) ? "DISABLED" : ""; -$chkLog = (SP_Config::getValue('log_enabled')) ? 'checked="checked"' : ''; -$chkDebug = ( SP_Config::getValue('debug') ) ? 'checked="checked"' : ''; -$chkMaintenance = ( SP_Config::getValue('maintenance') ) ? 'checked="checked"' : ''; -$chkUpdates = ( SP_Config::getValue('checkupdates') ) ? 'checked="checked"' : ''; -$chkGlobalSearch = (SP_Config::getValue('globalsearch')) ? 'checked="checked"' : ''; -$chkAccountLink = ( SP_Config::getValue('account_link') ) ? 'checked="checked"' : ''; -$chkFiles = (SP_Config::getValue('files_enabled')) ? 'checked="checked"' : ''; -$chkWiki = (SP_Config::getValue('wiki_enabled')) ? 'checked="checked"' : ''; -$chkLdap = (SP_Config::getValue('ldap_enabled')) ? 'checked="checked"' : ''; -$chkLdapADS = (SP_Config::getValue('ldap_ads')) ? 'checked="checked"' : ''; -$chkMail = (SP_Config::getValue('mail_enabled')) ? 'checked="checked"' : ''; -$chkMailRequests = (SP_Config::getValue('mail_requestsenabled')) ? 'checked="checked"' : ''; -$chkMailAuth = (SP_Config::getValue('mail_authenabled')) ? 'checked="checked"' : ''; -$chkResultsAsCards = (SP_Config::getValue('resultsascards')) ? 'checked="checked"' : ''; -$allowedExts = SP_Config::getValue('files_allowed_exts'); - -$groupsSelProp = array('name' => 'ldap_defaultgroup', - 'id' => 'ldap_defaultgroup', - 'class' => '', - 'size' => 1, - 'label' => '', - 'selected' => SP_Config::getValue('ldap_defaultgroup'), - 'default' => '', - 'js' => '', - 'attribs' => array('required', $isDisabled)); - -$profilesSelProp = array('name' => 'ldap_defaultprofile', - 'id' => 'ldap_defaultprofile', - 'class' => '', - 'size' => 1, - 'label' => '', - 'selected' => SP_Config::getValue('ldap_defaultprofile'), - 'default' => '', - 'js' => '', - 'attribs' => array('required', $isDisabled)); -?> - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - /> -
    - - - - - /> -
    - - - - - /> -
    - - - - - /> -
    - - - - - /> -
    - - - - - /> -
    - - - - - /> -
    - - - - - /> -
    - - - - -
    - - - - /> -
    - - - - -
    - - - - - /> -
    - - -
    - -
    - - - - - - - - - - - - - - - - - - -
    - - - - - /> -
    - - - - -
    - - - - -
    - - - - -
    - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - /> -
    - - - - /> -
    - - - - /> -
    - - - - /> -
    - - - - /> -
    - - - - /> -
    - - - - -
    - - - - -
    - - - - - /> -
    - - - -
    - -
    - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - /> -
    - - - -
    - - - -
    - - - - /> -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - - /> -
    - - - - - - - - - - - -
    - -
    -
      -
    • -
    • -
    -
    - - \ No newline at end of file diff --git a/inc/tpl/customers.php b/inc/tpl/customers.php deleted file mode 100644 index d37efb5f..00000000 --- a/inc/tpl/customers.php +++ /dev/null @@ -1,72 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$customer = SP_Customer::getCustomerData($data['itemid']); -$onCloseAction = $data['onCloseAction']; -$activeTab = $data['activeTab']; -?> - -
    -

    - -
    - - - - - - - - - - - - -
    - "/> -
    "/> -
    - - - - "/> - "/> - - - -
    -
    -
    -
      -
    • -
    -
    -
    \ No newline at end of file diff --git a/inc/tpl/editpass.php b/inc/tpl/editpass.php deleted file mode 100644 index 3c3a3379..00000000 --- a/inc/tpl/editpass.php +++ /dev/null @@ -1,99 +0,0 @@ -. - * - */ -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$account = new SP_Account; -$account->accountId = $data['id']; -$account->lastAction = $data['lastaction']; -$accountData = $account->getAccount(); - -(!SP_ACL::checkAccountAccess("acceditpass", $account->getAccountDataForACL()) || !SP_ACL::checkUserAccess("acceditpass")) && SP_Html::showCommonError('noaccpermission'); -?> - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    account_name; ?>
    customer_name; ?>
    account_url; ?>
    account_login; ?>
    - - -    - -
    - -
    - - - - - -
    - -
    -
      -
    • - -
    • -
    • - -
    • -
    -
    - \ No newline at end of file diff --git a/inc/tpl/error.php b/inc/tpl/error.php deleted file mode 100644 index 5dcb0b42..00000000 --- a/inc/tpl/error.php +++ /dev/null @@ -1,53 +0,0 @@ -. -* -*/ - -?> - -
    - - - - - - 0) { - echo '
      '; - - foreach ($errors as $err) { - if (is_array($err)) { - echo '
    • '; - echo '' . $err['description'] . ''; - echo ($err['hint']) ? '

      ' . $err['hint'] . '

      ' : ''; - echo '
    • '; - } - } - echo '
    '; - } - ?> -
    \ No newline at end of file diff --git a/inc/tpl/eventlog.php b/inc/tpl/eventlog.php deleted file mode 100644 index f8192858..00000000 --- a/inc/tpl/eventlog.php +++ /dev/null @@ -1,133 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$startTime = microtime(); -$rowClass = "row_even"; -$isDemoMode = SP_Util::demoIsEnabled(); -$start = (isset($data['start'])) ? (int)$data['start'] : 0; - -$events = SP_Log::getEvents($start); -?> - -
    - -
    - -' . _('No se encontraron registros') . '
    '); -} - -$numRows = SP_Log::$numRows; -?> - -
    - - - - - - - - - - - - - log_description) : preg_replace("/\d+\.\d+\.\d+\.\d+/", "*.*.*.*", utf8_decode($log->log_description)); - ?> - - - - - - - - - - - -
    - - - - - - - - - - - -
    - log_id; ?> - - date; ?> - - log_action); ?> - - log_login); ?> - - log_ipAddress) : $log->log_ipAddress; ?> - - ', $text); - $text = preg_replace('/(UPDATE|DELETE|TRUNCATE|INSERT|SELECT|WHERE|LEFT|ORDER|LIMIT|FROM)/', '
    \\1', $text); - } - - if (strlen($text) >= 150) { - echo wordwrap($text, 150, '
    ', true); - } else { - echo $text . '
    '; - } - } - ?> -
    -
    - - - -
    -
      -
    • - -
    • -
    -
    \ No newline at end of file diff --git a/inc/tpl/groups.php b/inc/tpl/groups.php deleted file mode 100644 index 9f095ba0..00000000 --- a/inc/tpl/groups.php +++ /dev/null @@ -1,68 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$group = SP_Groups::getGroupData($data['itemid']); -$onCloseAction = $data['onCloseAction']; -$activeTab = $data['activeTab']; -?> - -
    -

    -
    - - - - - - - - - - - - -
    - " /> -
    " /> -
    - - - - " /> - " /> - - - -
    -
    -
    -
      -
    • -
    -
    -
    \ No newline at end of file diff --git a/inc/tpl/install.php b/inc/tpl/install.php deleted file mode 100644 index 6360365a..00000000 --- a/inc/tpl/install.php +++ /dev/null @@ -1,206 +0,0 @@ -. - * - */ -$modulesErrors = SP_Util::checkModules(); -$versionErrors = SP_Util::checkPhpVersion(); -$resInstall = array(); -$isCompleted = false; - -if (isset($_POST['install']) && $_POST['install'] == 'true') { - $resInstall = SP_Installer::install($_POST); - - if (count($resInstall) == 0) { - $resInstall[] = array( - 'type' => 'ok', - 'description' => _('Instalación finalizada'), - 'hint' => _('Pulse aquí para acceder') - ); - $isCompleted = true; - } -} -?> - -
    - - - 'warning', - 'description' => _('La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)'), - 'hint' => _('Actualice la versión de PHP para usar sysPass de forma segura')); - } - if (!SP_Util::secureRNG_available()) { - $securityErrors[] = array('type' => 'warning', - 'description' => _('No se encuentra el generador de números aleatorios.'), - 'hint' => _('Sin esta función un atacante puede utilizar su cuenta al resetear la clave')); - } - - $errors = array_merge($modulesErrors, $securityErrors, $resInstall); - - if (count($errors) > 0) { - echo '
      '; - - foreach ($errors as $err) { - if (is_array($err)) { - echo '
    • '; - echo '' . $err['description'] . ''; - echo ($err['hint']) ? '

      ' . $err['hint'] . '

      ' : ''; - echo '
    • '; - } - } - echo '
    '; - } - - if ($isCompleted === false): - ?> - -
    - - - -
    - -

    - - -

    - -

    - <?php echo _('Mostrar Clave'); ?> - - -

    -
    - -
    - -

    - <?php echo _('Mostrar Clave'); ?> - - -

    -
    - -
    - - - - -

    - - -

    - -

    - <?php echo _('Mostrar Clave'); ?> - -

    - -

    - - -

    - -

    - - -

    - -
    - -

    - - - /> -

    -
    - -
    -
    - -
    - - \ No newline at end of file diff --git a/inc/tpl/login.php b/inc/tpl/login.php deleted file mode 100644 index 4aeffba8..00000000 --- a/inc/tpl/login.php +++ /dev/null @@ -1,113 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -?> - -
    - -
    -
    - -
    -
    - - -
    -
    - - - - - - 0): ?> - $value): ?> - - - -
    -
    - - -
    - -
    - -
    - - -
    - - - - -
    - - -'; - echo '' . _('Nuevas Características') . ''; - echo '

    ' . _('Nuevas Características') . '

    '; - echo '
'; - - echo '
'; - echo '
    '; - foreach ($newFeatures as $feature) { - echo '
  • ' . $feature . '
  • '; - } - echo '
'; - echo '
'; -} -?> \ No newline at end of file diff --git a/inc/tpl/main.php b/inc/tpl/main.php deleted file mode 100644 index da88feb8..00000000 --- a/inc/tpl/main.php +++ /dev/null @@ -1,75 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$startTime = microtime(); - -$adminApp = ( isset($_SESSION["uisadminapp"]) && $_SESSION["uisadminapp"] == 1 ) ? "(A+)" : ""; -$userId = ( isset($_SESSION["uid"]) ) ? $_SESSION["uid"] : 0; -$userLogin = (isset($_SESSION["ulogin"]) && !empty($_SESSION["ulogin"])) ? strtoupper($_SESSION["ulogin"]) : ''; -$userName = (isset($_SESSION["uname"]) && !empty($_SESSION["uname"])) ? $_SESSION["uname"] : strtoupper($userLogin); -$userGroup = ( isset($_SESSION["ugroupn"]) ) ? $_SESSION["ugroupn"] : ''; - -$strUser = "$userName ($userGroup) " . $adminApp; -$chpass = ( ! isset($_SESSION['uisldap']) || $_SESSION['uisldap'] == 0 ) ? '' : ''; - -?> - - - -
-
    - 'accsearch', 'title' => _('Buscar'), 'img' => 'search.png', 'checkaccess' => 0), - array('name' => 'accnew', 'title' => _('Nueva Cuenta'), 'img' => 'add.png', 'checkaccess' => 1), - array('name' => 'usersmenu', 'title' => _('Gestión de Usuarios'), 'img' => 'users.png', 'checkaccess' => 1), - array('name' => 'appmgmtmenu', 'title' => _('Gestión de Clientes y Categorías'), 'img' => 'appmgmt.png', 'checkaccess' => 1), - array('name' => 'configmenu', 'title' => _('Configuración'), 'img' => 'config.png', 'checkaccess' => 1), - array('name' => 'eventlog', 'title' => _('Registro de Eventos'), 'img' => 'log.png', 'checkaccess' => 1) - ); - - foreach ($actions as $action) { - if ($action['checkaccess']) { - if (!SP_ACL::checkUserAccess($action['name'])) { - continue; - } - } - if ($action['name'] == 'eventlog' && !SP_Util::logIsEnabled()) { - continue; - } - - echo '
  • '; - } - ?> -
-
-
diff --git a/inc/tpl/masterpass.php b/inc/tpl/masterpass.php deleted file mode 100644 index 20943d12..00000000 --- a/inc/tpl/masterpass.php +++ /dev/null @@ -1,181 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$action = $data['action']; -$activeTab = $data['activeTab']; -$onCloseAction = $data['onCloseAction']; - -SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); - -$lastUpdateMPass = SP_Config::getConfigValue("lastupdatempass"); -$lastUpdateFirstLoginPass = SP_Config::getConfigValue("firstlogin_passtime"); -?> - -
- - 0): ?> - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - - -
- - - -
- - - - - -
- - - <?php echo _('Atención'); ?> - -
- <?php echo _('Atención'); ?> - -
- <?php echo _('Atención'); ?> - -
-
- - -
- - - - - -
-
-
    -
  • - -
  • -
-
- -
- -
- -
- - - - - - - - - -
- - - 0) { - echo date("r", $lastUpdateFirstLoginPass); - } else { - echo _('No generada'); - } - ?> -
- - - 0) { - echo date("r", $lastUpdateFirstLoginPass + (24 * 3600)); - } else { - echo _('No generada'); - } - ?> -
- - - - - -
-
-
    -
  • - -
  • -
-
- - \ No newline at end of file diff --git a/inc/tpl/migrate.php b/inc/tpl/migrate.php deleted file mode 100644 index 72031f11..00000000 --- a/inc/tpl/migrate.php +++ /dev/null @@ -1,136 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$activeTab = $data['activeTab']; -$onCloseAction = $data['onCloseAction']; -?> - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - -
- - - - -
- - - - -
- - - <?php echo _('Atención'); ?> - -

- - -
- - - - - - -
- -
-
    -
  • - -
  • -
-
- -
- -
- - - - - - - -
- - - -
- -
-
- upload -
-
- - \ No newline at end of file diff --git a/inc/tpl/passreset.php b/inc/tpl/passreset.php deleted file mode 100644 index 464a93bb..00000000 --- a/inc/tpl/passreset.php +++ /dev/null @@ -1,97 +0,0 @@ -. - * - */ - - -$action = SP_Common::parseParams('g', 'a'); -$hash = SP_Common::parseParams('g', 'h'); -$time = SP_Common::parseParams('g', 't'); -$forced = SP_Common::parseParams('g', 'f', 0); - -$passReset = ($action === 'passreset' && $hash && $time); -?> - -
- - - - - - -
-
- - -

- -

-

- -

- -

- - -

-

- - -

- - - - - -
- -
- - - - - - -
-
- -
\ No newline at end of file diff --git a/inc/tpl/profiles.php b/inc/tpl/profiles.php deleted file mode 100644 index 760fcd28..00000000 --- a/inc/tpl/profiles.php +++ /dev/null @@ -1,142 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$profile = SP_Profiles::getProfileData($data['itemid']); -$onCloseAction = $data['onCloseAction']; -$activeTab = $data['activeTab']; - -?> -
-

-
- - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - /> - - /> -
- - /> - - /> -
- - /> - - /> -
- - /> - - /> -
-
-
- - /> - - /> -
- - /> -
-
-
- - /> - - /> -
- - /> - - /> -
- - /> -
-
-
- - /> -
-
- - - - - " /> - - - - -
-
-
-
    -
  • -
-
-
\ No newline at end of file diff --git a/inc/tpl/request.php b/inc/tpl/request.php deleted file mode 100644 index 644411ba..00000000 --- a/inc/tpl/request.php +++ /dev/null @@ -1,80 +0,0 @@ -. - * - */ -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$account = new SP_Account; -$account->accountId = $data['id']; -$accountData = $account->getAccount(); - -?> - -
- -
- - - - - - - - - - - - - - - - - - - - - - - -
account_name; ?>
customer_name; ?>
account_url; ?>
account_login; ?>
- -
- - - -
- -
-
    -
  • - -
  • -
  • - -
  • -
-
\ No newline at end of file diff --git a/inc/tpl/search.php b/inc/tpl/search.php deleted file mode 100644 index 07f00183..00000000 --- a/inc/tpl/search.php +++ /dev/null @@ -1,110 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$customersSelProp = array("name" => "customer", - "id" => "selCustomer", - "class" => "select-box", - "size" => 1, - "label" => "", - "selected" => SP_Common::parseParams('s', 'accountSearchCustomer', 0), - "default" => "", - "js" => 'OnChange="clearSearch(1); accSearch(0)"', - "attribs" => ""); - -$categoriesSelProp = array("name" => "category", - "id" => "selCategory", - "class" => "select-box", - "size" => 1, - "label" => "", - "selected" => SP_Common::parseParams('s', 'accountSearchCategory', 0), - "default" => "", - "js" => 'OnChange="clearSearch(1); accSearch(0)"', - "attribs" => ""); - -$isAdmin = ($_SESSION["uisadminapp"] || $_SESSION["uisadminacc"]); -$globalSearch = SP_Config::getValue('globalsearch', 0); -$chkGlobalSearch = SP_Common::parseParams('s', 'accountGlobalSearch', 0); -$searchStart = SP_Common::parseParams('s', 'accountSearchStart', 0); -$searchKey = SP_Common::parseParams('s', 'accountSearchKey', 0); -$searchOrder = SP_Common::parseParams('s', 'accountSearchOrder', 0); -?> -
- - - - - -
- - - - /> - - - - - - - - -
-
- -
-
- - -
\ No newline at end of file diff --git a/inc/tpl/upgrade.php b/inc/tpl/upgrade.php deleted file mode 100644 index fe9fef66..00000000 --- a/inc/tpl/upgrade.php +++ /dev/null @@ -1,58 +0,0 @@ -. - * - */ - -$action = SP_Common::parseParams('g', 'a'); -$time = SP_Common::parseParams('g', 't'); - -$upgrade = ($action === 'upgrade'); -?> - -
- - - - - -
-
- -

- -

- - - -
- -
- -
-
-
diff --git a/inc/tpl/users.php b/inc/tpl/users.php deleted file mode 100644 index 7b4bbd67..00000000 --- a/inc/tpl/users.php +++ /dev/null @@ -1,242 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -$activeTab = $data['activeTab']; -$onCloseAction = $data['onCloseAction']; -$isView = $data['view']; - -$user = SP_Users::getUserData($data['itemid']); - -$isDemo = SP_Util::demoIsEnabled(); -$isDisabled = ($isDemo || $isView) ? 'disabled' : ''; - -$profilesSelProp = array('name' => 'profileid', - 'id' => 'selProfile', - 'class' => '', - 'size' => 1, - 'label' => '', - 'selected' => $user['user_profileId'], - 'default' => '', - 'js' => '', - 'attribs' => array('required', $isDisabled)); - -$groupsSelProp = array('name' => 'groupid', - 'id' => 'selGroup', - 'class' => '', - 'size' => 1, - 'label' => '', - 'selected' => $user['user_groupId'], - 'default' => '', - 'js' => '', - 'attribs' => array('required', $isDisabled)); - -$ro = ( $user['checks']['user_isLdap'] ) ? "READONLY" : ""; -?> - -
-

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - /> - - - - -
- -
- -
- - - -
- - -
- - -
- -
-
- - - /> - - /> - -
- - /> - - /> -
-
- - - - - - - - - - -
- - -
-
-
    -
  • -
-
- -
- \ No newline at end of file diff --git a/inc/users.class.php b/inc/users.class.php deleted file mode 100644 index e28b2093..00000000 --- a/inc/users.class.php +++ /dev/null @@ -1,1109 +0,0 @@ -. - * - */ - -defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); - -/** - * Esta clase es la encargada de realizar las operaciones osbre los usuarios de sysPass - */ -class SP_Users -{ - const USER_LOGIN_EXIST = 1; - const USER_MAIL_EXIST = 2; - const MAX_PASS_RECOVER_TIME = 3600; - const MAX_PASS_RECOVER_LIMIT = 3; - - static $queryRes; - static $querySelect; - static $queryFrom; - static $queryWhere; - static $queryCount; - - var $userId; - var $userName; - var $userGroupId; - var $userGroupName; - var $userLogin; - var $userPass; - var $userEmail; - var $userNotes; - var $userProfileId; - var $userIsAdminApp; - var $userIsAdminAcc; - var $userIsDisabled; - var $userIsLdap; - var $userChangePass; - var $queryLastId; - - /** - * Obtener los datos de un usuario. - * - * @param int $id con el Id del usuario a consultar - * @return array con el nombre de la columna como clave y los datos como valor - */ - public static function getUserData($id = 0) - { - // Array con los nombres de los campos para devolverlos con el formato correcto - // Es necesario que coincidan con las columnas de la tabla - $user = array('user_id' => 0, - 'user_name' => '', - 'user_login' => '', - 'user_profileId' => 0, - 'user_groupId' => 0, - 'user_email' => '', - 'user_notes' => '', - 'user_isAdminApp' => 0, - 'user_isAdminAcc' => 0, - 'user_isLdap' => 0, - 'user_isDisabled' => 0, - 'user_isChangePass' => 0, - 'user_count' => 0, - 'user_lastLogin' => '', - 'user_lastUpdate' => '', - 'user_lastUpdateMPass' => 0, - 'action' => 1, - 'checks' => array( - 'user_isLdap' => 0, - 'user_isAdminApp' => 0, - 'user_isAdminAcc' => 0, - 'user_isDisabled' => 0, - 'user_isChangePass' => 0 - ) - ); - - if ($id > 0) { - $users = self::getUsers($id); - - if ($users) { - foreach ($users[0] as $name => $value) { - // Check if field is a checkbox one - if (preg_match('/^.*_is[A-Z].*$/', $name)) { - $user['checks'][$name] = ((int)$value === 1) ? 'CHECKED' : ''; - } - - if ($value === '0000-00-00 00:00:00' || $value === '1970-01-01 01:00:00') { - $value = _('N/D'); - } - - $user[$name] = $value; - } - $user['action'] = 2; - } - } - - return $user; - } - - /** - * Establecer las variables para la consulta de usuarios. - * - * @param int $itemId opcional, con el Id del usuario a consultar - * @return false|array con la lista de usuarios - */ - public static function getUsers($itemId = NULL) - { - if (!is_null($itemId)) { - $query = "SELECT user_id," - . "user_name," - . "user_login," - . "user_profileId," - . "user_groupId," - . "user_email," - . "user_notes," - . "user_isAdminApp," - . "user_isAdminAcc," - . "user_isLdap," - . "user_isDisabled," - . "user_isChangePass," - . "user_count," - . "user_lastLogin," - . "user_lastUpdate, " - . "FROM_UNIXTIME(user_lastUpdateMPass) as user_lastUpdateMPass " - . "FROM usrData " - . "LEFT JOIN usrProfiles ON user_profileId = userprofile_id " - . "LEFT JOIN usrGroups ON usrData.user_groupId = usergroup_id " - . "WHERE user_id = " . (int)$itemId . " LIMIT 1"; - } else { - $query = "SELECT user_id," - . "user_name," - . "user_login," - . "userprofile_name," - . "usergroup_name," - . "user_isAdminApp," - . "user_isAdminAcc," - . "user_isLdap," - . "user_isDisabled," - . "user_isChangePass " - . "FROM usrData " - . "LEFT JOIN usrProfiles ON user_profileId = userprofile_id " - . "LEFT JOIN usrGroups ON usrData.user_groupId = usergroup_id "; - - $query .= ($_SESSION["uisadminapp"] == 0) ? "WHERE user_isAdminApp = 0 ORDER BY user_name" : "ORDER BY user_name"; - } - - $queryRes = DB::getResults($query, __FUNCTION__, true); - - if ($queryRes === false) { - return false; - } - - return $queryRes; - } - - /** - * Comprobar si un usuario está migrado desde phpPMS. - * - * @param string $userLogin con el login del usuario - * @return bool - */ - public static function checkUserIsMigrate($userLogin) - { - $query = "SELECT user_isMigrate " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - if ($queryRes->user_isMigrate == 0) { - return false; - } - - return true; - } - - /** - * Actualizar la clave de un usuario desde phpPMS. - * - * @param string $userLogin con el login del usuario - * @param string $userPass con la clave del usuario - * @return bool - * - * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS - */ - public static function migrateUser($userLogin, $userPass) - { - $passdata = SP_Users::makeUserPass($userPass); - - $query = "UPDATE usrData SET " - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_lastUpdate = NOW()," - . "user_isMigrate = 0 " - . "WHERE user_login = '" . DB::escape($userLogin) . "' " - . "AND user_isMigrate = 1 " - . "AND (user_pass = SHA1(CONCAT(user_hashSalt,'" . DB::escape($userPass) . "')) " - . "OR user_pass = MD5('" . DB::escape($userPass) . "')) LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - $message['action'] = __FUNCTION__; - $message['text'][] = _('Usuario actualizado'); - $message['text'][] = 'Login: ' . $userLogin; - - SP_Log::wrLogInfo($message); - return true; - } - - /** - * Crear la clave de un usuario. - * - * @param string $userPass con la clave del usuario - * @return array con la clave y salt del usuario - */ - private static function makeUserPass($userPass) - { - $salt = SP_Crypt::makeHashSalt(); - $userPass = sha1($salt . $userPass); - - return array('salt' => DB::escape($salt), 'pass' => DB::escape($userPass)); - } - - /** - * Obtener el login de usuario a partir del Id. - * - * @param int $id con el id del usuario - * @return string con el login del usuario - */ - public static function getUserLoginById($id) - { - $query = "SELECT user_login " - . "FROM usrData " - . "WHERE user_id = " . (int)$id . " LIMIT 1"; - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return $queryRes->user_login; - } - - /** - * Comprobar si el usuario tiene actualizada la clave maestra actual. - * - * @param string $login opcional con el login del usuario - * @return bool - */ - public static function checkUserUpdateMPass($login = '') - { - if (isset($login)) { - $userId = self::getUserIdByLogin($login); - } - - if (isset($_SESSION["uid"])) { - $userId = $_SESSION["uid"]; - } - - if (!isset($userId)) { - return false; - } - - $configMPassTime = SP_Config::getConfigValue('lastupdatempass'); - - if ($configMPassTime === false) { - return false; - } - - $query = 'SELECT user_lastUpdateMPass ' - . 'FROM usrData ' - . 'WHERE user_id = ' . (int)$userId . ' LIMIT 1'; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - if ($configMPassTime > $queryRes->user_lastUpdateMPass) { - return false; - } - - return true; - } - - /** - * Obtener el Id de usuario a partir del login. - * - * @param string $login con el login del usuario - * @return false|int con el Id del usuario - */ - public static function getUserIdByLogin($login) - { - $query = "SELECT user_id " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($login) . "' LIMIT 1"; - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return (int)$queryRes->user_id; - } - - /** - * Obtiene el listado con el nombre de los usuarios de una cuenta. - * - * @param int $accountId con el id de la cuenta - * @return false|array con los nombres de los usuarios ordenados - */ - public static function getUsersNameForAccount($accountId) - { - $query = "SELECT user_id," - . "user_login " - . "FROM accUsers " - . "JOIN usrData ON user_Id = accuser_userId " - . "WHERE accuser_accountId = " . (int)$accountId; - - $queryRes = DB::getResults($query, __FUNCTION__, true); - - if ($queryRes === false) { - return false; - } - - foreach ($queryRes as $users) { - $usersName[$users->user_id] = $users->user_login; - } - - asort($usersName, SORT_STRING); - - return $usersName; - } - - /** - * Actualizar la asociación de grupos con cuentas. - * - * @param int $accountId con el Id de la cuenta - * @param array $usersId con los usuarios de la cuenta - * @return bool - */ - public static function updateUsersForAccount($accountId, $usersId) - { - if (self::deleteUsersForAccount($accountId, $usersId)) { - return self::addUsersForAccount($accountId, $usersId); - } - - return false; - } - - /** - * Eliminar la asociación de grupos con cuentas. - * - * @param int $accountId con el Id de la cuenta - * @param array $usersId opcional con los grupos de la cuenta - * @return bool - */ - public static function deleteUsersForAccount($accountId, $usersId = NULL) - { - $queryExcluded = ''; - - // Excluimos los grupos actuales - if (is_array($usersId)) { - $queryExcluded = ' AND accuser_userId NOT IN (' . implode(',', $usersId) . ')'; - } - - $query = 'DELETE FROM accUsers ' - . 'WHERE accuser_accountId = ' . (int)$accountId . $queryExcluded; - - //error_log($query); - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Crear asociación de grupos con cuentas. - * - * @param int $accountId con el Id de la cuenta - * @param array $usersId con los grupos de la cuenta - * @return bool - */ - public static function addUsersForAccount($accountId, $usersId) - { - if (!is_array($usersId)){ - return true; - } - - $values = ''; - - // Obtenemos los grupos actuales - $currentUsers = self::getUsersForAccount($accountId); - - if (is_array($currentUsers)) { - foreach ($currentUsers as $user) { - $usersExcluded[] = $user->accuser_userId; - } - } - - foreach ($usersId as $userId) { - // Excluimos los usuarios actuales - if (is_array($usersExcluded) && in_array($userId, $usersExcluded)) { - continue; - } - - $values[] = '(' . $accountId . ',' . $userId . ')'; - } - - if (!is_array($values)) { - return true; - } - - $query = 'INSERT INTO accUsers (accuser_accountId, accuser_userId) ' - . 'VALUES ' . implode(',', $values); - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Obtiene el listado de grupos de una cuenta. - * - * @param int $accountId con el id de la cuenta - * @return object con el Id de grupo - */ - public static function getUsersForAccount($accountId) - { - $query = "SELECT accuser_userId " - . "FROM accUsers " - . "WHERE accuser_accountId = " . (int)$accountId; - - $queryRes = DB::getResults($query, __FUNCTION__, true); - - if ($queryRes === false) { - return false; - } - - return $queryRes; - } - - /** - * Comprobar si un usuario y email existen. - * - * @param string $login con el login del usuario - * @param string $email con el email del usuario - * @return bool - */ - public static function checkUserMail($login, $email) - { - $userId = self::getUserIdByLogin($login); - - return ($userId && self::getUserEmail($userId) == $email); - } - - /** - * Obtener el email de un usuario. - * - * @param int $userId con el Id del usuario - * @return string con el email del usuario - */ - public static function getUserEmail($userId) - { - $query = "SELECT user_email " - . "FROM usrData " - . "WHERE user_id = " . (int)$userId . " " - . "AND user_email IS NOT NULL LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return $queryRes->user_email; - } - - /** - * Insertar un registro de recuperación de clave. - * - * @param string $login con el login del usuario - * @param string $hash con el hash para el cambio - * @return bool - */ - public static function addPassRecover($login, $hash) - { - $userId = self::getUserIdByLogin($login); - - $query = "INSERT INTO usrPassRecover SET " - . "userpassr_userId = " . $userId . "," - . "userpassr_hash = '" . DB::escape($hash) . "'," - . "userpassr_date = UNIX_TIMESTAMP()," - . "userpassr_used = 0"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Comprobar si un usuario está deshabilitado. - * - * @param string $userLogin con el login del usuario - * @return bool - */ - public static function checkUserIsDisabled($userLogin) - { - $query = "SELECT user_isDisabled " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - if ($queryRes->user_isDisabled == 0) { - return false; - } - - return true; - } - - /** - * Comprobar si un usuario autentifica mediante LDAP - * . - * - * @param string $userLogin con el login del usuario - * @return bool - */ - public static function checkUserIsLDAP($userLogin) - { - $query = "SELECT user_isLdap " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - if ($queryRes->user_isLdap == 0) { - return false; - } - - return true; - } - - /** - * Comprobar el hash de recuperación de clave. - * - * @param string $hash con el hash de recuperación - * @return int con el Id del usuario - */ - public static function checkHashPassRecover($hash) - { - $query = "SELECT userpassr_userId FROM usrPassRecover " - . "WHERE userpassr_hash = '" . DB::escape($hash) . "' " - . "AND userpassr_used = 0 " - . "AND userpassr_date >= " . (time() - self::MAX_PASS_RECOVER_TIME) . " " - . "ORDER BY userpassr_date DESC LIMIT 1"; - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return $queryRes->userpassr_userId; - } - - /** - * Marcar como usado el hash de recuperación de clave. - * - * @param string $hash con el hash de recuperación - * @return bool - */ - public static function updateHashPassRecover($hash) - { - $query = "UPDATE usrPassRecover SET userpassr_used = 1 " . - "WHERE userpassr_hash = '" . DB::escape($hash) . "'"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Comprobar el límite de recuperaciones de clave. - * - * @param string $login con el login del usuario - * @return bool - */ - public static function checkPassRecoverLimit($login) - { - $query = "SELECT COUNT(*) as requests " . - "FROM usrPassRecover " . - "WHERE userpassr_userId = " . self::getUserIdByLogin($login) . " " . - "AND userpassr_used = 0 " . - "AND userpassr_date >= " . (time() - self::MAX_PASS_RECOVER_TIME); - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return ($queryRes->requests >= self::MAX_PASS_RECOVER_LIMIT); - } - - /** - * Obtener los datos de un usuario desde la BBDD. - * Esta función obtiene los datos de un usuario y los guarda en las variables de la clase. - * - * @return bool - */ - public function getUserInfo() - { - $query = "SELECT user_id," - . "user_name," - . "user_groupId," - . "user_login," - . "user_email," - . "user_notes," - . "user_count," - . "user_profileId," - . "usergroup_name," - . "user_isAdminApp," - . "user_isAdminAcc," - . "user_isLdap," - . "user_isDisabled," - . "user_isChangePass " - . "FROM usrData " - . "LEFT JOIN usrGroups ON user_groupId = usergroup_id " - . "LEFT JOIN usrProfiles ON user_profileId = userprofile_id " - . "WHERE user_login = '" . DB::escape($this->userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - $this->userId = (int)$queryRes->user_id; - $this->userName = $queryRes->user_name; - $this->userGroupId = (int)$queryRes->user_groupId; - $this->userGroupName = $queryRes->usergroup_name; - $this->userEmail = $queryRes->user_email; - $this->userProfileId = (int)$queryRes->user_profileId; - $this->userIsAdminApp = (int)$queryRes->user_isAdminApp; - $this->userIsAdminAcc = (int)$queryRes->user_isAdminAcc; - $this->userIsLdap = (int)$queryRes->user_isLdap; - $this->userChangePass = (int)$queryRes->user_isChangePass; - - return true; - } - - /** - * Comprobar si un usuario/email existen en la BBDD. - * - * @return false|int Devuelve bool si error y int si existe el usuario/email - */ - public function checkUserExist() - { - $userLogin = strtoupper($this->userLogin); - $userEmail = strtoupper($this->userEmail); - - $query = "SELECT user_login, user_email " - . "FROM usrData " - . "WHERE (UPPER(user_login) = '" . DB::escape($userLogin) . "' " - . "OR UPPER(user_email) = '" . DB::escape($userEmail) . "') " - . "AND user_id != " . (int)$this->userId; - $queryRes = DB::getResults($query, __FUNCTION__, true); - - if ($queryRes === false) { - return false; - } - - foreach ($queryRes as $userData) { - $resULogin = strtoupper($userData->user_login); - $resUEmail = strtoupper($userData->user_email); - - if ($resULogin == $userLogin) { - return SP_Users::USER_LOGIN_EXIST; - } elseif ($resUEmail == $userEmail) { - return SP_Users::USER_MAIL_EXIST; - } - } - } - - /** - * Comprobar si los datos del usuario de LDAP están en la BBDD. - * - * @return bool - */ - public function checkLDAPUserInDB() - { - $query = "SELECT user_login " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($this->userLogin) . "' LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - if (count(DB::$last_result) == 0) { - return false; - } - - return true; - } - - /** - * Crear un nuevo usuario en la BBDD con los datos de LDAP. - * Esta función crea los usuarios de LDAP en la BBDD para almacenar infomación del mismo - * y utilizarlo en caso de fallo de LDAP - * - * @return bool - */ - public function newUserLDAP() - { - $passdata = SP_Users::makeUserPass($this->userPass); - - $query = "INSERT INTO usrData SET " - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_groupId = " . SP_Config::getValue('ldap_defaultgroup', 0) . "," - . "user_login = '" . DB::escape($this->userLogin) . "'," - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_notes = 'LDAP'," - . "user_profileId = " . SP_Config::getValue('ldap_defaultprofile', 0) . "," - . "user_isLdap = 1," - . "user_isDisabled = 0"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - $message['action'] = _('Activación Cuenta'); - $message['text'][] = _('Su cuenta está pendiente de activación.'); - $message['text'][] = _('En breve recibirá un email de confirmación.'); - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message, $this->userEmail, false); - - return true; - } - - /** - * Crear un usuario. - * - * @return bool - */ - public function addUser() - { - $passdata = SP_Users::makeUserPass($this->userPass); - - $query = "INSERT INTO usrData SET " - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_login = '" . DB::escape($this->userLogin) . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_notes = '" . DB::escape($this->userNotes) . "'," - . "user_groupId = " . (int)$this->userGroupId . "," - . "user_profileId = " . (int)$this->userProfileId . "," - . "user_mPass = ''," - . "user_mIV = ''," - . "user_isAdminApp = " . (int)$this->userIsAdminApp . "," - . "user_isAdminAcc = " . (int)$this->userIsAdminAcc . "," - . "user_isDisabled = " . (int)$this->userIsDisabled . "," - . "user_isChangePass = " . (int)$this->userChangePass . "," - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_isLdap = 0"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - $this->queryLastId = DB::$lastId; - - $message['action'] = _('Nuevo Usuario'); - $message['text'][] = SP_Html::strongText(_('Usuario') . ': ') . $this->userName . ' (' . $this->userLogin . ')'; - - if ($this->userChangePass) { - if (!SP_Auth::mailPassRecover(DB::escape($this->userLogin), DB::escape($this->userEmail))) { - $message['text'][] = SP_Html::strongText(_('No se pudo realizar la petición de cambio de clave.')); - } - } - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - return true; - } - - /** - * Modificar un usuario. - * - * @return bool - */ - public function updateUser() - { - $query = "UPDATE usrData SET " - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_login = '" . DB::escape($this->userLogin) . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_notes = '" . DB::escape($this->userNotes) . "'," - . "user_groupId = " . (int)$this->userGroupId . "," - . "user_profileId = " . (int)$this->userProfileId . "," - . "user_isAdminApp = " . (int)$this->userIsAdminApp . "," - . "user_isAdminAcc = " . (int)$this->userIsAdminAcc . "," - . "user_isDisabled = " . (int)$this->userIsDisabled . "," - . "user_isChangePass = " . (int)$this->userChangePass . "," - . "user_lastUpdate = NOW() " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - $this->queryLastId = DB::$lastId; - - $message['action'] = _('Modificar Usuario'); - $message['text'][] = SP_Html::strongText(_('Usuario') . ': ') . $this->userName . ' (' . $this->userLogin . ')'; - - if ($this->userChangePass) { - if (!SP_Auth::mailPassRecover(DB::escape($this->userLogin), DB::escape($this->userEmail))) { - $message['text'][] = SP_Html::strongText(_('No se pudo realizar la petición de cambio de clave.')); - } - } - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - return true; - } - - /** - * Modificar la clave de un usuario. - * - * @return bool - */ - public function updateUserPass() - { - $passdata = SP_Users::makeUserPass($this->userPass); - $userLogin = $this->getUserLoginById($this->userId); - - $query = "UPDATE usrData SET " - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_isChangePass = 0," - . "user_lastUpdate = NOW() " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - $this->queryLastId = DB::$lastId; - - $message['action'] = _('Modificar Clave Usuario'); - $message['text'][] = SP_Html::strongText(_('Login') . ': ') . $userLogin; - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - return true; - } - - /** - * Eliminar un usuario. - * - * @return bool - */ - public function deleteUser() - { - $userLogin = $this->getUserLoginById($this->userId); - - $query = "DELETE FROM usrData " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - $this->queryLastId = DB::$lastId; - - $message['action'] = _('Eliminar Usuario'); - $message['text'][] = SP_Html::strongText(_('Login') . ': ') . $userLogin; - - SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); - - return true; - } - - /** - * Actualiza los datos de los usuarios de LDAP en la BBDD. - * - * @return bool - */ - public function updateLDAPUserInDB() - { - $passdata = SP_Users::makeUserPass($this->userPass); - - $query = "UPDATE usrData SET " - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_lastUpdate = NOW()," - . "user_isLdap = 1 " - . "WHERE user_id = " . $this->getUserIdByLogin($this->userLogin) . " LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Establece las variables de sesión del usuario. - * - * @return none - */ - public function setUserSession() - { - $_SESSION['ulogin'] = $this->userLogin; - $_SESSION['uprofile'] = $this->userProfileId; - $_SESSION['uname'] = $this->userName; - $_SESSION['ugroup'] = $this->userGroupId; - $_SESSION['ugroupn'] = $this->userGroupName; - $_SESSION['uid'] = $this->userId; - $_SESSION['uemail'] = $this->userEmail; - $_SESSION['uisadminapp'] = $this->userIsAdminApp; - $_SESSION['uisadminacc'] = $this->userIsAdminAcc; - $_SESSION['uisldap'] = $this->userIsLdap; - $_SESSION['usrprofile'] = SP_Profiles::getProfileForUser(); - - $this->setUserLastLogin(); - } - - /** - * Actualiza el último inicio de sesión del usuario en la BBDD. - * - * @return bool - */ - private function setUserLastLogin() - { - $query = "UPDATE usrData SET " - . "user_lastLogin = NOW()," - . "user_count = user_count + 1 " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Comprueba la clave maestra del usuario. - * - * @return bool - */ - public function checkUserMPass() - { - $userMPass = $this->getUserMPass(true); - - if ($userMPass === false) { - return false; - } - - $configMPass = SP_Config::getConfigValue('masterPwd'); - - if ($configMPass === false) { - return false; - } - - // Comprobamos el hash de la clave del usuario con la guardada - return SP_Crypt::checkHashPass($userMPass, $configMPass); - } - - /** - * Desencriptar la clave maestra del usuario para la sesión. - * - * @param bool $showPass opcional, para devolver la clave desencriptada - * @return false|string Devuelve bool se hay error o string si se devuelve la clave - */ - public function getUserMPass($showPass = false) - { - $query = "SELECT user_mPass, user_mIV " - . "FROM usrData " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - if ($queryRes->user_mPass && $queryRes->user_mIV) { - $clearMasterPass = SP_Crypt::getDecrypt($queryRes->user_mPass, $this->getCypherPass(), $queryRes->user_mIV); - - if (!$clearMasterPass) { - return false; - } - - if ($showPass == true) { - return $clearMasterPass; - } else { - $_SESSION['mPassPwd'] = substr(sha1(uniqid()), 0, 32); - - $sessionMasterPass = SP_Crypt::mkCustomMPassEncrypt($_SESSION["mPassPwd"], $clearMasterPass); - - $_SESSION['mPass'] = $sessionMasterPass[0]; - $_SESSION['mPassIV'] = $sessionMasterPass[1]; - return true; - } - } - return false; - } - - /** - * Obtener una clave de cifrado basada en la clave del usuario y un salt. - * - * @return string con la clave de cifrado - */ - private function getCypherPass() - { - $configSalt = SP_Config::getConfigValue('passwordsalt'); - $cypherPass = substr(sha1($configSalt . $this->userPass), 0, 32); - - return $cypherPass; - } - - /** - * Actualizar la clave maestra del usuario en la BBDD. - * - * @param string $masterPwd con la clave maestra - * @return bool - */ - public function updateUserMPass($masterPwd) - { - $configMPass = SP_Config::getConfigValue('masterPwd'); - - if (!$configMPass) { - return false; - } - - if (SP_Crypt::checkHashPass($masterPwd, $configMPass)) { - $strUserMPwd = SP_Crypt::mkCustomMPassEncrypt($this->getCypherPass(), $masterPwd); - - if (!$strUserMPwd) { - return false; - } - } else { - return false; - } - - $query = "UPDATE usrData SET " - . "user_mPass = '" . DB::escape($strUserMPwd[0]) . "'," - . "user_mIV = '" . DB::escape($strUserMPwd[1]) . "'," - . "user_lastUpdateMPass = UNIX_TIMESTAMP() " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } -} \ No newline at end of file diff --git a/index.php b/index.php index e8605c71..cc170444 100644 --- a/index.php +++ b/index.php @@ -1,30 +1,34 @@ . -* -*/ + * + * This file is part of sysPass. + * + * sysPass is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * sysPass 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 sysPass. If not, see . + * + */ define('APP_ROOT', '.'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -SP_Html::$htmlBodyOpts = 'OnLoad="doAction(\'accsearch\')"'; -SP_Html::render("main"); \ No newline at end of file +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +if (!\SP\Init::checkPostLoginActions()) { + $controller = new SP\Controller\MainC(null, 'main'); + $controller->getMain(); + $controller->view(); +} \ No newline at end of file diff --git a/js/ZeroClipboard.min.js b/js/ZeroClipboard.min.js index 2caa4db8..6ecd0885 100644 --- a/js/ZeroClipboard.min.js +++ b/js/ZeroClipboard.min.js @@ -1,424 +1,10 @@ /*! * ZeroClipboard * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. - * Copyright (c) 2014 Jon Rohan, James M. Greene + * Copyright (c) 2009-2014 Jon Rohan, James M. Greene * Licensed MIT * http://zeroclipboard.org/ - * v1.3.5 + * v2.2.0 */ -!function (a) { - "use strict"; - function b(a) { - return a.replace(/,/g, ".").replace(/[^0-9\.]/g, "") - } - - function c(a) { - return parseFloat(b(a)) >= 10 - } - - var d, e = { - bridge: null, - version: "0.0.0", - disabled: null, - outdated: null, - ready: null - }, f = {}, g = 0, h = {}, i = 0, j = {}, k = null, l = null, m = function () { - var a, b, c, d, e = "ZeroClipboard.swf"; - if (document.currentScript && (d = document.currentScript.src)); else { - var f = document.getElementsByTagName("script"); - if ("readyState"in f[0])for (a = f.length; a-- && ("interactive" !== f[a].readyState || !(d = f[a].src));); else if ("loading" === document.readyState)d = f[f.length - 1].src; else { - for (a = f.length; a--;) { - if (c = f[a].src, !c) { - b = null; - break - } - if (c = c.split("#")[0].split("?")[0], c = c.slice(0, c.lastIndexOf("/") + 1), null == b)b = c; else if (b !== c) { - b = null; - break - } - } - null !== b && (d = b) - } - } - return d && (d = d.split("#")[0].split("?")[0], e = d.slice(0, d.lastIndexOf("/") + 1) + e), e - }(), n = function () { - var a = /\-([a-z])/g, b = function (a, b) { - return b.toUpperCase() - }; - return function (c) { - return c.replace(a, b) - } - }(), o = function (b, c) { - var d, e, f; - return a.getComputedStyle ? d = a.getComputedStyle(b, null).getPropertyValue(c) : (e = n(c), d = b.currentStyle ? b.currentStyle[e] : b.style[e]), "cursor" !== c || d && "auto" !== d || (f = b.tagName.toLowerCase(), "a" !== f) ? d : "pointer" - }, p = function (b) { - b || (b = a.event); - var c; - this !== a ? c = this : b.target ? c = b.target : b.srcElement && (c = b.srcElement), K.activate(c) - }, q = function (a, b, c) { - a && 1 === a.nodeType && (a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent && a.attachEvent("on" + b, c)) - }, r = function (a, b, c) { - a && 1 === a.nodeType && (a.removeEventListener ? a.removeEventListener(b, c, !1) : a.detachEvent && a.detachEvent("on" + b, c)) - }, s = function (a, b) { - if (!a || 1 !== a.nodeType)return a; - if (a.classList)return a.classList.contains(b) || a.classList.add(b), a; - if (b && "string" == typeof b) { - var c = (b || "").split(/\s+/); - if (1 === a.nodeType)if (a.className) { - for (var d = " " + a.className + " ", e = a.className, f = 0, g = c.length; g > f; f++)d.indexOf(" " + c[f] + " ") < 0 && (e += " " + c[f]); - a.className = e.replace(/^\s+|\s+$/g, "") - } else a.className = b - } - return a - }, t = function (a, b) { - if (!a || 1 !== a.nodeType)return a; - if (a.classList)return a.classList.contains(b) && a.classList.remove(b), a; - if (b && "string" == typeof b || void 0 === b) { - var c = (b || "").split(/\s+/); - if (1 === a.nodeType && a.className)if (b) { - for (var d = (" " + a.className + " ").replace(/[\n\t]/g, " "), e = 0, f = c.length; f > e; e++)d = d.replace(" " + c[e] + " ", " "); - a.className = d.replace(/^\s+|\s+$/g, "") - } else a.className = "" - } - return a - }, u = function () { - var a, b, c, d = 1; - return "function" == typeof document.body.getBoundingClientRect && (a = document.body.getBoundingClientRect(), b = a.right - a.left, c = document.body.offsetWidth, d = Math.round(b / c * 100) / 100), d - }, v = function (b, c) { - var d = {left: 0, top: 0, width: 0, height: 0, zIndex: B(c) - 1}; - if (b.getBoundingClientRect) { - var e, f, g, h = b.getBoundingClientRect(); - "pageXOffset"in a && "pageYOffset"in a ? (e = a.pageXOffset, f = a.pageYOffset) : (g = u(), e = Math.round(document.documentElement.scrollLeft / g), f = Math.round(document.documentElement.scrollTop / g)); - var i = document.documentElement.clientLeft || 0, j = document.documentElement.clientTop || 0; - d.left = h.left + e - i, d.top = h.top + f - j, d.width = "width"in h ? h.width : h.right - h.left, d.height = "height"in h ? h.height : h.bottom - h.top - } - return d - }, w = function (a, b) { - var c = null == b || b && b.cacheBust === !0 && b.useNoCache === !0; - return c ? (-1 === a.indexOf("?") ? "?" : "&") + "noCache=" + (new Date).getTime() : "" - }, x = function (b) { - var c, d, e, f = [], g = [], h = []; - if (b.trustedOrigins && ("string" == typeof b.trustedOrigins ? g.push(b.trustedOrigins) : "object" == typeof b.trustedOrigins && "length"in b.trustedOrigins && (g = g.concat(b.trustedOrigins))), b.trustedDomains && ("string" == typeof b.trustedDomains ? g.push(b.trustedDomains) : "object" == typeof b.trustedDomains && "length"in b.trustedDomains && (g = g.concat(b.trustedDomains))), g.length)for (c = 0, d = g.length; d > c; c++)if (g.hasOwnProperty(c) && g[c] && "string" == typeof g[c]) { - if (e = E(g[c]), !e)continue; - if ("*" === e) { - h = [e]; - break - } - h.push.apply(h, [e, "//" + e, a.location.protocol + "//" + e]) - } - return h.length && f.push("trustedOrigins=" + encodeURIComponent(h.join(","))), "string" == typeof b.jsModuleId && b.jsModuleId && f.push("jsModuleId=" + encodeURIComponent(b.jsModuleId)), f.join("&") - }, y = function (a, b, c) { - if ("function" == typeof b.indexOf)return b.indexOf(a, c); - var d, e = b.length; - for ("undefined" == typeof c ? c = 0 : 0 > c && (c = e + c), d = c; e > d; d++)if (b.hasOwnProperty(d) && b[d] === a)return d; - return -1 - }, z = function (a) { - if ("string" == typeof a)throw new TypeError("ZeroClipboard doesn't accept query strings."); - return a.length ? a : [a] - }, A = function (b, c, d, e) { - e ? a.setTimeout(function () { - b.apply(c, d) - }, 0) : b.apply(c, d) - }, B = function (a) { - var b, c; - return a && ("number" == typeof a && a > 0 ? b = a : "string" == typeof a && (c = parseInt(a, 10)) && !isNaN(c) && c > 0 && (b = c)), b || ("number" == typeof N.zIndex && N.zIndex > 0 ? b = N.zIndex : "string" == typeof N.zIndex && (c = parseInt(N.zIndex, 10)) && !isNaN(c) && c > 0 && (b = c)), b || 0 - }, C = function (a, b) { - if (a && b !== !1 && "undefined" != typeof console && console && (console.warn || console.log)) { - var c = "`" + a + "` is deprecated. See docs for more info:\n https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations"; - console.warn ? console.warn(c) : console.log(c) - } - }, D = function () { - var a, b, c, d, e, f, g = arguments[0] || {}; - for (a = 1, b = arguments.length; b > a; a++)if (null != (c = arguments[a]))for (d in c)if (c.hasOwnProperty(d)) { - if (e = g[d], f = c[d], g === f)continue; - void 0 !== f && (g[d] = f) - } - return g - }, E = function (a) { - if (null == a || "" === a)return null; - if (a = a.replace(/^\s+|\s+$/g, ""), "" === a)return null; - var b = a.indexOf("//"); - a = -1 === b ? a : a.slice(b + 2); - var c = a.indexOf("/"); - return a = -1 === c ? a : -1 === b || 0 === c ? null : a.slice(0, c), a && ".swf" === a.slice(-4).toLowerCase() ? null : a || null - }, F = function () { - var a = function (a, b) { - var c, d, e; - if (null != a && "*" !== b[0] && ("string" == typeof a && (a = [a]), "object" == typeof a && "length"in a))for (c = 0, d = a.length; d > c; c++)if (a.hasOwnProperty(c) && (e = E(a[c]))) { - if ("*" === e) { - b.length = 0, b.push("*"); - break - } - -1 === y(e, b) && b.push(e) - } - }, b = {always: "always", samedomain: "sameDomain", never: "never"}; - return function (c, d) { - var e, f = d.allowScriptAccess; - if ("string" == typeof f && (e = f.toLowerCase()) && /^always|samedomain|never$/.test(e))return b[e]; - var g = E(d.moviePath); - null === g && (g = c); - var h = []; - a(d.trustedOrigins, h), a(d.trustedDomains, h); - var i = h.length; - if (i > 0) { - if (1 === i && "*" === h[0])return "always"; - if (-1 !== y(c, h))return 1 === i && c === g ? "sameDomain" : "always" - } - return "never" - } - }(), G = function (a) { - if (null == a)return []; - if (Object.keys)return Object.keys(a); - var b = []; - for (var c in a)a.hasOwnProperty(c) && b.push(c); - return b - }, H = function (a) { - if (a)for (var b in a)a.hasOwnProperty(b) && delete a[b]; - return a - }, I = function () { - try { - return document.activeElement - } catch (a) { - } - return null - }, J = function () { - var a = !1; - if ("boolean" == typeof e.disabled)a = e.disabled === !1; else { - if ("function" == typeof ActiveXObject)try { - new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && (a = !0) - } catch (b) { - } - !a && navigator.mimeTypes["application/x-shockwave-flash"] && (a = !0) - } - return a - }, K = function (a, b) { - return this instanceof K ? (this.id = "" + g++, h[this.id] = { - instance: this, - elements: [], - handlers: {} - }, a && this.clip(a), "undefined" != typeof b && (C("new ZeroClipboard(elements, options)", N.debug), K.config(b)), this.options = K.config(), "boolean" != typeof e.disabled && (e.disabled = !J()), e.disabled === !1 && e.outdated !== !0 && null === e.bridge && (e.outdated = !1, e.ready = !1, O()), void 0) : new K(a, b) - }; - K.prototype.setText = function (a) { - return a && "" !== a && (f["text/plain"] = a, e.ready === !0 && e.bridge && "function" == typeof e.bridge.setText ? e.bridge.setText(a) : e.ready = !1), this - }, K.prototype.setSize = function (a, b) { - return e.ready === !0 && e.bridge && "function" == typeof e.bridge.setSize ? e.bridge.setSize(a, b) : e.ready = !1, this - }; - var L = function (a) { - e.ready === !0 && e.bridge && "function" == typeof e.bridge.setHandCursor ? e.bridge.setHandCursor(a) : e.ready = !1 - }; - K.prototype.destroy = function () { - this.unclip(), this.off(), delete h[this.id] - }; - var M = function () { - var a, b, c, d = [], e = G(h); - for (a = 0, b = e.length; b > a; a++)c = h[e[a]].instance, c && c instanceof K && d.push(c); - return d - }; - K.version = "1.3.5"; - var N = { - swfPath: m, - trustedDomains: a.location.host ? [a.location.host] : [], - cacheBust: !0, - forceHandCursor: !1, - zIndex: 999999999, - debug: !0, - title: null, - autoActivate: !0 - }; - K.config = function (a) { - "object" == typeof a && null !== a && D(N, a); - { - if ("string" != typeof a || !a) { - var b = {}; - for (var c in N)N.hasOwnProperty(c) && (b[c] = "object" == typeof N[c] && null !== N[c] ? "length"in N[c] ? N[c].slice(0) : D({}, N[c]) : N[c]); - return b - } - if (N.hasOwnProperty(a))return N[a] - } - }, K.destroy = function () { - K.deactivate(); - for (var a in h)if (h.hasOwnProperty(a) && h[a]) { - var b = h[a].instance; - b && "function" == typeof b.destroy && b.destroy() - } - var c = P(e.bridge); - c && c.parentNode && (c.parentNode.removeChild(c), e.ready = null, e.bridge = null) - }, K.activate = function (a) { - d && (t(d, N.hoverClass), t(d, N.activeClass)), d = a, s(a, N.hoverClass), Q(); - var b = N.title || a.getAttribute("title"); - if (b) { - var c = P(e.bridge); - c && c.setAttribute("title", b) - } - var f = N.forceHandCursor === !0 || "pointer" === o(a, "cursor"); - L(f) - }, K.deactivate = function () { - var a = P(e.bridge); - a && (a.style.left = "0px", a.style.top = "-9999px", a.removeAttribute("title")), d && (t(d, N.hoverClass), t(d, N.activeClass), d = null) - }; - var O = function () { - var b, c, d = document.getElementById("global-zeroclipboard-html-bridge"); - if (!d) { - var f = K.config(); - f.jsModuleId = "string" == typeof k && k || "string" == typeof l && l || null; - var g = F(a.location.host, N), h = x(f), i = N.moviePath + w(N.moviePath, N), j = ' '; - d = document.createElement("div"), d.id = "global-zeroclipboard-html-bridge", d.setAttribute("class", "global-zeroclipboard-container"), d.style.position = "absolute", d.style.left = "0px", d.style.top = "-9999px", d.style.width = "15px", d.style.height = "15px", d.style.zIndex = "" + B(N.zIndex), document.body.appendChild(d), d.innerHTML = j - } - b = document["global-zeroclipboard-flash-bridge"], b && (c = b.length) && (b = b[c - 1]), e.bridge = b || d.children[0].lastElementChild - }, P = function (a) { - for (var b = /^OBJECT|EMBED$/, c = a && a.parentNode; c && b.test(c.nodeName) && c.parentNode;)c = c.parentNode; - return c || null - }, Q = function () { - if (d) { - var a = v(d, N.zIndex), b = P(e.bridge); - b && (b.style.top = a.top + "px", b.style.left = a.left + "px", b.style.width = a.width + "px", b.style.height = a.height + "px", b.style.zIndex = a.zIndex + 1), e.ready === !0 && e.bridge && "function" == typeof e.bridge.setSize ? e.bridge.setSize(a.width, a.height) : e.ready = !1 - } - return this - }; - K.prototype.on = function (a, b) { - var c, d, f, g = {}, i = h[this.id] && h[this.id].handlers; - if ("string" == typeof a && a)f = a.toLowerCase().split(/\s+/); else if ("object" == typeof a && a && "undefined" == typeof b)for (c in a)a.hasOwnProperty(c) && "string" == typeof c && c && "function" == typeof a[c] && this.on(c, a[c]); - if (f && f.length) { - for (c = 0, d = f.length; d > c; c++)a = f[c].replace(/^on/, ""), g[a] = !0, i[a] || (i[a] = []), i[a].push(b); - g.noflash && e.disabled && T.call(this, "noflash", {}), g.wrongflash && e.outdated && T.call(this, "wrongflash", {flashVersion: e.version}), g.load && e.ready && T.call(this, "load", {flashVersion: e.version}) - } - return this - }, K.prototype.off = function (a, b) { - var c, d, e, f, g, i = h[this.id] && h[this.id].handlers; - if (0 === arguments.length)f = G(i); else if ("string" == typeof a && a)f = a.split(/\s+/); else if ("object" == typeof a && a && "undefined" == typeof b)for (c in a)a.hasOwnProperty(c) && "string" == typeof c && c && "function" == typeof a[c] && this.off(c, a[c]); - if (f && f.length)for (c = 0, d = f.length; d > c; c++)if (a = f[c].toLowerCase().replace(/^on/, ""), g = i[a], g && g.length)if (b)for (e = y(b, g); -1 !== e;)g.splice(e, 1), e = y(b, g, e); else i[a].length = 0; - return this - }, K.prototype.handlers = function (a) { - var b, c = null, d = h[this.id] && h[this.id].handlers; - if (d) { - if ("string" == typeof a && a)return d[a] ? d[a].slice(0) : null; - c = {}; - for (b in d)d.hasOwnProperty(b) && d[b] && (c[b] = d[b].slice(0)) - } - return c - }; - var R = function (b, c, d, e) { - var f = h[this.id] && h[this.id].handlers[b]; - if (f && f.length) { - var g, i, j, k = c || this; - for (g = 0, i = f.length; i > g; g++)j = f[g], c = k, "string" == typeof j && "function" == typeof a[j] && (j = a[j]), "object" == typeof j && j && "function" == typeof j.handleEvent && (c = j, j = j.handleEvent), "function" == typeof j && A(j, c, d, e) - } - return this - }; - K.prototype.clip = function (a) { - a = z(a); - for (var b = 0; b < a.length; b++)if (a.hasOwnProperty(b) && a[b] && 1 === a[b].nodeType) { - a[b].zcClippingId ? -1 === y(this.id, j[a[b].zcClippingId]) && j[a[b].zcClippingId].push(this.id) : (a[b].zcClippingId = "zcClippingId_" + i++, j[a[b].zcClippingId] = [this.id], N.autoActivate === !0 && q(a[b], "mouseover", p)); - var c = h[this.id].elements; - -1 === y(a[b], c) && c.push(a[b]) - } - return this - }, K.prototype.unclip = function (a) { - var b = h[this.id]; - if (b) { - var c, d = b.elements; - a = "undefined" == typeof a ? d.slice(0) : z(a); - for (var e = a.length; e--;)if (a.hasOwnProperty(e) && a[e] && 1 === a[e].nodeType) { - for (c = 0; -1 !== (c = y(a[e], d, c));)d.splice(c, 1); - var f = j[a[e].zcClippingId]; - if (f) { - for (c = 0; -1 !== (c = y(this.id, f, c));)f.splice(c, 1); - 0 === f.length && (N.autoActivate === !0 && r(a[e], "mouseover", p), delete a[e].zcClippingId) - } - } - } - return this - }, K.prototype.elements = function () { - var a = h[this.id]; - return a && a.elements ? a.elements.slice(0) : [] - }; - var S = function (a) { - var b, c, d, e, f, g = []; - if (a && 1 === a.nodeType && (b = a.zcClippingId) && j.hasOwnProperty(b) && (c = j[b], c && c.length))for (d = 0, e = c.length; e > d; d++)f = h[c[d]].instance, f && f instanceof K && g.push(f); - return g - }; - N.hoverClass = "zeroclipboard-is-hover", N.activeClass = "zeroclipboard-is-active", N.trustedOrigins = null, N.allowScriptAccess = null, N.useNoCache = !0, N.moviePath = "ZeroClipboard.swf", K.detectFlashSupport = function () { - return C("ZeroClipboard.detectFlashSupport", N.debug), J() - }, K.dispatch = function (a, b) { - if ("string" == typeof a && a) { - var c = a.toLowerCase().replace(/^on/, ""); - if (c)for (var e = d && N.autoActivate === !0 ? S(d) : M(), f = 0, g = e.length; g > f; f++)T.call(e[f], c, b) - } - }, K.prototype.setHandCursor = function (a) { - return C("ZeroClipboard.prototype.setHandCursor", N.debug), a = "boolean" == typeof a ? a : !!a, L(a), N.forceHandCursor = a, this - }, K.prototype.reposition = function () { - return C("ZeroClipboard.prototype.reposition", N.debug), Q() - }, K.prototype.receiveEvent = function (a, b) { - if (C("ZeroClipboard.prototype.receiveEvent", N.debug), "string" == typeof a && a) { - var c = a.toLowerCase().replace(/^on/, ""); - c && T.call(this, c, b) - } - }, K.prototype.setCurrent = function (a) { - return C("ZeroClipboard.prototype.setCurrent", N.debug), K.activate(a), this - }, K.prototype.resetBridge = function () { - return C("ZeroClipboard.prototype.resetBridge", N.debug), K.deactivate(), this - }, K.prototype.setTitle = function (a) { - if (C("ZeroClipboard.prototype.setTitle", N.debug), a = a || N.title || d && d.getAttribute("title")) { - var b = P(e.bridge); - b && b.setAttribute("title", a) - } - return this - }, K.setDefaults = function (a) { - C("ZeroClipboard.setDefaults", N.debug), K.config(a) - }, K.prototype.addEventListener = function (a, b) { - return C("ZeroClipboard.prototype.addEventListener", N.debug), this.on(a, b) - }, K.prototype.removeEventListener = function (a, b) { - return C("ZeroClipboard.prototype.removeEventListener", N.debug), this.off(a, b) - }, K.prototype.ready = function () { - return C("ZeroClipboard.prototype.ready", N.debug), e.ready === !0 - }; - var T = function (a, g) { - a = a.toLowerCase().replace(/^on/, ""); - var h = g && g.flashVersion && b(g.flashVersion) || null, i = d, j = !0; - switch (a) { - case"load": - if (h) { - if (!c(h))return T.call(this, "onWrongFlash", {flashVersion: h}), void 0; - e.outdated = !1, e.ready = !0, e.version = h - } - break; - case"wrongflash": - h && !c(h) && (e.outdated = !0, e.ready = !1, e.version = h); - break; - case"mouseover": - s(i, N.hoverClass); - break; - case"mouseout": - N.autoActivate === !0 && K.deactivate(); - break; - case"mousedown": - s(i, N.activeClass); - break; - case"mouseup": - t(i, N.activeClass); - break; - case"datarequested": - if (i) { - var k = i.getAttribute("data-clipboard-target"), l = k ? document.getElementById(k) : null; - if (l) { - var m = l.value || l.textContent || l.innerText; - m && this.setText(m) - } else { - var n = i.getAttribute("data-clipboard-text"); - n && this.setText(n) - } - } - j = !1; - break; - case"complete": - H(f), i && i !== I() && i.focus && i.focus() - } - var o = i, p = [this, g]; - return R.call(this, a, o, p, j) - }; - "function" == typeof define && define.amd ? define(["require", "exports", "module"], function (a, b, c) { - return k = c && c.id || null, K - }) : "object" == typeof module && module && "object" == typeof module.exports && module.exports && "function" == typeof a.require ? (l = module.id || null, module.exports = K) : a.ZeroClipboard = K -}(function () { - return this -}()); \ No newline at end of file +!function(a,b){"use strict";var c,d,e,f=a,g=f.document,h=f.navigator,i=f.setTimeout,j=f.clearTimeout,k=f.setInterval,l=f.clearInterval,m=f.getComputedStyle,n=f.encodeURIComponent,o=f.ActiveXObject,p=f.Error,q=f.Number.parseInt||f.parseInt,r=f.Number.parseFloat||f.parseFloat,s=f.Number.isNaN||f.isNaN,t=f.Date.now,u=f.Object.keys,v=f.Object.defineProperty,w=f.Object.prototype.hasOwnProperty,x=f.Array.prototype.slice,y=function(){var a=function(a){return a};if("function"==typeof f.wrap&&"function"==typeof f.unwrap)try{var b=g.createElement("div"),c=f.unwrap(b);1===b.nodeType&&c&&1===c.nodeType&&(a=f.unwrap)}catch(d){}return a}(),z=function(a){return x.call(a,0)},A=function(){var a,c,d,e,f,g,h=z(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)w.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},B=function(a){var b,c,d,e;if("object"!=typeof a||null==a||"number"==typeof a.nodeType)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)w.call(a,c)&&(b[c]=B(a[c]));else{b={};for(e in a)w.call(a,e)&&(b[e]=B(a[e]))}return b},C=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},D=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},E=function(a){if(a)for(var b in a)w.call(a,b)&&delete a[b];return a},F=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},G=function(a){var b;return"string"==typeof a&&a&&(b=a.split("#")[0].split("?")[0],b=a.slice(0,a.lastIndexOf("/")+1)),b},H=function(a){var b,c;return"string"==typeof a&&a&&(c=a.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/),c&&c[1]?b=c[1]:(c=a.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/),c&&c[1]&&(b=c[1]))),b},I=function(){var a,b;try{throw new p}catch(c){b=c}return b&&(a=b.sourceURL||b.fileName||H(b.stack)),a},J=function(){var a,c,d;if(g.currentScript&&(a=g.currentScript.src))return a;if(c=g.getElementsByTagName("script"),1===c.length)return c[0].src||b;if("readyState"in c[0])for(d=c.length;d--;)if("interactive"===c[d].readyState&&(a=c[d].src))return a;return"loading"===g.readyState&&(a=c[c.length-1].src)?a:(a=I())?a:b},K=function(){var a,c,d,e=g.getElementsByTagName("script");for(a=e.length;a--;){if(!(d=e[a].src)){c=null;break}if(d=G(d),null==c)c=d;else if(c!==d){c=null;break}}return c||b},L=function(){var a=G(J())||K()||"";return a+"ZeroClipboard.swf"},M=function(){return null==a.opener&&(!!a.top&&a!=a.top||!!a.parent&&a!=a.parent)}(),N={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,sandboxed:null,unavailable:null,degraded:null,deactivated:null,overdue:null,ready:null},O="11.0.0",P={},Q={},R=null,S=0,T=0,U={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed. May also be attempting to run Flash in a sandboxed iframe, which is impossible.","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-sandboxed":"Attempting to run Flash in a sandboxed iframe, which is impossible","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-degraded":"Flash is unable to preserve data fidelity when communicating with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate.\nThis may also mean that the ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity.\nMay also be attempting to run Flash in a sandboxed iframe, which is impossible.","flash-overdue":"Flash communication was established but NOT within the acceptable time limit","version-mismatch":"ZeroClipboard JS version number does not match ZeroClipboard SWF version number","clipboard-error":"At least one error was thrown while ZeroClipboard was attempting to inject your data into the clipboard","config-mismatch":"ZeroClipboard configuration does not match Flash's reality","swf-not-found":"The ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity"}},V=["flash-unavailable","flash-degraded","flash-overdue","version-mismatch","config-mismatch","clipboard-error"],W=["flash-disabled","flash-outdated","flash-sandboxed","flash-unavailable","flash-degraded","flash-deactivated","flash-overdue"],X=new RegExp("^flash-("+W.map(function(a){return a.replace(/^flash-/,"")}).join("|")+")$"),Y=new RegExp("^flash-("+W.slice(1).map(function(a){return a.replace(/^flash-/,"")}).join("|")+")$"),Z={swfPath:L(),trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},$=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(w.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))Z[b]=a[b];else if(null==N.bridge)if("containerId"===b||"swfObjectId"===b){if(!nb(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");Z[b]=a[b]}else Z[b]=a[b];{if("string"!=typeof a||!a)return B(Z);if(w.call(Z,a))return Z[a]}},_=function(){return Tb(),{browser:C(h,["userAgent","platform","appName"]),flash:D(N,["bridge"]),zeroclipboard:{version:Vb.version,config:Vb.config()}}},ab=function(){return!!(N.disabled||N.outdated||N.sandboxed||N.unavailable||N.degraded||N.deactivated)},bb=function(a,d){var e,f,g,h={};if("string"==typeof a&&a)g=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof d)for(e in a)w.call(a,e)&&"string"==typeof e&&e&&"function"==typeof a[e]&&Vb.on(e,a[e]);if(g&&g.length){for(e=0,f=g.length;f>e;e++)a=g[e].replace(/^on/,""),h[a]=!0,P[a]||(P[a]=[]),P[a].push(d);if(h.ready&&N.ready&&Vb.emit({type:"ready"}),h.error){for(e=0,f=W.length;f>e;e++)if(N[W[e].replace(/^flash-/,"")]===!0){Vb.emit({type:"error",name:W[e]});break}c!==b&&Vb.version!==c&&Vb.emit({type:"error",name:"version-mismatch",jsVersion:Vb.version,swfVersion:c})}}return Vb},cb=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=u(P);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)w.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&Vb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=P[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return Vb},db=function(a){var b;return b="string"==typeof a&&a?B(P[a])||null:B(P)},eb=function(a){var b,c,d;return a=ob(a),a&&!vb(a)?"ready"===a.type&&N.overdue===!0?Vb.emit({type:"error",name:"flash-overdue"}):(b=A({},a),tb.call(this,b),"copy"===a.type&&(d=Db(Q),c=d.data,R=d.formatMap),c):void 0},fb=function(){var a=N.sandboxed;if(Tb(),"boolean"!=typeof N.ready&&(N.ready=!1),N.sandboxed!==a&&N.sandboxed===!0)N.ready=!1,Vb.emit({type:"error",name:"flash-sandboxed"});else if(!Vb.isFlashUnusable()&&null===N.bridge){var b=Z.flashLoadTimeout;"number"==typeof b&&b>=0&&(S=i(function(){"boolean"!=typeof N.deactivated&&(N.deactivated=!0),N.deactivated===!0&&Vb.emit({type:"error",name:"flash-deactivated"})},b)),N.overdue=!1,Bb()}},gb=function(){Vb.clearData(),Vb.blur(),Vb.emit("destroy"),Cb(),Vb.off()},hb=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,Vb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&w.call(c,d)&&"string"==typeof c[d]&&c[d]&&(Q[d]=c[d])},ib=function(a){"undefined"==typeof a?(E(Q),R=null):"string"==typeof a&&w.call(Q,a)&&delete Q[a]},jb=function(a){return"undefined"==typeof a?B(Q):"string"==typeof a&&w.call(Q,a)?Q[a]:void 0},kb=function(a){if(a&&1===a.nodeType){d&&(Lb(d,Z.activeClass),d!==a&&Lb(d,Z.hoverClass)),d=a,Kb(a,Z.hoverClass);var b=a.getAttribute("title")||Z.title;if("string"==typeof b&&b){var c=Ab(N.bridge);c&&c.setAttribute("title",b)}var e=Z.forceHandCursor===!0||"pointer"===Mb(a,"cursor");Rb(e),Qb()}},lb=function(){var a=Ab(N.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px"),d&&(Lb(d,Z.hoverClass),Lb(d,Z.activeClass),d=null)},mb=function(){return d||null},nb=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},ob=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){b=b.toLowerCase(),!a.target&&(/^(copy|aftercopy|_click)$/.test(b)||"error"===b&&"clipboard-error"===a.name)&&(a.target=e),A(a,{type:b,target:a.target||d||null,relatedTarget:a.relatedTarget||null,currentTarget:N&&N.bridge||null,timeStamp:a.timeStamp||t()||null});var c=U[a.type];return"error"===a.type&&a.name&&c&&(c=c[a.name]),c&&(a.message=c),"ready"===a.type&&A(a,{target:null,version:N.version}),"error"===a.type&&(X.test(a.name)&&A(a,{target:null,minimumVersion:O}),Y.test(a.name)&&A(a,{version:N.version})),"copy"===a.type&&(a.clipboardData={setData:Vb.setData,clearData:Vb.clearData}),"aftercopy"===a.type&&(a=Eb(a,R)),a.target&&!a.relatedTarget&&(a.relatedTarget=pb(a.target)),qb(a)}},pb=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?g.getElementById(b):null},qb=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,d="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,e="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=Nb(c),i=f.screenLeft||f.screenX||0,j=f.screenTop||f.screenY||0,k=g.body.scrollLeft+g.documentElement.scrollLeft,l=g.body.scrollTop+g.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,t="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,A(a,{srcElement:c,fromElement:d,toElement:e,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:t,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},rb=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},sb=function(a,b,c,d){d?i(function(){a.apply(b,c)},0):a.apply(b,c)},tb=function(a){if("object"==typeof a&&a&&a.type){var b=rb(a),c=P["*"]||[],d=P[a.type]||[],e=c.concat(d);if(e&&e.length){var g,h,i,j,k,l=this;for(g=0,h=e.length;h>g;g++)i=e[g],j=l,"string"==typeof i&&"function"==typeof f[i]&&(i=f[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=A({},a),sb(i,j,[k],b))}return this}},ub=function(a){var b=null;return(M===!1||a&&"error"===a.type&&a.name&&-1!==V.indexOf(a.name))&&(b=!1),b},vb=function(a){var b=a.target||d||null,f="swf"===a._source;switch(delete a._source,a.type){case"error":var g="flash-sandboxed"===a.name||ub(a);"boolean"==typeof g&&(N.sandboxed=g),-1!==W.indexOf(a.name)?A(N,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,degraded:"flash-degraded"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1}):"version-mismatch"===a.name&&(c=a.swfVersion,A(N,{disabled:!1,outdated:!1,unavailable:!1,degraded:!1,deactivated:!1,overdue:!1,ready:!1})),Pb();break;case"ready":c=a.swfVersion;var h=N.deactivated===!0;A(N,{disabled:!1,outdated:!1,sandboxed:!1,unavailable:!1,degraded:!1,deactivated:!1,overdue:h,ready:!h}),Pb();break;case"beforecopy":e=b;break;case"copy":var i,j,k=a.relatedTarget;!Q["text/html"]&&!Q["text/plain"]&&k&&(j=k.value||k.outerHTML||k.innerHTML)&&(i=k.value||k.textContent||k.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",i),j!==i&&a.clipboardData.setData("text/html",j)):!Q["text/plain"]&&a.target&&(i=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",i));break;case"aftercopy":wb(a),Vb.clearData(),b&&b!==Jb()&&b.focus&&b.focus();break;case"_mouseover":Vb.focus(b),Z.bubbleEvents===!0&&f&&(b&&b!==a.relatedTarget&&!F(a.relatedTarget,b)&&xb(A({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),xb(A({},a,{type:"mouseover"})));break;case"_mouseout":Vb.blur(),Z.bubbleEvents===!0&&f&&(b&&b!==a.relatedTarget&&!F(a.relatedTarget,b)&&xb(A({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),xb(A({},a,{type:"mouseout"})));break;case"_mousedown":Kb(b,Z.activeClass),Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}));break;case"_mouseup":Lb(b,Z.activeClass),Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}));break;case"_click":e=null,Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}));break;case"_mousemove":Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},wb=function(a){if(a.errors&&a.errors.length>0){var b=B(a);A(b,{type:"error",name:"clipboard-error"}),delete b.success,i(function(){Vb.emit(b)},0)}},xb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,d=c&&c.ownerDocument||g,e={view:d.defaultView||f,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:d.createEvent?0:1},h=A(e,a);c&&d.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=d.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},yb=function(){var a=Z.flashLoadTimeout;if("number"==typeof a&&a>=0){var b=Math.min(1e3,a/10),c=Z.swfObjectId+"_fallbackContent";T=k(function(){var a=g.getElementById(c);Ob(a)&&(Pb(),N.deactivated=null,Vb.emit({type:"error",name:"swf-not-found"}))},b)}},zb=function(){var a=g.createElement("div");return a.id=Z.containerId,a.className=Z.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+Sb(Z.zIndex),a},Ab=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},Bb=function(){var a,b=N.bridge,c=Ab(b);if(!b){var d=Ib(f.location.host,Z),e="never"===d?"none":"all",h=Gb(A({jsVersion:Vb.version},Z)),i=Z.swfPath+Fb(Z.swfPath,Z);c=zb();var j=g.createElement("div");c.appendChild(j),g.body.appendChild(c);var k=g.createElement("div"),l="activex"===N.pluginType;k.innerHTML='"+(l?'':"")+'
 
',b=k.firstChild,k=null,y(b).ZeroClipboard=Vb,c.replaceChild(b,j),yb()}return b||(b=g[Z.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),N.bridge=b||null,b},Cb=function(){var a=N.bridge;if(a){var d=Ab(a);d&&("activex"===N.pluginType&&"readyState"in a?(a.style.display="none",function e(){if(4===a.readyState){for(var b in a)"function"==typeof a[b]&&(a[b]=null);a.parentNode&&a.parentNode.removeChild(a),d.parentNode&&d.parentNode.removeChild(d)}else i(e,10)}()):(a.parentNode&&a.parentNode.removeChild(a),d.parentNode&&d.parentNode.removeChild(d))),Pb(),N.ready=null,N.bridge=null,N.deactivated=null,c=b}},Db=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&w.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},Eb=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(w.call(a,d))if("errors"===d){c[d]=a[d]?a[d].slice():[];for(var e=0,f=c[d].length;f>e;e++)c[d][e].format=b[c[d][e].format]}else if("success"!==d&&"data"!==d)c[d]=a[d];else{c[d]={};var g=a[d];for(var h in g)h&&w.call(g,h)&&w.call(b,h)&&(c[d][b[h]]=g[h])}return c},Fb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+t():""},Gb=function(a){var b,c,d,e,g="",h=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?e=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(e=a.trustedDomains)),e&&e.length)for(b=0,c=e.length;c>b;b++)if(w.call(e,b)&&e[b]&&"string"==typeof e[b]){if(d=Hb(e[b]),!d)continue;if("*"===d){h.length=0,h.push(d);break}h.push.apply(h,[d,"//"+d,f.location.protocol+"//"+d])}return h.length&&(g+="trustedOrigins="+n(h.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+n(a.swfObjectId)),"string"==typeof a.jsVersion&&a.jsVersion&&(g+=(g?"&":"")+"jsVersion="+n(a.jsVersion)),g},Hb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},Ib=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(w.call(a,b)&&(d=Hb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=Hb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),Jb=function(){try{return g.activeElement}catch(a){return null}},Kb=function(a,b){var c,d,e,f=[];if("string"==typeof b&&b&&(f=b.split(/\s+/)),a&&1===a.nodeType&&f.length>0)if(a.classList)for(c=0,d=f.length;d>c;c++)a.classList.add(f[c]);else if(a.hasOwnProperty("className")){for(e=" "+a.className+" ",c=0,d=f.length;d>c;c++)-1===e.indexOf(" "+f[c]+" ")&&(e+=f[c]+" ");a.className=e.replace(/^\s+|\s+$/g,"")}return a},Lb=function(a,b){var c,d,e,f=[];if("string"==typeof b&&b&&(f=b.split(/\s+/)),a&&1===a.nodeType&&f.length>0)if(a.classList&&a.classList.length>0)for(c=0,d=f.length;d>c;c++)a.classList.remove(f[c]);else if(a.className){for(e=(" "+a.className+" ").replace(/[\r\n\t]/g," "),c=0,d=f.length;d>c;c++)e=e.replace(" "+f[c]+" "," ");a.className=e.replace(/^\s+|\s+$/g,"")}return a},Mb=function(a,b){var c=m(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},Nb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c=a.getBoundingClientRect(),d=f.pageXOffset,e=f.pageYOffset,h=g.documentElement.clientLeft||0,i=g.documentElement.clientTop||0,j=0,k=0;if("relative"===Mb(g.body,"position")){var l=g.body.getBoundingClientRect(),m=g.documentElement.getBoundingClientRect();j=l.left-m.left||0,k=l.top-m.top||0}b.left=c.left+d-h-j,b.top=c.top+e-i-k,b.width="width"in c?c.width:c.right-c.left,b.height="height"in c?c.height:c.bottom-c.top}return b},Ob=function(a){if(!a)return!1;var b=m(a,null),c=r(b.height)>0,d=r(b.width)>0,e=r(b.top)>=0,f=r(b.left)>=0,g=c&&d&&e&&f,h=g?null:Nb(a),i="none"!==b.display&&"collapse"!==b.visibility&&(g||!!h&&(c||h.height>0)&&(d||h.width>0)&&(e||h.top>=0)&&(f||h.left>=0));return i},Pb=function(){j(S),S=0,l(T),T=0},Qb=function(){var a;if(d&&(a=Ab(N.bridge))){var b=Nb(d);A(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+Sb(Z.zIndex)})}},Rb=function(a){N.ready===!0&&(N.bridge&&"function"==typeof N.bridge.setHandCursor?N.bridge.setHandCursor(a):N.ready=!1)},Sb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||s(a)?"string"==typeof a&&(b=Sb(q(a,10))):b=a,"number"==typeof b?b:"auto"},Tb=function(b){var c,d,e,f=N.sandboxed,g=null;if(b=b===!0,M===!1)g=!1;else{try{d=a.frameElement||null}catch(h){e={name:h.name,message:h.message}}if(d&&1===d.nodeType&&"IFRAME"===d.nodeName)try{g=d.hasAttribute("sandbox")}catch(h){g=null}else{try{c=document.domain||null}catch(h){c=null}(null===c||e&&"SecurityError"===e.name&&/(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(e.message.toLowerCase()))&&(g=!0)}}return N.sandboxed=g,f===g||b||Ub(o),g},Ub=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(l=b(a.version)),!l&&a.description&&(l=b(a.description)),a.filename&&(k=c(a.filename)))}var e,f,g,i=!1,j=!1,k=!1,l="";if(h.plugins&&h.plugins.length)e=h.plugins["Shockwave Flash"],d(e),h.plugins["Shockwave Flash 2.0"]&&(i=!0,l="2.0.0.11");else if(h.mimeTypes&&h.mimeTypes.length)g=h.mimeTypes["application/x-shockwave-flash"],e=g&&g.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{f=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,l=b(f.GetVariable("$version"))}catch(m){try{f=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,l="6.0.21"}catch(n){try{f=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,l=b(f.GetVariable("$version"))}catch(o){j=!1}}}}N.disabled=i!==!0,N.outdated=l&&r(l)e;e++)a=g[e].replace(/^on/,""),h[a]=!0,j[a]||(j[a]=[]),j[a].push(d);if(h.ready&&N.ready&&this.emit({type:"ready",client:this}),h.error){for(e=0,f=W.length;f>e;e++)if(N[W[e].replace(/^flash-/,"")]){this.emit({type:"error",name:W[e],client:this});break}c!==b&&Vb.version!==c&&this.emit({type:"error",name:"version-mismatch",jsVersion:Vb.version,swfVersion:c})}}return this},bc=function(a,b){var c,d,e,f,g,h=Xb[this.id],i=h&&h.handlers;if(!i)return this;if(0===arguments.length)f=u(i);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)w.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=i[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return this},cc=function(a){var b=null,c=Xb[this.id]&&Xb[this.id].handlers;return c&&(b="string"==typeof a&&a?c[a]?c[a].slice(0):[]:B(c)),b},dc=function(a){if(ic.call(this,a)){"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(a=A({},a));var b=A({},ob(a),{client:this});jc.call(this,b)}return this},ec=function(a){if(!Xb[this.id])throw new Error("Attempted to clip element(s) to a destroyed ZeroClipboard client instance");a=kc(a);for(var b=0;b0,e=!a.target||d&&-1!==c.indexOf(a.target),f=a.relatedTarget&&d&&-1!==c.indexOf(a.relatedTarget),g=a.client&&a.client===this;return b&&(e||f||g)?!0:!1},jc=function(a){var b=Xb[this.id];if("object"==typeof a&&a&&a.type&&b){var c=rb(a),d=b&&b.handlers["*"]||[],e=b&&b.handlers[a.type]||[],g=d.concat(e);if(g&&g.length){var h,i,j,k,l,m=this;for(h=0,i=g.length;i>h;h++)j=g[h],k=m,"string"==typeof j&&"function"==typeof f[j]&&(j=f[j]),"object"==typeof j&&j&&"function"==typeof j.handleEvent&&(k=j,j=j.handleEvent),"function"==typeof j&&(l=A({},a),sb(j,k,[l],c))}}},kc=function(a){return"string"==typeof a&&(a=[]),"number"!=typeof a.length?[a]:a},lc=function(a){if(a&&1===a.nodeType){var b=function(a){(a||(a=f.event))&&("js"!==a._source&&(a.stopImmediatePropagation(),a.preventDefault()),delete a._source)},c=function(c){(c||(c=f.event))&&(b(c),Vb.focus(a))};a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",b,!1),a.addEventListener("mouseenter",b,!1),a.addEventListener("mouseleave",b,!1),a.addEventListener("mousemove",b,!1),$b[a.zcClippingId]={mouseover:c,mouseout:b,mouseenter:b,mouseleave:b,mousemove:b}}},mc=function(a){if(a&&1===a.nodeType){var b=$b[a.zcClippingId];if("object"==typeof b&&b){for(var c,d,e=["move","leave","enter","out","over"],f=0,g=e.length;g>f;f++)c="mouse"+e[f],d=b[c],"function"==typeof d&&a.removeEventListener(c,d,!1);delete $b[a.zcClippingId]}}};Vb._createClient=function(){_b.apply(this,z(arguments))},Vb.prototype.on=function(){return ac.apply(this,z(arguments))},Vb.prototype.off=function(){return bc.apply(this,z(arguments))},Vb.prototype.handlers=function(){return cc.apply(this,z(arguments))},Vb.prototype.emit=function(){return dc.apply(this,z(arguments))},Vb.prototype.clip=function(){return ec.apply(this,z(arguments))},Vb.prototype.unclip=function(){return fc.apply(this,z(arguments))},Vb.prototype.elements=function(){return gc.apply(this,z(arguments))},Vb.prototype.destroy=function(){return hc.apply(this,z(arguments))},Vb.prototype.setText=function(a){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData("text/plain",a),this},Vb.prototype.setHtml=function(a){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData("text/html",a),this},Vb.prototype.setRichText=function(a){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData("application/rtf",a),this},Vb.prototype.setData=function(){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData.apply(this,z(arguments)),this},Vb.prototype.clearData=function(){if(!Xb[this.id])throw new Error("Attempted to clear pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.clearData.apply(this,z(arguments)),this},Vb.prototype.getData=function(){if(!Xb[this.id])throw new Error("Attempted to get pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.getData.apply(this,z(arguments))},"function"==typeof define&&define.amd?define(function(){return Vb}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports?module.exports=Vb:a.ZeroClipboard=Vb}(function(){return this||window}()); +//# sourceMappingURL=ZeroClipboard.min.map \ No newline at end of file diff --git a/js/ZeroClipboard.swf b/js/ZeroClipboard.swf index 55ccf960..8bad6a3e 100644 Binary files a/js/ZeroClipboard.swf and b/js/ZeroClipboard.swf differ diff --git a/js/alertify.js b/js/alertify.js index 126a5045..2a3cb7fe 100644 --- a/js/alertify.js +++ b/js/alertify.js @@ -1,674 +1 @@ -/** - * alertify - * An unobtrusive customizable JavaScript notification system - * - * @author Fabien Doiron - * @copyright Fabien Doiron 2013 - * @license MIT - * @link http://fabien-d.github.com/alertify.js/ - * @module alertify - * @version 0.3.11 - */ -(function (global, undefined) { - "use strict"; - - var document = global.document, - Alertify; - - Alertify = function () { - - var _alertify = {}, - dialogs = {}, - isopen = false, - keys = {ENTER: 13, ESC: 27, SPACE: 32}, - queue = [], - $, btnCancel, btnOK, btnReset, btnResetBack, btnFocus, elCallee, elCover, elDialog, elLog, form, input, getTransitionEvent; - - /** - * Markup pieces - * @type {Object} - */ - dialogs = { - buttons: { - holder: "", - submit: "", - ok: "", - cancel: "" - }, - input: "
", - message: "

{{message}}

", - log: "
{{message}}
" - }; - - /** - * Return the proper transitionend event - * @return {String} Transition type string - */ - getTransitionEvent = function () { - var t, - type, - supported = false, - el = document.createElement("fakeelement"), - transitions = { - "WebkitTransition": "webkitTransitionEnd", - "MozTransition": "transitionend", - "OTransition": "otransitionend", - "transition": "transitionend" - }; - - for (t in transitions) { - if (el.style[t] !== undefined) { - type = transitions[t]; - supported = true; - break; - } - } - - return { - type: type, - supported: supported - }; - }; - - /** - * Shorthand for document.getElementById() - * - * @param {String} id A specific element ID - * @return {Object} HTML element - */ - $ = function (id) { - return document.getElementById(id); - }; - - /** - * Alertify private object - * @type {Object} - */ - _alertify = { - - /** - * Labels object - * @type {Object} - */ - labels: { - ok: "OK", - cancel: "Cancel" - }, - - /** - * Delay number - * @type {Number} - */ - delay: 5000, - - /** - * Whether buttons are reversed (default is secondary/primary) - * @type {Boolean} - */ - buttonReverse: false, - - /** - * Which button should be focused by default - * @type {String} "ok" (default), "cancel", or "none" - */ - buttonFocus: "ok", - - /** - * Set the transition event on load - * @type {[type]} - */ - transition: undefined, - - /** - * Set the action after closing the alert - * @type {String} - */ - beforeCloseAction: undefined, - - /** - * Set the proper button click events - * - * @param {Function} fn [Optional] Callback function - * - * @return {undefined} - */ - addListeners: function (fn) { - var hasOK = (typeof btnOK !== "undefined"), - hasCancel = (typeof btnCancel !== "undefined"), - hasInput = (typeof input !== "undefined"), - val = "", - self = this, - ok, cancel, common, key, reset; - - // ok event handler - ok = function (event) { - if (typeof event.preventDefault !== "undefined") event.preventDefault(); - common(event); - if (typeof input !== "undefined") val = input.value; - if (typeof fn === "function") { - if (typeof input !== "undefined") { - fn(true, val); - } - else fn(true); - } - return false; - }; - - // cancel event handler - cancel = function (event) { - if (typeof event.preventDefault !== "undefined") event.preventDefault(); - common(event); - if (typeof fn === "function") fn(false); - return false; - }; - - // common event handler (keyup, ok and cancel) - common = function (event) { - self.hide(); - self.unbind(document.body, "keyup", key); - self.unbind(btnReset, "focus", reset); - if (hasOK) self.unbind(btnOK, "click", ok); - if (hasCancel) self.unbind(btnCancel, "click", cancel); - }; - - // keyup handler - key = function (event) { - var keyCode = event.keyCode; - if ((keyCode === keys.SPACE && !hasInput) || (hasInput && keyCode === keys.ENTER)) ok(event); - if (keyCode === keys.ESC && hasCancel) cancel(event); - }; - - // reset focus to first item in the dialog - reset = function (event) { - if (hasInput) input.focus(); - else if (!hasCancel || self.buttonReverse) btnOK.focus(); - else btnCancel.focus(); - }; - - // handle reset focus link - // this ensures that the keyboard focus does not - // ever leave the dialog box until an action has - // been taken - this.bind(btnReset, "focus", reset); - this.bind(btnResetBack, "focus", reset); - // handle OK click - if (hasOK) this.bind(btnOK, "click", ok); - // handle Cancel click - if (hasCancel) this.bind(btnCancel, "click", cancel); - // listen for keys, Cancel => ESC - this.bind(document.body, "keyup", key); - if (!this.transition.supported) { - this.setFocus(); - } - }, - - /** - * Bind events to elements - * - * @param {Object} el HTML Object - * @param {Event} event Event to attach to element - * @param {Function} fn Callback function - * - * @return {undefined} - */ - bind: function (el, event, fn) { - if (typeof el.addEventListener === "function") { - el.addEventListener(event, fn, false); - } else if (el.attachEvent) { - el.attachEvent("on" + event, fn); - } - }, - - /** - * Use alertify as the global error handler (using window.onerror) - * - * @return {boolean} success - */ - handleErrors: function () { - if (typeof global.onerror !== "undefined") { - var self = this; - global.onerror = function (msg, url, line) { - self.error("[" + msg + " on line " + line + " of " + url + "]", 0); - }; - return true; - } else { - return false; - } - }, - - /** - * Append button HTML strings - * - * @param {String} secondary The secondary button HTML string - * @param {String} primary The primary button HTML string - * - * @return {String} The appended button HTML strings - */ - appendButtons: function (secondary, primary) { - return this.buttonReverse ? primary + secondary : secondary + primary; - }, - - /** - * Build the proper message box - * - * @param {Object} item Current object in the queue - * - * @return {String} An HTML string of the message box - */ - build: function (item) { - var html = "", - type = item.type, - message = item.message, - css = item.cssClass || ""; - - html += "
"; - html += "Reset Focus"; - - if (_alertify.buttonFocus === "none") html += ""; - - // doens't require an actual form - if (type === "prompt") html += "
"; - - html += "
"; - html += dialogs.message.replace("{{message}}", message); - - if (type === "prompt") html += dialogs.input; - - html += dialogs.buttons.holder; - html += "
"; - - if (type === "prompt") html += "
"; - - html += "Reset Focus"; - html += "
"; - - switch (type) { - case "confirm": - html = html.replace("{{buttons}}", this.appendButtons(dialogs.buttons.cancel, dialogs.buttons.ok)); - html = html.replace("{{ok}}", this.labels.ok).replace("{{cancel}}", this.labels.cancel); - break; - case "prompt": - html = html.replace("{{buttons}}", this.appendButtons(dialogs.buttons.cancel, dialogs.buttons.submit)); - html = html.replace("{{ok}}", this.labels.ok).replace("{{cancel}}", this.labels.cancel); - break; - case "alert": - html = html.replace("{{buttons}}", dialogs.buttons.ok); - html = html.replace("{{ok}}", this.labels.ok); - break; - default: - break; - } - - elDialog.className = "alertify alertify-" + type + " " + css; - elCover.className = "alertify-cover"; - return html; - }, - - /** - * Close the log messages - * - * @param {Object} elem HTML Element of log message to close - * @param {Number} wait [optional] Time (in ms) to wait before automatically hiding the message, if 0 never hide - * - * @return {undefined} - */ - close: function (elem, wait) { - // Unary Plus: +"2" === 2 - var timer = (wait && !isNaN(wait)) ? +wait : this.delay, - self = this, - hideElement, transitionDone; - - var action = this.beforeCloseAction; - - // set click event on log messages - this.bind(elem, "click", function () { - hideElement(elem); - }); - // Hide the dialog box after transition - // This ensure it doens't block any element from being clicked - transitionDone = function (event) { - event.stopPropagation(); - // unbind event so function only gets called once - self.unbind(this, self.transition.type, transitionDone); - // remove log message - elLog.removeChild(this); - if (!elLog.hasChildNodes()) elLog.className += " alertify-logs-hidden"; - }; - // this sets the hide class to transition out - // or removes the child if css transitions aren't supported - hideElement = function (el) { - // ensure element exists - if (typeof el !== "undefined" && el.parentNode === elLog) { - // whether CSS transition exists - if (self.transition.supported) { - self.bind(el, self.transition.type, transitionDone); - el.className += " alertify-log-hide"; - } else { - elLog.removeChild(el); - if (!elLog.hasChildNodes()) elLog.className += " alertify-logs-hidden"; - } - } - }; - - // Execute an action before closing alert - eval(action); - - // never close (until click) if wait is set to 0 - if (wait === 0) return; - // set timeout to auto close the log message - setTimeout(function () { - hideElement(elem); - }, timer); - }, - - /** - * Create a dialog box - * - * @param {String} message The message passed from the callee - * @param {String} type Type of dialog to create - * @param {Function} fn [Optional] Callback function - * @param {String} placeholder [Optional] Default value for prompt input field - * @param {String} cssClass [Optional] Class(es) to append to dialog box - * - * @return {Object} - */ - dialog: function (message, type, fn, placeholder, cssClass) { - // set the current active element - // this allows the keyboard focus to be resetted - // after the dialog box is closed - elCallee = document.activeElement; - // check to ensure the alertify dialog element - // has been successfully created - var check = function () { - if ((elLog && elLog.scrollTop !== null) && (elCover && elCover.scrollTop !== null)) return; - else check(); - }; - // error catching - if (typeof message !== "string") throw new Error("message must be a string"); - if (typeof type !== "string") throw new Error("type must be a string"); - if (typeof fn !== "undefined" && typeof fn !== "function") throw new Error("fn must be a function"); - // initialize alertify if it hasn't already been done - this.init(); - check(); - - queue.push({type: type, message: message, callback: fn, placeholder: placeholder, cssClass: cssClass}); - if (!isopen) this.setup(); - - return this; - }, - - /** - * Extend the log method to create custom methods - * - * @param {String} type Custom method name - * - * @return {Function} - */ - extend: function (type) { - if (typeof type !== "string") throw new Error("extend method must have exactly one paramter"); - return function (message, wait) { - this.log(message, type, wait); - return this; - }; - }, - - /** - * Hide the dialog and rest to defaults - * - * @return {undefined} - */ - hide: function () { - var transitionDone, - self = this; - // remove reference from queue - queue.splice(0, 1); - // if items remaining in the queue - if (queue.length > 0) this.setup(true); - else { - isopen = false; - // Hide the dialog box after transition - // This ensure it doens't block any element from being clicked - transitionDone = function (event) { - event.stopPropagation(); - // unbind event so function only gets called once - self.unbind(elDialog, self.transition.type, transitionDone); - }; - // whether CSS transition exists - if (this.transition.supported) { - this.bind(elDialog, this.transition.type, transitionDone); - elDialog.className = "alertify alertify-hide alertify-hidden"; - } else { - elDialog.className = "alertify alertify-hide alertify-hidden alertify-isHidden"; - } - elCover.className = "alertify-cover alertify-cover-hidden"; - // set focus to the last element or body - // after the dialog is closed - elCallee.focus(); - } - }, - - /** - * Initialize Alertify - * Create the 2 main elements - * - * @return {undefined} - */ - init: function () { - // ensure legacy browsers support html5 tags - document.createElement("nav"); - document.createElement("article"); - document.createElement("section"); - // cover - if ($("alertify-cover") == null) { - elCover = document.createElement("div"); - elCover.setAttribute("id", "alertify-cover"); - elCover.className = "alertify-cover alertify-cover-hidden"; - document.body.appendChild(elCover); - } - // main element - if ($("alertify") == null) { - isopen = false; - queue = []; - elDialog = document.createElement("section"); - elDialog.setAttribute("id", "alertify"); - elDialog.className = "alertify alertify-hidden"; - document.body.appendChild(elDialog); - } - // log element - if ($("alertify-logs") == null) { - elLog = document.createElement("section"); - elLog.setAttribute("id", "alertify-logs"); - elLog.className = "alertify-logs alertify-logs-hidden"; - document.body.appendChild(elLog); - } - // set tabindex attribute on body element - // this allows script to give it focus - // after the dialog is closed - document.body.setAttribute("tabindex", "0"); - // set transition type - this.transition = getTransitionEvent(); - }, - - /** - * Show a new log message box - * - * @param {String} message The message passed from the callee - * @param {String} type [Optional] Optional type of log message - * @param {Number} wait [Optional] Time (in ms) to wait before auto-hiding the log - * - * @return {Object} - */ - log: function (message, type, wait) { - // check to ensure the alertify dialog element - // has been successfully created - var check = function () { - if (elLog && elLog.scrollTop !== null) return; - else check(); - }; - // initialize alertify if it hasn't already been done - this.init(); - check(); - - elLog.className = "alertify-logs"; - this.notify(message, type, wait); - return this; - }, - - /** - * Add new log message - * If a type is passed, a class name "alertify-log-{type}" will get added. - * This allows for custom look and feel for various types of notifications. - * - * @param {String} message The message passed from the callee - * @param {String} type [Optional] Type of log message - * @param {Number} wait [Optional] Time (in ms) to wait before auto-hiding - * - * @return {undefined} - */ - notify: function (message, type, wait) { - var log = document.createElement("article"); - log.className = "alertify-log" + ((typeof type === "string" && type !== "") ? " alertify-log-" + type : ""); - log.innerHTML = message; - // append child - elLog.appendChild(log); - // triggers the CSS animation - setTimeout(function () { - log.className = log.className + " alertify-log-show"; - }, 50); - this.close(log, wait); - }, - - /** - * Set properties - * - * @param {Object} args Passing parameters - * - * @return {undefined} - */ - set: function (args) { - var k; - // error catching - if (typeof args !== "object" && args instanceof Array) throw new Error("args must be an object"); - // set parameters - for (k in args) { - if (args.hasOwnProperty(k)) { - this[k] = args[k]; - } - } - }, - - /** - * Common place to set focus to proper element - * - * @return {undefined} - */ - setFocus: function () { - if (input) { - input.focus(); - input.select(); - } - else btnFocus.focus(); - }, - - /** - * Initiate all the required pieces for the dialog box - * - * @return {undefined} - */ - setup: function (fromQueue) { - var item = queue[0], - self = this, - transitionDone; - - // dialog is open - isopen = true; - // Set button focus after transition - transitionDone = function (event) { - event.stopPropagation(); - self.setFocus(); - // unbind event so function only gets called once - self.unbind(elDialog, self.transition.type, transitionDone); - }; - // whether CSS transition exists - if (this.transition.supported && !fromQueue) { - this.bind(elDialog, this.transition.type, transitionDone); - } - // build the proper dialog HTML - elDialog.innerHTML = this.build(item); - // assign all the common elements - btnReset = $("alertify-resetFocus"); - btnResetBack = $("alertify-resetFocusBack"); - btnOK = $("alertify-ok") || undefined; - btnCancel = $("alertify-cancel") || undefined; - btnFocus = (_alertify.buttonFocus === "cancel") ? btnCancel : ((_alertify.buttonFocus === "none") ? $("alertify-noneFocus") : btnOK), - input = $("alertify-text") || undefined; - form = $("alertify-form") || undefined; - // add placeholder value to the input field - if (typeof item.placeholder === "string" && item.placeholder !== "") input.value = item.placeholder; - if (fromQueue) this.setFocus(); - this.addListeners(item.callback); - }, - - /** - * Unbind events to elements - * - * @param {Object} el HTML Object - * @param {Event} event Event to detach to element - * @param {Function} fn Callback function - * - * @return {undefined} - */ - unbind: function (el, event, fn) { - if (typeof el.removeEventListener === "function") { - el.removeEventListener(event, fn, false); - } else if (el.detachEvent) { - el.detachEvent("on" + event, fn); - } - } - }; - - return { - alert: function (message, fn, cssClass) { - _alertify.dialog(message, "alert", fn, "", cssClass); - return this; - }, - confirm: function (message, fn, cssClass) { - _alertify.dialog(message, "confirm", fn, "", cssClass); - return this; - }, - extend: _alertify.extend, - init: _alertify.init, - log: function (message, type, wait) { - _alertify.log(message, type, wait); - return this; - }, - prompt: function (message, fn, placeholder, cssClass) { - _alertify.dialog(message, "prompt", fn, placeholder, cssClass); - return this; - }, - success: function (message, wait) { - _alertify.log(message, "success", wait); - return this; - }, - error: function (message, wait) { - _alertify.log(message, "error", wait); - return this; - }, - set: function (args) { - _alertify.set(args); - }, - labels: _alertify.labels, - debug: _alertify.handleErrors - }; - }; - - // AMD and window support - if (typeof define === "function") { - define([], function () { - return new Alertify(); - }); - } else if (typeof global.alertify === "undefined") { - global.alertify = new Alertify(); - } - -}(this)); +var Alertify=function(t,e){"use strict";var i,n=t.document;i=function(){function t(t){return n.getElementById(t)}function i(t){"undefined"!=typeof f&&t.parentNode===f&&f.removeChild(t)}function a(){if(!u){var t=n.createElement("fakeelement"),i={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"};for(var a in i)if(i.hasOwnProperty(a)&&t.style[a]!==e){u=i[a],h=!0;break}}return{type:u,supported:h}}var r,o,l,s,f,c,d,u,p=!1,y=[],h=!1,g={buttons:{holder:"",ok:"",cancel:""},input:"
",message:"

{{message}}

",log:"
{{message}}
"},m={defaultOkLabel:"Ok",okLabel:this.defaultOkLabel,defaultCancelLabel:"Cancel",cancelLabel:this.defaultCancelLabel,defaultMaxLogItems:2,maxLogItems:this.defaultMaxLogItems,promptValue:"",promptPlaceholder:"",delay:5e3,defaultDelay:5e3,transition:e,addListeners:function(t,e){var i="undefined"!=typeof l,n="undefined"!=typeof o,a=this,r=function(){a.hide(),i&&l.removeEventListener("click",s),n&&o.removeEventListener("click",f)},s=function(e){r(e),"function"==typeof t&&("undefined"==typeof d?t(e):t(d.value,e))},f=function(t){r(t),"function"==typeof e&&e(t)};i&&l.addEventListener("click",s),n&&o.addEventListener("click",f)},build:function(t){var e=(t.cssClass||"",g.buttons.ok),i="
"+g.message.replace("{{message}}",t.message);return("confirm"===t.type||"prompt"===t.type)&&(e=g.buttons.cancel+g.buttons.ok),"prompt"===t.type&&(i+=g.input),i=(i+g.buttons.holder+"
").replace("{{buttons}}",e).replace("{{ok}}",this.okLabel).replace("{{cancel}}",this.cancelLabel),s.className="alertify",i},closeLogOnClick:!1,closeLogOnClickDefault:!1,setCloseLogOnClick:function(t){this.closeLogOnClick=!!t},close:function(t,e){var n,a,r=e&&!isNaN(e)?+e:this.delay,o=this;this.closeLogOnClick&&t.addEventListener("click",function(){n(t)}),a=function(t){t.stopPropagation(),this.removeEventListener(o.transition.type,a),i(this)},n=function(t){var e=1;"undefined"!=typeof t&&t.parentNode===f&&(o.transition.supported&&(t.addEventListener(o.transition.type,a),t.className+=" alertify-log-hide",e=500),setTimeout(function(){i(t)},e||1))},0!==e&&setTimeout(function(){n(t)},r)},dialog:function(t,e,i,n){this.init(),y.push({type:e,message:t,onOkay:i,onCancel:n}),p||this.setup()},hide:function(){var t,e=this;y.splice(0,1),y.length>0?this.setup(!0):(p=!1,t=function(i){i.stopPropagation(),s.removeEventListener(e.transition.type,t)},this.transition.supported&&s.addEventListener(this.transition.type,t),s.className="alertify alertify-hide alertify-hidden")},init:function(){this.injectCss(),null===t("alertify")&&(p=!1,y=[],s=n.createElement("div"),s.setAttribute("id","alertify"),s.className="alertify alertify-hidden",n.body.appendChild(s)),null===t("alertify-logs")&&(f=n.createElement("div"),f.setAttribute("id","alertify-logs"),f.className="alertify-logs",n.body.appendChild(f)),this.transition=a()},log:function(t,e,i){this.init(),f.className="alertify-logs";var n=f.childNodes.length-this.maxLogItems;if(n>=0)for(var a=0,r=n+1;r>a;a++)this.close(f.childNodes[a],1);this.notify(t,e,i)},notify:function(t,e,i){var a=n.createElement("div");a.className="alertify-log alertify-log-"+(e||"default"),a.innerHTML=t,"function"==typeof i&&a.addEventListener("click",i),f.appendChild(a),setTimeout(function(){a.className+=" alertify-log-show"},50),this.close(a,this.delay)},setup:function(i){var n=y[0],a=this,r=function(t){s.removeEventListener(a.transition.type,r)};p=!0,this.transition.supported&&!i&&s.addEventListener(this.transition.type,r),s.innerHTML=this.build(n),l=t("alertify-ok")||e,o=t("alertify-cancel")||e,d=t("alertify-text")||e,c=t("alertify-form")||e,d&&("string"==typeof this.promptPlaceholder&&(d.placeholder=this.promptPlaceholder),"string"==typeof this.promptValue&&(d.value=this.promptValue)),this.addListeners(n.onOkay,n.onCancel)},okBtn:function(t){return this.okLabel=t,this},setDelay:function(t){var e=parseInt(t||0,10);return this.delay=isNaN(e)?this.defultDelay:t,this},cancelBtn:function(t){return this.cancelLabel=t,this},setMaxLogItems:function(t){this.maxLogItems=parseInt(t||this.defaultMaxLogItems)},reset:function(){this.okBtn(this.defaultOkLabel),this.cancelBtn(this.defaultCancelLabel),this.setMaxLogItems(),this.promptValue="",this.promptPlaceholder="",this.delay=this.defaultDelay,this.setCloseLogOnClick(this.closeLogOnClickDefault)},injectCss:function(){if(!r){var t=n.getElementsByTagName("head")[0],e=n.createElement("style");e.type="text/css",e.innerHTML=".alertify,.alertify *,.alertify-button{box-sizing:border-box}.alertify{font-family:inherit;position:fixed;background-color:rgba(0,0,0,.6);left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:99999}.alertify .alertify-alert,.alertify .alertify-dialog{width:100%;margin:0 auto;position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.alertify .alertify-alert .alertify-inner,.alertify .alertify-dialog .alertify-inner{width:400px;max-width:95%;margin:0 auto;padding:12px;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.14),0 4px 5px 0 rgba(0,0,0,.098),0 1px 10px 0 rgba(0,0,0,.084)}.alertify .alertify-buttons{text-align:right}.alertify,.alertify-hide,.alertify-log,.alertify-show{box-sizing:border-box;-webkit-transition:all .3s cubic-bezier(.25,.8,.25,1);transition:all .3s cubic-bezier(.25,.8,.25,1)}.alertify-dialog{padding:12px}.alertify-hidden{opacity:0;display:none}.alertify-logs{position:fixed;z-index:5000;bottom:0;right:0}.alertify-log{display:block;margin-top:10px;position:relative;right:-100%;opacity:0}.alertify-log-show{right:0;opacity:1}.alertify-log-hide{-webkit-transform:translate(100%,0);-ms-transform:translate(100%,0);transform:translate(100%,0);opacity:0}.alertify-inner{text-align:center}.alertify-text{margin-bottom:15px;width:100%;font-size:100%;border:1px solid #CCC;padding:12px}.alertify .alertify-message{padding:12px;margin:0;text-align:left}.alertify-button{background:0 0;color:rgba(0,0,0,.87);position:relative;outline:0;border:0;display:inline-block;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 6px;margin:6px 8px;line-height:36px;min-height:36px;white-space:nowrap;min-width:88px;text-align:center;text-transform:uppercase;font-weight:500;font-size:14px;text-decoration:none;cursor:pointer;border-radius:2px}.alertify-button:active,.alertify-button:hover{background-color:rgba(0,0,0,.05)}.alertify-log{float:right;clear:right;background:rgba(0,0,0,.8);padding:12px 24px;color:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.alertify-log.alertify-log-error{background:rgba(244,67,54,.8)}.alertify-log.alertify-log-success{background:rgba(76,175,80,.9)}",t.insertBefore(e,t.firstChild),r=!0}}};return{reset:function(){return m.reset(),this},alert:function(t,e,i){return m.dialog(t,"alert",e,i),this},confirm:function(t,e,i){return m.dialog(t,"confirm",e,i),this},prompt:function(t,e,i){return m.dialog(t,"prompt",e,i),this},log:function(t,e){return m.log(t,"default",e),this},success:function(t,e){return m.log(t,"success",e),this},error:function(t,e){return m.log(t,"error",e),this},cancelBtn:function(t){return m.cancelBtn(t),this},okBtn:function(t){return m.okBtn(t),this},delay:function(t){return m.setDelay(t),this},placeholder:function(t){return m.promptPlaceholder=t,this},defaultValue:function(t){return m.promptValue=t,this},maxLogItems:function(t){return m.setMaxLogItems(t),this},closeLogOnClick:function(t){return m.setCloseLogOnClick(!!t),this}}},"undefined"!=typeof module&&module&&module.exports?module.exports=i:"function"==typeof define&&define.amd?define(function(){return new i}):t.alertify=new i}("undefined"!=typeof window?window:{}); \ No newline at end of file diff --git a/js/chosen.jquery.min.js b/js/chosen.jquery.min.js index ad430c46..22e38658 100644 --- a/js/chosen.jquery.min.js +++ b/js/chosen.jquery.min.js @@ -1,2 +1,2 @@ -/* Chosen v1.0.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ -!function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=""!==a.style.cssText?' style="'+a.style+'"':"",'
  • '+a.search_text+"
  • "):"":""},AbstractChosen.prototype.result_add_group=function(a){return a.search_match||a.group_match?a.active_options>0?'
  • '+a.search_text+"
  • ":"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+""+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+""+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
    ",c),this.is_multiple?this.container.html('
      '):this.container.html(''+this.default_text+'
        '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(document).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b,c,d;return b=-(null!=(c=a.originalEvent)?c.wheelDelta:void 0)||(null!=(d=a.originialEvent)?d.detail:void 0),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(document).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){return this.container.is(a(b.target).closest(".chosen-container"))?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results())},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
      • ",{"class":"search-choice"}).html(""+b.html+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.form_field.options[0].selected=!0,this.selected_option_count=null,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c,d;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):(this.result_single_selected&&(this.result_single_selected.removeClass("result-selected"),d=this.result_single_selected[0].getAttribute("data-option-array-index"),this.results_data[d].selected=!1),this.result_single_selected=b),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("
        ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
      • '+this.results_none_found+' ""
      • '),c.find("span").first().html(b),this.search_results.append(c)},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
        ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this); \ No newline at end of file +/* Chosen v1.4.2 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +(function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?""+a.group_label+""+a.html:a.html},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(this.choice_label(c)));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),b.search_text=b.group?b.label:b.html,(!b.group||this.group_search)&&(b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+""+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+""+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d instanceof Chosen?d.destroy():d instanceof Chosen||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
        ",c),this.is_multiple?this.container.html('
          '):this.container.html('
          '+this.default_text+'
            '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){return a.container_mousedown(b),b.preventDefault()}),this.container.bind("touchend.chosen",function(b){return a.container_mouseup(b),b.preventDefault()}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
          • ",{"class":"search-choice"}).html(""+this.choice_label(b)+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return a("
            ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
          • '+this.results_none_found+' ""
          • '),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
            ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}).call(this); \ No newline at end of file diff --git a/js/fancybox/fancybox_loading.gif b/js/fancybox/fancybox_loading.gif deleted file mode 100644 index 01586176..00000000 Binary files a/js/fancybox/fancybox_loading.gif and /dev/null differ diff --git a/js/fancybox/jquery.fancybox.js b/js/fancybox/jquery.fancybox.js deleted file mode 100644 index 26f40045..00000000 --- a/js/fancybox/jquery.fancybox.js +++ /dev/null @@ -1,1921 +0,0 @@ -/*! - * fancyBox - jQuery Plugin - * version: 2.1.1 (Mon, 01 Oct 2012) - * @requires jQuery v1.6 or later - * - * Examples at http://fancyapps.com/fancybox/ - * License: www.fancyapps.com/fancybox/#license - * - * Copyright 2012 Janis Skarnelis - janis@fancyapps.com - * - */ - -(function (window, document, $, undefined) { - "use strict"; - - var W = $(window), - D = $(document), - F = $.fancybox = function () { - F.open.apply( this, arguments ); - }, - didUpdate = null, - isTouch = document.createTouch !== undefined, - - isQuery = function(obj) { - return obj && obj.hasOwnProperty && obj instanceof $; - }, - isString = function(str) { - return str && $.type(str) === "string"; - }, - isPercentage = function(str) { - return isString(str) && str.indexOf('%') > 0; - }, - isScrollable = function(el) { - return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); - }, - getScalar = function(orig, dim) { - var value = parseInt(orig, 10) || 0; - - if (dim && isPercentage(orig)) { - value = F.getViewport()[ dim ] / 100 * value; - } - - return Math.ceil(value); - }, - getValue = function(value, dim) { - return getScalar(value, dim) + 'px'; - }; - - $.extend(F, { - // The current version of fancyBox - version: '2.1.1', - - defaults: { - padding : 15, - margin : 20, - - width : 800, - height : 600, - minWidth : 100, - minHeight : 100, - maxWidth : 9999, - maxHeight : 9999, - - autoSize : true, - autoHeight : false, - autoWidth : false, - - autoResize : !isTouch, - autoCenter : !isTouch, - fitToView : true, - aspectRatio : false, - topRatio : 0.5, - leftRatio : 0.5, - - scrolling : 'auto', // 'auto', 'yes' or 'no' - wrapCSS : '', - - arrows : true, - closeBtn : true, - closeClick : false, - nextClick : false, - mouseWheel : true, - autoPlay : false, - playSpeed : 3000, - preload : 3, - modal : false, - loop : true, - - ajax : { - dataType : 'html', - headers : { 'X-fancyBox': true } - }, - iframe : { - scrolling : 'auto', - preload : true - }, - swf : { - wmode: 'transparent', - allowfullscreen : 'true', - allowscriptaccess : 'always' - }, - - keys : { - next : { - 13 : 'left', // enter - 34 : 'up', // page down - 39 : 'left', // right arrow - 40 : 'up' // down arrow - }, - prev : { - 8 : 'right', // backspace - 33 : 'down', // page up - 37 : 'right', // left arrow - 38 : 'down' // up arrow - }, - close : [27], // escape key - play : [32], // space - start/stop slideshow - toggle : [70] // letter "f" - toggle fullscreen - }, - - direction : { - next : 'left', - prev : 'right' - }, - - scrollOutside : true, - - // Override some properties - index : 0, - type : null, - href : null, - content : null, - title : null, - - // HTML templates - tpl: { - wrap : '
            ', - image : '', - iframe : '', - error : '

            The requested content cannot be loaded.
            Please try again later.

            ', - closeBtn : '
            ', - next : '', - prev : '' - }, - - // Properties for each animation type - // Opening fancyBox - openEffect : 'fade', // 'elastic', 'fade' or 'none' - openSpeed : 250, - openEasing : 'swing', - openOpacity : true, - openMethod : 'zoomIn', - - // Closing fancyBox - closeEffect : 'fade', // 'elastic', 'fade' or 'none' - closeSpeed : 250, - closeEasing : 'swing', - closeOpacity : true, - closeMethod : 'zoomOut', - - // Changing next gallery item - nextEffect : 'elastic', // 'elastic', 'fade' or 'none' - nextSpeed : 250, - nextEasing : 'swing', - nextMethod : 'changeIn', - - // Changing previous gallery item - prevEffect : 'elastic', // 'elastic', 'fade' or 'none' - prevSpeed : 250, - prevEasing : 'swing', - prevMethod : 'changeOut', - - // Enable default helpers - helpers : { - overlay : true, - title : true - }, - - // Callbacks - onCancel : $.noop, // If canceling - beforeLoad : $.noop, // Before loading - afterLoad : $.noop, // After loading - beforeShow : $.noop, // Before changing in current item - afterShow : $.noop, // After opening - beforeChange : $.noop, // Before changing gallery item - beforeClose : $.noop, // Before closing - afterClose : $.noop // After closing - }, - - //Current state - group : {}, // Selected group - opts : {}, // Group options - previous : null, // Previous element - coming : null, // Element being loaded - current : null, // Currently loaded element - isActive : false, // Is activated - isOpen : false, // Is currently open - isOpened : false, // Have been fully opened at least once - - wrap : null, - skin : null, - outer : null, - inner : null, - - player : { - timer : null, - isActive : false - }, - - // Loaders - ajaxLoad : null, - imgPreload : null, - - // Some collections - transitions : {}, - helpers : {}, - - /* - * Static methods - */ - - open: function (group, opts) { - if (!group) { - return; - } - - if (!$.isPlainObject(opts)) { - opts = {}; - } - - // Close if already active - if (false === F.close(true)) { - return; - } - - // Normalize group - if (!$.isArray(group)) { - group = isQuery(group) ? $(group).get() : [group]; - } - - // Recheck if the type of each element is `object` and set content type (image, ajax, etc) - $.each(group, function(i, element) { - var obj = {}, - href, - title, - content, - type, - rez, - hrefParts, - selector; - - if ($.type(element) === "object") { - // Check if is DOM element - if (element.nodeType) { - element = $(element); - } - - if (isQuery(element)) { - obj = { - href : element.data('fancybox-href') || element.attr('href'), - title : element.data('fancybox-title') || element.attr('title'), - isDom : true, - element : element - }; - - if ($.metadata) { - $.extend(true, obj, element.metadata()); - } - - } else { - obj = element; - } - } - - href = opts.href || obj.href || (isString(element) ? element : null); - title = opts.title !== undefined ? opts.title : obj.title || ''; - - content = opts.content || obj.content; - type = content ? 'html' : (opts.type || obj.type); - - if (!type && obj.isDom) { - type = element.data('fancybox-type'); - - if (!type) { - rez = element.prop('class').match(/fancybox\.(\w+)/); - type = rez ? rez[1] : null; - } - } - - if (isString(href)) { - // Try to guess the content type - if (!type) { - if (F.isImage(href)) { - type = 'image'; - - } else if (F.isSWF(href)) { - type = 'swf'; - - } else if (href.charAt(0) === '#') { - type = 'inline'; - - } else if (isString(element)) { - type = 'html'; - content = element; - } - } - - // Split url into two pieces with source url and content selector, e.g, - // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" - if (type === 'ajax') { - hrefParts = href.split(/\s+/, 2); - href = hrefParts.shift(); - selector = hrefParts.shift(); - } - } - - if (!content) { - if (type === 'inline') { - if (href) { - content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 - - } else if (obj.isDom) { - content = element; - } - - } else if (type === 'html') { - content = href; - - } else if (!type && !href && obj.isDom) { - type = 'inline'; - content = element; - } - } - - $.extend(obj, { - href : href, - type : type, - content : content, - title : title, - selector : selector - }); - - group[ i ] = obj; - }); - - // Extend the defaults - F.opts = $.extend(true, {}, F.defaults, opts); - - // All options are merged recursive except keys - if (opts.keys !== undefined) { - F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; - } - - F.group = group; - - return F._start(F.opts.index); - }, - - // Cancel image loading or abort ajax request - cancel: function () { - var coming = F.coming; - - if (!coming || false === F.trigger('onCancel')) { - return; - } - - F.hideLoading(); - - if (F.ajaxLoad) { - F.ajaxLoad.abort(); - } - - F.ajaxLoad = null; - - if (F.imgPreload) { - F.imgPreload.onload = F.imgPreload.onerror = null; - } - - // If the first item has been canceled, then clear everything - if (coming.wrap) { - coming.wrap.stop(true).trigger('onReset').remove(); - } - - if (!F.current) { - F.trigger('afterClose'); - } - - F.coming = null; - }, - - // Start closing animation if is open; remove immediately if opening/closing - close: function (immediately) { - F.cancel(); - - if (false === F.trigger('beforeClose')) { - return; - } - - F.unbindEvents(); - - if (!F.isOpen || immediately === true) { - $('.fancybox-wrap').stop(true).trigger('onReset').remove(); - - F._afterZoomOut(); - - } else { - F.isOpen = F.isOpened = false; - F.isClosing = true; - - $('.fancybox-item, .fancybox-nav').remove(); - - F.wrap.stop(true, true).removeClass('fancybox-opened'); - - if (F.wrap.css('position') === 'fixed') { - F.wrap.css(F._getPosition( true )); - } - - F.transitions[ F.current.closeMethod ](); - } - }, - - // Manage slideshow: - // $.fancybox.play(); - toggle slideshow - // $.fancybox.play( true ); - start - // $.fancybox.play( false ); - stop - play: function ( action ) { - var clear = function () { - clearTimeout(F.player.timer); - }, - set = function () { - clear(); - - if (F.current && F.player.isActive) { - F.player.timer = setTimeout(F.next, F.current.playSpeed); - } - }, - stop = function () { - clear(); - - $('body').unbind('.player'); - - F.player.isActive = false; - - F.trigger('onPlayEnd'); - }, - start = function () { - if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { - F.player.isActive = true; - - $('body').bind({ - 'afterShow.player onUpdate.player' : set, - 'onCancel.player beforeClose.player' : stop, - 'beforeLoad.player' : clear - }); - - set(); - - F.trigger('onPlayStart'); - } - }; - - if (action === true || (!F.player.isActive && action !== false)) { - start(); - } else { - stop(); - } - }, - - // Navigate to next gallery item - next: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.next; - } - - F.jumpto(current.index + 1, direction, 'next'); - } - }, - - // Navigate to previous gallery item - prev: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.prev; - } - - F.jumpto(current.index - 1, direction, 'prev'); - } - }, - - // Navigate to gallery item by index - jumpto: function ( index, direction, router ) { - var current = F.current; - - if (!current) { - return; - } - - index = getScalar(index); - - F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; - F.router = router || 'jumpto'; - - if (current.loop) { - if (index < 0) { - index = current.group.length + (index % current.group.length); - } - - index = index % current.group.length; - } - - if (current.group[ index ] !== undefined) { - F.cancel(); - - F._start(index); - } - }, - - // Center inside viewport and toggle position type to fixed or absolute if needed - reposition: function (e, onlyAbsolute) { - var pos; - - if (F.isOpen) { - pos = F._getPosition(onlyAbsolute); - - if (e && e.type === 'scroll') { - delete pos.position; - - F.wrap.stop(true, true).animate(pos, 200); - - } else { - F.wrap.css(pos); - } - } - }, - - update: function (e) { - var type = (e && e.type), - anyway = !type || type === 'orientationchange'; - - if (anyway) { - clearTimeout(didUpdate); - - didUpdate = null; - } - - if (!F.isOpen || didUpdate) { - return; - } - - // Help browser to restore document dimensions - if (anyway || isTouch) { - F.wrap.removeAttr('style').addClass('fancybox-tmp'); - - F.trigger('onUpdate'); - } - - didUpdate = setTimeout(function() { - var current = F.current; - - if (!current) { - return; - } - - F.wrap.removeClass('fancybox-tmp'); - - if (type !== 'scroll') { - F._setDimension(); - } - - if (!(type === 'scroll' && current.canShrink)) { - F.reposition(e); - } - - F.trigger('onUpdate'); - - didUpdate = null; - - }, (isTouch ? 500 : (anyway ? 20 : 300))); - }, - - // Shrink content to fit inside viewport or restore if resized - toggle: function ( action ) { - if (F.isOpen) { - F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; - - F.update(); - } - }, - - hideLoading: function () { - D.unbind('keypress.fb'); - - $('#fancybox-loading').remove(); - }, - - showLoading: function () { - var el, viewport; - - F.hideLoading(); - - // If user will press the escape-button, the request will be canceled - D.bind('keypress.fb', function(e) { - if ((e.which || e.keyCode) === 27) { - e.preventDefault(); - F.cancel(); - } - }); - - el = $('
            ').click(F.cancel).appendTo('body'); - - if (!F.defaults.fixed) { - viewport = F.getViewport(); - - el.css({ - position : 'absolute', - top : (viewport.h * 0.5) + viewport.y, - left : (viewport.w * 0.5) + viewport.x - }); - } - }, - - getViewport: function () { - var locked = (F.current && F.current.locked) || false, - rez = { - x: W.scrollLeft(), - y: W.scrollTop() - }; - - if (locked) { - rez.w = locked[0].clientWidth; - rez.h = locked[0].clientHeight; - - } else { - // See http://bugs.jquery.com/ticket/6724 - rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); - rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); - } - - return rez; - }, - - // Unbind the keyboard / clicking actions - unbindEvents: function () { - if (F.wrap && isQuery(F.wrap)) { - F.wrap.unbind('.fb'); - } - - D.unbind('.fb'); - W.unbind('.fb'); - }, - - bindEvents: function () { - var current = F.current, - keys; - - if (!current) { - return; - } - - // Changing document height on iOS devices triggers a 'resize' event, - // that can change document height... repeating infinitely - W.bind('orientationchange.fb' + (current.autoResize ? ' resize.fb' : '' ) + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); - - keys = current.keys; - - if (keys) { - D.bind('keydown.fb', function (e) { - var code = e.which || e.keyCode, - target = e.target || e.srcElement; - - // Ignore key combinations and key events within form elements - if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { - $.each(keys, function(i, val) { - if (current.group.length > 1 && val[ code ] !== undefined) { - F[ i ]( val[ code ] ); - - e.preventDefault(); - return false; - } - - if ($.inArray(code, val) > -1) { - F[ i ] (); - - e.preventDefault(); - return false; - } - }); - } - }); - } - - if ($.fn.mousewheel && current.mouseWheel) { - F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { - var target = e.target || null, - parent = $(target), - canScroll = false; - - while (parent.length) { - if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { - break; - } - - canScroll = isScrollable( parent[0] ); - parent = $(parent).parent(); - } - - if (delta !== 0 && !canScroll) { - if (F.group.length > 1 && !current.canShrink) { - if (deltaY > 0 || deltaX > 0) { - F.prev( deltaY > 0 ? 'down' : 'left' ); - - } else if (deltaY < 0 || deltaX < 0) { - F.next( deltaY < 0 ? 'up' : 'right' ); - } - - e.preventDefault(); - } - } - }); - } - }, - - trigger: function (event, o) { - var ret, obj = o || F.coming || F.current; - - if (!obj) { - return; - } - - if ($.isFunction( obj[event] )) { - ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); - } - - if (ret === false) { - return false; - } - - if (event === 'onCancel' && !F.isOpened) { - F.isActive = false; - } - - if (obj.helpers) { - $.each(obj.helpers, function (helper, opts) { - if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { - opts = $.extend(true, {}, F.helpers[helper].defaults, opts); - - F.helpers[helper][event](opts, obj); - } - }); - } - - $.event.trigger(event + '.fb'); - }, - - isImage: function (str) { - return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i); - }, - - isSWF: function (str) { - return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); - }, - - _start: function (index) { - var coming = {}, - obj, - href, - type, - margin, - padding; - - index = getScalar( index ); - obj = F.group[ index ] || null; - - if (!obj) { - return false; - } - - coming = $.extend(true, {}, F.opts, obj); - - // Convert margin and padding properties to array - top, right, bottom, left - margin = coming.margin; - padding = coming.padding; - - if ($.type(margin) === 'number') { - coming.margin = [margin, margin, margin, margin]; - } - - if ($.type(padding) === 'number') { - coming.padding = [padding, padding, padding, padding]; - } - - // 'modal' propery is just a shortcut - if (coming.modal) { - $.extend(true, coming, { - closeBtn : false, - closeClick : false, - nextClick : false, - arrows : false, - mouseWheel : false, - keys : null, - helpers: { - overlay : { - closeClick : false - } - } - }); - } - - // 'autoSize' property is a shortcut, too - if (coming.autoSize) { - coming.autoWidth = coming.autoHeight = true; - } - - if (coming.width === 'auto') { - coming.autoWidth = true; - } - - if (coming.height === 'auto') { - coming.autoHeight = true; - } - - /* - * Add reference to the group, so it`s possible to access from callbacks, example: - * afterLoad : function() { - * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); - * } - */ - - coming.group = F.group; - coming.index = index; - - // Give a chance for callback or helpers to update coming item (type, title, etc) - F.coming = coming; - - if (false === F.trigger('beforeLoad')) { - F.coming = null; - - return; - } - - type = coming.type; - href = coming.href; - - if (!type) { - F.coming = null; - - //If we can not determine content type then drop silently or display next/prev item if looping through gallery - if (F.current && F.router && F.router !== 'jumpto') { - F.current.index = index; - - return F[ F.router ]( F.direction ); - } - - return false; - } - - F.isActive = true; - - if (type === 'image' || type === 'swf') { - coming.autoHeight = coming.autoWidth = false; - coming.scrolling = 'visible'; - } - - if (type === 'image') { - coming.aspectRatio = true; - } - - if (type === 'iframe' && isTouch) { - coming.scrolling = 'scroll'; - } - - // Build the neccessary markup - coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); - - $.extend(coming, { - skin : $('.fancybox-skin', coming.wrap), - outer : $('.fancybox-outer', coming.wrap), - inner : $('.fancybox-inner', coming.wrap) - }); - - $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { - coming.skin.css('padding' + v, getValue(coming.padding[ i ])); - }); - - F.trigger('onReady'); - - // Check before try to load; 'inline' and 'html' types need content, others - href - if (type === 'inline' || type === 'html') { - if (!coming.content || !coming.content.length) { - return F._error( 'content' ); - } - - } else if (!href) { - return F._error( 'href' ); - } - - if (type === 'image') { - F._loadImage(); - - } else if (type === 'ajax') { - F._loadAjax(); - - } else if (type === 'iframe') { - F._loadIframe(); - - } else { - F._afterLoad(); - } - }, - - _error: function ( type ) { - $.extend(F.coming, { - type : 'html', - autoWidth : true, - autoHeight : true, - minWidth : 0, - minHeight : 0, - scrolling : 'no', - hasError : type, - content : F.coming.tpl.error - }); - - F._afterLoad(); - }, - - _loadImage: function () { - // Reset preload image so it is later possible to check "complete" property - var img = F.imgPreload = new Image(); - - img.onload = function () { - this.onload = this.onerror = null; - - F.coming.width = this.width; - F.coming.height = this.height; - - F._afterLoad(); - }; - - img.onerror = function () { - this.onload = this.onerror = null; - - F._error( 'image' ); - }; - - img.src = F.coming.href; - - if (img.complete === undefined || !img.complete) { - F.showLoading(); - } - }, - - _loadAjax: function () { - var coming = F.coming; - - F.showLoading(); - - F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { - url: coming.href, - error: function (jqXHR, textStatus) { - if (F.coming && textStatus !== 'abort') { - F._error( 'ajax', jqXHR ); - - } else { - F.hideLoading(); - } - }, - success: function (data, textStatus) { - if (textStatus === 'success') { - coming.content = data; - - F._afterLoad(); - } - } - })); - }, - - _loadIframe: function() { - var coming = F.coming, - iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) - .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) - .attr('src', coming.href); - - // This helps IE - $(coming.wrap).bind('onReset', function () { - try { - $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); - } catch (e) {} - }); - - if (coming.iframe.preload) { - F.showLoading(); - - iframe.one('load', function() { - $(this).data('ready', 1); - - // iOS will lose scrolling if we resize - if (!isTouch) { - $(this).bind('load.fb', F.update); - } - - // Without this trick: - // - iframe won't scroll on iOS devices - // - IE7 sometimes displays empty iframe - $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); - - F._afterLoad(); - }); - } - - coming.content = iframe.appendTo( coming.inner ); - - if (!coming.iframe.preload) { - F._afterLoad(); - } - }, - - _preloadImages: function() { - var group = F.group, - current = F.current, - len = group.length, - cnt = current.preload ? Math.min(current.preload, len - 1) : 0, - item, - i; - - for (i = 1; i <= cnt; i += 1) { - item = group[ (current.index + i ) % len ]; - - if (item.type === 'image' && item.href) { - new Image().src = item.href; - } - } - }, - - _afterLoad: function () { - var coming = F.coming, - previous = F.current, - placeholder = 'fancybox-placeholder', - current, - content, - type, - scrolling, - href, - embed; - - F.hideLoading(); - - if (!coming || F.isActive === false) { - return; - } - - if (false === F.trigger('afterLoad', coming, previous)) { - coming.wrap.stop(true).trigger('onReset').remove(); - - F.coming = null; - - return; - } - - if (previous) { - F.trigger('beforeChange', previous); - - previous.wrap.stop(true).removeClass('fancybox-opened') - .find('.fancybox-item, .fancybox-nav') - .remove(); - - if (previous.wrap.css('position') === 'fixed') { - previous.wrap.css(F._getPosition( true )); - } - } - - F.unbindEvents(); - - current = coming; - content = coming.content; - type = coming.type; - scrolling = coming.scrolling; - - $.extend(F, { - wrap : current.wrap, - skin : current.skin, - outer : current.outer, - inner : current.inner, - current : current, - previous : previous - }); - - href = current.href; - - switch (type) { - case 'inline': - case 'ajax': - case 'html': - if (current.selector) { - content = $('
            ').html(content).find(current.selector); - - } else if (isQuery(content)) { - if (!content.data(placeholder)) { - content.data(placeholder, $('
            ').insertAfter( content ).hide() ); - } - - content = content.show().detach(); - - current.wrap.bind('onReset', function () { - if ($(this).find(content).length) { - content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); - } - }); - } - break; - - case 'image': - content = current.tpl.image.replace('{href}', href); - break; - - case 'swf': - content = ''; - embed = ''; - - $.each(current.swf, function(name, val) { - content += ''; - embed += ' ' + name + '="' + val + '"'; - }); - - content += ''; - break; - } - - if (!(isQuery(content) && content.parent().is(current.inner))) { - current.inner.append( content ); - } - - // Give a chance for helpers or callbacks to update elements - F.trigger('beforeShow'); - - // Set scrolling before calculating dimensions - current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); - - // Set initial dimensions and start position - F._setDimension(); - - current.wrap.removeClass('fancybox-tmp'); - - current.pos = $.extend({}, current.dim, F._getPosition( true )); - - F.isOpen = false; - F.coming = null; - - F.bindEvents(); - - if (!F.isOpened) { - $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); - - } else if (previous.prevMethod) { - F.transitions[ previous.prevMethod ](); - } - - F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); - - F._preloadImages(); - }, - - _setDimension: function () { - var viewport = F.getViewport(), - steps = 0, - canShrink = false, - canExpand = false, - wrap = F.wrap, - skin = F.skin, - inner = F.inner, - current = F.current, - width = current.width, - height = current.height, - minWidth = current.minWidth, - minHeight = current.minHeight, - maxWidth = current.maxWidth, - maxHeight = current.maxHeight, - scrolling = current.scrolling, - scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, - margin = current.margin, - wMargin = margin[1] + margin[3], - hMargin = margin[0] + margin[2], - wPadding, - hPadding, - wSpace, - hSpace, - origWidth, - origHeight, - origMaxWidth, - origMaxHeight, - ratio, - width_, - height_, - maxWidth_, - maxHeight_, - iframe, - body; - - // Reset dimensions so we could re-check actual size - wrap.add(skin).add(inner).width('auto').height('auto'); - - wPadding = skin.outerWidth(true) - skin.width(); - hPadding = skin.outerHeight(true) - skin.height(); - - // Any space between content and viewport (margin, padding, border, title) - wSpace = wMargin + wPadding; - hSpace = hMargin + hPadding; - - origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; - origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; - - if (current.type === 'iframe') { - iframe = current.content; - - if (current.autoHeight && iframe.data('ready') === 1) { - try { - if (iframe[0].contentWindow.document.location) { - inner.width( origWidth ).height(9999); - - body = iframe.contents().find('body'); - - if (scrollOut) { - body.css('overflow-x', 'hidden'); - } - - origHeight = body.height(); - } - - } catch (e) {} - } - - } else if (current.autoWidth || current.autoHeight) { - inner.addClass( 'fancybox-tmp' ); - - // Set width or height in case we need to calculate only one dimension - if (!current.autoWidth) { - inner.width( origWidth ); - } - - if (!current.autoHeight) { - inner.height( origHeight ); - } - - if (current.autoWidth) { - origWidth = inner.width(); - } - - if (current.autoHeight) { - origHeight = inner.height(); - } - - inner.removeClass( 'fancybox-tmp' ); - } - - width = getScalar( origWidth ); - height = getScalar( origHeight ); - - ratio = origWidth / origHeight; - - // Calculations for the content - minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); - maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); - - minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); - maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); - - // These will be used to determine if wrap can fit in the viewport - origMaxWidth = maxWidth; - origMaxHeight = maxHeight; - - maxWidth_ = viewport.w - wMargin; - maxHeight_ = viewport.h - hMargin; - - if (current.aspectRatio) { - if (width > maxWidth) { - width = maxWidth; - height = width / ratio; - } - - if (height > maxHeight) { - height = maxHeight; - width = height * ratio; - } - - if (width < minWidth) { - width = minWidth; - height = width / ratio; - } - - if (height < minHeight) { - height = minHeight; - width = height * ratio; - } - - } else { - width = Math.max(minWidth, Math.min(width, maxWidth)); - height = Math.max(minHeight, Math.min(height, maxHeight)); - } - - // Try to fit inside viewport (including the title) - if (current.fitToView) { - maxWidth = Math.min(viewport.w - wSpace, maxWidth); - maxHeight = Math.min(viewport.h - hSpace, maxHeight); - - inner.width( getScalar( width ) ).height( getScalar( height ) ); - - wrap.width( getScalar( width + wPadding ) ); - - // Real wrap dimensions - width_ = wrap.width(); - height_ = wrap.height(); - - if (current.aspectRatio) { - while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { - if (steps++ > 19) { - break; - } - - height = Math.max(minHeight, Math.min(maxHeight, height - 10)); - width = height * ratio; - - if (width < minWidth) { - width = minWidth; - height = width / ratio; - } - - if (width > maxWidth) { - width = maxWidth; - height = width / ratio; - } - - inner.width( getScalar( width ) ).height( getScalar( height ) ); - - wrap.width( getScalar( width + wPadding ) ); - - width_ = wrap.width(); - height_ = wrap.height(); - } - - } else { - width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); - height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); - } - } - - if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { - width += scrollOut; - } - - inner.width( getScalar( width ) ).height( getScalar( height ) ); - - wrap.width( getScalar( width + wPadding ) ); - - width_ = wrap.width(); - height_ = wrap.height(); - - canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; - canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); - - $.extend(current, { - dim : { - width : getValue( width_ ), - height : getValue( height_ ) - }, - origWidth : origWidth, - origHeight : origHeight, - canShrink : canShrink, - canExpand : canExpand, - wPadding : wPadding, - hPadding : hPadding, - wrapSpace : height_ - skin.outerHeight(true), - skinSpace : skin.height() - height - }); - - if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { - inner.height('auto'); - } - }, - - _getPosition: function (onlyAbsolute) { - var current = F.current, - viewport = F.getViewport(), - margin = current.margin, - width = F.wrap.width() + margin[1] + margin[3], - height = F.wrap.height() + margin[0] + margin[2], - rez = { - position: 'absolute', - top : margin[0], - left : margin[3] - }; - - if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { - rez.position = 'fixed'; - - } else if (!current.locked) { - rez.top += viewport.y; - rez.left += viewport.x; - } - - rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); - rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); - - return rez; - }, - - _afterZoomIn: function () { - var current = F.current; - - if (!current) { - return; - } - - F.isOpen = F.isOpened = true; - - F.wrap.addClass('fancybox-opened').css('overflow', 'visible'); - - F.reposition(); - - // Assign a click event - if (current.closeClick || current.nextClick) { - F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { - if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { - F[ current.closeClick ? 'close' : 'next' ](); - } - }); - } - - // Create a close button - if (current.closeBtn) { - $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', F.close); - } - - // Create navigation arrows - if (current.arrows && F.group.length > 1) { - if (current.loop || current.index > 0) { - $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); - } - - if (current.loop || current.index < F.group.length - 1) { - $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); - } - } - - F.trigger('afterShow'); - - // Stop the slideshow if this is the last item - if (!current.loop && current.index === current.group.length - 1) { - F.play( false ); - - } else if (F.opts.autoPlay && !F.player.isActive) { - F.opts.autoPlay = false; - - F.play(); - } - }, - - _afterZoomOut: function () { - var current = F.current; - - $('.fancybox-wrap').stop(true).trigger('onReset').remove(); - - $.extend(F, { - group : {}, - opts : {}, - router : false, - current : null, - isActive : false, - isOpened : false, - isOpen : false, - isClosing : false, - wrap : null, - skin : null, - outer : null, - inner : null - }); - - F.trigger('afterClose', current); - } - }); - - /* - * Default transitions - */ - - F.transitions = { - getOrigPosition: function () { - var current = F.current, - element = current.element, - orig = current.orig, - pos = {}, - width = 50, - height = 50, - hPadding = current.hPadding, - wPadding = current.wPadding, - viewport = F.getViewport(); - - if (!orig && current.isDom && element.is(':visible')) { - orig = element.find('img:first'); - - if (!orig.length) { - orig = element; - } - } - - if (isQuery(orig)) { - pos = orig.offset(); - - if (orig.is('img')) { - width = orig.outerWidth(); - height = orig.outerHeight(); - } - - } else { - pos.top = viewport.y + (viewport.h - height) * current.topRatio; - pos.left = viewport.x + (viewport.w - width) * current.leftRatio; - } - - if (current.locked) { - pos.top -= viewport.y; - pos.left -= viewport.x; - } - - pos = { - top : getValue(pos.top - hPadding * current.topRatio), - left : getValue(pos.left - wPadding * current.leftRatio), - width : getValue(width + wPadding), - height : getValue(height + hPadding) - }; - - return pos; - }, - - step: function (now, fx) { - var ratio, - padding, - value, - prop = fx.prop, - current = F.current, - wrapSpace = current.wrapSpace, - skinSpace = current.skinSpace; - - if (prop === 'width' || prop === 'height') { - ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); - - if (F.isClosing) { - ratio = 1 - ratio; - } - - padding = prop === 'width' ? current.wPadding : current.hPadding; - value = now - padding; - - F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); - F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); - } - }, - - zoomIn: function () { - var current = F.current, - startPos = current.pos, - effect = current.openEffect, - elastic = effect === 'elastic', - endPos = $.extend({opacity : 1}, startPos); - - // Remove "position" property that breaks older IE - delete endPos.position; - - if (elastic) { - startPos = this.getOrigPosition(); - - if (current.openOpacity) { - startPos.opacity = 0.1; - } - - } else if (effect === 'fade') { - startPos.opacity = 0.1; - } - - F.wrap.css(startPos).animate(endPos, { - duration : effect === 'none' ? 0 : current.openSpeed, - easing : current.openEasing, - step : elastic ? this.step : null, - complete : F._afterZoomIn - }); - }, - - zoomOut: function () { - var current = F.current, - effect = current.closeEffect, - elastic = effect === 'elastic', - endPos = {opacity : 0.1}; - - if (elastic) { - endPos = this.getOrigPosition(); - - if (current.closeOpacity) { - endPos.opacity = 0.1; - } - } - - F.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : current.closeSpeed, - easing : current.closeEasing, - step : elastic ? this.step : null, - complete : F._afterZoomOut - }); - }, - - changeIn: function () { - var current = F.current, - effect = current.nextEffect, - startPos = current.pos, - endPos = { opacity : 1 }, - direction = F.direction, - distance = 200, - field; - - startPos.opacity = 0.1; - - if (effect === 'elastic') { - field = direction === 'down' || direction === 'up' ? 'top' : 'left'; - - if (direction === 'down' || direction === 'right') { - startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); - endPos[ field ] = '+=' + distance + 'px'; - - } else { - startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); - endPos[ field ] = '-=' + distance + 'px'; - } - } - - // Workaround for http://bugs.jquery.com/ticket/12273 - if (effect === 'none') { - F._afterZoomIn(); - - } else { - F.wrap.css(startPos).animate(endPos, { - duration : current.nextSpeed, - easing : current.nextEasing, - complete : F._afterZoomIn - }); - } - }, - - changeOut: function () { - var previous = F.previous, - effect = previous.prevEffect, - endPos = { opacity : 0.1 }, - direction = F.direction, - distance = 200; - - if (effect === 'elastic') { - endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; - } - - previous.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : previous.prevSpeed, - easing : previous.prevEasing, - complete : function () { - $(this).trigger('onReset').remove(); - } - }); - } - }; - - /* - * Overlay helper - */ - - F.helpers.overlay = { - defaults : { - closeClick : true, // close if clicking on the overlay - speedOut : 200, // animation speed of fading out - showEarly : true, // should be opened immediately or wait until the content is ready - css : {}, // custom overlay style - locked : true // should be content locked into overlay - }, - - overlay : null, - - update : function () { - var width = '100%', offsetWidth; - - // Reset width/height so it will not mess - this.overlay.width(width).height('100%'); - - // jQuery does not return reliable result for IE - if ($.browser.msie) { - offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); - - if (D.width() > offsetWidth) { - width = D.width(); - } - - } else if (D.width() > W.width()) { - width = D.width(); - } - - this.overlay.width(width).height(D.height()); - }, - - // This is where we can manipulate DOM, because later it would cause iframes to reload - onReady : function (opts, obj) { - $('.fancybox-overlay').stop(true, true); - - if (!this.overlay) { - $.extend(this, { - overlay : $('
            ').appendTo( obj.parent || 'body' ), - margin : D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false, - el : document.all && !document.querySelector ? $('html') : $('body') - }); - } - - if (obj.fixed && !isTouch) { - this.overlay.addClass('fancybox-overlay-fixed'); - - if (obj.autoCenter && opts.locked) { - obj.locked = this.overlay.append( obj.wrap ); - } - } - - if (opts.showEarly === true) { - this.beforeShow.apply(this, arguments); - } - }, - - beforeShow : function(opts, obj) { - var overlay = this.overlay.unbind('.fb').width('auto').height('auto').css( opts.css ); - - if (opts.closeClick) { - overlay.bind('click.fb', function(e) { - if ($(e.target).hasClass('fancybox-overlay')) { - F.close(); - } - }); - } - - if (obj.fixed && !isTouch) { - if (obj.locked) { - this.el.addClass('fancybox-lock'); - - if (this.margin !== false) { - $('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth); - } - } - - } else { - this.update(); - } - - overlay.show(); - }, - - onUpdate : function(opts, obj) { - if (!obj.fixed || isTouch) { - this.update(); - } - }, - - afterClose: function (opts) { - var that = this, - speed = opts.speedOut || 0; - - // Remove overlay if exists and fancyBox is not opening - // (e.g., it is not being open using afterClose callback) - if (that.overlay && !F.isActive) { - that.overlay.fadeOut(speed || 0, function () { - $('body').css('margin-right', that.margin); - - that.el.removeClass('fancybox-lock'); - - that.overlay.remove(); - - that.overlay = null; - }); - } - } - }; - - /* - * Title helper - */ - - F.helpers.title = { - defaults : { - type : 'float', // 'float', 'inside', 'outside' or 'over', - position : 'bottom' // 'top' or 'bottom' - }, - - beforeShow: function (opts) { - var current = F.current, - text = current.title, - type = opts.type, - title, - target; - - if ($.isFunction(text)) { - text = text.call(current.element, current); - } - - if (!isString(text) || $.trim(text) === '') { - return; - } - - title = $('
            ' + text + '
            '); - - switch (type) { - case 'inside': - target = F.skin; - break; - - case 'outside': - target = F.wrap; - break; - - case 'over': - target = F.inner; - break; - - default: // 'float' - target = F.skin; - - title.appendTo('body'); - - if ($.browser.msie) { - title.width( title.width() ); - } - - title.wrapInner(''); - - //Increase bottom margin so this title will also fit into viewport - F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); - break; - } - - title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); - } - }; - - // jQuery plugin initialization - $.fn.fancybox = function (options) { - var index, - that = $(this), - selector = this.selector || '', - run = function(e) { - var what = $(this).blur(), idx = index, relType, relVal; - - if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { - relType = options.groupAttr || 'data-fancybox-group'; - relVal = what.attr(relType); - - if (!relVal) { - relType = 'rel'; - relVal = what.get(0)[ relType ]; - } - - if (relVal && relVal !== '' && relVal !== 'nofollow') { - what = selector.length ? $(selector) : that; - what = what.filter('[' + relType + '="' + relVal + '"]'); - idx = what.index(this); - } - - options.index = idx; - - // Stop an event from bubbling if everything is fine - if (F.open(what, options) !== false) { - e.preventDefault(); - } - } - }; - - options = options || {}; - index = options.index || 0; - - if (!selector || options.live === false) { - that.unbind('click.fb-start').bind('click.fb-start', run); - } else { - D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); - } - - return this; - }; - - // Tests that need a body at doc ready - D.ready(function() { - if ( $.scrollbarWidth === undefined ) { - // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth - $.scrollbarWidth = function() { - var parent = $('
            ').appendTo('body'), - child = parent.children(), - width = child.innerWidth() - child.height( 99 ).innerWidth(); - - parent.remove(); - - return width; - }; - } - - if ( $.support.fixedPosition === undefined ) { - $.support.fixedPosition = (function() { - var elem = $('
            ').appendTo('body'), - fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); - - elem.remove(); - - return fixed; - }()); - } - - $.extend(F.defaults, { - scrollbarWidth : $.scrollbarWidth(), - fixed : $.support.fixedPosition, - parent : $('body') - }); - }); - -}(window, document, jQuery)); \ No newline at end of file diff --git a/js/fancybox/jquery.fancybox.pack.js b/js/fancybox/jquery.fancybox.pack.js deleted file mode 100644 index 8e612456..00000000 --- a/js/fancybox/jquery.fancybox.pack.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! fancyBox v2.1.1 fancyapps.com | fancyapps.com/fancybox/#license */ -(function(v,q,f,r){var p=f(v),n=f(q),b=f.fancybox=function(){b.open.apply(this,arguments)},A=null,m=q.createTouch!==r,y=function(a){return a&&a.hasOwnProperty&&a instanceof f},t=function(a){return a&&"string"===f.type(a)},D=function(a){return t(a)&&0
            ',image:'',iframe:'",error:'

            The requested content cannot be loaded.
            Please try again later.

            ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing", -openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null, -isActive:!1,isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=y(a)?f(a).get():[a]),f.each(a,function(e,c){var j={},g,h,i,l,k;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),y(c)?(j={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0, -j,c.metadata())):j=c);g=d.href||j.href||(t(c)?c:null);h=d.title!==r?d.title:j.title||"";l=(i=d.content||j.content)?"html":d.type||j.type;!l&&j.isDom&&(l=c.data("fancybox-type"),l||(l=(l=c.prop("class").match(/fancybox\.(\w+)/))?l[1]:null));t(g)&&(l||(b.isImage(g)?l="image":b.isSWF(g)?l="swf":"#"===g.charAt(0)?l="inline":t(c)&&(l="html",i=c)),"ajax"===l&&(k=g.split(/\s+/,2),g=k.shift(),k=k.shift()));i||("inline"===l?g?i=f(t(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):j.isDom&&(i=c):"html"===l?i=g:!l&&(!g&& -j.isDom)&&(l="inline",i=c));f.extend(j,{href:g,type:l,content:i,title:h,selector:k});a[e]=j}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==r&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0).trigger("onReset").remove(),b.current||b.trigger("afterClose"), -b.coming=null)},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),"fixed"===b.wrap.css("position")&&b.wrap.css(b._getPosition(!0)),b.transitions[b.current.closeMethod]()))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d(); -b.current&&b.player.isActive&&(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();f("body").unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==r&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e;b.isOpen&&(e=b._getPosition(d),a&&"scroll"===a.type?(delete e.position,b.wrap.stop(!0,!0).animate(e, -200)):b.wrap.css(e))},update:function(a){var d=a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(A),A=null);if(b.isOpen&&!A){if(e||m)b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate");A=setTimeout(function(){var c=b.current;c&&(b.wrap.removeClass("fancybox-tmp"),"scroll"!==d&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),A=null)},m?500:e?20:300)}},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView, -b.update())},hideLoading:function(){n.unbind("keypress.fb");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();n.bind("keypress.fb",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});a=f('
            ').click(b.cancel).appendTo("body");b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:p.scrollLeft(), -y:p.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=m&&v.innerWidth?v.innerWidth:p.width(),d.h=m&&v.innerHeight?v.innerHeight:p.height());return d},unbindEvents:function(){b.wrap&&y(b.wrap)&&b.wrap.unbind(".fb");n.unbind(".fb");p.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(p.bind("orientationchange.fb"+(a.autoResize?" resize.fb":"")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&n.bind("keydown.fb",function(e){var c=e.which||e.keyCode,j=e.target||e.srcElement; -!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!j||!j.type&&!f(j).is("[contenteditable]")))&&f.each(d,function(d,j){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!i&&1g||0>j)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;"onCancel"===a&&!b.isOpened&&(b.isActive=!1);c.helpers&&f.each(c.helpers,function(d,e){e&& -(b.helpers[d]&&f.isFunction(b.helpers[d][a]))&&(e=f.extend(!0,{},b.helpers[d].defaults,e),b.helpers[d][a](e,c))});f.event.trigger(a+".fb")}},isImage:function(a){return t(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i)},isSWF:function(a){return t(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c,a=k(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&& -(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive= -!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&m&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(m?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady"); -if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= -this.width;b.coming.height=this.height;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;(a.complete===r||!a.complete)&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g, -(new Date).getTime())).attr("scrolling",m?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);m||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a= -b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,j,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove(),"fixed"===d.wrap.css("position")&& -d.wrap.css(b._getPosition(!0)));b.unbindEvents();e=a.content;c=a.type;j=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
            ").html(e).find(a.selector):y(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
            ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder", -!1)}));break;case "image":e=a.tpl.image.replace("{href}",g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!y(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow"); -a.inner.css("overflow","yes"===j?"scroll":"no"===j?"hidden":j);b._setDimension();a.wrap.removeClass("fancybox-tmp");a.pos=f.extend({},a.dim,b._getPosition(!0));b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,j=b.skin,g=b.inner,h= -b.current,c=h.width,i=h.height,l=h.minWidth,u=h.minHeight,m=h.maxWidth,n=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,x=h.margin,p=x[1]+x[3],q=x[0]+x[2],y,s,v,B,z,E,A,C,F;e.add(j).add(g).width("auto").height("auto");x=j.outerWidth(!0)-j.width();y=j.outerHeight(!0)-j.height();s=p+x;v=q+y;B=D(c)?(a.w-s)*k(c)/100:c;z=D(i)?(a.h-v)*k(i)/100:i;if("iframe"===h.type){if(F=h.content,h.autoHeight&&1===F.data("ready"))try{F[0].contentWindow.document.location&&(g.width(B).height(9999),E=F.contents().find("body"), -r&&E.css("overflow-x","hidden"),z=E.height())}catch(G){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(B),h.autoHeight||g.height(z),h.autoWidth&&(B=g.width()),h.autoHeight&&(z=g.height()),g.removeClass("fancybox-tmp");c=k(B);i=k(z);C=B/z;l=k(D(l)?k(l,"w")-s:l);m=k(D(m)?k(m,"w")-s:m);u=k(D(u)?k(u,"h")-v:u);n=k(D(n)?k(n,"h")-v:n);E=m;A=n;p=a.w-p;q=a.h-q;h.aspectRatio?(c>m&&(c=m,i=c/C),i>n&&(i=n,c=i*C),cp||s>q)&&(c>l&&i>u)&&!(19m&&(c=m,i=c/C),g.width(k(c)).height(k(i)),e.width(k(c+x)),a=e.width(),s=e.height();else c=Math.max(l,Math.min(c,c-(a-p))),i=Math.max(u,Math.min(i,i-(s-q)));r&&("auto"===t&&ip||s>q)&&c>l&&i>u;c=h.aspectRatio?cu&&ib&&(a=n.width())):n.width()>p.width()&& -(a=n.width());this.overlay.width(a).height(n.height())},onReady:function(a,b){f(".fancybox-overlay").stop(!0,!0);this.overlay||f.extend(this,{overlay:f('
            ').appendTo(b.parent||"body"),margin:n.height()>p.height()||"scroll"===f("body").css("overflow-y")?f("body").css("margin-right"):!1,el:q.all&&!q.querySelector?f("html"):f("body")});b.fixed&&!m&&(this.overlay.addClass("fancybox-overlay-fixed"),b.autoCenter&&a.locked&&(b.locked=this.overlay.append(b.wrap)));!0=== -a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,d){var e=this.overlay.unbind(".fb").width("auto").height("auto").css(a.css);a.closeClick&&e.bind("click.fb",function(a){f(a.target).hasClass("fancybox-overlay")&&b.close()});d.fixed&&!m?d.locked&&(this.el.addClass("fancybox-lock"),!1!==this.margin&&f("body").css("margin-right",k(this.margin)+d.scrollbarWidth)):this.update();e.show()},onUpdate:function(a,b){(!b.fixed||m)&&this.update()},afterClose:function(a){var d=this,a=a.speedOut|| -0;d.overlay&&!b.isActive&&d.overlay.fadeOut(a||0,function(){f("body").css("margin-right",d.margin);d.el.removeClass("fancybox-lock");d.overlay.remove();d.overlay=null})}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(t(e)&&""!==f.trim(e)){d=f('
            '+e+"
            ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c= -b.inner;break;default:c=b.skin,d.appendTo("body"),f.browser.msie&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(k(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",j=function(g){var h=f(this).blur(),i=d,j,k;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(j=a.groupAttr||"data-fancybox-group",k=h.attr(j),k||(j="rel",k=h.get(0)[j]),k&&(""!== -k&&"nofollow"!==k)&&(h=c.length?f(c):e,h=h.filter("["+j+'="'+k+'"]'),i=h.index(this)),a.index=i,!1!==b.open(h,a)&&g.preventDefault())},a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",j):n.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')","click.fb-start",j);return this};n.ready(function(){f.scrollbarWidth===r&&(f.scrollbarWidth=function(){var a=f('
            ').appendTo("body"), -b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===r){var a=f.support,d=f('
            ').appendTo("body"),e=20===d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")})})})(window,document,jQuery); \ No newline at end of file diff --git a/js/functions.js b/js/functions.js index 33181c82..1710fe26 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,101 +1,125 @@ -var lastlen = 0; +// +// From http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/ +// +var sysPass = sysPass || {}; -var order = {}; -order.key = 0; -order.dir = 0; +// create a general purpose namespace method +// this will allow us to create namespace a bit easier +sysPass.createNS = function (namespace) { + var nsparts = namespace.split("."); + var parent = sysPass; -// Variable para determinar si una clave de cuenta ha sido copiada al portapapeles -var passToClip = 0; -// Variable para el ajuste óptimo del contenido a la altura del documento -var windowAdjustSize = 350; - -var strPassword; -var minPasswordLength = 8; -var baseScore = 0, score = 0; - -var num = {}; -num.Excess = 0; -num.Upper = 0; -num.Numbers = 0; -num.Symbols = 0; - -var bonus = {}; -bonus.Excess = 3; -bonus.Upper = 4; -bonus.Numbers = 5; -bonus.Symbols = 5; -bonus.Combo = 0; -bonus.FlatLower = 0; -bonus.FlatNumber = 0; - -var powertipOptions = {placement: 'ne', smartPlacement: 'true', fadeOutTime: 500}; - -jQuery.extend(jQuery.fancybox.defaults, { - type: 'ajax', - autoWidth: 'true', - autoHeight: 'true', - minHeight: 50, - padding: 0, - helpers: {overlay: {css: {'background': 'rgba(0, 0, 0, 0.1)'}}}, - afterShow: function () { - "use strict"; - - $('#fancyContainer').find('input:visible:first').focus(); - } -}); - -$(document).ready(function () { - "use strict"; - - $("[title]").powerTip(powertipOptions); - $('input, textarea').placeholder(); - setContentSize(); - setWindowAdjustSize(); - if(!checkCookies()){ - alert('Cookies are needed for this application, please enable them.'); - } -}).ajaxComplete(function () { - "use strict"; - - $("[title]").powerTip(powertipOptions); - $('input, textarea').placeholder(); -}); - -/** - * Función para comprobar si las cookies están habilitadas. - * - * @returns {boolean} - */ -function checkCookies(){ - "use strict"; - if (navigator.cookieEnabled){ - return true; + // we want to be able to include or exclude the root namespace + // So we strip it if it's in the namespace + if (nsparts[0] === "sysPass") { + nsparts = nsparts.slice(1); } - // set and read cookie - document.cookie = "checkcookie=1"; - var ret = document.cookie.indexOf("checkcookie=") != -1; + // loop through the parts and create + // a nested namespace if necessary + for (var i = 0; i < nsparts.length; i++) { + var partname = nsparts[i]; + // check if the current parent already has + // the namespace declared, if not create it + if (typeof parent[partname] === "undefined") { + parent[partname] = {}; + } + // get a reference to the deepest element + // in the hierarchy so far + parent = parent[partname]; + } + // the parent is now completely constructed + // with empty namespaces and can be used. + return parent; +}; - // delete cookie - document.cookie = "checkcookie=1; expires=Thu, 01-Jan-1970 00:00:01 GMT"; +sysPass.createNS('sysPass.Util'); - return ret; -} - -/** - * Función para cargar el contenido de la acción del menú seleccionada - * - * @param action - * @param lastAction - * @param id - */ -function doAction(action, lastAction, id) { +sysPass.Util.Common = function () { "use strict"; - var data = {'action': action, 'lastAction': lastAction, 'id': id, isAjax: 1}; + var APP_ROOT, LANG, PK; - $('#content').fadeOut(function () { - $.fancybox.showLoading(); + // Atributos de la ordenación de búsquedas + var order = {key: 0, dir: 0}; + + // Variable para determinar si una clave de cuenta ha sido copiada al portapapeles + var passToClip = 0; + // Variable para el ajuste óptimo del contenido a la altura del documento + var windowAdjustSize = 450; + // Variable para almacena la llamada a setTimeout() + var timeout; + + // Atributos del generador de claves + var passwordData = { + passLength: 0, + minPasswordLength: 8, + complexity: { + numbers: true, + symbols: true, + uppercase: true, + numlength: 12 + } + }; + + // Inicializar la encriptación RSA + var encrypt = new JSEncrypt(); + + //$.ajaxSetup({ + // error: function(jqXHR, exception) { + // if (jqXHR.status === 0) { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // } else if (jqXHR.status == 404) { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // } else if (jqXHR.status == 500) { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // } else if (exception === 'parsererror') { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // } else if (exception === 'timeout') { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // } else if (exception === 'abort') { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // } else { + // $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); + // //alert('Uncaught Error.n' + jqXHR.responseText); + // } + // } + //}); + + var getEnvironment = function () { + var path = window.location.pathname.split('/'); + var rootPath = function () { + var fullPath = ''; + + for (var i = 1; i <= path.length - 2; i++) { + fullPath += "/" + path[i]; + } + + return fullPath; + }; + var url = window.location.protocol + "//" + window.location.host + rootPath(); + + $.ajax({ + type: 'GET', + url: url + '/ajax/ajax_getEnvironment.php', + dataType: "json", + async: false, + data: {isAjax: 1}, + success: function (json) { + APP_ROOT = json.app_root; + LANG = json.lang; + PK = json.pk; + } + }); + + encrypt.setPublicKey(PK); + }; + + getEnvironment(); + + // Función para cargar el contenido de la acción del menú seleccionada + var doAction = function (actionId, lastAction, itemId) { + var data = {'actionId': actionId, 'lastAction': lastAction, 'itemId': itemId, isAjax: 1}; $.ajax({ type: 'POST', @@ -103,1207 +127,1067 @@ function doAction(action, lastAction, id) { url: APP_ROOT + '/ajax/ajax_getContent.php', data: data, success: function (response) { - $('#content').fadeIn().html(response); + $('#content').html(response); setContentSize(); }, + error: function () { + $('#content').html(resMsg("nofancyerror")); + } + }); + }; + + // Función para establecer la altura del contenedor ajax + var setContentSize = function () { + // Calculate total height for full body resize + var totalHeight = $("#content").height() + 200; + //var totalWidth = $("#wrap").width(); + + $("#container").css("height", totalHeight); + }; + + // Función para retornar el scroll a la posición inicial + var scrollUp = function () { + $('html, body').animate({scrollTop: 0}, 'slow'); + }; + + // Función para limpiar un formulario + var clearSearch = function (clearStart) { + if (clearStart === 1) { + $('#frmSearch').find('input[name="start"]').val(0); + return; + } + + document.frmSearch.search.value = ""; + $('#frmSearch').find('select').prop('selectedIndex', 0).trigger("chosen:updated"); + $('#frmSearch').find('input[name="start"], input[name="skey"], input[name="sorder"]').val(0); + order.key = 0; + order.dir = 0; + }; + + // Funcion para crear un desplegable con opciones + var mkChosen = function (options) { + $('#' + options.id).chosen({ + allow_single_deselect: true, + placeholder_text_single: options.placeholder, + disable_search_threshold: 10, + no_results_text: options.noresults, + width: "200px" + }); + }; + + // Función para la búsqueda de cuentas mediante filtros + var accSearch = function (continous, event) { + var lenTxtSearch = $('#txtSearch').val().length; + + if (typeof event !== 'undefined' && + ((event.keyCode < 48 && event.keyCode !== 13) || (event.keyCode > 105 && event.keyCode < 123))) { + return; + } + + if (lenTxtSearch < 3 && continous === 1 && lenTxtSearch > window.lastlen && event.keyCode !== 13) { + return; + } + + window.lastlen = lenTxtSearch; + + $('#frmSearch').find('input[name="start"]').val(0); + + doSearch(); + }; + + // Función para la búsqueda de cuentas mediante ordenación + var searchSort = function (skey, start, dir) { + if (typeof skey === 'undefined' || typeof start === 'undefined') { + return false; + } + + $('#frmSearch').find('input[name="skey"]').val(skey); + $('#frmSearch').find('input[name="sorder"]').val(dir); + $('#frmSearch').find('input[name="start"]').val(start); + + doSearch(); + }; + + // Función para la búsqueda de cuentas + var doSearch = function () { + var frmData = $("#frmSearch").serialize(); + + $.ajax({ + type: 'POST', + dataType: 'html', + url: APP_ROOT + '/ajax/ajax_search.php', + data: frmData, + success: function (response) { + $('#resBuscar').html(response); + $('#resBuscar').css("max-height", $('html').height() - windowAdjustSize); + }, + error: function () { + $('#resBuscar').html(resMsg("nofancyerror")); + }, + complete: function () { + sysPassUtil.hideLoading(); + scrollUp(); + } + }); + }; + + // Mostrar el orden de campo y orden de búsqueda utilizados + var showSearchOrder = function () { + if (order.key) { + $('#search-sort-' + order.key).addClass('filterOn'); + if (order.dir === 0) { + $('#search-sort-' + order.key).append(''); + } else { + $('#search-sort-' + order.key).append(''); + } + } + }; + + // Función para navegar por el log de eventos + var navLog = function (start, current) { + if (typeof start === 'undefined') { + return false; + } + + $.ajax({ + type: 'POST', + dataType: 'html', + url: APP_ROOT + '/ajax/ajax_eventlog.php', + data: {'start': start, 'current': current}, + success: function (response) { + $('#content').html(response); + }, error: function () { $('#content').html(resMsg("nofancyerror")); }, complete: function () { - $.fancybox.hideLoading(); + sysPassUtil.hideLoading(); + scrollUp(); } }); - }); -} + }; -/** - * Función para establecer la altura del contenedor ajax - */ -function setContentSize() { - "use strict"; - - // Calculate total height for full body resize - var totalHeight = $("#content").height() + 100; - //var totalWidth = $("#wrap").width(); - - $("#container").css("height", totalHeight); -} - -/** - * Función para establecer la variable de ajuste óptimo de altura - */ -function setWindowAdjustSize() { - "use strict"; - - var browser = getBrowser(); - - if (browser === "MSIE") { - windowAdjustSize = 150; - } - //console.log(windowAdjustSize); -} - -/** - * Función para retornar el scroll a la posición inicial - */ -function scrollUp() { - "use strict"; - - $('html, body').animate({ scrollTop: 0 }, 'slow'); -} - -/** - * Función para limpiar un formulario - * - * @param clearStart - */ -function clearSearch(clearStart) { - "use strict"; - - if (clearStart === 1) { - $('#frmSearch').find('input[name="start"]').val(0); - return; - } - - document.frmSearch.search.value = ""; - document.frmSearch.customer.selectedIndex = 0; - document.frmSearch.category.selectedIndex = 0; - $('#frmSearch').find('input[name="start"]').val(0); - $('#frmSearch').find('input[name="skey"]').val(0); - $('#frmSearch').find('input[name="sorder"]').val(0); - $(".select-box").val('').trigger("chosen:updated"); - order.key = 0; - order.dir = 0; -} - -/** - * Función para crear un desplegable con opciones - * - * @param options - */ -function mkChosen(options) { - "use strict"; - - $('#' + options.id).chosen({ - allow_single_deselect: true, - placeholder_text_single: options.placeholder, - disable_search_threshold: 10, - no_results_text: options.noresults - }); -} - -/** - * Función para la búsqueda de cuentas mediante filtros - * - * @param continous - * @param event - */ -function accSearch(continous, event) { - "use strict"; - - var lenTxtSearch = $('#txtSearch').val().length; - - if (typeof (event) !== 'undefined' && ((event.keyCode < 48 && event.keyCode !== 13) || (event.keyCode > 105 && event.keyCode < 123))) { - return; - } - - if (lenTxtSearch < 3 && continous === 1 && lenTxtSearch > window.lastlen && event.keyCode != 13) { - return; - } - - window.lastlen = lenTxtSearch; - - doSearch(); -} - -/** - * Función para relizar la búsqueda de cuentas mediante ordenación - * - * @param skey - * @param start - * @param nav - * @returns {boolean} - */ -function searchSort(skey, start, nav) { - "use strict"; - - if (typeof(skey) === "undefined" || typeof(start) === "undefined") return false; - - if (order.key > 0 && order.key != skey) { - order.key = skey; - order.dir = 0; - } else if (nav != 1) { - order.key = skey; - - if (order.dir === 1) { - order.dir = 0; - } else { - order.dir = 1; - } - } - - $('#frmSearch').find('input[name="skey"]').val(order.key); - $('#frmSearch').find('input[name="sorder"]').val(order.dir); - $('#frmSearch').find('input[name="start"]').val(start); - - doSearch(); -} - -/** - * Función para la búsqueda de cuentas - */ -function doSearch() { - "use strict"; - - var frmData = $("#frmSearch").serialize(); - - $.fancybox.showLoading(); - - $.ajax({ - type: 'POST', - dataType: 'html', - url: APP_ROOT + '/ajax/ajax_search.php', - data: frmData, - success: function (response) { - $('#resBuscar').html(response); - $('#resBuscar').css("max-height", $('html').height() - windowAdjustSize); - - if (order.key) { - $('#search-sort-' + order.key).addClass('filterOn'); - if (order.dir === 0) { - $('#search-sort-' + order.key).append(''); - } else { - $('#search-sort-' + order.key).append(''); - } - } - }, - error: function () { - $('#resBuscar').html(resMsg("nofancyerror")); - }, - complete: function () { - scrollUp(); - $.fancybox.hideLoading(); - } - }); -} - -/** - * Función para navegar por el log de eventos - * - * @param start - * @param current - * @returns {boolean} - */ -function navLog(start, current) { - "use strict"; - - if (typeof(start) === "undefined") return false; - - $.fancybox.showLoading(); - - $.ajax({ - type: 'POST', - dataType: 'html', - url: APP_ROOT + '/ajax/ajax_eventlog.php', - data: {'start': start, 'current': current}, - success: function (response) { - $('#content').html(response); - }, - error: function () { - $('#content').html(resMsg("nofancyerror")); - }, - complete: function () { - $.fancybox.hideLoading(); - scrollUp(); - setContentSize(); - } - }); -} - -/** - * Función para ver la clave de una cuenta - * - * @param id - * @param full - * @param history - */ -function viewPass(id, full, history) { - "use strict"; - - // Comprobamos si la clave ha sido ya obtenida para copiar - if (passToClip === 1 && full === 0) { - return; - } - - $.ajax({ - type: 'POST', - url: APP_ROOT + '/ajax/ajax_viewpass.php', - async: false, - data: {'accountid': id, 'full': full, 'isHistory': history, 'isAjax': 1}, - success: function (data) { - if (data === "-1") { - doLogout(); - } else { - if (full === 0) { - // Copiamos la clave en el objeto que tiene acceso al portapapeles - $('#clip_pass_text').html(data); - passToClip = 1; - } else { - resMsg("none", data); - } - } - } - }); -} - -/** - * Función para obtener las variables de la URL y parsearlas a un array. - * - * @returns {Array} - */ -function getUrlVars() { - "use strict"; - - var vars = [], hash; - var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); - for (var i = 0; i < hashes.length; i++) { - hash = hashes[i].split('='); - vars.push(hash[0]); - vars[hash[0]] = hash[1]; - } - return vars; -} - -/** - * Función para autentificar usuarios - * - * @returns {boolean} - */ -function doLogin() { - "use strict"; - - $.fancybox.showLoading(); - - var data = $('#frmLogin').serialize(); - - $("#btnLogin").prop('disabled', true); - - $.ajax({ - type: "POST", - dataType: "json", - url: APP_ROOT + '/ajax/ajax_doLogin.php', - data: data, - success: function (json) { - var status = json.status; - var description = json.description; - - if (status === 0 || status === 2) { - location.href = description; - } else if (status === 3 || status === 4) { - resMsg("error", description); - $("#mpass").prop('disabled', false); - $('#smpass').show(); - } else if (status === 5) { - resMsg("warn", description, '', "location.href = 'index.php';"); - } else { - $('#user').val('').focus(); - $('#pass').val(''); - resMsg("error", description); - } - }, - complete: function () { - $('#btnLogin').prop('disabled', false); - $.fancybox.hideLoading(); - }, - statusCode: { - 404: function () { - var txt = LANG[1] + '

            ' + LANG[13] + '

            '; - resMsg("error", txt); - } - } - }); - - return false; -} - -/** - * Función para salir de la sesión - */ -function doLogout() { - "use strict"; - - var url = window.location.search; - - if (url.length > 0) { - location.href = 'index.php' + url + '&logout=1'; - } else { - location.href = 'index.php?logout=1'; - } -} - -/** - * Función para comprobar si se ha salido de la sesión - */ -function checkLogout() { - "use strict"; - - var session = getUrlVars()["session"]; - - if (session === 0) { - resMsg("warn", LANG[2], '', "location.search = ''"); - } -} - -/** - * Función para añadir/editar una cuenta - * - * @param frm - */ -function saveAccount(frm) { - "use strict"; - - var data = $("#" + frm).serialize(); - var id = $('input[name="accountid"]').val(); - var savetyp = $('input[name="savetyp"]').val(); - var action = $('input[name="next"]').val(); - - $('#btnGuardar').attr('disabled', true); - $.fancybox.showLoading(); - - $.ajax({ - type: 'POST', - dataType: 'json', - url: APP_ROOT + '/ajax/ajax_accountSave.php', - data: data, - success: function (json) { - var status = json.status; - var description = json.description; - - if (status === 0) { - resMsg("ok", description); - - if (savetyp === 1) { - $('#btnSave').hide(); - } else { - $('#btnSave').attr('disabled', true); - } - - if (action && id) { - doAction(action, 'accsearch', id); - } - } else if (status === 10) { - doLogout(); - } else { - resMsg("error", description); - $('#btnSave').removeAttr("disabled"); - } - }, - error: function (jqXHR, textStatus, errorThrown) { - var txt = LANG[1] + '

            ' + errorThrown + textStatus + '

            '; - resMsg("error", txt); - }, - complete: function () { - $.fancybox.hideLoading(); - } - }); -} - -/** - * Función para eliminar una cuenta - * - * @param id - * @param action - * @param sk - */ -function delAccount(id, action, sk) { - "use strict"; - - var data = {accountid: id, savetyp: action, sk: sk}; - var atext = '

            ' + LANG[3] + '

            '; - var url = '/ajax/ajax_accountSave.php'; - - alertify.confirm(atext, function (e) { - if (e) { - sendAjax(data, url); - } - }); -} - -/** - * Función para enviar una solicitud de modificación de cuenta - */ -function sendRequest() { - "use strict"; - - var url = '/ajax/ajax_sendRequest.php'; - var data = $('#frmRequestModify').serialize(); - - sendAjax(data, url); -} - -/** - * Función para guardar la configuración - * - * @param action - */ -function configMgmt(action) { - "use strict"; - - var frm, url; - - switch (action) { - case "saveconfig": - frm = 'frmConfig'; - url = '/ajax/ajax_configSave.php'; - break; - case "savempwd": - frm = 'frmCrypt'; - url = '/ajax/ajax_configSave.php'; - break; - case "genflpass": - frm = 'frmFirstLoginPass'; - url = '/ajax/ajax_configSave.php'; - break; - case "backup": - frm = 'frmBackup'; - url = '/ajax/ajax_backup.php'; - break; - case "migrate": - frm = 'frmMigrate'; - url = '/ajax/ajax_migrate.php'; - break; - default: + // Función para ver la clave de una cuenta + var viewPass = function (id, full, history) { + // Comprobamos si la clave ha sido ya obtenida para copiar + if (passToClip === 1 && full === 0) { return; - } + } - var data = $('#' + frm).serialize(); + $.ajax({ + type: 'POST', + url: APP_ROOT + '/ajax/ajax_viewpass.php', + dataType: "json", + async: false, + data: {'accountid': id, 'full': full, 'isHistory': history, 'isAjax': 1}, + success: function (json) { - sendAjax(data, url); -} + if (json.status === 10) { + doLogout(); + return; + } -/** - * Función para descargar/ver archivos de una cuenta - * - * @param id - * @param sk - * @param action - */ -function downFile(id, sk, action) { - "use strict"; + if (full === false) { + // Copiamos la clave en el objeto que tiene acceso al portapapeles + $('#clip-pass-text').html(json.accpass); + passToClip = 1; + return; + } - var data = {'fileId': id, 'sk': sk, 'action': action}; + $('
            ').dialog({ + modal: true, + title: json.title, + width: 'auto', + open: function () { + var content; + var pass = ''; + var clipboardUserButton = + ''; + var clipboardPassButton = + ''; + var useImage = json.useimage; - if (action === 'view') { - $.fancybox.showLoading(); + if (json.status === 0) { + if (useImage === 0) { + pass = '

            ' + json.accpass + '

            '; + } else { + pass = ''; + clipboardPassButton = ''; + } + + content = pass + '
            ' + '
            ' + clipboardUserButton + clipboardPassButton + '
            '; + } else { + content = '' + json.description + ''; + + $(this).dialog("option", "buttons", + [{ + text: "Ok", + icons: {primary: "ui-icon-close"}, + click: function () { + $(this).dialog("close"); + } + }] + ); + } + + $(this).html(content); + + // Recentrar después de insertar el contenido + $(this).dialog('option', 'position', 'center'); + + // Carga de objeto flash para copiar al portapapeles + var clientPass = new ZeroClipboard($("#dialog-clip-pass-button-" + id), {swfPath: APP_ROOT + "/js/ZeroClipboard.swf"}); + var clientUser = new ZeroClipboard($("#dialog-clip-user-button-" + id), {swfPath: APP_ROOT + "/js/ZeroClipboard.swf"}); + + clientPass.on('ready', function (e) { + $("#dialog-clip-pass-button-" + id).attr("data-clip", 1); + clientPass.on('copy', function (e) { + //e.clipboardData.setData('text/plain', json.accpass); + clientPass.setText(json.accpass); + }); + clientPass.on('aftercopy', function (e) { + $('.dialog-pass-text').addClass('dialog-clip-pass-copy round'); + }); + }); + + clientPass.on('error', function (e) { + ZeroClipboard.destroy(); + }); + + clientUser.on('ready', function (e) { + clientUser.on('copy', function (e) { + clientUser.setText(json.acclogin); + }); + }); + + // Cerrar Dialog a los 30s + var thisDialog = $(this); + + $(this).parent().on('mouseleave', function () { + clearTimeout(timeout); + timeout = setTimeout(function () { + thisDialog.dialog('close'); + }, 30000); + }); + }, + // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo + close: function () { + clearTimeout(timeout); + $(this).dialog("destroy"); + } + }); + } + }); + }; + + // Función para obtener las variables de la URL y parsearlas a un array. + var getUrlVars = function () { + var vars = [], hash; + var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); + for (var i = 0; i < hashes.length; i++) { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; + }; + + // Función para autentificar usuarios + var doLogin = function () { + encryptFormValue('#pass'); + encryptFormValue('#mpass'); + + var data = $('#frmLogin').serialize(); + + $("#btnLogin").prop('disabled', true); $.ajax({ type: "POST", - cache: false, - url: APP_ROOT + "/ajax/ajax_files.php", + dataType: "json", + url: APP_ROOT + '/ajax/ajax_doLogin.php', data: data, - success: function (response) { - if (response) { - $.fancybox(response, {padding: [10, 10, 10, 10]}); - // Actualizar fancybox para adaptarlo al tamaño de la imagen - setTimeout(function () { - $.fancybox.update(); - }, 1000); - } else { - resMsg("error", LANG[14]); - } + success: function (json) { + var status = json.status; + var description = json.description; + if (status === 0 || status === 2) { + location.href = description; + } else if (status === 3 || status === 4) { + resMsg("error", description); + $("#mpass").prop('disabled', false); + $('#smpass').show().focus(); + } else if (status === 5) { + resMsg("warn", description, '', "location.href = 'index.php';"); + } else { + $('#user').val('').focus(); + $('#pass').val(''); + resMsg("error", description); + } }, complete: function () { - $.fancybox.hideLoading(); - } - }); - } else if (action === 'download') { - $.fileDownload(APP_ROOT + '/ajax/ajax_files.php', {'httpMethod': 'POST', 'data': data}); - } -} - -/** - * Función para obtener la lista de archivos de una cuenta - * - * @param id - * @param isDel - * @param sk - */ -function getFiles(id, isDel, sk) { - "use strict"; - - var data = {'id': id, 'del': isDel, 'sk': sk}; - - $.ajax({ - type: "GET", - cache: false, - url: APP_ROOT + "/ajax/ajax_getFiles.php", - data: data, - success: function (response) { - $('#downFiles').html(response); - }, - complete: function () { - $.fancybox.hideLoading(); - } - }); -} - -/** - * Función para eliminar archivos de una cuenta - * - * @param id - * @param sk - * @param accid - */ -function delFile(id, sk, accid) { - "use strict"; - - var atext = '

            ' + LANG[15] + '

            '; - - alertify.confirm(atext, function (e) { - if (e) { - $.fancybox.showLoading(); - - var data = {'fileId': id, 'action': 'delete', 'sk': sk}; - - $.post(APP_ROOT + '/ajax/ajax_files.php', data, - function (data) { - $.fancybox.hideLoading(); - resMsg("ok", data); - $("#downFiles").load(APP_ROOT + "/ajax/ajax_getFiles.php?id=" + accid + "&del=1&isAjax=1&sk=" + sk); + $('#btnLogin').prop('disabled', false); + sysPassUtil.hideLoading(); + }, + statusCode: { + 404: function () { + var txt = LANG[1] + '

            ' + LANG[13] + '

            '; + resMsg("error", txt); } - ); - } - }); -} - -/** - * Función para activar el Drag&Drop de archivos en las cuentas - * - * @param accountId - * @param sk - * @param maxsize - */ -function dropFile(accountId, sk, maxsize) { - "use strict"; - - var dropfiles = $('#dropzone'); - var file_exts_ok = dropfiles.attr('data-files-ext').toLowerCase().split(','); - - dropfiles.filedrop({ - fallback_id: 'inFile', - paramname: 'inFile', - maxfiles: 5, - maxfilesize: maxsize, - allowedfileextensions: file_exts_ok, - url: APP_ROOT + '/ajax/ajax_files.php', - data: { - sk: sk, - accountId: accountId, - action: 'upload', - isAjax: 1 - }, - uploadFinished: function (i, file, response) { - $.fancybox.hideLoading(); - - var sk = $('input[name="sk"]').val(); - $("#downFiles").load(APP_ROOT + "/ajax/ajax_getFiles.php?id=" + accountId + "&del=1&isAjax=1&sk=" + sk); - - resMsg("ok", response); - }, - error: function (err, file) { - switch (err) { - case 'BrowserNotSupported': - resMsg("error", LANG[16]); - break; - case 'TooManyFiles': - resMsg("error", LANG[17] + ' (max. ' + this.maxfiles + ')'); - break; - case 'FileTooLarge': - resMsg("error", LANG[18] + ' ' + maxsize + ' MB' + '
            ' + file.name); - break; - case 'FileExtensionNotAllowed': - resMsg("error", LANG[19]); - break; - default: - break; - } - }, - uploadStarted: function (i, file, len) { - $.fancybox.showLoading(); - } - }); -} - -/** - * Función para activar el Drag&Drop de archivos en la importación de cuentas - * - * @param sk - */ -function importFile(sk) { - "use strict"; - - var dropfiles = $('#dropzone'); - var file_exts_ok = ['csv', 'xml']; - - dropfiles.filedrop({ - fallback_id: 'inFile', - paramname: 'inFile', - maxfiles: 1, - maxfilesize: 1, - allowedfileextensions: file_exts_ok, - url: APP_ROOT + '/ajax/ajax_import.php', - data: { - sk: sk, - action: 'import', - isAjax: 1 - }, - uploadFinished: function (i, file, json) { - $.fancybox.hideLoading(); - - var status = json.status; - var description = json.description; - - if (status === 0) { - resMsg("ok", description); - } else if (status === 10) { - resMsg("error", description); - doLogout(); - } else { - resMsg("error", description); - } - }, - error: function (err, file) { - switch (err) { - case 'BrowserNotSupported': - resMsg("error", LANG[16]); - break; - case 'TooManyFiles': - resMsg("error", LANG[17] + ' (max. ' + this.maxfiles + ')'); - break; - case 'FileTooLarge': - resMsg("error", LANG[18] + '
            ' + file.name); - break; - case 'FileExtensionNotAllowed': - resMsg("error", LANG[19]); - break; - default: - break; - } - }, - uploadStarted: function (i, file, len) { - $.fancybox.showLoading(); - } - }); -} - -/** - * Función para realizar una petición ajax - * - * @param data - * @param url - */ -function sendAjax(data, url) { - "use strict"; - - $.fancybox.showLoading(); - - $.ajax({ - type: 'POST', - dataType: 'json', - url: APP_ROOT + url, - data: data, - success: function (json) { - var status = json.status; - var description = json.description; - var action = json.action; - - switch (status) { - case 0: - $.fancybox.close(); - resMsg("ok", description, undefined, action); - break; - case 1: - $.fancybox.close(); - resMsg("error", description, undefined, action); - break; - case 2: - $("#resFancyAccion").html('' + description + '').show(); - break; - case 3: - $.fancybox.close(); - resMsg("warn", description, undefined, action); - break; - case 10: - doLogout(); - break; - default: - return; - } - }, - error: function (jqXHR, textStatus, errorThrown) { - var txt = LANG[1] + '

            ' + errorThrown + textStatus + '

            '; - resMsg("error", txt); - }, - complete: function () { - $.fancybox.hideLoading(); - } - }); -} - -/** - * Función para mostrar el formulario para cambio de clave de usuario - * - * @param id - * @param usrlogin - */ -function usrUpdPass(id, usrlogin) { - "use strict"; - - var data = {'usrid': id, 'usrlogin': usrlogin, 'isAjax': 1}; - - $.fancybox.showLoading(); - - $.ajax({ - type: "GET", - cache: false, - url: APP_ROOT + '/ajax/ajax_usrpass.php', - data: data, - success: function (data) { - if (data.length === 0) { - doLogout(); - } else { - $.fancybox(data, {padding: 0}); - } - } - }); -} - -/** - * Función para mostrar los datos de un registro - * - * @param id - * @param type - * @param sk - * @param active - * @param view - */ -function appMgmtData(id, type, sk, active, view) { - "use strict"; - - var data = {'id': id, 'type': type, 'sk': sk, 'active': active, 'view': view, 'isAjax': 1}; - var url = APP_ROOT + '/ajax/ajax_appMgmtData.php'; - - $.fancybox.showLoading(); - - $.ajax({ - type: 'POST', - dataType: 'html', - url: url, - data: data, - success: function (response) { - $.fancybox(response, {padding: [0, 10, 10, 10]}); - }, - error: function (jqXHR, textStatus, errorThrown) { - var txt = LANG[1] + '

            ' + errorThrown + textStatus + '

            '; - resMsg("error", txt); - }, - complete: function () { - $.fancybox.hideLoading(); - } - }); -} - -/** - * Función para editar los datos de un registro - * - * @param frmId - * @param isDel - * @param id - * @param type - * @param sk - * @param nextaction - */ -function appMgmtSave(frmId, isDel, id, type, sk, nextaction) { - "use strict"; - - var data; - var url = '/ajax/ajax_appMgmtSave.php'; - - if (isDel === 1) { - data = {'id': id, 'type': type, 'action': 4, 'sk': sk, 'activeTab': frmId, 'onCloseAction': nextaction}; - var atext = '

            ' + LANG[12] + '

            '; - - alertify.confirm(atext, function (e) { - if (e) { - sendAjax(data, url); } }); - } else { - data = $("#" + frmId).serialize(); - sendAjax(data, url); - } -} -/** - * Función para verificar si existen actualizaciones - */ -function checkUpds() { - "use strict"; - - $.ajax({ - type: 'GET', - dataType: 'html', - url: APP_ROOT + '/ajax/ajax_checkUpds.php', - timeout: 10000, - success: function (response) { - $('#updates').html(response); - }, - error: function (jqXHR, textStatus, errorThrown) { - $('#updates').html('!'); - } - }); -} - -/** - * Función para limpiar el log de eventos - * - * @param sk - */ -function clearEventlog(sk) { - "use strict"; - - var atext = '

            ' + LANG[20] + '

            '; - - alertify.confirm(atext, function (e) { - if (e) { - var data = {'clear': 1, 'sk': sk, 'isAjax': 1}; - var url = '/ajax/ajax_eventlog.php'; - - sendAjax(data, url); - } - }); -} - -/** - * Función para mostrar los botones de acción en los resultados de búsqueda - * - * @param me - */ -function showOptional(me) { - "use strict"; - - $(me).hide(); - //$(me).parent().css('width','15em'); - //var actions = $(me).closest('.account-actions').children('.actions-optional'); - var actions = $(me).parent().children('.actions-optional'); - actions.show(250); -} - -/** - * Función para obtener el tiempo actual en milisegundos - * - * @returns {number} - */ -function getTime() { - "use strict"; - - var t = new Date(); - return t.getTime(); -} - -/** - * Función para generar claves aleatorias. - * By Uzbekjon from http://jquery-howto.blogspot.com.es - * - * @param length - * @param special - * @param fancy - * @param dstId - */ -function password(length, special, fancy, dstId) { - "use strict"; - - var iteration = 0; - var genPassword = ''; - var randomNumber; - - if (typeof special === 'undefined') { - special = false; - } - - while (iteration < length) { - randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33; - if (!special) { - if ((randomNumber >= 33) && (randomNumber <= 47)) { - continue; - } - if ((randomNumber >= 58) && (randomNumber <= 64)) { - continue; - } - if ((randomNumber >= 91) && (randomNumber <= 96)) { - continue; - } - if ((randomNumber >= 123) && (randomNumber <= 126)) { - continue; - } - } - iteration++; - genPassword += String.fromCharCode(randomNumber); - } - - if (fancy === true) { - $("#viewPass").attr("title", genPassword); - //alertify.alert('

            ' + LANG[6] + '

            ' + password + '

            '); - } else { - alertify.alert('

            ' + LANG[6] + '

            ' + genPassword + '

            '); - } - - if (dstId) { - checkPassLevel(genPassword); - $('#' + dstId + ' input:password').val(genPassword); - $('#' + dstId + ' #passLevel').show(500); - } else { - checkPassLevel(genPassword); - $('input:password').val(genPassword); - $('#passLevel').show(500); - } - //return password; -} - -/** - * Funciones para analizar al fortaleza de una clave - * From http://net.tutsplus.com/tutorials/javascript-ajax/build-a-simple-password-strength-checker/ - * - * @param password - * @param dstId - */ -function checkPassLevel(password, dstId) { - "use strict"; - - strPassword = password; - - num.Excess = 0; - num.Upper = 0; - num.Numbers = 0; - num.Symbols = 0; - bonus.Combo = 0; - bonus.FlatLower = 0; - bonus.FlatNumber = 0; - baseScore = 0; - score = 0; - - if (password.length >= minPasswordLength) { - baseScore = 50; - analyzeString(); - calcComplexity(); - } else { - baseScore = 0; - } - - if (dstId) { - outputResult(dstId); - } else { - outputResult(dstId); - } -} - -/** - * Función para analizar la complejidad de una clave - */ -function analyzeString() { - "use strict"; - - var chars = strPassword.split(''); - - for (var i = 0; i < strPassword.length; i++) { - if (chars[i].match(/[A-Z]/g)) { - num.Upper++; - } - if (chars[i].match(/[0-9]/g)) { - num.Numbers++; - } - if (chars[i].match(/(.*[!,@,#,$,%,&,*,?,%,_])/)) { - num.Symbols++; - } - } - - num.Excess = strPassword.length - minPasswordLength; - - if (num.Upper && num.Numbers && num.Symbols) { - bonus.Combo = 25; - } - - else if ((num.Upper && num.Numbers) || (num.Upper && num.Symbols) || (num.Numbers && num.Symbols)) { - bonus.Combo = 15; - } - - if (strPassword.match(/^[\sa-z]+$/)) { - bonus.FlatLower = -15; - } - - if (strPassword.match(/^[\s0-9]+$/)) { - bonus.FlatNumber = -35; - } -} - -/** - * Función para calcular la complejidad de una clave - */ -function calcComplexity() { - "use strict"; - - score = baseScore + (num.Excess * bonus.Excess) + (num.Upper * bonus.Upper) + (num.Numbers * bonus.Numbers) + (num.Symbols * bonus.Symbols) + bonus.Combo + bonus.FlatLower + bonus.FlatNumber; -} - -/** - * Función para mostrar el resultado de complejidad de una clave - * - * @param dstId - */ -function outputResult(dstId) { - "use strict"; - - var complexity, selector = '.passLevel'; - - if (dstId) { - selector = '#' + dstId + ' .passLevel'; - } - - complexity = $(selector); - complexity.removeClass("weak good strong strongest"); - - if (strPassword.length === 0) { - complexity.attr('title', '').empty(); - } else if (strPassword.length < minPasswordLength) { - complexity.attr('title', LANG[11]).addClass("weak"); - } else if (score < 50) { - complexity.attr('title', LANG[9]).addClass("weak"); - } else if (score >= 50 && score < 75) { - complexity.attr('title', LANG[8]).addClass("good"); - } else if (score >= 75 && score < 100) { - complexity.attr('title', LANG[7]).addClass("strong"); - } else if (score >= 100) { - complexity.attr('title', LANG[10]).addClass("strongest"); - } - - $('.passLevel').powerTip(powertipOptions); -} - -/** - * Función para mostrar mensaje con alertify - * - * @param type - * @param txt - * @param url - * @param action - * @returns {*} - */ -function resMsg(type, txt, url, action) { - "use strict"; - - if (typeof url !== "undefined") { - $.ajax({ - url: url, type: 'get', dataType: 'html', async: false, success: function (data) { - txt = data; - } - }); - } - - var html; - - txt = txt.replace(/(\\n|;;)/g, "
            "); - - switch (type) { - case "ok": - alertify.set({beforeCloseAction: action}); - return alertify.success(txt); - case "error": - alertify.set({beforeCloseAction: action}); - return alertify.error(txt); - case "warn": - alertify.set({beforeCloseAction: action}); - return alertify.log(txt); - case "info": - html = '
            ' + txt + '
            '; - break; - case "none": - html = txt; - break; - case "nofancyerror": - html = '

            Oops...
            ' + LANG[1] + '
            ' + txt + '

            '; - return html; - default: - alertify.set({beforeCloseAction: action}); - return alertify.error(txt); - } - - $.fancybox(html, { - afterLoad: function () { - $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({ - 'border-radius': '25px', - '-moz-border-radius': '25px', - '-webkit-border-radius': '25px' - }); - }, afterClose: function () { - if (typeof action !== "undefined") { - eval(action); - } - } - }); -} - -/** - * Función para comprobar la conexión con LDAP - */ -function checkLdapConn() { - "use strict"; - - var ldapServer = $('#frmConfig').find('[name=ldap_server]').val(); - var ldapBase = $('#frmConfig').find('[name=ldap_base]').val(); - var ldapGroup = $('#frmConfig').find('[name=ldap_group]').val(); - var ldapBindUser = $('#frmConfig').find('[name=ldap_binduser]').val(); - var ldapBindPass = $('#frmConfig').find('[name=ldap_bindpass]').val(); - var sk = $('#frmConfig').find('[name=sk]').val(); - var data = { - 'ldap_server': ldapServer, - 'ldap_base': ldapBase, - 'ldap_group': ldapGroup, - 'ldap_binduser': ldapBindUser, - 'ldap_bindpass': ldapBindPass, - 'isAjax': 1, - 'sk': sk + return false; }; - sendAjax(data, '/ajax/ajax_checkLdap.php'); -} + // Función para salir de la sesión + var doLogout = function () { + var url = window.location.search; -/** - * Función para volver al login - */ -function goLogin() { - "use strict"; + if (url.length > 0) { + location.href = 'index.php' + url + '&logout=1'; + } else { + location.href = 'index.php?logout=1'; + } + }; - setTimeout(function () { - location.href = "index.php"; - }, 2000); -} + // Función para comprobar si se ha salido de la sesión + var checkLogout = function () { + var session = getUrlVars()["session"]; -/** - * Función para obtener el navegador usado - * - * @returns {*} - */ -function getBrowser() { - "use strict"; + if (session === 0) { + resMsg("warn", LANG[2], '', "location.search = ''"); + } + }; - var browser; - var ua = navigator.userAgent; - var re = new RegExp("(MSIE|Firefox)[ /]?([0-9]{1,}[\.0-9]{0,})", "i"); - if (re.exec(ua) !== null) { - browser = RegExp.$1; - //version = parseFloat( RegExp.$2 ); - } + var redirect = function (url) { + location.href = url; + }; - return browser; + // Función para añadir/editar una cuenta + var saveAccount = function (frm) { + encryptFormValue('#accountpass'); + encryptFormValue('#accountpassR'); + + var data = $("#" + frm).serialize(); + var id = $('input[name="accountid"]').val(); + var action = $('input[name="next"]').val(); + + $.ajax({ + type: 'POST', + dataType: 'json', + url: APP_ROOT + '/ajax/ajax_accountSave.php', + data: data, + success: function (json) { + var status = json.status; + var description = json.description; + + if (status === 0) { + resMsg("ok", description); + + if (action && id) { + doAction(action, 1, id); + } + } else if (status === 10) { + doLogout(); + } else { + resMsg("error", description); + } + }, + error: function (jqXHR, textStatus, errorThrown) { + var txt = LANG[1] + '

            ' + errorThrown + textStatus + '

            '; + resMsg("error", txt); + } + }); + }; + + // Función para eliminar una cuenta + var delAccount = function (id, action, sk) { + var data = {accountid: id, actionId: action, sk: sk}; + var atext = '

            ' + LANG[3] + '

            '; + var url = '/ajax/ajax_accountSave.php'; + + alertify + .okBtn(LANG[43]) + .cancelBtn(LANG[44]) + .confirm(atext, function (e) { + sendAjax(data, url); + }, function (e) { + e.preventDefault(); + + alertify.error(LANG[44]); + }); + }; + + // Función para enviar una solicitud de modificación de cuenta + var sendRequest = function () { + var url = '/ajax/ajax_sendRequest.php'; + var data = $('#frmRequestModify').serialize(); + + sendAjax(data, url); + }; + + // Función para guardar la configuración + var configMgmt = function (action, obj) { + var url; + + switch (action) { + case "config": + encryptFormValue('#curMasterPwd'); + encryptFormValue('#newMasterPwd'); + encryptFormValue('#newMasterPwdR'); + + url = '/ajax/ajax_configSave.php'; + break; + case "export": + encryptFormValue('#exportPwd'); + encryptFormValue('#exportPwdR'); + + url = '/ajax/ajax_backup.php'; + break; + case "import": + encryptFormValue('#importPwd'); + + url = '/ajax/ajax_migrate.php'; + break; + default: + return; + } + + var data = $(obj).serialize(); + + sendAjax(data, url); + }; + + // Función para descargar/ver archivos de una cuenta + var downFile = function (id, sk, action) { + var data = {'fileId': id, 'sk': sk, 'action': action}; + + if (action === 'view') { + $.ajax({ + type: "POST", + cache: false, + url: APP_ROOT + "/ajax/ajax_files.php", + data: data, + success: function (response) { + if (response) { + $.fancybox(response, {padding: [10, 10, 10, 10]}); + // Actualizar fancybox para adaptarlo al tamaño de la imagen + setTimeout(function () { + $.fancybox.update(); + }, 1000); + } else { + resMsg("error", LANG[14]); + } + + } + }); + } else if (action === 'download') { + $.fileDownload(APP_ROOT + '/ajax/ajax_files.php', {'httpMethod': 'POST', 'data': data}); + } + }; + + // Función para obtener la lista de archivos de una cuenta + var getFiles = function (id, isDel, sk) { + var data = {'id': id, 'del': isDel, 'sk': sk}; + + $.ajax({ + type: "GET", + cache: false, + url: APP_ROOT + "/ajax/ajax_getFiles.php", + data: data, + success: function (response) { + $('#downFiles').html(response); + } + }); + }; + + // Función para eliminar archivos de una cuenta + var delFile = function (id, sk, accid) { + var atext = '

            ' + LANG[15] + '

            '; + + alertify + .okBtn(LANG[43]) + .cancelBtn(LANG[44]) + .confirm(atext, function (e) { + var data = {'fileId': id, 'action': 'delete', 'sk': sk}; + + $.post(APP_ROOT + '/ajax/ajax_files.php', data, + function (data) { + resMsg("ok", data); + $("#downFiles").load(APP_ROOT + "/ajax/ajax_getFiles.php?id=" + accid + "&del=1&isAjax=1&sk=" + sk); + } + ); + }, function (e) { + e.preventDefault(); + + alertify.error(LANG[44]); + }); + }; + + // Función para activar el Drag&Drop de archivos en las cuentas + var dropFile = function (accountId, sk, maxsize) { + var dropfiles = $('#dropzone'); + var file_exts_ok = dropfiles.attr('data-files-ext').toLowerCase().split(','); + + dropfiles.filedrop({ + fallback_id: 'inFile', + paramname: 'inFile', + maxfiles: 5, + maxfilesize: maxsize, + allowedfileextensions: file_exts_ok, + url: APP_ROOT + '/ajax/ajax_files.php', + data: { + sk: sk, + accountId: accountId, + action: 'upload', + isAjax: 1 + }, + uploadFinished: function (i, file, response) { + sysPassUtil.hideLoading(); + + var sk = $('input[name="sk"]').val(); + $("#downFiles").load(APP_ROOT + "/ajax/ajax_getFiles.php?id=" + accountId + "&del=1&isAjax=1&sk=" + sk); + + resMsg("ok", response); + }, + error: function (err, file) { + switch (err) { + case 'BrowserNotSupported': + resMsg("error", LANG[16]); + break; + case 'TooManyFiles': + resMsg("error", LANG[17] + ' (max. ' + this.maxfiles + ')'); + break; + case 'FileTooLarge': + resMsg("error", LANG[18] + ' ' + maxsize + ' MB' + '
            ' + file.name); + break; + case 'FileExtensionNotAllowed': + resMsg("error", LANG[19]); + break; + default: + break; + } + }, + uploadStarted: function (i, file, len) { + sysPassUtil.showLoading(); + } + }); + }; + + // Función para activar el Drag&Drop de archivos en la importación de cuentas + var importFile = function (sk) { + var dropfiles = $('#dropzone'); + var file_exts_ok = ['csv', 'xml']; + + dropfiles.filedrop({ + fallback_id: 'inFile', + paramname: 'inFile', + maxfiles: 1, + maxfilesize: 1, + allowedfileextensions: file_exts_ok, + url: APP_ROOT + '/ajax/ajax_import.php', + data: { + sk: sk, + action: 'import', + isAjax: 1, + importPwd: function () { + return $('input[name="importPwd"]').val(); + }, + defUser: function () { + return $('#import_defaultuser').chosen().val(); + }, + defGroup: function () { + return $('#import_defaultgroup').chosen().val(); + }, + csvDelimiter: function () { + return $('input[name="csvDelimiter"]').val(); + } + }, + uploadFinished: function (i, file, json) { + sysPassUtilhideLoading(); + + var status = json.status; + var description = json.description; + + if (status === 0) { + resMsg("ok", description); + } else if (status === 10) { + resMsg("error", description); + doLogout(); + } else { + resMsg("error", description); + } + }, + error: function (err, file) { + switch (err) { + case 'BrowserNotSupported': + resMsg("error", LANG[16]); + break; + case 'TooManyFiles': + resMsg("error", LANG[17] + ' (max. ' + this.maxfiles + ')'); + break; + case 'FileTooLarge': + resMsg("error", LANG[18] + '
            ' + file.name); + break; + case 'FileExtensionNotAllowed': + resMsg("error", LANG[19]); + break; + default: + break; + } + }, + uploadStarted: function (i, file, len) { + sysPassUtil.showLoading(); + } + }); + }; + + // Función para realizar una petición ajax + var sendAjax = function (data, url) { + $.ajax({ + type: 'POST', + dataType: 'json', + url: APP_ROOT + url, + data: data, + success: function (json) { + var status = json.status; + var description = json.description; + var action = json.action; + + switch (status) { + case 0: + $.fancybox.close(); + resMsg("ok", description, undefined, action); + break; + case 1: + $.fancybox.close(); + resMsg("error", description, undefined, action); + break; + case 2: + $("#resFancyAccion").html('' + description + '').show(); + break; + case 3: + $.fancybox.close(); + resMsg("warn", description, undefined, action); + break; + case 10: + doLogout(); + break; + default: + return; + } + }, + error: function (jqXHR, textStatus, errorThrown) { + var txt = LANG[1] + '

            ' + errorThrown + textStatus + '

            '; + resMsg("error", txt); + } + }); + }; + + // Función para mostrar el formulario para cambio de clave de usuario + var usrUpdPass = function (object, actionId, sk) { + var userId = $(object).attr("data-itemid"); + var data = {'userId': userId, 'actionId': actionId, 'sk': sk, 'isAjax': 1}; + + $.ajax({ + type: "GET", + cache: false, + url: APP_ROOT + '/ajax/ajax_usrpass.php', + data: data, + success: function (data) { + if (data.length === 0) { + doLogout(); + } else { + $.fancybox(data, {padding: 0}); + } + } + }); + }; + + // Función para mostrar los datos de un registro + var appMgmtData = function (obj, actionId, sk) { + var itemId = $(obj).attr('data-itemid'); + var activeTab = $(obj).attr('data-activetab'); + + var data = {'itemId': itemId, 'actionId': actionId, 'sk': sk, 'activeTab': activeTab, 'isAjax': 1}; + var url = APP_ROOT + '/ajax/ajax_appMgmtData.php'; + + $.ajax({ + type: 'POST', + dataType: 'html', + url: url, + data: data, + success: function (response) { + $.fancybox(response, {padding: [0, 10, 10, 10]}); + }, + error: function (jqXHR, textStatus, errorThrown) { + var txt = LANG[1] + '

            ' + errorThrown + textStatus + '

            '; + resMsg("error", txt); + } + }); + }; + + // Función para borrar un registro + var appMgmtDelete = function (obj, actionId, sk) { + var itemId = $(obj).attr('data-itemid'); + var activeTab = $(obj).attr('data-activetab'); + var nextActionId = $(obj).attr('data-nextactionid'); + var atext = '

            ' + LANG[12] + '

            '; + + var url = '/ajax/ajax_appMgmtSave.php'; + var data = { + 'itemId': itemId, + 'actionId': actionId, + 'sk': sk, + 'activeTab': activeTab, + 'onCloseAction': nextActionId + }; + + alertify + .okBtn(LANG[43]) + .cancelBtn(LANG[44]) + .confirm(atext, function (e) { + sendAjax(data, url); + }, function (e) { + e.preventDefault(); + + alertify.error(LANG[44]); + }); + }; + + // Función para editar los datos de un registro + var appMgmtSave = function (frmId) { + encryptFormValue('#userpass'); + encryptFormValue('#userpassR'); + + encryptFormValue('#fancypass'); + encryptFormValue('#fancypassR'); + + var url = '/ajax/ajax_appMgmtSave.php'; + var data = $("#" + frmId).serialize(); + + sendAjax(data, url); + }; + + // Función para verificar si existen actualizaciones + var checkUpds = function () { + $.ajax({ + type: 'GET', + dataType: 'html', + url: APP_ROOT + '/ajax/ajax_checkUpds.php', + timeout: 10000, + success: function (response) { + $('#updates').html(response); + + if (typeof componentHandler !== "undefined") { + componentHandler.upgradeDom(); + } + }, + error: function (jqXHR, textStatus, errorThrown) { + $('#updates').html('!'); + } + }); + }; + + // Función para limpiar el log de eventos + var clearEventlog = function (sk) { + var atext = '

            ' + LANG[20] + '

            '; + + alertify + .okBtn(LANG[43]) + .cancelBtn(LANG[44]) + .confirm(atext, function (e) { + var data = {'clear': 1, 'sk': sk, 'isAjax': 1}; + var url = '/ajax/ajax_eventlog.php'; + + sendAjax(data, url); + }, function (e) { + e.preventDefault(); + + alertify.error(LANG[44]); + }); + }; + + // Función para mostrar los botones de acción en los resultados de búsqueda + var showOptional = function (me) { + $(me).hide(); + //$(me).parent().css('width','15em'); + //var actions = $(me).closest('.account-actions').children('.actions-optional'); + var actions = $(me).parent().children('.actions-optional'); + actions.show(250); + }; + + // Función para obtener el tiempo actual en milisegundos + var getTime = function () { + var t = new Date(); + return t.getTime(); + }; + + // Funciones para analizar al fortaleza de una clave + // From http://net.tutsplus.com/tutorials/javascript-ajax/build-a-simple-password-strength-checker/ + var checkPassLevel = function (password, dst) { + var level = zxcvbn(password); + + outputResult(level.score, dst); + }; + + var outputResult = function (level, dstId) { + var complexity, selector = '.passLevel-' + dstId; + + complexity = $(selector); + complexity.removeClass("weak good strong strongest"); + + if (passwordData.passLength === 0) { + complexity.attr('title', '').empty(); + } else if (passwordData.passLength < passwordData.minPasswordLength) { + complexity.attr('title', LANG[11]).addClass("weak"); + } else if (level === 0) { + complexity.attr('title', LANG[9]).addClass("weak"); + } else if (level === 1 || level === 2) { + complexity.attr('title', LANG[8]).addClass("good"); + } else if (level === 3) { + complexity.attr('title', LANG[7]).addClass("strong"); + } else if (level === 4) { + complexity.attr('title', LANG[10]).addClass("strongest"); + } + }; + + // Función para mostrar mensaje con alertify + var resMsg = function (type, txt, url, action) { + if (typeof url !== 'undefined') { + $.ajax({ + url: url, type: 'get', dataType: 'html', async: false, success: function (data) { + txt = data; + } + }); + } + + var html; + + txt = txt.replace(/(\\n|;;)/g, "
            "); + + switch (type) { + case "ok": + alertify.success(txt); + break; + case "error": + alertify.error(txt); + break; + case "warn": + alertify.log(txt); + break; + case "nofancyerror": + html = '

            Oops...
            ' + LANG[1] + '
            ' + txt + '

            '; + return html; + default: + alertify.error(txt); + break; + } + + if (typeof action !== "undefined") { + eval(action); + } + }; + + // Función para comprobar la conexión con LDAP + var checkLdapConn = function () { + var ldapServer = $('#frmConfig').find('[name=ldap_server]').val(); + var ldapBase = $('#frmConfig').find('[name=ldap_base]').val(); + var ldapGroup = $('#frmConfig').find('[name=ldap_group]').val(); + var ldapBindUser = $('#frmConfig').find('[name=ldap_binduser]').val(); + var ldapBindPass = $('#frmConfig').find('[name=ldap_bindpass]').val(); + var sk = $('#frmConfig').find('[name=sk]').val(); + var data = { + 'ldap_server': ldapServer, + 'ldap_base': ldapBase, + 'ldap_group': ldapGroup, + 'ldap_binduser': ldapBindUser, + 'ldap_bindpass': ldapBindPass, + 'isAjax': 1, + 'sk': sk + }; + + sendAjax(data, '/ajax/ajax_checkLdap.php'); + }; + + // Función para volver al login + var goLogin = function () { + setTimeout(function () { + location.href = "index.php"; + }, 2000); + }; + + // Función para obtener el navegador usado + var getBrowser = function () { + var browser; + var ua = navigator.userAgent; + var re = new RegExp("(MSIE|Firefox)[ /]?([0-9]{1,}[.0-9]{0,})", "i"); + if (re.exec(ua) !== null) { + browser = RegExp.$1; + //version = parseFloat( RegExp.$2 ); + } + + return browser; + }; + + // Detectar los campos select y añadir funciones + var chosenDetect = function () { + var selectWidth = "250px"; + var searchTreshold = 10; + + $(".sel-chosen-usergroup").chosen({ + placeholder_text_single: LANG[21], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + + $(".sel-chosen-user").chosen({ + placeholder_text_single: LANG[22], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + + $(".sel-chosen-profile").chosen({ + placeholder_text_single: LANG[23], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + + $(".sel-chosen-customer").each(function () { + var deselect = $(this).hasClass('sel-chosen-deselect'); + + $(this).chosen({ + allow_single_deselect: deselect, + placeholder_text_single: LANG[24], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + }); + + $(".sel-chosen-category").each(function () { + var deselect = $(this).hasClass('sel-chosen-deselect'); + + $(this).chosen({ + allow_single_deselect: deselect, + placeholder_text_single: LANG[25], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + }); + + $(".sel-chosen-action").each(function () { + var deselect = $(this).hasClass('sel-chosen-deselect'); + + $(this).chosen({ + allow_single_deselect: deselect, + placeholder_text_single: LANG[39], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + }); + + $(".sel-chosen-ns").chosen({disable_search: true, width: selectWidth}); + }; + + /** + * Detectar los imputs del tipo checkbox para generar botones + * + * @param container El contenedor donde buscar + */ + var checkboxDetect = function (container) { + $(container).find('.checkbox').button({ + icons: {primary: "ui-icon-transferthick-e-w"} + }).click( + function () { + if ($(this).prop('checked') === true) { + $(this).button('option', 'label', LANG[40]); + } else { + $(this).button('option', 'label', LANG[41]); + } + } + ); + }; + + /** + * Encriptar el valor de un campo del formulario + * + * @param inputId El id del campo + */ + var encryptFormValue = function (inputId) { + var input = $(inputId); + var curValue = input.val(); + + if (validateBase64(curValue)){ + return; + } + + if (curValue !== '') { + var passEncrypted = encrypt.encrypt(curValue); + input.val(passEncrypted); + } + }; + + /** + * Comprobar si una cadena está en Base64 + * @param string + * @returns {boolean} + */ + var validateBase64 = function (string) { + // Expresión regular para comprobar si una cadena está codificada en base64 + var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$"); + return base64Matcher.test(string); + }; + + return { + accSearch: accSearch, + appMgmtData: appMgmtData, + appMgmtSave: appMgmtSave, + appMgmtDelete: appMgmtDelete, + checkboxDetect: checkboxDetect, + checkLdapConn: checkLdapConn, + checkPassLevel: checkPassLevel, + checkUpds: checkUpds, + clearEventlog: clearEventlog, + clearSearch: clearSearch, + chosenDetect: chosenDetect, + configMgmt: configMgmt, + delAccount: delAccount, + delFile: delFile, + doAction: doAction, + doLogin: doLogin, + doLogout: doLogout, + downFile: downFile, + dropFile: dropFile, + encryptFormValue: encryptFormValue, + getFiles: getFiles, + importFile: importFile, + outputResult: outputResult, + resMsg: resMsg, + searchSort: searchSort, + saveAccount: saveAccount, + sendAjax: sendAjax, + sendRequest: sendRequest, + setContentSize: setContentSize, + showOptional: showOptional, + showSearchOrder: showSearchOrder, + usrUpdPass: usrUpdPass, + viewPass: viewPass, + passwordData: passwordData, + passToClip: passToClip, + APP_ROOT: APP_ROOT, + LANG: LANG, + PK: PK + }; } \ No newline at end of file diff --git a/js/jquery-1.11.2.min.js b/js/jquery-1.11.2.min.js new file mode 100644 index 00000000..e6a051d0 --- /dev/null +++ b/js/jquery-1.11.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
            a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
            ","
            "],area:[1,"",""],param:[1,"",""],thead:[1,"","
            "],tr:[2,"","
            "],col:[2,"","
            "],td:[3,"","
            "],_default:k.htmlSerialize?[0,"",""]:[1,"X
            ","
            "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("",error:'

            The requested content cannot be loaded.
            Please try again later.

            ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, +c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& +k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| +b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= +setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= +a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), +b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
            ').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), +y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; +if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, +{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, +mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= +!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); +"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= +this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); +f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, +e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, +outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
            ").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
            ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", +g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": +"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? +h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| +h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
            ').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? +b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), +p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= +b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
            '+e+"
            ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, +e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ +":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
            ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
            ').appendTo("body");var e=20=== +d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/js/jquery.js b/js/jquery.js deleted file mode 100644 index 198b3ff0..00000000 --- a/js/jquery.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
            a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
            "+""+"
            ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
            t
            ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
            ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

            ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
            ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
            ","
            "],thead:[1,"","
            "],tr:[2,"","
            "],td:[3,"","
            "],col:[2,"","
            "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
            ","
            "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
            ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/js/js.php b/js/js.php index b8f544b7..ce0adace 100644 --- a/js/js.php +++ b/js/js.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -24,49 +24,35 @@ */ define('APP_ROOT', '..'); -require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; -$jsFiles = array( - array("href" => "js/jquery.js", "min" => false), - array("href" => "js/jquery.placeholder.js", "min" => true), - array("href" => "js/jquery-ui.js", "min" => false), - array("href" => "js/fancybox/jquery.fancybox.pack.js", "min" => false), - array("href" => "js/jquery.powertip.min.js", "min" => false), - array("href" => "js/chosen.jquery.min.js", "min" => false), - array("href" => "js/alertify.js", "min" => true), - array("href" => "js/jquery.fileDownload.js", "min" => true), - array("href" => "js/jquery.filedrop.js", "min" => true), - array("href" => "js/jquery.tagsinput.js", "min" => true), - array("href" => "js/ZeroClipboard.min.js", "min" => true), - array("href" => "js/functions.js", "min" => true) +require APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +$themeJsPath = VIEW_PATH . DIRECTORY_SEPARATOR . \SP\Init::$THEME . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'js.php'; + +$jsFilesBase = array( + array('href' => 'js/jquery-1.11.2.min.js', 'min' => false), +// array('href' => 'js/jquery-migrate-1.2.1.min.js', 'min' => false), + array('href' => 'js/jquery.placeholder.js', 'min' => true), + array('href' => 'js/jquery-ui.min.js', 'min' => false), + array('href' => 'js/jquery.fancybox.pack.js', 'min' => false), + array('href' => 'js/jquery.powertip.min.js', 'min' => false), + array('href' => 'js/chosen.jquery.min.js', 'min' => false), + array('href' => 'js/alertify.js', 'min' => false), + array('href' => 'js/jquery.fileDownload.js', 'min' => true), + array('href' => 'js/jquery.filedrop.js', 'min' => true), + array('href' => 'js/jquery.tagsinput.js', 'min' => true), + array('href' => 'js/ZeroClipboard.min.js', 'min' => false), + array('href' => 'js/jsencrypt.min.js', 'min' => false), + array('href' => 'js/zxcvbn-async.js', 'min' => true), + array('href' => 'js/functions.js', 'min' => true), ); -$arrJsLang = array( - _('Error en la consulta'), - _('Ha ocurrido un error'), - _('Sesión finalizada'), - _('Borrar la cuenta?'), - _('Borrar el usuario?'), - _('Guarde la configuración para que sea efectiva'), - _('Clave Generada'), - _('Nivel alto'), - _('Nivel medio'), - _('Nivel bajo'), - _('Nivel muy alto'), - _('Utilizar al menos 8 caracteres'), - _('Borrar elemento?'), - _('Página no encontrada'), - _('Archivo no soportado para visualizar'), - _('Eliminar archivo?'), - _('Su navegador no soporta subir archivos con HTML5'), - _('Demasiados archivos'), - _('No es posible guardar el archivo.
            Tamaño máximo:'), - _('Extensión no permitida'), - _('Vaciar el registro de eventos?') -); +if (file_exists($themeJsPath)){ + include $themeJsPath; -//$js = "// i18n language array from PHP. Detected language: " . SP_Init::$LANG . "\n"; -echo "var LANG = ['" . implode("','", SP_Util::arrayJSEscape($arrJsLang)) . "'];"; -echo "var APP_ROOT = '" . SP_Init::$WEBROOT . "';\n"; + foreach ($jsFilesTheme as $file) { + array_push($jsFilesBase, $file); + } +} -SP_Util::getMinified('js', $jsFiles); \ No newline at end of file +SP\Util::getMinified('js', $jsFilesBase, false); \ No newline at end of file diff --git a/js/jsencrypt.min.js b/js/jsencrypt.min.js new file mode 100644 index 00000000..256d61f7 --- /dev/null +++ b/js/jsencrypt.min.js @@ -0,0 +1,6 @@ +var JSEncryptExports = {}; +(function(exports) { + function BigInteger(a,b,c){null!=a&&("number"==typeof a?this.fromNumber(a,b,c):null==b&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function nbi(){return new BigInteger(null)}function am1(a,b,c,d,e,f){for(;--f>=0;){var g=b*this[a++]+c[d]+e;e=Math.floor(g/67108864),c[d++]=67108863&g}return e}function am2(a,b,c,d,e,f){for(var g=32767&b,h=b>>15;--f>=0;){var i=32767&this[a],j=this[a++]>>15,k=h*i+j*g;i=g*i+((32767&k)<<15)+c[d]+(1073741823&e),e=(i>>>30)+(k>>>15)+h*j+(e>>>30),c[d++]=1073741823&i}return e}function am3(a,b,c,d,e,f){for(var g=16383&b,h=b>>14;--f>=0;){var i=16383&this[a],j=this[a++]>>14,k=h*i+j*g;i=g*i+((16383&k)<<14)+c[d]+e,e=(i>>28)+(k>>14)+h*j,c[d++]=268435455&i}return e}function int2char(a){return BI_RM.charAt(a)}function intAt(a,b){var c=BI_RC[a.charCodeAt(b)];return null==c?-1:c}function bnpCopyTo(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t,a.s=this.s}function bnpFromInt(a){this.t=1,this.s=0>a?-1:0,a>0?this[0]=a:-1>a?this[0]=a+this.DV:this.t=0}function nbv(a){var b=nbi();return b.fromInt(a),b}function bnpFromString(a,b){var c;if(16==b)c=4;else if(8==b)c=3;else if(256==b)c=8;else if(2==b)c=1;else if(32==b)c=5;else{if(4!=b)return void this.fromRadix(a,b);c=2}this.t=0,this.s=0;for(var d=a.length,e=!1,f=0;--d>=0;){var g=8==c?255&a[d]:intAt(a,d);0>g?"-"==a.charAt(d)&&(e=!0):(e=!1,0==f?this[this.t++]=g:f+c>this.DB?(this[this.t-1]|=(g&(1<>this.DB-f):this[this.t-1]|=g<=this.DB&&(f-=this.DB))}8==c&&0!=(128&a[0])&&(this.s=-1,f>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==a;)--this.t}function bnToString(a){if(this.s<0)return"-"+this.negate().toString(a);var b;if(16==a)b=4;else if(8==a)b=3;else if(2==a)b=1;else if(32==a)b=5;else{if(4!=a)return this.toRadix(a);b=2}var c,d=(1<0)for(h>h)>0&&(e=!0,f=int2char(c));g>=0;)b>h?(c=(this[g]&(1<>(h+=this.DB-b)):(c=this[g]>>(h-=b)&d,0>=h&&(h+=this.DB,--g)),c>0&&(e=!0),e&&(f+=int2char(c));return e?f:"0"}function bnNegate(){var a=nbi();return BigInteger.ZERO.subTo(this,a),a}function bnAbs(){return this.s<0?this.negate():this}function bnCompareTo(a){var b=this.s-a.s;if(0!=b)return b;var c=this.t;if(b=c-a.t,0!=b)return this.s<0?-b:b;for(;--c>=0;)if(0!=(b=this[c]-a[c]))return b;return 0}function nbits(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)}function bnpDLShiftTo(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a,b.s=this.s}function bnpDRShiftTo(a,b){for(var c=a;c=0;--c)b[c+g+1]=this[c]>>e|h,h=(this[c]&f)<=0;--c)b[c]=0;b[g]=h,b.t=this.t+g+1,b.s=this.s,b.clamp()}function bnpRShiftTo(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)return void(b.t=0);var d=a%this.DB,e=this.DB-d,f=(1<>d;for(var g=c+1;g>d;d>0&&(b[this.t-c-1]|=(this.s&f)<c;)d+=this[c]-a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t>=this.DB;d+=this.s}else{for(d+=this.s;c>=this.DB;d-=a.s}b.s=0>d?-1:0,-1>d?b[c++]=this.DV+d:d>0&&(b[c++]=d),b.t=c,b.clamp()}function bnpMultiplyTo(a,b){var c=this.abs(),d=a.abs(),e=c.t;for(b.t=e+d.t;--e>=0;)b[e]=0;for(e=0;e=0;)a[c]=0;for(c=0;c=b.DV&&(a[c+b.t]-=b.DV,a[c+b.t+1]=1)}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1)),a.s=0,a.clamp()}function bnpDivRemTo(a,b,c){var d=a.abs();if(!(d.t<=0)){var e=this.abs();if(e.t0?(d.lShiftTo(i,f),e.lShiftTo(i,c)):(d.copyTo(f),e.copyTo(c));var j=f.t,k=f[j-1];if(0!=k){var l=k*(1<1?f[j-2]>>this.F2:0),m=this.FV/l,n=(1<=0&&(c[c.t++]=1,c.subTo(r,c)),BigInteger.ONE.dlShiftTo(j,r),r.subTo(f,f);f.t=0;){var s=c[--p]==k?this.DM:Math.floor(c[p]*m+(c[p-1]+o)*n);if((c[p]+=f.am(0,s,c,q,0,j))0&&c.rShiftTo(i,c),0>g&&BigInteger.ZERO.subTo(c,c)}}}function bnMod(a){var b=nbi();return this.abs().divRemTo(a,null,b),this.s<0&&b.compareTo(BigInteger.ZERO)>0&&a.subTo(b,b),b}function Classic(a){this.m=a}function cConvert(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function cRevert(a){return a}function cReduce(a){a.divRemTo(this.m,null,a)}function cMulTo(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function cSqrTo(a,b){a.squareTo(b),this.reduce(b)}function bnpInvDigit(){if(this.t<1)return 0;var a=this[0];if(0==(1&a))return 0;var b=3&a;return b=b*(2-(15&a)*b)&15,b=b*(2-(255&a)*b)&255,b=b*(2-((65535&a)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV,b>0?this.DV-b:-b}function Montgomery(a){this.m=a,this.mp=a.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(b,b),b}function montRevert(a){var b=nbi();return a.copyTo(b),this.reduce(b),b}function montReduce(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b>15)*this.mpl&this.um)<<15)&a.DM;for(c=b+this.m.t,a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp(),a.drShiftTo(this.m.t,a),a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function montSqrTo(a,b){a.squareTo(b),this.reduce(b)}function montMulTo(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)}function bnpExp(a,b){if(a>4294967295||1>a)return BigInteger.ONE;var c=nbi(),d=nbi(),e=b.convert(this),f=nbits(a)-1;for(e.copyTo(c);--f>=0;)if(b.sqrTo(c,d),(a&1<0)b.mulTo(d,e,c);else{var g=c;c=d,d=g}return b.revert(c)}function bnModPowInt(a,b){var c;return c=256>a||b.isEven()?new Classic(b):new Montgomery(b),this.exp(a,c)}function bnClone(){var a=nbi();return this.copyTo(a),a}function bnIntValue(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24}function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16}function bnpChunkSize(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function bnpToRadix(a){if(null==a&&(a=10),0==this.signum()||2>a||a>36)return"0";var b=this.chunkSize(a),c=Math.pow(a,b),d=nbv(c),e=nbi(),f=nbi(),g="";for(this.divRemTo(d,e,f);e.signum()>0;)g=(c+f.intValue()).toString(a).substr(1)+g,e.divRemTo(d,e,f);return f.intValue().toString(a)+g}function bnpFromRadix(a,b){this.fromInt(0),null==b&&(b=10);for(var c=this.chunkSize(b),d=Math.pow(b,c),e=!1,f=0,g=0,h=0;hi?"-"==a.charAt(h)&&0==this.signum()&&(e=!0):(g=b*g+i,++f>=c&&(this.dMultiply(d),this.dAddOffset(g,0),f=0,g=0))}f>0&&(this.dMultiply(Math.pow(b,f)),this.dAddOffset(g,0)),e&&BigInteger.ZERO.subTo(this,this)}function bnpFromNumber(a,b,c){if("number"==typeof b)if(2>a)this.fromInt(1);else for(this.fromNumber(a,c),this.testBit(a-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(BigInteger.ONE.shiftLeft(a-1),this);else{var d=new Array,e=7&a;d.length=(a>>3)+1,b.nextBytes(d),e>0?d[0]&=(1<0)for(d>d)!=(this.s&this.DM)>>d&&(b[e++]=c|this.s<=0;)8>d?(c=(this[a]&(1<>(d+=this.DB-8)):(c=this[a]>>(d-=8)&255,0>=d&&(d+=this.DB,--a)),0!=(128&c)&&(c|=-256),0==e&&(128&this.s)!=(128&c)&&++e,(e>0||c!=this.s)&&(b[e++]=c);return b}function bnEquals(a){return 0==this.compareTo(a)}function bnMin(a){return this.compareTo(a)<0?this:a}function bnMax(a){return this.compareTo(a)>0?this:a}function bnpBitwiseTo(a,b,c){var d,e,f=Math.min(a.t,this.t);for(d=0;f>d;++d)c[d]=b(this[d],a[d]);if(a.ta?this.rShiftTo(-a,b):this.lShiftTo(a,b),b}function bnShiftRight(a){var b=nbi();return 0>a?this.lShiftTo(-a,b):this.rShiftTo(a,b),b}function lbit(a){if(0==a)return-1;var b=0;return 0==(65535&a)&&(a>>=16,b+=16),0==(255&a)&&(a>>=8,b+=8),0==(15&a)&&(a>>=4,b+=4),0==(3&a)&&(a>>=2,b+=2),0==(1&a)&&++b,b}function bnGetLowestSetBit(){for(var a=0;a=this.t?0!=this.s:0!=(this[b]&1<c;)d+=this[c]+a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t>=this.DB;d+=this.s}else{for(d+=this.s;c>=this.DB;d+=a.s}b.s=0>d?-1:0,d>0?b[c++]=d:-1>d&&(b[c++]=this.DV+d),b.t=c,b.clamp()}function bnAdd(a){var b=nbi();return this.addTo(a,b),b}function bnSubtract(a){var b=nbi();return this.subTo(a,b),b}function bnMultiply(a){var b=nbi();return this.multiplyTo(a,b),b}function bnSquare(){var a=nbi();return this.squareTo(a),a}function bnDivide(a){var b=nbi();return this.divRemTo(a,b,null),b}function bnRemainder(a){var b=nbi();return this.divRemTo(a,null,b),b}function bnDivideAndRemainder(a){var b=nbi(),c=nbi();return this.divRemTo(a,b,c),new Array(b,c)}function bnpDMultiply(a){this[this.t]=this.am(0,a-1,this,0,0,this.t),++this.t,this.clamp()}function bnpDAddOffset(a,b){if(0!=a){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function NullExp(){}function nNop(a){return a}function nMulTo(a,b,c){a.multiplyTo(b,c)}function nSqrTo(a,b){a.squareTo(b)}function bnPow(a){return this.exp(a,new NullExp)}function bnpMultiplyLowerTo(a,b,c){var d=Math.min(this.t+a.t,b);for(c.s=0,c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;e>d;++d)c[d+this.t]=this.am(0,a[d],c,d,0,this.t);for(e=Math.min(a.t,b);e>d;++d)this.am(0,a[d],c,d,0,b-d);c.clamp()}function bnpMultiplyUpperTo(a,b,c){--b;var d=c.t=this.t+a.t-b;for(c.s=0;--d>=0;)c[d]=0;for(d=Math.max(b-this.t,0);d2*this.m.t)return a.mod(this.m);if(a.compareTo(this.m)<0)return a;var b=nbi();return a.copyTo(b),this.reduce(b),b}function barrettRevert(a){return a}function barrettReduce(a){for(a.drShiftTo(this.m.t-1,this.r2),a.t>this.m.t+1&&(a.t=this.m.t+1,a.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function barrettSqrTo(a,b){a.squareTo(b),this.reduce(b)}function barrettMulTo(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function bnModPow(a,b){var c,d,e=a.bitLength(),f=nbv(1);if(0>=e)return f;c=18>e?1:48>e?3:144>e?4:768>e?5:6,d=8>e?new Classic(b):b.isEven()?new Barrett(b):new Montgomery(b);var g=new Array,h=3,i=c-1,j=(1<1){var k=nbi();for(d.sqrTo(g[1],k);j>=h;)g[h]=nbi(),d.mulTo(k,g[h-2],g[h]),h+=2}var l,m,n=a.t-1,o=!0,p=nbi();for(e=nbits(a[n])-1;n>=0;){for(e>=i?l=a[n]>>e-i&j:(l=(a[n]&(1<0&&(l|=a[n-1]>>this.DB+e-i)),h=c;0==(1&l);)l>>=1,--h;if((e-=h)<0&&(e+=this.DB,--n),o)g[l].copyTo(f),o=!1;else{for(;h>1;)d.sqrTo(f,p),d.sqrTo(p,f),h-=2;h>0?d.sqrTo(f,p):(m=f,f=p,p=m),d.mulTo(p,g[l],f)}for(;n>=0&&0==(a[n]&1<f)return b;for(f>e&&(f=e),f>0&&(b.rShiftTo(f,b),c.rShiftTo(f,c));b.signum()>0;)(e=b.getLowestSetBit())>0&&b.rShiftTo(e,b),(e=c.getLowestSetBit())>0&&c.rShiftTo(e,c),b.compareTo(c)>=0?(b.subTo(c,b),b.rShiftTo(1,b)):(c.subTo(b,c),c.rShiftTo(1,c));return f>0&&c.lShiftTo(f,c),c}function bnpModInt(a){if(0>=a)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(0==b)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}function bnModInverse(a){var b=a.isEven();if(this.isEven()&&b||0==a.signum())return BigInteger.ZERO;for(var c=a.clone(),d=this.clone(),e=nbv(1),f=nbv(0),g=nbv(0),h=nbv(1);0!=c.signum();){for(;c.isEven();)c.rShiftTo(1,c),b?(e.isEven()&&f.isEven()||(e.addTo(this,e),f.subTo(a,f)),e.rShiftTo(1,e)):f.isEven()||f.subTo(a,f),f.rShiftTo(1,f);for(;d.isEven();)d.rShiftTo(1,d),b?(g.isEven()&&h.isEven()||(g.addTo(this,g),h.subTo(a,h)),g.rShiftTo(1,g)):h.isEven()||h.subTo(a,h),h.rShiftTo(1,h);c.compareTo(d)>=0?(c.subTo(d,c),b&&e.subTo(g,e),f.subTo(h,f)):(d.subTo(c,d),b&&g.subTo(e,g),h.subTo(f,h))}return 0!=d.compareTo(BigInteger.ONE)?BigInteger.ZERO:h.compareTo(a)>=0?h.subtract(a):h.signum()<0?(h.addTo(a,h),h.signum()<0?h.add(a):h):h}function bnIsProbablePrime(a){var b,c=this.abs();if(1==c.t&&c[0]<=lowprimes[lowprimes.length-1]){for(b=0;bd;)d*=lowprimes[e++];for(d=c.modInt(d);e>b;)if(d%lowprimes[b++]==0)return!1}return c.millerRabin(a)}function bnpMillerRabin(a){var b=this.subtract(BigInteger.ONE),c=b.getLowestSetBit();if(0>=c)return!1;var d=b.shiftRight(c);a=a+1>>1,a>lowprimes.length&&(a=lowprimes.length);for(var e=nbi(),f=0;a>f;++f){e.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);var g=e.modPow(d,this);if(0!=g.compareTo(BigInteger.ONE)&&0!=g.compareTo(b)){for(var h=1;h++b;++b)this.S[b]=b;for(c=0,b=0;256>b;++b)c=c+this.S[b]+a[b%a.length]&255,d=this.S[b],this.S[b]=this.S[c],this.S[c]=d;this.i=0,this.j=0}function ARC4next(){var a;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,a=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=a,this.S[a+this.S[this.i]&255]}function prng_newstate(){return new Arcfour}function rng_get_byte(){if(null==rng_state){for(rng_state=prng_newstate();rng_psize>rng_pptr;){var a=Math.floor(65536*Math.random());rng_pool[rng_pptr++]=255&a}for(rng_state.init(rng_pool),rng_pptr=0;rng_pptra?"0"+a.toString(16):a.toString(16)}function pkcs1pad2(a,b){if(b=0&&b>0;){var e=a.charCodeAt(d--);128>e?c[--b]=e:e>127&&2048>e?(c[--b]=63&e|128,c[--b]=e>>6|192):(c[--b]=63&e|128,c[--b]=e>>6&63|128,c[--b]=e>>12|224)}c[--b]=0;for(var f=new SecureRandom,g=new Array;b>2;){for(g[0]=0;0==g[0];)f.nextBytes(g);c[--b]=g[0]}return c[--b]=2,c[--b]=0,new BigInteger(c)}function RSAKey(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function RSASetPublic(a,b){null!=a&&null!=b&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16)):console.error("Invalid RSA public key")}function RSADoPublic(a){return a.modPowInt(this.e,this.n)}function RSAEncrypt(a){var b=pkcs1pad2(a,this.n.bitLength()+7>>3);if(null==b)return null;var c=this.doPublic(b);if(null==c)return null;var d=c.toString(16);return 0==(1&d.length)?d:"0"+d}function pkcs1unpad2(a,b){for(var c=a.toByteArray(),d=0;d=c.length)return null;for(var e="";++df?e+=String.fromCharCode(f):f>191&&224>f?(e+=String.fromCharCode((31&f)<<6|63&c[d+1]),++d):(e+=String.fromCharCode((15&f)<<12|(63&c[d+1])<<6|63&c[d+2]),d+=2)}return e}function RSASetPrivate(a,b,c){null!=a&&null!=b&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16),this.d=parseBigInt(c,16)):console.error("Invalid RSA private key")}function RSASetPrivateEx(a,b,c,d,e,f,g,h){null!=a&&null!=b&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16),this.d=parseBigInt(c,16),this.p=parseBigInt(d,16),this.q=parseBigInt(e,16),this.dmp1=parseBigInt(f,16),this.dmq1=parseBigInt(g,16),this.coeff=parseBigInt(h,16)):console.error("Invalid RSA private key")}function RSAGenerate(a,b){var c=new SecureRandom,d=a>>1;this.e=parseInt(b,16);for(var e=new BigInteger(b,16);;){for(;this.p=new BigInteger(a-d,1,c),0!=this.p.subtract(BigInteger.ONE).gcd(e).compareTo(BigInteger.ONE)||!this.p.isProbablePrime(10););for(;this.q=new BigInteger(d,1,c),0!=this.q.subtract(BigInteger.ONE).gcd(e).compareTo(BigInteger.ONE)||!this.q.isProbablePrime(10););if(this.p.compareTo(this.q)<=0){var f=this.p;this.p=this.q,this.q=f}var g=this.p.subtract(BigInteger.ONE),h=this.q.subtract(BigInteger.ONE),i=g.multiply(h);if(0==i.gcd(e).compareTo(BigInteger.ONE)){this.n=this.p.multiply(this.q),this.d=e.modInverse(i),this.dmp1=this.d.mod(g),this.dmq1=this.d.mod(h),this.coeff=this.q.modInverse(this.p);break}}}function RSADoPrivate(a){if(null==this.p||null==this.q)return a.modPow(this.d,this.n);for(var b=a.mod(this.p).modPow(this.dmp1,this.p),c=a.mod(this.q).modPow(this.dmq1,this.q);b.compareTo(c)<0;)b=b.add(this.p);return b.subtract(c).multiply(this.coeff).mod(this.p).multiply(this.q).add(c)}function RSADecrypt(a){var b=parseBigInt(a,16),c=this.doPrivate(b);return null==c?null:pkcs1unpad2(c,this.n.bitLength()+7>>3)}function hex2b64(a){var b,c,d="";for(b=0;b+3<=a.length;b+=3)c=parseInt(a.substring(b,b+3),16),d+=b64map.charAt(c>>6)+b64map.charAt(63&c);for(b+1==a.length?(c=parseInt(a.substring(b,b+1),16),d+=b64map.charAt(c<<2)):b+2==a.length&&(c=parseInt(a.substring(b,b+2),16),d+=b64map.charAt(c>>2)+b64map.charAt((3&c)<<4));(3&d.length)>0;)d+=b64pad;return d}function b64tohex(a){var b,c,d="",e=0;for(b=0;b>2),c=3&v,e=1):1==e?(d+=int2char(c<<2|v>>4),c=15&v,e=2):2==e?(d+=int2char(c),d+=int2char(v>>2),c=3&v,e=3):(d+=int2char(c<<2|v>>4),d+=int2char(15&v),e=0));return 1==e&&(d+=int2char(c<<2)),d}function b64toBA(a){var b,c=b64tohex(a),d=new Array;for(b=0;2*b=vv;++vv)BI_RC[rr++]=vv;for(rr="a".charCodeAt(0),vv=10;36>vv;++vv)BI_RC[rr++]=vv;for(rr="A".charCodeAt(0),vv=10;36>vv;++vv)BI_RC[rr++]=vv;Classic.prototype.convert=cConvert,Classic.prototype.revert=cRevert,Classic.prototype.reduce=cReduce,Classic.prototype.mulTo=cMulTo,Classic.prototype.sqrTo=cSqrTo,Montgomery.prototype.convert=montConvert,Montgomery.prototype.revert=montRevert,Montgomery.prototype.reduce=montReduce,Montgomery.prototype.mulTo=montMulTo,Montgomery.prototype.sqrTo=montSqrTo,BigInteger.prototype.copyTo=bnpCopyTo,BigInteger.prototype.fromInt=bnpFromInt,BigInteger.prototype.fromString=bnpFromString,BigInteger.prototype.clamp=bnpClamp,BigInteger.prototype.dlShiftTo=bnpDLShiftTo,BigInteger.prototype.drShiftTo=bnpDRShiftTo,BigInteger.prototype.lShiftTo=bnpLShiftTo,BigInteger.prototype.rShiftTo=bnpRShiftTo,BigInteger.prototype.subTo=bnpSubTo,BigInteger.prototype.multiplyTo=bnpMultiplyTo,BigInteger.prototype.squareTo=bnpSquareTo,BigInteger.prototype.divRemTo=bnpDivRemTo,BigInteger.prototype.invDigit=bnpInvDigit,BigInteger.prototype.isEven=bnpIsEven,BigInteger.prototype.exp=bnpExp,BigInteger.prototype.toString=bnToString,BigInteger.prototype.negate=bnNegate,BigInteger.prototype.abs=bnAbs,BigInteger.prototype.compareTo=bnCompareTo,BigInteger.prototype.bitLength=bnBitLength,BigInteger.prototype.mod=bnMod,BigInteger.prototype.modPowInt=bnModPowInt,BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=nMulTo,NullExp.prototype.sqrTo=nSqrTo,Barrett.prototype.convert=barrettConvert,Barrett.prototype.revert=barrettRevert,Barrett.prototype.reduce=barrettReduce,Barrett.prototype.mulTo=barrettMulTo,Barrett.prototype.sqrTo=barrettSqrTo;var lowprimes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],lplim=(1<<26)/lowprimes[lowprimes.length-1];BigInteger.prototype.chunkSize=bnpChunkSize,BigInteger.prototype.toRadix=bnpToRadix,BigInteger.prototype.fromRadix=bnpFromRadix,BigInteger.prototype.fromNumber=bnpFromNumber,BigInteger.prototype.bitwiseTo=bnpBitwiseTo,BigInteger.prototype.changeBit=bnpChangeBit,BigInteger.prototype.addTo=bnpAddTo,BigInteger.prototype.dMultiply=bnpDMultiply,BigInteger.prototype.dAddOffset=bnpDAddOffset,BigInteger.prototype.multiplyLowerTo=bnpMultiplyLowerTo,BigInteger.prototype.multiplyUpperTo=bnpMultiplyUpperTo,BigInteger.prototype.modInt=bnpModInt,BigInteger.prototype.millerRabin=bnpMillerRabin,BigInteger.prototype.clone=bnClone,BigInteger.prototype.intValue=bnIntValue,BigInteger.prototype.byteValue=bnByteValue,BigInteger.prototype.shortValue=bnShortValue,BigInteger.prototype.signum=bnSigNum,BigInteger.prototype.toByteArray=bnToByteArray,BigInteger.prototype.equals=bnEquals,BigInteger.prototype.min=bnMin,BigInteger.prototype.max=bnMax,BigInteger.prototype.and=bnAnd,BigInteger.prototype.or=bnOr,BigInteger.prototype.xor=bnXor,BigInteger.prototype.andNot=bnAndNot,BigInteger.prototype.not=bnNot,BigInteger.prototype.shiftLeft=bnShiftLeft,BigInteger.prototype.shiftRight=bnShiftRight,BigInteger.prototype.getLowestSetBit=bnGetLowestSetBit,BigInteger.prototype.bitCount=bnBitCount,BigInteger.prototype.testBit=bnTestBit,BigInteger.prototype.setBit=bnSetBit,BigInteger.prototype.clearBit=bnClearBit,BigInteger.prototype.flipBit=bnFlipBit,BigInteger.prototype.add=bnAdd,BigInteger.prototype.subtract=bnSubtract,BigInteger.prototype.multiply=bnMultiply,BigInteger.prototype.divide=bnDivide,BigInteger.prototype.remainder=bnRemainder,BigInteger.prototype.divideAndRemainder=bnDivideAndRemainder,BigInteger.prototype.modPow=bnModPow,BigInteger.prototype.modInverse=bnModInverse,BigInteger.prototype.pow=bnPow,BigInteger.prototype.gcd=bnGCD,BigInteger.prototype.isProbablePrime=bnIsProbablePrime,BigInteger.prototype.square=bnSquare,Arcfour.prototype.init=ARC4init,Arcfour.prototype.next=ARC4next;var rng_psize=256,rng_state,rng_pool,rng_pptr;if(null==rng_pool){rng_pool=new Array,rng_pptr=0;var t;if(window.crypto&&window.crypto.getRandomValues){var z=new Uint32Array(256);for(window.crypto.getRandomValues(z),t=0;t=256||rng_pptr>=rng_psize)return void(window.removeEventListener?window.removeEventListener("mousemove",onMouseMoveListener):window.detachEvent&&window.detachEvent("onmousemove",onMouseMoveListener));this.count+=1;var b=a.x+a.y;rng_pool[rng_pptr++]=255&b};window.addEventListener?window.addEventListener("mousemove",onMouseMoveListener):window.attachEvent&&window.attachEvent("onmousemove",onMouseMoveListener)}SecureRandom.prototype.nextBytes=rng_get_bytes,RSAKey.prototype.doPublic=RSADoPublic,RSAKey.prototype.setPublic=RSASetPublic,RSAKey.prototype.encrypt=RSAEncrypt,RSAKey.prototype.doPrivate=RSADoPrivate,RSAKey.prototype.setPrivate=RSASetPrivate,RSAKey.prototype.setPrivateEx=RSASetPrivateEx,RSAKey.prototype.generate=RSAGenerate,RSAKey.prototype.decrypt=RSADecrypt,function(){var a=function(a,b,c){var d=new SecureRandom,e=a>>1;this.e=parseInt(b,16);var f=new BigInteger(b,16),g=this,h=function(){var b=function(){if(g.p.compareTo(g.q)<=0){var a=g.p;g.p=g.q,g.q=a}var b=g.p.subtract(BigInteger.ONE),d=g.q.subtract(BigInteger.ONE),e=b.multiply(d);0==e.gcd(f).compareTo(BigInteger.ONE)?(g.n=g.p.multiply(g.q),g.d=f.modInverse(e),g.dmp1=g.d.mod(b),g.dmq1=g.d.mod(d),g.coeff=g.q.modInverse(g.p),setTimeout(function(){c()},0)):setTimeout(h,0)},i=function(){g.q=nbi(),g.q.fromNumberAsync(e,1,d,function(){g.q.subtract(BigInteger.ONE).gcda(f,function(a){0==a.compareTo(BigInteger.ONE)&&g.q.isProbablePrime(10)?setTimeout(b,0):setTimeout(i,0)})})},j=function(){g.p=nbi(),g.p.fromNumberAsync(a-e,1,d,function(){g.p.subtract(BigInteger.ONE).gcda(f,function(a){0==a.compareTo(BigInteger.ONE)&&g.p.isProbablePrime(10)?setTimeout(i,0):setTimeout(j,0)})})};setTimeout(j,0)};setTimeout(h,0)};RSAKey.prototype.generateAsync=a;var b=function(a,b){var c=this.s<0?this.negate():this.clone(),d=a.s<0?a.negate():a.clone();if(c.compareTo(d)<0){var e=c;c=d,d=e}var f=c.getLowestSetBit(),g=d.getLowestSetBit();if(0>g)return void b(c);g>f&&(g=f),g>0&&(c.rShiftTo(g,c),d.rShiftTo(g,d));var h=function(){(f=c.getLowestSetBit())>0&&c.rShiftTo(f,c),(f=d.getLowestSetBit())>0&&d.rShiftTo(f,d),c.compareTo(d)>=0?(c.subTo(d,c),c.rShiftTo(1,c)):(d.subTo(c,d),d.rShiftTo(1,d)),c.signum()>0?setTimeout(h,0):(g>0&&d.lShiftTo(g,d),setTimeout(function(){b(d)},0))};setTimeout(h,10)};BigInteger.prototype.gcda=b;var c=function(a,b,c,d){if("number"==typeof b)if(2>a)this.fromInt(1);else{this.fromNumber(a,c),this.testBit(a-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);var e=this,f=function(){e.dAddOffset(2,0),e.bitLength()>a&&e.subTo(BigInteger.ONE.shiftLeft(a-1),e),e.isProbablePrime(b)?setTimeout(function(){d()},0):setTimeout(f,0)};setTimeout(f,0)}else{var g=new Array,h=7&a;g.length=(a>>3)+1,b.nextBytes(g),h>0?g[0]&=(1<f;f++)e+="f";var g=new BigInteger(e,16),h=g.xor(a).add(BigInteger.ONE);b=h.toString(16).replace(/^-/,"")}return b},this.getPEMStringFromHex=function(a,b){var c=CryptoJS.enc.Hex.parse(a),d=CryptoJS.enc.Base64.stringify(c),e=d.replace(/(.{64})/g,"$1\r\n");return e=e.replace(/\r\n$/,""),"-----BEGIN "+b+"-----\r\n"+e+"\r\n-----END "+b+"-----\r\n"}},KJUR.asn1.ASN1Object=function(){var a="";this.getLengthHexFromValue=function(){if("undefined"==typeof this.hV||null==this.hV)throw"this.hV is null or undefined.";if(this.hV.length%2==1)throw"value hex must be even length: n="+a.length+",v="+this.hV;var b=this.hV.length/2,c=b.toString(16);if(c.length%2==1&&(c="0"+c),128>b)return c;var d=c.length/2;if(d>15)throw"ASN.1 length too long to represent by 8x: n = "+b.toString(16);var e=128+d;return e.toString(16)+c},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}},KJUR.asn1.DERAbstractString=function(a){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);this.getString=function(){return this.s},this.setString=function(a){this.hTLV=null,this.isModified=!0,this.s=a,this.hV=stohex(this.s)},this.setStringHex=function(a){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=a},this.getFreshValueHex=function(){return this.hV},"undefined"!=typeof a&&("undefined"!=typeof a.str?this.setString(a.str):"undefined"!=typeof a.hex&&this.setStringHex(a.hex))},JSX.extend(KJUR.asn1.DERAbstractString,KJUR.asn1.ASN1Object),KJUR.asn1.DERAbstractTime=function(){KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);this.localDateToUTC=function(a){utc=a.getTime()+6e4*a.getTimezoneOffset();var b=new Date(utc);return b},this.formatDate=function(a,b){var c=this.zeroPadding,d=this.localDateToUTC(a),e=String(d.getFullYear());"utc"==b&&(e=e.substr(2,2));var f=c(String(d.getMonth()+1),2),g=c(String(d.getDate()),2),h=c(String(d.getHours()),2),i=c(String(d.getMinutes()),2),j=c(String(d.getSeconds()),2);return e+f+g+h+i+j+"Z"},this.zeroPadding=function(a,b){return a.length>=b?a:new Array(b-a.length+1).join("0")+a},this.getString=function(){return this.s},this.setString=function(a){this.hTLV=null,this.isModified=!0,this.s=a,this.hV=stohex(this.s)},this.setByDateValue=function(a,b,c,d,e,f){var g=new Date(Date.UTC(a,b-1,c,d,e,f,0));this.setByDate(g)},this.getFreshValueHex=function(){return this.hV}},JSX.extend(KJUR.asn1.DERAbstractTime,KJUR.asn1.ASN1Object),KJUR.asn1.DERAbstractStructured=function(a){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);this.setByASN1ObjectArray=function(a){this.hTLV=null,this.isModified=!0,this.asn1Array=a},this.appendASN1Object=function(a){this.hTLV=null,this.isModified=!0,this.asn1Array.push(a)},this.asn1Array=new Array,"undefined"!=typeof a&&"undefined"!=typeof a.array&&(this.asn1Array=a.array)},JSX.extend(KJUR.asn1.DERAbstractStructured,KJUR.asn1.ASN1Object),KJUR.asn1.DERBoolean=function(){KJUR.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"},JSX.extend(KJUR.asn1.DERBoolean,KJUR.asn1.ASN1Object),KJUR.asn1.DERInteger=function(a){KJUR.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(a){this.hTLV=null,this.isModified=!0,this.hV=KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(a)},this.setByInteger=function(a){var b=new BigInteger(String(a),10);this.setByBigInteger(b)},this.setValueHex=function(a){this.hV=a},this.getFreshValueHex=function(){return this.hV},"undefined"!=typeof a&&("undefined"!=typeof a.bigint?this.setByBigInteger(a.bigint):"undefined"!=typeof a["int"]?this.setByInteger(a["int"]):"undefined"!=typeof a.hex&&this.setValueHex(a.hex))},JSX.extend(KJUR.asn1.DERInteger,KJUR.asn1.ASN1Object),KJUR.asn1.DERBitString=function(a){KJUR.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(a){this.hTLV=null,this.isModified=!0,this.hV=a},this.setUnusedBitsAndHexValue=function(a,b){if(0>a||a>7)throw"unused bits shall be from 0 to 7: u = "+a;var c="0"+a;this.hTLV=null,this.isModified=!0,this.hV=c+b},this.setByBinaryString=function(a){a=a.replace(/0+$/,"");var b=8-a.length%8;8==b&&(b=0);for(var c=0;b>=c;c++)a+="0";for(var d="",c=0;cc;c++)b[c]=!1;return b},this.getFreshValueHex=function(){return this.hV},"undefined"!=typeof a&&("undefined"!=typeof a.hex?this.setHexValueIncludingUnusedBits(a.hex):"undefined"!=typeof a.bin?this.setByBinaryString(a.bin):"undefined"!=typeof a.array&&this.setByBooleanArray(a.array))},JSX.extend(KJUR.asn1.DERBitString,KJUR.asn1.ASN1Object),KJUR.asn1.DEROctetString=function(a){KJUR.asn1.DEROctetString.superclass.constructor.call(this,a),this.hT="04"},JSX.extend(KJUR.asn1.DEROctetString,KJUR.asn1.DERAbstractString),KJUR.asn1.DERNull=function(){KJUR.asn1.DERNull.superclass.constructor.call(this),this.hT="05",this.hTLV="0500"},JSX.extend(KJUR.asn1.DERNull,KJUR.asn1.ASN1Object),KJUR.asn1.DERObjectIdentifier=function(a){var b=function(a){var b=a.toString(16);return 1==b.length&&(b="0"+b),b},c=function(a){var c="",d=new BigInteger(a,10),e=d.toString(2),f=7-e.length%7;7==f&&(f=0);for(var g="",h=0;f>h;h++)g+="0";e=g+e;for(var h=0;hd;++d)b[e.charAt(d)]=d;for(e=e.toLowerCase(),d=10;16>d;++d)b[e.charAt(d)]=d;for(d=0;d=2?(g[g.length]=h,h=0,i=0):h<<=4}}if(i)throw"Hex encoding incomplete: 4 bits missing";return g},window.Hex=c}(),function(a){"use strict";var b,c={};c.decode=function(c){var d;if(b===a){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f="= \f\n\r \u2028\u2029";for(b=[],d=0;64>d;++d)b[e.charAt(d)]=d;for(d=0;d=4?(g[g.length]=h>>16,g[g.length]=h>>8&255,g[g.length]=255&h,h=0,i=0):h<<=6}}switch(i){case 1:throw"Base64 encoding incomplete: at least 2 bits missing";case 2:g[g.length]=h>>10;break;case 3:g[g.length]=h>>16,g[g.length]=h>>8&255}return g},c.re=/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,c.unarmor=function(a){var b=c.re.exec(a);if(b)if(b[1])a=b[1];else{if(!b[2])throw"RegExp out of sync";a=b[2]}return c.decode(a)},window.Base64=c}(),function(a){"use strict";function b(a,c){a instanceof b?(this.enc=a.enc,this.pos=a.pos):(this.enc=a,this.pos=c)}function c(a,b,c,d,e){this.stream=a,this.header=b,this.length=c,this.tag=d,this.sub=e}var d=100,e="…",f={tag:function(a,b){var c=document.createElement(a);return c.className=b,c},text:function(a){return document.createTextNode(a)}};b.prototype.get=function(b){if(b===a&&(b=this.pos++),b>=this.enc.length)throw"Requesting byte offset "+b+" on a stream of length "+this.enc.length;return this.enc[b]},b.prototype.hexDigits="0123456789ABCDEF",b.prototype.hexByte=function(a){return this.hexDigits.charAt(a>>4&15)+this.hexDigits.charAt(15&a)},b.prototype.hexDump=function(a,b,c){for(var d="",e=a;b>e;++e)if(d+=this.hexByte(this.get(e)),c!==!0)switch(15&e){case 7:d+=" ";break;case 15:d+="\n";break;default:d+=" "}return d},b.prototype.parseStringISO=function(a,b){for(var c="",d=a;b>d;++d)c+=String.fromCharCode(this.get(d));return c},b.prototype.parseStringUTF=function(a,b){for(var c="",d=a;b>d;){var e=this.get(d++);c+=String.fromCharCode(128>e?e:e>191&&224>e?(31&e)<<6|63&this.get(d++):(15&e)<<12|(63&this.get(d++))<<6|63&this.get(d++))}return c},b.prototype.parseStringBMP=function(a,b){for(var c="",d=a;b>d;d+=2){var e=this.get(d),f=this.get(d+1);c+=String.fromCharCode((e<<8)+f)}return c},b.prototype.reTime=/^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,b.prototype.parseTime=function(a,b){var c=this.parseStringISO(a,b),d=this.reTime.exec(c);return d?(c=d[1]+"-"+d[2]+"-"+d[3]+" "+d[4],d[5]&&(c+=":"+d[5],d[6]&&(c+=":"+d[6],d[7]&&(c+="."+d[7]))),d[8]&&(c+=" UTC","Z"!=d[8]&&(c+=d[8],d[9]&&(c+=":"+d[9]))),c):"Unrecognized time: "+c},b.prototype.parseInteger=function(a,b){var c=b-a;if(c>4){c<<=3;var d=this.get(a);if(0===d)c-=8;else for(;128>d;)d<<=1,--c;return"("+c+" bit)"}for(var e=0,f=a;b>f;++f)e=e<<8|this.get(f);return e},b.prototype.parseBitString=function(a,b){var c=this.get(a),d=(b-a-1<<3)-c,e="("+d+" bit)";if(20>=d){var f=c;e+=" ";for(var g=b-1;g>a;--g){for(var h=this.get(g),i=f;8>i;++i)e+=h>>i&1?"1":"0";f=0}}return e},b.prototype.parseOctetString=function(a,b){var c=b-a,f="("+c+" byte) ";c>d&&(b=a+d);for(var g=a;b>g;++g)f+=this.hexByte(this.get(g));return c>d&&(f+=e),f},b.prototype.parseOID=function(a,b){for(var c="",d=0,e=0,f=a;b>f;++f){var g=this.get(f);if(d=d<<7|127&g,e+=7,!(128&g)){if(""===c){var h=80>d?40>d?0:1:2;c=h+"."+(d-40*h)}else c+="."+(e>=31?"bigint":d);d=e=0}}return c},c.prototype.typeName=function(){if(this.tag===a)return"unknown";var b=this.tag>>6,c=(this.tag>>5&1,31&this.tag);switch(b){case 0:switch(c){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+c.toString(16)}case 1:return"Application_"+c.toString(16);case 2:return"["+c+"]";case 3:return"Private_"+c.toString(16)}},c.prototype.reSeemsASCII=/^[ -~]+$/,c.prototype.content=function(){if(this.tag===a)return null;var b=this.tag>>6,c=31&this.tag,f=this.posContent(),g=Math.abs(this.length);if(0!==b){if(null!==this.sub)return"("+this.sub.length+" elem)";var h=this.stream.parseStringISO(f,f+Math.min(g,d));return this.reSeemsASCII.test(h)?h.substring(0,2*d)+(h.length>2*d?e:""):this.stream.parseOctetString(f,f+g)}switch(c){case 1:return 0===this.stream.get(f)?"false":"true";case 2:return this.stream.parseInteger(f,f+g);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(f,f+g);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(f,f+g);case 6:return this.stream.parseOID(f,f+g);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(f,f+g);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(f,f+g);case 30:return this.stream.parseStringBMP(f,f+g);case 23:case 24:return this.stream.parseTime(f,f+g)}return null},c.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null===this.sub?"null":this.sub.length)+"]"},c.prototype.print=function(b){if(b===a&&(b=""),document.writeln(b+this),null!==this.sub){b+=" ";for(var c=0,d=this.sub.length;d>c;++c)this.sub[c].print(b)}},c.prototype.toPrettyString=function(b){b===a&&(b="");var c=b+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(c+="+"),c+=this.length,32&this.tag?c+=" (constructed)":3!=this.tag&&4!=this.tag||null===this.sub||(c+=" (encapsulates)"),c+="\n",null!==this.sub){b+=" ";for(var d=0,e=this.sub.length;e>d;++d)c+=this.sub[d].toPrettyString(b)}return c},c.prototype.toDOM=function(){var a=f.tag("div","node");a.asn1=this;var b=f.tag("div","head"),c=this.typeName().replace(/_/g," ");b.innerHTML=c;var d=this.content();if(null!==d){d=String(d).replace(/",c+="Length: "+this.header+"+",c+=this.length>=0?this.length:-this.length+" (undefined)",32&this.tag?c+="
            (constructed)":3!=this.tag&&4!=this.tag||null===this.sub||(c+="
            (encapsulates)"),null!==d&&(c+="
            Value:
            "+d+"","object"==typeof oids&&6==this.tag)){var h=oids[d];h&&(h.d&&(c+="
            "+h.d),h.c&&(c+="
            "+h.c),h.w&&(c+="
            (warning!)"))}g.innerHTML=c,a.appendChild(g);var i=f.tag("div","sub");if(null!==this.sub)for(var j=0,k=this.sub.length;k>j;++j)i.appendChild(this.sub[j].toDOM());return a.appendChild(i),b.onclick=function(){a.className="node collapsed"==a.className?"node":"node collapsed"},a},c.prototype.posStart=function(){return this.stream.pos},c.prototype.posContent=function(){return this.stream.pos+this.header},c.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},c.prototype.fakeHover=function(a){this.node.className+=" hover",a&&(this.head.className+=" hover")},c.prototype.fakeOut=function(a){var b=/ ?hover/;this.node.className=this.node.className.replace(b,""),a&&(this.head.className=this.head.className.replace(b,""))},c.prototype.toHexDOM_sub=function(a,b,c,d,e){if(!(d>=e)){var g=f.tag("span",b);g.appendChild(f.text(c.hexDump(d,e))),a.appendChild(g)}},c.prototype.toHexDOM=function(b){var c=f.tag("span","hex");if(b===a&&(b=c),this.head.hexNode=c,this.head.onmouseover=function(){this.hexNode.className="hexCurrent"},this.head.onmouseout=function(){this.hexNode.className="hex"},c.asn1=this,c.onmouseover=function(){var a=!b.selected;a&&(b.selected=this.asn1,this.className="hexCurrent"),this.asn1.fakeHover(a)},c.onmouseout=function(){var a=b.selected==this.asn1;this.asn1.fakeOut(a),a&&(b.selected=null,this.className="hex")},this.toHexDOM_sub(c,"tag",this.stream,this.posStart(),this.posStart()+1),this.toHexDOM_sub(c,this.length>=0?"dlen":"ulen",this.stream,this.posStart()+1,this.posContent()),null===this.sub)c.appendChild(f.text(this.stream.hexDump(this.posContent(),this.posEnd())));else if(this.sub.length>0){var d=this.sub[0],e=this.sub[this.sub.length-1];this.toHexDOM_sub(c,"intro",this.stream,this.posContent(),d.posStart());for(var g=0,h=this.sub.length;h>g;++g)c.appendChild(this.sub[g].toHexDOM(b));this.toHexDOM_sub(c,"outro",this.stream,e.posEnd(),this.posEnd())}return c},c.prototype.toHexString=function(){return this.stream.hexDump(this.posStart(),this.posEnd(),!0)},c.decodeLength=function(a){var b=a.get(),c=127&b;if(c==b)return c;if(c>3)throw"Length over 24 bits not supported at position "+(a.pos-1);if(0===c)return-1;b=0;for(var d=0;c>d;++d)b=b<<8|a.get();return b},c.hasContent=function(a,d,e){if(32&a)return!0;if(3>a||a>4)return!1;var f=new b(e);3==a&&f.get();var g=f.get();if(g>>6&1)return!1;try{var h=c.decodeLength(f);return f.pos-e.pos+h==d}catch(i){return!1}},c.decode=function(a){a instanceof b||(a=new b(a,0));var d=new b(a),e=a.get(),f=c.decodeLength(a),g=a.pos-d.pos,h=null;if(c.hasContent(e,f,a)){var i=a.pos;if(3==e&&a.get(),h=[],f>=0){for(var j=i+f;a.posd;++d){var f=new b(a[d].value,0),g=c.decodeLength(f);g!=a[d].expected&&document.write("In test["+d+"] expected "+a[d].expected+" got "+g+"\n")}},window.ASN1=c}(),ASN1.prototype.getHexStringValue=function(){var a=this.toHexString(),b=2*this.header,c=2*this.length;return a.substr(b,c)},RSAKey.prototype.parseKey=function(a){try{var b=0,c=0,d=/^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/,e=d.test(a)?Hex.decode(a):Base64.unarmor(a),f=ASN1.decode(e);if(3===f.sub.length&&(f=f.sub[2].sub[0]),9===f.sub.length){b=f.sub[1].getHexStringValue(),this.n=parseBigInt(b,16),c=f.sub[2].getHexStringValue(),this.e=parseInt(c,16);var g=f.sub[3].getHexStringValue();this.d=parseBigInt(g,16);var h=f.sub[4].getHexStringValue();this.p=parseBigInt(h,16);var i=f.sub[5].getHexStringValue();this.q=parseBigInt(i,16);var j=f.sub[6].getHexStringValue();this.dmp1=parseBigInt(j,16);var k=f.sub[7].getHexStringValue();this.dmq1=parseBigInt(k,16);var l=f.sub[8].getHexStringValue();this.coeff=parseBigInt(l,16)}else{if(2!==f.sub.length)return!1;var m=f.sub[1],n=m.sub[0];b=n.sub[0].getHexStringValue(),this.n=parseBigInt(b,16),c=n.sub[1].getHexStringValue(),this.e=parseInt(c,16)}return!0}catch(o){return!1}},RSAKey.prototype.getPrivateBaseKey=function(){var a={array:[new KJUR.asn1.DERInteger({"int":0}),new KJUR.asn1.DERInteger({bigint:this.n}),new KJUR.asn1.DERInteger({"int":this.e}),new KJUR.asn1.DERInteger({bigint:this.d}),new KJUR.asn1.DERInteger({bigint:this.p}),new KJUR.asn1.DERInteger({bigint:this.q}),new KJUR.asn1.DERInteger({bigint:this.dmp1}),new KJUR.asn1.DERInteger({bigint:this.dmq1}),new KJUR.asn1.DERInteger({bigint:this.coeff})]},b=new KJUR.asn1.DERSequence(a);return b.getEncodedHex()},RSAKey.prototype.getPrivateBaseKeyB64=function(){return hex2b64(this.getPrivateBaseKey())},RSAKey.prototype.getPublicBaseKey=function(){var a={array:[new KJUR.asn1.DERObjectIdentifier({oid:"1.2.840.113549.1.1.1"}),new KJUR.asn1.DERNull]},b=new KJUR.asn1.DERSequence(a);a={array:[new KJUR.asn1.DERInteger({bigint:this.n}),new KJUR.asn1.DERInteger({"int":this.e})]};var c=new KJUR.asn1.DERSequence(a);a={hex:"00"+c.getEncodedHex()};var d=new KJUR.asn1.DERBitString(a);a={array:[b,d]};var e=new KJUR.asn1.DERSequence(a);return e.getEncodedHex()},RSAKey.prototype.getPublicBaseKeyB64=function(){return hex2b64(this.getPublicBaseKey())},RSAKey.prototype.wordwrap=function(a,b){if(b=b||64,!a)return a;var c="(.{1,"+b+"})( +|$\n?)|(.{1,"+b+"})";return a.match(RegExp(c,"g")).join("\n")},RSAKey.prototype.getPrivateKey=function(){var a="-----BEGIN RSA PRIVATE KEY-----\n";return a+=this.wordwrap(this.getPrivateBaseKeyB64())+"\n",a+="-----END RSA PRIVATE KEY-----"},RSAKey.prototype.getPublicKey=function(){var a="-----BEGIN PUBLIC KEY-----\n";return a+=this.wordwrap(this.getPublicBaseKeyB64())+"\n",a+="-----END PUBLIC KEY-----"},RSAKey.prototype.hasPublicKeyProperty=function(a){return a=a||{},a.hasOwnProperty("n")&&a.hasOwnProperty("e")},RSAKey.prototype.hasPrivateKeyProperty=function(a){return a=a||{},a.hasOwnProperty("n")&&a.hasOwnProperty("e")&&a.hasOwnProperty("d")&&a.hasOwnProperty("p")&&a.hasOwnProperty("q")&&a.hasOwnProperty("dmp1")&&a.hasOwnProperty("dmq1")&&a.hasOwnProperty("coeff")},RSAKey.prototype.parsePropertiesFrom=function(a){this.n=a.n,this.e=a.e,a.hasOwnProperty("d")&&(this.d=a.d,this.p=a.p,this.q=a.q,this.dmp1=a.dmp1,this.dmq1=a.dmq1,this.coeff=a.coeff)};var JSEncryptRSAKey=function(a){RSAKey.call(this),a&&("string"==typeof a?this.parseKey(a):(this.hasPrivateKeyProperty(a)||this.hasPublicKeyProperty(a))&&this.parsePropertiesFrom(a))};JSEncryptRSAKey.prototype=new RSAKey,JSEncryptRSAKey.prototype.constructor=JSEncryptRSAKey;var JSEncrypt=function(a){a=a||{},this.default_key_size=parseInt(a.default_key_size)||1024,this.default_public_exponent=a.default_public_exponent||"010001",this.log=a.log||!1,this.key=null};JSEncrypt.prototype.setKey=function(a){this.log&&this.key&&console.warn("A key was already set, overriding existing."),this.key=new JSEncryptRSAKey(a)},JSEncrypt.prototype.setPrivateKey=function(a){this.setKey(a)},JSEncrypt.prototype.setPublicKey=function(a){this.setKey(a)},JSEncrypt.prototype.decrypt=function(a){try{return this.getKey().decrypt(b64tohex(a))}catch(b){return!1}},JSEncrypt.prototype.encrypt=function(a){try{return hex2b64(this.getKey().encrypt(a))}catch(b){return!1}},JSEncrypt.prototype.getKey=function(a){if(!this.key){if(this.key=new JSEncryptRSAKey,a&&"[object Function]"==={}.toString.call(a))return void this.key.generateAsync(this.default_key_size,this.default_public_exponent,a);this.key.generate(this.default_key_size,this.default_public_exponent)}return this.key},JSEncrypt.prototype.getPrivateKey=function(){return this.getKey().getPrivateKey()},JSEncrypt.prototype.getPrivateKeyB64=function(){return this.getKey().getPrivateBaseKeyB64()},JSEncrypt.prototype.getPublicKey=function(){return this.getKey().getPublicKey()},JSEncrypt.prototype.getPublicKeyB64=function(){return this.getKey().getPublicBaseKeyB64()};exports.JSEncrypt = JSEncrypt; +})(JSEncryptExports); +var JSEncrypt = JSEncryptExports.JSEncrypt; \ No newline at end of file diff --git a/js/strings.js.php b/js/strings.js.php new file mode 100644 index 00000000..1922d4c6 --- /dev/null +++ b/js/strings.js.php @@ -0,0 +1,71 @@ +. + * + */ + +$stringsJsLang = array( + 0 => _('Error en la consulta'), + 1 => _('Ha ocurrido un error'), + 2 => _('Sesión finalizada'), + 3 => _('Borrar la cuenta?'), + 4 => _('Borrar el usuario?'), + 5 => _('Guarde la configuración para que sea efectiva'), + 6 => _('Clave Generada'), + 7 => _('Nivel alto'), + 8 => _('Nivel medio'), + 9 => _('Nivel bajo'), + 10 => _('Nivel muy alto'), + 11 => _('Utilizar al menos 8 caracteres'), + 12 => _('Borrar elemento?'), + 13 => _('Página no encontrada'), + 14 => _('Archivo no soportado para visualizar'), + 15 => _('Eliminar archivo?'), + 16 => _('Su navegador no soporta subir archivos con HTML5'), + 17 => _('Demasiados archivos'), + 18 => sprintf(_('No es posible guardar el archivo.%sTamaño máximo:'), '
            '), + 19 => _('Extensión no permitida'), + 20 => _('Vaciar el registro de eventos?'), + 21 => _('Seleccionar Grupo'), + 22 => _('Seleccionar Usuario'), + 23 => _('Seleccionar Perfil'), + 24 => _('Seleccionar Cliente'), + 25 => _('Seleccionar Categoría'), + 26 => _('Sin resultados'), + 27 => _('Opciones de clave'), + 28 => _('Generar clave aleatoria'), + 29 => _('Complejidad'), + 30 => _('Reset'), + 31 => _('Nivel de fortaleza de la clave'), + 32 => _('Mostrar Clave'), + 33 => _('Copiar Usuario'), + 34 => _('Copiar Clave'), + 35 => _('Incluir Números'), + 36 => _('Incluir Mayúsculas'), + 37 => _('Incluir Símbolos'), + 38 => _('Longitud'), + 39 => _('Seleccionar Acción'), + 40 => _('SI'), + 41 => _('NO'), + 43 => _('Aceptar'), + 44 => _('Cancelar') +); \ No newline at end of file diff --git a/js/zxcvbn-async.js b/js/zxcvbn-async.js new file mode 100644 index 00000000..836ea64d --- /dev/null +++ b/js/zxcvbn-async.js @@ -0,0 +1,30 @@ +// cross-browser asynchronous script loading for zxcvbn. +// adapted from http://friendlybit.com/js/lazy-loading-asyncronous-javascript/ + +// You probably don't need this script; see README for bower/npm/requirejs setup +// instructions. + +// If you do want to manually include zxcvbn, you'll likely only need to change +// ZXCVBN_SRC to point to the correct relative path from your index.html. +// (this script assumes index.html and zxcvbn.js sit next to each other.) + +(function() { + var ZXCVBN_SRC = 'js/zxcvbn.js'; + + var async_load = function() { + var first, s; + s = document.createElement('script'); + s.src = ZXCVBN_SRC; + s.type = 'text/javascript'; + s.async = true; + first = document.getElementsByTagName('script')[0]; + return first.parentNode.insertBefore(s, first); + }; + + if (window.attachEvent != null) { + window.attachEvent('onload', async_load); + } else { + window.addEventListener('load', async_load, false); + } + +}).call(this); diff --git a/js/zxcvbn.js b/js/zxcvbn.js new file mode 100644 index 00000000..bedf5d5c --- /dev/null +++ b/js/zxcvbn.js @@ -0,0 +1,48 @@ +(function(){var n;n={empty:function(b){var a,c;c=[];for(a in b)c.push(a);return 0===c.length},extend:function(b,a){return b.push.apply(b,a)},translate:function(b,a){var c,e,g,d,f;d=b.split("");f=[];e=0;for(g=d.length;ed;c=0<=d?++g:--g){e=f=j=c;for(k=d;j<=k?fk;e=j<=k?++f:--f)if(i.slice(c,+e+1||9E9)in a)m=i.slice(c,+e+1||9E9),h=a[m],l.push({pattern:"dictionary",i:c,j:e,token:b.slice(c,+e+1||9E9),matched_word:m,rank:h})}return l},build_ranked_dict:function(b){var a,c,e,g,d;g={};a=1;c=0;for(e=b.length;cq;f=0<=q?++m:--m)if(s[f][0]===h){d=f;break}-1===d?(d=s.concat([[h,g]]),l.push(d)):(f=s.slice(0),f.splice(d,1),f.push([h,g]),l.push(s),l.push(f))}}o=c(l);return e(t)}};e(d);m=[];d=0;for(i=o.length;d "+a);r.sub_display=v.join(", ");k.push(h)}}}return k},spatial_match:function(b){var a,c,e,g;e=[];g=q.GRAPHS;for(c in g)a=g[c], +this.extend(e,this.spatial_match_helper(b,a,c));return e},spatial_match_helper:function(b,a,c){var e,g,d,f,i,h,j,k,l,m,o,p,n;o=[];for(h=0;h=a;1<=a?++c:--c)e.push(b);return e.join("")},findall:function(b,a){var c,e;for(e=[];;){c=b.match(a);if(!c)break;c.i=c.index;c.j=c.index+c[0].length-1;e.push(c);b=b.replace(c[0],this.repeat(" ",c[0].length))}return e},digits_rx:/\d{3,}/,digits_match:function(b){var a,c,e,g,d,f;d=this.findall(b,this.digits_rx);f=[];e=0;for(g=d.length;e=e.length&&(c.push({daymonth:e.slice(2), +year:e.slice(0,2),i:f,j:i}),c.push({daymonth:e.slice(0,a-2),year:e.slice(a-2),i:f,j:i}));6<=e.length&&(c.push({daymonth:e.slice(4),year:e.slice(0,4),i:f,j:i}),c.push({daymonth:e.slice(0,a-4),year:e.slice(a-4),i:f,j:i}));e=[];l=0;for(k=c.length;l=a&&12>=b&&(a=[a,b],b=a[0],a=a[1]);return 31=c)?[!1,[]]:[!0,[b,a,c]]}};var x;x={nCk:function(b,a){var c,e,g;if(a>b)return 0;if(0===a)return 1;for(c=e=g=1;1<=a?e<=a:e>=a;c= +1<=a?++e:--e)g*=b,g/=c,b-=1;return g},lg:function(b){return Math.log(b)/Math.log(2)},minimum_entropy_match_sequence:function(b,a){var c,e,g,d,f,i,h,j,k,l,m;e=this.calc_bruteforce_cardinality(b);m=[];c=[];d=i=0;for(l=b.length;0<=l?il;d=0<=l?++i:--i){m[d]=(m[d-1]||0)+this.lg(e);c[d]=null;j=0;for(h=a.length;jb.year?this.lg(100*this.NUM_DAYS*this.NUM_MONTHS):this.lg(this.NUM_DAYS*this.NUM_MONTHS*this.NUM_YEARS);b.separator&&(a+=2);return a},spatial_entropy:function(b){var a,c,e,g,d,f,i,h,j,k;"qwerty"===(e=b.graph)||"dvorak"===e?(j=q.KEYBOARD_STARTING_POSITIONS,c=q.KEYBOARD_AVERAGE_DEGREE):(j=q.KEYPAD_STARTING_POSITIONS, +c=q.KEYPAD_AVERAGE_DEGREE);i=0;a=b.token.length;k=b.turns;for(e=d=2;2<=a?d<=a:d>=a;e=2<=a?++d:--d){h=Math.min(k,e-1);for(g=f=1;1<=h?f<=h:f>=h;g=1<=h?++f:--f)i+=this.nCk(e-1,g-1)*j*Math.pow(c,g)}c=this.lg(i);if(b.shifted_count){a=b.shifted_count;b=b.token.length-b.shifted_count;e=g=i=0;for(d=Math.min(a,b);0<=d?g<=d:g>=d;e=0<=d?++g:--g)i+=this.nCk(a+b,e);c+=this.lg(i)}return c},dictionary_entropy:function(b){b.base_entropy=this.lg(b.rank);b.uppercase_entropy=this.extra_uppercase_entropy(b);b.l33t_entropy= +this.extra_l33t_entropy(b);return b.base_entropy+b.uppercase_entropy+b.l33t_entropy},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,extra_uppercase_entropy:function(b){var a,c,e,g,d,f,i;i=b.token;if(i.match(this.ALL_LOWER))return 0;e=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER];b=0;for(a=e.length;b=f;e=0<=f?++g:--g)d+=this.nCk(a+b,e);return this.lg(d)},extra_l33t_entropy:function(b){var a,c,e,g,d,f,i,h,j,k;if(!b.l33t)return 0;f=0;i=b.sub;for(j in i){k=i[j];a=function(){var a,d,c,f;c=b.token.split("");f=[];a=0;for(d=c.length;a=h;g=0<=h?++d:--d)f+=this.nCk(c+a,g)}return this.lg(f)||1},calc_bruteforce_cardinality:function(b){var a,c,e,g,d,f,i,h;d=[!1,!1,!1,!1,!1];g=d[0];h=d[1];c=d[2];i=d[3];d=d[4];f=b.split("");b=0;for(e=f.length;b=a?c=!0:65<=a&&90>=a?h=!0:97<=a&&122>=a?g=!0:127>=a?i=!0:d=!0;b=0;c&&(b+=10);h&&(b+=26);g&&(b+=26);i&&(b+=33);d&&(b+=100);return b},display_time:function(b){return 60> +b?"instant":3600>b?1+Math.ceil(b/60)+" minutes":86400>b?1+Math.ceil(b/3600)+" hours":2678400>b?1+Math.ceil(b/86400)+" days":32140800>b?1+Math.ceil(b/2678400)+" months":321408E4>b?1+Math.ceil(b/32140800)+" years":"centuries"}};var t={"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null, +"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],"0":["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY", +"tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":"lL,pP,[{,'\",/?,.>".split(","),";":"lL,pP,[{,'\",/?,.>".split(","),"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:"sS,eE,rR,fF,cC,xX".split(","),E:"wW,3#,4$,rR,dD,sS".split(","), +F:"dD,rR,tT,gG,vV,cC".split(","),G:"fF,tT,yY,hH,bB,vV".split(","),H:"gG,yY,uU,jJ,nN,bB".split(","),I:"uU,8*,9(,oO,kK,jJ".split(","),J:"hH,uU,iI,kK,mM,nN".split(","),K:"jJ iI oO lL ,< mM".split(" "),L:"kK oO pP ;: .> ,<".split(" "),M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:"iI,9(,0),pP,lL,kK".split(","),P:"oO,0),-_,[{,;:,lL".split(","),Q:[null,"1!","2@","wW","aA",null],R:"eE,4$,5%,tT,fF,dD".split(","),S:"aA,wW,eE,dD,xX,zZ".split(","),T:"rR,5%,6^,yY,gG,fF".split(","),U:"yY,7&,8*,iI,jJ,hH".split(","), +V:["cC","fF","gG","bB",null,null],W:"qQ,2@,3#,eE,sS,aA".split(","),X:["zZ","sS","dD","cC",null,null],Y:"tT,6^,7&,uU,hH,gG".split(","),Z:[null,"aA","sS","xX",null,null],"[":"pP,-_,=+,]},'\",;:".split(","),"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:"sS,eE,rR,fF,cC,xX".split(","), +e:"wW,3#,4$,rR,dD,sS".split(","),f:"dD,rR,tT,gG,vV,cC".split(","),g:"fF,tT,yY,hH,bB,vV".split(","),h:"gG,yY,uU,jJ,nN,bB".split(","),i:"uU,8*,9(,oO,kK,jJ".split(","),j:"hH,uU,iI,kK,mM,nN".split(","),k:"jJ iI oO lL ,< mM".split(" "),l:"kK oO pP ;: .> ,<".split(" "),m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:"iI,9(,0),pP,lL,kK".split(","),p:"oO,0),-_,[{,;:,lL".split(","),q:[null,"1!","2@","wW","aA",null],r:"eE,4$,5%,tT,fF,dD".split(","),s:"aA,wW,eE,dD,xX,zZ".split(","),t:"rR,5%,6^,yY,gG,fF".split(","), +u:"yY,7&,8*,iI,jJ,hH".split(","),v:["cC","fF","gG","bB",null,null],w:"qQ,2@,3#,eE,sS,aA".split(","),x:["zZ","sS","dD","cC",null,null],y:"tT,6^,7&,uU,hH,gG".split(","),z:[null,"aA","sS","xX",null,null],"{":"pP,-_,=+,]},'\",;:".split(","),"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},y={"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$", +null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":"'\",2@,3#,.>,oO,aA".split(","),"-":["sS","/?","=+",null,null,"zZ"],".":",< 3# 4$ pP eE oO".split(" "),"/":"lL,[{,]},=+,-_,sS".split(","),"0":["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null, +null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":"'\",2@,3#,.>,oO,aA".split(","),"=":["/?","]}",null,"\\|",null,"-_"],">":",< 3# 4$ pP eE oO".split(" "),"?":"lL,[{,]},=+,-_,sS".split(","),"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO", +";:",null],B:["xX","dD","hH","mM",null,null],C:"gG,8*,9(,rR,tT,hH".split(","),D:"iI,fF,gG,hH,bB,xX".split(","),E:"oO,.>,pP,uU,jJ,qQ".split(","),F:"yY,6^,7&,gG,dD,iI".split(","),G:"fF,7&,8*,cC,hH,dD".split(","),H:"dD,gG,cC,tT,mM,bB".split(","),I:"uU,yY,fF,dD,xX,kK".split(","),J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:"rR,0),[{,/?,sS,nN".split(","),M:["bB","hH","tT","wW",null,null],N:"tT,rR,lL,sS,vV,wW".split(","),O:"aA ,< .> eE qQ ;:".split(" "),P:".>,4$,5%,yY,uU,eE".split(","), +Q:[";:","oO","eE","jJ",null,null],R:"cC,9(,0),lL,nN,tT".split(","),S:"nN,lL,/?,-_,zZ,vV".split(","),T:"hH,cC,rR,nN,wW,mM".split(","),U:"eE,pP,yY,iI,kK,jJ".split(","),V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:"pP,5%,6^,fF,iI,uU".split(","),Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null, +null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:"gG,8*,9(,rR,tT,hH".split(","),d:"iI,fF,gG,hH,bB,xX".split(","),e:"oO,.>,pP,uU,jJ,qQ".split(","),f:"yY,6^,7&,gG,dD,iI".split(","),g:"fF,7&,8*,cC,hH,dD".split(","),h:"dD,gG,cC,tT,mM,bB".split(","),i:"uU,yY,fF,dD,xX,kK".split(","),j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:"rR,0),[{,/?,sS,nN".split(","),m:["bB","hH","tT","wW",null,null],n:"tT,rR,lL,sS,vV,wW".split(","), +o:"aA ,< .> eE qQ ;:".split(" "),p:".>,4$,5%,yY,uU,eE".split(","),q:[";:","oO","eE","jJ",null,null],r:"cC,9(,0),lL,nN,tT".split(","),s:"nN,lL,/?,-_,zZ,vV".split(","),t:"hH,cC,rR,nN,wW,mM".split(","),u:"eE,pP,yY,iI,kK,jJ".split(","),v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:"pP,5%,6^,fF,iI,uU".split(","),z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+", +"/?"],"~":[null,null,null,"1!",null,null]},w={"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],"0":[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:"4,7,8,9,6,3,2,1".split(","),6:["5","8","9","+", +null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},z={"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],"0":[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"], +4:[null,null,"7","8","5","2","1",null],5:"4,7,8,9,6,3,2,1".split(","),6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:"8,=,/,*,-,+,6,5".split(","),"=":[null,null,null,null,"/","9","8","7"]},A="password,123456,12345678,1234,qwerty,12345,dragon,pussy,baseball,football,letmein,monkey,696969,abc123,mustang,shadow,master,111111,2000,jordan,superman,harley,1234567,fuckme,hunter,fuckyou,trustno1,ranger,buster,tigger,soccer,fuck,batman,test,pass,killer,hockey,charlie,love,sunshine,asshole,6969,pepper,access,123456789,654321,maggie,starwars,silver,dallas,yankees,123123,666666,hello,orange,biteme,freedom,computer,sexy,thunder,ginger,hammer,summer,corvette,fucker,austin,1111,merlin,121212,golfer,cheese,princess,chelsea,diamond,yellow,bigdog,secret,asdfgh,sparky,cowboy,camaro,matrix,falcon,iloveyou,guitar,purple,scooter,phoenix,aaaaaa,tigers,porsche,mickey,maverick,cookie,nascar,peanut,131313,money,horny,samantha,panties,steelers,snoopy,boomer,whatever,iceman,smokey,gateway,dakota,cowboys,eagles,chicken,dick,black,zxcvbn,ferrari,knight,hardcore,compaq,coffee,booboo,bitch,bulldog,xxxxxx,welcome,player,ncc1701,wizard,scooby,junior,internet,bigdick,brandy,tennis,blowjob,banana,monster,spider,lakers,rabbit,enter,mercedes,fender,yamaha,diablo,boston,tiger,marine,chicago,rangers,gandalf,winter,bigtits,barney,raiders,porn,badboy,blowme,spanky,bigdaddy,chester,london,midnight,blue,fishing,000000,hannah,slayer,11111111,sexsex,redsox,thx1138,asdf,marlboro,panther,zxcvbnm,arsenal,qazwsx,mother,7777777,jasper,winner,golden,butthead,viking,iwantu,angels,prince,cameron,girls,madison,hooters,startrek,captain,maddog,jasmine,butter,booger,golf,rocket,theman,liverpoo,flower,forever,muffin,turtle,sophie,redskins,toyota,sierra,winston,giants,packers,newyork,casper,bubba,112233,lovers,mountain,united,driver,helpme,fucking,pookie,lucky,maxwell,8675309,bear,suckit,gators,5150,222222,shithead,fuckoff,jaguar,hotdog,tits,gemini,lover,xxxxxxxx,777777,canada,florida,88888888,rosebud,metallic,doctor,trouble,success,stupid,tomcat,warrior,peaches,apples,fish,qwertyui,magic,buddy,dolphins,rainbow,gunner,987654,freddy,alexis,braves,cock,2112,1212,cocacola,xavier,dolphin,testing,bond007,member,voodoo,7777,samson,apollo,fire,tester,beavis,voyager,porno,rush2112,beer,apple,scorpio,skippy,sydney,red123,power,beaver,star,jackass,flyers,boobs,232323,zzzzzz,scorpion,doggie,legend,ou812,yankee,blazer,runner,birdie,bitches,555555,topgun,asdfasdf,heaven,viper,animal,2222,bigboy,4444,private,godzilla,lifehack,phantom,rock,august,sammy,cool,platinum,jake,bronco,heka6w2,copper,cumshot,garfield,willow,cunt,slut,69696969,kitten,super,jordan23,eagle1,shelby,america,11111,free,123321,chevy,bullshit,broncos,horney,surfer,nissan,999999,saturn,airborne,elephant,shit,action,adidas,qwert,1313,explorer,police,christin,december,wolf,sweet,therock,online,dickhead,brooklyn,cricket,racing,penis,0000,teens,redwings,dreams,michigan,hentai,magnum,87654321,donkey,trinity,digital,333333,cartman,guinness,123abc,speedy,buffalo,kitty,pimpin,eagle,einstein,nirvana,vampire,xxxx,playboy,pumpkin,snowball,test123,sucker,mexico,beatles,fantasy,celtic,cherry,cassie,888888,sniper,genesis,hotrod,reddog,alexande,college,jester,passw0rd,bigcock,lasvegas,slipknot,3333,death,1q2w3e,eclipse,1q2w3e4r,drummer,montana,music,aaaa,carolina,colorado,creative,hello1,goober,friday,bollocks,scotty,abcdef,bubbles,hawaii,fluffy,horses,thumper,5555,pussies,darkness,asdfghjk,boobies,buddha,sandman,naughty,honda,azerty,6666,shorty,money1,beach,loveme,4321,simple,poohbear,444444,badass,destiny,vikings,lizard,assman,nintendo,123qwe,november,xxxxx,october,leather,bastard,101010,extreme,password1,pussy1,lacrosse,hotmail,spooky,amateur,alaska,badger,paradise,maryjane,poop,mozart,video,vagina,spitfire,cherokee,cougar,420420,horse,enigma,raider,brazil,blonde,55555,dude,drowssap,lovely,1qaz2wsx,booty,snickers,nipples,diesel,rocks,eminem,westside,suzuki,passion,hummer,ladies,alpha,suckme,147147,pirate,semperfi,jupiter,redrum,freeuser,wanker,stinky,ducati,paris,babygirl,windows,spirit,pantera,monday,patches,brutus,smooth,penguin,marley,forest,cream,212121,flash,maximus,nipple,vision,pokemon,champion,fireman,indian,softball,picard,system,cobra,enjoy,lucky1,boogie,marines,security,dirty,admin,wildcats,pimp,dancer,hardon,fucked,abcd1234,abcdefg,ironman,wolverin,freepass,bigred,squirt,justice,hobbes,pearljam,mercury,domino,9999,rascal,hitman,mistress,bbbbbb,peekaboo,naked,budlight,electric,sluts,stargate,saints,bondage,bigman,zombie,swimming,duke,qwerty1,babes,scotland,disney,rooster,mookie,swordfis,hunting,blink182,8888,samsung,bubba1,whore,general,passport,aaaaaaaa,erotic,liberty,arizona,abcd,newport,skipper,rolltide,balls,happy1,galore,christ,weasel,242424,wombat,digger,classic,bulldogs,poopoo,accord,popcorn,turkey,bunny,mouse,007007,titanic,liverpool,dreamer,everton,chevelle,psycho,nemesis,pontiac,connor,eatme,lickme,cumming,ireland,spiderma,patriots,goblue,devils,empire,asdfg,cardinal,shaggy,froggy,qwer,kawasaki,kodiak,phpbb,54321,chopper,hooker,whynot,lesbian,snake,teen,ncc1701d,qqqqqq,airplane,britney,avalon,sugar,sublime,wildcat,raven,scarface,elizabet,123654,trucks,wolfpack,pervert,redhead,american,bambam,woody,shaved,snowman,tiger1,chicks,raptor,1969,stingray,shooter,france,stars,madmax,sports,789456,simpsons,lights,chronic,hahaha,packard,hendrix,service,spring,srinivas,spike,252525,bigmac,suck,single,popeye,tattoo,texas,bullet,taurus,sailor,wolves,panthers,japan,strike,pussycat,chris1,loverboy,berlin,sticky,tarheels,russia,wolfgang,testtest,mature,catch22,juice,michael1,nigger,159753,alpha1,trooper,hawkeye,freaky,dodgers,pakistan,machine,pyramid,vegeta,katana,moose,tinker,coyote,infinity,pepsi,letmein1,bang,hercules,james1,tickle,outlaw,browns,billybob,pickle,test1,sucks,pavilion,changeme,caesar,prelude,darkside,bowling,wutang,sunset,alabama,danger,zeppelin,pppppp,2001,ping,darkstar,madonna,qwe123,bigone,casino,charlie1,mmmmmm,integra,wrangler,apache,tweety,qwerty12,bobafett,transam,2323,seattle,ssssss,openup,pandora,pussys,trucker,indigo,storm,malibu,weed,review,babydoll,doggy,dilbert,pegasus,joker,catfish,flipper,fuckit,detroit,cheyenne,bruins,smoke,marino,fetish,xfiles,stinger,pizza,babe,stealth,manutd,gundam,cessna,longhorn,presario,mnbvcxz,wicked,mustang1,victory,21122112,awesome,athena,q1w2e3r4,holiday,knicks,redneck,12341234,gizmo,scully,dragon1,devildog,triumph,bluebird,shotgun,peewee,angel1,metallica,madman,impala,lennon,omega,access14,enterpri,search,smitty,blizzard,unicorn,tight,asdf1234,trigger,truck,beauty,thailand,1234567890,cadillac,castle,bobcat,buddy1,sunny,stones,asian,butt,loveyou,hellfire,hotsex,indiana,panzer,lonewolf,trumpet,colors,blaster,12121212,fireball,precious,jungle,atlanta,gold,corona,polaris,timber,theone,baller,chipper,skyline,dragons,dogs,licker,engineer,kong,pencil,basketba,hornet,barbie,wetpussy,indians,redman,foobar,travel,morpheus,target,141414,hotstuff,photos,rocky1,fuck_inside,dollar,turbo,design,hottie,202020,blondes,4128,lestat,avatar,goforit,random,abgrtyu,jjjjjj,cancer,q1w2e3,smiley,express,virgin,zipper,wrinkle1,babylon,consumer,monkey1,serenity,samurai,99999999,bigboobs,skeeter,joejoe,master1,aaaaa,chocolat,christia,stephani,tang,1234qwer,98765432,sexual,maxima,77777777,buckeye,highland,seminole,reaper,bassman,nugget,lucifer,airforce,nasty,warlock,2121,dodge,chrissy,burger,snatch,pink,gang,maddie,huskers,piglet,photo,dodger,paladin,chubby,buckeyes,hamlet,abcdefgh,bigfoot,sunday,manson,goldfish,garden,deftones,icecream,blondie,spartan,charger,stormy,juventus,galaxy,escort,zxcvb,planet,blues,david1,ncc1701e,1966,51505150,cavalier,gambit,ripper,oicu812,nylons,aardvark,whiskey,bing,plastic,anal,babylon5,loser,racecar,insane,yankees1,mememe,hansolo,chiefs,fredfred,freak,frog,salmon,concrete,zxcv,shamrock,atlantis,wordpass,rommel,1010,predator,massive,cats,sammy1,mister,stud,marathon,rubber,ding,trunks,desire,montreal,justme,faster,irish,1999,jessica1,alpine,diamonds,00000,swinger,shan,stallion,pitbull,letmein2,ming,shadow1,clitoris,fuckers,jackoff,bluesky,sundance,renegade,hollywoo,151515,wolfman,soldier,ling,goddess,manager,sweety,titans,fang,ficken,niners,bubble,hello123,ibanez,sweetpea,stocking,323232,tornado,content,aragorn,trojan,christop,rockstar,geronimo,pascal,crimson,google,fatcat,lovelove,cunts,stimpy,finger,wheels,viper1,latin,greenday,987654321,creampie,hiphop,snapper,funtime,duck,trombone,adult,cookies,mulder,westham,latino,jeep,ravens,drizzt,madness,energy,kinky,314159,slick,rocker,55555555,mongoose,speed,dddddd,catdog,cheng,ghost,gogogo,tottenha,curious,butterfl,mission,january,shark,techno,lancer,lalala,chichi,orion,trixie,delta,bobbob,bomber,kang,1968,spunky,liquid,beagle,granny,network,kkkkkk,1973,biggie,beetle,teacher,toronto,anakin,genius,cocks,dang,karate,snakes,bangkok,fuckyou2,pacific,daytona,infantry,skywalke,sailing,raistlin,vanhalen,huang,blackie,tarzan,strider,sherlock,gong,dietcoke,ultimate,shai,sprite,ting,artist,chai,chao,devil,python,ninja,ytrewq,superfly,456789,tian,jing,jesus1,freedom1,drpepper,chou,hobbit,shen,nolimit,mylove,biscuit,yahoo,shasta,sex4me,smoker,pebbles,pics,philly,tong,tintin,lesbians,cactus,frank1,tttttt,chun,danni,emerald,showme,pirates,lian,dogg,xiao,xian,tazman,tanker,toshiba,gotcha,rang,keng,jazz,bigguy,yuan,tomtom,chaos,fossil,racerx,creamy,bobo,musicman,warcraft,blade,shuang,shun,lick,jian,microsoft,rong,feng,getsome,quality,1977,beng,wwwwww,yoyoyo,zhang,seng,harder,qazxsw,qian,cong,chuan,deng,nang,boeing,keeper,western,1963,subaru,sheng,thuglife,teng,jiong,miao,mang,maniac,pussie,a1b2c3,zhou,zhuang,xing,stonecol,spyder,liang,jiang,memphis,ceng,magic1,logitech,chuang,sesame,shao,poison,titty,kuan,kuai,mian,guan,hamster,guai,ferret,geng,duan,pang,maiden,quan,velvet,nong,neng,nookie,buttons,bian,bingo,biao,zhong,zeng,zhun,ying,zong,xuan,zang,0.0.000,suan,shei,shui,sharks,shang,shua,peng,pian,piao,liao,meng,miami,reng,guang,cang,ruan,diao,luan,qing,chui,chuo,cuan,nuan,ning,heng,huan,kansas,muscle,weng,1passwor,bluemoon,zhui,zhua,xiang,zheng,zhen,zhei,zhao,zhan,yomama,zhai,zhuo,zuan,tarheel,shou,shuo,tiao,leng,kuang,jiao,13579,basket,qiao,qiong,qiang,chuai,nian,niao,niang,huai,22222222,zhuan,zhuai,shuan,shuai,stardust,jumper,66666666,charlott,qwertz,bones,waterloo,2002,11223344,oldman,trains,vertigo,246810,black1,swallow,smiles,standard,alexandr,parrot,user,1976,surfing,pioneer,apple1,asdasd,auburn,hannibal,frontier,panama,welcome1,vette,blue22,shemale,111222,baggins,groovy,global,181818,1979,blades,spanking,byteme,lobster,dawg,japanese,1970,1964,2424,polo,coco,deedee,mikey,1972,171717,1701,strip,jersey,green1,capital,putter,vader,seven7,banshee,grendel,dicks,hidden,iloveu,1980,ledzep,147258,female,bugger,buffett,molson,2020,wookie,sprint,jericho,102030,ranger1,trebor,deepthroat,bonehead,molly1,mirage,models,1984,2468,showtime,squirrel,pentium,anime,gator,powder,twister,connect,neptune,engine,eatshit,mustangs,woody1,shogun,septembe,pooh,jimbo,russian,sabine,voyeur,2525,363636,camel,germany,giant,qqqq,nudist,bone,sleepy,tequila,fighter,obiwan,makaveli,vacation,walnut,1974,ladybug,cantona,ccbill,satan,rusty1,passwor1,columbia,kissme,motorola,william1,1967,zzzz,skater,smut,matthew1,valley,coolio,dagger,boner,bull,horndog,jason1,penguins,rescue,griffey,8j4ye3uz,californ,champs,qwertyuiop,portland,colt45,xxxxxxx,xanadu,tacoma,carpet,gggggg,safety,palace,italia,picturs,picasso,thongs,tempest,asd123,hairy,foxtrot,nimrod,hotboy,343434,1111111,asdfghjkl,goose,overlord,stranger,454545,shaolin,sooners,socrates,spiderman,peanuts,13131313,andrew1,filthy,ohyeah,africa,intrepid,pickles,assass,fright,potato,hhhhhh,kingdom,weezer,424242,pepsi1,throat,looker,puppy,butch,sweets,megadeth,analsex,nymets,ddddddd,bigballs,oakland,oooooo,qweasd,chucky,carrot,chargers,discover,dookie,condor,horny1,sunrise,sinner,jojo,megapass,martini,assfuck,ffffff,mushroom,jamaica,7654321,77777,cccccc,gizmodo,tractor,mypass,hongkong,1975,blue123,pissing,thomas1,redred,basketball,satan666,dublin,bollox,kingkong,1971,22222,272727,sexx,bbbb,grizzly,passat,defiant,bowler,knickers,monitor,wisdom,slappy,thor,letsgo,robert1,brownie,098765,playtime,lightnin,atomic,goku,llllll,qwaszx,cosmos,bosco,knights,beast,slapshot,assword,frosty,dumbass,mallard,dddd,159357,titleist,aussie,golfing,doobie,loveit,werewolf,vipers,1965,blabla,surf,sucking,tardis,thegame,legion,rebels,sarah1,onelove,loulou,toto,blackcat,0007,tacobell,soccer1,jedi,method,poopie,boob,breast,kittycat,belly,pikachu,thunder1,thankyou,celtics,frogger,scoobydo,sabbath,coltrane,budman,jackal,zzzzz,licking,gopher,geheim,lonestar,primus,pooper,newpass,brasil,heather1,husker,element,moomoo,beefcake,zzzzzzzz,shitty,smokin,jjjj,anthony1,anubis,backup,gorilla,fuckface,lowrider,punkrock,traffic,delta1,amazon,fatass,dodgeram,dingdong,qqqqqqqq,breasts,boots,honda1,spidey,poker,temp,johnjohn,147852,asshole1,dogdog,tricky,crusader,syracuse,spankme,speaker,meridian,amadeus,harley1,falcons,turkey50,kenwood,keyboard,ilovesex,1978,shazam,shalom,lickit,jimbob,roller,fatman,sandiego,magnus,cooldude,clover,mobile,plumber,texas1,tool,topper,mariners,rebel,caliente,celica,oxford,osiris,orgasm,punkin,porsche9,tuesday,breeze,bossman,kangaroo,latinas,astros,scruffy,qwertyu,hearts,jammer,java,1122,goodtime,chelsea1,freckles,flyboy,doodle,nebraska,bootie,kicker,webmaster,vulcan,191919,blueeyes,321321,farside,rugby,director,pussy69,power1,hershey,hermes,monopoly,birdman,blessed,blackjac,southern,peterpan,thumbs,fuckyou1,rrrrrr,a1b2c3d4,coke,bohica,elvis1,blacky,sentinel,snake1,richard1,1234abcd,guardian,candyman,fisting,scarlet,dildo,pancho,mandingo,lucky7,condom,munchkin,billyboy,summer1,sword,skiing,site,sony,thong,rootbeer,assassin,fffff,fitness,durango,postal,achilles,kisses,warriors,plymouth,topdog,asterix,hallo,cameltoe,fuckfuck,eeeeee,sithlord,theking,avenger,backdoor,chevrole,trance,cosworth,houses,homers,eternity,kingpin,verbatim,incubus,1961,blond,zaphod,shiloh,spurs,mighty,aliens,charly,dogman,omega1,printer,aggies,deadhead,bitch1,stone55,pineappl,thekid,rockets,camels,formula,oracle,pussey,porkchop,abcde,clancy,mystic,inferno,blackdog,steve1,alfa,grumpy,flames,puffy,proxy,valhalla,unreal,herbie,engage,yyyyyy,010101,pistol,celeb,gggg,portugal,a12345,newbie,mmmm,1qazxsw2,zorro,writer,stripper,sebastia,spread,links,metal,1221,565656,funfun,trojans,cyber,hurrican,moneys,1x2zkg8w,zeus,tomato,lion,atlantic,usa123,trans,aaaaaaa,homerun,hyperion,kevin1,blacks,44444444,skittles,fart,gangbang,fubar,sailboat,oilers,buster1,hithere,immortal,sticks,pilot,lexmark,jerkoff,maryland,cheers,possum,cutter,muppet,swordfish,sport,sonic,peter1,jethro,rockon,asdfghj,pass123,pornos,ncc1701a,bootys,buttman,bonjour,1960,bears,362436,spartans,tinman,threesom,maxmax,1414,bbbbb,camelot,chewie,gogo,fusion,saint,dilligaf,nopass,hustler,hunter1,whitey,beast1,yesyes,spank,smudge,pinkfloy,patriot,lespaul,hammers,formula1,sausage,scooter1,orioles,oscar1,colombia,cramps,exotic,iguana,suckers,slave,topcat,lancelot,magelan,racer,crunch,british,steph,456123,skinny,seeking,rockhard,filter,freaks,sakura,pacman,poontang,newlife,homer1,klingon,watcher,walleye,tasty,sinatra,starship,steel,starbuck,poncho,amber1,gonzo,catherin,candle,firefly,goblin,scotch,diver,usmc,huskies,kentucky,kitkat,beckham,bicycle,yourmom,studio,33333333,splash,jimmy1,12344321,sapphire,mailman,raiders1,ddddd,excalibu,illini,imperial,lansing,maxx,gothic,golfball,facial,front242,macdaddy,qwer1234,vectra,cowboys1,crazy1,dannyboy,aquarius,franky,ffff,sassy,pppp,pppppppp,prodigy,noodle,eatpussy,vortex,wanking,billy1,siemens,phillies,groups,chevy1,cccc,gggggggg,doughboy,dracula,nurses,loco,lollipop,utopia,chrono,cooler,nevada,wibble,summit,1225,capone,fugazi,panda,qazwsxed,puppies,triton,9876,nnnnnn,momoney,iforgot,wolfie,studly,hamburg,81fukkc,741852,catman,china,gagging,scott1,oregon,qweqwe,crazybab,daniel1,cutlass,holes,mothers,music1,walrus,1957,bigtime,xtreme,simba,ssss,rookie,bathing,rotten,maestro,turbo1,99999,butthole,hhhh,yoda,shania,phish,thecat,rightnow,baddog,greatone,gateway1,abstr,napster,brian1,bogart,hitler,wildfire,jackson1,1981,beaner,yoyo,0.0.0.000,super1,select,snuggles,slutty,phoenix1,technics,toon,raven1,rayray,123789,1066,albion,greens,gesperrt,brucelee,hehehe,kelly1,mojo,1998,bikini,woofwoof,yyyy,strap,sites,central,f**k,nyjets,punisher,username,vanilla,twisted,bunghole,viagra,veritas,pony,titts,labtec,jenny1,masterbate,mayhem,redbull,govols,gremlin,505050,gmoney,rovers,diamond1,trident,abnormal,deskjet,cuddles,bristol,milano,vh5150,jarhead,1982,bigbird,bizkit,sixers,slider,star69,starfish,penetration,tommy1,john316,caligula,flicks,films,railroad,cosmo,cthulhu,br0d3r,bearbear,swedish,spawn,patrick1,reds,anarchy,groove,fuckher,oooo,airbus,cobra1,clips,delete,duster,kitty1,mouse1,monkeys,jazzman,1919,262626,swinging,stroke,stocks,sting,pippen,labrador,jordan1,justdoit,meatball,females,vector,cooter,defender,nike,bubbas,bonkers,kahuna,wildman,4121,sirius,static,piercing,terror,teenage,leelee,microsof,mechanic,robotech,rated,chaser,salsero,macross,quantum,tsunami,daddy1,cruise,newpass6,nudes,hellyeah,1959,zaq12wsx,striker,spice,spectrum,smegma,thumb,jjjjjjjj,mellow,cancun,cartoon,sabres,samiam,oranges,oklahoma,lust,denali,nude,noodles,brest,hooter,mmmmmmmm,warthog,blueblue,zappa,wolverine,sniffing,jjjjj,calico,freee,rover,pooter,closeup,bonsai,emily1,keystone,iiii,1955,yzerman,theboss,tolkien,megaman,rasta,bbbbbbbb,hal9000,goofy,gringo,gofish,gizmo1,samsam,scuba,onlyme,tttttttt,corrado,clown,clapton,bulls,jayhawk,wwww,sharky,seeker,ssssssss,pillow,thesims,lighter,lkjhgf,melissa1,marcius2,guiness,gymnast,casey1,goalie,godsmack,lolo,rangers1,poppy,clemson,clipper,deeznuts,holly1,eeee,kingston,yosemite,sucked,sex123,sexy69,pic\\'s,tommyboy,masterbating,gretzky,happyday,frisco,orchid,orange1,manchest,aberdeen,ne1469,boxing,korn,intercourse,161616,1985,ziggy,supersta,stoney,amature,babyboy,bcfields,goliath,hack,hardrock,frodo,scout,scrappy,qazqaz,tracker,active,craving,commando,cohiba,cyclone,bubba69,katie1,mpegs,vsegda,irish1,sexy1,smelly,squerting,lions,jokers,jojojo,meathead,ashley1,groucho,cheetah,champ,firefox,gandalf1,packer,love69,tyler1,typhoon,tundra,bobby1,kenworth,village,volley,wolf359,0420,000007,swimmer,skydive,smokes,peugeot,pompey,legolas,redhot,rodman,redalert,grapes,4runner,carrera,floppy,ou8122,quattro,cloud9,davids,nofear,busty,homemade,mmmmm,whisper,vermont,webmaste,wives,insertion,jayjay,philips,topher,temptress,midget,ripken,havefun,canon,celebrity,ghetto,ragnarok,usnavy,conover,cruiser,dalshe,nicole1,buzzard,hottest,kingfish,misfit,milfnew,warlord,wassup,bigsexy,blackhaw,zippy,tights,kungfu,labia,meatloaf,area51,batman1,bananas,636363,ggggg,paradox,queens,adults,aikido,cigars,hoosier,eeyore,moose1,warez,interacial,streaming,313131,pertinant,pool6123,mayday,animated,banker,baddest,gordon24,ccccc,fantasies,aisan,deadman,homepage,ejaculation,whocares,iscool,jamesbon,1956,1pussy,womam,sweden,skidoo,spock,sssss,pepper1,pinhead,micron,allsop,amsterda,gunnar,666999,february,fletch,george1,sapper,sasha1,luckydog,lover1,magick,popopo,ultima,cypress,businessbabe,brandon1,vulva,vvvv,jabroni,bigbear,yummy,010203,searay,secret1,sinbad,sexxxx,soleil,software,piccolo,thirteen,leopard,legacy,memorex,redwing,rasputin,134679,anfield,greenbay,catcat,feather,scanner,pa55word,contortionist,danzig,daisy1,hores,exodus,iiiiii,1001,subway,snapple,sneakers,sonyfuck,picks,poodle,test1234,llll,junebug,marker,mellon,ronaldo,roadkill,amanda1,asdfjkl,beaches,great1,cheerleaers,doitnow,ozzy,boxster,brighton,housewifes,kkkk,mnbvcx,moocow,vides,1717,bigmoney,blonds,1000,storys,stereo,4545,420247,seductive,sexygirl,lesbean,justin1,124578,cabbage,canadian,gangbanged,dodge1,dimas,malaka,puss,probes,coolman,nacked,hotpussy,erotica,kool,implants,intruder,bigass,zenith,woohoo,womans,tango,pisces,laguna,maxell,andyod22,barcelon,chainsaw,chickens,flash1,orgasms,magicman,profit,pusyy,pothead,coconut,chuckie,clevelan,builder,budweise,hotshot,horizon,experienced,mondeo,wifes,1962,stumpy,smiths,slacker,pitchers,passwords,laptop,allmine,alliance,bbbbbbb,asscock,halflife,88888,chacha,saratoga,sandy1,doogie,qwert40,transexual,close-up,ib6ub9,volvo,jacob1,iiiii,beastie,sunnyday,stoned,sonics,starfire,snapon,pictuers,pepe,testing1,tiberius,lisalisa,lesbain,litle,retard,ripple,austin1,badgirl,golfgolf,flounder,royals,dragoon,dickie,passwor,majestic,poppop,trailers,nokia,bobobo,br549,minime,mikemike,whitesox,1954,3232,353535,seamus,solo,sluttey,pictere,titten,lback,1024,goodluck,fingerig,gallaries,goat,passme,oasis,lockerroom,logan1,rainman,treasure,custom,cyclops,nipper,bucket,homepage-,hhhhh,momsuck,indain,2345,beerbeer,bimmer,stunner,456456,tootsie,testerer,reefer,1012,harcore,gollum,545454,chico,caveman,fordf150,fishes,gaymen,saleen,doodoo,pa55w0rd,presto,qqqqq,cigar,bogey,helloo,dutch,kamikaze,wasser,vietnam,visa,japanees,0123,swords,slapper,peach,masterbaiting,redwood,1005,ametuer,chiks,fucing,sadie1,panasoni,mamas,rambo,unknown,absolut,dallas1,housewife,keywest,kipper,18436572,1515,zxczxc,303030,shaman,terrapin,masturbation,mick,redfish,1492,angus,goirish,hardcock,forfun,galary,freeporn,duchess,olivier,lotus,pornographic,ramses,purdue,traveler,crave,brando,enter1,killme,moneyman,welder,windsor,wifey,indon,yyyyy,taylor1,4417,picher,pickup,thumbnils,johnboy,jets,ameteur,amateurs,apollo13,hambone,goldwing,5050,sally1,doghouse,padres,pounding,quest,truelove,underdog,trader,climber,bolitas,hohoho,beanie,beretta,wrestlin,stroker,sexyman,jewels,johannes,mets,rhino,bdsm,balloons,grils,happy123,flamingo,route66,devo,outkast,paintbal,magpie,llllllll,twilight,critter,cupcake,nickel,bullseye,knickerless,videoes,binladen,xerxes,slim,slinky,pinky,thanatos,meister,menace,retired,albatros,balloon,goten,5551212,getsdown,donuts,nwo4life,tttt,comet,deer,dddddddd,deeznutz,nasty1,nonono,enterprise,eeeee,misfit99,milkman,vvvvvv,1818,blueboy,bigbutt,tech,toolman,juggalo,jetski,barefoot,50spanks,gobears,scandinavian,cubbies,nitram,kings,bilbo,yumyum,zzzzzzz,stylus,321654,shannon1,server,squash,starman,steeler,phrases,techniques,laser,135790,athens,cbr600,chemical,fester,gangsta,fucku2,droopy,objects,passwd,lllll,manchester,vedder,clit,chunky,darkman,buckshot,buddah,boobed,henti,winter1,bigmike,beta,zidane,talon,slave1,pissoff,thegreat,lexus,matador,readers,armani,goldstar,5656,fmale,fuking,fucku,ggggggg,sauron,diggler,pacers,looser,pounded,premier,triangle,cosmic,depeche,norway,helmet,mustard,misty1,jagger,3x7pxr,silver1,snowboar,penetrating,photoes,lesbens,lindros,roadking,rockford,1357,143143,asasas,goodboy,898989,chicago1,ferrari1,galeries,godfathe,gawker,gargoyle,gangster,rubble,rrrr,onetime,pussyman,pooppoop,trapper,cinder,newcastl,boricua,bunny1,boxer,hotred,hockey1,edward1,moscow,mortgage,bigtit,snoopdog,joshua1,july,1230,assholes,frisky,sanity,divine,dharma,lucky13,akira,butterfly,hotbox,hootie,howdy,earthlink,kiteboy,westwood,1988,blackbir,biggles,wrench,wrestle,slippery,pheonix,penny1,pianoman,thedude,jenn,jonjon,jones1,roadrunn,arrow,azzer,seahawks,diehard,dotcom,tunafish,chivas,cinnamon,clouds,deluxe,northern,boobie,momomo,modles,volume,23232323,bluedog,wwwwwww,zerocool,yousuck,pluto,limewire,joung,awnyce,gonavy,haha,films+pic+galeries,girsl,fuckthis,girfriend,uncencored,a123456,chrisbln,combat,cygnus,cupoi,netscape,hhhhhhhh,eagles1,elite,knockers,1958,tazmania,shonuf,pharmacy,thedog,midway,arsenal1,anaconda,australi,gromit,gotohell,787878,66666,carmex2,camber,gator1,ginger1,fuzzy,seadoo,lovesex,rancid,uuuuuu,911911,bulldog1,heater,monalisa,mmmmmmm,whiteout,virtual,jamie1,japanes,james007,2727,2469,blam,bitchass,zephyr,stiffy,sweet1,southpar,spectre,tigger1,tekken,lakota,lionking,jjjjjjj,megatron,1369,hawaiian,gymnastic,golfer1,gunners,7779311,515151,sanfran,optimus,panther1,love1,maggie1,pudding,aaron1,delphi,niceass,bounce,house1,killer1,momo,musashi,jammin,2003,234567,wp2003wp,submit,sssssss,spikes,sleeper,passwort,kume,meme,medusa,mantis,reebok,1017,artemis,harry1,cafc91,fettish,oceans,oooooooo,mango,ppppp,trainer,uuuu,909090,death1,bullfrog,hokies,holyshit,eeeeeee,jasmine1,&,&,spinner,jockey,babyblue,gooner,474747,cheeks,pass1234,parola,okokok,poseidon,989898,crusher,cubswin,nnnn,kotaku,mittens,whatsup,vvvvv,iomega,insertions,bengals,biit,yellow1,012345,spike1,sowhat,pitures,pecker,theend,hayabusa,hawkeyes,florian,qaz123,usarmy,twinkle,chuckles,hounddog,hover,hothot,europa,kenshin,kojak,mikey1,water1,196969,wraith,zebra,wwwww,33333,simon1,spider1,snuffy,philippe,thunderb,teddy1,marino13,maria1,redline,renault,aloha,handyman,cerberus,gamecock,gobucks,freesex,duffman,ooooo,nuggets,magician,longbow,preacher,porno1,chrysler,contains,dalejr,navy,buffy1,hedgehog,hoosiers,honey1,hott,heyhey,dutchess,everest,wareagle,ihateyou,sunflowe,3434,senators,shag,spoon,sonoma,stalker,poochie,terminal,terefon,maradona,1007,142536,alibaba,america1,bartman,astro,goth,chicken1,cheater,ghost1,passpass,oral,r2d2c3po,civic,cicero,myxworld,kkkkk,missouri,wishbone,infiniti,1a2b3c,1qwerty,wonderboy,shojou,sparky1,smeghead,poiuy,titanium,lantern,jelly,1213,bayern,basset,gsxr750,cattle,fishing1,fullmoon,gilles,dima,obelix,popo,prissy,ramrod,bummer,hotone,dynasty,entry,konyor,missy1,282828,xyz123,426hemi,404040,seinfeld,pingpong,lazarus,marine1,12345a,beamer,babyface,greece,gustav,7007,ccccccc,faggot,foxy,gladiato,duckie,dogfood,packers1,longjohn,radical,tuna,clarinet,danny1,novell,bonbon,kashmir,kiki,mortimer,modelsne,moondog,vladimir,insert,1953,zxc123,supreme,3131,sexxx,softail,poipoi,pong,mars,martin1,rogue,avalanch,audia4,55bgates,cccccccc,came11,figaro,dogboy,dnsadm,dipshit,paradigm,othello,operator,tripod,chopin,coucou,cocksuck,borussia,heritage,hiziad,homerj,mullet,whisky,4242,speedo,starcraf,skylar,spaceman,piggy,tiger2,legos,jezebel,joker1,mazda,727272,chester1,rrrrrrrr,dundee,lumber,ppppppp,tranny,aaliyah,admiral,comics,delight,buttfuck,homeboy,eternal,kilroy,violin,wingman,walmart,bigblue,blaze,beemer,beowulf,bigfish,yyyyyyy,woodie,yeahbaby,0123456,tbone,syzygy,starter,linda1,merlot,mexican,11235813,banner,bangbang,badman,barfly,grease,charles1,ffffffff,doberman,dogshit,overkill,coolguy,claymore,demo,nomore,hhhhhhh,hondas,iamgod,enterme,electron,eastside,minimoni,mybaby,wildbill,wildcard,ipswich,200000,bearcat,zigzag,yyyyyyyy,sweetnes,369369,skyler,skywalker,pigeon,tipper,asdf123,alphabet,asdzxc,babybaby,banane,guyver,graphics,chinook,florida1,flexible,fuckinside,ursitesux,tototo,adam12,christma,chrome,buddie,bombers,hippie,misfits,292929,woofer,wwwwwwww,stubby,sheep,sparta,stang,spud,sporty,pinball,just4fun,maxxxx,rebecca1,fffffff,freeway,garion,rrrrr,sancho,outback,maggot,puddin,987456,hoops,mydick,19691969,bigcat,shiner,silverad,templar,lamer,juicy,mike1,maximum,1223,10101010,arrows,alucard,haggis,cheech,safari,dog123,orion1,paloma,qwerasdf,presiden,vegitto,969696,adonis,cookie1,newyork1,buddyboy,hellos,heineken,eraser,moritz,millwall,visual,jaybird,1983,beautifu,zodiac,steven1,sinister,slammer,smashing,slick1,sponge,teddybea,ticklish,jonny,1211,aptiva,applepie,bailey1,guitar1,canyon,gagged,fuckme1,digital1,dinosaur,98765,90210,clowns,cubs,deejay,nigga,naruto,boxcar,icehouse,hotties,electra,widget,1986,2004,bluefish,bingo1,*****,stratus,sultan,storm1,44444,4200,sentnece,sexyboy,sigma,smokie,spam,pippo,temppass,manman,1022,bacchus,aztnm,axio,bamboo,hakr,gregor,hahahaha,5678,camero1,dolphin1,paddle,magnet,qwert1,pyon,porsche1,tripper,noway,burrito,bozo,highheel,hookem,eddie1,entropy,kkkkkkkk,kkkkkkk,illinois,1945,1951,24680,21212121,100000,stonecold,taco,subzero,sexxxy,skolko,skyhawk,spurs1,sputnik,testpass,jiggaman,1224,hannah1,525252,4ever,carbon,scorpio1,rt6ytere,madison1,loki,coolness,coldbeer,citadel,monarch,morgan1,washingt,1997,bella1,yaya,superb,taxman,studman,3636,pizzas,tiffany1,lassie,larry1,joseph1,mephisto,reptile,razor,1013,hammer1,gypsy,grande,camper,chippy,cat123,chimera,fiesta,glock,domain,dieter,dragonba,onetwo,nygiants,password2,quartz,prowler,prophet,towers,ultra,cocker,corleone,dakota1,cumm,nnnnnnn,boxers,heynow,iceberg,kittykat,wasabi,vikings1,beerman,splinter,snoopy1,pipeline,mickey1,mermaid,micro,meowmeow,redbird,baura,chevys,caravan,frogman,diving,dogger,draven,drifter,oatmeal,paris1,longdong,quant4307s,rachel1,vegitta,cobras,corsair,dadada,mylife,bowwow,hotrats,eastwood,moonligh,modena,illusion,iiiiiii,jayhawks,swingers,shocker,shrimp,sexgod,squall,poiu,tigers1,toejam,tickler,julie1,jimbo1,jefferso,michael2,rodeo,robot,1023,annie1,bball,happy2,charter,flasher,falcon1,fiction,fastball,gadget,scrabble,diaper,dirtbike,oliver1,paco,macman,poopy,popper,postman,ttttttt,acura,cowboy1,conan,daewoo,nemrac58,nnnnn,nextel,bobdylan,eureka,kimmie,kcj9wx5n,killbill,musica,volkswag,wage,windmill,wert,vintage,iloveyou1,itsme,zippo,311311,starligh,smokey1,snappy,soulmate,plasma,krusty,just4me,marius,rebel1,1123,audi,fick,goaway,rusty2,dogbone,doofus,ooooooo,oblivion,mankind,mahler,lllllll,pumper,puck,pulsar,valkyrie,tupac,compass,concorde,cougars,delaware,niceguy,nocturne,bob123,boating,bronze,herewego,hewlett,houhou,earnhard,eeeeeeee,mingus,mobydick,venture,verizon,imation,1950,1948,1949,223344,bigbig,wowwow,sissy,spiker,snooker,sluggo,player1,jsbach,jumbo,medic,reddevil,reckless,123456a,1125,1031,astra,gumby,757575,585858,chillin,fuck1,radiohea,upyours,trek,coolcool,classics,choochoo,nikki1,nitro,boytoy,excite,kirsty,wingnut,wireless,icu812,1master,beatle,bigblock,wolfen,summer99,sugar1,tartar,sexysexy,senna,sexman,soprano,platypus,pixies,telephon,laura1,laurent,rimmer,1020,12qwaszx,hamish,halifax,fishhead,forum,dododo,doit,paramedi,lonesome,mandy1,uuuuu,uranus,ttttt,bruce1,helper,hopeful,eduard,dusty1,kathy1,moonbeam,muscles,monster1,monkeybo,windsurf,vvvvvvv,vivid,install,1947,187187,1941,1952,susan1,31415926,sinned,sexxy,smoothie,snowflak,playstat,playa,playboy1,toaster,jerry1,marie1,mason1,merlin1,roger1,roadster,112358,1121,andrea1,bacardi,hardware,789789,5555555,captain1,fergus,sascha,rrrrrrr,dome,onion,lololo,qqqqqqq,undertak,uuuuuuuu,uuuuuuu,cobain,cindy1,coors,descent,nimbus,nomad,nanook,norwich,bombay,broker,hookup,kiwi,winners,jackpot,1a2b3c4d,1776,beardog,bighead,bird33,0987,spooge,pelican,peepee,titan,thedoors,jeremy1,altima,baba,hardone,5454,catwoman,finance,farmboy,farscape,genesis1,salomon,loser1,r2d2,pumpkins,chriss,cumcum,ninjas,ninja1,killers,miller1,islander,jamesbond,intel,19841984,2626,bizzare,blue12,biker,yoyoma,sushi,shitface,spanker,steffi,sphinx,please1,paulie,pistons,tiburon,maxwell1,mdogg,rockies,armstron,alejandr,arctic,banger,audio,asimov,753951,4you,chilly,care1839,flyfish,fantasia,freefall,sandrine,oreo,ohshit,macbeth,madcat,loveya,qwerqwer,colnago,chocha,cobalt,crystal1,dabears,nevets,nineinch,broncos1,epsilon,kestrel,winston1,warrior1,iiiiiiii,iloveyou2,1616,woowoo,sloppy,specialk,tinkerbe,jellybea,reader,redsox1,1215,1112,arcadia,baggio,555666,cayman,cbr900rr,gabriell,glennwei,sausages,disco,pass1,lovebug,macmac,puffin,vanguard,trinitro,airwolf,aaa111,cocaine,cisco,datsun,bricks,bumper,eldorado,kidrock,wizard1,whiskers,wildwood,istheman,25802580,bigones,woodland,wolfpac,strawber,3030,sheba1,sixpack,peace1,physics,tigger2,toad,megan1,meow,ringo,amsterdam,717171,686868,5424,canuck,football1,footjob,fulham,seagull,orgy,lobo,mancity,vancouve,vauxhall,acidburn,derf,myspace1,boozer,buttercu,hola,minemine,munch,1dragon,biology,bestbuy,bigpoppa,blackout,blowfish,bmw325,bigbob,stream,talisman,tazz,sundevil,3333333,skate,shutup,shanghai,spencer1,slowhand,pinky1,tootie,thecrow,jubilee,jingle,matrix1,manowar,messiah,resident,redbaron,romans,andromed,athlon,beach1,badgers,guitars,harald,harddick,gotribe,6996,7grout,5wr2i7h8,635241,chase1,fallout,fiddle,fenris,francesc,fortuna,fairlane,felix1,gasman,fucks,sahara,sassy1,dogpound,dogbert,divx1,manila,pornporn,quasar,venom,987987,access1,clippers,daman,crusty,nathan1,nnnnnnnn,bruno1,budapest,kittens,kerouac,mother1,waldo1,whistler,whatwhat,wanderer,idontkno,1942,1946,bigdawg,bigpimp,zaqwsx,414141,3000gt,434343,serpent,smurf,pasword,thisisit,john1,robotics,redeye,rebelz,1011,alatam,asians,bama,banzai,harvest,575757,5329,fatty,fender1,flower2,funky,sambo,drummer1,dogcat,oedipus,osama,prozac,private1,rampage,concord,cinema,cornwall,cleaner,ciccio,clutch,corvet07,daemon,bruiser,boiler,hjkl,egghead,mordor,jamess,iverson3,bluesman,zouzou,090909,1002,stone1,4040,sexo,smith1,sperma,sneaky,polska,thewho,terminat,krypton,lekker,johnson1,johann,rockie,aspire,goodie,cheese1,fenway,fishon,fishin,fuckoff1,girls1,doomsday,pornking,ramones,rabbits,transit,aaaaa1,boyz,bookworm,bongo,bunnies,buceta,highbury,henry1,eastern,mischief,mopar,ministry,vienna,wildone,bigbooty,beavis1,xxxxxx1,yogibear,000001,0815,zulu,420000,sigmar,sprout,stalin,lkjhgfds,lagnaf,rolex,redfox,referee,123123123,1231,angus1,ballin,attila,greedy,grunt,747474,carpedie,caramel,foxylady,gatorade,futbol,frosch,saiyan,drums,donner,doggy1,drum,doudou,nutmeg,quebec,valdepen,tosser,tuscl,comein,cola,deadpool,bremen,hotass,hotmail1,eskimo,eggman,koko,kieran,katrin,kordell1,komodo,mone,munich,vvvvvvvv,jackson5,2222222,bergkamp,bigben,zanzibar,xxx123,sunny1,373737,slayer1,snoop,peachy,thecure,little1,jennaj,rasta69,1114,aries,havana,gratis,calgary,checkers,flanker,salope,dirty1,draco,dogface,luv2epus,rainbow6,qwerty123,umpire,turnip,vbnm,tucson,troll,codered,commande,neon,nico,nightwin,boomer1,bushido,hotmail0,enternow,keepout,karen1,mnbv,viewsoni,volcom,wizards,1995,berkeley,woodstoc,tarpon,shinobi,starstar,phat,toolbox,julien,johnny1,joebob,riders,reflex,120676,1235,angelus,anthrax,atlas,grandam,harlem,hawaii50,655321,cabron,challeng,callisto,firewall,firefire,flyer,flower1,gambler,frodo1,sam123,scania,dingo,papito,passmast,ou8123,randy1,twiggy,travis1,treetop,addict,admin1,963852,aceace,cirrus,bobdole,bonjovi,bootsy,boater,elway7,kenny1,moonshin,montag,wayne1,white1,jazzy,jakejake,1994,1991,2828,bluejays,belmont,sensei,southpark,peeper,pharao,pigpen,tomahawk,teensex,leedsutd,jeepster,jimjim,josephin,melons,matthias,robocop,1003,1027,antelope,azsxdc,gordo,hazard,granada,8989,7894,ceasar,cabernet,cheshire,chelle,candy1,fergie,fidelio,giorgio,fuckhead,dominion,qawsed,trucking,chloe1,daddyo,nostromo,boyboy,booster,bucky,honolulu,esquire,dynamite,mollydog,windows1,waffle,wealth,vincent1,jabber,jaguars,javelin,irishman,idefix,bigdog1,blue42,blanked,blue32,biteme1,bearcats,yessir,sylveste,sunfire,tbird,stryker,3ip76k2,sevens,pilgrim,tenchi,titman,leeds,lithium,linkin,marijuan,mariner,markie,midnite,reddwarf,1129,123asd,12312312,allstar,albany,asdf12,aspen,hardball,goldfing,7734,49ers,carnage,callum,carlos1,fitter,fandango,gofast,gamma,fucmy69,scrapper,dogwood,django,magneto,premium,9999999,abc1234,newyear,bookie,bounty,brown1,bologna,elway,killjoy,klondike,mouser,wayer,impreza,insomnia,24682468,2580,24242424,billbill,bellaco,blues1,blunts,teaser,sf49ers,shovel,solitude,spikey,pimpdadd,timeout,toffee,lefty,johndoe,johndeer,mega,manolo,ratman,robin1,1124,1210,1028,1226,babylove,barbados,gramma,646464,carpente,chaos1,fishbone,fireblad,frogs,screamer,scuba1,ducks,doggies,dicky,obsidian,rams,tottenham,aikman,comanche,corolla,cumslut,cyborg,boston1,houdini,helmut,elvisp,keksa12,monty1,wetter,watford,wiseguy,1989,1987,20202020,biatch,beezer,bigguns,blueball,bitchy,wyoming,yankees2,wrestler,stupid1,sealteam,sidekick,simple1,smackdow,sporting,spiral,smeller,plato,tophat,test2,toomuch,jello,junkie,maxim,maxime,meadow,remingto,roofer,124038,1018,1269,1227,123457,arkansas,aramis,beaker,barcelona,baltimor,googoo,goochi,852456,4711,catcher,champ1,fortress,fishfish,firefigh,geezer,rsalinas,samuel1,saigon,scooby1,dick1,doom,dontknow,magpies,manfred,vader1,universa,tulips,mygirl,bowtie,holycow,honeys,enforcer,waterboy,1992,23skidoo,bimbo,blue11,birddog,zildjian,030303,stinker,stoppedby,sexybabe,speakers,slugger,spotty,smoke1,polopolo,perfect1,torpedo,lakeside,jimmys,junior1,masamune,1214,april1,grinch,767676,5252,cherries,chipmunk,cezer121,carnival,capecod,finder,fearless,goats,funstuff,gideon,savior,seabee,sandro,schalke,salasana,disney1,duckman,pancake,pantera1,malice,love123,qwert123,tracer,creation,cwoui,nascar24,hookers,erection,ericsson,edthom,kokoko,kokomo,mooses,inter,1michael,1993,19781978,25252525,shibby,shamus,skibum,sheepdog,sex69,spliff,slipper,spoons,spanner,snowbird,toriamos,temp123,tennesse,lakers1,jomama,mazdarx7,recon,revolver,1025,1101,barney1,babycake,gotham,gravity,hallowee,616161,515000,caca,cannabis,chilli,fdsa,getout,fuck69,gators1,sable,rumble,dolemite,dork,duffer,dodgers1,onions,logger,lookout,magic32,poon,twat,coventry,citroen,civicsi,cocksucker,coochie,compaq1,nancy1,buzzer,boulder,butkus,bungle,hogtied,hotgirls,heidi1,eggplant,mustang6,monkey12,wapapapa,wendy1,volleyba,vibrate,blink,birthday4,xxxxx1,stephen1,suburban,sheeba,start1,soccer10,starcraft,soccer12,peanut1,plastics,penthous,peterbil,tetsuo,torino,tennis1,termite,lemmein,lakewood,jughead,melrose,megane,redone,angela1,goodgirl,gonzo1,golden1,gotyoass,656565,626262,capricor,chains,calvin1,getmoney,gabber,runaway,salami,dungeon,dudedude,opus,paragon,panhead,pasadena,opendoor,odyssey,magellan,printing,prince1,trustme,nono,buffet,hound,kajak,killkill,moto,winner1,vixen,whiteboy,versace,voyager1,indy,jackjack,bigal,beech,biggun,blake1,blue99,big1,synergy,success1,336699,sixty9,shark1,simba1,sebring,spongebo,spunk,springs,sliver,phialpha,password9,pizza1,pookey,tickling,lexingky,lawman,joe123,mike123,romeo1,redheads,apple123,backbone,aviation,green123,carlitos,byebye,cartman1,camden,chewy,camaross,favorite6,forumwp,ginscoot,fruity,sabrina1,devil666,doughnut,pantie,oldone,paintball,lumina,rainbow1,prosper,umbrella,ajax,951753,achtung,abc12345,compact,corndog,deerhunt,darklord,dank,nimitz,brandy1,hetfield,holein1,hillbill,hugetits,evolutio,kenobi,whiplash,wg8e3wjf,istanbul,invis,1996,bigjohn,bluebell,beater,benji,bluejay,xyzzy,suckdick,taichi,stellar,shaker,semper,splurge,squeak,pearls,playball,pooky,titfuck,joemama,johnny5,marcello,maxi,rhubarb,ratboy,reload,1029,1030,1220,bbking,baritone,gryphon,57chevy,494949,celeron,fishy,gladiator,fucker1,roswell,dougie,dicker,diva,donjuan,nympho,racers,truck1,trample,acer,cricket1,climax,denmark,cuervo,notnow,nittany,neutron,bosco1,buffa,breaker,hello2,hydro,kisskiss,kittys,montecar,modem,mississi,20012001,bigdick1,benfica,yahoo1,striper,tabasco,supra,383838,456654,seneca,shuttle,penguin1,pathfind,testibil,thethe,jeter2,marma,mark1,metoo,republic,rollin,redleg,redbone,redskin,1245,anthony7,altoids,barley,asswipe,bauhaus,bbbbbb1,gohome,harrier,golfpro,goldeney,818181,6666666,5000,5rxypn,cameron1,checker,calibra,freefree,faith1,fdm7ed,giraffe,giggles,fringe,scamper,rrpass1,screwyou,dimples,pacino,ontario,passthie,oberon,quest1,postov1000,puppydog,puffer,qwerty7,tribal,adam25,a1234567,collie,cleopatr,davide,namaste,buffalo1,bonovox,bukkake,burner,bordeaux,burly,hun999,enters,mohawk,vgirl,jayden,1812,1943,222333,bigjim,bigd,zoom,wordup,ziggy1,yahooo,workout,young1,xmas,zzzzzz1,surfer1,strife,sunlight,tasha1,skunk,sprinter,peaches1,pinetree,plum,pimping,theforce,thedon,toocool,laddie,lkjh,jupiter1,matty,redrose,1200,102938,antares,austin31,goose1,737373,78945612,789987,6464,calimero,caster,casper1,cement,chevrolet,chessie,caddy,canucks,fellatio,f00tball,gateway2,gamecube,rugby1,scheisse,dshade,dixie1,offshore,lucas1,macaroni,manga,pringles,puff,trouble1,ussy,coolhand,colonial,colt,darthvad,cygnusx1,natalie1,newark,hiking,errors,elcamino,koolaid,knight1,murphy1,volcano,idunno,2005,2233,blueberr,biguns,yamahar1,zapper,zorro1,0911,3006,sixsix,shopper,sextoy,snowboard,speedway,pokey,playboy2,titi,toonarmy,lambda,joecool,juniper,max123,mariposa,met2002,reggae,ricky1,1236,1228,1016,all4one,baberuth,asgard,484848,5683,6669,catnip,charisma,capslock,cashmone,galant,frenchy,gizmodo1,girlies,screwy,doubled,divers,dte4uw,dragonfl,treble,twinkie,tropical,crescent,cococo,dabomb,daffy,dandfa,cyrano,nathanie,boners,helium,hellas,espresso,killa,kikimora,w4g8at,ilikeit,iforget,1944,20002000,birthday1,beatles1,blue1,bigdicks,beethove,blacklab,blazers,benny1,woodwork,0069,0101,taffy,4567,shodan,pavlov,pinnacle,petunia,tito,teenie,lemonade,lalakers,lebowski,lalalala,ladyboy,jeeper,joyjoy,mercury1,mantle,mannn,rocknrol,riversid,123aaa,11112222,121314,1021,1004,1120,allen1,ambers,amstel,alice1,alleycat,allegro,ambrosia,gspot,goodsex,hattrick,harpoon,878787,8inches,4wwvte,cassandr,charlie123,gatsby,generic,gareth,fuckme2,samm,seadog,satchmo,scxakv,santafe,dipper,outoutout,madmad,london1,qbg26i,pussy123,tzpvaw,vamp,comp,cowgirl,coldplay,dawgs,nt5d27,novifarm,notredam,newness,mykids,bryan1,bouncer,hihihi,honeybee,iceman1,hotlips,dynamo,kappa,kahlua,muffy,mizzou,wannabe,wednesda,whatup,waterfal,willy1,bear1,billabon,youknow,yyyyyy1,zachary1,01234567,070462,zurich,superstar,stiletto,strat,427900,sigmachi,shells,sexy123,smile1,sophie1,stayout,somerset,playmate,pinkfloyd,phish1,payday,thebear,telefon,laetitia,kswbdu,jerky,metro,revoluti,1216,1201,1204,1222,1115,archange,barry1,handball,676767,chewbacc,furball,gocubs,fullback,gman,dewalt,dominiqu,diver1,dhip6a,olemiss,mandrake,mangos,pretzel,pusssy,tripleh,vagabond,clovis,dandan,csfbr5yy,deadspin,ninguna,ncc74656,bootsie,bp2002,bourbon,bumble,heyyou,houston1,hemlock,hippo,hornets,horseman,excess,extensa,muffin1,virginie,werdna,idontknow,jack1,1bitch,151nxjmt,bendover,bmwbmw,zaq123,wxcvbn,supernov,tahoe,shakur,sexyone,seviyi,smart1,speed1,pepito,phantom1,playoffs,terry1,terrier,laser1,lite,lancia,johngalt,jenjen,midori,maserati,matteo,miami1,riffraff,ronald1,1218,1026,123987,1015,1103,armada,architec,austria,gotmilk,cambridg,camero,flex,foreplay,getoff,glacier,glotest,froggie,gerbil,rugger,sanity72,donna1,orchard,oyster,palmtree,pajero,m5wkqf,magenta,luckyone,treefrog,vantage,usmarine,tyvugq,uptown,abacab,aaaaaa1,chuck1,darkange,cyclones,navajo,bubba123,iawgk2,hrfzlz,dylan1,enrico,encore,eclipse1,mutant,mizuno,mustang2,video1,viewer,weed420,whales,jaguar1,1990,159159,1love,bears1,bigtruck,bigboss,blitz,xqgann,yeahyeah,zeke,zardoz,stickman,3825,sentra,shiva,skipper1,singapor,southpaw,sonora,squid,slamdunk,slimjim,placid,photon,placebo,pearl1,test12,therock1,tiger123,leinad,legman,jeepers,joeblow,mike23,redcar,rhinos,rjw7x4,1102,13576479,112211,gwju3g,greywolf,7bgiqk,7878,535353,4snz9g,candyass,cccccc1,catfight,cali,fister,fosters,finland,frankie1,gizzmo,royalty,rugrat,dodo,oemdlg,out3xf,paddy,opennow,puppy1,qazwsxedc,ramjet,abraxas,cn42qj,dancer1,death666,nudity,nimda2k,buick,bobb,braves1,henrik,hooligan,everlast,karachi,mortis,monies,motocros,wally1,willie1,inspiron,1test,2929,bigblack,xytfu7,yackwin,zaq1xsw2,yy5rbfsc,100100,0660,tahiti,takehana,332211,3535,sedona,seawolf,skydiver,spleen,slash,spjfet,special1,slimshad,sopranos,spock1,penis1,patches1,thierry,thething,toohot,limpone,mash4077,matchbox,masterp,maxdog,ribbit,rockin,redhat,1113,14789632,1331,allday,aladin,andrey,amethyst,baseball1,athome,goofy1,greenman,goofball,ha8fyp,goodday,778899,charon,chappy,caracas,cardiff,capitals,canada1,cajun,catter,freddy1,favorite2,forme,forsaken,feelgood,gfxqx686,saskia,sanjose,salsa,dilbert1,dukeduke,downhill,longhair,locutus,lockdown,malachi,mamacita,lolipop,rainyday,pumpkin1,punker,prospect,rambo1,rainbows,quake,trinity1,trooper1,citation,coolcat,default,deniro,d9ungl,daddys,nautica,nermal,bukowski,bubbles1,bogota,buds,hulk,hitachi,ender,export,kikiki,kcchiefs,kram,morticia,montrose,mongo,waqw3p,wizzard,whdbtp,whkzyc,154ugeiu,1fuck,binky,bigred1,blubber,becky1,year2005,wonderfu,xrated,0001,tampabay,survey,tammy1,stuffer,3mpz4r,3000,3some,sierra1,shampoo,shyshy,slapnuts,standby,spartan1,sprocket,stanley1,poker1,theshit,lavalamp,light1,laserjet,jediknig,jjjjj1,mazda626,menthol,margaux,medic1,rhino1,1209,1234321,amigos,apricot,asdfgh1,hairball,hatter,grimace,7xm5rq,6789,cartoons,capcom,cashflow,carrots,fanatic,format,girlie,safeway,dogfart,dondon,outsider,odin,opiate,lollol,love12,mallrats,prague,primetime21,pugsley,r29hqq,valleywa,airman,abcdefg1,darkone,cummer,natedogg,nineball,ndeyl5,natchez,newone,normandy,nicetits,buddy123,buddys,homely,husky,iceland,hr3ytm,highlife,holla,earthlin,exeter,eatmenow,kimkim,k2trix,kernel,money123,moonman,miles1,mufasa,mousey,whites,warhamme,jackass1,2277,20spanks,blobby,blinky,bikers,blackjack,becca,blue23,xman,wyvern,085tzzqi,zxzxzx,zsmj2v,suede,t26gn4,sugars,tantra,swoosh,4226,4271,321123,383pdjvl,shane1,shelby1,spades,smother,sparhawk,pisser,photo1,pebble,peavey,pavement,thistle,kronos,lilbit,linux,melanie1,marbles,redlight,1208,1138,1008,alchemy,aolsucks,alexalex,atticus,auditt,b929ezzh,goodyear,gubber,863abgsg,7474,797979,464646,543210,4zqauf,4949,ch5nmk,carlito,chewey,carebear,checkmat,cheddar,chachi,forgetit,forlife,giants1,getit,gerhard,galileo,g3ujwg,ganja,rufus1,rushmore,discus,dudeman,olympus,oscars,osprey,madcow,locust,loyola,mammoth,proton,rabbit1,ptfe3xxp,pwxd5x,purple1,punkass,prophecy,uyxnyd,tyson1,aircraft,access99,abcabc,colts,civilwar,claudia1,contour,dddddd1,cypher,dapzu455,daisydog,noles,hoochie,hoser,eldiablo,kingrich,mudvayne,motown,mp8o6d,vipergts,italiano,2055,2211,bloke,blade1,yamato,zooropa,yqlgr667,050505,zxcvbnm1,zw6syj,suckcock,tango1,swampy,445566,333666,380zliki,sexpot,sexylady,sixtynin,sickboy,spiffy,skylark,sparkles,pintail,phreak,teller,timtim,thighs,latex,letsdoit,lkjhg,landmark,lizzard,marlins,marauder,metal1,manu,righton,1127,alain,alcat,amigo,basebal1,azertyui,azrael,hamper,gotenks,golfgti,hawkwind,h2slca,grace1,6chid8,789654,canine,casio,cazzo,cbr900,cabrio,calypso,capetown,feline,flathead,fisherma,flipmode,fungus,g9zns4,giggle,gabriel1,fuck123,saffron,dogmeat,dreamcas,dirtydog,douche,dresden,dickdick,destiny1,pappy,oaktree,luft4,puta,ramada,trumpet1,vcradq,tulip,tracy71,tycoon,aaaaaaa1,conquest,chitown,creepers,cornhole,danman,dada,density,d9ebk7,darth,nirvana1,nestle,brenda1,bonanza,hotspur,hufmqw,electro,erasure,elisabet,etvww4,ewyuza,eric1,kenken,kismet,klaatu,milamber,willi,isacs155,igor,1million,1letmein,x35v8l,yogi,ywvxpz,xngwoj,zippy1,020202,****,stonewal,sentry,sexsexsex,sonysony,smirnoff,star12,solace,star1,pkxe62,pilot1,pommes,paulpaul,tical,tictac,lighthou,lemans,kubrick,letmein22,letmesee,jys6wz,jonesy,jjjjjj1,jigga,redstorm,riley1,14141414,1126,allison1,badboy1,asthma,auggie,hardwood,gumbo,616913,57np39,56qhxs,4mnveh,fatluvr69,fqkw5m,fidelity,feathers,fresno,godiva,gecko,gibson1,gogators,general1,saxman,rowing,sammys,scotts,scout1,sasasa,samoht,dragon69,ducky,dragonball,driller,p3wqaw,papillon,oneone,openit,optimist,longshot,rapier,pussy2,ralphie,tuxedo,undertow,copenhag,delldell,culinary,deltas,mytime,noname,noles1,bucker,bopper,burnout,ibilltes,hihje863,hitter,ekim,espana,eatme69,elpaso,express1,eeeeee1,eatme1,karaoke,mustang5,wellingt,willem,waterski,webcam,jasons,infinite,iloveyou!,jakarta,belair,bigdad,beerme,yoshi,yinyang,x24ik3,063dyjuy,0000007,ztmfcq,stopit,stooges,symow8,strato,2hot4u,skins,shakes,sex1,snacks,softtail,slimed123,pizzaman,tigercat,tonton,lager,lizzy,juju,john123,jesse1,jingles,martian,mario1,rootedit,rochard,redwine,requiem,riverrat,1117,1014,1205,amor,amiga,alpina,atreides,banana1,bahamut,golfman,happines,7uftyx,5432,5353,5151,4747,foxfire,ffvdj474,foreskin,gayboy,gggggg1,gameover,glitter,funny1,scoobydoo,saxophon,dingbat,digimon,omicron,panda1,loloxx,macintos,lululu,lollypop,racer1,queen1,qwertzui,upnfmc,tyrant,trout1,9skw5g,aceman,acls2h,aaabbb,acapulco,aggie,comcast,cloudy,cq2kph,d6o8pm,cybersex,davecole,darian,crumbs,davedave,dasani,mzepab,myporn,narnia,booger1,bravo1,budgie,btnjey,highlander,hotel6,humbug,ewtosi,kristin1,kobe,knuckles,keith1,katarina,muff,muschi,montana1,wingchun,wiggle,whatthe,vette1,vols,virago,intj3a,ishmael,jachin,illmatic,199999,2010,blender,bigpenis,bengal,blue1234,zaqxsw,xray,xxxxxxx1,zebras,yanks,tadpole,stripes,3737,4343,3728,4444444,368ejhih,solar,sonne,sniffer,sonata,squirts,playstation,pktmxr,pescator,texaco,lesbos,l8v53x,jo9k2jw2,jimbeam,jimi,jupiter2,jurassic,marines1,rocket1,14725836,12345679,1219,123098,1233,alessand,althor,arch,alpha123,basher,barefeet,balboa,bbbbb1,badabing,gopack,golfnut,gsxr1000,gregory1,766rglqy,8520,753159,8dihc6,69camaro,666777,cheeba,chino,cheeky,camel1,fishcake,flubber,gianni,gnasher23,frisbee,fuzzy1,fuzzball,save13tx,russell1,sandra1,scrotum,scumbag,sabre,samdog,dripping,dragon12,dragster,orwell,mainland,maine,qn632o,poophead,rapper,porn4life,rapunzel,velocity,vanessa1,trueblue,vampire1,abacus,902100,crispy,chooch,d6wnro,dabulls,dehpye,navyseal,njqcw4,nownow,nigger1,nightowl,nonenone,nightmar,bustle,buddy2,boingo,bugman,bosshog,hybrid,hillside,hilltop,hotlegs,hzze929b,hhhhh1,hellohel,evilone,edgewise,e5pftu,eded,embalmer,excalibur,elefant,kenzie,killah,kleenex,mouses,mounta1n,motors,mutley,muffdive,vivitron,w00t88,iloveit,jarjar,incest,indycar,17171717,1664,17011701,222777,2663,beelch,benben,yitbos,yyyyy1,zzzzz1,stooge,tangerin,taztaz,stewart1,summer69,system1,surveyor,stirling,3qvqod,3way,456321,sizzle,simhrq,sparty,ssptx452,sphere,persian,ploppy,pn5jvw,poobear,pianos,plaster,testme,tiff,thriller,master12,rockey,1229,1217,1478,1009,anastasi,amonra,argentin,albino,azazel,grinder,6uldv8,83y6pv,8888888,4tlved,515051,carsten,flyers88,ffffff1,firehawk,firedog,flashman,ggggg1,godspeed,galway,giveitup,funtimes,gohan,giveme,geryfe,frenchie,sayang,rudeboy,sandals,dougal,drag0n,dga9la,desktop,onlyone,otter,pandas,mafia,luckys,lovelife,manders,qqh92r,qcmfd454,radar1,punani,ptbdhw,turtles,undertaker,trs8f7,ugejvp,abba,911turbo,acdc,abcd123,crash1,colony,delboy,davinci,notebook,nitrox,borabora,bonzai,brisbane,heeled,hooyah,hotgirl,i62gbq,horse1,hpk2qc,epvjb6,mnbvc,mommy1,munster,wiccan,2369,bettyboo,blondy,bismark,beanbag,bjhgfi,blackice,yvtte545,ynot,yess,zlzfrh,wolvie,007bond,******,tailgate,tanya1,sxhq65,stinky1,3234412,3ki42x,seville,shimmer,sienna,shitshit,skillet,sooners1,solaris,smartass,pedros,pennywis,pfloyd,tobydog,thetruth,letme1n,mario66,micky,rocky2,rewq,reindeer,1128,1207,1104,1432,aprilia,allstate,bagels,baggies,barrage,guru,72d5tn,606060,4wcqjn,chance1,flange,fartman,geil,gbhcf2,fussball,fuaqz4,gameboy,geneviev,rotary,seahawk,saab,samadams,devlt4,ditto,drevil,drinker,deuce,dipstick,octopus,ottawa,losangel,loverman,porky,q9umoz,rapture,pussy4me,triplex,ue8fpw,turbos,aaa340,churchil,crazyman,cutiepie,ddddd1,dejavu,cuxldv,nbvibt,nikon,niko,nascar1,bubba2,boobear,boogers,bullwink,bulldawg,horsemen,escalade,eagle2,dynamic,efyreg,minnesot,mogwai,msnxbi,mwq6qlzo,werder,verygood,voodoo1,iiiiii1,159951,1624,1911a1,2244,bellagio,bedlam,belkin,bill1,xirt2k,??????,susieq,sundown,sukebe,swifty,2fast4u,sexe,shroom,seaweed,skeeter1,snicker,spanky1,spook,phaedrus,pilots,peddler,thumper1,tiger7,tmjxn151,thematri,l2g7k3,letmeinn,jeffjeff,johnmish,mantra,mike69,mazda6,riptide,robots,1107,1130,142857,11001001,1134,armored,allnight,amatuers,bartok,astral,baboon,balls1,bassoon,hcleeb,happyman,granite,graywolf,golf1,gomets,8vjzus,7890,789123,8uiazp,5757,474jdvff,551scasi,50cent,camaro1,cherry1,chemist,firenze,fishtank,freewill,glendale,frogfrog,ganesh,scirocco,devilman,doodles,okinawa,olympic,orpheus,ohmygod,paisley,pallmall,lunchbox,manhatta,mahalo,mandarin,qwqwqw,qguvyt,pxx3eftp,rambler,poppy1,turk182,vdlxuc,tugboat,valiant,uwrl7c,chris123,cmfnpu,decimal,debbie1,dandy,daedalus,natasha1,nissan1,nancy123,nevermin,napalm,newcastle,bonghit,ibxnsm,hhhhhh1,holger,edmonton,equinox,dvader,kimmy,knulla,mustafa,monsoon,mistral,morgana,monica1,mojave,monterey,mrbill,vkaxcs,victor1,violator,vfdhif,wilson1,wavpzt,wildstar,winter99,iqzzt580,imback,1914,19741974,1monkey,1q2w3e4r5t,2500,2255,bigshow,bigbucks,blackcoc,zoomer,wtcacq,wobble,xmen,xjznq5,yesterda,yhwnqc,zzzxxx,393939,2fchbg,skinhead,skilled,shadow12,seaside,sinful,silicon,smk7366,snapshot,sniper1,soccer11,smutty,peepers,plokij,pdiddy,pimpdaddy,thrust,terran,topaz,today1,lionhear,littlema,lauren1,lincoln1,lgnu9d,juneau,methos,rogue1,romulus,redshift,1202,1469,12locked,arizona1,alfarome,al9agd,aol123,altec,apollo1,arse,baker1,bbb747,axeman,astro1,hawthorn,goodfell,hawks1,gstring,hannes,8543852,868686,4ng62t,554uzpad,5401,567890,5232,catfood,fire1,flipflop,fffff1,fozzie,fluff,fzappa,rustydog,scarab,satin,ruger,samsung1,destin,diablo2,dreamer1,detectiv,doqvq3,drywall,paladin1,papabear,offroad,panasonic,nyyankee,luetdi,qcfmtz,pyf8ah,puddles,pussyeat,ralph1,princeto,trivia,trewq,tri5a3,advent,9898,agyvorc,clarkie,coach1,courier,christo,chowder,cyzkhw,davidb,dad2ownu,daredevi,de7mdf,nazgul,booboo1,bonzo,butch1,huskers1,hgfdsa,hornyman,elektra,england1,elodie,kermit1,kaboom,morten,mocha,monday1,morgoth,weewee,weenie,vorlon,wahoo,ilovegod,insider,jayman,1911,1dallas,1900,1ranger,201jedlz,2501,1qaz,bignuts,bigbad,beebee,billows,belize,wvj5np,wu4etd,yamaha1,wrinkle5,zebra1,yankee1,zoomzoom,09876543,0311,?????,stjabn,tainted,3tmnej,skooter,skelter,starlite,spice1,stacey1,smithy,pollux,peternorth,pixie,piston,poets,toons,topspin,kugm7b,legends,jeepjeep,joystick,junkmail,jojojojo,jonboy,midland,mayfair,riches,reznor,rockrock,reboot,renee1,roadway,rasta220,1411,1478963,1019,archery,andyandy,barks,bagpuss,auckland,gooseman,hazmat,gucci,grammy,happydog,7kbe9d,7676,6bjvpe,5lyedn,5858,5291,charlie2,c7lrwu,candys,chateau,ccccc1,cardinals,fihdfv,fortune12,gocats,gaelic,fwsadn,godboy,gldmeo,fx3tuo,fubar1,generals,gforce,rxmtkp,rulz,sairam,dunhill,dogggg,ozlq6qwm,ov3ajy,lockout,makayla,macgyver,mallorca,prima,pvjegu,qhxbij,prelude1,totoro,tusymo,trousers,tulane,turtle1,tracy1,aerosmit,abbey1,clticic,cooper1,comets,delpiero,cyprus,dante1,dave1,nounours,nexus6,nogard,norfolk,brent1,booyah,bootleg,bulls23,bulls1,booper,heretic,icecube,hellno,hounds,honeydew,hooters1,hoes,hevnm4,hugohugo,epson,evangeli,eeeee1,eyphed".split(","), +B="james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,angel,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,wm,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,ed,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,kristopher,levi,marcos,gustavo,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,al,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,dexter,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,ty,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,art,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,german,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,major,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,valentin,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,royal,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,sol,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,val,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,len,ike,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,del,benedict,mose,hong,isreal,garret,fausto,asa,arlen,zack,modesto,francesco,manual,jae,gaylord,gaston,filiberto,deangelo,michale,granville,wes,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,von,hosea,shad,santo,rudolf,rolf,rey,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,sid,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,hai,elden,darell,broderick,alonso".split(","), +C="mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,june,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,jo,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,natasha,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,marina,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,karina,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,queen,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,nan,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,sun,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,oma,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lyn,lettie,samatha,oralia,matilde,larissa,vesta,renita,india,delois,shanda,phillis,lorri,erlinda,cathrine,barb,zoe,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,una,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,nikita,mei,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,valentina,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,ona,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,asia,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,lan,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kia,kesha,jeana,danelle,charline,chanel,valorie,lia,dortha,cristal,leone,leilani,gerri,debi,andra,keshia,ima,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,nicola,lyndsey,janina,ami,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,era,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,ena,anh,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,deb,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hoa,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,eun,yetta,verona,thomasina,sibyl,shannan,mechelle,lue,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,bea,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,lai,eda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,hui,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,joi,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,arcelia,aja,zenobia,sharen,sharee,lavinia,kum,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,meg,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nia,nakisha,mee,maira,loreen,kizzy,fallon,christene,bobbye,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,wai,risa,rikki,particia,mui,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,pia,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,shu,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yun,yolande,vivien,vernetta,trudi,sommer,pearle,patrina,ossie,nicolle,loyce,letty,larisa,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,flo,elodia,dorine,brunilda,brigid,ashli,ardella,twana,thu,tarah,shavon,serina,rayna,ramonita,nga,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,celine,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,min,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sha,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jin,jeni,hae,gracia,glady,farah,enola,ema,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,yen,vivan,terresa,tanna,suk,sudie,soo,signe,salena,ronni,rebbecca,myrtie,malika,maida,loan,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,dot,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,yan,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,kym,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,angeles,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,irina,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,hye,hee,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,tam,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,kam,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,bev,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,wei,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,fae,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,isa,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,siu,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,yuk,wen,waneta,ute,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,tai,svetlana,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,ara,alita,yulanda,yon,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,sau,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,thi,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,conception,clora,cherilyn,calandra,armandina,anisa,ula,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kit,kimi,keila,katelynn,kai,jone,joane,jayna,janella,hue,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,bok,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,toi,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,ewa,eufemia,emely,ela,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,tatyana,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,nam,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,argentina,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,mao,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,galina,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yer,yajaira,wan,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,bao,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,sparkle,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,oda,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hyo,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,bee,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pok,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,cuc,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,ria,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,dia,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,september,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,hwa,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,veronika,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pei,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,krishna,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","), +D="smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,daniels,palmer,mills,nichols,grant,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,oliver,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,may,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,french,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,park,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,short,wiggins,mathews,mcclain,fischer,wall,small,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,york,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,english,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,church,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,battle,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,england,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,lake,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,camp,villa,dye,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,field,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,nix,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,lam,ivey,locke,haines,snell,hoskins,byrne,arias,roe,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,poe,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,land,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,ash,waddell,ramey,cates,pollock,cummins,messer,heller,lin,funk,cornett,palacios,galindo,cano,hathaway,singer,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,temple,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,post,gleason,ott,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,ham,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,dow,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,block,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,north,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,cho,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,brand,tilley,schaffer,lim,knutson,fenton,doran,chu,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,fagan,ezell,edmondson,cyr,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,hills,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hay,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,doe,stockton,stearns,lofton,coats,cavazos,beavers,barrios,parish,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,laws,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,iverson,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,spain,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,liu,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,hacker,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,urban,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,lau,hudgins,gaskins,duckworth,coe,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wing,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,han,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,ngo,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,barkley,bales,stepp,holm,tan,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,yee,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,rea,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,ely,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,grey,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,foy,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,march,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,paz,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,peak,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,charlton,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,fort,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,cable,stuckey,stine,porterfield,pauley,nye,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,daily,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,council,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dix,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,hsu,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,sales,ricci,plunkett,pannell,ness,leger,hoy,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,moe,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,pak,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,register,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,towns,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,sessions,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mount,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,vue,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,kee,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,valerio,tellez,steffen,shumate,sauls,ripley,kemper,jacks,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wooden,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,ferry,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,loy,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,styles,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,broadway,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,dew,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,shore,petrie,nowlin,navarrete,muhammad,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,eng,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,nation,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,kasper,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bui,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,rau,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,yoo,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,poland,pape,null,mulkey,lightner,langer,hillard,glasgow,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lew,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,monaco,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pitcher,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,folk,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,eck,danforth,cushing,cress,creed,cazares,casanova,bey,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,palm,pagano,mink,luker,leathers,joslin,hartzell,gambrell,deutsch,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,fee,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,cha,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,prior,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,breeding,boardman,alcaraz,ahn,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,brodie,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,wales,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,moy,mclaren,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,birmingham,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,nez,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,chancellor,caton,brunelle,bly,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,derby,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,rue,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hix,haven,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,dame,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,ard,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,erb,eady,desmarais,decosta,dansby,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lum,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,wellington,valverde,valdivia,troupe,thrower,swindell,suttles,suh,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,rochester,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tew,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thoma,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,luu,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,arena,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,ong,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,pastor,parmer,parke,pare,palmieri,nottingham,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,cork,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,manor,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,barrier,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,eby,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,via,valente,turnbow,tse,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,lux,litchfield,ley,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,tye,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,sim,silvas,shults,schexnayder,saez,rodas,rager,pulver,plaza,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,hom,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,nations,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,harbour,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,friedrich,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,rao,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,cao,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,thai,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,ide,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,essex,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tso,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,uhl,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rhine,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,napoli,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,herald,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,ake,aho,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,neu,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,svoboda,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rye,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kao,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,zak,worcester,witmer,wiser,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,roa,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,canterbury,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,province,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lui,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ung,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,pye,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,peer,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lor,lollar,lakes,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,bramble,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lao,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,yap,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,hua,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,fye,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,yim,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,householder,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fey,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,vale,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,ney,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,augustin,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,sly,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,ito,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,bos,boman,bohannan,beem,barre,baptist,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,dao,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,arp,amburgey,yeary,yao,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,reza,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,nair,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,kees,iles,hunsicker,hornbuckle,holtzclaw,hirt,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foxx,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,deem,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,ayon,artrip,andujar,alkire,alder,agan,zukowski,zuckerman,zehr,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sok,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,rhode,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,noto,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,loe,lirette,lesperance,lefkowitz,ledger,lauzon,lain,lachapelle,kurz,klassen,keough,kempton,kaelin,jeffords,huot,hsieh,hoyer,horwitz,hopp,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,ebel,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,choy,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,behm,bauder,batt,barreras,aubuchon,anzalone,adamo,zerbe,wirt,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,sacks,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,oman,nowakowski,nace,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,loza,licata,leonhardt,lema,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hilt,hiebert,gros,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,epp,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,blau,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,tosh,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,sias,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mote,mossman,moor,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leopold,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,karg,kanter,hyer,houchin,hosley,hosler,hollon,holleman,heitman,hebb,haggins,gwaltney,guin,goulding,gorden,geraci,georges,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,eder,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,berk,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,vong,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,papp,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,mraz,monteith,milstead,milliner,mellen,mccardle,luft,liptak,lipp,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,garr,fuson,foye,feldmann,everly,dyess,dyal,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,boes,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiltshire,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,pyne,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,nies,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,leek,lamphere,laforge,kuo,koo,jourdan,ismail,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,fahy,ehrhardt,eggen,dusek,durrant,dubay,dones,dey,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,boon,bodie,blosser,blas,bise,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wile,wiebe,waguespack,vasser,upham,tyre,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,teed,styron,stahlman,staab,skiba,shih,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mutter,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,laub,kunze,kull,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,guss,grondin,grissett,greenawalt,gravel,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,daum,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,bork,boe,birkholz,berardi,benda,behnke,barter,auer,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,ruel,ropp,rogge,rettig,renwick,reidy,reider,redfield,quam,premo,peet,parente,paolucci,palmquist,orme,ohler,ogg,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,lipton,letson,lechuga,lazenby,lauria,larimore,kwok,kwak,krupp,krupa,krum,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,kays,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frew,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,ealy,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,bohl,bogdan,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,zeno,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,rine,ricard,restrepo,ralls,ragusa,quiroga,pero,pegg,pavlik,papenfuss,oropeza,okane,neer,nee,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,liss,linehan,leto,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,keo,kennett,kellett,kangas,janzen,hutter,huse,huling,hoss,hohn,hofmeister,hewes,hern,harjo,habib,gust,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fray,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,coll,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,bien,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,valera,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,pahl,orona,oberle,nocera,navas,nault,mullings,moos,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leis,leaks,lamarre,kost,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hile,hessler,hermanson,hepworth,henn,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,feld,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,birk,berthiaume,beahm,batres,basnight,backes,axtell,aust,atterberry,alvares,alt,alegria,yow,yip,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,sorg,simkins,shuey,shaul,servin,serio,serafin,salguero,saba,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,rigg,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,monks,mcveigh,mcgrady,mcgaughey,mccurley,masi,marchan,manske,maez,lusby,linde,lile,likens,licon,leroux,lemaire,legette,lax,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hasan,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,gose,goodner,ginsburg,gerth,gerner,fyfe,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,dake,craine,como,chesnut,casady,carstens,carrick,carino,carignan,canchola,cale,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borne,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vara,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,sowa,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabb,sabatini,ronan,rodiguez,riggleman,richins,reep,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,murph,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,liner,leff,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,hise,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,dyar,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chon,chivers,caudillo,catt,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette,bobadilla,boaz,blackledge,beshears,bernhard,bergeson,baver,barthel,balsamo,bak,aziz,awad,authement,altom,altieri,abels,zigler,zhu,younker,yeomans,yearwood,wurster,winget,whitsett,wechsler,weatherwax,wathen,warriner,wanamaker,walraven,viens,vandemark,vancamp,uchida,triana,tinoco,terpstra,tellis,tarin,taranto,takacs,studdard,struthers,strout,stiller,spataro,soderquist,sliger,silberman,shurtleff,sheetz,ritch,reif,raybon,ratzlaff,radley,putt,putney,pinette,piner,petrin,parise,osbourne,nyman,northington,noblitt,nishimura,neher,nalls,naccarato,mucha,mounce,miron,millis,meaney,mcnichols,mckinnis,mcjunkin,mcduffy,manrique,mannion,mangual,malveaux,mains,lumsden,lohmann,lipe,lightsey,lemasters,leist,laxton,laverriere,latorre,lamons,kral,kopf,knauer,kitt,kaul,karas,kamps,jusino,islam,hullinger,huges,hornung,hiser,hempel,helsel,hassinger,hargraves,hammes,hallberg,gutman,gumbs,gruver,graddy,gonsales,goncalves,glennon,gilford,geno,freshour,flippo,fifer,fason,farrish,fallin,ewert,estepp,escudero,ensminger,emberton,elms,ellerbe,eide,dysart,dougan,dierking,dicus,detrick,deroche,depue,demartino,delosreyes,dalke,culbreath,crownover,crisler,crass,corsi,chagnon,centers,cavanagh,casson,carollo,cadwallader,burnley,burciaga,burchard,broadhead,bolte,berens,bellman,bellard,baril,antonucci,wolfgram,winsor,wimbish,wier,wallach,viveros,vento,varley,vanslyke,vangorder,touchstone,tomko,tiemann,throop,tamura,talmadge,swayze,sturdevant,strauser,stolz,stenberg,stayton,spohn,spillers,spillane,sluss,slavens,simonetti,shofner,shead,senecal,seales,schueler,schley,schacht,sauve,sarno,salsbury,rothschild,rosier,rines,reveles,rein,redus,redfern,reck,ranney,raggs,prout,prill,preble,prager,plemons,pilon,piccirillo,pewitt,pesina,pecora,otani,orsini,oestreich,odea,ocallaghan,northup,niehaus,newberg,nasser,narron,monarrez,mishler,mcsherry,mcelfresh,mayon,mauer,mattice,marrone,marmolejo,marini,malm,machen,lunceford,loewen,liverman,litwin,linscott,levins,lenox,legaspi,leeman,leavy,lannon,lamson,lambdin,labarre,knouse,klemm,kleinschmidt,kirklin,keels,juliano,howser,hosier,hopwood,holyfield,hodnett,hirsh,heimann,heckel,harger,hamil,hajek,gurganus,gunning,grange,gonzalas,goggins,gerow,gaydos,garduno,ganley,galey,farner,engles,emond,emert,ellenburg,edick,duell,dorazio,dimond,diederich,depuy,dempster,demaria,dehoyos,dearth,dealba,czech,crose,crespin,cogdill,clinard,cipriano,chretien,cerny,ceniceros,celestin,caple,cacho,burrill,buhr,buckland,branam,boysen,bovee,boos,boler,blom,blasko,beyers,belz,belmonte,bednarz,beckmann,beaudin,bazile,barbeau,balentine,abrahams,zielke,yunker,yeates,wrobel,wike,whisnant,wherry,wagnon,vogan,vansant,vannest,vallo,ullery,towles,towell,thill,taormina,tannehill,taing,storrs,stickles,stetler,sparling,solt,silcox,sheard,shadle,seman,selleck,schlemmer,scher,sapien,sainz,roye,romain,rizzuto,resch,rentz,rasch,ranieri,purtell,primmer,portwood,pontius,pons,pletcher,pledger,pirkle,pillsbury,pentecost,paxson,ortez,oles,mullett,muirhead,mouzon,mork,mollett,mohn,mitcham,melillo,medders,mcmiller,mccleery,mccaughey,mak,maciejewski,macaulay,lute,lipman,lewter,larocque,langton,kriner,knipp,killeen,karn,kalish,kaczor,jonson,jerez,jarrard,janda,hymes,hollman,hollandsworth,holl,hobdy,hennen,hemmer,hagins,haddox,guitierrez,guernsey,gorsuch,gholson,genova,gazaway,gauna,gammons,freels,fonville,fetterman,fava,farquhar,farish,fabela,escoto,eisen,dossett,dority,dorfman,demmer,dehn,dawley,darbonne,damore,damm,crosley,cron,crompton,crichton,cotner,cordon,conerly,colvard,clauson,cheeseman,cavallaro,castille,cabello,burgan,buffum,bruss,brassfield,bowerman,bothwell,borgen,bonaparte,bombard,boivin,boissonneault,bogner,bodden,boan,bittinger,bickham,bedolla,bale,bainbridge,aybar,avendano,ashlock,amidon,almanzar,akridge,ackermann,zager,worrall,winans,wilsey,wightman,westrick,wenner,warne,warford,verville,utecht,upson,tuma,tseng,troncoso,trollinger,torbert,taulbee,sutterfield,stough,storch,stonebraker,stolle,stilson,stiefel,steptoe,stepney,stender,stemple,staggers,spurrier,spinney,spengler,smartt,skoog,silvis,sieg,shuford,selfridge,seguin,sedgwick,sease,scotti,schroer,schlenker,schill,savarese,sapienza,sanson,sandefur,salamone,rusnak,rudisill,rothermel,roca,resendiz,reliford,rasco,raiford,quisenberry,quijada,pullins,puccio,postell,poppe,pinter,piche,petrucci,pellegrin,pelaez,paton,pasco,parkes,paden,pabst,olmsted,newlon,mynatt,mower,morrone,moree,moffat,mixson,minner,millette,mederos,mcgahan,mcconville,maughan,massingill,marano,macri,lovern,lichtenstein,leonetti,lehner,lawley,laramie,lappin,lahti,lago,lacayo,kuester,kincade,juhl,jiron,jessop,jarosz,jain,hults,hoge,hodgins,hoban,hinkson,hillyard,herzig,hervey,henriksen,hawker,hause,hankerson,gregson,golliday,gilcrease,gessner,gerace,garwood,garst,gaillard,flinchum,fishel,fishback,filkins,fentress,fabre,ethier,eisner,ehrhart,efird,drennon,dominy,domingue,dipaolo,dinan,dimartino,deskins,dengler,defreitas,defranco,dahlin,cutshaw,cuthbert,croyle,crothers,critchfield,cowie,costner,coppedge,copes,ciccone,caufield,capo,cambron,cambridge,buser,burnes,buhl,buendia,brindley,brecht,bourgoin,blackshire,birge,benninger,bembry,beil,begaye,barrentine,banton,balmer,baity,auerbach,ambler,alexandre,ackerson,zurcher,zell,wynkoop,wallick,waid,vos,vizcaino,vester,veale,vandermark,vanderford,tuthill,trivette,thiessen,tewksbury,tao,tabron,swasey,swanigan,stoughton,stoudt,stimson,stecker,stead,spady,souther,smoak,sklar,simcox,sidwell,seybert,sesco,seeman,schwenk,schmeling,rossignol,robillard,robicheaux,riveria,rippeon,ridgley,remaley,rehkop,reddish,rauscher,quirion,pusey,pruden,pressler,potvin,pospisil,paradiso,pangburn,palmateer,ownby,otwell,osterberg,osmond,olsson,oberlander,nusbaum,novack,nokes,nicastro,nehls,naber,mulhern,motter,moretz,milian,mckeel,mcclay,mccart,matsuda,martucci,marple,marko,marciniak,manes,mancia,macrae,lybarger,lint,lineberger,levingston,lecroy,lattimer,laseter,kulick,krier,knutsen,klem,kinne,kinkade,ketterman,kerstetter,kersten,karam,joshi,jent,jefcoat,hillier,hillhouse,hettinger,henthorn,henline,helzer,heitzman,heineman,heenan,haughton,haris,harbert,haman,grinstead,gremillion,gorby,giraldo,gioia,gerardi,geraghty,gaunt,gatson,gardin,gans,gammill,friedlander,frahm,fossett,fosdick,forbush,fondren,fleckenstein,fitchett,filer,feliz,feist,ewart,esters,elsner,edgin,easterly,dussault,durazo,devereaux,deshotel,deckert,dargan,cornman,conkle,condit,claunch,clabaugh,cheesman,chea,charney,casella,carone,carbonell,canipe,campana,calles,cabezas,cabell,buttram,bustillos,buskirk,boyland,bourke,blakeley,berumen,berrier,belli,behrendt,baumbach,bartsch,baney,arambula,alldredge,allbritton,ziemba,zanders,youngquist,yoshioka,yohe,wunder,woodfin,wojtowicz,winkel,wilmore,willbanks,wesolowski,wendland,walko,votaw,vanek,uriarte,urbano,turnipseed,triche,trautman,towler,tokarz,temples,tefft,teegarden,syed,swigart,stoller,stapler,stansfield,smit,smelley,sicard,shulman,shew,shear,sheahan,sharpton,selvidge,schlesinger,savell,sandford,sabatino,rosenbloom,roepke,rish,rhames,renken,reger,quarterman,puig,prasad,poplar,pizano,pigott,phair,petrick,patt,pascua,paramore,papineau,olivieri,ogren,norden,noga,nisbet,munk,morvant,moro,moloney,merz,meltzer,mellinger,mehl,mcnealy,mckernan,mchaney,mccleskey,mcandrews,mayton,markert,maresca,maner,mandujano,malpass,macintyre,lytton,lyall,lummus,longshore,longfellow,lokey,locher,leverette,lepe,lefever,leeson,lederer,lampert,lagrone,kreider,korth,knopf,kleist,keltner,kelling,kaspar,kappler,josephs,huckins,holub,hofstetter,hoehn,higginson,hennings,heid,havel,hauer,harnden,hargreaves,hanger,guild,guidi,grate,grandy,grandstaff,goza,goodridge,goodfellow,goggans,godley,giusti,gilyard,geoghegan,galyon,gaeta,funes,font,flanary,fales,erlandson,ellett,edinger,dziedzic,duerr,draughn,donoho,dimatteo,devos,dematteo,degnan,darlington,danis,dahlstrom,dahlke,czajkowski,cumbie,culbert,crosier,croley,corry,clinger,chalker,cephas,caywood,capehart,cales,cadiz,bussiere,burriss,burkart,brundidge,bronstein,bradt,boydston,bostrom,borel,bolles,blay,blackwelder,bissett,bevers,bester,bernardino,benefiel,belote,beedle,beckles,baysinger,bassler,bartee,barlett,bargas,barefield,baptista,arterburn,armas,apperson,amoroso,amedee,zullo,zellner,yelton,willems,wilkin,wiggin,widman,welk,weingarten,walla,viers,vess,verdi,veazey,vannote,tullos,trudell,trower,trosper,trimm,trew,tousignant,topp,tocco,thoreson,terhune,tatom,suniga,sumter,steeves,stansell,soltis,sloss,slaven,shisler,shanley,servantes,selders,segrest,seese,seeber,schaible,savala,sartor,rutt,rumbaugh,ruis,roten,roessler,ritenour,riney,restivo,renard,rakestraw,rake,quiros,pullin,prudhomme,primeaux,prestridge,presswood,ponte,polzin,poarch,pittenger,piggott,pickell,phaneuf,parvin,parmley,palmeri,ozment,ormond,ordaz,ono,olea,obanion,oakman,novick,nicklas,nemec,nappi,mund,morfin,mera,melgoza,melby,mcgoldrick,mcelwain,mcchristian,mccaw,marquart,marlatt,markovich,mahr,lupton,lucus,lorusso,lerman,leddy,leaman,leachman,lavalle,laduke,kummer,koury,konopka,koh,koepp,kloss,klock,khalil,kernan,kappel,jakes,inoue,hutsell,howle,honore,hockman,hockaday,hiltz,hetherington,hesser,hershman,heffron,headen,haskett,hartline,harned,guillemette,guglielmo,guercio,greenbaum,goris,glines,gilmour,gardella,gadd,gabler,gabbert,fuselier,freudenburg,fragoso,follis,flemings,feltman,febus,farren,fallis,evert,ekstrom,eastridge,dyck,dufault,dubreuil,drapeau,domingues,dolezal,dinkel,didonato,devitt,demott,daughtrey,daubert,das,creason,crary,costilla,chipps,cheatwood,carmean,canton,caffrey,burgher,buker,brunk,brodbeck,brantner,bolivar,boerner,bodkin,biel,bencomo,bellino,beliveau,beauvais,beaupre,baylis,baskett,barcus,baltz,asay,arney,arcuri,ankney,agostini,addy,zwilling,zubia,zollinger,zeitz,yanes,winship,winningham,wickline,webre,waddington,vosburgh,verrett,varnum,vandeventer,vacca,usry,towry,touchet,tookes,tonkin,timko,tibbitts,thedford,tarleton,talty,talamantez,tafolla,sugg,strecker,steffan,spiva,slape,shatzer,seyler,seamans,schmaltz,schipper,sasso,ruppe,roudebush,riemer,richarson,revilla,reichenbach,ratley,railsback,quayle,poplin,poorman,ponton,pollitt,poitras,piscitelli,piedra,pew,perera,penwell,pelt,parkhill,paladino,ore,oram,olmo,oliveras,olivarria,ogorman,naron,muncie,mowbray,morones,moretti,monn,mitts,minks,minarik,mimms,milliron,millington,millhouse,messersmith,mcnett,mckinstry,mcgeorge,mcdill,mcateer,mazzeo,matchett,mahood,mabery,lundell,louden,losoya,lisk,lezama,leib,lebo,lanoue,lanford,lafortune,kump,krone,kreps,kott,kopecky,kolodziej,kinman,kimmons,kelty,kaster,karlson,kania,joyal,jenner,jasinski,jandreau,isenhour,hunziker,huhn,houde,houchins,holtman,hodo,heyman,hentges,hedberg,hayne,haycraft,harshbarger,harshaw,harriss,haring,hansell,hanford,handler,hamblen,gunnell,groat,gorecki,gochenour,gleeson,genest,geiser,fulghum,friese,fridley,freeborn,frailey,flaugher,fiala,ettinger,etheredge,espitia,eriksen,engelbrecht,engebretson,elie,eickhoff,edney,edelen,eberhard,eastin,eakes,driggs,doner,donaghy,disalvo,deshong,dahms,dahlquist,curren,cripe,cree,creager,corle,conatser,commons,coggin,coder,coaxum,closson,clodfelter,classen,chittenden,castilleja,casale,cartee,carriere,canup,canizales,burgoon,bunger,bugarin,buchanon,bruning,bruck,brookes,broadwell,brier,brekke,breese,bracero,bowley,bowersox,bose,bogar,blauser,blacker,bjorklund,baumer,basler,baize,baden,auman,amundsen,amore,alvarenga,adamczyk,yerkes,yerby,yamaguchi,worthey,wolk,wixom,wiersma,wieczorek,whiddon,weyer,wetherington,wein,watchman,warf,wansley,vesely,velazco,vannorman,valasquez,utz,urso,turco,turbeville,trivett,toothaker,toohey,tondreau,thaler,sylvain,swindler,swigert,swider,stiner,stever,steffes,stampley,stair,smidt,skeete,silvestre,shutts,shealey,seigler,schweizer,schuldt,schlichting,scherr,saulsberry,saner,rosin,rosato,roling,rohn,rix,rister,remley,remick,recinos,ramm,raabe,pursell,poythress,poli,pokorny,pettry,petrey,petitt,penman,payson,paquet,pappalardo,outland,orenstein,nuttall,nuckols,nott,nimmo,murtagh,mousseau,moulder,mooneyhan,moak,minch,miera,mercuri,meighan,mcnelly,mcguffin,mccreery,mcclaskey,mainor,luongo,lundstrom,loughman,lobb,linhart,lever,leu,leiter,lehoux,lehn,lares,lapan,langhorne,lamon,ladwig,ladson,kuzma,kreitzer,knop,keech,kea,kadlec,jhonson,jantz,inglis,husk,hulme,housel,hofman,hillery,heidenreich,heaps,haslett,harting,hartig,hamler,halton,hallum,gutierres,guida,guerrier,grossi,gress,greenhalgh,gravelle,gow,goslin,gonyea,gipe,gerstner,gasser,garceau,gannaway,gama,gallop,gaiser,fullilove,foutz,fossum,flannagan,farrior,faller,ericksen,entrekin,enochs,englund,ellenberger,eastland,earwood,dudash,drozd,desoto,delph,dekker,dejohn,degarmo,defeo,defalco,deblois,dacus,cudd,crossen,crooms,cronan,costin,cordray,comerford,colegrove,coldwell,claassen,chartrand,castiglione,carte,cardella,carberry,capp,capobianco,cangelosi,buch,brunell,brucker,brockett,brizendine,brinegar,brimer,brase,bosque,bonk,bolger,bohanon,bohan,blazek,berning,bergan,bennette,beauchemin,battiste,barra,balogh,avallone,aubry,ashcroft,asencio,arledge,anchondo,alvord,acheson,zaleski,yonker,wyss,wycoff,woodburn,wininger,winders,willmon,wiechmann,westley,weatherholt,warnick,wardle,warburton,volkert,villanveva,veit,vass,vanallen,tung,toribio,toothman,tiggs,thornsberry,thome,tepper,teeple,tebo,tassone,tann,stucker,stotler,stoneman,stehle,stanback,stallcup,spurr,speers,spada,solum,smolen,sinn,silvernail,sholes,shives,shain,secrest,seagle,schuette,schoch,schnieders,schild,schiavone,schiavo,scharff,santee,sandell,salvo,rollings,rivenburg,ritzman,rist,reynosa,retana,regnier,rarick,ransome,rall,propes,prall,poyner,ponds,poitra,pippins,pinion,phu,perillo,penrose,pendergraft,pelchat,patenaude,palko,odoms,oddo,novoa,noone,newburn,negri,nantz,mosser,moshier,molter,molinari,moler,millman,meurer,mendel,mcray,mcnicholas,mcnerney,mckillip,mcilvain,mcadory,marmol,marinez,manzer,mankin,makris,majeski,maffei,luoma,luman,luebke,luby,lomonaco,loar,litchford,lintz,licht,levenson,legge,lanigan,krom,kreger,koop,kober,klima,kitterman,kinkead,kimbell,kilian,kibbe,kendig,kemmer,kash,jenkin,inniss,hurlbut,hunsucker,huckabee,hoxie,hoglund,hockensmith,hoadley,hinkel,higuera,herrman,heiner,hausmann,haubrich,hassen,hanlin,hallinan,haglund,hagberg,gullo,gullion,groner,greenwalt,gobert,glowacki,glessner,gines,gildersleeve,gildea,gerke,gebhard,gatton,gately,galasso,fralick,fouse,fluharty,faucette,fairfax,evanoff,elser,ellard,egerton,ector,ebling,dunkel,duhart,drysdale,dostal,dorey,dolph,doles,dismukes,digregorio,digby,dewees,deramus,denniston,dennett,deloney,delaughter,cuneo,cumberland,crotts,crosswhite,cremeans,creasey,cottman,cothern,costales,cosner,corpus,colligan,cobble,clutter,chupp,chevez,chatmon,chaires,caplan,caffee,cabana,burrough,burditt,buckler,brunswick,brouillard,broady,bowlby,bouley,borgman,boltz,boddy,blackston,birdsell,bedgood,bate,bartos,barriga,barna,barcenas,banach,baccus,auclair,ashman,arter,arendt,ansell,allums,allender,alber,albarran,adelson,zoll,wysong,wimbley,wildes,whitis,whitehill,whicker,weymouth,weldy,wark,wareham,waddy,viveiros,vath,vandoren,vanderhoof,unrein,uecker,tsan,trepanier,tregre,torkelson,tobler,tineo,timmer,swopes,swofford,sweeten,swarts,summerfield,sumler,stucky,strozier,stigall,stickel,stennis,stelzer,steely,slayden,skillern,shurtz,shelor,shellenbarger,shand,shabazz,seo,scroggs,schwandt,schrecengost,schoenrock,schirmer,sandridge,ruzicka,rozek,rowlands,roser,rosendahl,romanowski,rolston,riggio,reichman,redondo,reay,rawlinson,raskin,raine,quandt,purpura,pruneda,prevatte,prettyman,pinedo,pierro,pidgeon,phillippi,pfeil,penix,peasley,paro,ospina,ortegon,ogata,ogara,normandin,nordman,nims,nassar,motz,morlan,mooring,moles,moir,mizrahi,mire,minaya,millwood,mikula,messmer,meikle,mctaggart,mcgonagle,mcewan,mccasland,mccane,mccaffery,mcalexander,mattocks,matranga,martone,markland,maravilla,manno,mancha,mallery,magno,lorentz,locklin,livingstone,lipford,lininger,lepley,leming,lemelin,leadbetter,lawhon,lattin,langworthy,lampman,lambeth,lamarr,lahey,krajewski,klopp,kinnison,kestner,kennell,karim,jozwiak,jakubowski,ivery,iliff,iddings,hudkins,houseman,holz,holderman,hoehne,highfill,hiett,heskett,heldt,hedman,hayslett,hatchell,hasse,hamon,hamada,hakala,haislip,haffey,hackbarth,guo,gullickson,guerrette,greenblatt,goudreau,gongora,godbout,glaude,gills,gillison,gigliotti,gargano,gallucci,galli,galante,frasure,fodor,fizer,fishburn,finkbeiner,finck,fager,estey,espiritu,eppinger,epperly,emig,eckley,dray,dorsch,dille,devita,deslauriers,demery,delorme,delbosque,dauphin,dantonio,curd,crume,cozad,cossette,comacho,climer,chadbourne,cespedes,cayton,castaldo,carpino,carls,capozzi,canela,buzard,busick,burlison,brinkmann,bridgeforth,bourbeau,bornstein,bonfiglio,boice,boese,biondi,bilski,betton,berwick,berlanga,behan,becraft,barrientez,banh,balke,balderrama,bahe,bachand,armer,arceo,aliff,alatorre,zermeno,younce,yeoman,yamasaki,wroten,woodby,winer,willits,wilcoxon,wehmeyer,waterbury,wass,wann,wachtel,vizcarra,veitch,vanderbilt,vallone,vallery,ureno,tyer,tipps,tiedeman,theberge,texeira,taub,tapscott,stutts,stults,stukes,spink,sottile,smithwick,slane,simeone,silvester,siegrist,shiffer,sheedy,sheaffer,severin,sellman,scotto,schupp,schueller,schreier,schoolcraft,schoenberger,schnabel,sangster,samford,saliba,ryles,ryans,rossetti,rodriguz,risch,riel,rezendes,rester,rencher,recker,rathjen,profitt,poteete,polizzi,perrigo,patridge,osby,orvis,opperman,oppenheim,onorato,olaughlin,ohagan,ogles,oehler,obyrne,nuzzo,nickle,nease,neagle,navarette,nagata,musto,morison,montz,mogensen,mizer,miraglia,migliore,menges,mellor,mcnear,mcnab,mcloud,mcelligott,mccollom,maynes,marquette,markowski,marcantonio,maldanado,macey,lundeen,longino,lisle,linthicum,limones,lesure,lesage,lauver,laubach,latshaw,lary,lapham,lacoste,lacher,kutcher,knickerbocker,klos,klingler,kleiman,kittleson,kimbrel,kemmerer,kelson,keese,kallas,jurgensen,junkins,juergens,jolliff,jelks,janicki,jang,ingles,huguley,huggard,howton,hone,holford,hogle,hipple,heimbach,heider,heidel,havener,hattaway,harrah,hanscom,hankinson,hamdan,gridley,goulette,goulart,goodrow,girardi,gent,gautreau,gandara,gamblin,galipeau,fyffe,furrow,fulp,fricks,frase,frandsen,fout,foulks,fouche,foskey,forgey,foor,fobbs,finklea,fincham,figueiredo,festa,ferrier,fellman,eslick,eilerman,eckart,eaglin,dunfee,dumond,drewry,douse,dimick,diener,dickert,deines,declue,daw,dattilo,danko,custodio,cuccia,crunk,crispin,corp,corea,coppin,considine,coniglio,conboy,cockrum,clute,clewis,christiano,channell,cerrato,cecere,catoe,castillon,castile,carstarphen,carmouche,caperton,buteau,bumpers,brey,brazeal,brassard,braga,bradham,bourget,borrelli,borba,boothby,bohr,bohm,boehme,bodin,bloss,blocher,bizzell,bieker,berthelot,bernardini,berends,benard,belser,baze,bartling,barrientes,barras,barcia,banfield,aurand,artman,arnott,arend,amon,almaguer,allee,albarado,alameda,abdo,zuehlke,zoeller,yokoyama,yocom,wyllie,woolum,wint,winland,wilner,wilmes,whitlatch,westervelt,walthall,walkowiak,walburn,viviano,vanderhoff,valez,ugalde,trumbull,todaro,tilford,tidd,tibbits,terranova,templeman,tannenbaum,talmage,tabarez,swearengin,swartwood,svendsen,strum,strack,storie,stockard,steinbeck,starns,stanko,stankiewicz,stacks,stach,sproles,spenser,smotherman,slusser,sinha,silber,siefert,siddiqui,shuff,sherburne,seldon,seddon,schweigert,schroeter,schmucker,saffold,rutz,rundle,rosinski,rosenow,rogalski,ridout,rhymer,replogle,raygoza,ratner,rascoe,rahm,quast,pressnell,predmore,pou,porto,pleasants,pigford,pavone,patnaude,parramore,papadopoulos,palmatier,ouzts,oshields,ortis,olmeda,olden,okamoto,norby,nitz,niebuhr,nevius,neiman,neidig,neece,murawski,mroz,moylan,moultry,mosteller,moring,morganti,mook,moffet,mettler,merlo,mengel,mendelsohn,meli,melchior,mcmeans,mcfaddin,mccullers,mccollister,mccloy,mcclaine,maury,maser,martelli,manthey,malkin,maio,magwood,maginnis,mabon,luton,lusher,lucht,lobato,levis,letellier,legendre,latson,larmon,largo,landreneau,landgraf,lamberson,kurland,kresge,korman,korando,klapper,kitson,kinyon,kincheloe,kawamoto,kawakami,jenney,jeanpierre,ivers,issa,ince,hollier,hollars,hoerner,hodgkinson,hiott,hibbitts,herlihy,henricks,heavner,hayhurst,harvill,harewood,hanselman,hanning,gustavson,grizzard,graybeal,gravley,gorney,goll,goehring,godines,gobeil,glickman,giuliano,gimbel,geib,gayhart,gatti,gains,gadberry,frei,fraise,fouch,forst,forsman,folden,fogleman,fetty,feely,fabry,eury,estill,epling,elamin,echavarria,dutil,duryea,dumais,drago,downard,douthit,doolin,dobos,dison,dinges,diebold,desilets,deshazo,depaz,degennaro,dall,cyphers,cryer,croce,crisman,credle,coriell,copp,compos,colmenero,cogar,carnevale,campanella,caley,calderone,burtch,brouwer,brehmer,brassell,brafford,bourquin,bourn,bohnert,blewett,blass,blakes,bhakta,besser,berge,bellis,balfour,avera,applin,ammon,alsop,aleshire,akbar,zoller,zapien,wymore,wyble,wolken,wix,wickstrom,whobrey,whigham,westerlund,welsch,weisser,weisner,weinstock,wehner,watlington,wakeland,wafer,victorino,veltri,veith,urich,uresti,umberger,twedt,tuohy,tschida,trumble,troia,trimmer,topps,tonn,tiernan,threet,thrall,thetford,teneyck,tartaglia,strohl,streater,strausbaugh,stradley,stonecipher,steadham,stansel,stalcup,stabile,sprenger,spradley,speier,southwood,sorrels,slezak,skow,sirmans,simental,sifford,sievert,shover,sheley,selzer,scriven,schwindt,schwan,schroth,saylors,saragosa,sant,salaam,saephan,routt,rousey,ros,rolfes,rieke,rieder,richeson,redinger,rasnick,rapoza,rambert,quist,pyron,pullman,przybylski,pridmore,pooley,pines,perkinson,perine,perham,pecor,peavler,partington,panton,oliverio,olague,ohman,ohearn,noyola,nicolai,nebel,murtha,mowrey,moroney,morgenstern,morant,monsour,moffit,mijares,meriwether,mendieta,melendrez,mejorado,mckittrick,mckey,mckenny,mckelvy,mcelvain,mccoin,mazzarella,mazon,maurin,matthies,maston,maske,marzano,marmon,marburger,mangus,mangino,mallet,luo,losada,londono,lobdell,lipson,lesniak,leighty,lei,lavallie,lareau,laperle,lape,laforce,laffey,kuehner,kravitz,kowalsky,kohr,kinsman,keppler,kennemer,keiper,kaler,jun,jelinek,jarnagin,isakson,hypes,hutzler,huls,horak,hitz,hice,herrell,henslee,heitz,heiss,heiman,hasting,hartwick,harmer,hammontree,hakes,guse,guillotte,groleau,greve,greenough,golub,golson,goldschmidt,golder,godbolt,gilmartin,gies,gibby,geren,genthner,gendreau,gemmill,gaymon,galyean,galeano,friar,folkerts,fleeman,fitzgibbons,ferranti,felan,farrand,eoff,enger,engels,ducksworth,duby,drumheller,douthitt,donis,dixion,dittrich,dials,descoteaux,depaul,denker,demuth,demelo,delacerda,deforge,danos,dalley,daigneault,cybulski,cothren,corns,corkery,copas,clubb,clore,chitty,chichester,chace,catanzaro,castonguay,cassella,carlberg,cammarata,calle,cajigas,byas,buzbee,busey,burling,bufkin,brzezinski,brun,brickner,brabham,boller,bockman,bleich,blakeman,bisbee,bier,bezanson,bevilacqua,besaw,berrian,bequette,beauford,baumgarten,baudoin,batie,basaldua,bardin,bangert,banes,backlund,avitia,artz,archey,apel,amico,alam,aden,zebrowski,yokota,wormley,wootton,womac,wiltz,wigington,whitehorn,whisman,weisgerber,weigle,weedman,watkin,wasilewski,wadlington,wadkins,viverette,vidaurri,vidales,vezina,vanleer,vanhoy,vanguilder,vanbrunt,updegraff,tylor,trinkle,touchette,tilson,tilman,tengan,tarkington,surrett,summy,streetman,straughter,steere,spruell,spadaro,solley,smathers,silvera,siems,shreffler,sholar,selden,schaper,samayoa,ruggeri,rowen,rosso,rosenbalm,roose,ronquillo,rogowski,rexford,repass,renzi,renick,rehberg,ranck,raffa,rackers,raap,puglisi,prinz,pounders,pon,pompa,plasencia,pipkins,petrosky,pelley,pauls,pauli,parkison,parisien,pangle,pancoast,palazzolo,owenby,overbay,orris,orlowski,nipp,newbern,nedd,nealon,najar,mysliwiec,myres,musson,murrieta,munsell,mumma,muldowney,moyle,mowen,morejon,moodie,monier,mikkelsen,miers,metzinger,melin,mcquay,mcpeek,mcneeley,mcglothin,mcghie,mcdonell,mccumber,mccranie,mcbean,mayhugh,marts,marenco,manges,lynam,lupien,luff,luebbert,loh,loflin,lococo,loch,lis,linke,lightle,lewellyn,leishman,lebow,lebouef,leanos,lanz,landy,landaverde,lacefield,kyler,kuebler,kropf,kroeker,kluesner,klass,kimberling,kilkenny,kiker,ketter,kelemen,keasler,kawamura,karst,kardos,igo,huseman,huseby,hurlbert,huard,hottinger,hornberger,hopps,holdsworth,hensen,heilig,heeter,harpole,haak,gutowski,gunnels,grimmer,gravatt,granderson,gotcher,gleaves,genao,garfinkel,frerichs,foushee,flanery,finnie,feldt,fagin,ewalt,ellefson,eiler,eckhart,eastep,digirolamo,didomenico,devera,delavega,defilippo,debusk,daub,damiani,cupples,crofoot,courter,coto,costigan,corning,corman,corlett,cooperman,collison,coghlan,cobbins,coady,coachman,clothier,cipolla,chmielewski,chiodo,chatterton,chappelle,chairez,ceron,casperson,casler,casados,carrow,carlino,carico,cardillo,caouette,canto,canavan,cambra,byard,buterbaugh,buse,bucy,buckwalter,bubb,bryd,brissette,brault,bradwell,boshears,borchert,blansett,biondo,biehl,bessey,belles,beeks,beekman,beaufort,bayliss,bardsley,avilla,astudillo,ardito,antunez,aderholt,abate,yowell,yin,yearby,wurst,woolverton,woolbright,wildermuth,whittenburg,whitely,wetherbee,wenz,welliver,welling,wason,warlick,voorhies,vivier,villines,verde,veiga,varghese,vanwyk,vanwingerden,vanhorne,umstead,twiggs,tusing,trego,tompson,tinkle,thoman,thole,tatman,tartt,suda,studley,strock,strawbridge,stokely,stec,stalter,speidel,spafford,sontag,sokolowski,skillman,skelley,skalski,sison,sippel,sinquefield,siegle,sher,sharrow,setliff,sellner,selig,seibold,seery,scriber,schull,schrupp,schippers,saulsbury,sao,santillo,sanor,rubalcaba,roosa,ronk,robbs,roache,riebe,reinoso,quin,preuss,pottorff,pontiff,plouffe,picou,picklesimer,pettyjohn,petti,penaloza,parmelee,pardee,palazzo,overholt,ogawa,ofarrell,nolting,noda,nickson,nevitt,neveu,navarre,murrow,munz,mulloy,monzo,milliman,metivier,merlino,mcpeters,mckissack,mckeen,mcgurk,mcfee,mcfarren,mcelwee,mceachin,mcdonagh,mccarville,mayhall,mattoon,martello,marconi,marbury,manzella,maly,malec,maitland,maheu,maclennan,lyke,luera,lowenstein,losh,lopiccolo,longacre,loman,loden,loaiza,lieber,libbey,lenhardt,lefebre,lauterbach,lauritsen,lass,larocco,larimer,lansford,lanclos,lamay,lal,kulikowski,kriebel,kosinski,kleinman,kleiner,kleckner,kistner,kissner,kissell,keisler,keeble,keaney,kale,joly,jimison,ikner,hursey,hruska,hove,hou,hosking,hoose,holle,hoeppner,hittle,hitchens,hirth,hinerman,higby,hertzog,hentz,hensler,heier,hegg,hassel,harpe,hara,hain,hagopian,grimshaw,grado,gowin,gowans,googe,goodlow,goering,gleaton,gidley,giannone,gascon,garneau,gambrel,galaz,fuentez,frisina,fresquez,fraher,feuerstein,felten,everman,ertel,erazo,ensign,endo,ellerman,eichorn,edgell,ebron,eaker,dundas,duncanson,duchene,ducan,dombroski,doman,dickison,dewoody,deloera,delahoussaye,dejean,degroat,decaro,dearmond,dashner,dales,crossett,cressey,cowger,cornette,corbo,coplin,coover,condie,cokley,ceaser,cannaday,callanan,cadle,buscher,bullion,bucklin,bruening,bruckner,brose,branan,bradway,botsford,bortz,borelli,bonetti,bolan,boerger,bloomberg,bingman,bilger,berns,beringer,beres,beets,beede,beaudet,beachum,baughn,bator,bastien,basquez,barreiro,barga,baratta,balser,baillie,axford,attebery,arakaki,annunziata,andrzejewski,ament,amendola,adcox,abril,zenon,zeitler,zambrana,ybanez,yagi,wolak,wilcoxson,whitesel,whitehair,weyand,westendorf,welke,weinmann,weesner,weekes,wedel,weatherall,warthen,vose,villalta,viator,vaz,valtierra,urbanek,tulley,trojanowski,trapani,toups,torpey,tomita,tindal,tieman,tevis,tedrow,taul,tash,tammaro,sylva,swiderski,sweeting,sund,stutler,stich,sterns,stegner,stalder,splawn,speirs,southwell,soltys,smead,slye,skipworth,sipos,simmerman,sidhu,shuffler,shingleton,shadwick,sermons,seefeldt,scipio,schwanke,schreffler,schiro,scheiber,sandoz,samsel,ruddell,royse,rouillard,rotella,rosalez,romriell,rizer,riner,rickards,rhoton,rhem,reppert,rayl,raulston,raposo,rainville,radel,quinney,purdie,pizzo,pincus,petrus,pendelton,pendarvis,peltz,peguero,peete,patricio,patchett,parrino,papke,palafox,ottley,ostby,oritz,ogan,odegaard,oatman,noell,nicoll,newhall,newbill,netzer,nettleton,neblett,murley,mungo,mulhall,mosca,morissette,morford,monsen,mitzel,miskell,minder,mehaffey,mcquillen,mclennan,mcgrail,mccreight,mayville,maysonet,maust,mathieson,mastrangelo,maskell,manz,malmberg,makela,madruga,lotts,longnecker,logston,littell,liska,lindauer,lillibridge,levron,letchworth,lesh,leffel,leday,leamon,kulas,kula,kucharski,kromer,kraatz,konieczny,konen,komar,kivett,kirts,kinnear,kersh,keithley,keifer,judah,jimenes,jeppesen,jansson,huntsberry,hund,huitt,huffine,hosford,holmstrom,hollen,hodgin,hirschman,hiltner,hilliker,hibner,hennis,helt,heidelberg,heger,heer,hartness,hardrick,halladay,gula,guillaume,guerriero,grunewald,grosse,griffeth,grenz,grassi,grandison,ginther,gimenez,gillingham,gillham,gess,gelman,gearheart,gaskell,gariepy,gamino,gallien,galentine,fuquay,froman,froelich,friedel,foos,fomby,focht,flythe,fiqueroa,filson,filip,fierros,fett,fedele,fasching,farney,fargo,everts,etzel,elzey,eichner,eger,eatman,ducker,duchesne,donati,domenech,dollard,dodrill,dinapoli,denn,delfino,delcid,delaune,delatte,deems,daluz,cusson,cullison,cuadrado,crumrine,cruickshank,crosland,croll,criddle,crepeau,coutu,couey,cort,coppinger,collman,cockburn,coca,clayborne,claflin,cissell,chowdhury,chicoine,chenier,causby,caulder,cassano,casner,cardiel,brunton,bruch,broxton,brosius,brooking,branco,bracco,bourgault,bosserman,bonet,bolds,bolander,bohman,boelter,blohm,blea,blaise,bischof,beus,bellew,bastarache,bast,bartolome,barcomb,barco,balk,balas,bakos,avey,atnip,ashbrook,arno,arbour,aquirre,appell,aldaco,alban,ahlstrom,abadie,zylstra,zick,yother,wyse,wunsch,whitty,weist,vrooman,villalon,vidrio,vavra,vasbinder,vanmatre,vandorn,ugarte,turberville,tuel,trogdon,toupin,toone,tolleson,tinkham,tinch,tiano,teston,teer,tawney,taplin,tant,tansey,swayne,sutcliffe,sunderman,strothers,stromain,stork,stoneburner,stolte,stolp,stoehr,stingley,stegman,stangl,spinella,spier,soules,sommerfield,sipp,simek,siders,shufelt,shue,shor,shires,shellenberger,sheely,sepe,seaberg,schwing,scherrer,scalzo,sasse,sarvis,santora,sansbury,salls,saleem,ryland,rybicki,ruggieri,rothenberg,rosenstein,roquemore,rollison,rodden,rivet,ridlon,riche,riccardi,reiley,regner,rech,rayo,raff,radabaugh,quon,quill,privette,prange,pickrell,perino,penning,pankratz,orlandi,nyquist,norrell,noren,naples,nale,nakashima,musselwhite,murrin,murch,mullinix,mullican,mullan,morneau,mondor,molinar,minjares,minix,minchew,milewski,mikkelson,mifflin,merkley,meis,meas,mcroy,mcphearson,mcneel,mcmunn,mcmorrow,mcdorman,mccroskey,mccoll,mcclusky,mcclaran,mccampbell,mazzariello,mauzy,mauch,mastro,martinek,marsala,marcantel,mahle,luciani,lubbers,lobel,linch,liller,legros,layden,lapine,lansberry,lage,laforest,labriola,koga,knupp,klimek,kittinger,kirchoff,kinzel,killinger,kilbourne,ketner,kepley,kemble,kells,kear,kaya,karsten,kaneshiro,kamm,joines,joachim,jacobus,iler,holgate,hoar,hisey,hird,hilyard,heslin,herzberg,hennigan,hegland,hartl,haner,handel,gualtieri,greenly,grasser,goetsch,godbold,gilland,gidney,gibney,giancola,gettinger,garzon,galle,galgano,gaier,gaertner,fuston,freel,fortes,fiorillo,figgs,fenstermacher,fedler,facer,fabiano,evins,euler,esquer,enyeart,elem,eich,edgerly,durocher,durgan,duffin,drolet,drewes,dotts,dossantos,dockins,dirksen,difiore,dierks,dickerman,dery,denault,demaree,delmonte,delcambre,daulton,darst,dahle,curnutt,cully,culligan,cueva,crosslin,croskey,cromartie,crofts,covin,coutee,coppa,coogan,condrey,concannon,coger,cloer,clatterbuck,cieslak,chumbley,choudhury,chiaramonte,charboneau,carneal,cappello,campisi,callicoat,burgoyne,bucholz,brumback,brosnan,brogden,broder,brendle,breece,bown,bou,boser,bondy,bolster,boll,bluford,blandon,biscoe,bevill,bence,battin,basel,bartram,barnaby,barmore,balbuena,badgley,backstrom,auyeung,ater,arrellano,arant,ansari,alling,alejandre,alcock,alaimo,aguinaldo,aarons,zurita,zeiger,zawacki,yutzy,yarger,wygant,wurm,wuest,witherell,wisneski,whitby,whelchel,weisz,weisinger,weishaar,wehr,waxman,waldschmidt,walck,waggener,vosburg,villela,vercher,venters,vanscyoc,vandyne,valenza,utt,urick,ungar,ulm,tumlin,tsao,tryon,trudel,treiber,tober,tipler,tillson,tiedemann,thornley,tetrault,temme,tarrance,tackitt,sykora,sweetman,swatzell,sutliff,suhr,sturtz,strub,strayhorn,stormer,steveson,stengel,steinfeldt,spiro,spieker,speth,spero,soza,souliere,soucie,snedeker,slifer,skillings,situ,siniard,simeon,signorelli,siggers,shultis,shrewsbury,shippee,shimp,shepler,sharpless,shadrick,severt,severs,semon,semmes,seiter,segers,sclafani,sciortino,schroyer,schrack,schoenberg,schober,scheidt,scheele,satter,sartori,sarratt,salvaggio,saladino,sakamoto,saine,ryman,rumley,ruggerio,rucks,roughton,robards,ricca,rexroad,resler,reny,rentschler,redrick,redick,reagle,raymo,raker,racette,pyburn,pritt,presson,pressman,pough,pisani,perz,perras,pelzer,pedrosa,palos,palmisano,paille,orem,orbison,oliveros,nourse,nordquist,newbury,nelligan,nawrocki,myler,mumaw,morphis,moldenhauer,miyashiro,mignone,mickelsen,michalec,mesta,mcree,mcqueary,mcninch,mcneilly,mclelland,mclawhorn,mcgreevy,mcconkey,mattes,maselli,marten,marcucci,manseau,manjarrez,malbrough,machin,mabie,lynde,lykes,lueras,lokken,loken,linzy,lillis,lilienthal,levey,legler,leedom,lebowitz,lazzaro,larabee,lapinski,langner,langenfeld,lampkins,lamotte,lambright,lagarde,ladouceur,labounty,lablanc,laberge,kyte,kroon,kron,kraker,kouba,kirwin,kincer,kimbler,kegler,keach,katzman,katzer,kalman,jimmerson,jenning,janus,iacovelli,hust,huson,husby,humphery,hufnagel,honig,holsey,holoman,hohl,hogge,hinderliter,hildebrant,hemby,helle,heintzelman,heidrick,hearon,hazelip,hauk,hasbrouck,harton,hartin,harpster,hansley,hanchett,haar,guthridge,gulbranson,guill,guerrera,grund,grosvenor,grist,grell,grear,granberry,gonser,giunta,giuliani,gillon,gillmore,gillan,gibbon,gettys,gelb,gano,galliher,fullen,frese,frates,foxwell,fleishman,fleener,fielden,ferrera,fells,feemster,fauntleroy,evatt,espy,eno,emmerich,edler,eastham,dunavant,duca,drinnon,dowe,dorgan,dollinger,dipalma,difranco,dietrick,denzer,demarest,delee,delariva,delany,decesare,debellis,deavers,deardorff,dawe,darosa,darley,dalzell,dahlen,curto,cupps,cunniff,cude,crivello,cripps,cresswell,cousar,cotta,compo,clyne,clayson,cearley,catania,carini,cantero,buttrey,buttler,burpee,bulkley,buitron,buda,bublitz,bryer,bryden,brouillette,brott,brookman,bronk,breshears,brennen,brannum,brandl,braman,bracewell,boyter,bomberger,bogen,boeding,blauvelt,blandford,biermann,bielecki,bibby,berthold,berkman,belvin,bellomy,beland,behne,beecham,becher,bax,bassham,barret,baley,auxier,atkison,ary,arocha,arechiga,anspach,algarin,alcott,alberty,ager,ackman,abdallah,zwick,ziemer,zastrow,zajicek,yokum,yokley,wittrock,winebarger,wilker,wilham,whitham,wetzler,westling,westbury,wendler,wellborn,weitzman,weitz,wallner,waldroup,vrabel,vowels,volker,vitiello,visconti,villicana,vibbert,vesey,vannatter,vangilder,vandervort,vandegrift,vanalstyne,vallecillo,usrey,tynan,turpen,tuller,trisler,townson,tillmon,threlkeld,thornell,terrio,taunton,tarry,tardy,swoboda,swihart,sustaita,suitt,stuber,strine,stookey,stmartin,stiger,stainbrook,solem,smail,sligh,siple,sieben,shumake,shriner,showman,sheen,sheckler,seim,secrist,scoggin,schultheis,schmalz,schendel,schacher,savard,saulter,santillanes,sandiford,sande,salzer,salvato,saltz,sakai,ryckman,ryant,ruck,rittenberry,ristau,richart,rhynes,reyer,reulet,reser,redington,reddington,rebello,reasor,raftery,rabago,raasch,quintanar,pylant,purington,provencal,prioleau,prestwood,pothier,popa,polster,politte,poffenberger,pinner,pietrzak,pettie,penaflor,pellot,pellham,paylor,payeur,papas,paik,oyola,osbourn,orzechowski,oppenheimer,olesen,oja,ohl,nuckolls,nordberg,noonkester,nold,nitta,niblett,neuhaus,nesler,nanney,myrie,mutch,mosquera,morena,montalto,montagna,mizelle,mincy,millikan,millay,miler,milbourn,mikels,migues,miesner,mershon,merrow,meigs,mealey,mcraney,mcmartin,mclachlan,mcgeehan,mcferren,mcdole,mccaulley,mcanulty,maziarz,maul,mateer,martinsen,marson,mariotti,manna,mance,malbon,magnusson,maclachlan,macek,lurie,luc,lown,loranger,lonon,lisenby,linsley,lenk,leavens,lauritzen,lathem,lashbrook,landman,lamarche,lamantia,laguerre,lagrange,kogan,klingbeil,kist,kimpel,kime,kier,kerfoot,kennamer,kellems,kammer,kamen,jepsen,jarnigan,isler,ishee,hux,hungate,hummell,hultgren,huffaker,hruby,hornick,hooser,hooley,hoggan,hirano,hilley,higham,heuser,henrickson,henegar,hellwig,hedley,hasegawa,hartt,hambright,halfacre,hafley,guion,guinan,grunwald,grothe,gries,greaney,granda,grabill,gothard,gossman,gosser,gossard,gosha,goldner,gobin,ginyard,gilkes,gilden,gerson,gephart,gengler,gautier,gassett,garon,galusha,gallager,galdamez,fulmore,fritsche,fowles,foutch,footman,fludd,ferriera,ferrero,ferreri,fenimore,fegley,fegan,fearn,farrier,fansler,fane,falzone,fairweather,etherton,elsberry,dykema,duppstadt,dunnam,dunklin,duet,dudgeon,dubuc,doxey,donmoyer,dodgen,disanto,dingler,dimattia,dilday,digennaro,diedrich,derossett,depp,demasi,degraffenreid,deakins,deady,davin,daigre,daddario,czerwinski,cullens,cubbage,cracraft,combest,coletti,coghill,claybrooks,christofferse,chiesa,chason,chamorro,celentano,cayer,carolan,carnegie,capetillo,callier,cadogan,caba,byrom,byrns,burrowes,burket,burdge,burbage,buchholtz,brunt,brungardt,brunetti,brumbelow,brugger,broadhurst,brigance,brandow,bouknight,bottorff,bottomley,bosarge,borger,bombardier,boggan,blumer,blecha,birney,birkland,betances,beran,belin,belgrave,bealer,bauch,bashir,bartow,baro,barnhouse,barile,ballweg,baisley,bains,baehr,badilla,bachus,bacher,bachelder,auzenne,aten,astle,allis,agarwal,adger,adamek,ziolkowski,zinke,zazueta,zamorano,younkin,wittig,witman,winsett,winkles,wiedman,whitner,whitcher,wetherby,westra,westhoff,wehrle,wagaman,voris,vicknair,veasley,vaugh,vanderburg,valletta,tunney,trumbo,truluck,trueman,truby,trombly,tourville,tostado,titcomb,timpson,tignor,thrush,thresher,thiede,tews,tamplin,taff,tacker,syverson,sylvestre,summerall,stumbaugh,strouth,straker,stradford,stokley,steinhoff,steinberger,spigner,soltero,snively,sletten,sinkler,sinegal,simoes,siller,sigel,shire,shinkle,shellman,sheller,sheats,sharer,selvage,sedlak,schriver,schimke,scheuerman,schanz,savory,saulters,sauers,sais,rusin,rumfelt,ruhland,rozar,rosborough,ronning,rolph,roloff,robie,rimer,riehle,ricco,rhein,retzlaff,reisman,reimann,rayes,raub,raminez,quesinberry,pua,procopio,priolo,printz,prewett,preas,prahl,poovey,ploof,platz,plaisted,pinzon,pineiro,pickney,petrovich,perl,pehrson,peets,pavon,pautz,pascarella,paras,paolini,pafford,oyer,ovellette,outten,outen,orduna,odriscoll,oberlin,nosal,niven,nisbett,nevers,nathanson,mukai,mozee,mowers,motyka,morency,montford,mollica,molden,mitten,miser,millender,midgette,messerly,melendy,meisel,meidinger,meany,mcnitt,mcnemar,mcmakin,mcgaugh,mccaa,mauriello,maudlin,matzke,mattia,matsumura,masuda,mangels,maloof,malizia,mahmoud,maglione,maddix,lucchesi,lochner,linquist,lietz,leventhal,lemanski,leiser,laury,lauber,lamberth,kuss,kulik,kuiper,krout,kotter,kort,kohlmeier,koffler,koeller,knipe,knauss,kleiber,kissee,kirst,kirch,kilgo,kerlin,kellison,kehl,kalb,jorden,jantzen,inabinet,ikard,husman,hunsberger,hundt,hucks,houtz,houseknecht,hoots,hogsett,hogans,hintze,hession,henault,hemming,helsley,heinen,heffington,heberling,heasley,hazley,hazeltine,hayton,hayse,hawke,haston,harward,harrow,hanneman,hafford,hadnot,guerro,grahm,gowins,gordillo,goosby,glatt,gibbens,ghent,gerrard,germann,gebo,gean,garling,gardenhire,garbutt,gagner,furguson,funchess,fujiwara,fujita,friley,frigo,forshee,folkes,filler,fernald,ferber,feingold,faul,farrelly,fairbank,failla,espey,eshleman,ertl,erhart,erhardt,erbe,elsea,ells,ellman,eisenhart,ehmann,earnhardt,duplantis,dulac,ducote,draves,dosch,dolce,divito,dimauro,derringer,demeo,demartini,delima,dehner,degen,defrancisco,defoor,dedeaux,debnam,cypert,cutrer,cusumano,custis,croker,courtois,costantino,cormack,corbeil,copher,conlan,conkling,cogdell,cilley,chapdelaine,cendejas,castiglia,cashin,carstensen,caprio,calcote,calaway,byfield,butner,bushway,burritt,browner,brobst,briner,bridger,brickley,brendel,bratten,bratt,brainerd,brackman,bowne,bouck,borunda,bordner,bonenfant,boer,boehmer,bodiford,bleau,blankinship,blane,blaha,bitting,bissonette,bigby,bibeau,bermudes,berke,bergevin,bergerson,bendel,belville,bechard,bearce,beadles,batz,bartlow,ayoub,avans,aumiller,arviso,arpin,arnwine,armwood,arent,arehart,arcand,antle,ambrosino,alongi,alm,allshouse,ahart,aguon,ziebarth,zeledon,zakrzewski,yuhas,yingst,yedinak,wommack,winnett,wingler,wilcoxen,whitmarsh,wayt,watley,warkentin,voll,vogelsang,voegele,vivanco,vinton,villafane,viles,ver,venne,vanwagoner,vanwagenen,vanleuven,vanauken,uselton,uren,trumbauer,tritt,treadaway,tozier,tope,tomczak,tomberlin,tomasini,tollett,toller,titsworth,tirrell,tilly,tavera,tarnowski,tanouye,swarthout,sutera,surette,styers,styer,stipe,stickland,stembridge,stearn,starkes,stanberry,stahr,spino,spicher,sperber,speece,sonntag,sneller,smalling,slowik,slocumb,sliva,slemp,slama,sitz,sisto,sisemore,sindelar,shipton,shillings,sheeley,sharber,shaddix,severns,severino,sensabaugh,seder,seawell,seamons,schrantz,schooler,scheffer,scheerer,scalia,saum,santibanez,sano,sanjuan,sampley,sailer,sabella,sabbagh,royall,rottman,rivenbark,rikard,ricketson,rickel,rethman,reily,reddin,reasoner,rast,ranallo,quintal,pung,pucci,proto,prosperie,prim,preusser,preslar,powley,postma,pinnix,pilla,pietsch,pickerel,pica,pharris,petway,petillo,perin,pereda,pennypacker,pennebaker,pedrick,patin,patchell,parodi,parman,pantano,padua,padro,osterhout,orner,olivar,ohlson,odonoghue,oceguera,oberry,novello,noguera,newquist,newcombe,neihoff,nehring,nees,nebeker,mundo,mullenix,morrisey,moronta,morillo,morefield,mongillo,molino,minto,midgley,michie,menzies,medved,mechling,mealy,mcshan,mcquaig,mcnees,mcglade,mcgarity,mcgahey,mcduff,mayweather,mastropietro,masten,maranto,maniscalco,maize,mahmood,maddocks,maday,macha,maag,luken,lopp,lolley,llanas,litz,litherland,lindenberg,lieu,letcher,lentini,lemelle,leet,lecuyer,leber,laursen,larrick,lantigua,langlinais,lalli,lafever,labat,labadie,krogman,kohut,knarr,klimas,klar,kittelson,kirschbaum,kintzel,kincannon,kimmell,killgore,kettner,kelsch,karle,kapoor,johansson,jenkinson,janney,iraheta,insley,hyslop,huckstep,holleran,hoerr,hinze,hinnenkamp,hilger,higgin,hicklin,heroux,henkle,helfer,heikkinen,heckstall,heckler,heavener,haydel,haveman,haubert,harrop,harnois,hansard,hanover,hammitt,haliburton,haefner,hadsell,haakenson,guynn,guizar,grout,grosz,gomer,golla,godby,glanz,glancy,givan,giesen,gerst,gayman,garraway,gabor,furness,frisk,fremont,frary,forand,fessenden,ferrigno,fearon,favreau,faulks,falbo,ewen,eurich,etchison,esterly,entwistle,ellingsworth,eisenbarth,edelson,eckel,earnshaw,dunneback,doyal,donnellan,dolin,dibiase,deschenes,dermody,degregorio,darnall,dant,dansereau,danaher,dammann,dames,czarnecki,cuyler,custard,cummingham,cuffie,cuffee,cudney,cuadra,crigler,creger,coughlan,corvin,cortright,corchado,connery,conforti,condron,colosimo,colclough,cohee,ciotti,chien,chacko,cevallos,cavitt,cavins,castagna,cashwell,carrozza,carrara,capra,campas,callas,caison,caggiano,bynoe,buswell,burpo,burnam,burges,buerger,buelow,bueche,bruni,brummitt,brodersen,briese,breit,brakebill,braatz,boyers,boughner,borror,borquez,bonelli,bohner,blaker,blackmer,bissette,bibbins,bhatt,bhatia,bessler,bergh,beresford,bensen,benningfield,bellantoni,behler,beehler,beazley,beauchesne,bargo,bannerman,baltes,balog,ballantyne,axelson,apgar,aoki,anstett,alejos,alcocer,albury,aichele,ackles,zerangue,zehner,zank,zacarias,youngberg,yorke,yarbro,wydra,worthley,wolbert,wittmer,witherington,wishart,winkleman,willilams,willer,wiedeman,whittingham,whitbeck,whetsel,wheless,westerberg,welcher,wegman,waterfield,wasinger,warfel,wannamaker,walborn,wada,vogl,vizcarrondo,vitela,villeda,veras,venuti,veney,ulrey,uhlig,turcios,tremper,torian,torbett,thrailkill,terrones,teitelbaum,teems,swoope,sunseri,stutes,stthomas,strohm,stroble,striegel,streicher,stodola,stinchcomb,steves,steppe,steller,staudt,starner,stamant,stam,stackpole,sprankle,speciale,spahr,sowders,sova,soluri,soderlund,slinkard,sjogren,sirianni,siewert,sickels,sica,shugart,shoults,shive,shimer,shier,shepley,sheeran,sevin,seto,segundo,sedlacek,scuderi,schurman,schuelke,scholten,schlater,schisler,schiefelbein,schalk,sanon,sabala,ruyle,ruybal,rueb,rowsey,rosol,rocheleau,rishel,rippey,ringgold,rieves,ridinger,retherford,rempe,reith,rafter,raffaele,quinto,putz,purdom,puls,pulaski,propp,principato,preiss,prada,polansky,poch,plath,pittard,pinnock,pfarr,pfannenstiel,penniman,pauling,patchen,paschke,parkey,pando,ouimet,ottman,ostlund,ormiston,occhipinti,nowacki,norred,noack,nishida,nilles,nicodemus,neth,nealey,myricks,murff,mungia,motsinger,moscato,morado,monnier,molyneux,modzelewski,miura,minich,militello,milbrandt,michalik,meserve,mendivil,melara,mcnish,mcelhannon,mccroy,mccrady,mazzella,maule,mattera,mathena,matas,mascorro,marinello,marguez,manwaring,manhart,mangano,maggi,lymon,luter,luse,lukasik,luiz,ludlum,luczak,lowenthal,lossett,lorentzen,loredo,longworth,lomanto,lisi,lish,lipsky,linck,liedtke,levering,lessman,lemond,lembo,ledonne,leatham,laufer,lanphear,langlais,lamphear,lamberton,lafon,lade,lacross,kyzer,krok,kring,krell,krehbiel,kratochvil,krach,kovar,kostka,knudtson,knaack,kliebert,klahn,kirkley,kimzey,kerrick,kennerson,keesler,karlin,janousek,imel,icenhour,hyler,hudock,houpt,holquin,holiman,holahan,hodapp,hillen,hickmon,hersom,henrich,helvey,heidt,heideman,hedstrom,hedin,hebron,hayter,harn,hardage,halsted,hahne,hagemann,guzik,guel,groesbeck,gritton,grego,graziani,grasty,graney,gouin,gossage,golston,goheen,godina,glade,giorgi,giambrone,gerrity,gerrish,gero,gerling,gaulke,garlick,galiano,gaiter,gahagan,gagnier,friddle,fredericksen,franqui,follansbee,foerster,flury,fitzmaurice,fiorini,finlayson,fiecke,fickes,fichter,ferron,farrel,fackler,eyman,escarcega,errico,erler,erby,engman,engelmann,elsass,elliston,eddleman,eadie,dummer,drost,dorrough,dorrance,doolan,donalson,domenico,ditullio,dittmar,dishon,dionisio,dike,devinney,desir,deschamp,derrickson,delamora,deitch,dechant,danek,dahmen,curci,cudjoe,croxton,creasman,craney,crader,cowling,coulston,cortina,corlew,corl,copland,convery,cohrs,clune,clausing,cipriani,cianciolo,chubb,chittum,chenard,charlesworth,charlebois,champine,chamlee,chagoya,casselman,cardello,capasso,cannella,calderwood,byford,buttars,bushee,burrage,buentello,brzozowski,bryner,brumit,brookover,bronner,bromberg,brixey,brinn,briganti,bremner,brawn,branscome,brannigan,bradsher,bozek,boulay,bormann,bongiorno,bollin,bohler,bogert,bodenhamer,blose,bivona,billips,bibler,benfer,benedetti,belue,bellanger,belford,behn,barnhardt,baltzell,balling,balducci,bainter,babineau,babich,baade,attwood,asmus,asaro,artiaga,applebaum,anding,amar,amaker,allsup,alligood,alers,agin,agar,achenbach,abramowitz,abbas,aasen,zehnder,yopp,yelle,yeldell,wynter,woodmansee,wooding,woll,winborne,willsey,willeford,widger,whiten,whitchurch,whang,weissinger,weinman,weingartner,weidler,waltrip,wagar,wafford,vitagliano,villalvazo,villacorta,vigna,vickrey,vicini,ventimiglia,vandenbosch,valvo,valazquez,utsey,urbaniak,unzueta,trombetta,trevizo,trembley,tremaine,traverso,tores,tolan,tillison,tietjen,teachout,taube,tatham,tarwater,tarbell,sydow,swims,swader,striplin,stoltenberg,steinhauer,steil,steigerwald,starkweather,stallman,squier,sparacino,spadafora,shiflet,shibata,shevlin,sherrick,sessums,servais,senters,seevers,seelye,searfoss,seabrooks,scoles,schwager,schrom,schmeltzer,scheffel,sawin,saterfiel,sardina,sanroman,sandin,salamanca,saladin,sabia,rustin,rushin,ruley,rueter,rotter,rosenzweig,rohe,roder,riter,rieth,ried,ridder,rennick,remmers,remer,relyea,reilley,reder,rasheed,rakowski,rabin,queener,pursel,prowell,pritts,presler,pouncy,porche,porcaro,pollman,pleas,planas,pinkley,pinegar,pilger,philson,petties,perrodin,pendergrast,patao,pasternak,passarelli,pasko,parshall,panos,panella,palombo,padillo,oyama,overlock,overbeck,otterson,orrell,ornellas,opitz,okelly,obando,noggle,nicosia,netto,negrin,natali,nakayama,nagao,nadel,musial,murrill,murrah,munsch,mucci,mrozek,moyes,mowrer,moris,morais,moorhouse,monico,mondy,moncayo,miltenberger,milsap,milone,millikin,milardo,micheals,micco,meyerson,mericle,mendell,meinhardt,meachum,mcleroy,mcgray,mcgonigal,maultsby,matis,matheney,matamoros,marro,marcil,marcial,mantz,mannings,maltby,malchow,maiorano,mahn,mahlum,maglio,maberry,lustig,luellen,longwell,longenecker,lofland,locascio,linney,linneman,lighty,levell,levay,lenahan,lemen,lehto,lebaron,lanctot,lamy,lainez,laffoon,labombard,kujawski,kroger,kreutzer,korhonen,kondo,kollman,kohan,kogut,knaus,kivi,kittel,kinner,kindig,kindel,kiesel,kibby,khang,kettler,ketterer,kepner,kelliher,keenum,kanode,kail,juhasz,jowett,jolicoeur,jeon,iser,ingrassia,imai,hutchcraft,humiston,hulings,hukill,huizenga,hugley,hornyak,hodder,hisle,hillenbrand,hille,higuchi,hertzler,herdon,heppner,hepp,heitmann,heckart,hazlewood,hayles,hayek,hawkin,haugland,hasler,harbuck,happel,hambly,hambleton,hagaman,guzzi,gullette,guinyard,grogg,grise,griffing,goto,gosney,goley,goldblatt,gledhill,girton,giltner,gillock,gilham,gilfillan,giblin,gentner,gehlert,gehl,garten,garney,garlow,garett,galles,galeana,futral,fuhr,friedland,franson,fransen,foulds,follmer,foland,flax,flavin,firkins,fillion,figueredo,ferrill,fenster,fenley,fauver,farfan,eustice,eppler,engelman,engelke,emmer,elzy,ellwood,ellerbee,elks,ehret,ebbert,durrah,dupras,dubuque,dragoo,donlon,dolloff,dibella,derrico,demko,demar,darrington,czapla,crooker,creagh,cranor,craner,crabill,coyer,cowman,cowherd,cottone,costillo,coster,costas,cosenza,corker,collinson,coello,clingman,clingerman,claborn,chmura,chausse,chaudhry,chapell,chancy,cerrone,caverly,caulkins,carn,campfield,campanelli,callaham,cadorette,butkovich,buske,burrier,burkley,bunyard,buckelew,buchheit,broman,brescia,brasel,boyster,booe,bonomo,bondi,bohnsack,blomberg,blanford,bilderback,biggins,bently,behrends,beegle,bedoya,bechtol,beaubien,bayerl,baumgart,baumeister,barratt,barlowe,barkman,barbagallo,baldree,baine,baggs,bacote,aylward,ashurst,arvidson,arthurs,arrieta,arrey,arreguin,arrant,arner,arizmendi,anker,amis,amend,alphin,allbright,aikin,zupan,zuchowski,zeolla,zanchez,zahradnik,zahler,younan,yeater,yearta,yarrington,yantis,woomer,wollard,wolfinger,woerner,witek,wishon,wisener,wingerter,willet,wilding,wiedemann,weisel,wedeking,waybright,wardwell,walkins,waldorf,voth,voit,virden,viloria,villagran,vasta,vashon,vaquera,vantassell,vanderlinden,vandergrift,vancuren,valenta,underdahl,tygart,twining,twiford,turlington,tullius,tubman,trowell,trieu,transue,tousant,torgersen,tooker,tome,toma,tocci,tippins,tinner,timlin,tillinghast,tidmore,teti,tedrick,tacey,swanberg,sunde,summitt,summerford,summa,stratman,strandberg,storck,stober,steitz,stayer,stauber,staiger,sponaugle,spofford,sparano,spagnola,sokoloski,snay,slough,skowronski,sieck,shimkus,sheth,sherk,shankles,shahid,sevy,senegal,seiden,seidell,searls,searight,schwalm,schug,schilke,schier,scheck,sawtelle,santore,sanks,sandquist,sanden,saling,saathoff,ryberg,rustad,ruffing,rudnicki,ruane,rozzi,rowse,rosenau,rodes,risser,riggin,riess,riese,rhoten,reinecke,reigle,reichling,redner,rebelo,raynes,raimondi,rahe,rada,querry,quellette,pulsifer,prochnow,prato,poulton,poudrier,policastro,polhemus,polasek,poissant,pohlmann,plotner,pitkin,pita,pinkett,piekarski,pichon,pfau,petroff,petermann,peplinski,peller,pecinovsky,pearse,pattillo,patague,parlier,parenti,parchman,pane,paff,ortner,oros,nolley,noakes,nigh,nicolosi,nicolay,newnam,netter,nass,napoles,nakata,nakamoto,morlock,moraga,montilla,mongeau,molitor,mohney,mitchener,meyerhoff,medel,mcniff,mcmonagle,mcglown,mcglinchey,mcgarrity,mccright,mccorvey,mcconnel,mccargo,mazzei,matula,mastroianni,massingale,maring,maricle,mans,mannon,mannix,manney,manalo,malo,malan,mahony,madril,mackowiak,macko,macintosh,lurry,luczynski,lucke,lucarelli,losee,lorence,loiacono,lohse,loder,lipari,linebarger,lindamood,limbaugh,letts,leleux,leep,leeder,leard,laxson,lawry,laverdiere,laughton,lastra,kurek,kriss,krishnan,kretschmer,krebsbach,kontos,knobel,knauf,klick,kleven,klawitter,kitchin,kirkendoll,kinkel,kingrey,kilbourn,kensinger,kennerly,kamin,justiniano,jurek,junkin,judon,jordahl,jeanes,jarrells,iwamoto,ishida,immel,iman,ihle,hyre,hurn,hunn,hultman,huffstetler,huffer,hubner,howey,hooton,holts,holscher,holen,hoggatt,hilaire,herz,henne,helstrom,hellickson,heinlein,heckathorn,heckard,headlee,hauptman,haughey,hatt,harring,harford,hammill,hamed,halperin,haig,hagwood,hagstrom,gunnells,gundlach,guardiola,greeno,greenland,gonce,goldsby,gobel,gisi,gillins,gillie,germano,geibel,gauger,garriott,garbarino,gajewski,funari,fullbright,fuell,fritzler,freshwater,freas,fortino,forbus,flohr,flemister,fisch,finks,fenstermaker,feldstein,farhat,fankhauser,fagg,fader,exline,emigh,eguia,edman,eckler,eastburn,dunmore,dubuisson,dubinsky,drayer,doverspike,doubleday,doten,dorner,dolson,dohrmann,disla,direnzo,dipaola,dines,diblasi,dewolf,desanti,dennehy,demming,delker,decola,davilla,daughtridge,darville,darland,danzy,dagenais,culotta,cruzado,crudup,croswell,coverdale,covelli,couts,corbell,coplan,coolbaugh,conyer,conlee,conigliaro,comiskey,coberly,clendening,clairmont,cienfuegos,chojnacki,chilcote,champney,cassara,casazza,casado,carew,carbin,carabajal,calcagni,cail,busbee,burts,burbridge,bunge,bundick,buhler,bucholtz,bruen,broce,brite,brignac,brierly,bridgman,braham,bradish,boyington,borjas,bonn,bonhomme,bohlen,bogardus,bockelman,blick,blackerby,bizier,biro,binney,bertolini,bertin,berti,bento,beno,belgarde,belding,beckel,becerril,bazaldua,bayes,bayard,barrus,barris,baros,bara,ballow,bakewell,baginski,badalamenti,backhaus,avilez,auvil,atteberry,ardon,anzaldua,anello,amsler,ambrosio,althouse,alles,alberti,alberson,aitchison,aguinaga,ziemann,zickefoose,zerr,zeck,zartman,zahm,zabriskie,yohn,yellowhair,yeaton,yarnall,yaple,wolski,wixon,willner,willms,whitsitt,wheelwright,weyandt,wess,wengerd,weatherholtz,wattenbarger,walrath,walpole,waldrip,voges,vinzant,viars,veres,veneziano,veillon,vawter,vaughns,vanwart,vanostrand,valiente,valderas,uhrig,tunison,tulloch,trostle,treaster,traywick,toye,tomson,tomasello,tomasek,tippit,tinajero,tift,tienda,thorington,thieme,thibeau,thakkar,tewell,telfer,sweetser,stratford,stracener,stoke,stiverson,stelling,spatz,spagnoli,sorge,slevin,slabaugh,simson,shupp,shoultz,shotts,shiroma,shetley,sherrow,sheffey,shawgo,shamburger,sester,segraves,seelig,scioneaux,schwartzkopf,schwabe,scholes,schluter,schlecht,schillaci,schildgen,schieber,schewe,schecter,scarpelli,scaglione,sautter,santelli,salmi,sabado,ryer,rydberg,ryba,rushford,runk,ruddick,rotondo,rote,rosenfield,roesner,rocchio,ritzer,rippel,rimes,riffel,richison,ribble,reynold,resh,rehn,ratti,rasor,rasnake,rappold,rando,radosevich,pulice,prichett,pribble,poynor,plowden,pitzen,pittsley,pitter,philyaw,philipps,pestana,perro,perone,pera,peil,pedone,pawlowicz,pattee,parten,parlin,pariseau,paredez,paek,pacifico,otts,ostrow,osornio,oslund,orso,ooten,onken,oniel,onan,ollison,ohlsen,ohlinger,odowd,niemiec,neubert,nembhard,neaves,neathery,nakasone,myerson,muto,muntz,munez,mumme,mumm,mujica,muise,muench,morriss,molock,mishoe,minier,metzgar,mero,meiser,meese,mcsween,mcquire,mcquinn,mcpheeters,mckeller,mcilrath,mcgown,mcdavis,mccuen,mcclenton,maxham,matsui,marriner,marlette,mansur,mancino,maland,majka,maisch,maheux,madry,madriz,mackley,macke,lydick,lutterman,luppino,lundahl,lovingood,loudon,longmore,liefer,leveque,lescarbeau,lemmer,ledgerwood,lawver,lawrie,lattea,lasko,lahman,kulpa,kukowski,kukla,kubota,kubala,krizan,kriz,krikorian,kravetz,kramp,kowaleski,knobloch,klosterman,kloster,klepper,kirven,kinnaman,kinnaird,killam,kiesling,kesner,keebler,keagle,karls,kapinos,kantner,kaba,junious,jefferys,jacquet,izzi,ishii,irion,ifill,hotard,horman,hoppes,hopkin,hokanson,hoda,hocutt,hoaglin,hites,hirai,hindle,hinch,hilty,hild,hier,hickle,hibler,henrichs,hempstead,helmers,hellard,heims,heidler,hawbaker,harkleroad,harari,hanney,hannaford,hamid,haltom,hallford,guilliams,guerette,gryder,groseclose,groen,grimley,greenidge,graffam,goucher,goodenough,goldsborough,gloster,glanton,gladson,gladding,ghee,gethers,gerstein,geesey,geddie,gayer,gaver,gauntt,gartland,garriga,garoutte,fronk,fritze,frenzel,forgione,fluitt,flinchbaugh,flach,fiorito,finan,finamore,fimbres,fillman,figeroa,ficklin,feher,feddersen,fambro,fairbairn,eves,escalona,elsey,eisenstein,ehrenberg,eargle,drane,dogan,dively,dewolfe,dettman,desiderio,desch,dennen,denk,demaris,delsignore,dejarnette,deere,dedman,daws,dauphinais,danz,dantin,dannenberg,dalby,currence,culwell,cuesta,croston,crossno,cromley,crisci,craw,coryell,condra,colpitts,colas,clink,clevinger,clermont,cistrunk,cirilo,chirico,chiarello,cephus,cecena,cavaliere,caughey,casimir,carwell,carlon,carbonaro,caraveo,cantley,callejas,cagney,cadieux,cabaniss,bushard,burlew,buras,budzinski,bucklew,bruneau,brummer,brueggemann,brotzman,bross,brittian,brimage,briles,brickman,breneman,breitenstein,brandel,brackins,boydstun,botta,bosket,boros,borgmann,bordeau,bonifacio,bolten,boehman,blundell,bloodsaw,bjerke,biffle,bickett,bickers,beville,bergren,bergey,benzing,belfiore,beirne,beckert,bebout,baumert,battey,barrs,barriere,barcelo,barbe,balliet,baham,babst,auton,asper,asbell,arzate,argento,arel,araki,arai,antley,amodeo,ammann,allensworth,aldape,akey,abeita,zweifel,zeiler,zamor,zalenski,yzaguirre,yousef,yetman,wyer,woolwine,wohlgemuth,wohlers,wittenberg,wingrove,wimsatt,willimas,wilkenson,wildey,wilderman,wilczynski,wigton,whorley,wellons,welle,weirich,weideman,weide,weast,wasmund,warshaw,walson,waldner,walch,walberg,wagener,wageman,vrieze,vossen,vorce,voorhis,vonderheide,viruet,vicari,verne,velasques,vautour,vartanian,varona,vankeuren,vandine,vandermeer,ursery,underdown,uhrich,uhlman,tworek,twine,twellman,tweedie,tutino,turmelle,tubb,trivedi,triano,trevathan,treese,treanor,treacy,traina,topham,toenjes,tippetts,tieu,thomure,thatch,tetzlaff,tetterton,teamer,tappan,talcott,tagg,szczepanski,syring,surace,sulzer,sugrue,sugarman,suess,styons,stwart,stupka,strey,straube,strate,stoddart,stockbridge,stjames,steimle,steenberg,stamand,staller,stahly,stager,spurgin,sprow,sponsler,speas,spainhour,sones,smits,smelcer,slovak,slaten,singleterry,simien,sidebottom,sibrian,shellhammer,shelburne,shambo,sepeda,seigel,scogin,scianna,schmoll,schmelzer,scheu,schachter,savant,sauseda,satcher,sandor,sampsell,rugh,rufener,rotenberry,rossow,rossbach,rollman,rodrique,rodreguez,rodkey,roda,rini,riggan,rients,riedl,rhines,ress,reinbold,raschke,rardin,racicot,quillin,pushard,primrose,pries,pressey,precourt,pratts,postel,poppell,plumer,pingree,pieroni,pflug,petre,petrarca,peterka,perkin,pergande,peranio,penna,paulhus,pasquariello,parras,parmentier,pamplin,oviatt,osterhoudt,ostendorf,osmun,ortman,orloff,orban,onofrio,olveda,oltman,okeeffe,ocana,nunemaker,novy,noffsinger,nish,niday,nethery,nemitz,neidert,nadal,nack,muszynski,munsterman,mulherin,mortimore,morter,montesino,montalvan,montalbano,momon,moman,mogan,minns,millward,milling,michelsen,mewborn,metayer,mensch,meloy,meggs,meaders,mcsorley,mcmenamin,mclead,mclauchlin,mcguffey,mcguckin,mcglaughlin,mcferron,mcentyre,mccrum,mccawley,mcbain,mayhue,matzen,matton,marsee,marrin,marland,markum,mantilla,manfre,makuch,madlock,macauley,luzier,luthy,lufkin,lucena,loudin,lothrop,lorch,loll,loadholt,lippold,lichtman,liberto,liakos,lewicki,levett,lentine,leja,legree,lawhead,lauro,lauder,lanman,lank,laning,lalor,krob,kriger,kriegel,krejci,kreisel,kozel,konkel,kolstad,koenen,kocsis,knoblock,knebel,klopfer,klee,kilday,kesten,kerbs,kempker,keathley,kazee,kaur,kamer,kamaka,kallenbach,jehle,jaycox,jardin,jahns,ivester,hyppolite,hyche,huppert,hulin,hubley,horsey,hornak,holzwarth,holmon,hollabaugh,holaway,hodes,hoak,hinesley,hillwig,hillebrand,highfield,heslop,herrada,hendryx,hellums,heit,heishman,heindel,hayslip,hayford,hastie,hartgrove,hanus,hakim,hains,hadnott,gundersen,gulino,guidroz,guebert,gressett,graydon,gramling,grahn,goupil,gorelick,goodreau,goodnough,golay,goers,glatz,gillikin,gieseke,giammarino,getman,gensler,gazda,garibaldi,gahan,funderburke,fukuda,fugitt,fuerst,fortman,forsgren,formica,flink,fitton,feltz,fekete,feit,fehrenbach,farone,farinas,faries,fagen,ewin,esquilin,esch,enderle,ellery,ellers,ekberg,egli,effinger,dymond,dulle,dula,duhe,dudney,dowless,dower,dorminey,dopp,dooling,domer,disher,dillenbeck,difilippo,dibernardo,deyoe,devillier,denley,deland,defibaugh,deeb,debow,dauer,datta,darcangelo,daoust,damelio,dahm,dahlman,curlin,cupit,culton,cuenca,cropp,croke,cremer,crace,cosio,corzine,coombe,coman,colone,coloma,collingwood,coderre,cocke,cobler,claybrook,cincotta,cimmino,christoff,chisum,chillemi,chevere,chachere,cervone,cermak,cefalu,cauble,cather,caso,carns,carcamo,carbo,capoccia,capello,capell,canino,cambareri,calvi,cabiness,bushell,burtt,burstein,burkle,bunner,bundren,buechler,bryand,bruso,brownstein,brouse,brodt,brisbin,brightman,brenes,breitenbach,brazzell,brazee,bramwell,bramhall,bradstreet,boyton,bowland,boulter,bossert,bonura,bonebrake,bonacci,boeck,blystone,birchard,bilal,biddy,bibee,bevans,bethke,bertelsen,berney,bergfeld,benware,bellon,bellah,batterton,barberio,bamber,bagdon,badeaux,averitt,augsburger,ates,arvie,aronowitz,arens,araya,angelos,andrada,amell,amante,almy,almquist,alls,aispuro,aguillon,agudelo,aceto,abalos,zdenek,zaremba,zaccaria,youssef,wrona,wrede,wotton,woolston,wolpert,wollman,wince,wimberley,willmore,willetts,wikoff,wieder,wickert,whitenack,wernick,welte,welden,weisenberger,weich,wallington,walder,vossler,vore,vigo,vierling,victorine,verdun,vencill,vazguez,vassel,vanzile,vanvliet,vantrease,vannostrand,vanderveer,vanderveen,vancil,uyeda,umphrey,uhler,uber,tutson,turrentine,tullier,tugwell,trundy,tripodi,tomer,tomasi,tomaselli,tokarski,tisher,tibbets,thweatt,tharrington,tesar,telesco,teasdale,tatem,taniguchi,suriel,sudler,stutsman,sturman,strite,strelow,streight,strawder,stransky,strahl,stours,stong,stinebaugh,stillson,steyer,stelle,steffensmeier,statham,squillante,spiess,spargo,southward,soller,soden,snuggs,snellgrove,smyers,smiddy,slonaker,skyles,skowron,sivils,siqueiros,siers,siddall,shontz,shingler,shiley,shibley,sherard,shelnutt,shedrick,shasteen,sereno,selke,scovil,scola,schuett,schuessler,schreckengost,schranz,schoepp,schneiderman,schlanger,schiele,scheuermann,schertz,scheidler,scheff,schaner,schamber,scardina,savedra,saulnier,sater,sarro,sambrano,salomone,sabourin,ruud,rutten,ruffino,ruddock,rowser,roussell,rosengarten,rominger,rollinson,rohman,roeser,rodenberg,roberds,ridgell,rhodus,reynaga,rexrode,revelle,rempel,remigio,reising,reiling,reetz,rayos,ravenscroft,ravenell,raulerson,rasmusson,rask,rase,ragon,quesnel,quashie,puzo,puterbaugh,ptak,prost,prisbrey,principe,pricer,pratte,pouncey,portman,pontious,pomerantz,planck,pilkenton,pilarski,phegley,pertuit,penta,pelc,peffer,pech,peagler,pavelka,pavao,patman,paskett,parrilla,pardini,papazian,panter,palin,paley,paetzold,packett,pacheo,ostrem,orsborn,olmedo,okamura,oiler,oglesbee,oatis,nuckles,notter,nordyke,nogueira,niswander,nibert,nesby,neloms,nading,naab,munns,mullarkey,moudy,moret,monnin,molder,modisette,moczygemba,moctezuma,mischke,miro,mings,milot,milledge,milhorn,milera,mieles,mickley,micek,metellus,mersch,merola,mercure,mencer,mellin,mell,meinke,mcquillan,mcmurtrie,mckillop,mckiernan,mckendrick,mckamie,mcilvaine,mcguffie,mcgonigle,mcgarrah,mcfetridge,mcenaney,mcdow,mccutchan,mccallie,mcadam,maycock,maybee,mattei,massi,masser,masiello,marshell,marmo,marksberry,markell,marchal,manross,manganaro,mally,mallow,mailhot,magyar,madero,madding,maddalena,macfarland,lynes,lugar,luckie,lucca,lovitt,loveridge,loux,loth,loso,lorenzana,lorance,lockley,lockamy,littler,litman,litke,liebel,lichtenberger,licea,leverich,letarte,lesesne,leno,legleiter,leffew,laurin,launius,laswell,lassen,lasala,laraway,laramore,landrith,lancon,lanahan,laiche,laford,lachermeier,kunst,kugel,kuck,kuchta,kube,korus,koppes,kolbe,koerber,kochan,knittel,kluck,kleve,kleine,kitch,kirton,kirker,kintz,kinghorn,kindell,kimrey,kilduff,kilcrease,kicklighter,kibble,kervin,keplinger,keogh,kellog,keeth,kealey,kazmierczak,karner,kamel,kalina,kaczynski,juel,jerman,jeppson,jawad,jasik,jaqua,janusz,janco,inskeep,inks,ingold,hyndman,hymer,hunte,hunkins,humber,huffstutler,huffines,hudon,hudec,hovland,houze,hout,hougland,hopf,holsapple,holness,hollenbach,hoffmeister,hitchings,hirata,hieber,hickel,hewey,herriman,hermansen,herandez,henze,heffelfinger,hedgecock,hazlitt,hazelrigg,haycock,harren,harnage,harling,harcrow,hannold,hanline,hanel,hanberry,hammersley,hamernik,hajduk,haithcock,haff,hadaway,haan,gullatt,guilbault,guidotti,gruner,grisson,grieves,granato,grabert,gover,gorka,glueck,girardin,giesler,gersten,gering,geers,gaut,gaulin,gaskamp,garbett,gallivan,galland,gaeth,fullenkamp,fullam,friedrichs,freire,freeney,fredenburg,frappier,fowkes,foree,fleurant,fleig,fleagle,fitzsimons,fischetti,fiorenza,finneran,filippi,figueras,fesler,fertig,fennel,feltmann,felps,felmlee,fannon,familia,fairall,fadden,esslinger,enfinger,elsasser,elmendorf,ellisor,einhorn,ehrman,egner,edmisten,edlund,ebinger,dyment,dykeman,durling,dunstan,dunsmore,dugal,duer,drescher,doyel,dossey,donelan,dockstader,dobyns,divis,dilks,didier,desrosier,desanto,deppe,delosh,delange,defrank,debo,dauber,dartez,daquila,dankert,dahn,cygan,cusic,curfman,croghan,croff,criger,creviston,crays,cravey,crandle,crail,crago,craghead,cousineau,couchman,cothron,corella,conine,coller,colberg,cogley,coatney,coale,clendenin,claywell,clagon,cifaldi,choiniere,chickering,chica,chennault,chavarin,chattin,chaloux,challis,cesario,cazarez,caughman,catledge,casebolt,carrel,carra,carlow,capote,canez,camillo,caliendo,calbert,bylsma,buskey,buschman,burkhard,burghardt,burgard,buonocore,bunkley,bungard,bundrick,bumbrey,buice,buffkin,brundige,brockwell,brion,briant,bredeson,bransford,brannock,brakefield,brackens,brabant,bowdoin,bouyer,bothe,boor,bonavita,bollig,blurton,blunk,blanke,blanck,birden,bierbaum,bevington,beutler,betters,bettcher,bera,benway,bengston,benesh,behar,bedsole,becenti,beachy,battersby,basta,bartmess,bartle,bartkowiak,barsky,barrio,barletta,barfoot,banegas,baldonado,azcona,avants,austell,aungst,aune,aumann,audia,atterbury,asselin,asmussen,ashline,asbill,arvizo,arnot,ariola,ardrey,angstadt,anastasio,amsden,amerman,alred,allington,alewine,alcina,alberico,ahlgren,aguas,agrawal,agosta,adolphsen,acey,aburto,abler,zwiebel,zepp,zentz,ybarbo,yarberry,yamauchi,yamashiro,wurtz,wronski,worster,wootten,wongus,woltz,wolanski,witzke,withey,wisecarver,wingham,wineinger,winegarden,windholz,wilgus,wiesen,wieck,widrick,wickliffe,whittenberg,westby,werley,wengert,wendorf,weimar,weick,weckerly,watrous,wasden,walford,wainright,wahlstrom,wadlow,vrba,voisin,vives,vivas,vitello,villescas,villavicencio,villanova,vialpando,vetrano,vensel,vassell,varano,vanriper,vankleeck,vanduyne,vanderpol,vanantwerp,valenzula,udell,turnquist,tuff,trickett,tramble,tingey,timbers,tietz,thiem,tercero,tenner,tenaglia,teaster,tarlton,taitt,tabon,sward,swaby,suydam,surita,suman,suddeth,stumbo,studivant,strobl,streich,stoodley,stoecker,stillwagon,stickle,stellmacher,stefanik,steedley,starbird,stainback,stacker,speir,spath,sommerfeld,soltani,solie,sojka,sobota,sobieski,sobczak,smullen,sleeth,slaymaker,skolnick,skoglund,sires,singler,silliman,shrock,shott,shirah,shimek,shepperd,sheffler,sheeler,sharrock,sharman,shalash,seyfried,seybold,selander,seip,seifried,sedor,sedlock,sebesta,seago,scutt,scrivens,sciacca,schultze,schoemaker,schleifer,schlagel,schlachter,schempp,scheider,scarboro,santi,sandhu,salim,saia,rylander,ryburn,rutigliano,ruocco,ruland,rudloff,rott,rosenburg,rosenbeck,romberger,romanelli,rohloff,rohlfing,rodda,rodd,ritacco,rielly,rieck,rickles,rickenbacker,respass,reisner,reineck,reighard,rehbein,rega,reddix,rawles,raver,rattler,ratledge,rathman,ramsburg,raisor,radovich,radigan,quail,puskar,purtee,priestly,prestidge,presti,pressly,pozo,pottinger,portier,porta,porcelli,poplawski,polin,poeppelman,pocock,plump,plantz,placek,piro,pinnell,pinkowski,pietz,picone,philbeck,pflum,peveto,perret,pentz,payer,patlan,paterno,papageorge,overmyer,overland,osier,orwig,orum,orosz,oquin,opie,ochsner,oathout,nygard,norville,northway,niver,nicolson,newhart,neitzel,nath,nanez,murnane,mortellaro,morreale,morino,moriarity,morgado,moorehouse,mongiello,molton,mirza,minnix,millspaugh,milby,miland,miguez,mickles,michaux,mento,melugin,melito,meinecke,mehr,meares,mcneece,mckane,mcglasson,mcgirt,mcgilvery,mcculler,mccowen,mccook,mcclintic,mccallon,mazzotta,maza,mayse,mayeda,matousek,matley,martyn,marney,marnell,marling,manuelito,maltos,malson,mahi,maffucci,macken,maass,lyttle,lynd,lyden,lukasiewicz,luebbers,lovering,loveall,longtin,lobue,loberg,lipka,lightbody,lichty,levert,lettieri,letsinger,lepak,lemmond,lembke,leitz,lasso,lasiter,lango,landsman,lamirande,lamey,laber,kuta,kulesza,krenz,kreiner,krein,kreiger,kraushaar,kottke,koser,kornreich,kopczynski,konecny,koff,koehl,kocian,knaub,kmetz,kluender,klenke,kleeman,kitzmiller,kirsh,kilman,kildow,kielbasa,ketelsen,kesinger,kehr,keef,kauzlarich,karter,kahre,jobin,jinkins,jines,jeffress,jaquith,jaillet,jablonowski,ishikawa,irey,ingerson,indelicato,huntzinger,huisman,huett,howson,houge,hosack,hora,hoobler,holtzen,holtsclaw,hollingworth,hollin,hoberg,hobaugh,hilker,hilgefort,higgenbotham,heyen,hetzler,hessel,hennessee,hendrie,hellmann,heft,heesch,haymond,haymon,haye,havlik,havis,haverland,haus,harstad,harriston,harju,hardegree,hammell,hamaker,halbrook,halberg,guptill,guntrum,gunderman,gunder,gularte,guarnieri,groll,grippo,greely,gramlich,goewey,goetzinger,goding,giraud,giefer,giberson,gennaro,gemmell,gearing,gayles,gaudin,gatz,gatts,gasca,garn,gandee,gammel,galindez,galati,gagliardo,fulop,fukushima,friedt,fretz,frenz,freeberg,fravel,fountaine,forry,forck,fonner,flippin,flewelling,flansburg,filippone,fettig,fenlon,felter,felkins,fein,favero,faulcon,farver,farless,fahnestock,facemire,faas,eyer,evett,esses,escareno,ensey,ennals,engelking,empey,ellithorpe,effler,edling,edgley,durrell,dunkerson,draheim,domina,dombrosky,doescher,dobbin,divens,dinatale,dieguez,diede,devivo,devilbiss,devaul,determan,desjardin,deshaies,delpozo,delorey,delman,delapp,delamater,deibert,degroff,debelak,dapolito,dano,dacruz,dacanay,cushenberry,cruze,crosbie,cregan,cousino,corrao,corney,cookingham,conry,collingsworth,coldren,cobian,coate,clauss,christenberry,chmiel,chauez,charters,chait,cesare,cella,caya,castenada,cashen,cantrelle,canova,campione,calixte,caicedo,byerley,buttery,burda,burchill,bulmer,bulman,buesing,buczek,buckholz,buchner,buchler,buban,bryne,brunkhorst,brumsey,brumer,brownson,brodnax,brezinski,brazile,braverman,branning,boye,boulden,bough,bossard,bosak,borth,borgmeyer,borge,blowers,blaschke,blann,blankenbaker,bisceglia,billingslea,bialek,beverlin,besecker,berquist,benigno,benavente,belizaire,beisner,behrman,beausoleil,baylon,bayley,bassi,basnett,basilio,basden,basco,banerjee,balli,bagnell,bady,averette,arzu,archambeault,arboleda,arbaugh,arata,antrim,amrhein,amerine,alpers,alfrey,alcon,albus,albertini,aguiniga,aday,acquaviva,accardi,zygmont,zych,zollner,zobel,zinck,zertuche,zaragosa,zale,zaldivar,yeadon,wykoff,woullard,wolfrum,wohlford,wison,wiseley,wisecup,winchenbach,wiltsie,whittlesey,whitelow,whiteford,wever,westrich,wertman,wensel,wenrich,weisbrod,weglarz,wedderburn,weatherhead,wease,warring,wadleigh,voltz,vise,villano,vicario,vermeulen,vazques,vasko,varughese,vangieson,vanfossen,vanepps,vanderploeg,vancleve,valerius,uyehara,unsworth,twersky,turrell,tuner,tsui,trunzo,trousdale,trentham,traughber,torgrimson,toppin,tokar,tobia,tippens,tigue,thiry,thackston,terhaar,tenny,tassin,tadeo,sweigart,sutherlin,sumrell,suen,stuhr,strzelecki,strosnider,streiff,stottlemyer,storment,storlie,stonesifer,stogsdill,stenzel,stemen,stellhorn,steidl,stecklein,statton,stangle,spratling,spoor,spight,spelman,spece,spanos,spadoni,southers,sola,sobol,smyre,slaybaugh,sizelove,sirmons,simington,silversmith,siguenza,sieren,shelman,sharples,sharif,sessler,serrata,serino,serafini,semien,selvey,seedorf,seckman,seawood,scoby,scicchitano,schorn,schommer,schnitzer,schleusner,schlabach,schiel,schepers,schaber,scally,sautner,sartwell,santerre,sandage,salvia,salvetti,salsman,sallis,salais,saeger,sabat,saar,ruther,russom,ruoff,rumery,rubottom,rozelle,rowton,routon,rotolo,rostad,roseborough,rorick,ronco,roher,roberie,robare,ritts,rison,rippe,rinke,ringwood,righter,rieser,rideaux,rickerson,renfrew,releford,reinsch,reiman,reifsteck,reidhead,redfearn,reddout,reaux,rado,radebaugh,quinby,quigg,provo,provenza,provence,pridgeon,praylow,powel,poulter,portner,pontbriand,poirrier,poirer,platero,pixler,pintor,pigman,piersall,piel,pichette,phou,pharis,phalen,petsche,perrier,penfield,pelosi,pebley,peat,pawloski,pawlik,pavlick,pavel,patz,patout,pascucci,pasch,parrinello,parekh,pantaleo,pannone,pankow,pangborn,pagani,pacelli,orsi,oriley,orduno,oommen,olivero,okada,ocon,ocheltree,oberman,nyland,noss,norling,nolton,nobile,nitti,nishimoto,nghiem,neuner,neuberger,neifert,negus,nagler,mullally,moulden,morra,morquecho,moots,mizzell,mirsky,mirabito,minardi,milholland,mikus,mijangos,michener,michalek,methvin,merrit,menter,meneely,meiers,mehring,mees,mcwhirt,mcwain,mcphatter,mcnichol,mcnaught,mclarty,mcivor,mcginness,mcgaughy,mcferrin,mcfate,mcclenny,mcclard,mccaskey,mccallion,mcamis,mathisen,marton,marsico,marchi,mani,mangione,macaraeg,lupi,lunday,lukowski,lucious,locicero,loach,littlewood,litt,lipham,linley,lindon,lightford,lieser,leyendecker,lewey,lesane,lenzi,lenart,leisinger,lehrman,lefebure,lazard,laycock,laver,launer,lastrapes,lastinger,lasker,larkey,lanser,lanphere,landey,lampton,lamark,kumm,kullman,krzeminski,krasner,koran,koning,kohls,kohen,kobel,kniffen,knick,kneip,knappenberger,klumpp,klausner,kitamura,kisling,kirshner,kinloch,kingman,kimery,kestler,kellen,keleher,keehn,kearley,kasprzak,kampf,kamerer,kalis,kahan,kaestner,kadel,kabel,junge,juckett,joynt,jorstad,jetter,jelley,jefferis,jeansonne,janecek,jaffee,izzard,istre,isherwood,ipock,iannuzzi,hypolite,humfeld,hotz,hosein,honahni,holzworth,holdridge,holdaway,holaday,hodak,hitchman,hippler,hinchey,hillin,hiler,hibdon,hevey,heth,hepfer,henneman,hemsley,hemmings,hemminger,helbert,helberg,heinze,heeren,heber,haver,hauff,haswell,harvison,hartson,harshberger,harryman,harries,hane,hamsher,haggett,hagemeier,haecker,haddon,haberkorn,guttman,guttierrez,guthmiller,guillet,guilbert,gugino,grumbles,griffy,gregerson,grana,goya,goranson,gonsoulin,goettl,goertz,godlewski,glandon,gilsdorf,gillogly,gilkison,giard,giampaolo,gheen,gettings,gesell,gershon,gaumer,gartrell,garside,garrigan,garmany,garlitz,garlington,gamet,furlough,funston,funaro,frix,frasca,francoeur,forshey,foose,flatley,flagler,fils,fillers,fickett,feth,fennelly,fencl,felch,fedrick,febres,fazekas,farnan,fairless,ewan,etsitty,enterline,elsworth,elliff,eleby,eldreth,eidem,edgecomb,edds,ebarb,dworkin,dusenberry,durrance,duropan,durfey,dungy,dundon,dumbleton,dubon,dubberly,droz,drinkwater,dressel,doughtie,doshier,dorrell,dople,doonan,donadio,dollison,doig,ditzler,dishner,discher,dimaio,digman,difalco,devino,devens,derosia,deppen,depaola,deniz,denardo,demos,demay,delgiudice,davi,danielsen,dally,dais,dahmer,cutsforth,cusimano,curington,cumbee,cryan,crusoe,crowden,crete,cressman,crapo,cowens,coupe,councill,coty,cotnoir,correira,copen,consiglio,combes,coffer,cockrill,coad,clogston,clasen,chesnutt,charrier,chadburn,cerniglia,cebula,castruita,castilla,castaldi,casebeer,casagrande,carta,carrales,carnley,cardon,capshaw,capron,cappiello,capito,canney,candela,caminiti,califano,calabria,caiazzo,cahall,buscemi,burtner,burgdorf,burdo,buffaloe,buchwald,brwon,brunke,brummond,brumm,broe,brocious,brocato,briski,brisker,brightwell,bresett,breiner,brazeau,braz,brayman,brandis,bramer,bradeen,boyko,bossi,boshart,bortle,boniello,bomgardner,bolz,bolenbaugh,bohling,bohland,bochenek,blust,bloxham,blowe,blish,blackwater,bjelland,biros,biederman,bickle,bialaszewski,bevil,beumer,bettinger,besse,bernett,bermejo,bement,belfield,beckler,baxendale,batdorf,bastin,bashore,bascombe,bartlebaugh,barsh,ballantine,bahl,badon,autin,astin,askey,ascher,arrigo,arbeiter,antes,angers,amburn,amarante,alvidrez,althaus,allmond,alfieri,aldinger,akerley,akana,aikins,ader,acebedo,accardo,abila,aberle,abele,abboud,zollars,zimmerer,zieman,zerby,zelman,zellars,yoshimura,yonts,yeats,yant,yamanaka,wyland,wuensche,worman,wordlaw,wohl,winslett,winberg,wilmeth,willcutt,wiers,wiemer,wickwire,wichman,whitting,whidbee,westergard,wemmer,wellner,weishaupt,weinert,weedon,waynick,wasielewski,waren,walworth,wallingford,walke,waechter,viviani,vitti,villagrana,vien,vicks,venema,varnes,varnadoe,varden,vanpatten,vanorden,vanderzee,vandenburg,vandehey,valls,vallarta,valderrama,valade,urman,ulery,tusa,tuft,tripoli,trimpe,trickey,tortora,torrens,torchia,toft,tjaden,tison,tindel,thurmon,thode,tardugno,tancredi,taketa,taillon,tagle,sytsma,symes,swindall,swicegood,swartout,sundstrom,sumners,sulton,studstill,stroop,stonerock,stmarie,stlawrence,stemm,steinhauser,steinert,steffensen,stefaniak,starck,stalzer,spidle,spake,sowinski,sosnowski,sorber,somma,soliday,soldner,soja,soderstrom,soder,sockwell,sobus,sloop,sinkfield,simerly,silguero,sigg,siemers,siegmund,shum,sholtis,shkreli,sheikh,shattles,sharlow,shambaugh,shaikh,serrao,serafino,selley,selle,seel,sedberry,secord,schunk,schuch,schor,scholze,schnee,schmieder,schleich,schimpf,scherf,satterthwaite,sasson,sarkisian,sarinana,sanzone,salvas,salone,salido,saiki,sahr,rusher,rusek,ruppel,rubel,rothfuss,rothenberger,rossell,rosenquist,rosebrook,romito,romines,rolan,roker,roehrig,rockhold,rocca,robuck,riss,rinaldo,riggenbach,rezentes,reuther,renolds,rench,remus,remsen,reller,relf,reitzel,reiher,rehder,redeker,ramero,rahaim,radice,quijas,qualey,purgason,prum,proudfoot,prock,probert,printup,primer,primavera,prenatt,pratico,polich,podkowka,podesta,plattner,plasse,plamondon,pittmon,pippenger,pineo,pierpont,petzold,petz,pettiway,petters,petroski,petrik,pesola,pershall,perlmutter,penepent,peevy,pechacek,peaden,pazos,pavia,pascarelli,parm,parillo,parfait,paoletti,palomba,palencia,pagaduan,oxner,overfield,overcast,oullette,ostroff,osei,omarah,olenick,olah,odem,nygren,notaro,northcott,nodine,nilges,neyman,neve,neuendorf,neisler,neault,narciso,naff,muscarella,morrisette,morphew,morein,montville,montufar,montesinos,monterroso,mongold,mojarro,moitoso,mirarchi,mirando,minogue,milici,miga,midyett,michna,meuser,messana,menzie,menz,mendicino,melone,mellish,meller,melle,meints,mechem,mealer,mcwilliam,mcwhite,mcquiggan,mcphillips,mcpartland,mcnellis,mcmackin,mclaughin,mckinny,mckeithan,mcguirk,mcgillivray,mcgarr,mcgahee,mcfaul,mcfadin,mceuen,mccullah,mcconico,mcclaren,mccaul,mccalley,mccalister,mazer,mayson,mayhan,maugeri,mauger,mattix,mattews,maslowski,masek,martir,marsch,marquess,maron,markwell,markow,marinaro,marcinek,mannella,mallen,majeed,mahnke,mahabir,magby,magallan,madere,machnik,lybrand,luque,lundholm,lueders,lucian,lubinski,lowy,loew,lippard,linson,lindblad,lightcap,levitsky,levens,leonardi,lenton,lengyel,leitzel,leicht,leaver,laubscher,lashua,larusso,larrimore,lanterman,lanni,lanasa,lamoureaux,lambros,lamborn,lamberti,lall,lafuente,laferriere,laconte,kyger,kupiec,kunzman,kuehne,kuder,kubat,krogh,kreidler,krawiec,krauth,kratky,kottwitz,korb,kono,kolman,kolesar,koeppel,knapper,klingenberg,kjos,keppel,kennan,keltz,kealoha,kasel,karney,kanne,kamrowski,kagawa,johnosn,jilek,jarvie,jarret,jansky,jacquemin,jacox,jacome,iriarte,ingwersen,imboden,iglesia,huyser,hurston,hursh,huntoon,hudman,hoying,horsman,horrigan,hornbaker,horiuchi,hopewell,hommel,homeyer,holzinger,holmer,hipsher,hinchman,hilts,higginbottom,hieb,heyne,hessling,hesler,hertlein,herford,heras,henricksen,hennemann,henery,hendershott,hemstreet,heiney,heckert,heatley,hazell,hazan,hayashida,hausler,hartsoe,harth,harriott,harriger,harpin,hardisty,hardge,hannaman,hannahs,hamp,hammersmith,hamiton,halsell,halderman,hagge,habel,gusler,gushiken,gurr,gummer,gullick,grunden,grosch,greenburg,greb,greaver,gratz,grajales,gourlay,gotto,gorley,goodpasture,godard,glorioso,gloor,glascock,gizzi,giroir,gibeault,gauldin,gauer,gartin,garrels,gamber,gallogly,gade,fusaro,fripp,freyer,freiberg,franzoni,fragale,foston,forti,forness,folts,followell,foard,flom,flett,fleitas,flamm,fino,finnen,finchum,filippelli,fickel,feucht,feiler,feenstra,feagins,faver,faulkenberry,farabaugh,fandel,faler,faivre,fairey,facey,exner,evensen,erion,erben,epting,epping,ephraim,engberg,elsen,ellingwood,eisenmann,eichman,ehle,edsall,durall,dupler,dunker,dumlao,duford,duffie,dudding,dries,doung,dorantes,donahoo,domenick,dollins,dobles,dipiazza,dimeo,diehm,dicicco,devenport,desormeaux,derrow,depaolo,demas,delpriore,delosantos,degreenia,degenhardt,defrancesco,defenbaugh,deets,debonis,deary,dazey,dargie,dambrosia,dalal,dagen,cuen,crupi,crossan,crichlow,creque,coutts,counce,coram,constante,connon,collelo,coit,cocklin,coblentz,cobey,coard,clutts,clingan,clampitt,claeys,ciulla,cimini,ciampa,christon,choat,chiou,chenail,chavous,catto,catalfamo,casterline,cassinelli,caspers,carroway,carlen,carithers,cappel,calo,callow,cagley,cafferty,byun,byam,buttner,buth,burtenshaw,burget,burfield,buresh,bunt,bultman,bulow,buchta,buchmann,brunett,bruemmer,brueggeman,britto,briney,brimhall,bribiesca,bresler,brazan,brashier,brar,brandstetter,boze,boonstra,bluitt,blomgren,blattner,blasi,bladen,bitterman,bilby,bierce,biello,bettes,bertone,berrey,bernat,berberich,benshoof,bendickson,bellefeuille,bednarski,beddingfield,beckerman,beaston,bavaro,batalla,basye,baskins,bartolotta,bartkowski,barranco,barkett,banaszak,bame,bamberger,balsley,ballas,balicki,badura,aymond,aylor,aylesworth,axley,axelrod,aubert,armond,ariza,apicella,anstine,ankrom,angevine,andreotti,alto,alspaugh,alpaugh,almada,allinder,alequin,aguillard,agron,agena,afanador,ackerley,abrev,abdalla,aaronson,zynda,zucco,zipp,zetina,zenz,zelinski,youngren,yochum,yearsley,yankey,woodfork,wohlwend,woelfel,wiste,wismer,winzer,winker,wilkison,wigger,wierenga,whipps,westray,wesch,weld,weible,wedell,weddell,wawrzyniak,wasko,washinton,wantz,walts,wallander,wain,wahlen,wachowiak,voshell,viteri,vire,villafuerte,vieyra,viau,vescio,verrier,verhey,vause,vandermolen,vanderhorst,valois,valla,valcourt,vacek,uzzle,umland,ulman,ulland,turvey,tuley,trembath,trabert,towsend,totman,toews,tisch,tisby,tierce,thivierge,tenenbaum,teagle,tacy,tabler,szewczyk,swearngin,suire,sturrock,stubbe,stronach,stoute,stoudemire,stoneberg,sterba,stejskal,steier,stehr,steckel,stearman,steakley,stanforth,stancill,srour,sprowl,spevak,sokoloff,soderman,snover,sleeman,slaubaugh,sitzman,simes,siegal,sidoti,sidler,sider,sidener,siddiqi,shireman,shima,sheroan,shadduck,seyal,sentell,sennett,senko,seligman,seipel,seekins,seabaugh,scouten,schweinsberg,schwartzberg,schurr,schult,schrick,schoening,schmitmeyer,schlicher,schlager,schack,schaar,scavuzzo,scarpa,sassano,santigo,sandavol,sampsel,samms,samet,salzano,salyards,salva,saidi,sabir,saam,runions,rundquist,rousselle,rotunno,rosch,romney,rohner,roff,rockhill,rocamora,ringle,riggie,ricklefs,rexroat,reves,reuss,repka,rentfro,reineke,recore,recalde,rease,rawling,ravencraft,ravelo,rappa,randol,ramsier,ramerez,rahimi,rahim,radney,racey,raborn,rabalais,quebedeaux,pujol,puchalski,prothro,proffit,prigge,prideaux,prevo,portales,porco,popovic,popek,popejoy,pompei,plude,platner,pizzuto,pizer,pistone,piller,pierri,piehl,pickert,piasecki,phong,philipp,peugh,pesqueira,perrett,perfetti,percell,penhollow,pelto,pellett,pavlak,paulo,pastorius,parsell,parrales,pareja,parcell,pappan,pajak,owusu,ovitt,orrick,oniell,olliff,olberding,oesterling,odwyer,ocegueda,obermiller,nylander,nulph,nottage,northam,norgard,nodal,niel,nicols,newhard,nellum,neira,nazzaro,nassif,narducci,nalbandian,musil,murga,muraoka,mumper,mulroy,mountjoy,mossey,moreton,morea,montoro,montesdeoca,montealegre,montanye,montandon,moisan,mohl,modeste,mitra,minson,minjarez,milbourne,michaelsen,metheney,mestre,mescher,mervis,mennenga,melgarejo,meisinger,meininger,mcwaters,mckern,mckendree,mchargue,mcglothlen,mcgibbon,mcgavock,mcduffee,mcclurkin,mccausland,mccardell,mccambridge,mazzoni,mayen,maxton,mawson,mauffray,mattinson,mattila,matsunaga,mascia,marse,marotz,marois,markin,markee,marcinko,marcin,manville,mantyla,manser,manry,manderscheid,mallari,malecha,malcomb,majerus,macinnis,mabey,lyford,luth,lupercio,luhman,luedke,lovick,lossing,lookabaugh,longway,loisel,logiudice,loffredo,lobaugh,lizaola,livers,littlepage,linnen,limmer,liebsch,liebman,leyden,levitan,levison,levier,leven,levalley,lettinga,lessley,lessig,lepine,leight,leick,leggio,leffingwell,leffert,lefevers,ledlow,leaton,leander,leaming,lazos,laviolette,lauffer,latz,lasorsa,lasch,larin,laporta,lanter,langstaff,landi,lamica,lambson,lambe,lamarca,laman,lamagna,lajeunesse,lafontant,lafler,labrum,laakso,kush,kuether,kuchar,kruk,kroner,kroh,kridler,kreuzer,kovats,koprowski,kohout,knicely,knell,klutts,kindrick,kiddy,khanna,ketcher,kerschner,kerfien,kensey,kenley,kenan,kemplin,kellerhouse,keesling,keas,kaplin,kanady,kampen,jutras,jungers,jeschke,janowski,janas,iskra,imperato,ikerd,igoe,hyneman,hynek,husain,hurrell,hultquist,hullett,hulen,huberty,hoyte,hossain,hornstein,hori,hopton,holms,hollmann,holdman,holdeman,holben,hoffert,himel,hillsman,herdt,hellyer,heister,heimer,heidecker,hedgpeth,hedgepath,hebel,heatwole,hayer,hausner,haskew,haselden,hartranft,harsch,harres,harps,hardimon,halm,hallee,hallahan,hackley,hackenberg,hachey,haapala,guynes,gunnerson,gunby,gulotta,gudger,groman,grignon,griebel,gregori,greenan,grauer,gourd,gorin,gorgone,gooslin,goold,goltz,goldberger,glotfelty,glassford,gladwin,giuffre,gilpatrick,gerdts,geisel,gayler,gaunce,gaulding,gateley,gassman,garson,garron,garand,gangestad,gallow,galbo,gabrielli,fullington,fucci,frum,frieden,friberg,frasco,francese,fowle,foucher,fothergill,foraker,fonder,foisy,fogal,flurry,flenniken,fitzhenry,fishbein,finton,filmore,filice,feola,felberbaum,fausnaught,fasciano,farquharson,faires,estridge,essman,enriques,emmick,ekker,ekdahl,eisman,eggleton,eddinger,eakle,eagar,durio,dunwoody,duhaime,duenes,duden,dudas,dresher,dresel,doutt,donlan,donathan,domke,dobrowolski,dingee,dimmitt,dimery,dilullo,deveaux,devalle,desper,desnoyers,desautels,derouin,derbyshire,denmon,demski,delucca,delpino,delmont,deller,dejulio,deibler,dehne,deharo,degner,defore,deerman,decuir,deckman,deasy,dease,deaner,dawdy,daughdrill,darrigo,darity,dalbey,dagenhart,daffron,curro,curnutte,curatolo,cruikshank,crosswell,croslin,croney,crofton,criado,crecelius,coscia,conniff,commodore,coltharp,colonna,collyer,collington,cobbley,coache,clonts,cloe,cliett,clemans,chrisp,chiarini,cheatam,cheadle,chand,chadd,cervera,cerulli,cerezo,cedano,cayetano,cawthorne,cavalieri,cattaneo,cartlidge,carrithers,carreira,carranco,cargle,candanoza,camburn,calender,calderin,calcagno,cahn,cadden,byham,buttry,burry,burruel,burkitt,burgio,burgener,buescher,buckalew,brymer,brumett,brugnoli,brugman,brosnahan,bronder,broeckel,broderson,brisbon,brinsfield,brinks,bresee,bregman,branner,brambila,brailsford,bouska,boster,borucki,bortner,boroughs,borgeson,bonier,bomba,bolender,boesch,boeke,bloyd,bley,binger,bilbro,biery,bichrest,bezio,bevel,berrett,bermeo,bergdoll,bercier,benzel,bentler,belnap,bellini,beitz,behrend,bednarczyk,bearse,bartolini,bartol,barretta,barbero,barbaro,banvelos,bankes,ballengee,baldon,ausmus,atilano,atienza,aschenbrenner,arora,armstong,aquilino,appleberry,applebee,apolinar,antos,andrepont,ancona,amesquita,alvino,altschuler,allin,alire,ainslie,agular,aeschliman,accetta,abdulla,abbe,zwart,zufelt,zirbel,zingaro,zilnicki,zenteno,zent,zemke,zayac,zarrella,yoshimoto,yearout,womer,woltman,wolin,wolery,woldt,witts,wittner,witherow,winward,winrow,wiemann,wichmann,whitwell,whitelaw,wheeless,whalley,wessner,wenzl,wene,weatherbee,waye,wattles,wanke,walkes,waldeck,vonruden,voisine,vogus,vittetoe,villalva,villacis,venturini,venturi,venson,vanloan,vanhooser,vanduzer,vandever,vanderwal,vanderheyden,vanbeek,vanbebber,vallance,vales,vahle,urbain,upshur,umfleet,tsuji,trybus,triolo,trimarchi,trezza,trenholm,tovey,tourigny,torry,torrain,torgeson,tomey,tischler,tinkler,tinder,ticknor,tibbles,tibbals,throneberry,thormahlen,thibert,thibeaux,theurer,templet,tegeler,tavernier,taubman,tamashiro,tallon,tallarico,taboada,sypher,sybert,swyers,switalski,swedberg,suther,surprenant,sullen,sulik,sugden,suder,suchan,strube,stroope,strittmatter,streett,straughn,strasburg,stjacques,stimage,stimac,stifter,stgelais,steinhart,stehlik,steffenson,steenbergen,stanbery,stallone,spraggs,spoto,spilman,speno,spanbauer,spalla,spagnolo,soliman,solan,sobolik,snelgrove,snedden,smale,sliter,slankard,sircy,shutter,shurtliff,shur,shirkey,shewmake,shams,shadley,shaddox,sgro,serfass,seppala,segawa,segalla,seaberry,scruton,scism,schwein,schwartzman,schwantes,schomer,schoenborn,schlottmann,schissler,scheurer,schepis,scheidegger,saunier,sauders,sassman,sannicolas,sanderfur,salser,sagar,saffer,saeed,sadberry,saban,ryce,rybak,rumore,rummell,rudasill,rozman,rota,rossin,rosell,rosel,romberg,rojero,rochin,robideau,robarge,roath,risko,ringel,ringdahl,riera,riemann,ribas,revard,renegar,reinwald,rehman,redel,raysor,rathke,rapozo,rampton,ramaker,rakow,raia,radin,raco,rackham,racca,racanelli,rabun,quaranta,purves,pundt,protsman,prezioso,presutti,presgraves,poydras,portnoy,portalatin,pontes,poehler,poblete,poat,plumadore,pleiman,pizana,piscopo,piraino,pinelli,pillai,picken,picha,piccoli,philen,petteway,petros,peskin,perugini,perrella,pernice,peper,pensinger,pembleton,passman,parrent,panetta,pallas,palka,pais,paglia,padmore,ottesen,oser,ortmann,ormand,oriol,orick,oler,okafor,ohair,obert,oberholtzer,nowland,nosek,nordeen,nolf,nogle,nobriga,nicley,niccum,newingham,neumeister,neugebauer,netherland,nerney,neiss,neis,neider,neeld,nailor,mustain,mussman,musante,murton,murden,munyon,muldrew,motton,moscoso,moschella,moroz,morelos,morace,moone,montesano,montemurro,montas,montalbo,molander,mleczko,miyake,mitschke,minger,minelli,minear,millener,mihelich,miedema,miah,metzer,mery,merrigan,merck,mennella,membreno,melecio,melder,mehling,mehler,medcalf,meche,mealing,mcqueeney,mcphaul,mcmickle,mcmeen,mcmains,mclees,mcgowin,mcfarlain,mcdivitt,mccotter,mcconn,mccaster,mcbay,mcbath,mayoral,mayeux,matsuo,masur,massman,marzette,martensen,marlett,markgraf,marcinkowski,marchbanks,mansir,mandez,mancil,malagon,magnani,madonia,madill,madia,mackiewicz,macgillivray,macdowell,mabee,lundblad,lovvorn,lovings,loreto,linz,linnell,linebaugh,lindstedt,lindbloom,limberg,liebig,lickteig,lichtenberg,licari,lewison,levario,levar,lepper,lenzen,lenderman,lemarr,leinen,leider,legrande,lefort,lebleu,leask,leacock,lazano,lawalin,laven,laplaca,lant,langsam,langone,landress,landen,lande,lamorte,lairsey,laidlaw,laffin,lackner,lacaze,labuda,labree,labella,labar,kyer,kuyper,kulinski,kulig,kuhnert,kuchera,kubicek,kruckeberg,kruchten,krider,kotch,kornfeld,koren,koogler,koll,kole,kohnke,kohli,kofoed,koelling,kluth,klump,klopfenstein,klippel,klinge,klett,klemp,kleis,klann,kitzman,kinnan,kingsberry,kilmon,killpack,kilbane,kijowski,kies,kierstead,kettering,kesselman,kennington,keniston,kehrer,kearl,keala,kassa,kasahara,kantz,kalin,kaina,jupin,juntunen,juares,joynes,jovel,joos,jiggetts,jervis,jerabek,jennison,jaso,janz,izatt,ishibashi,iannotti,hymas,huneke,hulet,hougen,horvat,horstmann,hopple,holtkamp,holsten,hohenstein,hoefle,hoback,hiney,hiemstra,herwig,herter,herriott,hermsen,herdman,herder,herbig,helling,helbig,heitkamp,heinrichs,heinecke,heileman,heffley,heavrin,heaston,haymaker,hauenstein,hartlage,harig,hardenbrook,hankin,hamiter,hagens,hagel,grizzell,griest,griese,grennan,graden,gosse,gorder,goldin,goatley,gillespi,gilbride,giel,ghoston,gershman,geisinger,gehringer,gedeon,gebert,gaxiola,gawronski,gathright,gatchell,gargiulo,garg,galang,gadison,fyock,furniss,furby,funnell,frizell,frenkel,freeburg,frankhouser,franchi,foulger,formby,forkey,fonte,folson,follette,flavell,finegan,filippini,ferencz,ference,fennessey,feggins,feehan,fazzino,fazenbaker,faunce,farraj,farnell,farler,farabee,falkowski,facio,etzler,ethington,esterline,esper,esker,erxleben,engh,emling,elridge,ellenwood,elfrink,ekhoff,eisert,eifert,eichenlaub,egnor,eggebrecht,edlin,edberg,eble,eber,easler,duwe,dutta,dutremble,dusseault,durney,dunworth,dumire,dukeman,dufner,duey,duble,dreese,dozal,douville,ditmore,distin,dimuzio,dildine,dieterich,dieckman,didonna,dhillon,dezern,devereux,devall,detty,detamore,derksen,deremer,deras,denslow,deno,denicola,denbow,demma,demille,delira,delawder,delara,delahanty,dejonge,deininger,dedios,dederick,decelles,debus,debruyn,deborde,deak,dauenhauer,darsey,dansie,dalman,dakin,dagley,czaja,cybart,cutchin,currington,curbelo,croucher,crinklaw,cremin,cratty,cranfield,crafford,cowher,couvillion,couturier,corter,coombes,contos,consolini,connaughton,conely,collom,cockett,clepper,cleavenger,claro,clarkin,ciriaco,ciesla,cichon,ciancio,cianci,chynoweth,chrzanowski,christion,cholewa,chipley,chilcott,cheyne,cheslock,chenevert,charlot,chagolla,chabolla,cesena,cerutti,cava,caul,cassone,cassin,cassese,casaus,casali,cartledge,cardamone,carcia,carbonneau,carboni,carabello,capozzoli,capella,cannata,campoverde,campeau,cambre,camberos,calvery,calnan,calmes,calley,callery,calise,cacciotti,cacciatore,butterbaugh,burgo,burgamy,burell,bunde,bumbalough,buel,buechner,buchannon,brunn,brost,broadfoot,brittan,brevard,breda,brazel,brayboy,brasier,boyea,boxx,boso,bosio,boruff,borda,bongiovanni,bolerjack,boedeker,blye,blumstein,blumenfeld,blinn,bleakley,blatter,blan,bjornson,bisignano,billick,bieniek,bhatti,bevacqua,berra,berenbaum,bensinger,bennefield,belvins,belson,bellin,beighley,beecroft,beaudreau,baynard,bautch,bausch,basch,bartleson,barthelemy,barak,balzano,balistreri,bailer,bagnall,bagg,auston,augustyn,aslinger,ashalintubbi,arjona,arebalo,appelbaum,angert,angelucci,andry,andersson,amorim,amavisca,alward,alvelo,alvear,alumbaugh,alsobrook,allgeier,allende,aldrete,akiyama,ahlquist,adolphson,addario,acoff,abelson,abasta,zulauf,zirkind,zeoli,zemlicka,zawislak,zappia,zanella,yelvington,yeatman,yanni,wragg,wissing,wischmeier,wirta,wiren,wilmouth,williard,willert,willaert,wildt,whelpley,weingart,weidenbach,weidemann,weatherman,weakland,watwood,wattley,waterson,wambach,walzer,waldow,waag,vorpahl,volkmann,vitolo,visitacion,vincelette,viggiano,vieth,vidana,vert,verges,verdejo,venzon,velardi,varian,vargus,vandermeulen,vandam,vanasse,vanaman,utzinger,uriostegui,uplinger,twiss,tumlinson,tschanz,trunnell,troung,troublefield,trojacek,treloar,tranmer,touchton,torsiello,torina,tootle,toki,toepfer,tippie,thronson,thomes,tezeno,texada,testani,tessmer,terrel,terlizzi,tempel,temblador,tayler,tawil,tasch,tames,talor,talerico,swinderman,sweetland,swager,sulser,sullens,subia,sturgell,stumpff,stufflebeam,stucki,strohmeyer,strebel,straughan,strackbein,stobaugh,stetz,stelter,steinmann,steinfeld,stecher,stanwood,stanislawski,stander,speziale,soppe,soni,sobotka,smuin,slee,skerrett,sjoberg,sittig,simonelli,simo,silverio,silveria,silsby,sillman,sienkiewicz,shomo,shoff,shoener,shiba,sherfey,shehane,sexson,setton,sergi,selvy,seiders,seegmiller,sebree,seabury,scroggin,sconyers,schwalb,schurg,schulenberg,schuld,schrage,schow,schon,schnur,schneller,schmidtke,schlatter,schieffer,schenkel,scheeler,schauwecker,schartz,schacherer,scafe,sayegh,savidge,saur,sarles,sarkissian,sarkis,sarcone,sagucio,saffell,saenger,sacher,rylee,ruvolo,ruston,ruple,rulison,ruge,ruffo,ruehl,rueckert,rudman,rudie,rubert,rozeboom,roysden,roylance,rothchild,rosse,rosecrans,rodi,rockmore,robnett,roberti,rivett,ritzel,rierson,ricotta,ricken,rezac,rendell,reitman,reindl,reeb,reddic,reddell,rebuck,reali,raso,ramthun,ramsden,rameau,ralphs,rago,racz,quinteros,quinter,quinley,quiggle,purvines,purinton,purdum,pummill,puglia,puett,ptacek,przybyla,prowse,prestwich,pracht,poutre,poucher,portera,polinsky,poage,platts,pineau,pinckard,pilson,pilling,pilkins,pili,pikes,pigram,pietila,pickron,philippi,philhower,pflueger,pfalzgraf,pettibone,pett,petrosino,persing,perrino,perotti,periera,peri,peredo,peralto,pennywell,pennel,pellegren,pella,pedroso,paulos,paulding,pates,pasek,paramo,paolino,panganiban,paneto,paluch,ozaki,ownbey,overfelt,outman,opper,onstad,oland,okuda,oertel,oelke,normandeau,nordby,nordahl,noecker,noblin,niswonger,nishioka,nett,negley,nedeau,natera,nachman,naas,musich,mungin,mourer,mounsey,mottola,mothershed,moskal,mosbey,morini,moreles,montaluo,moneypenny,monda,moench,moates,moad,missildine,misiewicz,mirabella,minott,mincks,milum,milani,mikelson,mestayer,mertes,merrihew,merlos,meritt,melnyk,medlen,meder,mcvea,mcquarrie,mcquain,mclucas,mclester,mckitrick,mckennon,mcinnes,mcgrory,mcgranahan,mcglamery,mcgivney,mcgilvray,mccuiston,mccuin,mccrystal,mccolley,mcclerkin,mcclenon,mccamey,mcaninch,mazariegos,maynez,mattioli,mastronardi,masone,marzett,marsland,margulies,margolin,malatesta,mainer,maietta,magrath,maese,madkins,madeiros,madamba,mackson,maben,lytch,lundgreen,lumb,lukach,luick,luetkemeyer,luechtefeld,ludy,ludden,luckow,lubinsky,lowes,lorenson,loran,lopinto,looby,lones,livsey,liskey,lisby,lintner,lindow,lindblom,liming,liechty,leth,lesniewski,lenig,lemonds,leisy,lehrer,lehnen,lehmkuhl,leeth,leeks,lechler,lebsock,lavere,lautenschlage,laughridge,lauderback,laudenslager,lassonde,laroque,laramee,laracuente,lapeyrouse,lampron,lamers,laino,lague,lafromboise,lafata,lacount,lachowicz,kysar,kwiecien,kuffel,kueter,kronenberg,kristensen,kristek,krings,kriesel,krey,krebbs,kreamer,krabbe,kossman,kosakowski,kosak,kopacz,konkol,koepsell,koening,koen,knerr,knapik,kluttz,klocke,klenk,klemme,klapp,kitchell,kita,kissane,kirkbride,kirchhoff,kinter,kinsel,kingsland,kimmer,kimler,killoran,kieser,khalsa,khalaf,kettel,kerekes,keplin,kentner,kennebrew,kenison,kellough,keatts,keasey,kauppi,katon,kanner,kampa,kall,kaczorowski,kaczmarski,juarbe,jordison,jobst,jezierski,jeanbart,jarquin,jagodzinski,ishak,isett,infantino,imburgia,illingworth,hysmith,hynson,hydrick,hurla,hunton,hunnell,humbertson,housand,hottle,hosch,hoos,honn,hohlt,hodel,hochmuth,hixenbaugh,hislop,hisaw,hintzen,hilgendorf,hilchey,higgens,hersman,herrara,hendrixson,hendriks,hemond,hemmingway,heminger,helgren,heisey,heilmann,hehn,hegna,heffern,hawrylak,haverty,hauger,haslem,harnett,harb,happ,hanzlik,hanway,hanby,hanan,hamric,hammaker,halas,hagenbuch,habeck,gwozdz,gunia,guadarrama,grubaugh,grivas,griffieth,grieb,grewell,gregorich,grazier,graeber,graciano,gowens,goodpaster,gondek,gohr,goffney,godbee,gitlin,gisler,gillyard,gillooly,gilchrest,gilbo,gierlach,giebler,giang,geske,gervasio,gertner,gehling,geeter,gaus,gattison,gatica,gathings,gath,gassner,gassert,garabedian,gamon,gameros,galban,gabourel,gaal,fuoco,fullenwider,fudala,friscia,franceschini,foronda,fontanilla,florey,flore,flegle,flecha,fisler,fischbach,fiorita,figura,figgins,fichera,ferra,fawley,fawbush,fausett,farnes,farago,fairclough,fahie,fabiani,evanson,eutsey,eshbaugh,ertle,eppley,englehardt,engelhard,emswiler,elling,elderkin,eland,efaw,edstrom,edgemon,ecton,echeverri,ebright,earheart,dynes,dygert,dyches,dulmage,duhn,duhamel,dubrey,dubray,dubbs,drey,drewery,dreier,dorval,dorough,dorais,donlin,donatelli,dohm,doetsch,dobek,disbrow,dinardi,dillahunty,dillahunt,diers,dier,diekmann,diangelo,deskin,deschaine,depaoli,denner,demyan,demont,demaray,delillo,deleeuw,deibel,decato,deblasio,debartolo,daubenspeck,darner,dardon,danziger,danials,damewood,dalpiaz,dallman,dallaire,cunniffe,cumpston,cumbo,cubero,cruzan,cronkhite,critelli,crimi,creegan,crean,craycraft,cranfill,coyt,courchesne,coufal,corradino,corprew,colville,cocco,coby,clinch,clickner,clavette,claggett,cirigliano,ciesielski,christain,chesbro,chavera,chard,casteneda,castanedo,casseus,caruana,carnero,cappelli,capellan,canedy,cancro,camilleri,calero,cada,burghart,burbidge,bulfer,buis,budniewski,bruney,brugh,brossard,brodmerkel,brockmann,brigmond,briere,bremmer,breck,breau,brautigam,brasch,brandenberger,bragan,bozell,bowsher,bosh,borgia,borey,boomhower,bonneville,bonam,bolland,boise,boeve,boettger,boersma,boateng,bliven,blazier,blahnik,bjornstad,bitton,biss,birkett,billingsly,biagioni,bettle,bertucci,bertolino,bermea,bergner,berber,bensley,bendixen,beltrami,bellone,belland,behringer,begum,bayona,batiz,bassin,baskette,bartolomeo,bartolo,bartholow,barkan,barish,barett,bardo,bamburg,ballerini,balla,balis,bakley,bailon,bachicha,babiarz,ayars,axton,axel,awong,awalt,auslander,ausherman,aumick,atha,atchinson,aslett,askren,arrowsmith,arras,arnhold,armagost,arey,arcos,archibeque,antunes,antilla,andras,amyx,amison,amero,alzate,alper,aller,alioto,aigner,agtarap,agbayani,adami,achorn,aceuedo,acedo,abundis,aber,abee,zuccaro,ziglar,zier,ziebell,zieba,zamzow,zahl,yurko,yurick,yonkers,yerian,yeaman,yarman,yann,yahn,yadon,yadao,woodbridge,wolske,wollenberg,wojtczak,wnuk,witherite,winther,winick,widell,wickens,whichard,wheelis,wesely,wentzell,wenthold,wemple,weisenburger,wehling,weger,weaks,wassink,walquist,wadman,wacaster,waage,voliva,vlcek,villafana,vigliotti,viger,viernes,viands,veselka,versteeg,vero,verhoeven,vendetti,velardo,vatter,vasconcellos,varn,vanwagner,vanvoorhis,vanhecke,vanduyn,vandervoort,vanderslice,valone,vallier,vails,uvalle,ursua,urenda,uphoff,tustin,turton,turnbough,turck,tullio,tuch,truehart,tropea,troester,trippe,tricarico,trevarthen,trembly,trabue,traber,tosi,toal,tinley,tingler,timoteo,tiffin,ticer,thorman,therriault,theel,tessman,tekulve,tejera,tebbs,tavernia,tarpey,tallmadge,takemoto,szot,sylvest,swindoll,swearinger,swantek,swaner,swainston,susi,surrette,sullenger,sudderth,suddarth,suckow,strege,strassburg,stoval,stotz,stoneham,stilley,stille,stierwalt,stfleur,steuck,stermer,stclaire,stano,staker,stahler,stablein,srinivasan,squillace,sprvill,sproull,sprau,sporer,spore,spittler,speelman,sparr,sparkes,spang,spagnuolo,sosinski,sorto,sorkin,sondag,sollers,socia,snarr,smrekar,smolka,slyter,slovinsky,sliwa,slavik,slatter,skiver,skeem,skala,sitzes,sitsler,sitler,sinko,simser,siegler,sideris,shrewsberry,shoopman,shoaff,shindler,shimmin,shill,shenkel,shemwell,shehorn,severa,semones,selsor,sekulski,segui,sechrest,schwer,schwebach,schur,schmiesing,schlick,schlender,schebler,schear,schapiro,sauro,saunder,sauage,satterly,saraiva,saracino,saperstein,sanmartin,sanluis,sandt,sandrock,sammet,sama,salk,sakata,saini,sackrider,russum,russi,russaw,rozzell,roza,rowlette,rothberg,rossano,rosebrock,romanski,romanik,romani,roiger,roig,roehr,rodenberger,rodela,rochford,ristow,rispoli,rigo,riesgo,riebel,ribera,ribaudo,reys,resendes,repine,reisdorf,reisch,rebman,rasmus,raske,ranum,rames,rambin,raman,rajewski,raffield,rady,radich,raatz,quinnie,pyper,puthoff,prow,proehl,pribyl,pretti,prete,presby,poyer,powelson,porteous,poquette,pooser,pollan,ploss,plewa,placide,pion,pinnick,pinales,pillot,pille,pilato,piggee,pietrowski,piermarini,pickford,piccard,phenix,pevey,petrowski,petrillose,pesek,perrotti,peppler,peppard,penfold,pellitier,pelland,pehowic,pedretti,paules,passero,pasha,panza,pallante,palau,pakele,pacetti,paavola,overy,overson,outler,osegueda,oplinger,oldenkamp,ohern,oetting,odums,nowlen,nowack,nordlund,noblett,nobbe,nierman,nichelson,niblock,newbrough,nemetz,needleman,navin,nastasi,naslund,naramore,nakken,nakanishi,najarro,mushrush,muma,mulero,morganfield,moreman,morain,moquin,monterrosa,monsivais,monroig,monje,monfort,moffa,moeckel,mobbs,misiak,mires,mirelez,mineo,mineau,milnes,mikeska,michelin,michalowski,meszaros,messineo,meshell,merten,meola,menton,mends,mende,memmott,melius,mehan,mcnickle,mcmorran,mclennon,mcleish,mclaine,mckendry,mckell,mckeighan,mcisaac,mcie,mcguinn,mcgillis,mcfatridge,mcfarling,mcelravy,mcdonalds,mcculla,mcconnaughy,mcconnaughey,mcchriston,mcbeath,mayr,matyas,matthiesen,matsuura,matinez,mathys,matarazzo,masker,masden,mascio,martis,marrinan,marinucci,margerum,marengo,manthe,mansker,manoogian,mankey,manigo,manier,mangini,maltese,malsam,mallo,maliszewski,mainolfi,maharaj,maggart,magar,maffett,macmaster,macky,macdonnell,lyvers,luzzi,lutman,lovan,lonzo,longerbeam,lofthouse,loethen,lodi,llorens,lizama,litscher,lisowski,lipski,lipsett,lipkin,linzey,lineman,limerick,limas,lige,lierman,liebold,liberti,leverton,levene,lesueur,lenser,lenker,legnon,lefrancois,ledwell,lavecchia,laurich,lauricella,lannigan,landor,lamprecht,lamountain,lamore,lammert,lamboy,lamarque,lamacchia,lalley,lagace,lacorte,lacomb,kyllonen,kyker,kuschel,kupfer,kunde,kucinski,kubacki,kroenke,krech,koziel,kovacich,kothari,koth,kotek,kostelnik,kosloski,knoles,knabe,kmiecik,klingman,kliethermes,kleffman,klees,klaiber,kittell,kissling,kisinger,kintner,kinoshita,kiener,khouri,kerman,kelii,keirn,keezer,kaup,kathan,kaser,karlsen,kapur,kandoll,kammel,kahele,justesen,jonason,johnsrud,joerling,jochim,jespersen,jeong,jenness,jedlicka,jakob,isaman,inghram,ingenito,iadarola,hynd,huxtable,huwe,hurless,humpal,hughston,hughart,huggett,hugar,huether,howdyshell,houtchens,houseworth,hoskie,holshouser,holmen,holloran,hohler,hoefler,hodsdon,hochman,hjort,hippert,hippe,hinzman,hillock,hilden,heyn,heyden,heyd,hergert,henrikson,henningsen,hendel,helget,helf,helbing,heintzman,heggie,hege,hecox,heatherington,heare,haxton,haverstock,haverly,hatler,haselton,hase,hartzfeld,harten,harken,hargrow,haran,hanton,hammar,hamamoto,halper,halko,hackathorn,haberle,haake,gunnoe,gunkel,gulyas,guiney,guilbeau,guider,guerrant,gudgel,guarisco,grossen,grossberg,gropp,groome,grobe,gremminger,greenley,grauberger,grabenstein,gowers,gostomski,gosier,goodenow,gonzoles,goliday,goettle,goens,goates,glymph,glavin,glassco,gladfelter,glackin,githens,girgis,gimpel,gilbreth,gilbeau,giffen,giannotti,gholar,gervasi,gertsch,gernatt,gephardt,genco,gehr,geddis,gase,garrott,garrette,gapinski,ganter,ganser,gangi,gangemi,gallina,galdi,gailes,gaetano,gadomski,gaccione,fuschetto,furtick,furfaro,fullman,frutos,fruchter,frogge,freytag,freudenthal,fregoe,franzone,frankum,francia,franceschi,forys,forero,folkers,flug,flitter,flemons,fitzer,firpo,finizio,filiault,figg,fichtner,fetterolf,ferringer,feil,fayne,farro,faddis,ezzo,ezelle,eynon,evitt,eutsler,euell,escovedo,erne,eriksson,enriguez,empson,elkington,eisenmenger,eidt,eichenberger,ehrmann,ediger,earlywine,eacret,duzan,dunnington,ducasse,dubiel,drovin,drager,drage,donham,donat,dolinger,dokken,doepke,dodwell,docherty,distasio,disandro,diniz,digangi,didion,dezzutti,detmer,deshon,derrigo,dentler,demoura,demeter,demeritt,demayo,demark,demario,delzell,delnero,delgrosso,dejarnett,debernardi,dearmas,dashnaw,daris,danks,danker,dangler,daignault,dafoe,dace,curet,cumberledge,culkin,crowner,crocket,crawshaw,craun,cranshaw,cragle,courser,costella,cornforth,corkill,coopersmith,conzemius,connett,connely,condict,condello,comley,cohoon,coday,clugston,clowney,clippard,clinkenbeard,clines,clelland,clapham,clancey,clabough,cichy,cicalese,chua,chittick,chisom,chisley,chinchilla,cheramie,cerritos,cercone,cena,cawood,cavness,catanzarite,casada,carvell,carmicheal,carll,cardozo,caplin,candia,canby,cammon,callister,calligan,calkin,caillouet,buzzelli,bute,bustillo,bursey,burgeson,bupp,bulson,buist,buffey,buczkowski,buckbee,bucio,brueckner,broz,brookhart,brong,brockmeyer,broberg,brittenham,brisbois,bridgmon,breyer,brede,breakfield,breakey,brauner,branigan,brandewie,branche,brager,brader,bovell,bouthot,bostock,bosma,boseman,boschee,borthwick,borneman,borer,borek,boomershine,boni,bommarito,bolman,boleware,boisse,boehlke,bodle,blash,blasco,blakesley,blacklock,blackley,bittick,birks,birdin,bircher,bilbao,bick,biby,bertoni,bertino,bertini,berson,bern,berkebile,bergstresser,benne,benevento,belzer,beltre,bellomo,bellerose,beilke,begeman,bebee,beazer,beaven,beamish,baymon,baston,bastidas,basom,basey,bartles,baroni,barocio,barnet,barclift,banville,balthazor,balleza,balkcom,baires,bailie,baik,baggott,bagen,bachner,babington,babel,asmar,arvelo,artega,arrendondo,arreaga,arrambide,arquette,aronoff,arico,argentieri,arevalos,archbold,apuzzo,antczak,ankeny,angelle,angelini,anfinson,amer,amarillas,altier,altenburg,alspach,alosa,allsbrook,alexopoulos,aleem,aldred,albertsen,akerson,agler,adley,addams,acoba,achille,abplanalp,abella,abare,zwolinski,zollicoffer,zins,ziff,zenner,zender,zelnick,zelenka,zeches,zaucha,zauala,zangari,zagorski,youtsey,yasso,yarde,yarbough,woolever,woodsmall,woodfolk,wobig,wixson,wittwer,wirtanen,winson,wingerd,wilkening,wilhelms,wierzbicki,wiechman,weyrick,wessell,wenrick,wenning,weltz,weinrich,weiand,wehunt,wareing,walth,waibel,wahlquist,vona,voelkel,vitek,vinsant,vincente,vilar,viel,vicars,vermette,verma,venner,veazie,vayda,vashaw,varon,vardeman,vandevelde,vanbrocklin,vaccarezza,urquidez,urie,urbach,uram,ungaro,umali,ulsh,tutwiler,turnbaugh,tumminello,tuite,tueller,trulove,troha,trivino,trisdale,trippett,tribbett,treptow,tremain,travelstead,trautwein,trautmann,tram,traeger,tonelli,tomsic,tomich,tomasulo,tomasino,tole,todhunter,toborg,tischer,tirpak,tircuit,tinnon,tinnel,tines,timbs,tilden,tiede,thumm,throgmorton,thorndike,thornburgh,thoren,thomann,therrell,thau,thammavong,tetrick,tessitore,tesreau,teicher,teaford,tauscher,tauer,tanabe,talamo,takeuchi,taite,tadych,sweeton,swecker,swartzentrube,swarner,surrell,surbaugh,suppa,sumbry,suchy,stuteville,studt,stromer,strome,streng,stonestreet,stockley,stmichel,stfort,sternisha,stensrud,steinhardt,steinback,steichen,stauble,stasiak,starzyk,stango,standerfer,stachowiak,springston,spratlin,spracklen,sponseller,spilker,spiegelman,spellacy,speiser,spaziani,spader,spackman,sorum,sopha,sollis,sollenberger,solivan,solheim,sokolsky,sogge,smyser,smitley,sloas,slinker,skora,skiff,skare,siverd,sivels,siska,siordia,simmering,simko,sime,silmon,silano,sieger,siebold,shukla,shreves,shoun,shortle,shonkwiler,shoals,shimmel,shiel,shieh,sherbondy,shenkman,shein,shearon,shean,shatz,shanholtz,shafran,shaff,shackett,sgroi,sewall,severy,sethi,sessa,sequra,sepulvado,seper,senteno,sendejo,semmens,seipp,segler,seegers,sedwick,sedore,sechler,sebastiano,scovel,scotton,scopel,schwend,schwarting,schutter,schrier,schons,scholtes,schnetzer,schnelle,schmutz,schlichter,schelling,schams,schamp,scarber,scallan,scalisi,scaffidi,saxby,sawrey,sauvageau,sauder,sarrett,sanzo,santizo,santella,santander,sandez,sandel,sammon,salsedo,salge,sagun,safi,sader,sacchetti,sablan,saade,runnion,runkel,rumbo,ruesch,ruegg,ruckle,ruchti,rubens,rubano,rozycki,roupe,roufs,rossel,rosmarin,rosero,rosenwald,ronca,romos,rolla,rohling,rohleder,roell,roehm,rochefort,roch,robotham,rivenburgh,riopel,riederer,ridlen,rias,rhudy,reynard,retter,respess,reppond,repko,rengifo,reinking,reichelt,reeh,redenius,rebolledo,rauh,ratajczak,rapley,ranalli,ramie,raitt,radloff,radle,rabbitt,quay,quant,pusateri,puffinberger,puerta,provencio,proano,privitera,prenger,prellwitz,pousson,potier,portz,portlock,porth,portela,portee,porchia,pollick,polinski,polfer,polanski,polachek,pluta,plourd,plauche,pitner,piontkowski,pileggi,pierotti,pico,piacente,phinisee,phaup,pfost,pettinger,pettet,petrich,peto,persley,persad,perlstein,perko,pere,penders,peifer,peco,pawley,pash,parrack,parady,papen,pangilinan,pandolfo,palone,palmertree,padin,ottey,ottem,ostroski,ornstein,ormonde,onstott,oncale,oltremari,olcott,olan,oishi,oien,odonell,odonald,obeso,obeirne,oatley,nusser,novo,novicki,nitschke,nistler,nikkel,niese,nierenberg,nield,niedzwiecki,niebla,niebel,nicklin,neyhart,newsum,nevares,nageotte,nagai,mutz,murata,muralles,munnerlyn,mumpower,muegge,muckle,muchmore,moulthrop,motl,moskos,mortland,morring,mormile,morimoto,morikawa,morgon,mordecai,montour,mont,mongan,monell,miyasato,mish,minshew,mimbs,millin,milliard,mihm,middlemiss,miano,mesick,merlan,mendonsa,mench,melonson,melling,meachem,mctighe,mcnelis,mcmurtrey,mckesson,mckenrick,mckelvie,mcjunkins,mcgory,mcgirr,mcgeever,mcfield,mcelhinney,mccrossen,mccommon,mccannon,mazyck,mawyer,maull,matute,mathies,maschino,marzan,martinie,marrotte,marmion,markarian,marinacci,margolies,margeson,marak,maraia,maracle,manygoats,manker,mank,mandich,manderson,maltz,malmquist,malacara,majette,magnan,magliocca,madina,madara,macwilliams,macqueen,maccallum,lyde,lyday,lutrick,lurz,lurvey,lumbreras,luhrs,luhr,lowrimore,lowndes,lourenco,lougee,lorona,longstreth,loht,lofquist,loewenstein,lobos,lizardi,lionberger,limoli,liljenquist,liguori,liebl,liburd,leukhardt,letizia,lesinski,lepisto,lenzini,leisenring,leipold,leier,leggitt,legare,leaphart,lazor,lazaga,lavey,laue,laudermilk,lauck,lassalle,larsson,larison,lanzo,lantzy,lanners,langtry,landford,lancour,lamour,lambertson,lalone,lairson,lainhart,lagreca,lacina,labranche,labate,kurtenbach,kuipers,kuechle,kubo,krinsky,krauser,kraeger,kracht,kozeliski,kozar,kowalik,kotler,kotecki,koslosky,kosel,koob,kolasinski,koizumi,kohlman,koffman,knutt,knore,knaff,kmiec,klamm,kittler,kitner,kirkeby,kiper,kindler,kilmartin,kilbride,kerchner,kendell,keddy,keaveney,kearsley,karlsson,karalis,kappes,kapadia,kallman,kallio,kalil,kader,jurkiewicz,jitchaku,jillson,jeune,jarratt,jarchow,janak,ivins,ivans,isenhart,inocencio,inoa,imhof,iacono,hynds,hutching,hutchin,hulsman,hulsizer,hueston,huddleson,hrbek,howry,housey,hounshell,hosick,hortman,horky,horine,hootman,honeywell,honeyestewa,holste,holien,holbrooks,hoffmeyer,hoese,hoenig,hirschfeld,hildenbrand,higson,higney,hibert,hibbetts,hewlin,hesley,herrold,hermon,hepker,henwood,helbling,heinzman,heidtbrink,hedger,havey,hatheway,hartshorne,harpel,haning,handelman,hamalainen,hamad,halasz,haigwood,haggans,hackshaw,guzzo,gundrum,guilbeault,gugliuzza,guglielmi,guderian,gruwell,grunow,grundman,gruen,grotzke,grossnickle,groomes,grode,grochowski,grob,grein,greif,greenwall,greenup,grassl,grannis,grandfield,grames,grabski,grabe,gouldsberry,gosch,goodling,goodermote,gonzale,golebiowski,goldson,godlove,glanville,gillin,gilkerson,giessler,giambalvo,giacomini,giacobbe,ghio,gergen,gentz,genrich,gelormino,gelber,geitner,geimer,gauthreaux,gaultney,garvie,gareau,garbacz,ganoe,gangwer,gandarilla,galyen,galt,galluzzo,galardo,gager,gaddie,gaber,gabehart,gaarder,fusilier,furnari,furbee,fugua,fruth,frohman,friske,frilot,fridman,frescas,freier,frayer,franzese,frankenberry,frain,fosse,foresman,forbess,flook,fletes,fleer,fleek,fleegle,fishburne,fiscalini,finnigan,fini,filipiak,figueira,fiero,ficek,fiaschetti,ferren,ferrando,ferman,fergusson,fenech,feiner,feig,faulds,fariss,falor,falke,ewings,eversley,everding,etling,essen,erskin,enstrom,engebretsen,eitel,eichberger,ehler,eekhoff,edrington,edmonston,edgmon,edes,eberlein,dwinell,dupee,dunklee,dungey,dunagin,dumoulin,duggar,duenez,dudzic,dudenhoeffer,ducey,drouillard,dreibelbis,dreger,dreesman,draughon,downen,dorminy,dombeck,dolman,doebler,dittberner,dishaw,disanti,dinicola,dinham,dimino,dilling,difrancesco,dicello,dibert,deshazer,deserio,descoteau,deruyter,dering,depinto,dente,demus,demattos,demarsico,delude,dekok,debrito,debois,deakin,dayley,dawsey,dauria,datson,darty,darsow,darragh,darensbourg,dalleva,dalbec,dadd,cutcher,cung,cuello,cuadros,crute,crutchley,crispino,crislip,crisco,crevier,creekmur,crance,cragg,crager,cozby,coyan,coxon,covalt,couillard,costley,costilow,cossairt,corvino,corigliano,cordaro,corbridge,corban,coor,conkel,conary,coltrain,collopy,colgin,colen,colbath,coiro,coffie,cochrum,cobbett,clopper,cliburn,clendenon,clemon,clementi,clausi,cirino,cina,churchman,chilcutt,cherney,cheetham,cheatom,chatelain,chalifour,cesa,cervenka,cerullo,cerreta,cerbone,cecchini,ceccarelli,cawthorn,cavalero,castner,castlen,castine,casimiro,casdorph,cartmill,cartmell,carro,carriger,carias,caravella,cappas,capen,cantey,canedo,camuso,campanaro,cambria,calzado,callejo,caligiuri,cafaro,cadotte,cacace,byrant,busbey,burtle,burres,burnworth,burggraf,burback,bunte,bunke,bulle,bugos,budlong,buckhalter,buccellato,brummet,bruff,brubeck,brouk,broten,brosky,broner,brislin,brimm,brillhart,bridgham,brideau,brennecke,breer,breeland,bredesen,brackney,brackeen,boza,boyum,bowdry,bowdish,bouwens,bouvier,bougie,bouche,bottenfield,bostian,bossie,bosler,boschert,boroff,borello,bonser,bonfield,bole,boldue,bogacz,boemer,bloxom,blickenstaff,blessinger,bleazard,blatz,blanchet,blacksher,birchler,binning,binkowski,biltz,bilotta,bilagody,bigbee,bieri,biehle,bidlack,betker,bethers,bethell,bero,bernacchi,bermingham,berkshire,benvenuto,bensman,benoff,bencivenga,beman,bellow,bellany,belflower,belch,bekker,bejar,beisel,beichner,beedy,beas,beanblossom,bawek,baus,baugus,battie,battershell,bateson,basque,basford,bartone,barritt,barko,bann,bamford,baltrip,balon,balliew,ballam,baldus,ayling,avelino,ashwell,ashland,arseneau,arroyos,armendarez,arita,argust,archuletta,arcement,antonacci,anthis,antal,annan,anderman,amster,amiri,amadon,alveraz,altomari,altmann,altenhofen,allers,allbee,allaway,aleo,alcoser,alcorta,akhtar,ahuna,agramonte,agard,adkerson,achord,abdi,abair,zurn,zoellner,zirk,zion,zarro,zarco,zambo,zaiser,zaino,zachry,youd,yonan,yniguez,yepes,yellock,yellen,yeatts,yearling,yatsko,yannone,wyler,woodridge,wolfrom,wolaver,wolanin,wojnar,wojciak,wittmann,wittich,wiswell,wisser,wintersteen,wineland,willford,wiginton,wigfield,wierman,wice,wiater,whitsel,whitbread,wheller,wettstein,werling,wente,wenig,wempe,welz,weinhold,weigelt,weichman,wedemeyer,weddel,wayment,waycaster,wauneka,watzka,watton,warnell,warnecke,warmack,warder,wands,waldvogel,waldridge,wahs,wagganer,waddill,vyas,vought,votta,voiles,virga,viner,villella,villaverde,villaneda,viele,vickroy,vicencio,vetere,vermilyea,verley,verburg,ventresca,veno,venard,venancio,velaquez,veenstra,vasil,vanzee,vanwie,vantine,vant,vanschoyck,vannice,vankampen,vanicek,vandersloot,vanderpoel,vanderlinde,vallieres,uzzell,uzelac,uranga,uptain,updyke,uong,untiedt,umbrell,umbaugh,umbarger,ulysse,ullmann,ullah,tutko,turturro,turnmire,turnley,turcott,turbyfill,turano,tuminello,tumbleson,tsou,truscott,trulson,troutner,trone,trinklein,tremmel,tredway,trease,traynham,traw,totty,torti,torregrossa,torok,tomkins,tomaino,tkach,tirey,tinsman,timpe,tiefenauer,tiedt,tidball,thwaites,thulin,throneburg,thorell,thorburn,thiemann,thieman,thesing,tham,terrien,telfair,taybron,tasson,tasso,tarro,tanenbaum,taddeo,taborn,tabios,szekely,szatkowski,sylve,swineford,swartzfager,swanton,swagerty,surrency,sunderlin,sumerlin,suero,suddith,sublette,stumpe,stueve,stuckert,strycker,struve,struss,strubbe,strough,strothmann,strahle,stoutner,stooksbury,stonebarger,stokey,stoffer,stimmel,stief,stephans,stemper,steltenpohl,stellato,steinle,stegeman,steffler,steege,steckman,stapel,stansbery,stanaland,stahley,stagnaro,stachowski,squibb,sprunger,sproule,sprehe,spreen,sprecher,sposato,spivery,souter,sopher,sommerfeldt,soffer,snowberger,snape,smylie,smyer,slaydon,slatton,slaght,skovira,skeans,sjolund,sjodin,siragusa,singelton,silis,siebenaler,shuffield,shobe,shiring,shimabukuro,shilts,sherbert,shelden,sheil,shedlock,shearn,shaub,sharbono,shapley,shands,shaheen,shaffner,servantez,sentz,seney,selin,seitzinger,seider,sehr,sego,segall,sebastien,scimeca,schwenck,schweiss,schwark,schwalbe,schucker,schronce,schrag,schouten,schoppe,schomaker,schnarr,schmied,schmader,schlicht,schlag,schield,schiano,scheve,scherbarth,schaumburg,schauman,scarpino,savinon,sassaman,saporito,sanville,santilli,santaana,salzmann,salman,sagraves,safran,saccone,rutty,russett,rupard,rumbley,ruffins,ruacho,rozema,roxas,routson,rourk,rought,rotunda,rotermund,rosman,rork,rooke,rolin,rohm,rohlman,rohl,roeske,roecker,rober,robenson,riso,rinne,riina,rigsbee,riggles,riester,rials,rhinehardt,reynaud,reyburn,rewis,revermann,reutzel,retz,rende,rendall,reistad,reinders,reichardt,rehrig,rehrer,recendez,reamy,rauls,ratz,rattray,rasband,rapone,ragle,ragins,radican,raczka,rachels,raburn,rabren,raboin,quesnell,quaintance,puccinelli,pruner,prouse,prosise,proffer,prochazka,probasco,previte,portell,porcher,popoca,pomroy,poma,polsky,polsgrove,polidore,podraza,plymale,plescia,pleau,platte,pizzi,pinchon,picot,piccione,picazo,philibert,phebus,pfohl,petell,pesso,pesante,pervis,perrins,perley,perkey,pereida,penate,peloso,pellerito,peffley,peddicord,pecina,peale,payette,paxman,pawlikowski,pavy,patry,patmon,patil,pater,patak,pasqua,pasche,partyka,parody,parmeter,pares,pardi,paonessa,panozzo,panameno,paletta,pait,oyervides,ossman,oshima,ortlieb,orsak,onley,oldroyd,okano,ohora,offley,oestreicher,odonovan,odham,odegard,obst,obriant,obrecht,nuccio,nowling,nowden,novelli,nost,norstrom,nordgren,nopper,noller,nisonger,niskanen,nienhuis,nienaber,neuwirth,neumeyer,neice,naugher,naiman,nagamine,mustin,murrietta,murdaugh,munar,muhlbauer,mroczkowski,mowdy,mouw,mousel,mountcastle,moscowitz,mosco,morro,moresi,morago,moomaw,montroy,montpas,montieth,montanaro,mongelli,mollison,mollette,moldovan,mohar,mitchelle,mishra,misenheimer,minshall,minozzi,minniefield,milhous,migliaccio,migdal,mickell,meyering,methot,mester,mesler,meriweather,mensing,mensah,menge,mendibles,meloche,melnik,mellas,meinert,mehrhoff,medas,meckler,mctague,mcspirit,mcshea,mcquown,mcquiller,mclarney,mckiney,mckearney,mcguyer,mcfarlan,mcfadyen,mcdanial,mcdanel,mccurtis,mccrohan,mccorry,mcclune,mccant,mccanna,mccandlish,mcaloon,mayall,maver,maune,matza,matsuzaki,matott,mathey,mateos,masoner,masino,marzullo,marz,marsolek,marquard,marchetta,marberry,manzione,manthei,manka,mangram,mangle,mangel,mandato,mancillas,mammen,malina,maletta,malecki,majkut,mages,maestre,macphail,maco,macneill,macadam,lysiak,lyne,luxton,luptak,lundmark,luginbill,lovallo,louthan,lousteau,loupe,lotti,lopresto,lonsdale,longsworth,lohnes,loghry,logemann,lofaro,loeber,locastro,livings,litzinger,litts,liotta,lingard,lineback,lindhorst,lill,lide,lickliter,liberman,lewinski,levandowski,leimbach,leifer,leidholt,leiby,leibel,leibee,lehrke,lehnherr,lego,leese,leen,ledo,lech,leblond,leahey,lazzari,lawrance,lawlis,lawhorne,lawes,lavigna,lavell,lauzier,lauter,laumann,latsha,latourette,latona,latney,laska,larner,larmore,larke,larence,lapier,lanzarin,lammey,lamke,laminack,lamastus,lamaster,lacewell,labarr,laabs,kutch,kuper,kuna,kubis,krzemien,krupinski,krepps,kreeger,kraner,krammer,kountz,kothe,korpela,komara,kolenda,kolek,kohnen,koelzer,koelsch,kocurek,knoke,knauff,knaggs,knab,kluver,klose,klien,klahr,kitagawa,kissler,kirstein,kinnon,kinnebrew,kinnamon,kimmins,kilgour,kilcoyne,kiester,kiehm,kesselring,kerestes,kenniston,kennamore,kenebrew,kelderman,keitel,kefauver,katzenberger,katt,kast,kassel,kamara,kalmbach,kaizer,kaiwi,kainz,jurczyk,jumonville,juliar,jourdain,johndrow,johanning,johannesen,joffrion,jobes,jerde,jentzsch,jenkens,jendro,jellerson,jefferds,jaure,jaquish,janeway,jago,iwasaki,ishman,isaza,inmon,inlow,inclan,ildefonso,iezzi,ianni,iacovetto,hyldahl,huxhold,huser,humpherys,humburg,hult,hullender,hulburt,huckabay,howeth,hovermale,hoven,houtman,hourigan,hosek,hopgood,homrich,holstine,holsclaw,hokama,hoffpauir,hoffner,hochstein,hochstatter,hochberg,hjelm,hiscox,hinsley,hineman,hineline,hinck,hilbun,hewins,herzing,hertzberg,hertenstein,herrea,herington,henrie,henman,hengst,hemmen,helmke,helgerson,heinsohn,heigl,hegstad,heggen,hegge,hefti,heathcock,haylett,haupert,haufler,hatala,haslip,hartless,hartje,hartis,harpold,harmsen,harbach,hanten,hanington,hammen,hameister,hallstrom,habersham,habegger,gussman,gundy,guitterez,guisinger,guilfoyle,groulx,grismer,griesbach,grawe,grall,graben,goulden,gornick,gori,gookin,gonzalaz,gonyer,gonder,golphin,goller,goergen,glosson,glor,gladin,girdler,gillim,gillians,gillaspie,gilhooly,gildon,gignac,gibler,gibbins,giardino,giampietro,gettman,gerringer,gerrald,gerlich,georgiou,georgi,geiselman,gehman,gangl,gamage,gallian,gallen,gallatin,galea,gainor,gahr,furbush,fulfer,fuhrmann,fritter,friis,friedly,freudenberger,freemon,fratus,frans,foulke,fosler,forquer,fontan,folwell,foeller,fodge,fobes,florek,fliss,flesner,flegel,fitzloff,fiser,firmin,firestine,finfrock,fineberg,fiegel,fickling,fesperman,fernadez,felber,feimster,feazel,favre,faughn,fatula,fasone,farron,faron,farino,falvey,falkenberg,faley,faletti,faeth,fackrell,espe,eskola,escott,esaw,erps,erker,erath,enfield,emfinger,embury,embleton,emanuele,elvers,ellwanger,ellegood,eichinger,egge,egeland,edgett,echard,eblen,eastmond,duteau,durland,dure,dunlavy,dungee,dukette,dugay,duboise,dubey,dsouza,druck,dralle,doubek,dorta,dorch,dorce,dopson,dolney,dockter,distler,dippel,dichiara,dicerbo,dewindt,dewan,deveney,devargas,deutscher,deuel,detter,dess,derrington,deroberts,dern,deponte,denogean,denardi,denard,demary,demarais,delucas,deloe,delmonico,delisi,delio,delduca,deihl,dehmer,decoste,dechick,decatur,debruce,debold,debell,deats,daunt,daquilante,dambrosi,damas,dalin,dahman,dahlem,daffin,dacquel,cutrell,cusano,curtner,currens,curnow,cuppett,cummiskey,cullers,culhane,crull,crossin,cropsey,cromie,crofford,criscuolo,crisafulli,crego,creeden,covello,covel,corse,correra,cordner,cordier,coplen,copeman,contini,conteras,consalvo,conduff,compher,colliver,colan,cohill,cohenour,cogliano,codd,cockayne,clum,clowdus,clarida,clance,clairday,clagg,citron,citino,ciriello,cicciarelli,chrostowski,christley,chrisco,chrest,chisler,chieffo,cherne,cherico,cherian,cheirs,chauhan,chamblin,cerra,cepero,cellini,celedon,cejka,cavagnaro,cauffman,catanese,castrillo,castrellon,casserly,caseres,carthen,carse,carragher,carpentieri,carmony,carmer,carlozzi,caradine,cappola,capece,capaldi,cantres,cantos,canevari,canete,calcaterra,cadigan,cabbell,byrn,bykowski,butchko,busler,bushaw,buschmann,burow,buri,burgman,bunselmeyer,bunning,buhrman,budnick,buckson,buckhannon,brunjes,brumleve,bruckman,brouhard,brougham,brostrom,broerman,brocks,brison,brining,brindisi,brereton,breon,breitling,breedon,brasseaux,branaman,bramon,brackenridge,boyan,boxley,bouman,bouillion,botting,botti,bosshart,borup,borner,bordonaro,bonsignore,bonsall,bolter,bojko,bohne,bohlmann,bogdon,boen,bodenschatz,bockoven,bobrow,blondin,blissett,bligen,blasini,blankenburg,bjorkman,bistline,bisset,birdow,biondolillo,bielski,biele,biddix,biddinger,bianchini,bevens,bevard,betancur,bernskoetter,bernet,bernardez,berliner,berland,berkheimer,berent,bensch,benesch,belleau,bedingfield,beckstrom,beckim,bechler,beachler,bazzell,basa,bartoszek,barsch,barrell,barnas,barnaba,barillas,barbier,baltodano,baltierra,balle,balint,baldi,balderson,balderama,baldauf,balcazar,balay,baiz,bairos,azim,aversa,avellaneda,ausburn,auila,augusto,atwill,artiles,arterberry,arnow,arnaud,arnall,arenz,arduini,archila,arakawa,appleman,aplin,antonini,anstey,anglen,andros,amweg,amstutz,amari,amadeo,alteri,aloi,allebach,aley,alamillo,airhart,ahrendt,aegerter,adragna,admas,adderly,adderley,addair,abelar,abbamonte,abadi,zurek,zundel,zuidema,zuelke,zuck,zogg,zody,zets,zech,zecca,zavaleta,zarr,yousif,yoes,yoast,yeagley,yaney,yanda,yackel,wyles,wyke,woolman,woollard,woodis,woodin,wonderly,wombles,woloszyn,wollam,wnek,wittie,withee,wissman,wisham,wintle,winokur,wilmarth,willhoite,wildner,wikel,wieser,wien,wicke,wiatrek,whitehall,whetstine,wheelus,weyrauch,weyers,westerling,wendelken,welner,weinreb,weinheimer,weilbacher,weihe,weider,wecker,wead,watler,watkinson,wasmer,waskiewicz,wasik,warneke,wares,wangerin,wamble,walken,waker,wakeley,wahlgren,wahlberg,wagler,wachob,vorhies,vonseggern,vittitow,vink,villarruel,villamil,villamar,villalovos,vidmar,victorero,vespa,vertrees,verissimo,veltman,vecchione,veals,varrone,varma,vanveen,vanterpool,vaneck,vandyck,vancise,vanausdal,vanalphen,valdiviezo,urton,urey,updegrove,unrue,ulbrich,tysinger,twiddy,tunson,trueheart,troyan,trier,traweek,trafford,tozzi,toulouse,tosto,toste,torez,tooke,tonini,tonge,tomerlin,tolmie,tobe,tippen,tierno,tichy,thuss,thran,thornbury,thone,theunissen,thelmon,theall,textor,teters,tesh,tench,tekautz,tehrani,teat,teare,tavenner,tartaglione,tanski,tanis,tanguma,tangeman,taney,tammen,tamburri,tamburello,talsma,tallie,takeda,taira,taheri,tademy,taddei,taaffe,szymczak,szczepaniak,szafranski,swygert,swem,swartzlander,sutley,supernaw,sundell,sullivant,suderman,sudbury,suares,stueber,stromme,streeper,streck,strebe,stonehouse,stoia,stohr,stodghill,stirewalt,sterry,stenstrom,stene,steinbrecher,stear,stdenis,stanphill,staniszewski,stanard,stahlhut,stachowicz,srivastava,spong,spomer,spinosa,spindel,spera,soward,sopp,sooter,sonnek,soland,sojourner,soeder,sobolewski,snellings,smola,smetana,smeal,smarr,sloma,sligar,skenandore,skalsky,sissom,sirko,simkin,silverthorn,silman,sikkink,signorile,siddens,shumsky,shrider,shoulta,shonk,shomaker,shippey,shimada,shillingburg,shifflet,shiels,shepheard,sheerin,shedden,sheckles,sharrieff,sharpley,shappell,shaneyfelt,shampine,shaefer,shaddock,shadd,sforza,severtson,setzler,sepich,senne,senatore,sementilli,selway,selover,sellick,seigworth,sefton,seegars,sebourn,seaquist,sealock,seabreeze,scriver,scinto,schumer,schulke,schryver,schriner,schramek,schoon,schoolfield,schonberger,schnieder,schnider,schlitz,schlather,schirtzinger,scherman,schenker,scheiner,scheible,schaus,schakel,schaad,saxe,savely,savary,sardinas,santarelli,sanschagrin,sanpedro,sandine,sandigo,sandgren,sanderford,sandahl,salzwedel,salzar,salvino,salvatierra,salminen,salierno,salberg,sahagun,saelee,sabel,rynearson,ryker,rupprecht,runquist,rumrill,ruhnke,rovira,rottenberg,rosoff,rosete,rosebrough,roppolo,roope,romas,roley,rohrback,rohlfs,rogriguez,roel,rodriguiz,rodewald,roback,rizor,ritt,rippee,riolo,rinkenberger,riggsby,rigel,rieman,riedesel,rideau,ricke,rhinebolt,rheault,revak,relford,reinsmith,reichmann,regula,redlinger,rayno,raycroft,raus,raupp,rathmann,rastorfer,rasey,raponi,rantz,ranno,ranes,ramnauth,rahal,raddatz,quattrocchi,quang,pullis,pulanco,pryde,prohaska,primiano,prez,prevatt,prechtl,pottle,potenza,portes,porowski,poppleton,pontillo,politz,politi,poggi,plonka,plaskett,placzek,pizzuti,pizzaro,pisciotta,pippens,pinkins,pinilla,pini,pingitore,piercey,piccola,piccioni,picciano,philps,philp,philo,philmon,philbin,pflieger,pezzullo,petruso,petrea,petitti,peth,peshlakai,peschel,persico,persichetti,persechino,perris,perlow,perico,pergola,penniston,pembroke,pellman,pekarek,peirson,pearcey,pealer,pavlicek,passino,pasquarello,pasion,parzych,parziale,parga,papalia,papadakis,paino,pacini,oyen,ownes,owczarzak,outley,ouelette,ottosen,otting,ostwinkle,osment,oshita,osario,orlow,oriordan,orefice,orantes,oran,orahood,opel,olpin,oliveria,okon,okerlund,okazaki,ohta,offerman,nyce,nutall,northey,norcia,noor,niehoff,niederhauser,nickolson,nguy,neylon,newstrom,nevill,netz,nesselrodt,nemes,neally,nauyen,nascimento,nardella,nanni,myren,murchinson,munter,mundschenk,mujalli,muckleroy,moussa,mouret,moulds,mottram,motte,morre,montreuil,monton,montellano,monninger,monhollen,mongeon,monestime,monegro,mondesir,monceaux,mola,moga,moening,moccia,misko,miske,mishaw,minturn,mingione,milstein,milla,milks,michl,micheletti,michals,mesia,merson,meras,menifee,meluso,mella,melick,mehlman,meffert,medoza,mecum,meaker,meahl,mczeal,mcwatters,mcomber,mcmonigle,mckiddy,mcgranor,mcgeary,mcgaw,mcenery,mcelderry,mcduffey,mccuistion,mccrudden,mccrossin,mccosh,mccolgan,mcclish,mcclenahan,mcclam,mccartt,mccarrell,mcbane,maybury,mayben,maulden,mauceri,matko,mathie,matheis,mathai,masucci,massiah,martorano,martnez,martindelcamp,marschke,marovich,markiewicz,marinaccio,marhefka,marcrum,manton,mannarino,manlove,mangham,manasco,malpica,mallernee,malinsky,malhotra,maish,maisel,mainville,maharrey,magid,maertz,mada,maclaughlin,macina,macdermott,macallister,macadangdang,maack,lynk,lydic,luyando,lutke,lupinacci,lunz,lundsten,lujano,luhn,luecke,luebbe,ludolph,luckman,lucker,luckenbill,luckenbach,lucido,lowney,lowitz,lovaglio,louro,louk,loudy,louderback,lorick,lorenzini,lorensen,lorenc,lomuscio,loguidice,lockner,lockart,lochridge,litaker,lisowe,liptrap,linnane,linhares,lindfors,lindenmuth,lincourt,liew,liebowitz,levengood,leskovec,lesch,leoni,lennard,legner,leaser,leas,leadingham,lazarski,layland,laurito,laulu,laughner,laughman,laughery,laube,latiolais,lasserre,lasser,larrow,larrea,lapsley,lantrip,lanthier,langwell,langelier,landaker,lampi,lamond,lamblin,lambie,lakins,laipple,lagrimas,lafrancois,laffitte,laday,lacko,lacava,labianca,kutsch,kuske,kunert,kubly,kuamoo,krummel,krise,krenek,kreiser,krausz,kraska,krakowski,kradel,kozik,koza,kotowski,koslow,korber,kojima,kochel,knabjian,klunder,klugh,klinkhammer,kliewer,klever,kleber,klages,klaas,kizziar,kitchel,kishimoto,kirschenman,kirschenbaum,kinnick,kinn,kiner,kindla,kindall,kincaide,kilson,killins,kightlinger,kienzle,kiah,khim,ketcherside,kerl,kelsoe,kelker,keizer,keir,kawano,kawa,kaveney,kasparek,kaplowitz,kantrowitz,kant,kanoff,kano,kamalii,kalt,kaleta,kalbach,kalauli,kalata,kalas,kaigler,kachel,juran,jubb,jonker,jonke,jolivette,joles,joas,jividen,jeffus,jeanty,jarvi,jardon,janvier,janosko,janoski,janiszewski,janish,janek,iwanski,iuliano,irle,ingmire,imber,ijames,iiams,ihrig,ichikawa,hynum,hutzel,hutts,huskin,husak,hurndon,huntsinger,hulette,huitron,huguenin,hugg,hugee,huelskamp,huch,howen,hovanec,hoston,hostettler,horsfall,horodyski,holzhauer,hollimon,hollender,hogarth,hoffelmeyer,histand,hissem,hisel,hirayama,hinegardner,hinde,hinchcliffe,hiltbrand,hilsinger,hillstrom,hiley,hickenbottom,hickam,hibley,heying,hewson,hetland,hersch,herlong,herda,henzel,henshall,helson,helfen,heinbach,heikkila,heggs,hefferon,hebard,heathcote,hearl,heaberlin,hauth,hauschild,haughney,hauch,hattori,hasley,hartpence,harroun,harelson,hardgrove,hardel,hansbrough,handshoe,handly,haluska,hally,halling,halfhill,halferty,hakanson,haist,hairgrove,hahner,hagg,hafele,haaland,guttierez,gutknecht,gunnarson,gunlock,gummersheimer,gullatte,guity,guilmette,guhl,guenette,guardino,groshong,grober,gripp,grillot,grilli,greulich,gretzinger,greenwaldt,graven,grassman,granberg,graeser,graeff,graef,grabow,grabau,gotchy,goswick,gosa,gordineer,gorczyca,goodchild,golz,gollihue,goldwire,goldbach,goffredo,glassburn,glaeser,gillilan,gigante,giere,gieger,gidcumb,giarrusso,giannelli,gettle,gesualdi,geschke,gerwig,gervase,geoffrion,gentilcore,genther,gemes,gemberling,gelles,geitz,geeslin,gedney,gebauer,gawron,gavia,gautney,gaustad,gasmen,gargus,ganske,ganger,galvis,gallinger,gallichio,galletta,gaede,gadlin,gaby,gabrielsen,gaboriault,furlan,furgerson,fujioka,fugett,fuehrer,frint,frigon,frevert,frautschi,fraker,fradette,foulkes,forslund,forni,fontenette,fones,folz,folmer,follman,folkman,flourney,flickner,flemmings,fleischacker,flander,flament,fithian,fiorello,fiorelli,fioravanti,fieck,ficke,fiallos,fiacco,feuer,ferrington,fernholz,feria,fergurson,feick,febles,favila,faulkingham,fath,farnam,falter,fakhouri,fairhurst,fahs,estrello,essick,espree,esmond,eskelson,escue,escatel,erebia,epperley,epler,enyart,engelbert,enderson,emch,elisondo,elford,ekman,eick,eichmann,ehrich,ehlen,edwardson,edley,edghill,edel,eastes,easterbrooks,eagleson,eagen,eade,dyle,dutkiewicz,dunnagan,duncil,duling,drumgoole,droney,dreyfus,dragan,dowty,doscher,dornan,doremus,doogan,donaho,donahey,dombkowski,dolton,dolen,dobratz,diveley,dittemore,ditsch,disque,dishmon,disch,dirickson,dippolito,dimuccio,dilger,diefenderfer,dicola,diblasio,dibello,devan,dettmer,deschner,desbiens,derusha,denkins,demonbreun,demchak,delucchi,delprete,deloy,deliz,deline,delap,deiter,deignan,degiacomo,degaetano,defusco,deboard,debiase,deaville,deadwyler,davanzo,daughton,darter,danser,dandrade,dando,dampeer,dalziel,dalen,dain,dague,czekanski,cutwright,cutliff,curle,cuozzo,cunnington,cunnigham,cumings,crowston,crittle,crispell,crisostomo,crear,creach,craigue,crabbs,cozzi,cozza,coxe,cowsert,coviello,couse,coull,cottier,costagliola,corra,corpening,cormany,corless,corkern,conteh,conkey,conditt,conaty,colomb,collura,colledge,colins,colgate,coleson,colemon,coffland,coccia,clougherty,clewell,cleckley,cleaveland,clarno,civils,cillo,cifelli,ciesluk,christison,chowning,chouteau,choung,childres,cherrington,chenette,cheeves,cheairs,chaddock,cernoch,cerino,cazier,castel,casselberry,caserta,carvey,carris,carmant,cariello,cardarelli,caras,caracciolo,capitano,cantoni,cantave,cancio,campillo,callens,caldero,calamia,cahee,cahan,cahalan,cabanilla,cabal,bywater,bynes,byassee,busker,bushby,busack,burtis,burrola,buroker,burnias,burlock,burham,burak,bulla,buffin,buening,budney,buchannan,buchalter,brule,brugler,broxson,broun,brosh,brissey,brisby,brinlee,brinkmeyer,brimley,brickell,breth,breger,brees,brank,braker,bozak,bowlds,bowersock,bousman,boushie,botz,bordwell,bonkowski,bonine,bonifay,bonesteel,boldin,bohringer,bohlander,boecker,bocook,bocock,boblett,bobbett,boas,boarman,bleser,blazejewski,blaustein,blausey,blancarte,blaize,blackson,blacketer,blackard,bisch,birchett,billa,bilder,bierner,bienvenu,bielinski,bialas,biagini,beynon,beyl,bettini,betcher,bessent,beshara,besch,bernd,bergemann,bergeaux,berdan,bens,benedicto,bendall,beltron,beltram,bellville,beisch,behney,beechler,beckum,batzer,batte,bastida,bassette,basley,bartosh,bartolone,barraclough,barnick,barket,barkdoll,baringer,barella,barbian,barbati,bannan,balles,baldo,balasubramani,baig,bahn,bachmeier,babyak,baas,baars,ayuso,avinger,avella,ausbrooks,aull,augello,atkeson,atkerson,atherley,athan,assad,asebedo,arrison,armon,armfield,arkin,archambeau,antonellis,angotti,amorose,amini,amborn,amano,aluarez,allgaier,allegood,alen,aldama,aird,ahsing,ahmann,aguado,agostino,agostinelli,adwell,adsit,adelstein,actis,acierno,achee,abbs,abbitt,zwagerman,zuercher,zinno,zettler,zeff,zavalza,zaugg,zarzycki,zappulla,zanotti,zachman,zacher,yundt,yslas,younes,yontz,yglesias,yeske,yeargin,yauger,yamane,xang,wylam,wrobleski,wratchford,woodlee,wolsey,wolfinbarger,wohlenhaus,wittler,wittenmyer,witkop,wishman,wintz,winkelmann,windus,winborn,wims,wiltrout,willmott,williston,wilemon,wilbourne,wiedyk,widmann,wickland,wickes,wichert,whitsell,whisenand,whidby,wetz,westmeyer,wertheim,wernert,werle,werkheiser,weldin,weissenborn,weingard,weinfeld,weihl,weightman,weichel,wehrheim,wegrzyn,wegmann,waszak,wankum,walthour,waltermire,walstad,waldren,walbert,walawender,wahlund,wahlert,wahlers,wach,vuncannon,vredenburgh,vonk,vollmar,voisinet,vlahos,viscardi,vires,vipperman,violante,vidro,vessey,vesper,veron,vergari,verbeck,venturino,velastegui,vegter,varas,vanwey,vanvranken,vanvalkenbur,vanorsdale,vanoli,vanochten,vanier,vanevery,vane,vanduser,vandersteen,vandell,vandall,vallot,vallon,vallez,vallely,vadenais,uthe,usery,unga,ultsch,ullom,tyminski,twogood,tursi,turay,tungate,truxillo,trulock,trovato,troise,tripi,trinks,trimboli,trickel,trezise,trefry,treen,trebilcock,travieso,trachtenberg,touhey,tougas,tortorella,tormey,torelli,torborg,toran,tomek,tomassi,tollerson,tolden,toda,tobon,tjelmeland,titmus,tilbury,tietje,thurner,thum,thrope,thornbrough,thibaudeau,thackeray,tesoro,territo,ternes,teich,tecson,teater,teagarden,tatsch,tarallo,tapanes,tanberg,tamm,sylvis,swenor,swedlund,sutfin,sura,sundt,sundin,summerson,sumatzkuku,sultemeier,sulivan,suggitt,suermann,sturkie,sturgess,stumph,stuemke,struckhoff,strose,stroder,stricklen,strick,streib,strei,strawther,stratis,strahm,stortz,storrer,storino,stohler,stohl,stockel,stinnette,stile,stieber,steffenhagen,stefanowicz,steever,steagall,statum,stapley,stanish,standiford,standen,stamos,stahlecker,stadtler,spratley,spraker,sposito,spickard,spehar,spees,spearing,spangle,spallone,soulard,sora,sopko,sood,sonnen,solly,solesbee,soldano,sobey,sobczyk,snedegar,sneddon,smolinski,smolik,slota,slavick,skorupski,skolnik,skirvin,skeels,skains,skahan,skaar,siwiec,siverly,siver,sivak,sirk,sinton,sinor,sincell,silberstein,sieminski,sidelinger,shurman,shunnarah,shirer,shidler,sherlin,shepperson,shemanski,sharum,shartrand,shapard,shanafelt,shamp,shader,shackelton,seyer,seroka,sernas,seright,serano,sengupta,selinger,seith,seidler,seehusen,seefried,scovell,scorzelli,sconiers,schwind,schwichtenber,schwerin,schwenke,schwaderer,schussler,schuneman,schumpert,schultheiss,schroll,schroepfer,schroeden,schrimpf,schook,schoof,schomburg,schoenfeldt,schoener,schnoor,schmick,schlereth,schindele,schildt,schildknecht,schemmel,scharfenberg,schanno,schane,schaer,schad,scearce,scardino,sawka,sawinski,savoca,savery,saults,sarpy,saris,sardinha,sarafin,sankar,sanjurjo,sanderfer,sanagustin,samudio,sammartino,samas,salz,salmen,salkeld,salamon,sakurai,sakoda,safley,sada,sachse,ryden,ryback,russow,russey,ruprecht,rumple,ruffini,rudzinski,rudel,rudden,rovero,routledge,roussin,rousse,rouser,rougeau,rosica,romey,romaniello,rolfs,rogoff,rogne,rodriquz,rodrequez,rodin,rocray,rocke,riviere,rivette,riske,risenhoover,rindfleisch,rinaudo,rimbey,riha,righi,ridner,ridling,riden,rhue,reyome,reynoldson,reusch,rensing,rensch,rennels,renderos,reininger,reiners,reigel,rehmer,regier,reff,redlin,recchia,reaume,reagor,rawe,rattigan,raska,rashed,ranta,ranft,randlett,ramiez,ramella,rallis,rajan,raisbeck,raimondo,raible,ragone,rackliffe,quirino,quiring,quero,quaife,pyke,purugganan,pursifull,purkett,purdon,pulos,puccia,provance,propper,preis,prehn,prata,prasek,pranger,pradier,portor,portley,porte,popiel,popescu,pomales,polowy,pollett,politis,polit,poley,pohler,poggio,podolak,poag,plymel,ploeger,planty,piskura,pirrone,pirro,piroso,pinsky,pilant,pickerill,piccolomini,picart,piascik,phann,petruzzelli,petosa,persson,perretta,perkowski,perilli,percifield,perault,peppel,pember,pelotte,pelcher,peixoto,pehl,peatross,pearlstein,peacher,payden,paya,pawelek,pavey,pauda,pathak,parrillo,parness,parlee,paoli,pannebaker,palomar,palo,palmberg,paganelli,paffrath,padovano,padden,pachucki,ovando,othman,osowski,osler,osika,orsburn,orlowsky,oregel,oppelt,opfer,opdyke,onell,olivos,okumura,okoro,ogas,oelschlaeger,oder,ocanas,obrion,obarr,oare,nyhus,nyenhuis,nunnelley,nunamaker,nuckels,noyd,nowlan,novakovich,noteboom,norviel,nortz,norment,norland,nolt,nolie,nixson,nitka,nissley,nishiyama,niland,niewiadomski,niemeier,nieland,nickey,nicholsen,neugent,neto,nerren,neikirk,neigh,nedrow,neave,nazaire,navaro,navalta,nasworthy,nasif,nalepa,nakao,nakai,nadolny,myklebust,mussel,murthy,muratore,murat,mundie,mulverhill,muilenburg,muetzel,mudra,mudgett,mrozinski,moura,mottinger,morson,moretto,morentin,mordan,mooreland,mooers,monts,montone,montondo,montiero,monie,monat,monares,mollo,mollet,molacek,mokry,mohrmann,mohabir,mogavero,moes,moceri,miyoshi,mitzner,misra,mirr,minish,minge,minckler,milroy,mille,mileski,milanesi,miko,mihok,mihalik,mieczkowski,messerli,meskill,mesenbrink,merton,merryweather,merkl,menser,menner,menk,menden,menapace,melbourne,mekus,meinzer,meers,mctigue,mcquitty,mcpheron,mcmurdie,mcleary,mclafferty,mckinzy,mckibbin,mckethan,mcintee,mcgurl,mceachran,mcdowall,mcdermitt,mccuaig,mccreedy,mccoskey,mcclosky,mcclintick,mccleese,mccanless,mazzucco,mazzocco,mazurkiewicz,mazariego,mayhorn,maxcy,mavity,mauzey,maulding,matuszewski,mattsson,mattke,matsushita,matsuno,matsko,matkin,mathur,masterman,massett,massart,massari,mashni,martella,marren,margotta,marder,marczak,maran,maradiaga,manwarren,manter,mantelli,manso,mangone,manfredonia,malden,malboeuf,malanga,makara,maison,maisano,mairs,mailhiot,magri,madron,madole,mackall,macduff,macartney,lynds,lusane,luffman,louth,loughmiller,lougheed,lotspeich,lorenzi,loosli,longe,longanecker,lonero,lohmeyer,loeza,lobstein,lobner,lober,littman,litalien,lippe,lints,lijewski,ligas,liebert,liebermann,liberati,lezcano,levinthal,lessor,lesieur,lenning,lengel,lempke,lemp,lemar,leitzke,leinweber,legrone,lege,leder,lawnicki,lauth,laun,laughary,lassley,lashway,larrivee,largen,lare,lanouette,lanno,langille,langen,lamonte,lalin,laible,lafratta,laforte,lacuesta,lacer,labore,laboe,labeau,kwasniewski,kunselman,kuhr,kuchler,krugman,kruckenberg,krotzer,kroemer,krist,krigbaum,kreke,kreisman,kreisler,kreft,krasnow,kras,krag,kouyate,kough,kotz,kostura,korner,kornblum,korczynski,koppa,kopczyk,konz,komorowski,kollen,kolander,koepnick,koehne,kochis,knoch,knippers,knaebel,klipp,klinedinst,klimczyk,klier,klement,klaphake,kisler,kinzie,kines,kindley,kimple,kimm,kimbel,kilker,kilborn,kibbey,khong,ketchie,kerbow,kennemore,kennebeck,kenneally,kenndy,kenmore,kemnitz,kemler,kemery,kelnhofer,kellstrom,kellis,kellams,keiter,keirstead,keeny,keelin,keefauver,keams,kautzman,kaus,katayama,kasson,kassim,kasparian,kase,karwoski,kapuscinski,kaneko,kamerling,kamada,kalka,kalar,kakacek,kaczmarczyk,jurica,junes,journell,jolliffe,johnsey,jindra,jimenz,jette,jesperson,jerido,jenrette,jencks,jech,jayroe,jayo,javens,jaskot,jaros,jaquet,janowiak,jaegers,jackel,izumi,irelan,inzunza,imoto,imme,iglehart,iannone,iannacone,huyler,hussaini,hurlock,hurlbutt,huprich,humphry,hulslander,huelsman,hudelson,hudecek,hsia,hreha,hoyland,howk,housholder,housden,houff,horkey,honan,homme,holtzberg,hollyfield,hollings,hollenbaugh,hokenson,hogrefe,hogland,hoel,hodgkin,hochhalter,hjelle,hittson,hinderman,hinchliffe,hime,hilyer,hilby,hibshman,heydt,hewell,heward,hetu,hestand,heslep,herridge,herner,hernande,hermandez,hermance,herbold,heon,henthorne,henion,henao,heming,helmkamp,hellberg,heidgerken,heichel,hehl,hegedus,heckathorne,hearron,haymer,haycook,havlicek,hausladen,haseman,hartsook,hartog,harns,harne,harmann,haren,hanserd,hanners,hanekamp,hamra,hamley,hamelin,hamblet,hakimi,hagle,hagin,haehn,haeck,hackleman,haacke,gulan,guirand,guiles,guggemos,guerrieri,guerreiro,guereca,gudiel,guccione,gubler,gruenwald,gritz,grieser,grewe,grenon,gregersen,grefe,grech,grecco,gravette,grassia,granholm,graner,grandi,grahan,gradowski,gradney,graczyk,gouthier,gottschall,goracke,gootee,goodknight,goodine,gonzalea,gonterman,gonalez,gomm,goleman,goldtooth,goldstone,goldey,golan,goen,goeller,goel,goecke,godek,goan,glunz,gloyd,glodowski,glinski,glawe,girod,girdley,gindi,gillings,gildner,giger,giesbrecht,gierke,gier,giboney,giaquinto,giannakopoulo,giaimo,giaccio,giacalone,gessel,gerould,gerlt,gerhold,geralds,genson,genereux,gellatly,geigel,gehrig,gehle,geerdes,geagan,gawel,gavina,gauss,gatwood,gathman,gaster,garske,garratt,garms,garis,gansburg,gammell,gambale,gamba,galimore,gadway,gadoury,furrer,furino,fullard,fukui,fryou,friesner,friedli,friedl,friedberg,freyermuth,fremin,fredell,fraze,franken,foth,fote,fortini,fornea,formanek,forker,forgette,folan,foister,foglesong,flinck,flewellen,flaten,flaig,fitgerald,fischels,firman,finstad,finkelman,finister,fina,fetterhoff,ferriter,ferch,fennessy,feltus,feltes,feinman,farve,farry,farrall,farag,falzarano,falck,falanga,fakhoury,fairbrother,fagley,faggins,facteau,ewer,ewbank,evola,evener,eustis,estwick,estel,essa,espinola,escutia,eschmann,erpelding,ernsberger,erling,entz,engelhart,enbody,emick,elsinger,ellinwood,ellingsen,ellicott,elkind,eisinger,eisenbeisz,eischen,eimer,eigner,eichhorst,ehmke,egleston,eggett,efurd,edgeworth,eckels,ebey,eberling,eagleton,dwiggins,dweck,dunnings,dunnavant,dumler,duman,dugue,duerksen,dudeck,dreisbach,drawdy,drawbaugh,draine,draggoo,dowse,dovel,doughton,douds,doubrava,dort,dorshorst,dornier,doolen,donavan,dominik,domingez,dolder,dold,dobies,diskin,disano,dirden,diponio,dipirro,dimock,diltz,dillabough,diley,dikes,digges,digerolamo,diel,dicharry,dicecco,dibartolomeo,diamant,dewire,devone,dessecker,dertinger,derousselle,derk,depauw,depalo,denherder,demeyer,demetro,demastus,delvillar,deloye,delosrios,delgreco,delarge,delangel,dejongh,deitsch,degiorgio,degidio,defreese,defoe,decambra,debenedetto,deaderick,daza,dauzat,daughenbaugh,dato,dass,darwish,dantuono,danton,dammeyer,daloia,daleo,dagg,dacey,curts,cuny,cunneen,culverhouse,cucinella,cubit,crumm,crudo,crowford,crout,crotteau,crossfield,crooke,crom,critz,cristaldi,crickmore,cribbin,cremeens,crayne,cradduck,couvertier,cottam,cossio,correy,cordrey,coplon,copass,coone,coody,contois,consla,connelley,connard,congleton,condry,coltey,colindres,colgrove,colfer,colasurdo,cochell,cobbin,clouthier,closs,cloonan,clizbe,clennon,clayburn,claybourn,clausell,clasby,clagett,ciskowski,cirrincione,cinque,cinelli,cimaglia,ciaburri,christiani,christeson,chladek,chizmar,chinnici,chiarella,chevrier,cheves,chernow,cheong,chelton,chanin,cham,chaligoj,celestino,cayce,cavey,cavaretta,caughron,catmull,catapano,cashaw,carullo,carualho,carthon,cartelli,carruba,carrere,carolus,carlstrom,carfora,carello,carbary,caplette,cannell,cancilla,campell,cammarota,camilo,camejo,camarata,caisse,cacioppo,cabbagestalk,cabatu,cabanas,byles,buxbaum,butland,burrington,burnsed,burningham,burlingham,burgy,buitrago,bueti,buehring,buday,bucknell,buchbinder,bucey,bruster,brunston,brouillet,brosious,broomes,brodin,broddy,brochard,britsch,britcher,brierley,brezina,bressi,bressette,breslow,brenden,breier,brei,braymer,brasuell,branscomb,branin,brandley,brahler,bracht,bracamontes,brabson,boyne,boxell,bowery,bovard,boutelle,boulette,bottini,botkins,bosen,boscia,boscarino,borich,boreman,bordoy,bordley,bordenet,boquet,boocks,bolner,boissy,boilard,bohnen,bohall,boening,boccia,boccella,bobe,blyth,biviano,bitto,bisel,binstock,bines,billiter,bigsby,bighorse,bielawski,bickmore,bettin,bettenhausen,besson,beseau,berton,berroa,berntson,bernas,berisford,berhow,bergsma,benyo,benyard,bente,bennion,benko,belsky,bellavance,belasco,belardo,beidler,behring,begnaud,bega,befort,beek,bedore,beddard,becknell,beardslee,beardall,beagan,bayly,bauza,bautz,bausman,baumler,batterson,battenfield,bassford,basse,basemore,baruch,bartholf,barman,baray,barabas,banghart,banez,balsam,ballester,ballagh,baldock,bagnoli,bagheri,bacus,bacho,baccam,axson,averhart,aver,austill,auberry,athans,atcitty,atay,astarita,ascolese,artzer,arrasmith,argenbright,aresco,aranjo,appleyard,appenzeller,apilado,antonetti,antis,annas,angwin,andris,andries,andreozzi,ando,andis,anderegg,amyot,aminov,amelung,amelio,amason,alviar,allendorf,aldredge,alcivar,alaya,alapai,airington,aina,ailor,ahrns,ahmadi,agresta,affolter,aeschlimann,adney,aderhold,adachi,ackiss,aben,abdelhamid,abar,aase,zorilla,zordan,zollman,zoch,zipfel,zimmerle,zike,ziel,zens,zelada,zaman,zahner,zadora,zachar,zaborowski,zabinski,yzquierdo,yoshizawa,yori,yielding,yerton,yehl,yeargain,yeakley,yamaoka,yagle,yablonski,wynia,wyne,wyers,wrzesinski,wrye,wriston,woolums,woolen,woodlock,woodle,wonser,wombacher,wollschlager,wollen,wolfley,wolfer,wisse,wisell,wirsing,winstanley,winsley,winiecki,winiarski,winge,winesett,windell,winberry,willyard,willemsen,wilkosz,wilensky,wikle,wiford,wienke,wieneke,wiederhold,wiebold,widick,wickenhauser,whitrock,whisner,whinery,wherley,whedbee,wheadon,whary,wessling,wessells,wenninger,wendroth,wende,wellard,weirick,weinkauf,wehrman,weech,weathersbee,warncke,wardrip,walstrom,walkowski,walcutt,waight,wagman,waggett,wadford,vowles,vormwald,vondran,vohs,vitt,vitalo,viser,vinas,villena,villaneuva,villafranca,villaflor,vilain,vicory,viana,vian,verucchi,verra,venzke,venske,veley,veile,veeder,vaske,vasconez,vargason,varble,vanwert,vantol,vanscooter,vanmetre,vanmaanen,vanhise,vaneaton,vandyk,vandriel,vandorp,vandewater,vandervelden,vanderstelt,vanderhoef,vanderbeck,vanbibber,vanalstine,vanacore,valdespino,vaill,vailes,vagliardo,ursini,urrea,urive,uriegas,umphress,ucci,uballe,tynon,twiner,tutton,tudela,tuazon,troisi,tripplett,trias,trescott,treichel,tredo,tranter,tozer,toxey,tortorici,tornow,topolski,topia,topel,topalian,tonne,tondre,tola,toepke,tisdell,tiscareno,thornborrow,thomison,thilges,theuret,therien,thagard,thacher,texter,terzo,tenpenny,tempesta,teetz,teaff,tavella,taussig,tatton,tasler,tarrence,tardie,tarazon,tantillo,tanney,tankson,tangen,tamburo,tabone,szilagyi,syphers,swistak,swiatkowski,sweigert,swayzer,swapp,svehla,sutphen,sutch,susa,surma,surls,sundermeyer,sundeen,sulek,sughrue,sudol,sturms,stupar,stum,stuckman,strole,strohman,streed,strebeck,strausser,strassel,stpaul,storts,storr,stommes,stmary,stjulien,stika,stiggers,sthill,stevick,sterman,stepanek,stemler,stelman,stelmack,steinkamp,steinbock,stcroix,stcharles,staudinger,stanly,stallsworth,stalley,srock,spritzer,spracklin,spinuzzi,spidell,speyrer,sperbeck,spendlove,speckman,spargur,spangenberg,spaid,sowle,soulier,sotolongo,sostre,sorey,sonier,somogyi,somera,soldo,soderholm,snoots,snooks,snoke,snodderly,snee,smithhart,smillie,smay,smallman,sliwinski,slentz,sledd,slager,skogen,skog,skarda,skalicky,siwek,sitterson,sisti,sissel,sinopoli,similton,simila,simenson,silvertooth,silos,siggins,sieler,siburt,sianez,shurley,shular,shuecraft,shreeves,shollenberger,shoen,shishido,shipps,shipes,shinall,sherfield,shawe,sharrett,sharrard,shankman,sessum,serviss,servello,serice,serda,semler,semenza,selmon,sellen,seley,seidner,seib,sehgal,seelbach,sedivy,sebren,sebo,seanez,seagroves,seagren,seabron,schwertner,schwegel,schwarzer,schrunk,schriefer,schreder,schrank,schopp,schonfeld,schoenwetter,schnall,schnackenberg,schnack,schmutzler,schmierer,schmidgall,schlup,schloemer,schlitt,schermann,scherff,schellenberg,schain,schaedler,schabel,scaccia,saye,saurez,sasseen,sasnett,sarti,sarra,sarber,santoy,santeramo,sansoucy,sando,sandles,sandau,samra,samaha,salizar,salam,saindon,sagaser,saeteun,sadusky,sackman,sabater,saas,ruthven,ruszkowski,rusche,rumpf,ruhter,ruhenkamp,rufo,rudge,ruddle,rowlee,rowand,routhier,rougeot,rotramel,rotan,rosten,rosillo,rookard,roode,rongstad,rollie,roider,roffe,roettger,rodick,rochez,rochat,rivkin,rivadeneira,riston,risso,rinderknecht,riis,riggsbee,rieker,riegle,riedy,richwine,richmon,ricciuti,riccardo,ricardson,rhew,revier,remsberg,remiszewski,rembold,rella,reinken,reiland,reidel,reichart,rehak,redway,rednour,redifer,redgate,redenbaugh,redburn,readus,raybuck,rauhuff,rauda,ratte,rathje,rappley,rands,ramseyer,ramseur,ramsdale,ramo,ramariz,raitz,raisch,rainone,rahr,ragasa,rafalski,radunz,quenzer,queja,queenan,pyun,putzier,puskas,purrington,puri,punt,pullar,pruse,pring,primeau,prevette,preuett,prestage,pownell,pownall,potthoff,potratz,poth,poter,posthuma,posen,porritt,popkin,poormon,polidoro,polcyn,pokora,poer,pluviose,plock,pleva,placke,pioli,pingleton,pinchback,pieretti,piccone,piatkowski,philley,phibbs,phay,phagan,pfund,peyer,pettersen,petter,petrucelli,petropoulos,petras,petix,pester,pepperman,pennick,penado,pelot,pelis,peeden,pechon,peal,pazmino,patchin,pasierb,parran,parilla,pardy,parcells,paragas,paradee,papin,panko,pangrazio,pangelinan,pandya,pancheri,panas,palmiter,pallares,palinkas,palek,pagliaro,packham,pacitti,ozier,overbaugh,oursler,ouimette,otteson,otsuka,othon,osmundson,oroz,orgill,ordeneaux,orama,oppy,opheim,onkst,oltmanns,olstad,olofson,ollivier,olejniczak,okura,okuna,ohrt,oharra,oguendo,ogier,offermann,oetzel,oechsle,odoherty,oddi,ockerman,occhiogrosso,obryon,obremski,nyreen,nylund,nylen,nyholm,nuon,nuanes,norrick,noris,nordell,norbury,nooner,nomura,nole,nolden,nofsinger,nocito,niedbala,niebergall,nicolini,nevils,neuburger,nemerofsky,nemecek,nazareno,nastri,nast,nagorski,myre,muzzey,mutschler,muther,musumeci,muranaka,muramoto,murad,murach,muns,munno,muncrief,mugrage,muecke,mozer,moyet,mowles,mottern,mosman,mosconi,morine,morge,moravec,morad,mones,moncur,monarez,molzahn,moglia,moesch,mody,modisett,mitnick,mithcell,mitchiner,mistry,misercola,mirabile,minvielle,mino,minkler,minifield,minichiello,mindell,minasian,milteer,millwee,millstein,millien,mikrut,mihaly,miggins,michard,mezo,metzner,mesquita,merriwether,merk,merfeld,mercik,mercadante,menna,mendizabal,mender,melusky,melquist,mellado,meler,melendes,mekeel,meiggs,megginson,meck,mcwherter,mcwayne,mcsparren,mcrea,mcneff,mcnease,mcmurrin,mckeag,mchughes,mcguiness,mcgilton,mcelreath,mcelhone,mcelhenney,mceldowney,mccurtain,mccure,mccosker,mccory,mccormic,mccline,mccleave,mcclatchey,mccarney,mccanse,mcallen,mazzie,mazin,mazanec,mayette,mautz,maun,mattas,mathurin,mathiesen,massmann,masri,masias,mascolo,mascetti,mascagni,marzolf,maruska,martain,marszalek,marolf,marmas,marlor,markwood,marinero,marier,marich,marcom,marciante,marchman,marchio,marbach,manzone,mantey,mannina,manhardt,manaois,malmgren,mallonee,mallin,mallary,malette,makinson,makins,makarewicz,mainwaring,maiava,magro,magouyrk,magett,maeder,madyun,maduena,maden,madeira,mackins,mackel,macinnes,macia,macgowan,lyssy,lyerly,lyalls,lutter,lunney,luksa,ludeman,lucidi,lucci,lowden,lovier,loughridge,losch,lorson,lorenzano,lorden,lorber,lopardo,loosier,loomer,longsdorf,longchamps,loncar,loker,logwood,loeffelholz,lockmiller,livoti,linford,linenberger,lindloff,lindenbaum,limoges,liley,lighthill,lightbourne,lieske,leza,levandoski,leuck,lepere,leonhart,lenon,lemma,lemler,leising,leinonen,lehtinen,lehan,leetch,leeming,ledyard,ledwith,ledingham,leclere,leck,lebert,leandry,lazzell,layo,laye,laxen,lawther,lawerance,lavoy,lavertu,laverde,latouche,latner,lathen,laskin,lashbaugh,lascala,larroque,larick,laraia,laplume,lanzilotta,lannom,landrigan,landolt,landess,lamkins,lalla,lalk,lakeman,lakatos,laib,lahay,lagrave,lagerquist,lafoy,lafleche,lader,labrada,kwiecinski,kutner,kunshier,kulakowski,kujak,kuehnle,kubisiak,krzyminski,krugh,krois,kritikos,krill,kriener,krewson,kretzschmar,kretz,kresse,kreiter,kreischer,krebel,krans,kraling,krahenbuhl,kouns,kotson,kossow,kopriva,konkle,kolter,kolk,kolich,kohner,koeppen,koenigs,kock,kochanski,kobus,knowling,knouff,knoerzer,knippel,kloberdanz,kleinert,klarich,klaassen,kisamore,kirn,kiraly,kipps,kinson,kinneman,kington,kine,kimbriel,kille,kibodeaux,khamvongsa,keylon,kever,keser,kertz,kercheval,kendrix,kendle,kempt,kemple,keesey,keatley,kazmierski,kazda,kazarian,kawashima,katsch,kasun,kassner,kassem,kasperski,kasinger,kaschak,karels,kantola,kana,kamai,kalthoff,kalla,kalani,kahrs,kahanek,kacher,jurasek,jungels,jukes,juelfs,judice,juda,josselyn,jonsson,jonak,joens,jobson,jegede,jeanjacques,jaworowski,jaspers,jannsen,janner,jankowiak,jank,janiak,jackowski,jacklin,jabbour,iyer,iveson,isner,iniquez,ingwerson,ingber,imbrogno,ille,ikehara,iannelli,hyson,huxford,huseth,hurns,hurney,hurles,hunnings,humbarger,hulan,huisinga,hughett,hughen,hudler,hubiak,hricko,hoversten,hottel,hosaka,horsch,hormann,hordge,honzell,homburg,holten,holme,hollopeter,hollinsworth,hollibaugh,holberg,hohmann,hoenstine,hodell,hodde,hiter,hirko,hinzmann,hinrichsen,hinger,hincks,hilz,hilborn,highley,higashi,hieatt,hicken,heverly,hesch,hervert,hershkowitz,herreras,hermanns,herget,henriguez,hennon,hengel,helmlinger,helmig,heldman,heizer,heinitz,heifner,heidorn,heglin,heffler,hebner,heathman,heaslip,hazlip,haymes,hayase,hawver,havermale,havas,hauber,hashim,hasenauer,harvel,hartney,hartel,harsha,harpine,harkrider,harkin,harer,harclerode,hanzely,hanni,hannagan,hampel,hammerschmidt,hamar,hallums,hallin,hainline,haid,haggart,hafen,haer,hadiaris,hadad,hackford,habeeb,guymon,guttery,gunnett,guillette,guiliano,guilbeaux,guiher,guignard,guerry,gude,gucman,guadian,grzybowski,grzelak,grussendorf,grumet,gruenhagen,grudzinski,grossmann,grof,grisso,grisanti,griffitts,griesbaum,grella,gregston,graveline,grandusky,grandinetti,gramm,goynes,gowing,goudie,gosman,gort,gorsline,goralski,goodstein,goodroe,goodlin,goodheart,goodhart,gonzelez,gonthier,goldsworthy,goldade,goettel,goerlitz,goepfert,goehner,goben,gobeille,gliem,gleich,glasson,glascoe,gladwell,giusto,girdner,gipple,giller,giesing,giammona,ghormley,germon,geringer,gergely,gerberich,gepner,gens,genier,gemme,gelsinger,geigle,gebbia,gayner,gavitt,gatrell,gastineau,gasiewski,gascoigne,garro,garin,ganong,ganga,galpin,gallus,galizia,gajda,gahm,gagen,gaffigan,furno,furnia,furgason,fronczak,frishman,friess,frierdich,freestone,franta,frankovich,fors,forres,forrer,florido,flis,flicek,flens,flegal,finkler,finkenbinder,finefrock,filpo,filion,fierman,fieldman,ferreyra,fernendez,fergeson,fera,fencil,feith,feight,federici,federer,fechtner,feagan,fausnaugh,faubert,fata,farman,farinella,fantauzzi,fanara,falso,falardeau,fagnani,fabro,excell,ewton,evey,everetts,evarts,etherington,estremera,estis,estabrooks,essig,esplin,espenschied,ernzen,eppes,eppard,entwisle,emison,elison,elguezabal,eledge,elbaz,eisler,eiden,eichorst,eichert,egle,eggler,eggimann,edey,eckerman,echelberger,ebbs,ebanks,dziak,dyche,dyce,dusch,duross,durley,durate,dunsworth,dumke,dulek,duhl,duggin,dufford,dudziak,ducrepin,dubree,dubre,dubie,dubas,droste,drisko,drewniak,doxtator,dowtin,downum,doubet,dottle,dosier,doshi,dorst,dorset,dornbusch,donze,donica,domanski,domagala,dohse,doerner,doerfler,doble,dobkins,dilts,digiulio,digaetano,dietzel,diddle,dickel,dezarn,devoy,devoss,devilla,devere,deters,desvergnes,deshay,desena,deross,depedro,densley,demorest,demore,demora,demirjian,demerchant,dematteis,demateo,delgardo,delfavero,delaurentis,delamar,delacy,deitrich,deisher,degracia,degraaf,defries,defilippis,decoursey,debruin,debiasi,debar,dearden,dealy,dayhoff,davino,darvin,darrisaw,darbyshire,daquino,daprile,danh,danahy,dalsanto,dallavalle,dagel,dadamo,dacy,dacunha,dabadie,czyz,cutsinger,curney,cuppernell,cunliffe,cumby,cullop,cullinane,cugini,cudmore,cuda,cucuzza,cuch,crumby,crouser,critton,critchley,cremona,cremar,crehan,creary,crasco,crall,crabbe,cozzolino,cozier,coyner,couvillier,counterman,coulthard,coudriet,cottom,corzo,cornutt,corkran,corda,copelin,coonan,consolo,conrow,conran,connerton,conkwright,condren,comly,comisky,colli,collet,colello,colbeck,colarusso,coiner,cohron,codere,cobia,clure,clowser,clingenpeel,clenney,clendaniel,clemenson,cleere,cleckler,claybaugh,clason,cirullo,ciraulo,ciolek,ciampi,christopherse,chovanec,chopra,chol,chiem,chestnutt,chesterman,chernoff,chermak,chelette,checketts,charpia,charo,chargois,champman,challender,chafins,cerruto,celi,cazenave,cavaluzzi,cauthon,caudy,catino,catano,cassaro,cassarino,carrano,carozza,carow,carmickle,carlyon,carlew,cardena,caputi,capley,capalbo,canseco,candella,campton,camposano,calleros,calleja,callegari,calica,calarco,calais,caillier,cahue,cadenhead,cadenas,cabera,buzzo,busto,bussmann,busenbark,burzynski,bursley,bursell,burle,burkleo,burkette,burczyk,bullett,buikema,buenaventura,buege,buechel,budreau,budhram,bucknam,brye,brushwood,brumbalow,brulotte,bruington,bruderer,brougher,bromfield,broege,brodhead,brocklesby,broadie,brizuela,britz,brisendine,brilla,briggeman,brierton,bridgeford,breyfogle,brevig,breuninger,bresse,bresette,brelsford,breitbach,brayley,braund,branscom,brandner,brahm,braboy,brabble,bozman,boyte,boynes,boyken,bowell,bowan,boutet,bouse,boulet,boule,bottcher,bosquez,borrell,boria,bordes,borchard,bonson,bonino,bonas,bonamico,bolstad,bolser,bollis,bolich,bolf,boker,boileau,bohac,bogucki,bogren,boeger,bodziony,bodo,bodley,boback,blyther,blenker,blazina,blase,blamer,blacknall,blackmond,bitz,biser,biscardi,binz,bilton,billotte,billafuerte,bigford,biegler,bibber,bhandari,beyersdorf,bevelle,bettendorf,bessard,bertsche,berne,berlinger,berish,beranek,bentson,bentsen,benskin,benoy,benoist,benitz,belongia,belmore,belka,beitzel,beiter,beitel,behrns,becka,beaudion,beary,beare,beames,beabout,beaber,bazzano,bazinet,baucum,batrez,baswell,bastos,bascomb,bartha,barstad,barrilleaux,barretto,barresi,barona,barkhurst,barke,bardales,barczak,barca,barash,banfill,balonek,balmes,balko,balestrieri,baldino,baldelli,baken,baiza,bahner,baek,badour,badley,badia,backmon,bacich,bacca,ayscue,aynes,ausiello,auringer,auiles,aspinwall,askwith,artiga,arroliga,arns,arman,arellanes,aracena,antwine,antuna,anselmi,annen,angelino,angeli,angarola,andrae,amodio,ameen,alwine,alverio,altro,altobello,altemus,alquicira,allphin,allemand,allam,alessio,akpan,akerman,aiona,agyeman,agredano,adamik,adamczak,acrey,acevado,abreo,abrahamsen,abild,zwicker,zweig,zuvich,zumpano,zuluaga,zubek,zornes,zoglmann,ziminski,zimbelman,zhanel,zenor,zechman,zauner,zamarron,zaffino,yusuf,ytuarte,yett,yerkovich,yelder,yasuda,yapp,yaden,yackley,yaccarino,wytch,wyre,wussow,worthing,wormwood,wormack,wordell,woodroof,woodington,woodhams,wooddell,wollner,wojtkowski,wojcicki,wogan,wlodarczyk,wixted,withington,withem,wisler,wirick,winterhalter,winski,winne,winemiller,wimett,wiltfong,willibrand,willes,wilkos,wilbon,wiktor,wiggers,wigg,wiegmann,wickliff,wiberg,whittler,whittenton,whitling,whitledge,whitherspoon,whiters,whitecotton,whitebird,wheary,wetherill,westmark,westaby,wertenberger,wentland,wenstrom,wenker,wellen,weier,wegleitner,wedekind,wawers,wassel,warehime,wandersee,waltmon,waltersheid,walbridge,wakely,wakeham,wajda,waithe,waidelich,wahler,wahington,wagster,wadel,vuyovich,vuolo,vulich,vukovich,volmer,vollrath,vollbrecht,vogelgesang,voeller,vlach,vivar,vitullo,vitanza,visker,visalli,viray,vinning,viniard,villapando,villaman,vier,viar,viall,verstraete,vermilya,verdon,venn,velten,velis,vanoven,vanorder,vanlue,vanheel,vanderwoude,vanderheide,vandenheuvel,vandenbos,vandeberg,vandal,vanblarcom,vanaken,vanacker,vallian,valine,valent,vaine,vaile,vadner,uttech,urioste,urbanik,unrath,unnasch,underkofler,uehara,tyrer,tyburski,twaddle,turntine,tunis,tullock,tropp,troilo,tritsch,triola,trigo,tribou,tribley,trethewey,tress,trela,treharne,trefethen,trayler,trax,traut,tranel,trager,traczyk,towsley,torrecillas,tornatore,tork,torivio,toriello,tooles,tomme,tolosa,tolen,toca,titterington,tipsword,tinklenberg,tigney,tigert,thygerson,thurn,thur,thorstad,thornberg,thoresen,thomaston,tholen,thicke,theiler,thebeau,theaux,thaker,tewani,teufel,tetley,terrebonne,terrano,terpening,tela,teig,teichert,tegethoff,teele,tatar,tashjian,tarte,tanton,tanimoto,tamimi,tamas,talman,taal,szydlowski,szostak,swoyer,swerdlow,sweeden,sweda,swanke,swander,suyama,suriano,suri,surdam,suprenant,sundet,summerton,sult,suleiman,suffridge,suby,stych,studeny,strupp,struckman,strief,strictland,stremcha,strehl,stramel,stoy,stoutamire,storozuk,stordahl,stopher,stolley,stolfi,stoeger,stockhausen,stjulian,stivanson,stinton,stinchfield,stigler,stieglitz,stgermaine,steuer,steuber,steuart,stepter,stepnowski,stepanian,steimer,stefanelli,stebner,stears,steans,stayner,staubin,statz,stasik,starn,starmer,stargel,stanzione,stankovich,stamour,staib,stadelman,stadel,stachura,squadrito,springstead,spragg,spigelmyer,spieler,spaur,sovocool,soundara,soulia,souffrant,sorce,sonkin,sodhi,soble,sniffen,smouse,smittle,smithee,smedick,slowinski,slovacek,slominski,skowronek,skokan,skanes,sivertson,sinyard,sinka,sinard,simonin,simonian,simmions,silcott,silberg,siefken,siddon,shuttlesworth,shubin,shubeck,shiro,shiraki,shipper,shina,shilt,shikles,shideler,shenton,shelvey,shellito,shelhorse,shawcroft,shatto,shanholtzer,shamonsky,shadden,seymer,seyfarth,setlock,serratos,serr,sepulueda,senay,semmel,semans,selvig,selkirk,selk,seligson,seldin,seiple,seiersen,seidling,seidensticker,secker,searson,scordo,scollard,scoggan,scobee,sciandra,scialdone,schwimmer,schwieger,schweer,schwanz,schutzenhofer,schuetze,schrodt,schriever,schriber,schremp,schrecongost,schraeder,schonberg,scholtz,scholle,schoettle,schoenemann,schoene,schnitker,schmuhl,schmith,schlotterbeck,schleppenbach,schlee,schickel,schibi,schein,scheide,scheibe,scheib,schaumberg,schardein,schaalma,scantlin,scantlebury,sayle,sausedo,saurer,sassone,sarracino,saric,sanz,santarpia,santano,santaniello,sangha,sandvik,sandoral,sandobal,sandercock,sanantonio,salviejo,salsberry,salois,salazer,sagon,saglibene,sagel,sagal,saetern,saefong,sadiq,sabori,saballos,rygiel,rushlow,runco,rulli,ruller,ruffcorn,ruess,ruebush,rudlong,rudin,rudgers,rudesill,ruderman,rucki,rucinski,rubner,rubinson,rubiano,roznowski,rozanski,rowson,rower,rounsaville,roudabush,rotundo,rothell,rotchford,rosiles,roshak,rosetti,rosenkranz,rorer,rollyson,rokosz,rojek,roitman,rohrs,rogel,roewe,rodriges,rodocker,rodgerson,rodan,rodak,rocque,rochholz,robicheau,robbinson,roady,ritchotte,ripplinger,rippetoe,ringstaff,ringenberg,rinard,rigler,rightmire,riesen,riek,ridges,richner,richberg,riback,rial,rhyner,rhees,resse,renno,rendleman,reisz,reisenauer,reinschmidt,reinholt,reinard,reifsnyder,rehfeld,reha,regester,reffitt,redler,rediske,reckner,reckart,rebolloso,rebollar,reasonover,reasner,reaser,reano,reagh,raval,ratterman,ratigan,rater,rasp,raneses,randolf,ramil,ramdas,ramberg,rajaniemi,raggio,ragel,ragain,rade,radaker,racioppi,rabinovich,quickle,quertermous,queal,quartucci,quander,quain,pynes,putzel,purl,pulizzi,pugliares,prusak,prueter,protano,propps,primack,prieur,presta,preister,prawl,pratley,pozzo,powless,povey,pottorf,pote,postley,porzio,portney,ponzi,pontoriero,ponto,pont,poncedeleon,polimeni,polhamus,polan,poetker,poellnitz,podgurski,plotts,pliego,plaugher,plantenberg,plair,plagmann,pizzitola,pittinger,pitcavage,pischke,piontek,pintar,pinnow,pinneo,pinley,pingel,pinello,pimenta,pillard,piker,pietras,piere,phillps,pfleger,pfahl,pezzuti,petruccelli,petrello,peteet,pescatore,peruzzi,perusse,perotta,perona,perini,perelman,perciful,peppin,pennix,pennino,penalosa,pemble,pelz,peltzer,pelphrey,pelote,pellum,pellecchia,pelikan,peitz,pebworth,peary,pawlicki,pavelich,paster,pasquarella,paskey,paseur,paschel,parslow,parrow,parlow,parlett,parler,pargo,parco,paprocki,panepinto,panebianco,pandy,pandey,pamphile,pamintuan,pamer,paluso,paleo,paker,pagett,paczkowski,ozburn,ovington,overmeyer,ouellet,osterlund,oslin,oseguera,osaki,orrock,ormsbee,orlikowski,organista,oregan,orebaugh,orabuena,openshaw,ontiveroz,ondo,omohundro,ollom,ollivierre,olivencia,oley,olazabal,okino,offenberger,oestmann,ocker,obar,oakeson,nuzum,nurre,nowinski,novosel,norquist,nordlie,noorani,nonnemacher,nolder,njoku,niznik,niwa,niss,ninneman,nimtz,niemczyk,nieder,nicolo,nichlos,niblack,newtown,newill,newcom,neverson,neuhart,neuenschwande,nestler,nenno,nejman,neiffer,neidlinger,neglia,nazarian,navor,nary,narayan,nangle,nakama,naish,naik,nadolski,muscato,murphrey,murdick,murchie,muratalla,munnis,mundwiller,muncey,munce,mullenbach,mulhearn,mulcahey,muhammed,muchow,mountford,moudry,mosko,morvay,morrical,morr,moros,mormann,morgen,moredock,morden,mordarski,moravek,morandi,mooradian,montejo,montegut,montan,monsanto,monford,moncus,molinas,molek,mohd,moehrle,moehring,modzeleski,modafferi,moala,moake,miyahira,mitani,mischel,minges,minella,mimes,milles,milbrett,milanes,mikolajczyk,mikami,meucci,metler,methven,metge,messmore,messerschmidt,mesrobian,meservey,merseal,menor,menon,menear,melott,melley,melfi,meinhart,megivern,megeath,meester,meeler,meegan,medoff,medler,meckley,meath,mearns,mcquigg,mcpadden,mclure,mckellips,mckeithen,mcglathery,mcginnes,mcghan,mcdonel,mccullom,mccraken,mccrackin,mcconathy,mccloe,mcclaughry,mcclaflin,mccarren,mccaig,mcaulay,mcaffee,mazzuca,maytubby,mayner,maymi,mattiello,matthis,matthees,matthai,mathiason,mastrogiovann,masteller,mashack,marucci,martorana,martiniz,marter,martellaro,marsteller,marris,marrara,maroni,marolda,marocco,maritn,maresh,maready,marchione,marbut,maranan,maragno,mapps,manrriquez,mannis,manni,mangina,manganelli,mancera,mamon,maloch,mallozzi,maller,majchrzak,majano,mainella,mahanna,maertens,madon,macumber,macioce,machuga,machlin,machala,mabra,lybbert,luvert,lutts,luttrull,lupez,lukehart,ludewig,luchsinger,lovecchio,louissaint,loughney,lostroh,lorton,lopeman,loparo,londo,lombera,lokietek,loiko,lohrenz,lohan,lofties,locklar,lockaby,lobianco,llano,livesey,litster,liske,linsky,linne,lindbeck,licudine,leyua,levie,leonelli,lenzo,lenze,lents,leitao,leidecker,leibold,lehne,legan,lefave,leehy,ledue,lecount,lecea,leadley,lazzara,lazcano,lazalde,lavi,lavancha,lavan,latu,latty,lato,larranaga,lapidus,lapenta,langridge,langeveld,langel,landowski,landgren,landfried,lamattina,lallier,lairmore,lahaie,lagazo,lagan,lafoe,lafluer,laflame,lafevers,lada,lacoss,lachney,labreck,labreche,labay,kwasnik,kuzyk,kutzner,kushnir,kusek,kurtzman,kurian,kulhanek,kuklinski,kueny,kuczynski,kubitz,kruschke,krous,krompel,kritz,krimple,kriese,krenzer,kreis,kratzke,krane,krage,kraebel,kozub,kozma,kouri,koudelka,kotcher,kotas,kostic,kosh,kosar,kopko,kopka,kooy,konigsberg,konarski,kolmer,kohlmeyer,kobbe,knoop,knoedler,knocke,knipple,knippenberg,knickrehm,kneisel,kluss,klossner,klipfel,klawiter,klasen,kittles,kissack,kirtland,kirschenmann,kirckof,kiphart,kinstler,kinion,kilton,killman,kiehl,kief,kett,kesling,keske,kerstein,kepple,keneipp,kempson,kempel,kehm,kehler,keeran,keedy,kebert,keast,kearbey,kawaguchi,kaupu,kauble,katzenbach,katcher,kartes,karpowicz,karpf,karban,kanzler,kanarek,kamper,kaman,kalsow,kalafut,kaeser,kaercher,kaeo,kaeding,jurewicz,julson,jozwick,jollie,johnigan,johll,jochum,jewkes,jestes,jeska,jereb,jaurez,jarecki,jansma,janosik,jandris,jamin,jahr,jacot,ivens,itson,isenhower,iovino,ionescu,ingrum,ingels,imrie,imlay,ihlenfeld,ihde,igou,ibach,huyett,huppe,hultberg,hullihen,hugi,hueso,huesman,hsiao,hronek,hovde,housewright,houlahan,hougham,houchen,hostler,hoster,hosang,hornik,hornes,horio,honyumptewa,honeyman,honer,hommerding,holsworth,hollobaugh,hollinshead,hollands,hollan,holecek,holdorf,hokes,hogston,hoesly,hodkinson,hodgman,hodgens,hochstedler,hochhauser,hobbie,hoare,hnat,hiskey,hirschy,hinostroza,hink,hing,hillmer,hillian,hillerman,hietala,hierro,hickling,hickingbottom,heye,heubusch,hesselschward,herriot,hernon,hermida,hermans,hentschel,henningson,henneke,henk,heninger,heltsley,helmle,helminiak,helmes,hellner,hellmuth,helke,heitmeyer,heird,heinle,heinicke,heinandez,heimsoth,heibel,hegyi,heggan,hefel,heeralall,hedrington,heacox,hazlegrove,hazelett,haymore,havenhill,hautala,hascall,harvie,hartrick,hartling,harrer,harles,hargenrader,hanshew,hanly,hankla,hanisch,hancox,hammann,hambelton,halseth,hallisey,halleck,hallas,haisley,hairr,hainey,hainer,hailstock,haertel,guzek,guyett,guster,gussler,gurwitz,gurka,gunsolus,guinane,guiden,gugliotti,guevin,guevarra,guerard,gudaitis,guadeloupe,gschwind,grupe,grumbach,gruenes,gruenberg,grom,grodski,groden,grizzel,gritten,griswald,grishaber,grinage,grimwood,grims,griffon,griffies,gribben,gressley,gren,greenstreet,grealish,gravett,grantz,granfield,granade,gowell,gossom,gorsky,goring,goodnow,goodfriend,goodemote,golob,gollnick,golladay,goldwyn,goldsboro,golds,goldrick,gohring,gohn,goettsch,goertzen,goelz,godinho,goans,glumac,gleisner,gleen,glassner,glanzer,gladue,gjelaj,givhan,girty,girone,girgenti,giorgianni,gilpatric,gillihan,gillet,gilbar,gierut,gierhart,gibert,gianotti,giannetto,giambanco,gharing,geurts,gettis,gettel,gest,germani,gerdis,gerbitz,geppert,gennings,gemmer,gelvin,gellert,gehler,geddings,gearon,geach,gazaille,gayheart,gauld,gaukel,gaudio,gathing,gasque,garstka,garsee,garringer,garofano,garo,garnsey,garigen,garcias,garbe,ganoung,ganfield,ganaway,gamero,galuska,galster,gallacher,galinski,galimi,galik,galeazzi,galdo,galdames,galas,galanis,gaglio,gaeddert,gadapee,fussner,furukawa,fuhs,fuerte,fuerstenberg,fryrear,froese,fringer,frieson,friesenhahn,frieler,friede,freymuth,freyman,freudenberg,freman,fredricksen,frech,frasch,frantum,frankin,franca,frago,fragnoli,fouquet,fossen,foskett,forner,formosa,formisano,fooks,fons,folino,flott,flesch,flener,flemmons,flanagin,flamino,flamand,fitzerald,findling,filsinger,fillyaw,fillinger,fiechter,ferre,ferdon,feldkamp,fazzio,favia,faulconer,faughnan,faubel,fassler,faso,farrey,farrare,farnworth,farland,fairrow,faille,faherty,fagnant,fabula,fabbri,eylicio,esteve,estala,espericueta,escajeda,equia,enrriquez,enomoto,enmon,engemann,emmerson,emmel,emler,elstad,ellwein,ellerson,eliott,eliassen,elchert,eisenbeis,eisel,eikenberry,eichholz,ehmer,edgerson,echenique,eberley,eans,dziuk,dykhouse,dworak,dutt,dupas,duntz,dunshee,dunovant,dunnaway,dummermuth,duerson,ducotey,duchon,duchesneau,ducci,dubord,duberry,dubach,drummonds,droege,drish,drexel,dresch,dresbach,drenner,drechsler,dowen,dotter,dosreis,doser,dorward,dorin,dorf,domeier,doler,doleman,dolbow,dolbin,dobrunz,dobransky,dobberstein,dlouhy,diosdado,dingmann,dimmer,dimarino,dimaria,dillenburg,dilaura,dieken,dickhaus,dibbles,dibben,diamante,dewilde,dewaard,devich,devenney,devaux,dettinger,desroberts,dershem,dersch,derita,derickson,depina,deorio,deoliveira,denzler,dentremont,denoble,demshar,demond,demint,demichele,demel,delzer,delval,delorbe,delli,delbridge,delanoy,delancy,delahoya,dekle,deitrick,deis,dehnert,degrate,defrance,deetz,deeg,decoster,decena,dearment,daughety,datt,darrough,danzer,danielovich,dandurand,dancause,dalo,dalgleish,daisley,dadlani,daddona,daddio,dacpano,cyprian,cutillo,curz,curvin,cuna,cumber,cullom,cudworth,cubas,crysler,cryderman,crummey,crumbly,crookshanks,croes,criscione,crespi,cresci,creaser,craton,cowin,cowdrey,coutcher,cotterman,cosselman,cosgriff,cortner,corsini,corporan,corniel,cornick,cordts,copening,connick,conlisk,conelli,comito,colten,colletta,coldivar,colclasure,colantuono,colaizzi,coggeshall,cockman,cockfield,cobourn,cobo,cobarrubias,clyatt,cloney,clonch,climes,cleckner,clearo,claybourne,clavin,claridge,claffey,ciufo,cisnero,cipollone,cieslik,ciejka,cichocki,cicchetti,cianflone,chrusciel,christesen,chmielowiec,chirino,chillis,chhoun,chevas,chehab,chaviano,chavaria,chasten,charbonnet,chanley,champoux,champa,chalifoux,cerio,cedotal,cech,cavett,cavendish,catoire,castronovo,castellucci,castellow,castaner,casso,cassels,cassatt,cassar,cashon,cartright,carros,carrisalez,carrig,carrejo,carnicelli,carnett,carlise,carhart,cardova,cardell,carchi,caram,caquias,capper,capizzi,capano,cannedy,campese,calvello,callon,callins,callies,callicutt,calix,calin,califf,calderaro,caldeira,cadriel,cadmus,cadman,caccamise,buttermore,butay,bustamente,busa,burmester,burkard,burhans,burgert,bure,burdin,bullman,bulin,buelna,buehner,budin,buco,buckhanon,bryars,brutger,brus,brumitt,brum,bruer,brucato,broyhill,broy,brownrigg,brossart,brookings,broden,brocklehurst,brockert,bristo,briskey,bringle,bries,bressman,branyan,brands,bramson,brammell,brallier,bozich,boysel,bowthorpe,bowron,bowin,boutilier,boulos,boullion,boughter,bottiglieri,borruso,borreggine,borns,borkoski,borghese,borenstein,boran,booton,bonvillain,bonini,bonello,bolls,boitnott,boike,bohnet,bohnenkamp,bohmer,boeson,boeneke,bodey,bocchino,bobrowski,bobic,bluestein,bloomingdale,blogg,blewitt,blenman,bleck,blaszak,blankenbeckle,blando,blanchfield,blancato,blalack,blakenship,blackett,bisping,birkner,birckhead,bingle,bineau,billiel,bigness,bies,bierer,bhalla,beyerlein,betesh,besler,berzins,bertalan,berntsen,bergo,berganza,bennis,benney,benkert,benjamen,benincasa,bengochia,bendle,bendana,benchoff,benbrook,belsito,belshaw,belinsky,belak,beigert,beidleman,behen,befus,beel,bedonie,beckstrand,beckerle,beato,bauguess,baughan,bauerle,battis,batis,bastone,bassetti,bashor,bary,bartunek,bartoletti,barro,barno,barnicle,barlage,barkus,barkdull,barcellos,barbarino,baranski,baranick,bankert,banchero,bambrick,bamberg,bambenek,balthrop,balmaceda,ballman,balistrieri,balcomb,balboni,balbi,bagner,bagent,badasci,bacot,bache,babione,babic,babers,babbs,avitabile,avers,avena,avance,ausley,auker,audas,aubut,athearn,atcheson,astorino,asplund,aslanian,askari,ashmead,asby,asai,arterbury,artalejo,arqueta,arquero,arostegui,arnell,armeli,arista,arender,arca,arballo,aprea,applen,applegarth,apfel,antonello,antolin,antkowiak,angis,angione,angerman,angelilli,andujo,andrick,anderberg,amigon,amalfitano,alviso,alvez,altice,altes,almarez,allton,allston,allgeyer,allegretti,aliaga,algood,alberg,albarez,albaladejo,akre,aitkin,ahles,ahlberg,agnello,adinolfi,adamis,abramek,abolt,abitong,zurawski,zufall,zubke,zizzo,zipperer,zinner,zinda,ziller,zill,zevallos,zesati,zenzen,zentner,zellmann,zelinsky,zboral,zarcone,zapalac,zaldana,zakes,zaker,zahniser,zacherl,zabawa,zabaneh,youree,younis,yorty,yonce,yero,yerkey,yeck,yeargan,yauch,yashinski,yambo,wrinn,wrightsman,worton,wortley,worland,woolworth,woolfrey,woodhead,woltjer,wolfenden,wolden,wolchesky,wojick,woessner,witters,witchard,wissler,wisnieski,wisinski,winnike,winkowski,winkels,wingenter,wineman,winegardner,wilridge,wilmont,willians,williamsen,wilhide,wilhelmsen,wilhelmi,wildrick,wilden,wiland,wiker,wigglesworth,wiebusch,widdowson,wiant,wiacek,whittet,whitelock,whiteis,whiley,westrope,westpfahl,westin,wessman,wessinger,wesemann,wesby,wertheimer,weppler,wenke,wengler,wender,welp,weitzner,weissberg,weisenborn,weipert,weiman,weidmann,wehrsig,wehrenberg,weemes,weeman,wayner,waston,wasicek,wascom,wasco,warmath,warbritton,waltner,wallenstein,waldoch,waldal,wala,waide,wadlinger,wadhams,vullo,voorheis,vonbargen,volner,vollstedt,vollman,vold,voge,vittorio,violett,viney,vinciguerra,vinal,villata,villarrvel,vilanova,vigneault,vielma,veyna,vessella,versteegh,verderber,venier,venditti,velotta,vejarano,vecchia,vecchi,vastine,vasguez,varella,vanry,vannah,vanhyning,vanhuss,vanhoff,vanhoesen,vandivort,vandevender,vanderlip,vanderkooi,vandebrink,vancott,vallien,vallas,vallandingham,valiquette,valasek,vahey,vagott,uyematsu,urbani,uran,umbach,tyon,tyma,twyford,twombley,twohig,tutterrow,turnes,turkington,turchi,tunks,tumey,tumbaga,tuinstra,tsukamoto,tschetter,trussel,trubey,trovillion,troth,trostel,tron,trinka,trine,triarsi,treto,trautz,tragesser,tooman,toolson,tonozzi,tomkiewicz,tomasso,tolin,tolfree,toelle,tisor,tiry,tinstman,timmermann,tickner,tiburcio,thunberg,thronton,thompsom,theil,thayne,thaggard,teschner,tensley,tenery,tellman,tellado,telep,teigen,teator,teall,tayag,tavis,tattersall,tassoni,tarshis,tappin,tappe,tansley,talone,talford,tainter,taha,taguchi,tacheny,tabak,szymczyk,szwaja,szopinski,syvertsen,swogger,switcher,swist,swierczek,swiech,swickard,swiatek,swezey,swepson,sweezy,swaringen,swanagan,swailes,swade,sveum,svenningsen,svec,suttie,supry,sunga,summerhill,summars,sulit,stys,stutesman,stupak,stumpo,stuller,stuekerjuerge,stuckett,stuckel,stuchlik,stuard,strutton,strop,stromski,stroebel,strehlow,strause,strano,straney,stoyle,stormo,stopyra,stoots,stonis,stoltenburg,stoiber,stoessel,stitzer,stien,stichter,stezzi,stewert,stepler,steinkraus,stegemann,steeples,steenburg,steeley,staszak,stasko,starkson,stanwick,stanke,stanifer,stangel,stai,squiers,spraglin,spragins,spraberry,spoelstra,spisak,spirko,spille,spidel,speyer,speroni,spenst,spartz,sparlin,sparacio,spaman,spainhower,souers,souchet,sosbee,sorn,sorice,sorbo,soqui,solon,soehl,sodergren,sobie,smucker,smsith,smoley,smolensky,smolenski,smolder,smethers,slusar,slowey,slonski,slemmons,slatkin,slates,slaney,slagter,slacum,skutnik,skrzypek,skibbe,sjostrom,sjoquist,sivret,sitko,sisca,sinnett,sineath,simoni,simar,simao,silvestro,silleman,silha,silfies,silberhorn,silacci,sigrist,sieczkowski,sieczka,shure,shulz,shugrue,shrode,shovlin,shortell,shonka,shiyou,shiraishi,shiplett,sheu,shermer,sherick,sheeks,shantz,shakir,shaheed,shadoan,shadid,shackford,shabot,seung,seufert,setty,setters,servis,serres,serrell,serpas,sensenig,senft,semenec,semas,semaan,selvera,sellmeyer,segar,seever,seeney,seeliger,seehafer,seebach,sebben,seaward,seary,searl,searby,scordino,scolieri,scolaro,schwiebert,schwartze,schwaner,schuur,schupbach,schumacker,schum,schudel,schubbe,schroader,schramel,schollmeyer,schoenherr,schoeffler,schoeder,schnurr,schnorr,schneeman,schnake,schnaible,schmaus,schlotter,schinke,schimming,schimek,schikora,scheulen,scherping,schermer,scherb,schember,schellhase,schedler,schanck,schaffhauser,schaffert,schadler,scarola,scarfo,scarff,scantling,scaff,sayward,sayas,saxbury,savel,savastano,sault,satre,sarkar,santellan,sandmeier,sampica,salvesen,saltis,salloum,salling,salce,salatino,salata,salamy,sadowsky,sadlier,sabbatini,sabatelli,sabal,sabados,rydzewski,rybka,rybczyk,rusconi,rupright,rufino,ruffalo,rudiger,rudig,ruda,rubyor,royea,roxberry,rouzer,roumeliotis,rossmann,rosko,rosene,rosenbluth,roseland,rosasco,rosano,rosal,rorabaugh,romie,romaro,rolstad,rollow,rohrich,roghair,rogala,roets,roen,roemmich,roelfs,roeker,roedl,roedel,rodeheaver,roddenberry,rockstad,rocchi,robirds,robben,robasciotti,robaina,rizzotto,rizzio,ritcher,rissman,riseden,ripa,rion,rintharamy,rinehimer,rinck,riling,rietschlin,riesenberg,riemenschneid,rieland,rickenbaugh,rickenbach,rhody,revells,reutter,respress,resnik,remmel,reitmeyer,reitan,reister,reinstein,reino,reinkemeyer,reifschneider,reierson,reichle,rehmeier,rehl,reeds,rede,recar,rebeiro,raybourn,rawl,rautio,raugust,raudenbush,raudales,rattan,rapuano,rapoport,rantanen,ransbottom,raner,ramkissoon,rambousek,raio,rainford,radakovich,rabenhorst,quivers,quispe,quinoes,quilici,quattrone,quates,quance,quale,purswell,purpora,pulera,pulcher,puckhaber,pryer,pruyne,pruit,prudencio,prows,protzman,prothero,prosperi,prospal,privott,pritchet,priem,prest,prell,preer,pree,preddy,preda,pravata,pradhan,potocki,postier,postema,posadas,poremba,popichak,ponti,pomrenke,pomarico,pollok,polkinghorn,polino,pock,plater,plagman,pipher,pinzone,pinkleton,pillette,pillers,pilapil,pignone,pignatelli,piersol,piepho,picton,pickrel,pichard,picchi,piatek,pharo,phanthanouvon,pettingill,pettinato,petrovits,pethtel,petersheim,pershing,perrez,perra,pergram,peretz,perego,perches,pennello,pennella,pendry,penaz,pellish,pecanty,peare,paysour,pavlovich,pavick,pavelko,paustian,patzer,patete,patadia,paszkiewicz,pase,pasculli,pascascio,parrotte,parajon,paparo,papandrea,paone,pantaleon,panning,paniccia,panarello,palmeter,pallan,palardy,pahmeier,padget,padel,oxborrow,oveson,outwater,ottaway,otake,ostermeyer,osmer,osinski,osiecki,oroak,orndoff,orms,orkin,ordiway,opatz,onsurez,onishi,oliger,okubo,okoye,ohlmann,offord,offner,offerdahl,oesterle,oesch,odonnel,odeh,odebralski,obie,obermeier,oberhausen,obenshain,obenchain,nute,nulty,norrington,norlin,nore,nordling,nordhoff,norder,nordan,norals,nogales,noboa,nitsche,niermann,nienhaus,niedringhaus,niedbalski,nicolella,nicolais,nickleberry,nicewander,newfield,neurohr,neumeier,netterville,nersesian,nern,nerio,nerby,nerbonne,neitz,neidecker,neason,nead,navratil,naves,nastase,nasir,nasca,narine,narimatsu,nard,narayanan,nappo,namm,nalbone,nakonechny,nabarro,myott,muthler,muscatello,murriel,murin,muoio,mundel,munafo,mukherjee,muffoletto,muessig,muckey,mucher,mruk,moyd,mowell,mowatt,moutray,motzer,moster,morgenroth,morga,morataya,montross,montezuma,monterroza,montemarano,montello,montbriand,montavon,montaque,monigold,monforte,molgard,moleski,mohsin,mohead,mofield,moerbe,moeder,mochizuki,miyazaki,miyasaki,mital,miskin,mischler,minniear,minero,milosevic,mildenhall,mielsch,midden,michonski,michniak,michitsch,michelotti,micheli,michelfelder,michand,metelus,merkt,merando,meranda,mentz,meneley,menaker,melino,mehaffy,meehl,meech,meczywor,mcweeney,mcumber,mcredmond,mcneer,mcnay,mcmikle,mcmaken,mclaurine,mclauglin,mclaney,mckune,mckinnies,mckague,mchattie,mcgrapth,mcglothen,mcgath,mcfolley,mcdannell,mccurty,mccort,mcclymonds,mcclimon,mcclamy,mccaughan,mccartan,mccan,mccadden,mcburnie,mcburnett,mcbryar,mcannally,mcalevy,mcaleese,maytorena,mayrant,mayland,mayeaux,mauter,matthewson,mathiew,matern,matera,maslow,mashore,masaki,maruco,martorell,martenez,marrujo,marrison,maroun,markway,markos,markoff,markman,marello,marbry,marban,maphis,manuele,mansel,manganello,mandrell,mandoza,manard,manago,maltba,mallick,mallak,maline,malikowski,majure,majcher,maise,mahl,maffit,maffeo,madueno,madlem,madariaga,macvane,mackler,macconnell,macchi,maccarone,lyng,lynchard,lunning,luneau,lunden,lumbra,lumbert,lueth,ludington,luckado,lucchini,lucatero,luallen,lozeau,lowen,lovera,lovelock,louck,lothian,lorio,lorimer,lorge,loretto,longhenry,lonas,loiseau,lohrman,logel,lockie,llerena,livington,liuzzi,liscomb,lippeatt,liou,linhardt,lindelof,lindbo,limehouse,limage,lillo,lilburn,liggons,lidster,liddick,lich,liberato,leysath,lewelling,lesney,leser,lescano,leonette,lentsch,lenius,lemmo,lemming,lemcke,leggette,legerski,legard,leever,leete,ledin,lecomte,lecocq,leakes,leab,lazarz,layous,lawrey,lawery,lauze,lautz,laughinghouse,latulippe,lattus,lattanzio,lascano,larmer,laris,larcher,laprise,lapin,lapage,lano,langseth,langman,langland,landstrom,landsberg,landsaw,landram,lamphier,lamendola,lamberty,lakhani,lajara,lagrow,lagman,ladewig,laderman,ladden,lacrue,laclaire,lachut,lachner,kwit,kvamme,kvam,kutscher,kushi,kurgan,kunsch,kundert,kulju,kukene,kudo,kubin,kubes,kuberski,krystofiak,kruppa,krul,krukowski,kruegel,kronemeyer,krock,kriston,kretzer,krenn,kralik,krafft,krabill,kozisek,koverman,kovatch,kovarik,kotlowski,kosmala,kosky,kosir,kosa,korpi,kornbluth,koppen,kooistra,kohlhepp,kofahl,koeneman,koebel,koczur,kobrin,kobashigawa,koba,knuteson,knoff,knoble,knipper,knierim,kneisley,klusman,kloc,klitzing,klinko,klinefelter,klemetson,kleinpeter,klauser,klatte,klaren,klare,kissam,kirkhart,kirchmeier,kinzinger,kindt,kincy,kincey,kimoto,killingworth,kilcullen,kilbury,kietzman,kienle,kiedrowski,kidane,khamo,khalili,ketterling,ketchem,kessenich,kessell,kepp,kenon,kenning,kennady,kendzior,kemppainen,kellermann,keirns,keilen,keiffer,kehew,keelan,keawe,keator,kealy,keady,kathman,kastler,kastanes,kassab,karpin,karau,karathanasis,kaps,kaplun,kapaun,kannenberg,kanipe,kander,kandel,kanas,kanan,kamke,kaltenbach,kallenberger,kallam,kafton,kafer,kabler,kaaihue,jundt,jovanovich,jojola,johnstad,jodon,joachin,jinright,jessick,jeronimo,jenne,jelsma,jeannotte,jeangilles,jaworsky,jaubert,jarry,jarrette,jarreau,jarett,janos,janecka,janczak,jalomo,jagoda,jagla,jacquier,jaber,iwata,ivanoff,isola,iserman,isais,isaacks,inverso,infinger,ibsen,hyser,hylan,hybarger,hwee,hutchenson,hutchcroft,husar,hurlebaus,hunsley,humberson,hulst,hulon,huhtala,hugill,hugghins,huffmaster,huckeba,hrabovsky,howden,hoverson,houts,houskeeper,housh,hosten,horras,horchler,hopke,hooke,honie,holtsoi,holsomback,holoway,holmstead,hoistion,hohnstein,hoheisel,hoguet,hoggle,hogenson,hoffstetter,hoffler,hofe,hoefling,hoague,hizer,hirschfield,hironaka,hiraldo,hinote,hingston,hinaman,hillie,hillesheim,hilderman,hiestand,heyser,heys,hews,hertler,herrandez,heppe,henle,henkensiefken,henigan,henandez,henagan,hemberger,heman,helser,helmich,hellinger,helfrick,heldenbrand,heinonen,heineck,heikes,heidkamp,heglar,heffren,heelan,hedgebeth,heckmann,heckaman,hechmer,hazelhurst,hawken,haverkamp,havatone,hausauer,hasch,harwick,hartse,harrower,harle,hargroder,hardway,hardinger,hardemon,harbeck,hant,hamre,hamberg,hallback,haisten,hailstone,hahl,hagner,hagman,hagemeyer,haeussler,hackwell,haby,haataja,gverrero,gustovich,gustave,guske,gushee,gurski,gurnett,gura,gunto,gunselman,gugler,gudmundson,gudinas,guarneri,grumbine,gruis,grotz,grosskopf,grosman,grosbier,grinter,grilley,grieger,grewal,gressler,greaser,graus,grasman,graser,grannan,granath,gramer,graboski,goyne,gowler,gottwald,gottesman,goshay,gorr,gorovitz,gores,goossens,goodier,goodhue,gonzeles,gonzalos,gonnella,golomb,golick,golembiewski,goeke,godzik,goar,glosser,glendenning,glendening,glatter,glas,gittings,gitter,gisin,giscombe,gimlin,gillitzer,gillick,gilliand,gilb,gigler,gidden,gibeau,gibble,gianunzio,giannattasio,gertelman,gerosa,gerold,gerland,gerig,gerecke,gerbino,genz,genovesi,genet,gelrud,geitgey,geiszler,gehrlein,gawrys,gavilanes,gaulden,garthwaite,garmoe,gargis,gara,gannett,galligher,galler,galleher,gallahan,galford,gahn,gacek,gabert,fuster,furuya,furse,fujihara,fuhriman,frueh,fromme,froemming,friskney,frietas,freiler,freelove,freber,frear,frankl,frankenfield,franey,francke,foxworthy,formella,foringer,forgue,fonnesbeck,fonceca,folland,fodera,fode,floresca,fleurent,fleshner,flentge,fleischhacker,fleeger,flecher,flam,flaim,fivecoat,firebaugh,fioretti,finucane,filley,figuroa,figuerda,fiddelke,feurtado,fetterly,fessel,femia,feild,fehling,fegett,fedde,fechter,fawver,faulhaber,fatchett,fassnacht,fashaw,fasel,farrugia,farran,farness,farhart,fama,falwell,falvo,falkenstein,falin,failor,faigin,fagundo,fague,fagnan,fagerstrom,faden,eytchison,eyles,everage,evangelist,estrin,estorga,esponda,espindola,escher,esche,escarsega,escandon,erven,erding,eplin,enix,englade,engdahl,enck,emmette,embery,emberson,eltzroth,elsayed,ellerby,ellens,elhard,elfers,elazegui,eisermann,eilertson,eiben,ehrhard,ehresman,egolf,egnew,eggins,efron,effland,edminster,edgeston,eckstrom,eckhard,eckford,echoles,ebsen,eatherly,eastlick,earnheart,dykhuizen,dyas,duttweiler,dutka,dusenbury,dusenbery,durre,durnil,durnell,durie,durhan,durando,dupriest,dunsmoor,dunseith,dunnum,dunman,dunlevy,duma,dulude,dulong,duignan,dugar,dufek,ducos,duchaine,duch,dubow,drowne,dross,drollinger,droke,driggars,drawhorn,drach,drabek,doyne,doukas,dorvil,dorow,doroski,dornak,dormer,donnelson,donivan,dondero,dompe,dolle,doakes,diza,divirgilio,ditore,distel,disimone,disbro,dipiero,dingson,diluzio,dillehay,digiorgio,diflorio,dietzler,dietsch,dieterle,dierolf,dierker,dicostanzo,dicesare,dexheimer,dewitte,dewing,devoti,devincentis,devary,deutschman,dettloff,detienne,destasio,dest,despard,desmet,deslatte,desfosses,derise,derenzo,deppner,depolo,denoyer,denoon,denno,denne,deniston,denike,denes,demoya,demick,demicco,demetriou,demange,delva,delorge,delley,delisio,delhoyo,delgrande,delgatto,delcour,delair,deinert,degruy,degrave,degeyter,defino,deffenbaugh,deener,decook,decant,deboe,deblanc,deatley,dearmitt,deale,deaguiar,dayan,daus,dauberman,datz,dase,dary,dartt,darocha,dari,danowski,dancel,dami,dallmann,dalere,dalba,dakan,daise,dailing,dahan,dagnan,daggs,dagan,czarkowski,czaplinski,cutten,curtice,curenton,curboy,cura,culliton,culberth,cucchiara,cubbison,csaszar,crytser,crotzer,crossgrove,crosser,croshaw,crocco,critzer,creveling,cressy,creps,creese,cratic,craigo,craigen,craib,cracchiolo,crable,coykendall,cowick,coville,couzens,coutch,cousens,cousain,counselman,coult,cotterell,cott,cotham,corsaut,corriere,corredor,cornet,corkum,coreas,cordoza,corbet,corathers,conwill,contreas,consuegra,constanza,conolly,conedy,comins,combee,colosi,colom,colmenares,collymore,colleran,colina,colaw,colatruglio,colantro,colantonio,cohea,cogill,codner,codding,cockram,cocanougher,cobine,cluckey,clucas,cloward,cloke,clisham,clinebell,cliffe,clendenen,cisowski,cirelli,ciraolo,ciocca,cintora,ciesco,cibrian,chupka,chugg,christmann,choma,chiverton,chirinos,chinen,chimenti,chima,cheuvront,chesla,chesher,chesebro,chern,chehebar,cheatum,chastine,chapnick,chapelle,chambley,cercy,celius,celano,cayea,cavicchi,cattell,catanach,catacutan,castelluccio,castellani,cassmeyer,cassetta,cassada,caspi,cashmore,casebier,casanas,carrothers,carrizal,carriveau,carretero,carradine,carosella,carnine,carloni,carkhuff,cardosi,cardo,carchidi,caravello,caranza,carandang,cantrall,canpos,canoy,cannizzaro,canion,canida,canham,cangemi,cange,cancelliere,canard,camarda,calverley,calogero,callendar,calame,cadrette,cachero,caccavale,cabreros,cabrero,cabrara,cabler,butzer,butte,butrick,butala,bustios,busser,busic,bushorn,busher,burmaster,burkland,burkins,burkert,burgueno,burgraff,burel,burck,burby,bumford,bulock,bujnowski,buggie,budine,bucciero,bubier,brzoska,brydges,brumlow,brosseau,brooksher,brokke,broeker,brittin,bristle,briano,briand,brettschneide,bresnan,brentson,brenneis,brender,brazle,brassil,brasington,branstrom,branon,branker,brandwein,brandau,bralley,brailey,brague,brade,bozzi,bownds,bowmer,bournes,bour,bouchey,botto,boteler,borroel,borra,boroski,boothroyd,boord,bonga,bonato,bonadonna,bolejack,boldman,boiser,boggio,bogacki,boerboom,boehnlein,boehle,bodah,bobst,boak,bluemel,blockmon,blitch,blincoe,bleier,blaydes,blasius,bittel,binsfeld,bindel,bilotti,billiott,bilbrew,bihm,biersner,bielat,bidrowski,bickler,biasi,bhola,bhat,bewick,betzen,bettridge,betti,betsch,besley,beshero,besa,bertoli,berstein,berrien,berrie,berrell,bermel,berenguer,benzer,bensing,benedix,bemo,belile,beilman,behunin,behrmann,bedient,becht,beaule,beaudreault,bealle,beagley,bayuk,bayot,bayliff,baugess,battistoni,batrum,basinski,basgall,bartolomei,bartnik,bartl,bartko,bartholomay,barthlow,bartgis,barsness,barski,barlette,barickman,bargen,bardon,barcliff,barbu,barakat,baracani,baraban,banos,banko,bambach,balok,balogun,bally,baldini,balck,balcer,balash,baim,bailor,bahm,bahar,bagshaw,baggerly,badie,badal,backues,babino,aydelott,awbrey,aversano,avansino,auyon,aukamp,aujla,augenstein,astacio,asplin,asato,asano,aruizu,artale,arrick,arneecher,armelin,armbrester,armacost,arkell,argrave,areizaga,apolo,anzures,anzualda,antwi,antillon,antenor,annand,anhalt,angove,anglemyer,anglada,angiano,angeloni,andaya,ancrum,anagnos,ammirati,amescua,ambrosius,amacker,amacher,amabile,alvizo,alvernaz,alvara,altobelli,altobell,althauser,alterman,altavilla,alsip,almeyda,almeter,alman,allscheid,allaman,aliotta,aliberti,alghamdi,albiston,alberding,alarie,alano,ailes,ahsan,ahrenstorff,ahler,aerni,ackland,achor,acero,acebo,abshier,abruzzo,abrom,abood,abnet,abend,abegg,abbruzzese,aaberg,zysk,zutell,zumstein,zummo,zuhlke,zuehlsdorff,zuch,zucconi,zortman,zohn,zingone,zingg,zingale,zima,zientek,zieg,zervas,zerger,zenk,zeldin,zeiss,zeiders,zediker,zavodny,zarazua,zappone,zappala,zapanta,zaniboni,zanchi,zampedri,zaller,zakrajsek,zagar,zadrozny,zablocki,zable,yust,yunk,youngkin,yosten,yockers,yochim,yerke,yerena,yanos,wysinger,wyner,wrisley,woznicki,wortz,worsell,wooters,woon,woolcock,woodke,wonnacott,wolnik,wittstock,witting,witry,witfield,witcraft,wissmann,wissink,wisehart,wiscount,wironen,wipf,winterrowd,wingett,windon,windish,windisch,windes,wiltbank,willmarth,wiler,wieseler,wiedmaier,wiederstein,wiedenheft,wieberg,wickware,wickkiser,wickell,whittmore,whitker,whitegoat,whitcraft,whisonant,whisby,whetsell,whedon,westry,westcoat,wernimont,wentling,wendlandt,wencl,weisgarber,weininger,weikle,weigold,weigl,weichbrodt,wehrli,wehe,weege,weare,watland,wassmann,warzecha,warrix,warrell,warnack,waples,wantland,wanger,wandrei,wanat,wampole,waltjen,walterscheid,waligora,walding,waldie,walczyk,wakins,waitman,wair,wainio,wahpekeche,wahlman,wagley,wagenknecht,wadle,waddoups,wadding,vuono,vuillemot,vugteveen,vosmus,vorkink,vories,vondra,voelz,vlashi,vitelli,vitali,viscarra,vinet,vimont,villega,villard,vignola,viereck,videtto,vicoy,vessell,vescovi,verros,vernier,vernaglia,vergin,verdone,verdier,verastequi,vejar,vasile,vasi,varnadore,vardaro,vanzanten,vansumeren,vanschuyver,vanleeuwen,vanhowe,vanhoozer,vaness,vandewalker,vandevoorde,vandeveer,vanderzwaag,vanderweide,vanderhyde,vandellen,vanamburg,vanalst,vallin,valk,valentini,valcarcel,valasco,valadao,vacher,urquijo,unterreiner,unsicker,unser,unrau,undercoffler,uffelman,uemura,ueda,tyszko,tyska,tymon,tyce,tyacke,twinam,tutas,tussing,turmel,turkowski,turkel,turchetta,tupick,tukes,tufte,tufo,tuey,tuell,tuckerman,tsutsumi,tsuchiya,trossbach,trivitt,trippi,trippensee,trimbach,trillo,triller,trible,tribby,trevisan,tresch,tramonte,traff,trad,tousey,totaro,torregrosa,torralba,tolly,tofil,tofani,tobiassen,tiogangco,tino,tinnes,tingstrom,tingen,tindol,tifft,tiffee,tiet,thuesen,thruston,throndson,thornsbury,thornes,thiery,thielman,thie,theilen,thede,thate,thane,thalacker,thaden,teuscher,terracina,terell,terada,tepfer,tenneson,temores,temkin,telleria,teaque,tealer,teachey,tavakoli,tauras,taucher,tartaglino,tarpy,tannery,tani,tams,tamlin,tambe,tallis,talamante,takayama,takaki,taibl,taffe,tadesse,tade,tabeling,tabag,szoke,szoc,szala,szady,sysak,sylver,syler,swonger,swiggett,swensson,sweis,sweers,sweene,sweany,sweaney,swartwout,swamy,swales,susman,surman,sundblad,summerset,summerhays,sumerall,sule,sugimoto,subramanian,sturch,stupp,stunkard,stumpp,struiksma,stropes,stromyer,stromquist,strede,strazza,strauf,storniolo,storjohann,stonum,stonier,stonecypher,stoneberger,stollar,stokke,stokan,stoetzel,stoeckel,stockner,stockinger,stockert,stockdill,stobbe,stitzel,stitely,stirgus,stigers,stettner,stettler,sterlin,sterbenz,stemp,stelluti,steinmeyer,steininger,steinauer,steigerwalt,steider,stavrou,staufenberger,stassi,stankus,stanaway,stammer,stakem,staino,stahlnecker,stagnitta,staelens,staal,srsen,sprott,sprigg,sprenkle,sprenkel,spreitzer,spraque,sprandel,sporn,spivak,spira,spiewak,spieth,spiering,sperow,speh,specking,spease,spead,sparger,spanier,spall,sower,southcott,sosna,soran,sookram,sonders,solak,sohr,sohl,sofranko,soderling,sochor,sobon,smutz,smudrick,smithj,smid,slosser,sliker,slenker,sleger,slaby,skousen,skilling,skibinski,skees,skane,skafidas,sivic,sivertsen,sivers,sitra,sito,siracusa,sinicki,simpers,simley,simbeck,silberberg,siever,siegwarth,sidman,siddle,sibbett,shumard,shubrooks,shough,shorb,shoptaw,sholty,shoffstall,shiverdecker,shininger,shimasaki,shifrin,shiffler,sheston,sherr,shere,shepeard,shelquist,sheler,shauf,sharrar,sharpnack,shamsiddeen,shambley,shallenberger,shadler,shaban,sferra,seys,sexauer,sevey,severo,setlak,seta,sesko,sersen,serratore,serdula,senechal,seldomridge,seilhamer,seifer,seidlitz,sehnert,sedam,sebron,seber,sebek,seavers,scullark,scroger,scovill,sciascia,sciarra,schweers,schwarze,schummer,schultes,schuchardt,schuchard,schrieber,schrenk,schreifels,schowalter,schoultz,scholer,schofill,schoff,schnuerer,schnettler,schmitke,schmiege,schloop,schlinger,schlessman,schlesser,schlageter,schiess,schiefer,schiavoni,scherzer,scherich,schechtman,schebel,scharpman,schaich,schaap,scappaticci,scadlock,savocchia,savini,savers,savageau,sauvage,sause,sauerwein,sary,sarwary,sarnicola,santone,santoli,santalucia,santacruce,sansoucie,sankoff,sanes,sandri,sanderman,sammartano,salmonson,salmela,salmans,sallaz,salis,sakuma,sakowski,sajdak,sahm,sagredo,safrit,sackey,sabio,sabino,rybolt,ruzzo,ruthstrom,ruta,russin,russak,rusko,ruskin,rusiecki,ruscher,rupar,rumberger,rullan,ruliffson,ruhlman,rufenacht,ruelle,rudisell,rudi,rucci,rublee,ruberto,rubeck,rowett,rottinghaus,roton,rothgeb,rothgaber,rothermich,rostek,rossini,roskelley,rosing,rosi,rosewell,rosberg,roon,ronin,romesburg,romelus,rolley,rollerson,rollefson,rolins,rolens,rois,rohrig,rohrbacher,rohland,rohen,rogness,roes,roering,roehrick,roebke,rodregez,rodabaugh,rockingham,roblee,robel,roadcap,rizzolo,riviezzo,rivest,riveron,risto,rissler,rippentrop,ripka,rinn,ringuette,ringering,rindone,rindels,rieffer,riedman,riede,riecke,riebow,riddlebarger,rhome,rhodd,rhatigan,rhame,reyers,rewitzer,revalee,retzer,rettinger,reschke,requa,reper,reopell,renzelman,renne,renker,renk,renicker,rendina,rendel,remund,remmele,remiasz,remaklus,remak,reitsma,reitmeier,reiswig,reishus,reining,reim,reidinger,reick,reiche,regans,reffett,reesor,reekie,redpath,redditt,rechtzigel,recht,rearden,raynoso,raxter,ratkowski,rasulo,rassmussen,rassel,raser,rappleye,rappe,randrup,randleman,ramson,rampey,radziewicz,quirarte,quintyne,quickel,quattrini,quakenbush,quaile,pytel,pushaw,pusch,purslow,punzo,pullam,pugmire,puello,przekop,pruss,pruiett,provow,prophete,procaccini,pritz,prillaman,priess,pretlow,prestia,presha,prescod,preast,praytor,prashad,praino,pozzi,pottenger,potash,porada,popplewell,ponzo,ponter,pommier,polland,polidori,polasky,pola,poisso,poire,pofahl,podolsky,podell,plueger,plowe,plotz,plotnik,ploch,pliska,plessner,plaut,platzer,plake,pizzino,pirog,piquette,pipho,pioche,pintos,pinkert,pinet,pilkerton,pilch,pilarz,pignataro,piermatteo,picozzi,pickler,pickette,pichler,philogene,phare,phang,pfrogner,pfisterer,pettinelli,petruzzi,petrovic,petretti,petermeier,pestone,pesterfield,pessin,pesch,persky,perruzza,perrott,perritt,perretti,perrera,peroutka,peroni,peron,peret,perdew,perazzo,peppe,peno,penberthy,penagos,peles,pelech,peiper,peight,pefferman,peddie,peckenpaugh,pean,payen,pavloski,pavlica,paullin,patteson,passon,passey,passalacqua,pasquini,paskel,partch,parriott,parrella,parraz,parmely,parizo,papelian,papasergi,pantojz,panto,panich,panchal,palys,pallone,palinski,pali,palevic,pagels,paciorek,pacho,pacella,paar,ozbun,overweg,overholser,ovalles,outcalt,otterbein,otta,ostergren,osher,osbon,orzech,orwick,orrico,oropesa,ormes,orillion,onorati,onnen,omary,olding,okonski,okimoto,ohlrich,ohayon,oguin,ogley,oftedahl,offen,ofallon,oeltjen,odam,ockmond,ockimey,obermeyer,oberdorf,obanner,oballe,oard,oakden,nyhan,nydam,numan,noyer,notte,nothstein,notestine,noser,nork,nolde,nishihara,nishi,nikolic,nihart,nietupski,niesen,niehus,nidiffer,nicoulin,nicolaysen,nicklow,nickl,nickeson,nichter,nicholl,ngyun,newsham,newmann,neveux,neuzil,neumayer,netland,nessen,nesheim,nelli,nelke,necochea,nazari,navorro,navarez,navan,natter,natt,nater,nasta,narvaiz,nardelli,napp,nakahara,nairn,nagg,nager,nagano,nafziger,naffziger,nadelson,muzzillo,murri,murrey,murgia,murcia,muno,munier,mulqueen,mulliniks,mulkins,mulik,muhs,muffley,moynahan,mounger,mottley,motil,moseman,moseby,mosakowski,mortell,morrisroe,morrero,mormino,morland,morger,morgenthaler,moren,morelle,morawski,morasca,morang,morand,moog,montney,montera,montee,montane,montagne,mons,monohan,monnett,monkhouse,moncure,momphard,molyneaux,molles,mollenkopf,molette,mohs,mohmand,mohlke,moessner,moers,mockus,moccio,mlinar,mizzelle,mittler,mitri,mitchusson,mitchen,mistrot,mistler,misch,miriello,minkin,mininger,minerich,minehart,minderman,minden,minahan,milonas,millon,millholland,milleson,millerbernd,millage,militante,milionis,milhoan,mildenberger,milbury,mikolajczak,miklos,mikkola,migneault,mifsud,mietus,mieszala,mielnicki,midy,michon,michioka,micheau,michaeli,micali,methe,metallo,messler,mesch,merow,meroney,mergenthaler,meres,menuey,menousek,menning,menn,menghini,mendia,memmer,melot,mellenthin,melland,meland,meixner,meisenheimer,meineke,meinders,mehrens,mehlig,meglio,medsker,medero,mederios,meabon,mcwright,mcright,mcreath,mcrary,mcquirter,mcquerry,mcquary,mcphie,mcnurlen,mcnelley,mcnee,mcnairy,mcmanamy,mcmahen,mckowen,mckiver,mckinlay,mckearin,mcirvin,mcintrye,mchorse,mchaffie,mcgroarty,mcgoff,mcgivern,mceniry,mcelhiney,mcdiarmid,mccullars,mccubbins,mccrimon,mccovery,mccommons,mcclour,mccarrick,mccarey,mccallen,mcbrien,mcarthy,mayone,maybin,maxam,maurais,maughn,matzek,matts,matin,mathre,mathia,mateen,matava,masso,massar,massanet,masingale,mascaro,marthaler,martes,marso,marshman,marsalis,marrano,marolt,marold,markins,margulis,mardirosian,marchiano,marchak,marandola,marana,manues,mante,mansukhani,mansi,mannan,maniccia,mangine,manery,mandigo,mancell,mamo,malstrom,malouf,malenfant,maldenado,malandruccolo,malak,malabanan,makino,maisonave,mainord,maino,mainard,maillard,mahmud,mahdi,mahapatra,mahaley,mahaffy,magouirk,maglaras,magat,maga,maffia,madrazo,madrano,maditz,mackert,mackellar,mackell,macht,macchia,maccarthy,maahs,lytal,luzar,luzader,lutjen,lunger,lunan,luma,lukins,luhmann,luers,ludvigsen,ludlam,ludemann,luchini,lucente,lubrano,lubow,luber,lubeck,lowing,loven,loup,louge,losco,lorts,lormand,lorenzetti,longford,longden,longbrake,lokhmatov,loge,loeven,loeser,locey,locatelli,litka,lista,lisonbee,lisenbee,liscano,liranzo,liquori,liptrot,lionetti,linscomb,linkovich,linington,lingefelt,lindler,lindig,lindall,lincks,linander,linan,limburg,limbrick,limbach,likos,lighthall,liford,lietzke,liebe,liddicoat,lickley,lichter,liapis,lezo,lewan,levitz,levesgue,leverson,levander,leuthauser,letbetter,lesuer,lesmeister,lesly,lerer,leppanen,lepinski,lenherr,lembrick,lelonek,leisten,leiss,leins,leingang,leinberger,leinbach,leikam,leidig,lehtonen,lehnert,lehew,legier,lefchik,lecy,leconte,lecher,lebrecht,leaper,lawter,lawrenz,lavy,laur,lauderbaugh,lauden,laudato,latting,latsko,latini,lassere,lasseigne,laspina,laso,laslie,laskowitz,laske,lasenby,lascola,lariosa,larcade,lapete,laperouse,lanuza,lanting,lantagne,lansdale,lanphier,langmaid,langella,lanese,landrus,lampros,lamens,laizure,laitinen,laigle,lahm,lagueux,lagorio,lagomarsino,lagasca,lagana,lafont,laflen,lafavor,lafarge,laducer,ladnier,ladesma,lacognata,lackland,lacerte,labuff,laborin,labine,labauve,kuzio,kusterer,kussman,kusel,kusch,kurutz,kurdyla,kupka,kunzler,kunsman,kuni,kuney,kunc,kulish,kuliga,kulaga,kuilan,kuhre,kuhnke,kuemmerle,kueker,kudla,kudelka,kubinski,kubicki,kubal,krzyzanowski,krupicka,krumwiede,krumme,kropidlowski,krokos,kroell,kritzer,kribs,kreitlow,kreisher,kraynak,krass,kranzler,kramb,kozyra,kozicki,kovalik,kovalchik,kovacevic,kotula,kotrba,koteles,kosowski,koskela,kosiba,koscinski,kosch,korab,kopple,kopper,koppelman,koppel,konwinski,kolosky,koloski,kolinsky,kolinski,kolbeck,kolasa,koepf,koda,kochevar,kochert,kobs,knust,knueppel,knoy,knieriem,knier,kneller,knappert,klitz,klintworth,klinkenberg,klinck,kleindienst,kleeb,klecker,kjellberg,kitsmiller,kisor,kisiel,kise,kirbo,kinzle,kingsford,kingry,kimpton,kimel,killmon,killick,kilgallon,kilcher,kihn,kiggins,kiecker,kher,khaleel,keziah,kettell,ketchen,keshishian,kersting,kersch,kerins,kercher,kenefick,kemph,kempa,kelsheimer,kelln,kellenberger,kekahuna,keisling,keirnan,keimig,kehn,keal,kaupp,kaufhold,kauffmann,katzenberg,katona,kaszynski,kaszuba,kassebaum,kasa,kartye,kartchner,karstens,karpinsky,karmely,karel,karasek,kapral,kaper,kanelos,kanahele,kampmann,kampe,kalp,kallus,kallevig,kallen,kaliszewski,kaleohano,kalchthaler,kalama,kalahiki,kaili,kahawai,kagey,justiss,jurkowski,jurgensmeyer,juilfs,jopling,jondahl,jomes,joice,johannessen,joeckel,jezewski,jezek,jeswald,jervey,jeppsen,jenniges,jennett,jemmott,jeffs,jaurequi,janisch,janick,jacek,jacaruso,iwanicki,ishihara,isenberger,isbister,iruegas,inzer,inyart,inscore,innocenti,inglish,infantolino,indovina,inaba,imondi,imdieke,imbert,illes,iarocci,iannucci,huver,hutley,husser,husmann,hupf,huntsberger,hunnewell,hullum,huit,huish,hughson,huft,hufstetler,hueser,hudnell,hovden,housen,houghtling,hossack,hoshaw,horsford,horry,hornbacher,hoppenstedt,hopkinson,honza,homann,holzmeister,holycross,holverson,holtzlander,holroyd,holmlund,holderness,holderfield,holck,hojnacki,hohlfeld,hohenberger,hoganson,hogancamp,hoffses,hoerauf,hoell,hoefert,hodum,hoder,hockenbury,hoage,hisserich,hislip,hirons,hippensteel,hippen,hinkston,hindes,hinchcliff,himmel,hillberry,hildring,hiester,hiefnar,hibberd,hibben,heyliger,heyl,heyes,hevia,hettrick,hert,hersha,hernandz,herkel,herber,henscheid,hennesy,henly,henegan,henebry,hench,hemsath,hemm,hemken,hemann,heltzel,hellriegel,hejny,heinl,heinke,heidinger,hegeman,hefferan,hedglin,hebdon,hearnen,heape,heagy,headings,headd,hazelbaker,havlick,hauschildt,haury,hassenfritz,hasenbeck,haseltine,hartstein,hartry,hartnell,harston,harpool,harmen,hardister,hardey,harders,harbolt,harbinson,haraway,haque,hansmann,hanser,hansch,hansberry,hankel,hanigan,haneline,hampe,hamons,hammerstone,hammerle,hamme,hammargren,hamelton,hamberger,hamasaki,halprin,halman,hallihan,haldane,haifley,hages,hagadorn,hadwin,habicht,habermehl,gyles,gutzman,gutekunst,gustason,gusewelle,gurnsey,gurnee,gunterman,gumina,gulliver,gulbrandson,guiterez,guerino,guedry,gucwa,guardarrama,guagliano,guadagno,grulke,groote,groody,groft,groeneweg,grochow,grippe,grimstead,griepentrog,greenfeld,greenaway,grebe,graziosi,graw,gravina,grassie,granzow,grandjean,granby,gramacy,gozalez,goyer,gotch,gosden,gorny,gormont,goodgion,gonya,gonnerman,gompert,golish,goligoski,goldmann,goike,goetze,godeaux,glaza,glassel,glaspy,glander,giumarro,gitelman,gisondi,gismondi,girvan,girten,gironda,giovinco,ginkel,gilster,giesy,gierman,giddins,giardini,gianino,ghea,geurin,gett,getson,gerrero,germond,gentsy,genta,gennette,genito,genis,gendler,geltz,geiss,gehret,gegenheimer,geffert,geeting,gebel,gavette,gavenda,gaumond,gaudioso,gatzke,gatza,gattshall,gaton,gatchel,gasperi,gaska,gasiorowski,garritson,garrigus,garnier,garnick,gardinier,gardenas,garcy,garate,gandolfi,gamm,gamel,gambel,gallmon,gallemore,gallati,gainous,gainforth,gahring,gaffey,gaebler,gadzinski,gadbury,gabri,gaba,fyke,furtaw,furnas,furcron,funn,funck,fulwood,fulvio,fullmore,fukumoto,fuest,fuery,frymire,frush,frohlich,froedge,frodge,fritzinger,fricker,frericks,frein,freid,freggiaro,fratto,franzi,franciscus,fralix,fowble,fotheringham,foslien,foshie,fortmann,forsey,forkner,foppiano,fontanetta,fonohema,fogler,fockler,fluty,flusche,flud,flori,flenory,fleharty,fleeks,flaxman,fiumara,fitzmorris,finnicum,finkley,fineran,fillhart,filipi,fijal,fieldson,ficarra,festerman,ferryman,ferner,fergason,ferell,fennern,femmer,feldmeier,feeser,feenan,federick,fedak,febbo,feazell,fazzone,fauth,fauset,faurote,faulker,faubion,fatzinger,fasick,fanguy,fambrough,falks,fahl,faaita,exler,ewens,estrado,esten,esteen,esquivez,espejo,esmiol,esguerra,esco,ertz,erspamer,ernstes,erisman,erhard,ereaux,ercanbrack,erbes,epple,entsminger,entriken,enslow,ennett,engquist,englebert,englander,engesser,engert,engeman,enge,enerson,emhoff,emge,elting,ellner,ellenberg,ellenbecker,elio,elfert,elawar,ekstrand,eison,eismont,eisenbrandt,eiseman,eischens,ehrgott,egley,egert,eddlemon,eckerson,eckersley,eckberg,echeverry,eberts,earthman,earnhart,eapen,eachus,dykas,dusi,durning,durdan,dunomes,duncombe,dume,dullen,dullea,dulay,duffett,dubs,dubard,drook,drenth,drahos,dragone,downin,downham,dowis,dowhower,doward,dovalina,dopazo,donson,donnan,dominski,dollarhide,dolinar,dolecki,dolbee,doege,dockus,dobkin,dobias,divoll,diviney,ditter,ditman,dissinger,dismang,dirlam,dinneen,dini,dingwall,diloreto,dilmore,dillaman,dikeman,diiorio,dighton,diffley,dieudonne,dietel,dieringer,diercks,dienhart,diekrager,diefendorf,dicke,dicamillo,dibrito,dibona,dezeeuw,dewhurst,devins,deviney,deupree,detherage,despino,desmith,desjarlais,deshner,desha,desanctis,derring,derousse,derobertis,deridder,derego,derden,deprospero,deprofio,depping,deperro,denty,denoncourt,dencklau,demler,demirchyan,demichiel,demesa,demere,demaggio,delung,deluise,delmoral,delmastro,delmas,delligatti,delle,delasbour,delarme,delargy,delagrange,delafontaine,deist,deiss,deighan,dehoff,degrazia,degman,defosses,deforrest,deeks,decoux,decarolis,debuhr,deberg,debarr,debari,dearmon,deare,deardurff,daywalt,dayer,davoren,davignon,daviau,dauteuil,dauterive,daul,darnley,darakjy,dapice,dannunzio,danison,daniello,damario,dalonzo,dallis,daleske,dalenberg,daiz,dains,daines,dagnese,dady,dadey,czyzewski,czapor,czaplewski,czajka,cyganiewicz,cuttino,cutrona,cussins,cusanelli,cuperus,cundy,cumiskey,cumins,cuizon,cuffia,cuffe,cuffari,cuccaro,cubie,cryder,cruson,crounse,cromedy,cring,creer,credeur,crea,cozort,cozine,cowee,cowdery,couser,courtway,courington,cotman,costlow,costell,corton,corsaro,corrieri,corrick,corradini,coron,coren,corbi,corado,copus,coppenger,cooperwood,coontz,coonce,contrera,connealy,conell,comtois,compere,commins,commings,comegys,colyar,colo,collister,collick,collella,coler,colborn,cohran,cogbill,coffen,cocuzzo,clynes,closter,clipp,clingingsmith,clemence,clayman,classon,clas,clarey,clague,ciubal,citrino,citarella,cirone,cipponeri,cindrich,cimo,ciliberto,cichowski,ciccarello,cicala,chura,chubbuck,chronis,christlieb,chizek,chittester,chiquito,chimento,childree,chianese,chevrette,checo,chastang,chargualaf,chapmon,chantry,chahal,chafetz,cezar,ceruantes,cerrillo,cerrano,cerecedes,cerami,cegielski,cavallero,catinella,cassata,caslin,casano,casacchia,caruth,cartrette,carten,carodine,carnrike,carnall,carmicle,carlan,carlacci,caris,cariaga,cardine,cardimino,cardani,carbonara,capua,capponi,cappellano,caporale,canupp,cantrel,cantone,canterberry,cannizzo,cannan,canelo,caneer,candill,candee,campbel,caminero,camble,caluya,callicott,calk,caito,caffie,caden,cadavid,cacy,cachu,cachola,cabreja,cabiles,cabada,caamano,byran,byon,buyck,bussman,bussie,bushner,burston,burnison,burkman,burkhammer,bures,burdeshaw,bumpass,bullinger,bullers,bulgrin,bugay,budak,buczynski,buckendorf,buccieri,bubrig,brynteson,brunz,brunmeier,brunkow,brunetto,brunelli,brumwell,bruggman,brucki,brucculeri,brozovich,browing,brotman,brocker,broadstreet,brix,britson,brinck,brimmage,brierre,bridenstine,brezenski,brezee,brevik,brentlinger,brentley,breidenbach,breckel,brech,brazzle,braughton,brauch,brattin,brattain,branhan,branford,braner,brander,braly,braegelmann,brabec,boyt,boyack,bowren,bovian,boughan,botton,botner,bosques,borzea,borre,boron,bornhorst,borgstrom,borella,bontempo,bonniwell,bonnes,bonillo,bonano,bolek,bohol,bohaty,boffa,boetcher,boesen,boepple,boehler,boedecker,boeckx,bodi,boal,bloodsworth,bloodgood,blome,blockett,blixt,blanchett,blackhurst,blackaby,bjornberg,bitzer,bittenbender,bitler,birchall,binnicker,binggeli,billett,bilberry,biglow,bierly,bielby,biegel,berzas,berte,bertagnolli,berreth,bernhart,bergum,berentson,berdy,bercegeay,bentle,bentivegna,bentham,benscoter,benns,bennick,benjamine,beneze,benett,beneke,bendure,bendix,bendick,benauides,belman,bellus,bellott,bellefleur,bellas,beljan,belgard,beith,beinlich,beierle,behme,beevers,beermann,beeching,bedward,bedrosian,bedner,bedeker,bechel,becera,beaubrun,beardmore,bealmear,bazin,bazer,baumhoer,baumgarner,bauknecht,battson,battiest,basulto,baster,basques,basista,basiliere,bashi,barzey,barz,bartus,bartucca,bartek,barrero,barreca,barnoski,barndt,barklow,baribeau,barette,bares,barentine,bareilles,barbre,barberi,barbagelata,baraw,baratto,baranoski,baptise,bankson,bankey,bankard,banik,baltzley,ballen,balkey,balius,balderston,bakula,bakalar,baffuto,baerga,badoni,backous,bachtel,bachrach,baccari,babine,babilonia,baar,azbill,azad,aycox,ayalla,avolio,austerberry,aughtry,aufderheide,auch,attanasio,athayde,atcher,asselta,aslin,aslam,ashwood,ashraf,ashbacher,asbridge,asakura,arzaga,arriaza,arrez,arrequin,arrants,armiger,armenteros,armbrister,arko,argumedo,arguijo,ardolino,arcia,arbizo,aravjo,aper,anzaldo,antu,antrikin,antonetty,antinoro,anthon,antenucci,anstead,annese,ankrum,andreason,andrado,andaverde,anastos,anable,amspoker,amrine,amrein,amorin,amel,ambrosini,alsbrook,alnutt,almasi,allessio,allateef,aldous,alderink,aldaz,akmal,akard,aiton,aites,ainscough,aikey,ahrends,ahlm,aguada,agans,adelmann,addesso,adaway,adamaitis,ackison,abud,abendroth,abdur,abdool,aamodt,zywiec,zwiefelhofer,zwahlen,zunino,zuehl,zmuda,zmolek,zizza,ziska,zinser,zinkievich,zinger,zingarelli,ziesmer,ziegenfuss,ziebol,zettlemoyer,zettel,zervos,zenke,zembower,zelechowski,zelasko,zeise,zeek,zeeb,zarlenga,zarek,zaidi,zahnow,zahnke,zaharis,zacate,zabrocki,zaborac,yurchak,yuengling,younie,youngers,youell,yott,yoshino,yorks,yordy,yochem,yerico,yerdon,yeiser,yearous,yearick,yeaney,ybarro,yasutake,yasin,yanke,yanish,yanik,yamazaki,yamat,yaggi,ximenez,wyzard,wynder,wyly,wykle,wutzke,wuori,wuertz,wuebker,wrightsel,worobel,worlie,worford,worek,woolson,woodrome,woodly,woodling,wontor,wondra,woltemath,wollmer,wolinski,wolfert,wojtanik,wojtak,wohlfarth,woeste,wobbleton,witz,wittmeyer,witchey,wisotzkey,wisnewski,wisman,wirch,wippert,wineberg,wimpee,wilusz,wiltsey,willig,williar,willers,willadsen,wildhaber,wilday,wigham,wiewel,wieting,wietbrock,wiesel,wiesehan,wiersema,wiegert,widney,widmark,wickson,wickings,wichern,whtie,whittie,whitlinger,whitfill,whitebread,whispell,whetten,wheeley,wheeles,wheelen,whatcott,weyland,weter,westrup,westphalen,westly,westland,wessler,wesolick,wesler,wesche,werry,wero,wernecke,werkhoven,wellspeak,wellings,welford,welander,weissgerber,weisheit,weins,weill,weigner,wehrmann,wehrley,wehmeier,wege,weers,weavers,watring,wassum,wassman,wassil,washabaugh,wascher,warth,warbington,wanca,wammack,wamboldt,walterman,walkington,walkenhorst,walinski,wakley,wagg,wadell,vuckovich,voogd,voller,vokes,vogle,vogelsberg,vodicka,vissering,vipond,vincik,villalona,vickerman,vettel,veteto,vesperman,vesco,vertucci,versaw,verba,ventris,venecia,vendela,venanzi,veldhuizen,vehrs,vaughen,vasilopoulos,vascocu,varvel,varno,varlas,varland,vario,vareschi,vanwyhe,vanweelden,vansciver,vannaman,vanluven,vanloo,vanlaningham,vankomen,vanhout,vanhampler,vangorp,vangorden,vanella,vandresar,vandis,vandeyacht,vandewerker,vandevsen,vanderwall,vandercook,vanderberg,vanbergen,valko,valesquez,valeriano,valen,vachula,vacha,uzee,uselman,urizar,urion,urben,upthegrove,unzicker,unsell,unick,umscheid,umin,umanzor,ullo,ulicki,uhlir,uddin,tytler,tymeson,tyger,twisdale,twedell,tweddle,turrey,tures,turell,tupa,tuitt,tuberville,tryner,trumpower,trumbore,troglen,troff,troesch,trivisonno,tritto,tritten,tritle,trippany,tringali,tretheway,treon,trejos,tregoning,treffert,traycheff,travali,trauth,trauernicht,transou,trane,trana,toves,tosta,torp,tornquist,tornes,torchio,toor,tooks,tonks,tomblinson,tomala,tollinchi,tolles,tokich,tofte,todman,titze,timpone,tillema,tienken,tiblier,thyberg,thursby,thurrell,thurm,thruman,thorsted,thorley,thomer,thoen,thissen,theimer,thayn,thanpaeng,thammavongsa,thalman,texiera,texidor,teverbaugh,teska,ternullo,teplica,tepe,teno,tenholder,tenbusch,tenbrink,temby,tejedor,teitsworth,teichmann,tehan,tegtmeyer,tees,teem,tays,taubert,tauares,taschler,tartamella,tarquinio,tarbutton,tappendorf,tapija,tansil,tannahill,tamondong,talahytewa,takashima,taecker,tabora,tabin,tabbert,szymkowski,szymanowski,syversen,syrett,synnott,sydnes,swimm,sweney,swearegene,swartzel,swanstrom,svedin,suryan,supplice,supnet,suoboda,sundby,sumaya,sumabat,sulzen,sukovaty,sukhu,sugerman,sugalski,sudweeks,sudbeck,sucharski,stutheit,stumfoll,stuffle,struyk,strutz,strumpf,strowbridge,strothman,strojny,strohschein,stroffolino,stribble,strevel,strenke,stremming,strehle,stranak,stram,stracke,stoudamire,storks,stopp,stonebreaker,stolt,stoica,stofer,stockham,stockfisch,stjuste,stiteler,stiman,stillions,stillabower,stierle,sterlace,sterk,stepps,stenquist,stenner,stellman,steines,steinbaugh,steinbacher,steiling,steidel,steffee,stavinoha,staver,stastny,stasiuk,starrick,starliper,starlin,staniford,staner,standre,standefer,standafer,stanczyk,stallsmith,stagliano,staehle,staebler,stady,stadtmiller,squyres,spurbeck,sprunk,spranger,spoonamore,spoden,spilde,spezio,speros,sperandio,specchio,spearin,spayer,spallina,spadafino,sovie,sotello,sortor,sortino,soros,sorola,sorbello,sonner,sonday,somes,soloway,soens,soellner,soderblom,sobin,sniezek,sneary,smyly,smutnick,smoots,smoldt,smitz,smitreski,smallen,smades,slunaker,sluka,slown,slovick,slocomb,slinger,slife,sleeter,slanker,skufca,skubis,skrocki,skov,skjei,skilton,skarke,skalka,skalak,skaff,sixkiller,sitze,siter,sisko,sirman,sirls,sinotte,sinon,sincock,sincebaugh,simmoms,similien,silvius,silton,silloway,sikkema,sieracki,sienko,siemon,siemer,siefker,sieberg,siebens,siebe,sicurella,sicola,sickle,shumock,shumiloff,shuffstall,shuemaker,shuart,shroff,shreeve,shostak,shortes,shorr,shivley,shintaku,shindo,shimomura,shiigi,sherow,sherburn,shepps,shenefield,shelvin,shelstad,shelp,sheild,sheaman,shaulis,sharrer,sharps,sharpes,shappy,shapero,shanor,shandy,seyller,severn,sessom,sesley,servidio,serrin,sero,septon,septer,sennott,sengstock,senff,senese,semprini,semone,sembrat,selva,sella,selbig,seiner,seif,seidt,sehrt,seemann,seelbinder,sedlay,sebert,seaholm,seacord,seaburg,scungio,scroggie,scritchfield,scrimpsher,scrabeck,scorca,scobey,scivally,schwulst,schwinn,schwieson,schwery,schweppe,schwartzenbur,schurz,schumm,schulenburg,schuff,schuerholz,schryer,schrager,schorsch,schonhardt,schoenfelder,schoeck,schoeb,schnitzler,schnick,schnautz,schmig,schmelter,schmeichel,schluneger,schlosberg,schlobohm,schlenz,schlembach,schleisman,schleining,schleiff,schleider,schink,schilz,schiffler,schiavi,scheuer,schemonia,scheman,schelb,schaul,schaufelberge,scharer,schardt,scharbach,schabacker,scee,scavone,scarth,scarfone,scalese,sayne,sayed,savitz,satterlund,sattazahn,satow,sastre,sarr,sarjeant,sarff,sardella,santoya,santoni,santai,sankowski,sanft,sandow,sandoe,sandhaus,sandefer,sampey,samperi,sammarco,samia,samek,samay,samaan,salvadore,saltness,salsgiver,saller,salaz,salano,sakal,saka,saintlouis,saile,sahota,saggese,sagastume,sadri,sadak,sachez,saalfrank,saal,saadeh,rynn,ryley,ryle,rygg,rybarczyk,ruzich,ruyter,ruvo,rupel,ruopp,rundlett,runde,rundall,runck,rukavina,ruggiano,rufi,ruef,rubright,rubbo,rowbottom,rotner,rotman,rothweiler,rothlisberger,rosseau,rossean,rossa,roso,rosiek,roshia,rosenkrans,rosener,rosencrantz,rosencrans,rosello,roques,rookstool,rondo,romasanta,romack,rokus,rohweder,roethler,roediger,rodwell,rodrigus,rodenbeck,rodefer,rodarmel,rockman,rockholt,rochow,roches,roblin,roblez,roble,robers,roat,rizza,rizvi,rizk,rixie,riveiro,rius,ritschard,ritrovato,risi,rishe,rippon,rinks,ringley,ringgenberg,ringeisen,rimando,rilley,rijos,rieks,rieken,riechman,riddley,ricord,rickabaugh,richmeier,richesin,reyolds,rexach,requena,reppucci,reposa,renzulli,renter,remondini,reither,reisig,reifsnider,reifer,reibsome,reibert,rehor,rehmann,reedus,redshaw,reczek,recupero,recor,reckard,recher,realbuto,razer,rayman,raycraft,rayas,rawle,raviscioni,ravetto,ravenelle,rauth,raup,rattliff,rattley,rathfon,rataj,rasnic,rappleyea,rapaport,ransford,rann,rampersad,ramis,ramcharan,rainha,rainforth,ragans,ragains,rafidi,raffety,raducha,radsky,radler,radatz,raczkowski,rabenold,quraishi,quinerly,quercia,quarnstrom,pusser,puppo,pullan,pulis,pugel,puca,pruna,prowant,provines,pronk,prinkleton,prindall,primas,priesmeyer,pridgett,prevento,preti,presser,presnall,preseren,presas,presa,prchal,prattis,pratillo,praska,prak,powis,powderly,postlewait,postle,posch,porteus,porraz,popwell,popoff,poplaski,poniatoski,pollina,polle,polhill,poletti,polaski,pokorney,pointdexter,poinsette,ploszaj,plitt,pletz,pletsch,plemel,pleitez,playford,plaxco,platek,plambeck,plagens,placido,pisarski,pinuelas,pinnette,pinick,pinell,pinciaro,pinal,pilz,piltz,pillion,pilkinton,pikul,piepenburg,piening,piehler,piedrahita,piechocki,picknell,pickelsimer,pich,picariello,phoeuk,phillipson,philbert,pherigo,phelka,peverini,petrash,petramale,petraglia,pery,personius,perrington,perrill,perpall,perot,perman,peragine,pentland,pennycuff,penninger,pennachio,pendexter,penalver,pelzel,pelter,pelow,pelo,peli,peinado,pedley,pecue,pecore,pechar,peairs,paynes,payano,pawelk,pavlock,pavlich,pavich,pavek,pautler,paulik,patmore,patella,patee,patalano,passini,passeri,paskell,parrigan,parmar,parayno,paparelli,pantuso,pante,panico,panduro,panagos,pama,palmo,pallotta,paling,palamino,pake,pajtas,pailthorpe,pahler,pagon,paglinawan,pagley,paget,paetz,paet,padley,pacleb,pachelo,paccione,pabey,ozley,ozimek,ozawa,owney,outram,ouillette,oudekerk,ostrosky,ostermiller,ostermann,osterloh,osterfeld,ossenfort,osoria,oshell,orsino,orscheln,orrison,ororke,orellano,orejuela,ordoyne,opsahl,opland,onofre,onaga,omahony,olszowka,olshan,ollig,oliff,olien,olexy,oldridge,oldfather,olalde,okun,okumoto,oktavec,okin,ohme,ohlemacher,ohanesian,odneal,odgers,oderkirk,odden,ocain,obradovich,oakey,nussey,nunziato,nunoz,nunnenkamp,nuncio,noviello,novacek,nothstine,northum,norsen,norlander,norkus,norgaard,norena,nored,nobrega,niziolek,ninnemann,nievas,nieratko,nieng,niedermeyer,niedermaier,nicolls,newham,newcome,newberger,nevills,nevens,nevel,neumiller,netti,nessler,neria,nemet,nelon,nellon,neller,neisen,neilly,neifer,neid,neering,neehouse,neef,needler,nebergall,nealis,naumoff,naufzinger,narum,narro,narramore,naraine,napps,nansteel,namisnak,namanny,nallie,nakhle,naito,naccari,nabb,myracle,myhand,mwakitwile,muzzy,muscolino,musco,muscente,muscat,muscara,musacchia,musa,murrish,murfin,muray,munnelly,munley,munivez,mundine,mundahl,munari,mullennex,mullendore,mulkhey,mulinix,mulders,muhl,muenchow,muellner,mudget,mudger,muckenfuss,muchler,mozena,movius,mouldin,motola,mosseri,mossa,moselle,mory,morsell,morrish,morles,morie,morguson,moresco,morck,moppin,moosman,montuori,montono,montogomery,montis,monterio,monter,monsalve,mongomery,mongar,mondello,moncivais,monard,monagan,molt,mollenhauer,moldrem,moldonado,molano,mokler,moisant,moilanen,mohrman,mohamad,moger,mogel,modine,modin,modic,modha,mlynek,miya,mittiga,mittan,mitcheltree,misfeldt,misener,mirchandani,miralles,miotke,miosky,mintey,mins,minassian,minar,mimis,milon,milloy,millison,milito,milfort,milbradt,mikulich,mikos,miklas,mihelcic,migliorisi,migliori,miesch,midura,miclette,michela,micale,mezey,mews,mewes,mettert,mesker,mesich,mesecher,merthie,mersman,mersereau,merrithew,merriott,merring,merenda,merchen,mercardo,merati,mentzel,mentis,mentel,menotti,meno,mengle,mendolia,mellick,mellett,melichar,melhorn,melendres,melchiorre,meitzler,mehtani,mehrtens,meditz,medeiras,meckes,mcteer,mctee,mcparland,mcniell,mcnealey,mcmanaway,mcleon,mclay,mclavrin,mcklveen,mckinzey,mcken,mckeand,mckale,mcilwraith,mcilroy,mcgreal,mcgougan,mcgettigan,mcgarey,mcfeeters,mcelhany,mcdaris,mccomis,mccomber,mccolm,mccollins,mccollin,mccollam,mccoach,mcclory,mcclennon,mccathern,mccarthey,mccarson,mccarrel,mccargar,mccandles,mccamish,mccally,mccage,mcbrearty,mcaneny,mcanallen,mcalarney,mcaferty,mazzo,mazy,mazurowski,mazique,mayoras,mayden,maxberry,mauller,matusiak,mattsen,matthey,matkins,mathiasen,mathe,mateus,matalka,masullo,massay,mashak,mascroft,martinex,martenson,marsiglia,marsella,maroudas,marotte,marner,markes,maret,mareno,marean,marcinkiewicz,marchel,marasigan,manzueta,manzanilla,manternach,manring,manquero,manoni,manne,mankowski,manjarres,mangen,mangat,mandonado,mandia,mancias,manbeck,mamros,maltez,mallia,mallar,malla,malen,malaspina,malahan,malagisi,malachowski,makowsky,makinen,makepeace,majkowski,majid,majercin,maisey,mainguy,mailliard,maignan,mahlman,maha,magsamen,magpusao,magnano,magley,magedanz,magarelli,magaddino,maenner,madnick,maddrey,madaffari,macnaughton,macmullen,macksey,macknight,macki,macisaac,maciejczyk,maciag,machenry,machamer,macguire,macdaniel,maccormack,maccabe,mabbott,mabb,lynott,lycan,lutwin,luscombe,lusco,lusardi,luria,lunetta,lundsford,lumas,luisi,luevanos,lueckenhoff,ludgate,ludd,lucherini,lubbs,lozado,lourens,lounsberry,loughrey,loughary,lotton,losser,loshbaugh,loseke,loscalzo,lortz,loperena,loots,loosle,looman,longstaff,longobardi,longbottom,lomay,lomasney,lohrmann,lohmiller,logalbo,loetz,loeffel,lodwick,lodrigue,lockrem,llera,llarena,littrel,littmann,lisser,lippa,lipner,linnemann,lingg,lindemuth,lindeen,lillig,likins,lieurance,liesmann,liesman,liendo,lickert,lichliter,leyvas,leyrer,lewy,leubner,lesslie,lesnick,lesmerises,lerno,lequire,lepera,lepard,lenske,leneau,lempka,lemmen,lemm,lemere,leinhart,leichner,leicher,leibman,lehmberg,leggins,lebeda,leavengood,leanard,lazaroff,laventure,lavant,lauster,laumea,latigo,lasota,lashure,lasecki,lascurain,lartigue,larouche,lappe,laplaunt,laplace,lanum,lansdell,lanpher,lanoie,lankard,laniado,langowski,langhorn,langfield,langfeldt,landt,landerman,landavazo,lampo,lampke,lamper,lamery,lambey,lamadrid,lallemand,laisure,laigo,laguer,lagerman,lageman,lagares,lacosse,lachappelle,laborn,labonne,kuzia,kutt,kutil,kurylo,kurowski,kuriger,kupcho,kulzer,kulesa,kules,kuhs,kuhne,krutz,krus,krupka,kronberg,kromka,kroese,krizek,krivanek,kringel,kreiss,kratofil,krapp,krakowsky,kracke,kozlow,kowald,kover,kovaleski,kothakota,kosten,koskinen,kositzke,korff,korbar,kopplin,koplin,koos,konyn,konczak,komp,komo,kolber,kolash,kolakowski,kohm,kogen,koestner,koegler,kodama,kocik,kochheiser,kobler,kobara,knezevich,kneifl,knapchuck,knabb,klugman,klosner,klingel,klimesh,klice,kley,kleppe,klemke,kleinmann,kleinhans,kleinberg,kleffner,kleckley,klase,kisto,kissick,kisselburg,kirschman,kirks,kirkner,kirkey,kirchman,kinville,kinnunen,kimmey,kimmerle,kimbley,kilty,kilts,killmeyer,killilea,killay,kiest,kierce,kiepert,kielman,khalid,kewal,keszler,kesson,kesich,kerwood,kerksiek,kerkhoff,kerbo,keranen,keomuangtai,kenter,kennelley,keniry,kendzierski,kempner,kemmis,kemerling,kelsay,kelchner,kela,keithly,keipe,kegg,keer,keahey,kaywood,kayes,kawahara,kasuboski,kastendieck,kassin,kasprzyk,karraker,karnofski,karman,karger,karge,karella,karbowski,kapphahn,kannel,kamrath,kaminer,kamansky,kalua,kaltz,kalpakoff,kalkbrenner,kaku,kaib,kaehler,kackley,kaber,justo,juris,jurich,jurgenson,jurez,junor,juniel,juncker,jugo,jubert,jowell,jovanovic,joosten,joncas,joma,johnso,johanns,jodoin,jockers,joans,jinwright,jinenez,jimeson,jerrett,jergens,jerden,jerdee,jepperson,jendras,jeanfrancois,jazwa,jaussi,jaster,jarzombek,jarencio,janocha,jakab,jadlowiec,jacobsma,jach,izaquirre,iwaoka,ivaska,iturbe,israelson,isles,isachsen,isaak,irland,inzerillo,insogna,ingegneri,ingalsbe,inciong,inagaki,icenogle,hyett,hyers,huyck,hutti,hutten,hutnak,hussar,hurrle,hurford,hurde,hupper,hunkin,hunkele,hunke,humann,huhtasaari,hugel,hufft,huegel,hrobsky,hren,hoyles,hovsepian,hovenga,hovatter,houdek,hotze,hossler,hossfeld,hosseini,horten,hort,horr,horgen,horen,hoopii,hoon,hoogland,hontz,honnold,homewood,holway,holtgrewe,holtan,holstrom,holstege,hollway,hollingshed,hollenback,hollard,holberton,hoines,hogeland,hofstad,hoetger,hoen,hoaglund,hirota,hintermeister,hinnen,hinders,hinderer,hinchee,himelfarb,himber,hilzer,hilling,hillers,hillegas,hildinger,hignight,highman,hierholzer,heyde,hettich,hesketh,herzfeld,herzer,hershenson,hershberg,hernando,hermenegildo,hereth,hererra,hereda,herbin,heraty,herard,hepa,henschel,henrichsen,hennes,henneberger,heningburg,henig,hendron,hendericks,hemple,hempe,hemmingsen,hemler,helvie,helmly,helmbrecht,heling,helin,helfrey,helble,helaire,heizman,heisser,heiny,heinbaugh,heidemann,heidema,heiberger,hegel,heerdt,heeg,heefner,heckerman,heckendorf,heavin,headman,haynesworth,haylock,hayakawa,hawksley,haverstick,haut,hausen,hauke,haubold,hattan,hattabaugh,hasstedt,hashem,haselhorst,harrist,harpst,haroldsen,harmison,harkema,harison,hariri,harcus,harcum,harcharik,hanzel,hanvey,hantz,hansche,hansberger,hannig,hanken,hanhardt,hanf,hanauer,hamberlin,halward,halsall,hals,hallquist,hallmon,halk,halbach,halat,hajdas,hainsworth,haik,hahm,hagger,haggar,hader,hadel,haddick,hackmann,haasch,haaf,guzzetta,guzy,gutterman,gutmann,gutkowski,gustine,gursky,gurner,gunsolley,gumpert,gulla,guilmain,guiliani,guier,guers,guerero,guerena,guebara,guadiana,grunder,grothoff,grosland,grosh,groos,grohs,grohmann,groepper,grodi,grizzaffi,grissinger,grippi,grinde,griffee,grether,greninger,greigo,gregorski,greger,grega,greenberger,graza,grattan,grasse,grano,gramby,gradilla,govin,goutremout,goulas,gotay,gosling,gorey,gordner,goossen,goodwater,gonzaga,gonyo,gonska,gongalves,gomillion,gombos,golonka,gollman,goldtrap,goldammer,golas,golab,gola,gogan,goffman,goeppinger,godkin,godette,glore,glomb,glauner,glassey,glasner,gividen,giuffrida,gishal,giovanelli,ginoza,ginns,gindlesperger,gindhart,gillem,gilger,giggey,giebner,gibbson,giacomo,giacolone,giaccone,giacchino,ghere,gherardini,gherardi,gfeller,getts,gerwitz,gervin,gerstle,gerfin,geremia,gercak,gener,gencarelli,gehron,gehrmann,geffers,geery,geater,gawlik,gaudino,garsia,garrahan,garrabrant,garofolo,garigliano,garfinkle,garelick,gardocki,garafola,gappa,gantner,ganther,gangelhoff,gamarra,galstad,gally,gallik,gallier,galimba,gali,galassi,gaige,gadsby,gabbin,gabak,fyall,furney,funez,fulwider,fulson,fukunaga,fujikawa,fugere,fuertes,fuda,fryson,frump,frothingham,froning,froncillo,frohling,froberg,froats,fritchman,frische,friedrichsen,friedmann,friddell,frid,fresch,frentzel,freno,frelow,freimuth,freidel,freehan,freeby,freeburn,fredieu,frederiksen,fredeen,frazell,frayser,fratzke,frattini,franze,franich,francescon,framer,fragman,frack,foxe,fowlston,fosberg,fortna,fornataro,forden,foots,foody,fogt,foglia,fogerty,fogelson,flygare,flowe,flinner,flem,flath,flater,flahaven,flad,fjeld,fitanides,fistler,fishbaugh,firsching,finzel,finical,fingar,filosa,filicetti,filby,fierst,fierra,ficklen,ficher,fersner,ferrufino,ferrucci,fero,ferlenda,ferko,fergerstrom,ferge,fenty,fent,fennimore,fendt,femat,felux,felman,feldhaus,feisthamel,feijoo,feiertag,fehrman,fehl,feezell,feeback,fedigan,fedder,fechner,feary,fayson,faylor,fauteux,faustini,faure,fauci,fauber,fattig,farruggio,farrens,faraci,fantini,fantin,fanno,fannings,faniel,fallaw,falker,falkenhagen,fajen,fahrner,fabel,fabacher,eytcheson,eyster,exford,exel,evetts,evenstad,evanko,euresti,euber,etcitty,estler,essner,essinger,esplain,espenshade,espaillat,escribano,escorcia,errington,errett,errera,erlanger,erenrich,erekson,erber,entinger,ensworth,ensell,enno,ennen,englin,engblom,engberson,encinias,enama,emel,elzie,elsbree,elman,ellebracht,elkan,elfstrom,elerson,eleazer,eleam,eldrige,elcock,einspahr,eike,eidschun,eickman,eichele,eiche,ehlke,eguchi,eggink,edouard,edgehill,eckes,eblin,ebberts,eavenson,earvin,eardley,eagon,eader,dzubak,dylla,dyckman,dwire,dutrow,dutile,dusza,dustman,dusing,duryee,durupan,durtschi,durtsche,durell,dunny,dunnegan,dunken,dumm,dulak,duker,dukelow,dufort,dufilho,duffee,duett,dueck,dudzinski,dudasik,duckwall,duchemin,dubrow,dubis,dubicki,duba,drust,druckman,drinnen,drewett,drewel,dreitzler,dreckman,drappo,draffen,drabant,doyen,dowding,doub,dorson,dorschner,dorrington,dorney,dormaier,dorff,dorcy,donges,donelly,donel,domangue,dols,dollahite,dolese,doldo,doiley,dohrman,dohn,doheny,doceti,dobry,dobrinski,dobey,divincenzo,dischinger,dirusso,dirocco,dipiano,diop,dinitto,dinehart,dimsdale,diminich,dimalanta,dillavou,dilello,difusco,diffey,diffenderfer,diffee,difelice,difabio,dietzman,dieteman,diepenbrock,dieckmann,dicampli,dibari,diazdeleon,diallo,dewitz,dewiel,devoll,devol,devincent,devier,devendorf,devalk,detten,detraglia,dethomas,detemple,desler,desharnais,desanty,derocco,dermer,derks,derito,derhammer,deraney,dequattro,depass,depadua,denyes,denyer,dentino,denlinger,deneal,demory,demopoulos,demontigny,demonte,demeza,delsol,delrosso,delpit,delpapa,delouise,delone,delo,delmundo,delmore,dellapaolera,delfin,delfierro,deleonardis,delenick,delcarlo,delcampo,delcamp,delawyer,delaroca,delaluz,delahunt,delaguardia,dekeyser,dekay,dejaeger,dejackome,dehay,dehass,degraffenried,degenhart,degan,deever,deedrick,deckelbaum,dechico,dececco,decasas,debrock,debona,debeaumont,debarros,debaca,dearmore,deangelus,dealmeida,dawood,davney,daudt,datri,dasgupta,darring,darracott,darcus,daoud,dansbury,dannels,danielski,danehy,dancey,damour,dambra,dalcour,dahlheimer,dadisman,dacunto,dacamara,dabe,cyrulik,cyphert,cwik,cussen,curles,curit,curby,curbo,cunas,cunard,cunanan,cumpton,culcasi,cucinotta,cucco,csubak,cruthird,crumwell,crummitt,crumedy,crouthamel,cronce,cromack,crisafi,crimin,cresto,crescenzo,cremonese,creedon,crankshaw,cozzens,coval,courtwright,courcelle,coupland,counihan,coullard,cotrell,cosgrave,cornelio,corish,cordoua,corbit,coppersmith,coonfield,conville,contrell,contento,conser,conrod,connole,congrove,conery,condray,colver,coltman,colflesh,colcord,colavito,colar,coile,coggan,coenen,codling,coda,cockroft,cockrel,cockerill,cocca,coberley,clouden,clos,clish,clinkscale,clester,clammer,cittadino,citrano,ciresi,cillis,ciccarelli,ciborowski,ciarlo,ciardullo,chritton,chopp,chirco,chilcoat,chevarie,cheslak,chernak,chay,chatterjee,chatten,chatagnier,chastin,chappuis,channey,champlain,chalupsky,chalfin,chaffer,chadek,chadderton,cestone,cestero,cestari,cerros,cermeno,centola,cedrone,cayouette,cavan,cavaliero,casuse,castricone,castoreno,casten,castanada,castagnola,casstevens,cassanova,caspari,casher,cashatt,casco,casassa,casad,carville,cartland,cartegena,carsey,carsen,carrino,carrilo,carpinteyro,carmley,carlston,carlsson,cariddi,caricofe,carel,cardy,carducci,carby,carangelo,capriotti,capria,caprario,capelo,canul,cantua,cantlow,canny,cangialosi,canepa,candland,campolo,campi,camors,camino,camfield,camelo,camarero,camaeho,calvano,calliste,caldarella,calcutt,calcano,caissie,cager,caccamo,cabotage,cabble,byman,buzby,butkowski,bussler,busico,bushovisky,busbin,busard,busalacchi,burtman,burrous,burridge,burrer,burno,burin,burgette,burdock,burdier,burckhard,bunten,bungay,bundage,bumby,bultema,bulinski,bulan,bukhari,buganski,buerkle,buen,buehl,budzynski,buckham,bryk,brydon,bruyere,brunsvold,brunnett,brunker,brunfield,brumble,brue,brozina,brossman,brosey,brookens,broersma,brodrick,brockmeier,brockhouse,brisky,brinkly,brincefield,brighenti,brigante,brieno,briede,bridenbaugh,brickett,breske,brener,brenchley,breitkreutz,breitbart,breister,breining,breighner,breidel,brehon,breheny,breard,breakell,brazill,braymiller,braum,brau,brashaw,bransom,brandolino,brancato,branagan,braff,brading,bracker,brackenbury,bracher,braasch,boylen,boyda,boyanton,bowlus,bowditch,boutot,bouthillette,boursiquot,bourjolly,bouret,boulerice,bouer,bouchillon,bouchie,bottin,boteilho,bosko,bosack,borys,bors,borla,borjon,borghi,borah,booten,boore,bonuz,bonne,bongers,boneta,bonawitz,bonanni,bomer,bollen,bollard,bolla,bolio,boisseau,boies,boiani,bohorquez,boghossian,boespflug,boeser,boehl,boegel,bodrick,bodkins,bodenstein,bodell,bockover,bocci,bobbs,boals,boahn,boadway,bluma,bluett,bloor,blomker,blevens,blethen,bleecker,blayney,blaske,blasetti,blancas,blackner,bjorkquist,bjerk,bizub,bisono,bisges,bisaillon,birr,birnie,bires,birdtail,birdine,bina,billock,billinger,billig,billet,bigwood,bigalk,bielicki,biddick,biccum,biafore,bhagat,beza,beyah,bevier,bevell,beute,betzer,betthauser,bethay,bethard,beshaw,bertholf,bertels,berridge,bernot,bernath,bernabei,berkson,berkovitz,berkich,bergsten,berget,berezny,berdin,beougher,benthin,benhaim,benenati,benejan,bemiss,beloate,bellucci,bellotti,belling,bellido,bellaire,bellafiore,bekins,bekele,beish,behnken,beerly,beddo,becket,becke,bebeau,beauchaine,beaucage,beadling,beacher,bazar,baysmore".split(","), +E="you,i,to,the,a,and,that,it,of,me,what,is,in,this,know,i'm,for,no,have,my,don't,just,not,do,be,on,your,was,we,it's,with,so,but,all,well,are,he,oh,about,right,you're,get,here,out,going,like,yeah,if,her,she,can,up,want,think,that's,now,go,him,at,how,got,there,one,did,why,see,come,good,they,really,as,would,look,when,time,will,okay,back,can't,mean,tell,i'll,from,hey,were,he's,could,didn't,yes,his,been,or,something,who,because,some,had,then,say,ok,take,an,way,us,little,make,need,gonna,never,we're,too,she's,i've,sure,them,more,over,our,sorry,where,what's,let,thing,am,maybe,down,man,has,uh,very,by,there's,should,anything,said,much,any,life,even,off,doing,thank,give,only,thought,help,two,talk,people,god,still,wait,into,find,nothing,again,things,let's,doesn't,call,told,great,before,better,ever,night,than,away,first,believe,other,feel,everything,work,you've,fine,home,after,last,these,day,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,mr,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,through,talking,made,new,being,guess,hi,care,bad,mom,remember,getting,we'll,together,dad,leave,place,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,their,course,might,mind,every,enough,try,hell,came,someone,you'll,own,family,whole,another,house,yourself,idea,ask,best,must,coming,old,looking,woman,which,years,room,left,knew,tonight,real,son,hope,name,same,went,um,hmm,happy,pretty,saw,girl,sir,show,friend,already,saying,next,three,job,problem,minute,found,world,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,ah,probably,happen,we've,hurt,boy,both,while,dead,gotta,alone,since,excuse,start,kill,hard,you'd,today,car,ready,until,without,wants,hold,wanna,yet,seen,deal,took,once,gone,called,morning,supposed,friends,head,stuff,most,used,worry,second,part,live,truth,school,face,forget,true,business,each,cause,soon,knows,few,telling,wife,who's,use,chance,run,move,anyone,person,bye,somebody,dr,heart,such,miss,married,point,later,making,meet,anyway,many,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,end,late,anymore,five,least,town,aren't,ha,working,year,makes,taking,means,brother,play,hate,ago,says,beautiful,gave,fact,crazy,party,sit,open,afraid,between,important,rest,fun,kid,word,watch,glad,everyone,days,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,under,break,promise,door,set,close,hand,easy,question,tried,far,walk,needs,mine,though,times,different,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,story,ya,mm,waiting,dinner,against,funny,husband,almost,pay,answer,four,office,eyes,news,child,shouldn't,half,side,yours,moment,sleep,read,where's,started,men,sounds,sonny,pick,sometimes,em,bed,also,date,line,plan,hours,lose,hands,serious,behind,inside,high,ahead,week,wonderful,fight,past,cut,quite,number,he'll,sick,it'll,game,eat,nobody,goes,along,save,seems,finally,lives,worried,upset,carly,met,book,brought,seem,sort,safe,living,children,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,six,parents,drink,absolutely,how's,daddy,alive,sense,meant,happens,special,bet,blood,ain't,kidding,lie,full,meeting,dear,seeing,sound,fault,water,ten,women,buy,months,hour,speak,lady,jen,thinks,christmas,body,order,outside,hang,possible,worse,company,mistake,ooh,handle,spend,totally,giving,control,here's,marriage,realize,president,unless,sex,send,needed,taken,died,scared,picture,talked,ass,hundred,changed,completely,explain,playing,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,known,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,worked,marry,light,drop,cannot,sent,city,dream,protect,twenty,class,surprise,its,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,himself,hasn't,act,worth,sheridan,amazing,top,given,expect,rather,involved,swear,piece,busy,law,decided,happening,movie,we'd,catch,country,less,perhaps,step,fall,watching,kept,darling,dog,win,air,honor,personal,moving,till,admit,problems,murder,he'd,evil,definitely,feels,information,honest,eye,broke,missed,longer,dollars,tired,evening,human,starting,red,entire,trip,club,niles,suppose,calm,imagine,fair,caught,blame,street,sitting,favor,apartment,court,terrible,clean,learn,works,frasier,relax,million,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,become,mouth,pregnant,middle,ring,careful,shall,team,ride,figured,wear,shoot,stick,follow,angry,instead,write,stopped,early,ran,war,standing,forgive,jail,wearing,kinda,lunch,cristian,eight,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,state,count,boyfriend,proud,agree,birthday,seven,they've,history,share,offer,hurry,feet,wondering,decision,building,ones,finish,voice,herself,would've,list,mess,deserve,evidence,cute,dress,interesting,hotel,quiet,concerned,road,staying,beat,sweetie,mention,clothes,finished,fell,neither,mmm,fix,respect,spent,prison,attention,holding,calls,near,surprised,bar,keeping,gift,hadn't,putting,dark,self,owe,using,ice,helping,normal,aunt,lawyer,apart,certain,plans,jax,girlfriend,floor,whether,everything's,present,earth,box,cover,judge,upstairs,sake,mommy,possibly,worst,station,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,report,difference,rid,store,she'd,bag,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,shh,record,lord,moved,join,card,crime,gentlemen,willing,window,return,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,public,bother,island,seriously,cell,lead,knowing,broken,advice,somehow,paid,losing,push,helped,killing,usually,earlier,boss,beginning,liked,innocent,doc,rules,cop,learned,thirty,risk,letting,speaking,officer,ridiculous,support,afternoon,born,apologize,seat,nervous,across,song,charge,patient,boat,how'd,hide,detective,planning,nine,huge,breakfast,horrible,age,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,chief,one's,month,visit,could've,c'mon,letter,decide,double,sad,press,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,board,position,hearing,roz,kitchen,ma'am,force,fly,during,space,should've,realized,experience,kick,others,grab,mother's,discuss,third,cat,fifty,responsible,fat,reading,idiot,yep,suddenly,agent,destroy,bucks,track,shoes,scene,peace,arms,demon,low,livvie,consider,papers,medical,incredible,witch,drunk,attorney,tells,knock,ways,gives,department,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,tea,won,attack,ground,whose,outta,weekend,matters,wrote,type,father's,gosh,opportunity,impossible,books,waste,pretend,named,jump,eating,proof,complete,slept,career,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,fit,divorce,begin,ourselves,closer,ruin,although,smile,laugh,treat,god's,fear,what'd,guy's,otherwise,excited,mail,hiding,cost,stole,pacey,noticed,fired,excellent,lived,bringing,pop,bottom,note,sudden,bathroom,flight,honestly,sing,foot,games,remind,bank,charges,witness,finding,places,tree,dare,hardly,that'll,interest,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,radio,reach,heh,choose,emergency,dropped,credit,obvious,cry,locked,loving,positive,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,dad's,total,crap,crying,belong,lay,partner,trick,pressure,ohh,arm,dressed,cup,lies,bus,taste,neck,south,something's,nurse,raise,lots,carry,group,whoever,drinking,they'd,breaking,file,lock,wine,closed,writing,spot,paying,study,assume,asleep,man's,turning,legal,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,level,movies,gee,area,folks,ugh,continue,focus,wild,truly,desk,convince,client,threw,band,hurts,spending,allow,grand,answers,shirt,chair,allowed,rough,doin,sees,government,ought,empty,round,hat,wind,shows,aware,dealing,pack,meaning,hurting,ship,subject,guest,mom's,pal,match,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,lab,passed,bottle,beyond,whenever,pool,opinion,held,common,starts,jerk,secrets,falling,played,necessary,barely,dancing,health,tests,copy,cousin,planned,dry,ahem,twelve,simply,tess,skin,often,fifteen,speech,names,issue,orders,nah,final,results,code,believed,complicated,umm,research,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,within,someplace,screw,everywhere,train,film,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,further,gas,whoo,hole,memories,o'clock,following,ended,nobody's,teeth,ruined,split,airport,bite,stenbeck,older,liar,showing,project,cards,desperate,themselves,pathetic,damage,spoke,quickly,scare,marah,afford,vote,settle,mentioned,due,stayed,rule,checking,tie,hired,upon,heads,concern,blew,natural,alcazar,champagne,connection,tickets,happiness,form,saving,kissing,hated,personally,suggest,prepared,build,leg,onto,leaves,downstairs,ticket,it'd,taught,loose,holy,staff,sea,duty,convinced,throwing,defense,kissed,legs,according,loud,practice,saturday,babies,army,where'd,warning,miracle,carrying,flying,blind,ugly,shopping,hates,someone's,sight,bride,coat,account,states,clearly,celebrate,brilliant,wanting,add,forrester,lips,custody,center,screwed,buying,size,toast,thoughts,student,stories,however,professional,reality,birth,lexie,attitude,advantage,grandfather,sami,sold,opened,grandma,beg,changes,someday,grade,roof,brothers,signed,ahh,marrying,powerful,grown,grandmother,fake,opening,expected,eventually,must've,ideas,exciting,covered,familiar,bomb,bout,television,harmony,color,heavy,schedule,records,capable,practically,including,correct,clue,forgotten,immediately,appointment,social,nature,deserves,threat,bloody,lonely,ordered,shame,local,jacket,hook,destroyed,scary,investigation,above,invite,shooting,port,lesson,criminal,growing,caused,victim,professor,followed,funeral,nothing's,considering,burning,strength,loss,view,gia,sisters,everybody's,several,pushed,written,somebody's,shock,pushing,heat,chocolate,greatest,miserable,corinthos,nightmare,brings,zander,character,became,famous,enemy,crash,chances,sending,recognize,healthy,boring,feed,engaged,percent,headed,lines,treated,purpose,knife,rights,drag,san,fan,badly,hire,paint,pardon,built,behavior,closet,warn,gorgeous,milk,survive,forced,operation,offered,ends,dump,rent,remembered,lieutenant,trade,thanksgiving,rain,revenge,physical,available,program,prefer,baby's,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,itself,tip,stood,market,affair,ours,depends,main,protecting,jury,national,brave,large,jack's,interview,fingers,murdered,explanation,process,picking,based,style,pieces,blah,assistant,stronger,aah,pie,handsome,unbelievable,anytime,nearly,shake,everyone's,oakdale,cars,wherever,serve,pulling,points,medicine,facts,waited,lousy,circumstances,stage,disappointed,weak,trusted,license,nothin,community,trash,understanding,slip,cab,sounded,awake,friendship,stomach,weapon,threatened,mystery,official,regular,river,vegas,understood,contract,race,basically,switch,frankly,issues,cheap,lifetime,deny,painting,ear,clock,weight,garbage,why'd,tear,ears,dig,selling,setting,indeed,changing,singing,tiny,particular,draw,decent,avoid,messed,filled,touched,score,people's,disappear,exact,pills,kicked,harm,recently,fortune,pretending,raised,insurance,fancy,drove,cared,belongs,nights,shape,lorelai,base,lift,stock,sonny's,fashion,timing,guarantee,chest,bridge,woke,source,patients,theory,original,burned,watched,heading,selfish,oil,drinks,failed,period,doll,committed,elevator,freeze,noise,exist,science,pair,edge,wasting,sat,ceremony,pig,uncomfortable,peg,guns,staring,files,bike,weather,name's,mostly,stress,permission,arrived,thrown,possibility,example,borrow,release,ate,notes,hoo,library,property,negative,fabulous,event,doors,screaming,xander,term,what're,meal,fellow,apology,anger,honeymoon,wet,bail,parking,non,protection,fixed,families,chinese,campaign,map,wash,stolen,sensitive,stealing,chose,lets,comfort,worrying,whom,pocket,mateo,bleeding,students,shoulder,ignore,fourth,neighborhood,fbi,talent,tied,garage,dies,demons,dumped,witches,training,rude,crack,model,bothering,radar,grew,remain,soft,meantime,gimme,connected,kinds,cast,sky,likely,fate,buried,hug,brother's,concentrate,prom,messages,east,unit,intend,crew,ashamed,somethin,manage,guilt,weapons,terms,interrupt,guts,tongue,distance,conference,treatment,shoe,basement,sentence,purse,glasses,cabin,universe,towards,repeat,mirror,wound,travers,tall,reaction,odd,engagement,therapy,letters,emotional,runs,magazine,jeez,decisions,soup,daughter's,thrilled,society,managed,stake,chef,moves,extremely,entirely,moments,expensive,counting,shots,kidnapped,square,son's,cleaning,shift,plate,impressed,smells,trapped,male,tour,aidan,knocked,charming,attractive,argue,puts,whip,language,embarrassed,settled,package,laid,animals,hitting,disease,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,sister's,becoming,terribly,friendly,easily,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,federal,disaster,bars,dna,crossed,rate,create,trap,claim,california,talks,eggs,effect,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,year's,reputation,attacked,among,knowledge,presents,inn,europe,chat,suffer,argument,talkin,crowd,homework,fought,coincidence,cancel,accepted,rip,pride,solve,hopefully,pounds,pine,mate,illegal,generous,streets,con,separate,outfit,maid,bath,punch,mayor,freaked,begging,recall,enjoying,bug,woman's,prepare,parts,wheel,signal,direction,defend,signs,painful,yourselves,rat,maris,amount,that'd,suspicious,flat,cooking,button,warned,sixty,pity,parties,crisis,coach,row,yelling,leads,awhile,pen,confidence,offering,falls,image,farm,pleased,panic,hers,gettin,role,refuse,determined,hell's,grandpa,progress,testify,passing,military,choices,uhh,gym,cruel,wings,bodies,mental,gentleman,coma,cutting,proteus,guests,girl's,expert,benefit,faces,cases,led,jumped,toilet,secretary,sneak,mix,firm,halloween,agreement,privacy,dates,anniversary,smoking,reminds,pot,created,twins,swing,successful,season,scream,considered,solid,options,commitment,senior,ill,else's,crush,ambulance,wallet,discovered,officially,til,rise,reached,eleven,option,laundry,former,assure,stays,skip,fail,accused,wide,challenge,popular,learning,discussion,clinic,plant,exchange,betrayed,bro,sticking,university,members,lower,bored,mansion,soda,sheriff,suite,handled,busted,senator,load,happier,younger,studying,romance,procedure,ocean,section,sec,commit,assignment,suicide,minds,swim,ending,bat,yell,llanview,league,chasing,seats,proper,command,believes,humor,hopes,fifth,winning,solution,leader,theresa's,sale,lawyers,nor,material,latest,highly,escaped,audience,parent,tricks,insist,dropping,cheer,medication,higher,flesh,district,routine,century,shared,sandwich,handed,false,beating,appear,warrant,family's,awfully,odds,article,treating,thin,suggesting,fever,sweat,silent,specific,clever,sweater,request,prize,mall,tries,mile,fully,estate,union,sharing,assuming,judgment,goodnight,divorced,despite,surely,steps,jet,confess,math,listened,comin,answered,vulnerable,bless,dreaming,rooms,chip,zero,potential,pissed,nate,kills,tears,knees,chill,carly's,brains,agency,harvard,degree,unusual,wife's,joint,packed,dreamed,cure,covering,newspaper,lookin,coast,grave,egg,direct,cheating,breaks,quarter,mixed,locker,husband's,gifts,awkward,toy,thursday,rare,policy,kid's,joking,competition,classes,assumed,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,served,delicious,closing,vampires,released,ancient,wore,value,tail,secure,salad,murderer,hits,toward,spit,screen,offense,dust,conscience,bread,answering,admitted,lame,invitation,grief,smiling,path,stands,bowl,pregnancy,hollywood,prisoner,delivery,guards,virus,shrink,influence,freezing,concert,wreck,partners,massimo,chain,birds,life's,wire,technically,presence,blown,anxious,cave,version,holidays,cleared,wishes,survived,caring,candles,bound,related,charm,yup,pulse,jumping,jokes,frame,boom,vice,performance,occasion,silence,opera,nonsense,frightened,downtown,americans,slipped,dimera,blowing,world's,session,relationships,kidnapping,actual,spin,civil,roxy,packing,education,blaming,wrap,obsessed,fruit,torture,personality,location,effort,daddy's,commander,trees,there'll,owner,fairy,per,other's,necessarily,county,contest,seventy,print,motel,fallen,directly,underwear,grams,exhausted,believing,particularly,freaking,carefully,trace,touching,messing,committee,recovery,intention,consequences,belt,sacrifice,courage,officers,enjoyed,lack,attracted,appears,bay,yard,returned,remove,nut,carried,today's,testimony,intense,granted,violence,heal,defending,attempt,unfair,relieved,political,loyal,approach,slowly,plays,normally,buzz,alcohol,actor,surprises,psychiatrist,pre,plain,attic,who'd,uniform,terrified,sons,pet,cleaned,zach,threaten,teaching,mum,motion,fella,enemies,desert,collection,incident,failure,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,opposite,highest,equipment,badge,italian,visiting,naturally,frozen,commissioner,sakes,labor,appropriate,trunk,armed,thousands,received,dunno,costume,temporary,sixteen,impressive,zone,kicking,junk,hon,grabbed,unlike,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,leading,intelligence,host,authority,surveillance,cow,commercial,admire,questioning,fund,dragged,barn,object,deeply,amp,wrapped,wasted,tense,route,reports,hoped,fellas,election,roommate,mortal,fascinating,chosen,stops,shown,arranged,abandoned,sides,delivered,becomes,arrangements,agenda,began,theater,series,literally,propose,honesty,underneath,forces,services,sauce,promises,lecture,eighty,torn,shocked,relief,explained,counter,circle,victims,transfer,response,channel,identity,differently,campus,spy,ninety,interests,guide,deck,biological,pheebs,ease,creep,will's,waitress,skills,telephone,ripped,raising,scratch,rings,prints,wave,thee,arguing,figures,ephram,asks,reception,pin,oops,diner,annoying,agents,taggert,goal,mass,ability,sergeant,julian's,international,gig,blast,basic,tradition,towel,earned,rub,president's,habit,customers,creature,bermuda,actions,snap,react,prime,paranoid,wha,handling,eaten,therapist,comment,charged,tax,sink,reporter,beats,priority,interrupting,gain,fed,warehouse,shy,pattern,loyalty,inspector,events,pleasant,media,excuses,threats,permanent,guessing,financial,demand,assault,tend,praying,motive,los,unconscious,trained,museum,tracks,range,nap,mysterious,unhappy,tone,switched,rappaport,award,sookie,neighbor,loaded,gut,childhood,causing,swore,piss,hundreds,balance,background,toss,mob,misery,valentine's,thief,squeeze,lobby,hah,goa'uld,geez,exercise,ego,drama,al's,forth,facing,booked,boo,songs,sandburg,eighteen,d'you,bury,perform,everyday,digging,creepy,compared,wondered,trail,liver,hmmm,drawn,device,magical,journey,fits,discussed,supply,moral,helpful,attached,timmy's,searching,flew,depressed,aisle,underground,pro,daughters,cris,amen,vows,proposal,pit,neighbors,darn,cents,arrange,annulment,uses,useless,squad,represent,product,joined,afterwards,adventure,resist,protected,net,fourteen,celebrating,piano,inch,flag,debt,violent,tag,sand,gum,dammit,teal'c,hip,celebration,below,reminded,claims,tonight's,replace,phones,paperwork,emotions,typical,stubborn,stable,sheridan's,pound,papa,lap,designed,current,bum,tension,tank,suffered,steady,provide,overnight,meanwhile,chips,beef,wins,suits,boxes,salt,cassadine,collect,boy's,tragedy,therefore,spoil,realm,profile,degrees,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,anti,perspective,designer,climb,title,suggested,punishment,finest,ethan's,springfield,occurred,hint,furniture,blanket,twist,surrounded,surface,proceed,lip,fries,worries,refused,niece,gloves,soap,signature,disappoint,crawl,convicted,zoo,result,pages,lit,flip,counsel,doubts,crimes,accusing,when's,shaking,remembering,phase,hallway,halfway,bothered,useful,makeup,madam,gather,concerns,cia,cameras,blackmail,symptoms,rope,ordinary,imagined,concept,cigarette,supportive,memorial,explosion,yay,woo,trauma,ouch,leo's,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,minister,drawer,sin,phony,joining,jam,interfere,governor,chapter,catching,bargain,tragic,schools,respond,punish,penthouse,hop,thou,remains,rach,ohhh,insult,doctor's,bugs,beside,begged,absolute,strictly,stefano,socks,senses,ups,sneaking,yah,serving,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,internal,bitter,adorable,y'all,tested,suggestion,string,jewelry,debate,com,alike,pitch,fax,distracted,shelter,lessons,foreign,average,twin,friend's,damnit,constable,circus,audition,tune,shoulders,mud,mask,helpless,feeding,explains,dated,robbery,objection,behave,valuable,shadows,courtroom,confusing,tub,talented,struck,smarter,mistaken,italy,customer,bizarre,scaring,punk,motherfucker,holds,focused,alert,activity,vecchio,reverend,highway,foolish,compliment,bastards,attend,scheme,aid,worker,wheelchair,protective,poetry,gentle,script,reverse,picnic,knee,intended,construction,cage,wednesday,voices,toes,stink,scares,pour,effects,cheated,tower,time's,slide,ruining,recent,jewish,filling,exit,cottage,corporate,upside,supplies,proves,parked,instance,grounds,diary,complaining,basis,wounded,thing's,politics,confessed,pipe,merely,massage,data,chop,budget,brief,spill,prayer,costs,betray,begins,arrangement,waiter,scam,rats,fraud,flu,brush,anyone's,adopted,tables,sympathy,pill,pee,web,seventeen,landed,expression,entrance,employee,drawing,cap,bracelet,principal,pays,jen's,fairly,facility,dru,deeper,arrive,unique,tracking,spite,shed,recommend,oughta,nanny,naive,menu,grades,diet,corn,authorities,separated,roses,patch,dime,devastated,description,tap,subtle,include,citizen,bullets,beans,ric,pile,las,executive,confirm,toe,strings,parade,harbor,charity's,bow,borrowed,toys,straighten,steak,status,remote,premonition,poem,planted,honored,youth,specifically,meetings,exam,convenient,traveling,matches,laying,insisted,apply,units,technology,dish,aitoro,sis,kindly,grandson,donor,temper,teenager,strategy,richard's,proven,iron,denial,couples,backwards,tent,swell,noon,happiest,episode,drives,thinkin,spirits,potion,fence,affairs,acts,whatsoever,rehearsal,proved,overheard,nuclear,lemme,hostage,faced,constant,bench,tryin,taxi,shove,sets,moron,limits,impress,entitled,needle,limit,lad,intelligent,instant,forms,disagree,stinks,rianna,recover,paul's,losers,groom,gesture,developed,constantly,blocks,bartender,tunnel,suspects,sealed,removed,legally,illness,hears,dresses,aye,vehicle,thy,teachers,sheet,receive,psychic,night's,denied,knocking,judging,bible,behalf,accidentally,waking,ton,superior,seek,rumor,natalie's,manners,homeless,hollow,desperately,critical,theme,tapes,referring,personnel,item,genoa,gear,majesty,fans,exposed,cried,tons,spells,producer,launch,instinct,belief,quote,motorcycle,convincing,appeal,advance,greater,fashioned,aids,accomplished,mommy's,grip,bump,upsetting,soldiers,scheduled,production,needing,invisible,forgiveness,feds,complex,compare,bothers,tooth,territory,sacred,mon,jessica's,inviting,inner,earn,compromise,cocktail,tramp,temperature,signing,landing,jabot,intimate,dignity,dealt,souls,informed,gods,entertainment,dressing,cigarettes,blessing,billion,alistair,upper,manner,lightning,leak,heaven's,fond,corky,alternative,seduce,players,operate,modern,liquor,fingerprints,enchantment,butters,stuffed,stavros,rome,filed,emotionally,division,conditions,uhm,transplant,tips,passes,oxygen,nicely,lunatic,hid,drill,designs,complain,announcement,visitors,unfortunate,slap,prayers,plug,organization,opens,oath,o'neill,mutual,graduate,confirmed,broad,yacht,spa,remembers,fried,extraordinary,bait,appearance,abuse,warton,sworn,stare,safely,reunion,plot,burst,aha,might've,experiment,dive,commission,cells,aboard,returning,independent,expose,environment,buddies,trusting,smaller,mountains,booze,sweep,sore,scudder,properly,parole,manhattan,effective,ditch,decides,canceled,bra,antonio's,speaks,spanish,reaching,glow,foundation,women's,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,systems,sob,pancakes,michael's,harsh,flattered,existence,ahhh,troubles,proposed,fights,favourite,eats,driven,computers,rage,luke's,causes,border,undercover,spoiled,sloane,shine,rug,identify,destroying,deputy,deliberately,conspiracy,clothing,thoughtful,similar,sandwiches,plates,nails,miracles,investment,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,hope's,forgiven,erica's,cuz,bent,approval,practical,organized,maciver,involve,industry,fuel,dragging,cooked,possession,pointing,foul,editor,dull,beneath,ages,horror,heels,grass,faking,deaf,stunt,portrait,painted,jealousy,hopeless,fears,cuts,conclusion,volunteer,scenario,satellite,necklace,men's,crashed,chapel,accuse,restraining,jason's,humans,homicide,helicopter,formal,firing,shortly,safer,devoted,auction,videotape,tore,stores,reservations,pops,appetite,anybody's,wounds,vanquish,symbol,prevent,patrol,ironic,flow,fathers,excitement,anyhow,tearing,sends,sam's,rape,laughed,function,core,charmed,whatever's,sub,lucy's,dealer,cooperate,bachelor,accomplish,wakes,struggle,spotted,sorts,reservation,ashes,yards,votes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,slightly,qualified,log,investigating,inappropriate,immediate,companies,backed,pan,owned,lipstick,lawn,compassion,cafeteria,belonged,affected,scarf,precisely,obsession,management,loses,lighten,jake's,infection,granddaughter,explode,chemistry,balcony,this'll,storage,spying,publicity,exists,employees,depend,cue,cracked,conscious,aww,ally,ace,accounts,absurd,vicious,tools,strongly,rap,invented,forbid,directions,defendant,bare,announce,alcazar's,screwing,salesman,robbed,leap,lakeview,insanity,injury,genetic,document,why's,reveal,religious,possibilities,kidnap,gown,entering,chairs,wishing,statue,setup,serial,punished,dramatic,dismissed,criminals,seventh,regrets,raped,quarters,produce,lamp,dentist,anyways,anonymous,added,semester,risks,regarding,owes,magazines,machines,lungs,explaining,delicate,child's,tricked,oldest,liv,eager,doomed,cafe,bureau,adoption,traditional,surrender,stab,sickness,scum,loop,independence,generation,floating,envelope,entered,combination,chamber,worn,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,application,stabbed,remarkable,cabinet,brat,wrestling,sixth,scale,privilege,passionate,nerves,lawsuit,kidney,disturbed,crossing,cozy,associate,tire,shirts,required,posted,oven,ordering,mill,journal,gallery,delay,clubs,risky,nest,monsters,honorable,grounded,favour,culture,closest,brenda's,breakdown,attempted,tony's,placed,conflict,bald,actress,abandon,steam,scar,pole,duh,collar,worthless,standards,resources,photographs,introduced,injured,graduation,enormous,disturbing,disturb,distract,deals,conclusions,vodka,situations,require,mid,measure,dishes,crawling,congress,children's,briefcase,wiped,whistle,sits,roast,rented,pigs,greek,flirting,existed,deposit,damaged,bottles,vanessa's,types,topic,riot,overreacting,minimum,logical,impact,hostile,embarrass,casual,beacon,amusing,altar,values,recognized,maintain,goods,covers,claus,battery,survival,skirt,shave,prisoners,porch,med,ghosts,favors,drops,dizzy,chili,begun,beaten,advise,transferred,strikes,rehab,raw,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,draft,citizens,weakness,ski,ships,ranch,practicing,musical,movement,individual,homes,executed,examine,documents,cranes,column,bribe,task,species,sail,rum,resort,prescription,operating,hush,fragile,forensics,expense,drugged,differences,cows,conduct,comic,bells,avenue,attacking,assigned,visitor,suitcase,sources,sorta,scan,payment,motor,mini,manticore,inspired,insecure,imagining,hardest,clerk,yea,wrist,what'll,tube,starters,silk,pump,pale,nicer,haul,flies,demands,boot,arts,african,there'd,limited,how're,elders,connections,quietly,pulls,idiots,factor,erase,denying,attacks,ankle,amnesia,accepting,ooo,heartbeat,gal,devane,confront,backing,phrase,operations,minus,meets,legitimate,hurricane,fixing,communication,boats,auto,arrogant,supper,studies,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,catholic,snack,rational,pointed,minded,guessed,grace's,display,dip,brooke's,advanced,weddings,unh,tumor,teams,reported,humiliated,destruction,copies,closely,bid,aspirin,academy,wig,throughout,spray,occur,logic,eyed,equal,drowning,contacts,shakespeare,ritual,perfume,kelly's,hiring,hating,generally,error,elected,docks,creatures,visions,thanking,thankful,sock,replaced,nineteen,nick's,fork,comedy,analysis,yale,throws,teenagers,studied,stressed,slice,rolls,requires,plead,ladder,kicks,detectives,assured,alison's,widow,tomorrow's,tissue,tellin,shallow,responsibilities,repay,rejected,permanently,girlfriends,deadly,comforting,ceiling,bonus,verdict,maintenance,jar,insensitive,factory,aim,triple,spilled,respected,recovered,messy,interrupted,halliwell,car's,bleed,benefits,wardrobe,takin,significant,objective,murders,doo,chart,backs,workers,waves,underestimate,ties,registered,multiple,justify,harmless,frustrated,fold,enzo,convention,communicate,bugging,attraction,arson,whack,salary,rumors,residence,party's,obligation,medium,liking,laura's,development,develop,dearest,david's,danny's,congratulate,vengeance,switzerland,severe,rack,puzzle,puerto,guidance,fires,courtesy,caller,blamed,tops,repair,quiz,prep,now's,involves,headquarters,curiosity,codes,circles,barbecue,troops,sunnydale,spinning,scores,pursue,psychotic,cough,claimed,accusations,shares,resent,money's,laughs,gathered,freshman,envy,drown,cristian's,bartlet,asses,sofa,scientist,poster,islands,highness,dock,apologies,welfare,victor's,theirs,stat,stall,spots,somewhat,ryan's,realizes,psych,fools,finishing,album,wee,understandable,unable,treats,theatre,succeed,stir,relaxed,makin,inches,gratitude,faithful,bin,accent,zip,witter,wandering,regardless,que,locate,inevitable,gretel,deed,crushed,controlling,taxes,smelled,settlement,robe,poet,opposed,marked,greenlee's,gossip,gambling,determine,cuba,cosmetics,cent,accidents,surprising,stiff,sincere,shield,rushed,resume,reporting,refrigerator,reference,preparing,nightmares,mijo,ignoring,hunch,fog,fireworks,drowned,crown,cooperation,brass,accurate,whispering,sophisticated,religion,luggage,investigate,hike,explore,emotion,creek,crashing,contacted,complications,ceo,acid,shining,rolled,righteous,reconsider,inspiration,goody,geek,frightening,festival,ethics,creeps,courthouse,camping,assistance,affection,vow,smythe,protest,lodge,haircut,forcing,essay,chairman,baked,apologized,vibe,respects,receipt,mami,includes,hats,exclusive,destructive,define,defeat,adore,adopt,voted,tracked,signals,shorts,rory's,reminding,relative,ninth,floors,dough,creations,continues,cancelled,cabot,barrel,adam's,snuck,slight,reporters,rear,pressing,novel,newspapers,magnificent,madame,lazy,glorious,fiancee,candidate,brick,bits,australia,activities,visitation,scholarship,sane,previous,kindness,ivy's,shoulda,rescued,mattress,maria's,lounge,lifted,label,importantly,glove,enterprises,driver's,disappointment,condo,cemetery,beings,admitting,yelled,waving,screech,satisfaction,requested,reads,plants,nun,nailed,described,dedicated,certificate,centuries,annual,worm,tick,resting,primary,polish,marvelous,fuss,funds,defensive,cortlandt,compete,chased,provided,pockets,luckily,lilith,filing,depression,conversations,consideration,consciousness,worlds,innocence,indicate,grandmother's,forehead,bam,appeared,aggressive,trailer,slam,retirement,quitting,pry,person's,narrow,levels,kay's,inform,encourage,dug,delighted,daylight,danced,currently,confidential,billy's,ben's,aunts,washing,vic,tossed,spectra,rick's,permit,marrow,lined,implying,hatred,grill,efforts,corpse,clues,sober,relatives,promotion,offended,morgue,larger,infected,humanity,eww,emily's,electricity,electrical,distraction,cart,broadcast,wired,violation,suspended,promising,harassment,glue,gathering,d'angelo,cursed,controlled,calendar,brutal,assets,warlocks,wagon,unpleasant,proving,priorities,observation,mustn't,lease,grows,flame,domestic,disappearance,depressing,thrill,sitter,ribs,offers,naw,flush,exception,earrings,deadline,corporal,collapsed,update,snapped,smack,orleans,offices,melt,figuring,delusional,coulda,burnt,actors,trips,tender,sperm,specialist,scientific,realise,pork,popped,planes,kev,interrogation,institution,included,esteem,communications,choosing,choir,undo,pres,prayed,plague,manipulate,lifestyle,insulting,honour,detention,delightful,coffeehouse,chess,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,psychological,principle,monsieur,injuries,fame,faint,confusion,christ's,bon,bake,nearest,korea,industries,execution,distress,definition,creating,correctly,complaint,blocked,trophy,tortured,structure,rot,risking,pointless,household,heir,handing,eighth,dumping,cups,chloe's,alibi,absence,vital,tokyo,thus,struggling,shiny,risked,refer,mummy,mint,joey's,involvement,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,addition,wit,transport,technical,rode,puppet,opportunities,modeling,memo,irresponsible,humiliation,hiya,freakin,fez,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,rally,psychology,pledge,panicked,nursery,louder,jeans,investigator,identified,homecoming,helena's,height,graduated,frustrating,fabric,distant,buys,busting,buff,wax,sleeve,products,philosophy,irony,hospitals,dope,declare,autopsy,workin,torch,substitute,scandal,prick,limb,leaf,lady's,hysterical,growth,goddamnit,fetch,dimension,day's,crowded,clip,climbing,bonding,approved,yeh,woah,ultimately,trusts,returns,negotiate,millennium,majority,lethal,length,iced,deeds,bore,babysitter,questioned,outrageous,medal,kiriakis,insulted,grudge,established,driveway,deserted,definite,capture,beep,wires,suggestions,searched,owed,originally,nickname,lighting,lend,drunken,demanding,costanza,conviction,characters,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,pip,phoebe's,pete's,occasionally,molly's,meals,maker,invitations,haunted,fur,footage,depending,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,presentation,performed,manny,identical,fist,cycle,associates,aaron's,streak,spectacular,sector,lasted,isaac's,increase,hostages,heroin,havin,habits,encouraging,cult,consult,burgers,boyfriends,bailed,baggage,association,wealthy,watches,versus,troubled,torturing,teasing,sweetest,stations,sip,shawn's,rag,qualities,postpone,pad,overwhelmed,malkovich,impulse,hut,follows,classy,charging,barbara's,angel's,amazed,scenes,rising,revealed,representing,policeman,offensive,mug,hypocrite,humiliate,hideous,finals,experiences,d'ya,courts,costumes,captured,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shouting,roots,pressed,nooo,liza's,jew,intent,grieving,gladly,fling,eliminate,disorder,courtney's,cereal,arrives,aaah,yum,technique,statements,sonofabitch,servant,roads,republican,paralyzed,orb,lotta,locks,guaranteed,european,dummy,discipline,despise,dental,corporation,carries,briefing,bluff,batteries,atmosphere,whatta,tux,sounding,servants,rifle,presume,kevin's,handwriting,goals,gin,fainted,elements,dried,cape,allright,allowing,acknowledge,whacked,toxic,skating,reliable,quicker,penalty,panel,overwhelming,nearby,lining,importance,harassing,fatal,endless,elsewhere,dolls,convict,bold,ballet,whatcha,unlikely,spiritual,shutting,separation,recording,positively,overcome,goddam,failing,essence,dose,diagnosis,cured,claiming,bully,airline,ahold,yearbook,various,tempting,shelf,rig,pursuit,prosecution,pouring,possessed,partnership,miguel's,lindsay's,countries,wonders,tsk,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,exposure,exhibit,evidently,duties,contempt,compromised,capacity,cans,weekends,urge,theft,suing,shipment,scissors,responding,refuses,proposition,noises,matching,located,ink,hormones,hiv,hail,grandchildren,godfather,gently,establish,crane's,contracts,compound,buffy's,worldwide,smashed,sexually,sentimental,senor,scored,patient's,nicest,marketing,manipulated,jaw,intern,handcuffs,framed,errands,entertaining,discovery,crib,carriage,barge,awards,attending,ambassador,videos,tab,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,ratings,headaches,float,embrace,corners,whining,sweating,sole,skipped,restore,receiving,population,pep,mountie,motives,mama's,listens,korean,heroes,heart's,cristobel,controls,cheerleader,balsom,unnecessary,stunning,shipping,scent,santa's,quartermaines,praise,pose,montega,luxury,loosen,kyle's,keri's,info,hum,haunt,gracious,git,forgiving,fleet,errand,emperor,cakes,blames,abortion,worship,theories,strict,sketch,shifts,plotting,physician,perimeter,passage,pals,mere,mattered,lonigan,longest,jews,interference,eyewitness,enthusiasm,encounter,diapers,craig's,artists,strongest,shaken,serves,punched,projects,portal,outer,nazi,hal's,colleagues,catches,bearing,backyard,academic,winds,terrorists,sabotage,pea,organs,needy,mentor,measures,listed,lex,cuff,civilization,caribbean,articles,writes,woof,who'll,viki's,valid,rarely,rabbi,prank,performing,obnoxious,mates,improve,hereby,gabby,faked,cellar,whitelighter,void,substance,strangle,sour,skill,senate,purchase,native,muffins,interfering,hoh,gina's,demonic,colored,clearing,civilian,buildings,boutique,barrington,trading,terrace,smoked,seed,righty,relations,quack,published,preliminary,petey,pact,outstanding,opinions,knot,ketchup,items,examined,disappearing,cordy,coin,circuit,assist,administration,walt,uptight,ticking,terrifying,tease,tabitha's,syd,swamp,secretly,rejection,reflection,realizing,rays,pennsylvania,partly,mentally,marone,jurisdiction,frasier's,doubted,deception,crucial,congressman,cheesy,arrival,visited,supporting,stalling,scouts,scoop,ribbon,reserve,raid,notion,income,immune,grandma's,expects,edition,destined,constitution,classroom,bets,appreciation,appointed,accomplice,whitney's,wander,shoved,sewer,scroll,retire,paintings,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,abby's,whoops,volunteered,terrorist,tales,talents,stinking,resolved,remotely,protocol,livvie's,garlic,decency,cord,beds,asa's,areas,altogether,uniforms,tremendous,restaurants,rank,profession,popping,philadelphia,outa,observe,lung,largest,hangs,feelin,experts,enforcement,encouraged,economy,dudes,donation,disguise,diane's,curb,continued,competitive,businessman,bites,antique,advertising,ads,toothbrush,retreat,represents,realistic,profits,predict,nora's,lid,landlord,hourglass,hesitate,frank's,focusing,equally,consolation,boyfriend's,babbling,aged,troy's,tipped,stranded,smartest,sabrina's,rhythm,replacement,repeating,puke,psst,paycheck,overreacted,macho,leadership,kendall's,juvenile,john's,images,grocery,freshen,disposal,cuffs,consent,caffeine,arguments,agrees,abigail's,vanished,unfinished,tobacco,tin,syndrome,ripping,pinch,missiles,isolated,flattering,expenses,dinners,cos,colleague,ciao,buh,belthazor,belle's,attorneys,amber's,woulda,whereabouts,wars,waitin,visits,truce,tripped,tee,tasted,stu,steer,ruling,poisoning,nursing,manipulative,immature,husbands,heel,granddad,delivering,deaths,condoms,automatically,anchor,trashed,tournament,throne,raining,prices,pasta,needles,leaning,leaders,judges,ideal,detector,coolest,casting,batch,approximately,appointments,almighty,achieve,vegetables,sum,spark,ruled,revolution,principles,perfection,pains,momma,mole,interviews,initiative,hairs,getaway,employment,den,cracking,counted,compliments,behold,verge,tougher,timer,tapped,taped,stakes,specialty,snooping,shoots,semi,rendezvous,pentagon,passenger,leverage,jeopardize,janitor,grandparents,forbidden,examination,communist,clueless,cities,bidding,arriving,adding,ungrateful,unacceptable,tutor,soviet,shaped,serum,scuse,savings,pub,pajamas,mouths,modest,methods,lure,irrational,depth,cries,classified,bombs,beautifully,arresting,approaching,vessel,variety,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,mild,jumps,inventory,ing,improved,grandfather's,developing,darlin,committing,caleb's,banging,asap,amendment,worms,violated,vent,traumatic,traced,tow,swiss,sweaty,shaft,recommended,overboard,literature,insight,healed,grasp,fluid,experiencing,crappy,crab,connecticut,chunk,chandler's,awww,applied,witnessed,traveled,stain,shack,reacted,pronounce,presented,poured,occupied,moms,marriages,jabez,invested,handful,gob,gag,flipped,fireplace,expertise,embarrassment,disappears,concussion,bruises,brakes,anything's,week's,twisting,tide,swept,summon,splitting,settling,scientists,reschedule,regard,purposes,ohio,notch,mike's,improvement,hooray,grabbing,extend,exquisite,disrespect,complaints,colin's,armor,voting,thornhart,sustained,straw,slapped,simon's,shipped,shattered,ruthless,reva's,refill,recorded,payroll,numb,mourning,marijuana,manly,jerry's,involving,hunk,entertain,earthquake,drift,dreadful,doorstep,confirmation,chops,bridget's,appreciates,announced,vague,tires,stressful,stem,stashed,stash,sensed,preoccupied,predictable,noticing,madly,halls,gunshot,embassy,dozens,dinner's,confuse,cleaners,charade,chalk,cappuccino,breed,bouquet,amulet,addiction,who've,warming,unlock,transition,satisfy,sacrificed,relaxing,lone,input,hampshire,girlfriend's,elaborate,concerning,completed,channels,category,cal,blocking,blend,blankets,america's,addicted,yuck,voters,professionals,positions,monica's,mode,initial,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,declared,collecting,caution,brady's,backpack,agreeing,writers,whale,tribe,taller,supervisor,sacrifices,radiation,poo,phew,outcome,ounce,missile,meter,likewise,irrelevant,gran,felon,feature,favorites,farther,fade,experiments,erased,easiest,disk,convenience,conceived,compassionate,challenged,cane,blair's,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,marching,immunity,hassle,goddamned,frighten,directors,dearly,comments,closure,cease,ambition,wisconsin,unstable,sweetness,salvage,richer,refusing,raging,pumping,pressuring,petition,mortals,lowlife,jus,intimidated,intentionally,inspire,forgave,eric's,devotion,despicable,deciding,dash,comfy,breach,bo's,bark,alternate,aaaah,switching,swallowed,stove,slot,screamed,scars,russians,relevant,poof,pipes,persons,pawn,losses,legit,invest,generations,farewell,experimental,difficulty,curtains,civilized,championship,caviar,boost,token,tends,temporarily,superstition,supernatural,sunk,sadness,reduced,recorder,psyched,presidential,owners,motivated,microwave,lands,karen's,hallelujah,gap,fraternity,engines,dryer,cocoa,chewing,additional,acceptable,unbelievably,survivor,smiled,smelling,sized,simpler,sentenced,respectable,remarks,registration,premises,passengers,organ,occasional,khasinau,indication,gutter,grabs,goo,fulfill,flashlight,ellenor,courses,blooded,blessings,beware,beth's,bands,advised,water's,uhhh,turf,swings,slips,shocking,resistance,privately,olivia's,mirrors,lyrics,locking,instrument,historical,heartless,fras,decades,comparison,childish,cassie's,cardiac,admission,utterly,tuscany,ticked,suspension,stunned,statesville,sadly,resolution,reserved,purely,opponent,noted,lowest,kiddin,jerks,hitch,flirt,fare,extension,establishment,equals,dismiss,delayed,decade,christening,casket,c'mere,breakup,brad's,biting,antibiotics,accusation,abducted,witchcraft,whoever's,traded,thread,spelling,so's,school's,runnin,remaining,punching,protein,printed,paramedics,newest,murdering,mine's,masks,lawndale,intact,ins,initials,heights,grampa,democracy,deceased,colleen's,choking,charms,careless,bushes,buns,bummed,accounting,travels,taylor's,shred,saves,saddle,rethink,regards,references,precinct,persuade,patterns,meds,manipulating,llanfair,leash,kenny's,housing,hearted,guarantees,flown,feast,extent,educated,disgrace,determination,deposition,coverage,corridor,burial,bookstore,boil,abilities,vitals,veil,trespassing,teaches,sidewalk,sensible,punishing,overtime,optimistic,occasions,obsessing,oak,notify,mornin,jeopardy,jaffa,injection,hilarious,distinct,directed,desires,curve,confide,challenging,cautious,alter,yada,wilderness,where're,vindictive,vial,tomb,teeny,subjects,stroll,sittin,scrub,rebuild,rachel's,posters,parallel,ordeal,orbit,o'brien,nuns,max's,jennifer's,intimacy,inheritance,fails,exploded,donate,distracting,despair,democratic,defended,crackers,commercials,bryant's,ammunition,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,possess,platter,phillip's,napkin,misplaced,merchandise,membership,loony,jinx,heroic,frankenstein,fag,efficient,devil's,corps,clan,boundaries,attract,ambitious,virtually,syrup,solitary,resignation,resemblance,reacting,pursuing,premature,pod,liz's,lavery,journalist,honors,harvey's,genes,flashes,erm,contribution,company's,client's,cheque,charts,cargo,awright,acquainted,wrapping,untie,salute,ruins,resign,realised,priceless,partying,myth,moonlight,lightly,lifting,kasnoff,insisting,glowing,generator,flowing,explosives,employer,cutie,confronted,clause,buts,breakthrough,blouse,ballistic,antidote,analyze,allowance,adjourned,vet,unto,understatement,tucked,touchy,toll,subconscious,sequence,screws,sarge,roommates,reaches,rambaldi,programs,offend,nerd,knives,kin,irresistible,inherited,incapable,hostility,goddammit,fuse,frat,equation,curfew,centered,blackmailed,allows,alleged,walkin,transmission,text,starve,sleigh,sarcastic,recess,rebound,procedures,pinned,parlor,outfits,livin,issued,institute,industrial,heartache,head's,haired,fundraiser,doorman,documentary,discreet,dilucca,detect,cracks,cracker,considerate,climbed,catering,author,apophis,zoey,vacuum,urine,tunnels,todd's,tanks,strung,stitches,sordid,sark,referred,protector,portion,phoned,pets,paths,mat,lengths,kindergarten,hostess,flaw,flavor,discharge,deveraux,consumed,confidentiality,automatic,amongst,viktor,victim's,tactics,straightened,specials,spaghetti,soil,prettier,powerless,por,poems,playin,playground,parker's,paranoia,nsa,mainly,mac's,joe's,instantly,havoc,exaggerating,evaluation,eavesdropping,doughnuts,diversion,deepest,cutest,companion,comb,bela,behaving,avoided,anyplace,agh,accessory,zap,whereas,translate,stuffing,speeding,slime,polls,personalities,payments,musician,marital,lurking,lottery,journalism,interior,imaginary,hog,guinea,greetings,game's,fairwinds,ethical,equipped,environmental,elegant,elbow,customs,cuban,credibility,credentials,consistent,collapse,cloth,claws,chopped,challenges,bridal,boards,bedside,babysitting,authorized,assumption,ant,youngest,witty,vast,unforgivable,underworld,tempt,tabs,succeeded,sophomore,selfless,secrecy,runway,restless,programming,professionally,okey,movin,metaphor,messes,meltdown,lecter,incoming,hence,gasoline,gained,funding,episodes,diefenbaker,contain,comedian,collected,cam,buckle,assembly,ancestors,admired,adjustment,acceptance,weekly,warmth,throats,seduced,ridge's,reform,rebecca's,queer,poll,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,assassination,wedded,voyage,volunteers,verbal,unpredictable,tuned,stoop,slides,sinking,show's,rio,rigged,regulations,region,promoted,plumbing,lingerie,layer,katie's,hankey,greed,everwood,essential,elope,dresser,departure,dat,dances,coup,chauffeur,bulletin,bugged,bouncing,website,tubes,temptation,supported,strangest,sorel's,slammed,selection,sarcasm,rib,primitive,platform,pending,partial,packages,orderly,obsessive,nevertheless,nbc,murderers,motto,meteor,inconvenience,glimpse,froze,fiber,execute,etc,ensure,drivers,dispute,damages,crop,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,traces,town's,testifying,tendency,syringe,symphony,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,phone's,philip's,nutty,nobel,mentioning,mend,mayor's,iowa,inspiring,impulsive,housekeeper,germans,formed,foam,fingernails,economic,divide,conditioning,baking,whine,thug,starved,sedative,rose's,reversed,publishing,programmed,picket,paged,nowadays,newman's,mines,margo's,invasion,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,consultant,choo,banking,assignments,apartments,ants,affecting,advisor,vile,unreasonable,tossing,thanked,steals,souvenir,screening,scratched,rep,psychopath,proportion,outs,operative,obstruction,obey,neutral,lump,lily's,insists,ian's,harass,gloat,flights,filth,extended,electronic,edgy,diseases,didn,coroner,confessing,cologne,cedar,bruise,betraying,bailing,attempting,appealing,adebisi,wrath,wandered,waist,vain,traps,transportation,stepfather,publicly,presidents,poking,obligated,marshal,lexie's,instructed,heavenly,halt,employed,diplomatic,dilemma,crazed,contagious,coaster,cheering,carved,bundle,approached,appearances,vomit,thingy,stadium,speeches,robbing,reflect,raft,qualify,pumped,pillows,peep,pageant,packs,neo,neglected,m'kay,loneliness,liberal,intrude,indicates,helluva,gardener,freely,forresters,err,drooling,continuing,betcha,alan's,addressed,acquired,vase,supermarket,squat,spitting,spaces,slaves,rhyme,relieve,receipts,racket,purchased,preserve,pictured,pause,overdue,officials,nod,motivation,morgendorffer,lucky's,lacking,kidnapper,introduction,insect,hunters,horns,feminine,eyeballs,dumps,disc,disappointing,difficulties,crock,convertible,context,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,vendetta,tenth,suspense,summoned,stuff's,spiders,sings,reiber,raving,pushy,produced,poverty,postponed,ohhhh,noooo,mold,mice,laughter,incompetent,hugging,groceries,frequency,fastest,drip,differ,daphne's,communicating,body's,beliefs,bats,bases,auntie,adios,wraps,willingly,weirdest,voila,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,quarterback,organic,matched,ledge,justified,insults,increased,heavily,hateful,handles,feared,doorway,decorations,colour,chatting,buyer,buckaroo,bedrooms,batting,askin,ammo,tutoring,subpoena,span,scratching,requests,privileges,pager,mart,kel,intriguing,idiotic,hotels,grape,enlighten,dum,door's,dixie's,demonstrate,dairy,corrupt,combined,brunch,bridesmaid,barking,architect,applause,alongside,ale,acquaintance,yuh,wretched,superficial,sufficient,sued,soak,smoothly,sensing,restraint,quo,pow,posing,pleading,pittsburgh,peru,payoff,participate,organize,oprah,nemo,morals,loans,loaf,lists,laboratory,jumpy,intervention,ignorant,herbal,hangin,germs,generosity,flashing,country's,convent,clumsy,chocolates,captive,bianca's,behaved,apologise,vanity,trials,stumbled,republicans,represented,recognition,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,learns,knots,interviewing,inmates,ingredients,humour,grind,greasy,goons,estimate,elementary,edmund's,drastic,database,coop,comparing,cocky,clearer,bruised,brag,bind,axe,asset,apparent,ann's,worthwhile,whoop,wedding's,vanquishing,tabloids,survivors,stenbeck's,sprung,spotlight,shops,sentencing,sentences,revealing,reduce,ram,racist,provoke,piper's,pining,overly,oui,ops,mop,louisiana,locket,king's,jab,imply,impatient,hovering,hotter,fest,endure,dots,doren,dim,diagnosed,debts,cultures,crawled,contained,condemned,chained,brit,breaths,adds,weirdo,warmed,wand,utah,troubling,tok'ra,stripped,strapped,soaked,skipping,sharon's,scrambled,rattle,profound,musta,mocking,mnh,misunderstand,merit,loading,linked,limousine,kacl,investors,interviewed,hustle,forensic,foods,enthusiastic,duct,drawers,devastating,democrats,conquer,concentration,comeback,clarify,chores,cheerleaders,cheaper,charlie's,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,underwater,tribute,strangled,state's,scheming,ropes,responded,residents,rescuing,rave,priests,postcard,overseas,orientation,ongoing,o'reily,newly,neil's,morphine,lotion,limitations,lesser,lectures,lads,kidneys,judgement,jog,itch,intellectual,installed,infant,indefinitely,grenade,glamorous,genetically,freud,faculty,engineering,doh,discretion,delusions,declaration,crate,competent,commonwealth,catalog,bakery,attempts,asylum,argh,applying,ahhhh,yesterday's,wedge,wager,unfit,tripping,treatments,torment,superhero,stirring,spinal,sorority,seminar,scenery,repairs,rabble,pneumonia,perks,owl,override,ooooh,moo,mija,manslaughter,mailed,love's,lime,lettuce,intimidate,instructor,guarded,grieve,grad,globe,frustration,extensive,exploring,exercises,eve's,doorbell,devices,deal's,dam,cultural,ctu,credits,commerce,chinatown,chemicals,baltimore,authentic,arraignment,annulled,altered,allergies,wanta,verify,vegetarian,tunes,tourist,tighter,telegram,suitable,stalk,specimen,spared,solving,shoo,satisfying,saddam,requesting,publisher,pens,overprotective,obstacles,notified,negro,nasedo,judged,jill's,identification,grandchild,genuinely,founded,flushed,fluids,floss,escaping,ditched,demon's,decorated,criticism,cramp,corny,contribute,connecting,bunk,bombing,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,spelled,sniff,scope,ross's,room's,retrieve,releasing,reassuring,pumps,properties,predicted,neurotic,negotiating,needn't,multi,monitors,millionaire,microphone,mechanical,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,egypt,doubting,dedication,decaf,dawson's,competing,cellular,biopsy,whiz,voluntarily,visible,ventilator,unpack,unload,universal,tomatoes,targets,suggests,strawberry,spooked,snitch,schillinger,sap,reassure,providing,prey,pressure's,persuasive,mystical,mysteries,mri,moment's,mixing,matrimony,mary's,mails,lighthouse,liability,kgb,jock,headline,frankie's,factors,explosive,explanations,dispatch,detailed,curly,cupid,condolences,comrade,cassadines,bulb,brittany's,bragging,awaits,assaulted,ambush,adolescent,adjusted,abort,yank,whit,verse,vaguely,undermine,tying,trim,swamped,stitch,stan's,stabbing,slippers,skye's,sincerely,sigh,setback,secondly,rotting,rev,retail,proceedings,preparation,precaution,pox,pcpd,nonetheless,melting,materials,mar,liaison,hots,hooking,headlines,hag,ganz,fury,felicity,fangs,expelled,encouragement,earring,dreidel,draws,dory,donut,dog's,dis,dictate,dependent,decorating,coordinates,cocktails,bumps,blueberry,believable,backfired,backfire,apron,anticipated,adjusting,activated,vous,vouch,vitamins,vista,urn,uncertain,ummm,tourists,tattoos,surrounding,sponsor,slimy,singles,sibling,shhhh,restored,representative,renting,reign,publish,planets,peculiar,parasite,paddington,noo,marries,mailbox,magically,lovebirds,listeners,knocks,kane's,informant,grain,exits,elf,drazen,distractions,disconnected,dinosaurs,designing,dashwood,crooked,conveniently,contents,argued,wink,warped,underestimated,testified,tacky,substantial,steve's,steering,staged,stability,shoving,seizure,reset,repeatedly,radius,pushes,pitching,pairs,opener,mornings,mississippi,matthew's,mash,investigations,invent,indulge,horribly,hallucinating,festive,eyebrows,expand,enjoys,dictionary,dialogue,desperation,dealers,darkest,daph,critic,consulting,cartman's,canal,boragora,belts,bagel,authorization,auditions,associated,ape,amy's,agitated,adventures,withdraw,wishful,wimp,vehicles,vanish,unbearable,tonic,tom's,tackle,suffice,suction,slaying,singapore,safest,rosanna's,rocking,relive,rates,puttin,prettiest,oval,noisy,newlyweds,nauseous,moi,misguided,mildly,midst,maps,liable,kristina's,judgmental,introducing,individuals,hunted,hen,givin,frequent,fisherman,fascinated,elephants,dislike,diploma,deluded,decorate,crummy,contractions,carve,careers,bottled,bonded,bahamas,unavailable,twenties,trustworthy,translation,traditions,surviving,surgeons,stupidity,skies,secured,salvation,remorse,rafe's,princeton,preferably,pies,photography,operational,nuh,northwest,nausea,napkins,mule,mourn,melted,mechanism,mashed,julia's,inherit,holdings,hel,greatness,golly,excused,edges,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,colleges,cole's,chooses,checkup,chad's,certified,candidates,boredom,bob's,bandages,baldwin's,bah,automobile,athletic,alarms,absorbed,absent,windshield,who're,whaddya,vitamin,transparent,surprisingly,sunglasses,starring,slit,sided,schemes,roar,relatively,reade,quarry,prosecutor,prognosis,probe,potentially,pitiful,persistent,perception,percentage,peas,oww,nosy,neighbourhood,nagging,morons,molecular,meters,masterpiece,martinis,limbo,liars,jax's,irritating,inclined,hump,hoynes,haw,gauge,functions,fiasco,educational,eatin,donated,destination,dense,cubans,continent,concentrating,commanding,colorful,clam,cider,brochure,behaviour,barto,bargaining,awe,artistic,welcoming,weighing,villain,vein,vanquished,striking,stains,sooo,smear,sire,simone's,secondary,roughly,rituals,resentment,psychologist,preferred,pint,pension,passive,overhear,origin,orchestra,negotiations,mounted,morality,landingham,labs,kisser,jackson's,icy,hoot,holling,handshake,grilled,functioning,formality,elevators,edward's,depths,confirms,civilians,bypass,briefly,boathouse,binding,acres,accidental,westbridge,wacko,ulterior,transferring,tis,thugs,tangled,stirred,stefano's,sought,snag,smallest,sling,sleaze,seeds,rumour,ripe,remarried,reluctant,regularly,puddle,promote,precise,popularity,pins,perceptive,miraculous,memorable,maternal,lucinda's,longing,lockup,locals,librarian,job's,inspection,impressions,immoral,hypothetically,guarding,gourmet,gabe,fighters,fees,features,faxed,extortion,expressed,essentially,downright,digest,der,crosses,cranberry,city's,chorus,casualties,bygones,buzzing,burying,bikes,attended,allah,all's,weary,viewing,viewers,transmitter,taping,takeout,sweeping,stepmother,stating,stale,seating,seaborn,resigned,rating,prue's,pros,pepperoni,ownership,occurs,nicole's,newborn,merger,mandatory,malcolm's,ludicrous,jan's,injected,holden's,henry's,heating,geeks,forged,faults,expressing,eddie's,drue,dire,dief,desi,deceiving,centre,celebrities,caterer,calmed,businesses,budge,ashley's,applications,ankles,vending,typing,tribbiani,there're,squared,speculation,snowing,shades,sexist,scudder's,scattered,sanctuary,rewrite,regretted,regain,raises,processing,picky,orphan,mural,misjudged,miscarriage,memorize,marshall's,mark's,licensed,lens,leaking,launched,larry's,languages,judge's,jitters,invade,interruption,implied,illegally,handicapped,glitch,gittes,finer,fewer,engineered,distraught,dispose,dishonest,digs,dahlia's,dads,cruelty,conducting,clinical,circling,champions,canceling,butterflies,belongings,barbrady,amusement,allegations,alias,aging,zombies,where've,unborn,tri,swearing,stables,squeezed,spaulding's,slavery,sew,sensational,revolutionary,resisting,removing,radioactive,races,questionable,privileged,portofino,par,owning,overlook,overhead,orson,oddly,nazis,musicians,interrogate,instruments,imperative,impeccable,icu,hurtful,hors,heap,harley's,graduating,graders,glance,endangered,disgust,devious,destruct,demonstration,creates,crazier,countdown,coffee's,chump,cheeseburger,cat's,burglar,brotherhood,berries,ballroom,assumptions,ark,annoyed,allies,allergy,advantages,admirer,admirable,addresses,activate,accompany,wed,victoria's,valve,underpants,twit,triggered,teacher's,tack,strokes,stool,starr's,sham,seasons,sculpture,scrap,sailed,retarded,resourceful,remarkably,refresh,ranks,pressured,precautions,pointy,obligations,nightclub,mustache,month's,minority,mind's,maui,lace,isabella's,improving,iii,hunh,hubby,flare,fierce,farmers,dont,dokey,divided,demise,demanded,dangerously,crushing,considerable,complained,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,aspect,amazingly,alas,acute,a's,yak,whores,what've,tuition,trey's,tolerance,toilets,tactical,tacos,stairwell,spur,spirited,slower,sewing,separately,rubbed,restricted,punches,protects,partially,ole,nuisance,niagara,motherfuckers,mingle,mia's,kynaston,knack,kinkle,impose,hosting,harry's,gullible,grid,godmother,funniest,friggin,folding,financially,filming,fashions,eater,dysfunctional,drool,distinguished,defence,defeated,cruising,crude,criticize,corruption,contractor,conceive,clone,circulation,cedars,caliber,brighter,blinded,birthdays,bio,bill's,banquet,artificial,anticipate,annoy,achievement,whim,whichever,volatile,veto,vested,uncle's,supports,successfully,shroud,severely,rests,representation,quarantine,premiere,pleases,parent's,painless,pads,orphans,orphanage,offence,obliged,nip,niggers,negotiation,narcotics,nag,mistletoe,meddling,manifest,lookit,loo,lilah,investigated,intrigued,injustice,homicidal,hayward's,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,colby's,cheerful,buyers,brownies,beverage,basics,attorney's,atm,arvin,arcade,weighs,upsets,unethical,tidy,swollen,sweaters,swap,stupidest,sensation,scalpel,rail,prototype,props,prescribed,pompous,poetic,ploy,paws,operates,objections,mushrooms,mulwray,monitoring,manipulation,lured,lays,lasting,kung,keg,jell,internship,insignificant,inmate,incentive,gandhi,fulfilled,flooded,expedition,evolution,discharged,disagreement,dine,dean's,crypt,coroner's,cornered,copied,confrontation,cds,catalogue,brightest,beethoven,banned,attendant,athlete,amaze,airlines,yogurt,wyndemere,wool,vocabulary,vcr,tulsa,tags,tactic,stuffy,slug,sexuality,seniors,segment,revelation,respirator,pulp,prop,producing,processed,pretends,polygraph,perp,pennies,ordinarily,opposition,olives,necks,morally,martyr,martial,lisa's,leftovers,joints,jimmy's,irs,invaded,imported,hopping,homey,hints,helicopters,heed,heated,heartbroken,gulf,greatly,forge,florist,firsthand,fiend,expanding,emma's,defenses,crippled,cousin's,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,apb,answer's,anna's,angles,ache,womb,wiring,wench,weaknesses,volunteering,violating,unlocked,unemployment,tummy,tibet,threshold,surrogate,submarine,subid,stray,stated,startle,specifics,snob,slowing,sled,scoot,robbers,rightful,richest,quid,qfxmjrie,puffs,probable,pitched,pierced,pencils,paralysis,nuke,managing,makeover,luncheon,lords,linksynergy,jury's,jacuzzi,ish,interstate,hitched,historic,hangover,gasp,fracture,flock,firemen,drawings,disgusted,darned,coal,clams,chez,cables,broadcasting,brew,borrowing,banged,achieved,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,senora,rises,retro,quits,pupils,politicians,pegged,painfully,paging,outlet,omelet,observed,ned's,memorized,lawfully,jackets,interpretation,intercept,ingredient,grownup,glued,gaining,fulfilling,flee,enchanted,dvd,delusion,daring,conservative,conducted,compelling,charitable,carton,bronx,bridesmaids,bribed,boiling,bathrooms,bandage,awareness,awaiting,assign,arrogance,antiques,ainsley,turkeys,travelling,trashing,tic,takeover,sync,supervision,stockings,stalked,stabilized,spacecraft,slob,skates,sirs,sedated,robes,reviews,respecting,rat's,psyche,prominent,prizes,presumptuous,prejudice,platoon,permitted,paragraph,mush,mum's,movements,mist,missions,mints,mating,mantan,lorne,lord's,loads,listener,legendary,itinerary,hugs,hepatitis,heave,guesses,gender,flags,fading,exams,examining,elizabeth's,egyptian,dumbest,dishwasher,dimera's,describing,deceive,cunning,cripple,cove,convictions,congressional,confided,compulsive,compromising,burglary,bun,bumpy,brainwashed,benes,arnie,alvy,affirmative,adrenaline,adamant,watchin,waitresses,uncommon,treaty,transgenic,toughest,toby's,surround,stormed,spree,spilling,spectacle,soaking,significance,shreds,sewers,severed,scarce,scamming,scalp,sami's,salem's,rewind,rehearsing,pretentious,potions,possessions,planner,placing,periods,overrated,obstacle,notices,nerds,meems,medieval,mcmurphy,maturity,maternity,masses,maneuver,lyin,loathe,lawyer's,irv,investigators,hep,grin,gospel,gals,formation,fertility,facilities,exterior,epidemic,eloping,ecstatic,ecstasy,duly,divorcing,distribution,dignan,debut,costing,coaching,clubhouse,clot,clocks,classical,candid,bursting,breather,braces,bennett's,bending,australian,attendance,arsonist,applies,adored,accepts,absorb,vacant,uuh,uphold,unarmed,turd,topolsky,thrilling,thigh,terminate,tempo,sustain,spaceship,snore,sneeze,smuggling,shrine,sera,scott's,salty,salon,ramp,quaint,prostitution,prof,policies,patronize,patio,nasa,morbid,marlo's,mamma,locations,licence,kettle,joyous,invincible,interpret,insecurities,insects,inquiry,infamous,impulses,illusions,holed,glen's,fragments,forrester's,exploit,economics,drivin,des,defy,defenseless,dedicate,cradle,cpr,coupon,countless,conjure,confined,celebrated,cardboard,booking,blur,bleach,ban,backseat,austin's,alternatives,afterward,accomplishment,wordsworth,wisely,wildlife,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tit,tennessee,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,provides,prospects,pronto,prevented,powered,posse,poorly,polling,pedestal,palms,muddy,morty,miniature,microscope,merci,margin,lecturing,inject,incriminate,hygiene,hospital's,grapefruit,gazebo,funnier,freight,flooding,equivalent,eliminated,elaine's,dios,deacon's,cuter,continental,container,cons,compensation,clap,cbs,cavity,caves,capricorn,canvas,calculations,bossy,booby,bacteria,aides,zende,winthrop,wider,warrants,valentines,undressed,underage,truthfully,tampered,suffers,stored,statute,speechless,sparkling,sod,socially,sidelines,shrek,sank,roy's,raul's,railing,puberty,practices,pesky,parachute,outrage,outdoors,operated,openly,nominated,motions,moods,lunches,litter,kidnappers,itching,intuition,index,imitation,icky,humility,hassling,gallons,firmly,excessive,evolved,employ,eligible,elections,elderly,drugstore,dosage,disrupt,directing,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,compatible,circumstantial,chimney,bonnie's,blinking,biscuits,belgium,arise,analyzed,admiring,acquire,accounted,willow's,weeping,volumes,views,triad,trashy,transaction,tilt,soothing,slumber,slayers,skirts,siren,ship's,shindig,sentiment,sally's,rosco,riddance,rewarded,quaid,purity,proceeding,pretzels,practiced,politician,polar,panicking,overall,occupation,naming,minimal,mckechnie,massacre,marah's,lovin,leaked,layers,isolation,intruding,impersonating,ignorance,hoop,hamburgers,gwen's,fruits,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,diabetes,detained,democrat,deceived,creeping,craziest,corpses,conned,coincidences,charleston,bums,brussels,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,advances,zillion,watergate,wallpaper,viable,tory's,tenants,telesave,sympathize,sweeter,swam,sup,startin,stages,spencer's,sodas,snowed,sleepover,signor,seein,reviewing,reunited,retainer,restroom,rested,replacing,repercussions,reliving,reef,reconciliation,reconcile,recognise,prevail,preaching,planting,overreact,oof,omen,o'neil,numerous,noose,moustache,morning's,manicure,maids,mah,lorelei's,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,extract,expired,exhausting,exchanged,exceptional,everytime,encountered,disregard,daytime,cooperative,constitutional,cling,chevron,chaperone,buenos,blinding,bitty,beads,battling,badgering,anticipation,advocate,zander's,waterfront,upstanding,unprofessional,unity,unhealthy,undead,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,stretching,strategic,spun,shortage,shooters,sheriff's,shady,senseless,sailors,rewarding,refuge,rapid,rah,pun,propane,pronounced,preposterous,pottery,portable,pigeons,pastry,overhearing,ogre,obscene,novels,negotiable,mtv,morgan's,monthly,loner,leisure,leagues,jogging,jaws,itchy,insinuating,insides,induced,immigration,hospitality,hormone,hilda's,hearst,grandpa's,frequently,forthcoming,fists,fifties,etiquette,endings,elevated,editing,dunk,distinction,disabled,dibs,destroys,despises,desired,designers,deprived,dancers,dah,cuddy,crust,conductor,communists,cloak,circumstance,chewed,casserole,bora,bidder,bearer,assessment,artoo,applaud,appalling,amounts,admissions,withdrawal,weights,vowed,virgins,vigilante,vatican,undone,trench,touchdown,throttle,thaw,tha,testosterone,tailor,symptom,swoop,suited,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,relay,regional,refund,reclaim,rapids,raoul,rags,puzzles,purposely,punks,prosecuted,plaid,pineapple,picturing,pickin,pbs,parasites,offspring,nyah,mysteriously,multiply,mineral,masculine,mascara,laps,kramer's,jukebox,interruptions,hoax,gunfire,gays,furnace,exceptions,engraved,elbows,duplicate,drapes,designated,deliberate,deli,decoy,cub,cryptic,crowds,critics,coupla,convert,conventional,condemn,complicate,combine,colossal,clerks,clarity,cassadine's,byes,brushed,bride's,banished,arrests,argon,andy's,alarmed,worships,versa,uncanny,troop,treasury,transformation,terminated,telescope,technicality,sydney's,sundae,stumble,stripping,shuts,separating,schmuck,saliva,robber,retain,remained,relentless,reconnect,recipes,rearrange,ray's,rainy,psychiatrists,producers,policemen,plunge,plugged,patched,overload,ofc,obtained,obsolete,o'malley,numbered,number's,nay,moth,module,mkay,mindless,menus,lullaby,lotte,leavin,layout,knob,killin,karinsky,irregular,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,epic,encoded,dread,dil,degrassi,dealings,dangers,cushion,console,concluded,casey's,bowel,beginnings,barged,apes,announcing,amanda's,admits,abroad,abide,abandoning,workshop,wonderfully,woak,warfare,wait'll,wad,violate,turkish,tim's,ter,targeted,susan's,suicidal,stayin,sorted,slamming,sketchy,shoplifting,shapes,selected,sarah's,retiring,raiser,quizmaster,pursued,pupkin,profitable,prefers,politically,phenomenon,palmer's,olympics,needless,nature's,mutt,motherhood,momentarily,migraine,lizzie's,lilo,lifts,leukemia,leftover,law's,keepin,idol,hinks,hellhole,h'mm,gowns,goodies,gallon,futures,friction,finale,farms,extraction,entertained,electronics,eighties,earth's,dmv,darker,daniel's,cum,conspiring,consequence,cheery,caps,calf,cadet,builds,benign,barney's,aspects,artillery,apiece,allison's,aggression,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unlimited,unidentified,trivial,transcripts,threatens,textbook,tenant,supervise,superstitious,stricken,stretched,story's,stimulating,steep,statistics,spielberg,sodium,slices,shelves,scratches,saudi,sabotaged,roxy's,retrieval,repressed,relation,rejecting,quickie,promoting,ponies,peeking,paw,paolo,outraged,observer,o'connell,moping,moaning,mausoleum,males,licked,kovich,klutz,iraq,interrogating,interfered,intensive,insulin,infested,incompetence,hyper,horrified,handedly,hacked,guiding,glamour,geoff,gekko,fraid,fractured,formerly,flour,firearms,fend,executives,examiner,evaluate,eloped,duke's,disoriented,delivers,dashing,crystals,crossroads,crashdown,court's,conclude,coffees,cockroach,climate,chipped,camps,brushing,boulevard,bombed,bolts,begs,baths,baptized,astronaut,assurance,anemia,allegiance,aiming,abuela,abiding,workplace,withholding,weave,wearin,weaker,warnings,usa,tours,thesis,terrorism,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,sean's,scram,roasted,roaming,riviera,respectfully,repulsive,recognizes,receiver,psychiatry,provoked,penitentiary,peed,pas,painkillers,oink,norm,ninotchka,muslim,montgomery's,mitzvah,milligrams,mil,midge,marshmallows,markets,macy's,looky,lapse,kubelik,knit,jeb,investments,intellect,improvise,implant,hometown,hanged,handicap,halo,governor's,goa'ulds,giddy,gia's,geniuses,fruitcake,footing,flop,findings,fightin,fib,editorial,drinkin,doork,discovering,detour,danish,cuddle,crashes,coordinate,combo,colonnade,collector,cheats,cetera,canadians,bip,bailiff,auditioning,assed,amused,alienate,algebra,alexi,aiding,aching,woe,wah,unwanted,typically,tug,topless,tongues,tiniest,them's,symbols,superiors,soy,soften,sheldrake,sensors,seller,seas,ruler,rival,rips,renowned,recruiting,reasoning,rawley,raisins,racial,presses,preservation,portfolio,oversight,organizing,obtain,observing,nessa,narrowed,minions,midwest,meth,merciful,manages,magistrate,lawsuits,labour,invention,intimidating,infirmary,indicated,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foremost,foolproof,folder,folded,flattery,fingertips,financing,fifteenth,exterminator,explodes,eccentric,drained,dodging,documented,disguised,developments,currency,crafts,constructive,concealed,compartment,chute,chinpokomon,captains,capitol,calculated,buses,bodily,astronauts,alimony,accustomed,accessories,abdominal,zen,zach's,wrinkle,wallow,viv,vicinity,venue,valued,valium,valerie's,upgrade,upcoming,untrue,uncover,twig,twelfth,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,tar,talker,succubus,statues,smarts,sliding,sizes,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ricky's,rican,revive,recruit,ratted,rationally,provenance,professors,prestigious,pms,phonse,perky,pedal,overdose,organism,nasal,nanites,mushy,movers,moot,missus,midterm,merits,melodramatic,manure,magnetic,knockout,knitting,jig,invading,interpol,incapacitated,idle,hotline,horse's,highlight,hauling,hair's,gunpoint,greenwich,grail,ganza,framing,formally,fleeing,flap,flannel,fin,fibers,faded,existing,email,eavesdrop,dwelling,dwarf,donations,detected,desserts,dar,corporations,constellation,collision,chic,calories,businessmen,buchanan's,breathtaking,bleak,blacked,batter,balanced,ante,aggravated,agencies,abu,yanked,wuh,withdrawn,wigand,whoah,wham,vocal,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stationed,stared,slapping,sincerity,signatures,siding,siblings,shit's,shenanigans,shacking,seer,satellites,sappy,samaritan,rune,regained,rebellion,proceeds,privy,power's,poorer,politely,paste,oysters,overruled,olaf,nightcap,networks,necessity,mosquito,millimeter,michelle's,merrier,massachusetts,manuscript,manufacture,manhood,lunar,lug,lucked,loaned,kilos,ignition,hurl,hauled,harmed,goodwill,freshmen,forming,fenmore,fasten,farce,failures,exploding,erratic,elm,drunks,ditching,d'artagnan,crops,cramped,contacting,coalition,closets,clientele,chimp,cavalry,casa,cabs,bled,bargained,arranging,archives,anesthesia,amuse,altering,afternoons,accountable,abetting,wrinkles,wolek,waved,unite,uneasy,unaware,ufo,toot,toddy,tens,tattooed,tad's,sway,stained,spauldings,solely,sliced,sirens,schibetta,scatter,rumours,roger's,robbie's,rinse,remo,remedy,redemption,queen's,progressive,pleasures,picture's,philosopher,pacey's,optimism,oblige,natives,muy,measuring,measured,masked,mascot,malicious,mailing,luca,lifelong,kosher,koji,kiddies,judas,isolate,intercepted,insecurity,initially,inferior,incidentally,ifs,hun,heals,headlights,guided,growl,grilling,glazed,gem,gel,gaps,fundamental,flunk,floats,fiery,fairness,exercising,excellency,evenings,ere,enrolled,disclosure,det,department's,damp,curling,cupboard,counterfeit,cooling,condescending,conclusive,clicked,cleans,cholesterol,chap,cashed,brow,broccoli,brats,blueprints,blindfold,biz,billing,barracks,attach,aquarium,appalled,altitude,alrighty,aimed,yawn,xander's,wynant,winslow's,welcomed,violations,upright,unsolved,unreliable,toots,tighten,symbolic,sweatshirt,steinbrenner,steamy,spouse,sox,sonogram,slowed,slots,sleepless,skeleton,shines,roles,retaliate,representatives,rephrase,repeated,renaissance,redeem,rapidly,rambling,quilt,quarrel,prying,proverbial,priced,presiding,presidency,prescribe,prepped,pranks,possessive,plaintiff,philosophical,pest,persuaded,perk,pediatrics,paige's,overlooked,outcast,oop,odor,notorious,nightgown,mythology,mumbo,monitored,mediocre,master's,mademoiselle,lunchtime,lifesaver,legislation,leaned,lambs,lag,killings,interns,intensity,increasing,identities,hounding,hem,hellmouth,goon,goner,ghoul,germ,gardening,frenzy,foyer,food's,extras,extinct,exhibition,exaggerate,everlasting,enlightened,drilling,doubles,digits,dialed,devote,defined,deceitful,d'oeuvres,csi,cosmetic,contaminated,conspired,conning,colonies,cerebral,cavern,cathedral,carving,butting,boiled,blurry,beams,barf,babysit,assistants,ascension,architecture,approaches,albums,albanian,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,veteran,vacations,upfront,unresolved,tile,tampering,struggled,stockholders,specially,snaps,sleepwalking,shrunk,sermon,seeks,seduction,scenarios,scams,ridden,revolve,repaired,regulation,reasonably,reactor,quotes,preserved,phenomenal,patrolling,paranormal,ounces,omigod,offs,nonstop,nightfall,nat,militia,meeting's,logs,lineup,libby's,lava,lashing,labels,kilometers,kate's,invites,investigative,innocents,infierno,incision,import,implications,humming,highlights,haunts,greeks,gloss,gloating,general's,frannie,flute,fled,fitted,finishes,fiji,fetal,feeny,entrapment,edit,dyin,download,discomfort,dimensions,detonator,dependable,deke,decree,dax,cot,confiscated,concludes,concede,complication,commotion,commence,chulak,caucasian,casually,canary,brainer,bolie,ballpark,arm's,anwar,anatomy,analyzing,accommodations,yukon,youse,wring,wharf,wallowing,uranium,unclear,treason,transgenics,thrive,think's,thermal,territories,tedious,survives,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,sic,shifting,shattering,shabby,seams,scrawny,rotation,risen,revoked,residue,reeks,recite,reap,ranting,quoting,primal,pressures,predicament,precision,plugs,pits,pinpoint,petrified,petite,persona,pathological,passports,oughtta,nods,nighter,navigate,nashville,namely,museums,morale,milwaukee,meditation,mathematics,martin's,malta,logan's,latter,kippie,jackie's,intrigue,intentional,insufferable,incomplete,inability,imprisoned,hup,hunky,how've,horrifying,hearty,headmaster,hath,har,hank's,handbook,hamptons,grazie,goof,george's,funerals,fuck's,fraction,forks,finances,fetched,excruciating,enjoyable,enhanced,enhance,endanger,efficiency,dumber,drying,diabolical,destroyer,desirable,defendants,debris,darts,cuisine,cucumber,cube,crossword,contestant,considers,comprehend,club's,clipped,classmates,choppers,certificates,carmen's,canoe,candlelight,building's,brutally,brutality,boarded,bathrobe,backward,authorize,audrey's,atom,assemble,appeals,airports,aerobics,ado,abbott's,wholesome,whiff,vessels,vermin,varsity,trophies,trait,tragically,toying,titles,tissues,testy,team's,tasteful,surge,sun's,studios,strips,stocked,stephen's,staircase,squares,spinach,sow,southwest,southeast,sookie's,slayer's,sipping,singers,sidetracked,seldom,scrubbing,scraping,sanctity,russell's,ruse,robberies,rink,ridin,retribution,reinstated,refrain,rec,realities,readings,radiant,protesting,projector,posed,plutonium,plaque,pilar's,payin,parting,pans,o'reilly,nooooo,motorcycles,motherfucking,mein,measly,marv,manic,line's,lice,liam,lenses,lama,lalita,juggling,jerking,jamie's,intro,inevitably,imprisonment,hypnosis,huddle,horrendous,hobbies,heavier,heartfelt,harlin,hairdresser,grub,gramps,gonorrhea,gardens,fussing,fragment,fleeting,flawless,flashed,fetus,exclusively,eulogy,equality,enforce,distinctly,disrespectful,denies,crossbow,crest,cregg,crabs,cowardly,countess,contrast,contraction,contingency,consulted,connects,confirming,condone,coffins,cleansing,cheesecake,certainty,captain's,cages,c'est,briefed,brewing,bravest,bosom,boils,binoculars,bachelorette,aunt's,atta,assess,appetizer,ambushed,alerted,woozy,withhold,weighed,vulgar,viral,utmost,unusually,unleashed,unholy,unhappiness,underway,uncovered,unconditional,typewriter,typed,twists,sweeps,supervised,supermodel,suburbs,subpoenaed,stringing,snyder's,snot,skeptical,skateboard,shifted,secret's,scottish,schoolgirl,romantically,rocked,revoir,reviewed,respiratory,reopen,regiment,reflects,refined,puncture,pta,prone,produces,preach,pools,polished,pods,planetarium,penicillin,peacefully,partner's,nurturing,nation's,more'n,monastery,mmhmm,midgets,marklar,machinery,lodged,lifeline,joanna's,jer,jellyfish,infiltrate,implies,illegitimate,hutch,horseback,henri,heist,gents,frickin,freezes,forfeit,followers,flakes,flair,fathered,fascist,eternally,eta,epiphany,enlisted,eleventh,elect,effectively,dos,disgruntled,discrimination,discouraged,delinquent,decipher,danvers,dab,cubes,credible,coping,concession,cnn,clash,chills,cherished,catastrophe,caretaker,bulk,bras,branches,bombshell,birthright,billionaire,awol,ample,alumni,affections,admiration,abbotts,zelda's,whatnot,watering,vinegar,vietnamese,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,transmitted,traits,timeless,thump,thermometer,theoretically,theoretical,testament,tapping,tagged,tac,synthetic,syndicate,swung,surplus,supplier,stares,spiked,soviets,solves,smuggle,scheduling,scarier,saucer,reinforcements,recruited,rant,quitter,prudent,projection,previously,powdered,poked,pointers,placement,peril,penetrate,penance,patriotic,passions,opium,nudge,nostrils,nevermind,neurological,muslims,mow,momentum,mockery,mobster,mining,medically,magnitude,maggie's,loudly,listing,killer's,kar,jim's,insights,indicted,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,graphic,gloom,geography,gary's,freshly,francs,formidable,flunked,flawed,feminist,faux,ewww,escorted,escapes,emptiness,emerge,drugging,dozer,doc's,directorate,diana's,derevko,deprive,deodorant,cryin,crusade,crocodile,creativity,controversial,commands,coloring,colder,cognac,clocked,clippings,christine's,chit,charades,chanting,certifiable,caterers,brute,brochures,briefs,bran,botched,blinders,bitchin,bauer's,banter,babu,appearing,adequate,accompanied,abrupt,abdomen,zones,wooo,woken,winding,vip,venezuela,unanimous,ulcer,tread,thirteenth,thankfully,tame,tabby's,swine,swimsuit,swans,suv,stressing,steaming,stamped,stabilize,squirm,spokesman,snooze,shuffle,shredded,seoul,seized,seafood,scratchy,savor,sadistic,roster,rica,rhetorical,revlon,realist,reactions,prosecuting,prophecies,prisons,precedent,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,naval,mute,muster,muck,minnesota,meningitis,matron,mastered,markers,maris's,manufactured,lot's,lockers,letterman,legged,launching,lanes,journals,indictment,indicating,hypnotized,housekeeping,hopelessly,hmph,hallucinations,grader,goldilocks,girly,furthermore,frames,flask,expansion,envelopes,engaging,downside,doves,doorknob,distinctive,dissolve,discourage,disapprove,diabetic,departed,deliveries,decorator,deaq,crossfire,criminally,containment,comrades,complimentary,commitments,chum,chatter,chapters,catchy,cashier,cartel,caribou,cardiologist,bull's,buffer,brawl,bowls,booted,boat's,billboard,biblical,barbershop,awakening,aryan,angst,administer,acquitted,acquisition,aces,accommodate,zellie,yield,wreak,witch's,william's,whistles,wart,vandalism,vamps,uterus,upstate,unstoppable,unrelated,understudy,tristin,transporting,transcript,tranquilizer,trails,trafficking,toxins,tonsils,timing's,therapeutic,tex,subscription,submitted,stephanie's,stempel,spotting,spectator,spatula,soho,softer,snotty,slinging,showered,sexiest,sensual,scoring,sadder,roam,rimbaud,rim,rewards,restrain,resilient,remission,reinstate,rehash,recollection,rabies,quinn's,presenting,preference,prairie,popsicle,plausible,plantation,pharmaceutical,pediatric,patronizing,patent,participation,outdoor,ostrich,ortolani,oooooh,omelette,neighbor's,neglect,nachos,movie's,mixture,mistrial,mio,mcginty's,marseilles,mare,mandate,malt,luv,loophole,literary,liberation,laughin,lacey's,kevvy,jah,irritated,intends,initiation,initiated,initiate,influenced,infidelity,indigenous,inc,idaho,hypothermia,horrific,hive,heroine,groupie,grinding,graceful,government's,goodspeed,gestures,gah,frantic,extradition,evil's,engineers,echelon,earning,disks,discussions,demolition,definitive,dawnie,dave's,date's,dared,dan's,damsel,curled,courtyard,constitutes,combustion,collective,collateral,collage,col,chant,cassette,carol's,carl's,calculating,bumping,britain,bribes,boardwalk,blinds,blindly,bleeds,blake's,bickering,beasts,battlefield,bankruptcy,backside,avenge,apprehended,annie's,anguish,afghanistan,acknowledged,abusing,youthful,yells,yanking,whomever,when'd,waterfall,vomiting,vine,vengeful,utility,unpacking,unfamiliar,undying,tumble,trolls,treacherous,todo,tipping,tantrum,tanked,summons,strategies,straps,stomped,stinkin,stings,stance,staked,squirrels,sprinkles,speculate,specialists,sorting,skinned,sicko,sicker,shootin,shep,shatter,seeya,schnapps,s'posed,rows,rounded,ronee,rite,revolves,respectful,resource,reply,rendered,regroup,regretting,reeling,reckoned,rebuilding,randy's,ramifications,qualifications,pulitzer,puddy,projections,preschool,pots,potassium,plissken,platonic,peter's,permalash,performer,peasant,outdone,outburst,ogh,obscure,mutants,mugging,molecules,misfortune,miserably,miraculously,medications,medals,margaritas,manpower,lovemaking,long's,logo,logically,leeches,latrine,lamps,lacks,kneel,johnny's,jenny's,inflict,impostor,icon,hypocrisy,hype,hosts,hippies,heterosexual,heightened,hecuba's,hecuba,healer,habitat,gunned,grooming,groo,groin,gras,gory,gooey,gloomy,frying,friendships,fredo,foil,fishermen,firepower,fess,fathom,exhaustion,evils,epi,endeavor,ehh,eggnog,dreaded,drafted,dimensional,detached,deficit,d'arcy,crotch,coughing,coronary,cookin,contributed,consummate,congrats,concerts,companionship,caved,caspar,bulletproof,bris,brilliance,breakin,brash,blasting,beak,arabia,analyst,aluminum,aloud,alligator,airtight,advising,advertise,adultery,administered,aches,abstract,aahh,wronged,wal,voluntary,ventilation,upbeat,uncertainty,trot,trillion,tricia's,trades,tots,tol,tightly,thingies,tending,technician,tarts,surreal,summer's,strengths,specs,specialize,spat,spade,slogan,sloane's,shrew,shaping,seth's,selves,seemingly,schoolwork,roomie,requirements,redundant,redo,recuperating,recommendations,ratio,rabid,quart,pseudo,provocative,proudly,principal's,pretenses,prenatal,pillar,photographers,photographed,pharmaceuticals,patron,pacing,overworked,originals,nicotine,newsletter,neighbours,murderous,miller's,mileage,mechanics,mayonnaise,massages,maroon,lucrative,losin,lil,lending,legislative,kat,juno,iran,interrogated,instruction,injunction,impartial,homing,heartbreaker,harm's,hacks,glands,giver,fraizh,flows,flips,flaunt,excellence,estimated,espionage,englishman,electrocuted,eisenhower,dusting,ducking,drifted,donna's,donating,dom,distribute,diem,daydream,cylon,curves,crutches,crates,cowards,covenant,converted,contributions,composed,comfortably,cod,cockpit,chummy,chitchat,childbirth,charities,businesswoman,brood,brewery,bp's,blatant,bethy,barring,bagged,awakened,assumes,assembled,asbestos,arty,artwork,arc,anthony's,aka,airplanes,accelerated,worshipped,winnings,why're,whilst,wesley's,volleyball,visualize,unprotected,unleash,unexpectedly,twentieth,turnpike,trays,translated,tones,three's,thicker,therapists,takeoff,sums,stub,streisand,storm's,storeroom,stethoscope,stacked,sponsors,spiteful,solutions,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,scholar,ruptured,rubs,roaring,relying,reflected,refers,receptionist,recap,reborn,raisin,rainforest,rae's,raditch,radiator,pushover,pout,plastered,pharmacist,petroleum,perverse,perpetrator,passages,ornament,ointment,occupy,nineties,napping,nannies,mousse,mort,morocco,moors,momentary,modified,mitch's,misunderstandings,marina's,marcy's,marched,manipulator,malfunction,loot,limbs,latitude,lapd,laced,kivar,kickin,interface,infuriating,impressionable,imposing,holdup,hires,hick,hesitated,hebrew,hearings,headphones,hammering,groundwork,grotesque,greenhouse,gradually,graces,genetics,gauze,garter,gangsters,g's,frivolous,freelance,freeing,fours,forwarding,feud,ferrars,faulty,fantasizing,extracurricular,exhaust,empathy,educate,divorces,detonate,depraved,demeaning,declaring,deadlines,dea,daria's,dalai,cursing,cufflink,crows,coupons,countryside,coo,consultation,composer,comply,comforted,clive,claustrophobic,chef's,casinos,caroline's,capsule,camped,cairo,busboy,bred,bravery,bluth,biography,berserk,bennetts,baskets,attacker,aplastic,angrier,affectionate,zit,zapped,yorker,yarn,wormhole,weaken,vat,unrealistic,unravel,unimportant,unforgettable,twain,tv's,tush,turnout,trio,towed,tofu,textbooks,territorial,suspend,supplied,superbowl,sundays,stutter,stewardess,stepson,standin,sshh,specializes,spandex,souvenirs,sociopath,snails,slope,skeletons,shivering,sexier,sequel,sensory,selfishness,scrapbook,romania,riverside,rites,ritalin,rift,ribbons,reunite,remarry,relaxation,reduction,realization,rattling,rapist,quad,pup,psychosis,promotions,presumed,prepping,posture,poses,pleasing,pisses,piling,photographic,pfft,persecuted,pear,part's,pantyhose,padded,outline,organizations,operatives,oohh,obituary,northeast,nina's,neural,negotiator,nba,natty,nathan's,minimize,merl,menopause,mennihan,marty's,martimmys,makers,loyalties,literal,lest,laynie,lando,justifies,josh's,intimately,interact,integrated,inning,inexperienced,impotent,immortality,imminent,ich,horrors,hooky,holders,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,functional,filmmaker,ferragamo,feeble,eyesight,explosions,experimenting,enzo's,endorsement,enchanting,eee,ed's,duration,doubtful,dizziness,dismantle,disciplinary,disability,detectors,deserving,depot,defective,decor,decline,dangling,dancin,crumble,criteria,creamed,cramping,cooled,conceal,component,competitors,clockwork,clark's,circuits,chrissakes,chrissake,chopping,cabinets,buttercup,brooding,bonfire,blurt,bluestar,bloated,blackmailer,beforehand,bathed,bathe,barcode,banjo,banish,badges,babble,await,attentive,artifacts,aroused,antibodies,animosity,administrator,accomplishments,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vis,vin,vila,vigilant,upbringing,unselfish,unpopular,unmarried,uncles,trendy,trajectory,targeting,surroundings,stun,striped,starbucks,stamina,stalled,staking,stag,spoils,snuff,snooty,snide,shrinking,senorita,securities,secretaries,scrutiny,scoundrel,saline,salads,sails,rundown,roz's,roommate's,riddles,responses,resistant,requirement,relapse,refugees,recommending,raspberry,raced,prosperity,programme,presumably,preparations,posts,pom,plight,pleaded,pilot's,peers,pecan,particles,pantry,overturned,overslept,ornaments,opposing,niner,nfl,negligent,negligence,nailing,mutually,mucho,mouthed,monstrous,monarchy,minsk,matt's,mateo's,marking,manufacturing,manager's,malpractice,maintaining,lowly,loitering,logged,lingering,light's,lettin,lattes,kim's,kamal,justification,juror,junction,julie's,joys,johnson's,jillefsky,jacked,irritate,intrusion,inscription,insatiable,infect,inadequate,impromptu,icing,hmmmm,hefty,grammar,generate,gdc,gasket,frightens,flapping,firstborn,fire's,fig,faucet,exaggerated,estranged,envious,eighteenth,edible,downward,dopey,doesn,disposition,disposable,disasters,disappointments,dipped,diminished,dignified,diaries,deported,deficiency,deceit,dealership,deadbeat,curses,coven,counselors,convey,consume,concierge,clutches,christians,cdc,casbah,carefree,callous,cahoots,caf,brotherly,britches,brides,bop,bona,bethie,beige,barrels,ballot,ave,autographed,attendants,attachment,attaboy,astonishing,ashore,appreciative,antibiotic,aneurysm,afterlife,affidavit,zuko,zoning,work's,whats,whaddaya,weakened,watermelon,vasectomy,unsuspecting,trial's,trailing,toula,topanga,tonio,toasted,tiring,thereby,terrorized,tenderness,tch,tailing,syllable,sweats,suffocated,sucky,subconsciously,starvin,staging,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,siege,siberia,seventies,sedate,scented,sampling,sal's,rowdy,rollers,rodent,revenue,retraction,resurrection,resigning,relocate,releases,refusal,referendum,recuperate,receptive,ranking,racketeering,queasy,proximity,provoking,promptly,probability,priors,princes,prerogative,premed,pornography,porcelain,poles,podium,pinched,pig's,pendant,packet,owner's,outsiders,outpost,orbing,opportunist,olanov,observations,nurse's,nobility,neurologist,nate's,nanobot,muscular,mommies,molested,misread,melon,mediterranean,mea,mastermind,mannered,maintained,mackenzie's,liberated,lesions,lee's,laundromat,landscape,lagoon,labeled,jolt,intercom,inspect,insanely,infrared,infatuation,indulgent,indiscretion,inconsiderate,incidents,impaired,hurrah,hungarian,howling,honorary,herpes,hasta,harassed,hanukkah,guides,groveling,groosalug,geographic,gaze,gander,galactica,futile,fridays,flier,fixes,fide,fer,feedback,exploiting,exorcism,exile,evasive,ensemble,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,displayed,disobeyed,disneyland,disable,diego's,dehydrated,defect,customary,csc,criticizing,contracted,contemplating,consists,concepts,compensate,commonly,colours,coins,coconuts,cockroaches,clogged,cincinnati,churches,chronicle,chilling,chaperon,ceremonies,catalina's,cant,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bobby's,bmw,bluepoint,baton,barred,balm,audit,astronomy,aruba,appetizers,appendix,antics,anointed,analogy,almonds,albuquerque,abruptly,yore,yammering,winch,white's,weston's,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,tres,travesty,transported,transfusion,trainee,towelie,topics,tock,tiresome,thru,theatrical,terrain,suspect's,straightening,staggering,spaced,sonar,socializing,sitcom,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,rouge,rigid,ridiculously,ridicule,reveals,rents,reflecting,reconciled,rate's,radios,quota,quixote,publicist,pubes,prune,prude,provider,propaganda,prolonged,projecting,prestige,precrime,postponing,pluck,perpetual,permits,perish,peppermint,peeled,particle,parliament,overdo,oriented,optional,nutshell,notre,notions,nostalgic,nomination,mulan,mouthing,monkey's,mistook,mis,milhouse,mel's,meddle,maybourne,martimmy,loon,lobotomy,livelihood,litigation,lippman,likeness,laurie's,kindest,kare,kaffee,jocks,jerked,jeopardizing,jazzed,investing,insured,inquisition,inhale,ingenious,inflation,incorrect,igby,ideals,holier,highways,hereditary,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,governments,goofing,godson,glare,garment,founding,fortunes,foe,finesse,figuratively,ferrie,fda,external,examples,evacuation,ethnic,est,endangerment,enclosed,emphasis,dyed,dud,dreading,dozed,dorky,dmitri,divert,dissertation,discredit,director's,dialing,describes,decks,cufflinks,crutch,creator,craps,corrupted,coronation,contemporary,consumption,considerably,comprehensive,cocoon,cleavage,chile,carriers,carcass,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,bart's,barracuda,baroness,ballistics,b's,astute,arroway,arabian,ambitions,alexandra's,afar,adventurous,adoptive,addicts,addictive,accessible,yadda,wilson's,wigs,whitelighters,wematanye,weeds,wedlock,wallets,walker's,vulnerability,vroom,vibrant,vertical,vents,uuuh,urgh,upped,unsettling,unofficial,unharmed,underlying,trippin,trifle,tracing,tox,tormenting,timothy's,threads,theaters,thats,tavern,taiwan,syphilis,susceptible,summary,suites,subtext,stickin,spices,sores,smacked,slumming,sixteenth,sinks,signore,shitting,shameful,shacked,sergei,septic,seedy,security's,searches,righteousness,removal,relish,relevance,rectify,recruits,recipient,ravishing,quickest,pupil,productions,precedence,potent,pooch,pledged,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,overlooking,outnumbered,outlook,oregano,offender,nukes,novelty,nosed,nighty,nifty,mugs,mounties,motivate,moons,misinterpreted,miners,mercenary,mentality,mas,marsellus,mapped,malls,lupus,lumbar,lovesick,longitude,lobsters,likelihood,leaky,laundering,latch,japs,jafar,instinctively,inspires,inflicted,inflammation,indoors,incarcerated,imagery,hundredth,hula,hemisphere,handkerchief,hand's,gynecologist,guittierez,groundhog,grinning,graduates,goodbyes,georgetown,geese,fullest,ftl,floral,flashback,eyelashes,eyelash,excluded,evening's,evacuated,enquirer,endlessly,encounters,elusive,disarm,detest,deluding,dangle,crabby,cotillion,corsage,copenhagen,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,christina's,cheeseburgers,chardonnay,ceremonial,cept,cello,celery,carter's,campfire,calming,burritos,burp,buggy,brundle,broflovski,brighten,bows,borderline,blinked,bling,beauties,bauers,battered,athletes,assisting,articulate,alot,alienated,aleksandr,ahhhhh,agreements,agamemnon,accountants,zat,y'see,wrongful,writer's,wrapper,workaholic,wok,winnebago,whispered,warts,vikki's,verified,vacate,updated,unworthy,unprecedented,unanswered,trend,transformed,transform,trademark,tote,tonane,tolerated,throwin,throbbing,thriving,thrills,thorns,thereof,there've,terminator,tendencies,tarot,tailed,swab,sunscreen,stretcher,stereotype,spike's,soggy,sobbing,slopes,skis,skim,sizable,sightings,shucks,shrapnel,sever,senile,sections,seaboard,scripts,scorned,saver,roxanne's,resemble,red's,rebellious,rained,putty,proposals,prenup,positioned,portuguese,pores,pinching,pilgrims,pertinent,peeping,pamphlet,paints,ovulating,outbreak,oppression,opposites,occult,nutcracker,nutcase,nominee,newt,newsstand,newfound,nepal,mocked,midterms,marshmallow,manufacturer,managers,majesty's,maclaren,luscious,lowered,loops,leans,laurence's,krudski,knowingly,keycard,katherine's,junkies,juilliard,judicial,jolinar,jase,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,induce,incubator,illustrious,hydrogen,hunsecker,hub,houseguest,honk,homosexuals,homeroom,holly's,hindu,hernia,harming,handgun,hallways,hallucination,gunshots,gums,guineas,groupies,groggy,goiter,gingerbread,giggling,geometry,genre,funded,frontal,frigging,fledged,fedex,feat,fairies,eyeball,extending,exchanging,exaggeration,esteemed,ergo,enlist,enlightenment,encyclopedia,drags,disrupted,dispense,disloyal,disconnect,dimitri,desks,dentists,delhi,delacroix,degenerate,deemed,decay,daydreaming,cushions,cuddly,corroborate,contender,congregation,conflicts,confessions,complexion,completion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,bud's,benefactor,belonging,ballgame,baiting,backstabbing,assassins,artifact,armies,appoint,anthropology,anthropologist,alzheimer's,allegedly,alex's,airspace,adversary,adolf,actin,acre,aced,accuses,accelerant,abundantly,abstinence,abc,zsa,zissou,zandt,yom,yapping,wop,witchy,winter's,willows,whee,whadaya,want's,walter's,waah,viruses,vilandra,veiled,unwilling,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,traditionally,touring,touche,toasting,tingling,tiles,tents,tempered,sussex,sulking,stunk,stretches,sponges,spills,softly,snipers,slid,sedan,screens,scourge,rooftop,rog,rivalry,rifles,riana,revolting,revisit,resisted,rejects,refreshments,redecorating,recurring,recapture,raysy,randomly,purchases,prostitutes,proportions,proceeded,prevents,pretense,prejudiced,precogs,pouting,poppie,poofs,pimple,piles,pediatrician,patrick's,pathology,padre,packets,paces,orvelle,oblivious,objectivity,nikki's,nighttime,nervosa,navigation,moist,moan,minors,mic,mexicans,meurice,melts,mau,mats,matchmaker,markings,maeby,lugosi,lipnik,leprechaun,kissy,kafka,italians,introductions,intestines,intervene,inspirational,insightful,inseparable,injections,informal,influential,inadvertently,illustrated,hussy,huckabees,hmo,hittin,hiss,hemorrhaging,headin,hazy,haystack,hallowed,haiti,haa,grudges,grenades,granilith,grandkids,grading,gracefully,godsend,gobbles,fyi,future's,fun's,fret,frau,fragrance,fliers,firms,finchley,fbi's,farts,eyewitnesses,expendable,existential,endured,embraced,elk,ekg,dude's,dragonfly,dorms,domination,directory,depart,demonstrated,delaying,degrading,deduction,darlings,dante's,danes,cylons,counsellor,cortex,cop's,coordinator,contraire,consensus,consciously,conjuring,congratulating,compares,commentary,commandant,cokes,centimeters,cc's,caucus,casablanca,buffay,buddy's,brooch,bony,boggle,blood's,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,arr,aptitude,antenna,amish,amazes,alcatraz,acquisitions,abomination,worldly,woodstock,withstand,whispers,whadda,wayward,wayne's,wailing,vinyl,variables,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,tuning,trite,transvestite,toupee,timid,timers,themes,terrorizing,teamed,taipei,t's,swana,surrendered,suppressed,suppress,stumped,strolling,stripe,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,sponsored,spits,spins,soiree,sociology,soaps,smarty,shootout,shar,settings,sentiments,senator's,scramble,scouting,scone,runners,rooftops,retract,restrictions,residency,replay,remainder,regime,reflexes,recycling,rcmp,rawdon,ragged,quirky,quantico,psychologically,prodigal,primo,pounce,potty,portraits,pleasantries,plane's,pints,phd,petting,perceive,patrons,parameters,outright,outgoing,onstage,officer's,o'connor,notwithstanding,noah's,nibble,newmans,neutralize,mutilated,mortality,monumental,ministers,millionaires,mentions,mcdonald's,mayflower,masquerade,mangy,macreedy,lunatics,luau,lover's,lovable,louie's,locating,lizards,limping,lasagna,largely,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,installation,increases,incantation,identifying,hysteria,hypnotize,humping,heavyweight,happenin,gung,griet,grasping,glorified,glib,ganging,g'night,fueled,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fictional,fearing,fainting,eyebrow,exonerated,ether,ers,electrician,egotistical,earthly,dusted,dues,donors,divisions,distinguish,displays,dismissal,dignify,detonation,deploy,departments,debrief,dazzling,dawn's,dan'l,damnedest,daisies,crushes,crucify,cordelia's,controversy,contraband,contestants,confronting,communion,collapsing,cocked,clock's,clicks,cliche,circular,circled,chord,characteristics,chandelier,casualty,carburetor,callers,bup,broads,breathes,boca,bobbie's,bloodshed,blindsided,blabbing,binary,bialystock,bashing,ballerina,ball's,aviva,avalanche,arteries,appliances,anthem,anomaly,anglo,airstrip,agonizing,adjourn,abandonment,zack's,you's,yearning,yams,wrecker,word's,witnessing,winged,whence,wept,warsaw,warp,warhead,wagons,visibility,usc,unsure,unions,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,tolerant,toddler,tiptoe,threesome,thirties,thermostat,tampa,sycamore,switches,swipe,surgically,supervising,subtlety,stung,stumbling,stubs,struggles,stride,strangling,stamp's,spruce,sprayed,socket,snuggle,smuggled,skulls,simplicity,showering,shhhhh,sensor,sci,sac,sabotaging,rumson,rounding,risotto,riots,revival,responds,reserves,reps,reproduction,repairman,rematch,rehearsed,reelection,redi,recognizing,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,pyramids,pulmonary,puh,publication,prowl,provisions,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,perceived,peeked,peddle,pasture,panting,overweight,oversee,overrun,outing,outgrown,obsess,o'donnell,nyu,nursed,northwestern,norma's,nodding,negativity,negatives,musketeers,mugger,mounting,motorcade,monument,merrily,matured,massimo's,masquerading,marvellous,marlena's,margins,maniacs,mag,lumpy,lovey,louse,linger,lilies,libido,lawful,kudos,knuckle,kitchen's,kennedy's,juices,judgments,joshua's,jars,jams,jamal's,jag,itches,intolerable,intermission,interaction,institutions,infectious,inept,incentives,incarceration,improper,implication,imaginative,ight,hussein,humanitarian,huckleberry,horatio,holster,heiress,heartburn,hayley's,hap,gunna,guitarist,groomed,greta's,granting,graciously,glee,gentleman's,fulfillment,fugitives,fronts,founder,forsaking,forgives,foreseeable,flavors,flares,fixation,figment,fickle,featuring,featured,fantasize,famished,faith's,fades,expiration,exclamation,evolve,euro,erasing,emphasize,elevator's,eiffel,eerie,earful,duped,dulles,distributor,distorted,dissing,dissect,dispenser,dilated,digit,differential,diagnostic,detergent,desdemona,debriefing,dazzle,damper,cylinder,curing,crowbar,crispina,crafty,crackpot,courting,corrections,cordial,copying,consuming,conjunction,conflicted,comprehension,commie,collects,cleanup,chiropractor,charmer,chariot,charcoal,chaplain,challenger,census,cd's,cauldron,catatonic,capabilities,calculate,bullied,buckets,brilliantly,breathed,boss's,booths,bombings,boardroom,blowout,blower,blip,blindness,blazing,birthday's,biologically,bibles,biased,beseech,barbaric,band's,balraj,auditorium,audacity,assisted,appropriations,applicants,anticipating,alcoholics,airhead,agendas,aft,admittedly,adapt,absolution,abbot,zing,youre,yippee,wittlesey,withheld,willingness,willful,whammy,webber's,weakest,washes,virtuous,violently,videotapes,vials,vee,unplugged,unpacked,unfairly,und,turbulence,tumbling,troopers,tricking,trenches,tremendously,travelled,travelers,traitors,torches,tommy's,tinga,thyroid,texture,temperatures,teased,tawdry,tat,taker,sympathies,swiped,swallows,sundaes,suave,strut,structural,stone's,stewie,stepdad,spewing,spasm,socialize,slither,sky's,simulator,sighted,shutters,shrewd,shocks,sherry's,sgc,semantics,scout's,schizophrenic,scans,savages,satisfactory,rya'c,runny,ruckus,royally,roadblocks,riff,rewriting,revoke,reversal,repent,renovation,relating,rehearsals,regal,redecorate,recovers,recourse,reconnaissance,receives,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,prospective,projected,problemo,preventing,praises,pouch,posting,postcards,pooped,poised,piled,phoney,phobia,performances,patty's,patching,participating,parenthood,pardner,oppose,oozing,oils,ohm,ohhhhh,nypd,numbing,novelist,nostril,nosey,nominate,noir,neatly,nato,naps,nappa,nameless,muzzle,muh,mortuary,moronic,modesty,mitz,missionary,mimi's,midwife,mercenaries,mcclane,maxie's,matuka,mano,mam,maitre,lush,lumps,lucid,loosened,loosely,loins,lawnmower,lane's,lamotta,kroehner,kristen's,juggle,jude's,joins,jinxy,jessep,jaya,jamming,jailhouse,jacking,ironically,intruders,inhuman,infections,infatuated,indoor,indigestion,improvements,implore,implanted,id's,hormonal,hoboken,hillbilly,heartwarming,headway,headless,haute,hatched,hartmans,harping,hari,grapevine,graffiti,gps,gon,gogh,gnome,ged,forties,foreigners,fool's,flyin,flirted,fingernail,fdr,exploration,expectation,exhilarating,entrusted,enjoyment,embark,earliest,dumper,duel,dubious,drell,dormant,docking,disqualified,disillusioned,dishonor,disbarred,directive,dicey,denny's,deleted,del's,declined,custodial,crunchy,crises,counterproductive,correspondent,corned,cords,cor,coot,contributing,contemplate,containers,concur,conceivable,commissioned,cobblepot,cliffs,clad,chief's,chickened,chewbacca,checkout,carpe,cap'n,campers,calcium,buyin,buttocks,bullies,brown's,brigade,brain's,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,bel,beeped,bearable,bank's,awarded,autographs,attracts,attracting,asteroid,arbor,arab,apprentice,announces,andie's,ammonia,alarming,aidan's,ahoy,ahm,zan,wretch,wimps,widows,widower,whirlwind,whirl,weather's,warms,war's,wack,villagers,vie,vandelay,unveiling,uno,undoing,unbecoming,ucla,turnaround,tribunal,togetherness,tickles,ticker,tended,teensy,taunt,system's,sweethearts,superintendent,subcommittee,strengthen,stomach's,stitched,standpoint,staffers,spotless,splits,soothe,sonnet,smothered,sickening,showdown,shouted,shepherds,shelters,shawl,seriousness,separates,sen,schooled,schoolboy,scat,sats,sacramento,s'mores,roped,ritchie's,resembles,reminders,regulars,refinery,raggedy,profiles,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,outlets,onward,oho,ohmigod,nosing,norwegian,nightly,nicked,neanderthal,mosquitoes,mortified,moisture,moat,mime,milky,messin,mecha,markinson,marivellas,mannequin,manderley,maid's,madder,macready,maciver's,lookie,locusts,lisbon,lifetimes,leg's,lanna,lakhi,kholi,joke's,invasive,impersonate,impending,immigrants,ick,i's,hyperdrive,horrid,hopin,hombre,hogging,hens,hearsay,haze,harpy,harboring,hairdo,hafta,hacking,gun's,guardians,grasshopper,graded,gobble,gatehouse,fourteenth,foosball,floozy,fitzgerald's,fished,firewood,finalize,fever's,fencing,felons,falsely,fad,exploited,euphemism,entourage,enlarged,ell,elitist,elegance,eldest,duo,drought,drokken,drier,dredge,dramas,dossier,doses,diseased,dictator,diarrhea,diagnose,despised,defuse,defendant's,d'amour,crowned,cooper's,continually,contesting,consistently,conserve,conscientious,conjured,completing,commune,commissioner's,collars,coaches,clogs,chenille,chatty,chartered,chamomile,casing,calculus,calculator,brittle,breached,boycott,blurted,birthing,bikinis,bankers,balancing,astounding,assaulting,aroma,arbitration,appliance,antsy,amnio,alienating,aliases,aires,adolescence,administrative,addressing,achieving,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,veterans,usin,updates,unwelcome,unsuccessful,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,traction,ticks,tete,tangible,tagging,swallowing,superheroes,sufficiently,studs,strep,stowed,stow,stomping,steffy,stature,stairway,sssh,sprain,spouting,sponsoring,snug,sneezing,smeared,slop,slink,slew,skid,simultaneously,simulation,sheltered,shakin,sewed,sewage,seatbelt,scariest,scammed,scab,sanctimonious,samir,rushes,rugged,routes,romanov,roasting,rightly,retinal,rethinking,resulted,resented,reruns,replica,renewed,remover,raiding,raided,racks,quantity,purest,progressing,primarily,presidente,prehistoric,preeclampsia,postponement,portals,poppa,pop's,pollution,polka,pliers,playful,pinning,pharaoh,perv,pennant,pelvic,paved,patented,paso,parted,paramedic,panels,pampered,painters,padding,overjoyed,orthodox,organizer,one'll,octavius,occupational,oakdale's,nous,nite,nicknames,neurosurgeon,narrows,mitt,misled,mislead,mishap,milltown,milking,microscopic,meticulous,mediocrity,meatballs,measurements,mandy's,malaria,machete,lydecker's,lurch,lorelai's,linda's,layin,lavish,lard,knockin,khruschev,kelso's,jurors,jumpin,jugular,journalists,jour,jeweler,jabba,intersection,intellectually,integral,installment,inquiries,indulging,indestructible,indebted,implicated,imitate,ignores,hyperventilating,hyenas,hurrying,huron,horizontal,hermano,hellish,heheh,header,hazardous,hart's,harshly,harper's,handout,handbag,grunemann,gots,glum,gland,glances,giveaway,getup,gerome,furthest,funhouse,frosting,franchise,frail,fowl,forwarded,forceful,flavored,flank,flammable,flaky,fingered,finalists,fatherly,famine,fags,facilitate,exempt,exceptionally,ethic,essays,equity,entrepreneur,enduring,empowered,employers,embezzlement,eels,dusk,duffel,downfall,dotted,doth,doke,distressed,disobey,disappearances,disadvantage,dinky,diminish,diaphragm,deuces,deployed,delia's,davidson's,curriculum,curator,creme,courteous,correspondence,conquered,comforts,coerced,coached,clots,clarification,cite,chunks,chickie,chick's,chases,chaperoning,ceramic,ceased,cartons,capri,caper,cannons,cameron's,calves,caged,bustin,bungee,bulging,bringin,brie,boomhauer,blowin,blindfolded,blab,biscotti,bird's,beneficial,bastard's,ballplayer,bagging,automated,auster,assurances,aschen,arraigned,anonymity,annex,animation,andi,anchorage,alters,alistair's,albatross,agreeable,advancement,adoring,accurately,abduct,wolfi,width,weirded,watchers,washroom,warheads,voltage,vincennes,villains,victorian,urgency,upward,understandably,uncomplicated,uhuh,uhhhh,twitching,trig,treadmill,transactions,topped,tiffany's,they's,thermos,termination,tenorman,tater,tangle,talkative,swarm,surrendering,summoning,substances,strive,stilts,stickers,stationary,squish,squashed,spraying,spew,sparring,sorrel's,soaring,snout,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,shepherd's,sharper,shamed,sculptures,scanning,saga,sadist,rydell,rusik,roulette,rodi's,rockefeller,revised,resumes,restoring,respiration,reiber's,reek,recycle,recount,reacts,rabbit's,purge,purgatory,purchasing,providence,prostate,princesses,presentable,poultry,ponytail,plotted,playwright,pinot,pigtails,pianist,phillippe,philippines,peddling,paroled,owww,orchestrated,orbed,opted,offends,o'hara,noticeable,nominations,nancy's,myrtle's,music's,mope,moonlit,moines,minefield,metaphors,memoirs,mecca,maureen's,manning's,malignant,mainframe,magicks,maggots,maclaine,lobe,loathing,linking,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jane's,jakov,invoke,interpreted,internally,intake,infantile,increasingly,inadmissible,implement,immense,howl,horoscope,hoof,homage,histories,hinting,hideaway,hesitating,hellbent,heddy,heckles,hat's,harmony's,hairline,gunpowder,guidelines,guatemala,gripe,gratifying,grants,governess,gorge,goebbels,gigolo,generated,gears,fuzz,frigid,freddo,freddie's,foresee,filters,filmed,fertile,fellowship,feeling's,fascination,extinction,exemplary,executioner,evident,etcetera,estimates,escorts,entity,endearing,encourages,electoral,eaters,earplugs,draped,distributors,disrupting,disagrees,dimes,devastate,detain,deposits,depositions,delicacy,delays,darklighter,dana's,cynicism,cyanide,cutters,cronus,convoy,continuous,continuance,conquering,confiding,concentrated,compartments,companions,commodity,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,charismatic,cabaret,buttle,burdened,buddhist,bruenell,broomstick,brin,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,benny's,bellboy,beaucoup,barry's,barkeep,bali,bala,bacterial,axis,awaken,astray,assailant,aslan,arlington,aria,appease,aphrodisiac,announcements,alleys,albania,aitoro's,activation,acme,yesss,wrecks,woodpecker,wondrous,window's,wimpy,willpower,widowed,wheeling,weepy,waxing,waive,vulture,videotaped,veritable,vascular,variations,untouched,unlisted,unfounded,unforeseen,two's,twinge,truffles,triggers,traipsing,toxin,tombstone,titties,tidal,thumping,thor's,thirds,therein,testicles,tenure,tenor,telephones,technicians,tarmac,talby,tackled,systematically,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,staple,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,sovereign,snipe,snip,snagged,slum,skimming,significantly,siddown,showroom,showcase,shovels,shotguns,shoelaces,shitload,shifty,shellfish,sharpest,shadowy,sewn,seizing,seekers,scrounge,scapegoat,sayonara,satan's,saddled,rung,rummaging,roomful,romp,retained,residual,requiring,reproductive,renounce,reggie's,reformed,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,public's,presently,practising,pours,possesses,poolhouse,poltergeist,pocketbook,plural,plots,pleasure's,plainly,plagued,pity's,pillars,picnics,pesto,pawing,passageway,partied,para,owing,openings,oneself,oats,numero,nostalgia,nocturnal,nitwit,nile,nexus,neuro,negotiated,muss,moths,mono,molecule,mixer,medicines,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,maddie's,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,kodak,kink,jewellery,jessie's,jacko,itty,inhibitor,ingested,informing,indignation,incorporate,inconceivable,imposition,impersonal,imbecile,ichabod,huddled,housewarming,horizons,homicides,hobo,historically,hiccups,helsinki,hehe,hearse,harmful,hardened,gushing,gushie,greased,goddamit,gigs,freelancer,forging,fonzie,fondue,flustered,flung,flinch,flicker,flak,fixin,finalized,fibre,festivus,fertilizer,fenmore's,farted,faggots,expanded,exonerate,exceeded,evict,establishing,enormously,enforced,encrypted,emdash,embracing,embedded,elliot's,elimination,dynamics,duress,dupres,dowser,doormat,dominant,districts,dissatisfied,disfigured,disciplined,discarded,dibbs,diagram,detailing,descend,depository,defining,decorative,decoration,deathbed,death's,dazzled,da's,cuttin,cures,crowding,crepe,crater,crammed,costly,cosmopolitan,cortlandt's,copycat,coordinated,conversion,contradict,containing,constructed,confidant,condemning,conceited,computer's,commute,comatose,coleman's,coherent,clinics,clapping,circumference,chuppah,chore,choksondik,chestnuts,catastrophic,capitalist,campaigning,cabins,briault,bottomless,boop,bonnet,board's,bloomingdale's,blokes,blob,bids,berluti,beret,behavioral,beggars,bar's,bankroll,bania,athos,assassinate,arsenic,apperantly,ancestor,akron,ahhhhhh,afloat,adjacent,actresses,accordingly,accents,abe's,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,writ,wisest,wipes,wield,whyn't,weirdos,wednesdays,villages,vicksburg,variable,upchuck,untraceable,unsupervised,unpleasantness,unpaid,unhook,unconscionable,uncalled,turks,tumors,trappings,translating,tragedies,townie,timely,tiki,thurgood,things'll,thine,tetanus,terrorize,temptations,teamwork,tanning,tampons,tact,swarming,surfaced,supporter,stuart's,stranger's,straitjacket,stint,stimulation,steroid,statistically,startling,starry,squander,speculating,source's,sollozzo,sobriety,soar,sneaked,smithsonian,slugs,slaw,skit,skedaddle,sinker,similarities,silky,shortcomings,shipments,sheila's,severity,sellin,selective,seattle's,seasoned,scrubbed,scrooge,screwup,scrapes,schooling,scarves,saturdays,satchel,sandburg's,sandbox,salesmen,rooming,romances,revolving,revere,resulting,reptiles,reproach,reprieve,recreational,rearranging,realtor,ravine,rationalize,raffle,quoted,punchy,psychobabble,provocation,profoundly,problematic,prescriptions,preferable,praised,polishing,poached,plow,pledges,planetary,plan's,pirelli,perverts,peaked,pastures,pant,oversized,overdressed,outdid,outdated,oriental,ordinance,orbs,opponents,occurrence,nuptials,nominees,nineteenth,nefarious,mutiny,mouthpiece,motels,mopping,moon's,mongrel,monetary,mommie,missin,metaphorically,merv,mertin,memos,memento,melodrama,melancholy,measles,meaner,marches,mantel,maneuvers,maneuvering,mailroom,machine's,luring,listenin,lion's,lifeless,liege,licks,libraries,liberties,levon,legwork,lanka,lacked,kneecaps,kippur,kiddie,kaput,justifiable,jigsaw,issuing,islamic,insistent,insidious,innuendo,innit,inhabitants,individually,indicator,indecent,imaginable,illicit,hymn,hurling,humane,hospitalized,horseshit,hops,hondo,hemorrhoid,hella,healthiest,haywire,hamsters,halibut,hairbrush,hackers,guam,grouchy,grisly,griffin's,gratuitous,glutton,glimmer,gibberish,ghastly,geologist,gentler,generously,generators,geeky,gaga,furs,fuhrer,fronting,forklift,foolin,fluorescent,flats,flan,financed,filmmaking,fight's,faxes,faceless,extinguisher,expressions,expel,etched,entertainer,engagements,endangering,empress,egos,educator,ducked,dual,dramatically,dodgeball,dives,diverted,dissolved,dislocated,discrepancy,discovers,dink,devour,destroyers,derail,deputies,dementia,decisive,daycare,daft,cynic,crumbling,cowardice,cow's,covet,cornwallis,corkscrew,cookbook,conditioned,commendation,commandments,columns,coincidental,cobwebs,clouded,clogging,clicking,clasp,citizenship,chopsticks,chefs,chaps,catherine's,castles,cashing,carat,calmer,burgundy,bulldog's,brightly,brazen,brainwashing,bradys,bowing,booties,bookcase,boned,bloodsucking,blending,bleachers,bleached,belgian,bedpan,bearded,barrenger,bachelors,awwww,atop,assures,assigning,asparagus,arabs,apprehend,anecdote,amoral,alterations,alli,aladdin,aggravation,afoot,acquaintances,accommodating,accelerate,yakking,wreckage,worshipping,wladek,willya,willies,wigged,whoosh,whisked,wavelength,watered,warpath,warehouses,volts,vitro,violates,viewed,vicar,valuables,users,urging,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,unconventional,tubby,trolling,treasurer,transfers,toxicology,totaled,tortoise,tormented,toothache,tingly,tina's,timmiihh,tibetan,thursdays,thoreau,terrifies,temperature's,temperamental,telegrams,ted's,technologies,teaming,teal'c's,talkie,takers,table's,symbiote,swirl,suffocate,subsequently,stupider,strapping,store's,steckler,standardized,stampede,stainless,springing,spreads,spokesperson,speeds,someway,snowflake,sleepyhead,sledgehammer,slant,slams,situation's,showgirl,shoveling,shmoopy,sharkbait,shan't,seminars,scrambling,schizophrenia,schematics,schedule's,scenic,sanitary,sandeman,saloon,sabbatical,rural,runt,rummy,rotate,reykjavik,revert,retrieved,responsive,rescheduled,requisition,renovations,remake,relinquish,rejoice,rehabilitation,recreation,reckoning,recant,rebuilt,rebadow,reassurance,reassigned,rattlesnake,ramble,racism,quor,prowess,prob,primed,pricey,predictions,prance,pothole,pocus,plains,pitches,pistols,persist,perpetrated,penal,pekar,peeling,patter,pastime,parmesan,paper's,papa's,panty,pail,pacemaker,overdrive,optic,operas,ominous,offa,observant,nothings,noooooo,nonexistent,nodded,nieces,neia,neglecting,nauseating,mutton,mutated,musket,munson's,mumbling,mowing,mouthful,mooseport,monologue,momma's,moly,mistrust,meetin,maximize,masseuse,martha's,marigold,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,licenses,liberating,lhasa,lenin,leniency,leering,learnt,laughable,lashes,lasagne,laceration,korben,katan,kalen,jordan's,jittery,jesse's,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,imposed,impolite,humbly,holocaust,heroics,heigh,gunk,guillotine,guesthouse,grounding,groundbreaking,groom's,grips,grant's,gossiping,goatee,gnomes,gellar,fusion's,fumble,frutt,frobisher,freudian,frenchman,foolishness,flagged,fixture,femme,feeder,favored,favorable,fatso,fatigue,fatherhood,farmer's,fantasized,fairest,faintest,factories,eyelids,extravagant,extraterrestrial,extraordinarily,explicit,escalator,eros,endurance,encryption,enchantment's,eliminating,elevate,editors,dysfunction,drivel,dribble,dominican,dissed,dispatched,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,counsel's,convene,continents,conspicuous,congresswoman,confinement,conferences,confederate,concocted,compromises,comprende,composition,communism,comma,collectors,coleslaw,clothed,clinically,chug,chickenshit,checkin,chaotic,cesspool,caskets,cancellation,calzone,brothel,boomerang,bodega,bloods,blasphemy,black's,bitsy,bink,biff,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,audiences,artist's,arrhythmia,array,arousing,arbitrator,aqui,appropriately,antagonize,angling,anesthetic,altercation,alice's,aggressor,adversity,adopting,acne,accordance,acathla,aaahhh,wreaking,workup,workings,wonderin,wolf's,wither,wielding,whopper,what'm,what'cha,waxed,vibrating,veterinarian,versions,venting,vasey,valor,validate,urged,upholstery,upgraded,untied,unscathed,unsafe,unlawful,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,tuba,truffle,truck's,triplets,treatable,treasured,transmit,tranquility,townspeople,torso,tomei,tipsy,tinsel,timeline,tidings,thirtieth,tensions,teapot,tasks,tantrums,tamper,talky,swayed,swapping,sven,sulk,suitor,subjected,stylist,stroller,storing,stirs,statistical,standoff,staffed,squadron,sprinklers,springsteen,specimens,sparkly,song's,snowy,snobby,snatcher,smoother,smith's,sleepin,shrug,shortest,shoebox,shel,sheesh,shee,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,sammy's,sahib,rosemary's,rooted,rods,roadblock,riverbank,rivals,ridiculed,resentful,repellent,relates,registry,regarded,refugee,recreate,reconvene,recalled,rebuttal,realmedia,quizzes,questionnaire,quartet,pusher,punctured,pucker,propulsion,promo,prolong,professionalism,prized,premise,predators,portions,pleasantly,planet's,pigsty,physicist,phil's,penniless,pedestrian,paychecks,patiently,paternal,parading,pa's,overactive,ovaries,orderlies,oracles,omaha,oiled,offending,nudie,neonatal,neighborly,nectar,nautical,naught,moops,moonlighting,mobilize,mite,misleading,milkshake,mickey's,metropolitan,menial,meats,mayan,maxed,marketplace,mangled,magua,lunacy,luckier,llanview's,livestock,liters,liter,licorice,libyan,legislature,lasers,lansbury,kremlin,koreans,kooky,knowin,kilt,junkyard,jiggle,jest,jeopardized,jags,intending,inkling,inhalation,influences,inflated,inflammatory,infecting,incense,inbound,impractical,impenetrable,iffy,idealistic,i'mma,hypocrites,hurtin,humbled,hosted,homosexuality,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,guerrilla,genitals,gazillion,gatherings,ganza's,gammy,gamesphere,fugue,fuels,forests,footwear,folly,folds,flexibility,flattened,flashlights,fives,filet,field's,famously,extenuating,explored,exceed,estrogen,envisioned,entails,emerged,embezzled,eloquent,egomaniac,dummies,duds,ducts,drowsy,drones,dragon's,drafts,doree,donovon,donny's,docked,dixon's,distributed,disorders,disguises,disclose,diggin,dickie's,detachment,deserting,depriving,demographic,delegation,defying,deductible,decorum,decked,daylights,daybreak,dashboard,darien,damnation,d'angelo's,cuddling,crunching,crickets,crazies,crayon,councilman,coughed,coordination,conundrum,contractors,contend,considerations,compose,complimented,compliance,cohaagen,clutching,cluster,clued,climbs,clader,chuck's,chromosome,cheques,checkpoint,chats,channeling,ceases,catholics,cassius,carver's,carasco,capped,capisce,cantaloupe,cancelling,campsite,camouflage,cambodia,burglars,bureaucracy,breakfasts,branding,bra'tac,book's,blueprint,bleedin,blaze's,blabbed,bisexual,bile,big's,beverages,beneficiary,battery's,basing,avert,avail,autobiography,atone,army's,arlyn,ares,architectural,approves,apothecary,anus,antiseptic,analytical,amnesty,alphabetical,alignment,aligned,aleikuum,advisory,advisors,advisement,adulthood,acquiring,accessed,zombie's,zadir,wrestled,wobbly,withnail,wheeled,whattaya,whacking,wedged,wanders,walkman,visionary,virtues,vincent's,vega's,vaginal,usage,unnamed,uniquely,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,tribes,treading,translates,tranquilizers,towing,tout,toontown,thunk,taps,taboo,suture,suppressing,succeeding,submission,strays,stonewall,stogie,stepdaughter,stalls,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sorcerer,sombrero,solemnly,softened,socialist,snobs,snippy,snare,smoothing,slump,slimeball,slaving,sips,singular,silently,sicily,shiller,shayne's,shareholders,shakedown,sensations,seagulls,scrying,scrumptious,screamin,saucy,santoses,santos's,sanctions,roundup,roughed,rosary,robechaux,roadside,riley's,retrospect,resurrected,restoration,reside,researched,rescind,reproduce,reprehensible,repel,rendering,remodeling,religions,reconsidering,reciprocate,ratchet,rambaldi's,railroaded,raccoon,quasi,psychics,psat,promos,proclamation,problem's,prob'ly,pristine,printout,priestess,prenuptial,prediction,precedes,pouty,potter's,phoning,petersburg,peppy,pariah,parched,parcel,panes,overloaded,overdoing,operators,oldies,obesity,nymphs,nother,notebooks,nook,nikolai,nearing,nearer,mutation,municipal,monstrosity,minister's,milady,mieke,mephesto,memory's,melissa's,medicated,marshals,manilow,mammogram,mainstream,madhouse,m'lady,luxurious,luck's,lucas's,lotsa,loopy,logging,liquids,lifeboat,lesion,lenient,learner,lateral,laszlo,larva,kross,kinks,jinxed,involuntary,inventor,interim,insubordination,inherent,ingrate,inflatable,independently,incarnate,inane,imaging,hypoglycemia,huntin,humorous,humongous,hoodlum,honoured,honking,hitler's,hemorrhage,helpin,hearing's,hathor,hatching,hangar,halftime,guise,guggenheim,grrr,grotto,grandson's,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,friday's,forwards,flutter,flourish,flagpole,finely,finder's,fetching,fatter,fated,faithfully,faction,fabrics,exposition,expo,exploits,exert,exclude,eviction,everwood's,evasion,espn,escorting,escalate,enticing,enroll,enhancement,endowed,enchantress,emerging,elopement,drills,drat,downtime,downloading,dorks,doorways,doctorate,divulge,dissociative,diss,disgraceful,disconcerting,dirtbag,deteriorating,deteriorate,destinies,depressive,dented,denim,defeating,decruz,decidedly,deactivate,daydreams,czar,curls,culprit,cues,crybaby,cruelest,critique,crippling,cretin,cranberries,cous,coupled,corvis,copped,convicts,converts,contingent,contests,complement,commend,commemorate,combinations,coastguard,cloning,cirque,churning,chock,chivalry,chemotherapy,charlotte's,chancellor's,catalogues,cartwheels,carpets,carols,canister,camera's,buttered,bureaucratic,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,borneo,bores,boing,bodied,billie's,biceps,beijing,bead,badmouthing,bad's,avec,autopilot,attractions,attire,atoms,atheist,ascertain,artificially,archbishop,aorta,amps,ampata,amok,alloy,allied,allenby,align,albeit,aired,aint,adjoining,accosted,abyss,absolve,aborted,aaagh,aaaaaah,your's,yonder,yellin,yearly,wyndham,wrongdoing,woodsboro,wigging,whup,wasteland,warranty,waltzed,walnuts,wallace's,vividly,vibration,verses,veggie,variation,validation,unnecessarily,unloaded,unicorns,understated,undefeated,unclean,umbrellas,tyke,twirling,turpentine,turnover,tupperware,tugger,triangles,triage,treehouse,tract,toil,tidbit,tickled,thud,threes,thousandth,thingie,terminally,temporal,teething,tassel,talkies,syndication,syllables,swoon,switchboard,swerved,suspiciously,superiority,successor,subsequentlyne,subsequent,subscribe,strudel,stroking,strictest,steven's,stensland,stefan's,starsky,starin,stannart,squirming,squealing,sorely,solidarity,softie,snookums,sniveling,snail,smidge,smallpox,sloth,slab,skulking,singled,simian,silo,sightseeing,siamese,shudder,shoppers,shax,sharpen,shannen,semtex,sellout,secondhand,season's,seance,screenplay,scowl,scorn,scandals,santiago's,safekeeping,sacked,russe,rummage,rosie's,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,restrained,residential,reservoir,rerun,reputations,rekall,rejoin,refreshment,reenactment,recluse,ravioli,raves,ranked,rampant,rama,rallies,raking,purses,punishable,punchline,puked,provincial,prosky,prompted,processor,previews,prepares,poughkeepsie,poppins,polluted,placenta,pissy,petulant,peterson's,perseverance,persecution,pent,peasants,pears,pawns,patrols,pastries,partake,paramount,panky,palate,overzealous,overthrow,overs,oswald's,oskar,originated,orchids,optical,onset,offenses,obstructing,objectively,obituaries,obedient,obedience,novice,nothingness,nitrate,newer,nets,mwah,musty,mung,motherly,mooning,monique's,momentous,moby,mistaking,mistakenly,minutemen,milos,microchip,meself,merciless,menelaus,mazel,mauser,masturbate,marsh's,manufacturers,mahogany,lysistrata,lillienfield,likable,lightweight,liberate,leveled,letdown,leer,leeloo,larynx,lardass,lainey,lagged,lab's,klorel,klan,kidnappings,keyed,karmic,jive,jiggy,jeebies,isabel's,irate,iraqi,iota,iodine,invulnerable,investor,intrusive,intricate,intimidation,interestingly,inserted,insemination,inquire,innate,injecting,inhabited,informative,informants,incorporation,inclination,impure,impasse,imbalance,illiterate,i'ma,i'ii,hurled,hunts,hispanic,hematoma,help's,helen's,headstrong,harmonica,hark,handmade,handiwork,gymnasium,growling,governors,govern,gorky,gook,girdle,getcha,gesundheit,gazing,gazette,garde,galley,funnel,fred's,fossils,foolishly,fondness,flushing,floris,firearm,ferocious,feathered,fateful,fancies,fakes,faker,expressway,expire,exec,ever'body,estates,essentials,eskimos,equations,eons,enlightening,energetic,enchilada,emmi,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,documentation,doable,diverse,disposed,dislikes,dishonesty,disengage,discouraging,diplomat,diplomacy,deviant,descended,derailed,depleted,demi,deformed,deflect,defines,defer,defcon,deactivated,crips,creditors,counters,corridors,cordy's,conversation's,constellations,congressmen,congo,complimenting,colombian,clubbing,clog,clint's,clawing,chromium,chimes,chicken's,chews,cheatin,chaste,ceremony's,cellblock,ceilings,cece,caving,catered,catacombs,calamari,cabbie,bursts,bullying,bucking,brulee,brits,brisk,breezes,brandon's,bounces,boudoir,blockbuster,binks,better'n,beluga,bellied,behrani,behaves,bedding,battalion,barriers,banderas,balmy,bakersfield,badmouth,backers,avenging,atat,aspiring,aromatherapy,armpit,armoire,anythin,another's,anonymously,anniversaries,alonzo's,aftershave,affordable,affliction,adrift,admissible,adieu,activist,acquittal,yucky,yearn,wrongly,wino,whitter,whirlpool,wendigo,watchdog,wannabes,walkers,wakey,vomited,voicemail,verb,vans,valedictorian,vacancy,uttered,up's,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,tyler's,twix,turnoff,trough,trolley,trampled,tramell,traci's,tort,toads,titled,timbuktu,thwarted,throwback,thon,thinker,thimble,tasteless,tarantula,tammy's,tamale,takeovers,symposium,symmetry,swish,supposing,supporters,suns,sully,streaking,strands,statutory,starlight,stargher,starch,stanzi,stabs,squeamish,spokane,splattered,spiritually,spilt,sped,speciality,spacious,soundtrack,smacking,slain,slag,slacking,skywire,skips,skeet,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,sheep's,shamelessly,serafine,sentimentality,sect,secretary's,seasick,scientifically,scholars,schemer,scandalous,saturday's,salts,saks,sainted,rustic,rugs,riedenschneider,ric's,rhyming,rhetoric,revolt,reversing,revel,retractor,retards,retaliation,resurrect,remiss,reminiscing,remanded,reluctance,relocating,relied,reiben,regions,regains,refuel,refresher,redoing,redheaded,redeemed,recycled,reassured,rearranged,rapport,qumar,prowling,promotional,promoter,preserving,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,playback,pioneers,physicians,phlegm,perfected,pancreas,pakistani,oxide,ovary,output,outbursts,oppressed,opal's,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,nixon's,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,minx,millionth,migraines,midler,methane,metabolism,merchants,medicinal,margaret's,manifestation,manicurist,mandelbaum,manageable,mambo,malfunctioned,mais,magnesium,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,lengthy,komako,koji's,klute,kennel,kathy's,justifying,jerusalem,israelis,isle,irreversible,inventing,invariably,intervals,intergalactic,instrumental,instability,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,impeachment,immigrant,id'd,hyena,humperdinck,humm,hubba,housework,homeland,holistic,hoffa,hither,hissy,hippy,hijacked,hero's,heparin,hellooo,heat's,hearth,hassles,handcuff,hairstyle,hadda,gymnastics,guys'll,gutted,gulp,gulls,guard's,gritty,grievous,gravitational,graft,gossamer,gooder,glory's,gere,gash,gaming,gambled,galaxies,gadgets,fundamentals,frustrations,frolicking,frock,frilly,fraser's,francais,foreseen,footloose,fondly,fluent,flirtation,flinched,flight's,flatten,fiscal,fiercely,felicia's,fashionable,farting,farthest,farming,facade,extends,exposer,exercised,evading,escrow,errr,enzymes,energies,empathize,embryos,embodiment,ellsberg,electromagnetic,ebola,earnings,dulcinea,dreamin,drawbacks,drains,doyle's,doubling,doting,doose's,doose,doofy,dominated,dividing,diversity,disturbs,disorderly,disliked,disgusts,devoid,detox,descriptions,denominator,demonstrating,demeanor,deliriously,decode,debauchery,dartmouth,d'oh,croissant,cravings,cranked,coworkers,councilor,council's,convergence,conventions,consistency,consist,conquests,conglomerate,confuses,confiscate,confines,confesses,conduit,compress,committee's,commanded,combed,colonel's,coated,clouding,clamps,circulating,circa,cinch,chinnery,celebratory,catalogs,carpenters,carnal,carla's,captures,capitan,capability,canin,canes,caitlin's,cadets,cadaver,cable's,bundys,bulldozer,buggers,bueller,bruno's,breakers,brazilian,branded,brainy,booming,bookstores,bloodbath,blister,bittersweet,biologist,billed,betty's,bellhop,beeping,beaut,beanstalk,beady,baudelaire,bartenders,bargains,ballad,backgrounds,averted,avatar's,atmospheric,assert,assassinated,armadillo,archive,appreciating,appraised,antlers,anterior,alps,aloof,allowances,alleyway,agriculture,agent's,affleck,acknowledging,achievements,accordion,accelerator,abracadabra,abject,zinc,zilch,yule,yemen,xanax,wrenching,wreath,wouldn,witted,widely,wicca,whorehouse,whooo,whips,westchester,websites,weaponry,wasn,walsh's,vouchers,vigorous,viet,victimized,vicodin,untested,unsolicited,unofficially,unfocused,unfettered,unfeeling,unexplainable,uneven,understaffed,underbelly,tutorial,tuberculosis,tryst,trois,trix,transmitting,trampoline,towering,topeka,tirade,thieving,thang,tentacles,teflon,teachings,tablets,swimmin,swiftly,swayzak,suspecting,supplying,suppliers,superstitions,superhuman,subs,stubbornness,structures,streamers,strattman,stonewalling,stimulate,stiffs,station's,stacking,squishy,spout,splice,spec,sonrisa,smarmy,slows,slicing,sisterly,sierra's,sicilian,shrill,shined,shift's,seniority,seine,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,sash,sark's,salieri,rustling,roxbury,richly,rexy,rex's,rewire,revved,retriever,respective,reputable,repulsed,repeats,rendition,remodel,relocated,reins,reincarnation,regression,reconstruction,readiness,rationale,rance,rafters,radiohead,radio's,rackets,quarterly,quadruple,pumbaa,prosperous,propeller,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,posh,pleasurable,pizzeria,pish,piranha,pimps,penmanship,penchant,penalties,pelvis,patriotism,pasa,papaya,packaging,overturn,overture,overstepped,overcoat,ovens,outsmart,outed,orient,ordained,ooohh,oncologist,omission,olly,offhand,odour,occurring,nyazian,notarized,nobody'll,nightie,nightclubs,newsweek,nesting,navel,nationwide,nabbed,naah,mystique,musk,mover,mortician,morose,moratorium,monster's,moderate,mockingbird,mobsters,misconduct,mingling,mikey's,methinks,metaphysical,messengered,merge,merde,medallion,mathematical,mater,mason's,masochist,martouf,martians,marinara,manray,manned,mammal,majorly,magnifying,mackerel,mabel's,lyme,lurid,lugging,lonnegan,loathsome,llantano,liszt,listings,limiting,liberace,leprosy,latinos,lanterns,lamest,laferette,ladybird,kraut,kook,kits,kipling,joyride,inward,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,incumbent,incorporated,inconvenienced,inanimate,improbable,implode,idea's,hypothesis,hydrant,hustling,hustled,huevos,how'm,horseshoe,hooey,hoods,honcho,hinge,hijack,heroism,hermit,heimlich,harvesting,hamunaptra,haladki,haiku,haggle,haaa,gutsy,grunting,grueling,grit,grifter,grievances,gribbs,greevy,greeted,green's,grandstanding,godparents,glows,glistening,glider,gimmick,genocide,gaping,fraiser,formalities,foreigner,forecast,footprint,folders,foggy,flaps,fitty,fiends,femmes,fearful,fe'nos,favours,fabio,eyeing,extort,experimentation,expedite,escalating,erect,epinephrine,entitles,entice,enriched,enable,emissions,eminence,eights,ehhh,educating,eden's,earthquakes,earthlings,eagerly,dunville,dugout,draining,doublemeat,doling,disperse,dispensing,dispatches,dispatcher,discoloration,disapproval,diners,dieu,diddly,dictates,diazepam,descendants,derogatory,deposited,delights,defies,decoder,debates,dealio,danson,cutthroat,crumbles,crud,croissants,crematorium,craftsmanship,crafted,could'a,correctional,cordless,cools,contradiction,constitute,conked,confine,concealing,composite,complicates,communique,columbian,cockamamie,coasters,clusters,clobbered,clipping,clipboard,clergy,clemenza,cleanser,circumcision,cindy's,chisel,character's,chanukah,certainaly,centerpiece,cellmate,cartoonist,cancels,cadmium,buzzed,busiest,bumstead,bucko,browsing,broth,broader,break's,braver,boundary,boggling,bobbing,blurred,birkhead,bethesda,benet,belvedere,bellies,begrudge,beckworth,bebe's,banky,baldness,bagpipes,baggy,babysitters,aversion,auxiliary,attributes,attain,astonished,asta,assorted,aspirations,arnold's,area's,appetites,apparel,apocalyptic,apartment's,announcer,angina,amiss,ambulances,allo,alleviate,alibis,algeria,alaskan,airway,affiliated,aerial,advocating,adrenalin,admires,adhesive,actively,accompanying,zeta,yoyou,yoke,yachts,wreaked,wracking,woooo,wooing,wised,winnie's,wind's,wilshire,wedgie,watson's,warden's,waging,violets,vincey,victorious,victories,velcro,vastly,valves,valley's,uplifting,untrustworthy,unmitigated,universities,uneventful,undressing,underprivileged,unburden,umbilical,twigs,tweet,tweaking,turquoise,trustees,truckers,trimmed,triggering,treachery,trapping,tourism,tosses,torching,toothpick,toga,toasty,toasts,tiamat,thickens,ther,tereza,tenacious,temperament,televised,teldar,taxis,taint,swill,sweatin,sustaining,surgery's,surgeries,succeeds,subtly,subterranean,subject's,subdural,streep,stopwatch,stockholder,stillwater,steamer,stang's,stalkers,squished,squeegee,splinters,spliced,splat,spied,specialized,spaz,spackle,sophistication,snapshots,smoky,smite,sluggish,slithered,skin's,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,shithole,settin,servers,serge,sentinels,selfishly,segments,scarcely,sawdust,sanitation,sangria,sanctum,samantha's,sahjhan,sacrament,saber,rustle,rupture,rump,roving,rousing,rosomorf,rosario's,rodents,robust,rigs,riddled,rhythms,revelations,restart,responsibly,repression,reporter's,replied,repairing,renoir,remoray,remedial,relocation,relies,reinforcement,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramsey's,ramelle,rails,radish,quivering,pyjamas,puny,psychos,prussian,provocations,prouder,protestors,protesters,prohibited,prohibit,progression,prodded,proctologist,proclaimed,primordial,pricks,prickly,predatory,precedents,praising,pragmatic,powerhouse,posterior,postage,porthos,populated,poly,pointe,pivotal,pinata,persistence,performers,pentangeli,pele,pecs,pathetically,parka,parakeet,panicky,pandora's,pamphlets,paired,overthruster,outsmarted,ottoman,orthopedic,oncoming,oily,offing,nutritious,nuthouse,nourishment,nietzsche,nibbling,newlywed,newcomers,need's,nautilus,narcissist,myths,mythical,mutilation,mundane,mummy's,mummies,mumble,mowed,morvern,mortem,mortal's,mopes,mongolian,molasses,modification,misplace,miscommunication,miney,militant,midlife,mens,menacing,memorizing,memorabilia,membrane,massaging,masking,maritime,mapping,manually,magnets,ma's,luxuries,lows,lowering,lowdown,lounging,lothario,longtime,liposuction,lieutenant's,lidocaine,libbets,lewd,levitate,leslie's,leeway,lectured,lauren's,launcher,launcelot,latent,larek,lagos,lackeys,kumbaya,kryptonite,knapsack,keyhole,kensington,katarangura,kann,junior's,juiced,jugs,joyful,jihad,janitor's,jakey,ironclad,invoice,intertwined,interlude,interferes,insurrection,injure,initiating,infernal,india's,indeedy,incur,incorrigible,incantations,imprint,impediment,immersion,immensely,illustrate,ike's,igloo,idly,ideally,hysterectomy,hyah,house's,hour's,hounded,hooch,honeymoon's,hollering,hogs,hindsight,highs,high's,hiatus,helix,heirs,heebie,havesham,hassan's,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,greg's,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,gladiators,generating,galahad,gaius,furnished,funeral's,fundamentally,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,flashbacks,fixtures,firecrackers,fines,filly,figger,fetuses,fella's,feasible,fates,eyeliner,extremities,extradited,expires,experimented,exiting,exhibits,exhibited,exes,excursion,exceedingly,evaporate,erupt,equilibrium,epileptic,ephram's,entrails,entities,emporium,egregious,eggshells,easing,duwayne,drone,droll,dreyfuss,drastically,dovey,doubly,doozy,donkeys,donde,dominate,distrust,distributing,distressing,disintegrate,discreetly,disagreements,diff,dick's,devised,determines,descending,deprivation,delegate,dela,degradation,decision's,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cycles,cushy,currents,cupcakes,cuffed,croupier,croak,criticized,crapped,coursing,cornerstone,copyright,coolers,continuum,contaminate,cont,consummated,construed,construct,condos,concoction,compulsion,committees,commish,columnist,collapses,coercion,coed,coastal,clemency,clairvoyant,circulate,chords,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,cache,butcher's,burdon,bullshitting,bulge,buck's,brewed,brethren,bren,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleu,bleep,bleeder,blackouts,bisque,binford's,billboards,bernie's,beecher's,beatings,bayberry,bashed,bartlet's,bapu,bamboozled,ballon,balding,baklava,baffled,backfires,babak,awkwardness,attributed,attest,attachments,assembling,assaults,asphalt,arthur's,arthritis,armenian,arbitrary,apologizes,anyhoo,antiquated,alcante,agency's,advisable,advertisement,adventurer,abundance,aahhh,aaahh,zatarc,yous,york's,yeti,yellowstone,yearbooks,yakuza,wuddya,wringing,woogie,womanhood,witless,winging,whatsa,wetting,wessex,wendy's,way's,waterproof,wastin,washington's,wary,voom,volition,volcanic,vogelman,vocation,visually,violinist,vindicated,vigilance,viewpoint,vicariously,venza,vasily,validity,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,ukraine,typo,tweaked,twas,turnips,tunisia,tsch,trinkets,tribune,transmitters,translator,train's,toured,toughen,toting,topside,topical,toothed,tippy,tides,theology,terrors,terrify,tentative,technologically,tarnish,target's,tallest,tailored,tagliati,szpilman,swimmers,swanky,susie's,surly,supple,sunken,summation,suds,suckin,substantially,structured,stockholm,stepmom,squeaking,springfield's,spooks,splashmore,spanked,souffle,solitaire,solicitation,solarium,smooch,smokers,smog,slugged,slobbering,skylight,skimpy,situated,sinuses,simplify,silenced,sideburns,sid's,shutdown,shrinkage,shoddy,shhhhhh,shelling,shelled,shareef,shangri,shakey's,seuss,servicing,serenade,securing,scuffle,scrolls,scoff,scholarships,scanners,sauerkraut,satisfies,satanic,sars,sardines,sarcophagus,santino,sandi's,salvy,rusted,russells,ruby's,rowboat,routines,routed,rotating,rolfsky,ringside,rigging,revered,retreated,respectability,resonance,resembling,reparations,reopened,renewal,renegotiate,reminisce,reluctantly,reimburse,regimen,regaining,rectum,recommends,recognizable,realism,reactive,rawhide,rappaport's,raincoat,quibble,puzzled,pursuits,purposefully,puns,pubic,psychotherapy,prosecution's,proofs,proofing,professor's,prevention,prescribing,prelim,positioning,pore,poisons,poaching,pizza's,pertaining,personalized,personable,peroxide,performs,pentonville,penetrated,peggy's,payphone,payoffs,participated,park's,parisian,palp,paleontology,overhaul,overflowing,organised,oompa,ojai,offenders,oddest,objecting,o'hare,o'daniel,notches,noggin,nobody'd,nitrogen,nightstand,niece's,nicky's,neutralized,nervousness,nerdy,needlessly,navigational,narrative,narc,naquadah,nappy,nantucket,nambla,myriad,mussolini,mulberry,mountaineer,mound,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minstrel,minivan,milligram,milkshakes,milestone,middleweight,michelangelo,metamorphosis,mesh,medics,mckinnon's,mattresses,mathesar,matchbook,matata,marys,marco's,malucci,majored,magilla,magic's,lymphoma,lowers,lordy,logistics,linens,lineage,lindenmeyer,limelight,libel,leery's,leased,leapt,laxative,lather,lapel,lamppost,laguardia,labyrinth,kindling,key's,kegs,kegger,kawalsky,juries,judo,jokin,jesminder,janine's,izzy,israeli,interning,insulation,institutionalized,inspected,innings,innermost,injun,infallible,industrious,indulgence,indonesia,incinerator,impossibility,imports,impart,illuminate,iguanas,hypnotic,hyped,huns,housed,hostilities,hospitable,hoses,horton's,homemaker,history's,historian,hirschmuller,highlighted,hideout,helpers,headset,guardianship,guapo,guantanamo,grubby,greyhound,grazing,granola,granddaddy,gotham's,goren,goblet,gluttony,glucose,globes,giorno,gillian's,getter,geritol,gassed,gang's,gaggle,freighter,freebie,frederick's,fractures,foxhole,foundations,fouled,foretold,forcibly,folklore,floorboards,floods,floated,flippers,flavour,flaked,firstly,fireflies,feedings,fashionably,fascism,farragut,fallback,factions,facials,exterminate,exited,existent,exiled,exhibiting,excites,everything'll,evenin,evaluated,ethically,entree,entirety,ensue,enema,empath,embryo,eluded,eloquently,elle,eliminates,eject,edited,edema,echoes,earns,dumpling,drumming,droppings,drazen's,drab,dolled,doll's,doctrine,distasteful,disputing,disputes,displeasure,disdain,disciples,diamond's,develops,deterrent,detection,dehydration,defied,defiance,decomposing,debated,dawned,darken,daredevil,dailies,cyst,custodian,crusts,crucifix,crowning,crier,crept,credited,craze,crawls,coveted,couple's,couldn,corresponding,correcting,corkmaster,copperfield,cooties,coopers,cooperated,controller,contraption,consumes,constituents,conspire,consenting,consented,conquers,congeniality,computerized,compute,completes,complains,communicator,communal,commits,commendable,colonels,collide,coladas,colada,clout,clooney,classmate,classifieds,clammy,claire's,civility,cirrhosis,chink,chemically,characterize,censor,catskills,cath,caterpillar,catalyst,carvers,carts,carpool,carelessness,career's,cardio,carbs,captivity,capeside's,capades,butabi,busmalis,bushel,burping,buren,burdens,bunks,buncha,bulldozers,browse,brockovich,bria,breezy,breeds,breakthroughs,bravado,brandy's,bracket,boogety,bolshevik,blossoms,bloomington,blooming,bloodsucker,blockade,blight,blacksmith,betterton,betrayer,bestseller,bennigan's,belittle,beeps,bawling,barts,bartending,barbed,bankbooks,back's,babs,babish,authors,authenticity,atropine,astronomical,assertive,arterial,armbrust,armageddon,aristotle,arches,anyanka,annoyance,anemic,anck,anago,ali's,algiers,airways,airwaves,air's,aimlessly,ails,ahab,afflicted,adverse,adhere,accuracy,aaargh,aaand,zest,yoghurt,yeast,wyndham's,writings,writhing,woven,workable,winking,winded,widen,whooping,whiter,whip's,whatya,whacko,we's,wazoo,wasp,waived,vlad,virile,vino,vic's,veterinary,vests,vestibule,versed,venetian,vaughn's,vanishes,vacancies,urkel,upwards,uproot,unwarranted,unscheduled,unparalleled,undertaking,undergrad,tweedle,turtleneck,turban,trickery,travolta,transylvania,transponder,toyed,townhouse,tonto,toed,tion,tier,thyself,thunderstorm,thnk,thinning,thinkers,theatres,thawed,tether,tempus,telegraph,technicalities,tau'ri,tarp,tarnished,tara's,taggert's,taffeta,tada,tacked,systolic,symbolize,swerve,sweepstakes,swami,swabs,suspenders,surfers,superwoman,sunsets,sumo,summertime,succulent,successes,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,starvation,staff's,squads,spicoli,spic,sparing,soulless,soul's,sonnets,sockets,snit,sneaker,snatching,smothering,slush,sloman,slashing,sitters,simpson's,simpleton,signify,signal's,sighs,sidra,sideshow,sickens,shunned,shrunken,showbiz,shopped,shootings,shimmering,shakespeare's,shagging,seventeenth,semblance,segue,sedation,scuzzlebutt,scumbags,scribble,screwin,scoundrels,scarsdale,scamp,scabs,saucers,sanctioned,saintly,saddened,runaways,runaround,rumored,rudimentary,rubies,rsvp,rots,roman's,ripley's,rheya,revived,residing,resenting,researcher,repertoire,rehashing,rehabilitated,regrettable,regimental,refreshed,reese's,redial,reconnecting,rebirth,ravenous,raping,ralph's,railroads,rafting,rache,quandary,pylea,putrid,punitive,puffing,psychopathic,prunes,protests,protestant,prosecutors,proportional,progressed,prod,probate,prince's,primate,predicting,prayin,practitioner,possessing,pomegranate,polgara,plummeting,planners,planing,plaintiffs,plagues,pitt's,pithy,photographer's,philharmonic,petrol,perversion,personals,perpetrators,perm,peripheral,periodic,perfecto,perched,pees,peeps,pedigree,peckish,pavarotti,partnered,palette,pajama,packin,pacifier,oyez,overstepping,outpatient,optimum,okama,obstetrician,nutso,nuance,noun,noting,normalcy,normal's,nonnegotiable,nomak,nobleman,ninny,nines,nicey,newsflash,nevermore,neutered,nether,nephew's,negligee,necrosis,nebula,navigating,narcissistic,namesake,mylie,muses,munitions,motivational,momento,moisturizer,moderation,mmph,misinformed,misconception,minnifield,mikkos,methodical,mechanisms,mebbe,meager,maybes,matchmaking,masry,markovic,manifesto,malakai,madagascar,m'am,luzhin,lusting,lumberjack,louvre,loopholes,loaning,lightening,liberals,lesbo,leotard,leafs,leader's,layman's,launder,lamaze,kubla,kneeling,kilo,kibosh,kelp,keith's,jumpsuit,joy's,jovi,joliet,jogger,janover,jakovasaurs,irreparable,intervened,inspectors,innovation,innocently,inigo,infomercial,inexplicable,indispensable,indicative,incognito,impregnated,impossibly,imperfect,immaculate,imitating,illnesses,icarus,hunches,hummus,humidity,housewives,houmfort,hothead,hostiles,hooves,hoopla,hooligans,homos,homie,hisself,himalayas,hidy,hickory,heyyy,hesitant,hangout,handsomest,handouts,haitian,hairless,gwennie,guzzling,guinevere,grungy,grunge,grenada,gout,gordon's,goading,gliders,glaring,geology,gems,gavel,garments,gardino,gannon's,gangrene,gaff,gabrielle's,fundraising,fruitful,friendlier,frequencies,freckle,freakish,forthright,forearm,footnote,footer,foot's,flops,flamenco,fixer,firm's,firecracker,finito,figgered,fezzik,favourites,fastened,farfetched,fanciful,familiarize,faire,failsafe,fahrenheit,fabrication,extravaganza,extracted,expulsion,exploratory,exploitation,explanatory,exclusion,evolutionary,everglades,evenly,eunuch,estas,escapade,erasers,entries,enforcing,endorsements,enabling,emptying,emperor's,emblem,embarassing,ecosystem,ebby,ebay,dweeb,dutiful,dumplings,drilled,drafty,doug's,dolt,dollhouse,displaced,dismissing,disgraced,discrepancies,disbelief,disagreeing,disagreed,digestion,didnt,deviled,deviated,deterioration,departmental,departing,demoted,demerol,delectable,deco,decaying,decadent,dears,daze,dateless,d'algout,cultured,cultivating,cryto,crusades,crumpled,crumbled,cronies,critters,crew's,crease,craves,cozying,cortland,corduroy,cook's,consumers,congratulated,conflicting,confidante,condensed,concessions,compressor,compressions,compression,complicating,complexity,compadre,communicated,coerce,coding,coating,coarse,clown's,clockwise,clerk's,classier,clandestine,chums,chumash,christopher's,choreography,choirs,chivalrous,chinpoko,chilean,chihuahua,cheerio,charred,chafing,celibacy,casts,caste,cashier's,carted,carryin,carpeting,carp,carotid,cannibals,candor,caen,cab's,butterscotch,busts,busier,bullcrap,buggin,budding,brookside,brodski,bristow's,brig,bridesmaid's,brassiere,brainwash,brainiac,botrelle,boatload,blimey,blaring,blackness,bipolar,bipartisan,bins,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,beefy,bedpans,battleship,bathroom's,bassinet,basking,basin,barzini,barnyard,barfed,barbarian,bandit,balances,baker's,backups,avid,augh,audited,attribute,attitudes,at's,astor,asteroids,assortment,associations,asinine,asalaam,arouse,architects,aqua,applejack,apparatus,antiquities,annoys,angela's,anew,anchovies,anchors,analysts,ampule,alphabetically,aloe,allure,alameida,aisles,airfield,ahah,aggressively,aggravate,aftermath,affiliation,aesthetic,advertised,advancing,adept,adage,accomplices,accessing,academics,aagh,zoned,zoey's,zeal,yokel,y'ever,wynant's,wringer,witwer,withdrew,withdrawing,withdrawals,windward,wimbledon,wily,willfully,whorfin,whimsical,whimpering,welding,weddin,weathered,wealthiest,weakening,warmest,wanton,waif,volant,vivo,vive,visceral,vindication,vikram,vigorously,verification,veggies,urinate,uproar,upload,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unconstitutional,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,tutu,turnin,turk's,tucker's,tuatha,tropez,trends,trellis,traffic's,torque,toppings,tootin,toodles,toodle,tivo,tinkering,thursday's,thrives,thorne's,thespis,thereafter,theatrics,thatherton,texts,testicle,terr,tempers,teammates,taxpayer,tavington,tampon,tackling,systematic,syndicated,synagogue,swelled,sweeney's,sutures,sustenance,surfaces,superstars,sunflowers,sumatra,sublet,subjective,stubbins,strutting,strewn,streams,stowaway,stoic,sternin,stereotypes,steadily,star's,stalker's,stabilizing,sprang,spotter,spiraling,spinster,spell's,speedometer,specified,speakeasy,sparked,soooo,songwriter,soiled,sneakin,smithereens,smelt,smacks,sloan's,slaughterhouse,slang,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,sift,side's,shouts,shorted,shoelace,sheeit,shaw's,shards,shackled,sequestered,selmak,seduces,seclusion,seasonal,seamstress,seabeas,scry,scripted,scotia,scoops,scooped,schillinger's,scavenger,saturation,satch,salaries,safety's,s'more,s'il,rudeness,rostov,romanian,romancing,robo,robert's,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,replacements,repaid,renewing,remembrance,relic,relaxes,rekindle,regulate,regrettably,registering,regenerate,referenced,reels,reducing,reconstruct,reciting,reared,reappear,readin,ratting,rapes,rancho,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,prohibits,profiling,productivity,procrastinating,procession,proactive,priss,primaries,potomac,postmortem,pompoms,polio,poise,piping,pickups,pickings,physiology,philanthropist,phenomena,pheasant,perfectionist,peretti,people'll,peninsula,pecking,peaks,pave,patrolman,participant,paralegal,paragraphs,paparazzi,pankot,pampering,pain's,overstep,overpower,ovation,outweigh,outlawed,orion's,openness,omnipotent,oleg,okra,okie,odious,nuwanda,nurtured,niles's,newsroom,netherlands,nephews,neeson,needlepoint,necklaces,neato,nationals,muggers,muffler,mousy,mourned,mosey,morn,mormon,mopey,mongolians,moldy,moderately,modelling,misinterpret,minneapolis,minion,minibar,millenium,microfilm,metals,mendola,mended,melissande,me's,mathematician,masturbating,massacred,masbath,marler's,manipulates,manifold,malp,maimed,mailboxes,magnetism,magna,m'lord,m'honey,lymph,lunge,lull,luka,lt's,lovelier,loser's,lonigan's,lode,locally,literacy,liners,linear,lefferts,leezak,ledgers,larraby,lamborghini,laloosh,kundun,kozinski,knockoff,kissin,kiosk,khasinau's,kennedys,kellman,karlo,kaleidoscope,jumble,juggernaut,joseph's,jiminy,jesuits,jeffy,jaywalking,jailbird,itsy,irregularities,inventive,introduces,interpreter,instructing,installing,inquest,inhabit,infraction,informer,infarction,incidence,impulsively,impressing,importing,impersonated,impeach,idiocy,hyperbole,hydra,hurray,hungary,humped,huhuh,hsing,hotspot,horsepower,hordes,hoodlums,honky,hitchhiker,hind,hideously,henchmen,heaving,heathrow,heather's,heathcliff,healthcare,headgear,headboard,hazing,hawking,harem,handprint,halves,hairspray,gutiurrez,greener,grandstand,goosebumps,good's,gondola,gnaw,gnat,glitches,glide,gees,gasping,gases,garrison's,frolic,fresca,freeways,frayed,fortnight,fortitude,forgetful,forefathers,foley's,foiled,focuses,foaming,flossing,flailing,fitzgeralds,firehouse,finders,filmmakers,fiftieth,fiddler,fellah,feats,fawning,farquaad,faraway,fancied,extremists,extremes,expresses,exorcist,exhale,excel,evaluations,ethros,escalated,epilepsy,entrust,enraged,ennui,energized,endowment,encephalitis,empties,embezzling,elster,ellie's,ellen's,elixir,electrolytes,elective,elastic,edged,econ,eclectic,eagle's,duplex,dryers,drexl,dredging,drawback,drafting,don'ts,docs,dobisch,divorcee,ditches,distinguishing,distances,disrespected,disprove,disobeying,disobedience,disinfectant,discs,discoveries,dips,diplomas,dingy,digress,dignitaries,digestive,dieting,dictatorship,dictating,devoured,devise,devane's,detonators,detecting,desist,deserter,derriere,deron,derive,derivative,delegates,defects,defeats,deceptive,debilitating,deathwok,dat's,darryl's,dago,daffodils,curtsy,cursory,cuppa,cumin,cultivate,cujo,cubic,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,converting,contentment,contention,contamination,consortium,consequently,consensual,consecutive,compressed,compounds,compost,components,comparative,comparable,commenting,color's,collections,coleridge,coincidentally,cluett,cleverly,cleansed,cleanliness,clea,clare's,citizen's,chopec,chomp,cholera,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,categories,catchin,caress,cardigan,capitalism,canopy,cana,camcorder,calorie,cackling,cabot's,bystanders,buttoned,buttering,butted,buries,burgel,bullpen,buffoon,brogna,brah,bragged,boutros,boosted,bohemian,bogeyman,boar,blurting,blurb,blowup,bloodhound,blissful,birthmark,biotech,bigot,bestest,benefited,belted,belligerent,bell's,beggin,befall,beeswax,beer's,becky's,beatnik,beaming,bazaar,bashful,barricade,banners,bangers,baja,baggoli,badness,awry,awoke,autonomy,automobiles,attica,astoria,assessing,ashram,artsy,artful,aroun,armpits,arming,arithmetic,annihilate,anise,angiogram,andre's,anaesthetic,amorous,ambiguous,ambiance,alligators,afforded,adoration,admittance,administering,adama,aclu,abydos,absorption,zonked,zhivago,zealand,zazu,youngster,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,wichita,whoopie,wholesale,wholeheartedly,whimper,which'll,wherein,wheelchairs,what'ya,west's,wellness,welcomes,wavy,warren's,warranted,wankers,waltham,wallop,wading,wade's,wacked,vogue,virginal,vill,vets,vermouth,vermeil,verger,verbs,verbally,ventriss,veneer,vecchio's,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unrest,unmanned,unlocks,unified,ungodly,undue,undermined,undergoing,undergo,uncooperative,uncontrollably,unbeatable,twitchy,tunh,tumbler,tubs,truest,troublesome,triumphs,triplicate,tribbey,trent's,transmissions,tortures,torpedoes,torah,tongaree,tommi,tightening,thunderbolt,thunderbird,thorazine,thinly,theta,theres,testifies,terre,teenaged,technological,tearful,taxing,taldor,takashi,tach,symbolizes,symbolism,syllabus,swoops,swingin,swede,sutra,suspending,supplement,sunday's,sunburn,succumbed,subtitled,substituting,subsidiary,subdued,stuttering,stupor,stumps,strummer,strides,strategize,strangulation,stooped,stipulation,stingy,stigma,stewart's,statistic,startup,starlet,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,specifications,spawned,spasms,spaniard,sous,softener,sodding,soapbox,snow's,smoldering,smithbauer,slogans,slicker,slasher,skittish,skepticism,simulated,similarity,silvio,signifies,signaling,sifting,sickest,sicilians,shuffling,shrivel,shortstop,sensibility,sender,seminary,selecting,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schoolteacher,schibetta's,schenkman,sawing,savin,satine,saps,sapiens,salvaging,salmonella,safeguard,sacrilege,rumpus,ruffle,rube,routing,roughing,rotted,roshman's,rondall,road's,ridding,rickshaw,rialto,rhinestone,reversible,revenues,retina,restrooms,resides,reroute,requisite,repress,replicate,repetition,removes,relationship's,regent,regatta,reflective,rednecks,redeeming,rectory,recordings,reasoned,rayed,ravell,raked,rainstorm's,raincheck,raids,raffi,racked,query,quantities,pushin,prototypes,proprietor,promotes,prometheus,promenade,projectile,progeny,profess,prodding,procure,primetime,presuming,preppy,prednisone,predecessor,potted,posttraumatic,poppies,poorhouse,pool's,polaroid,podiatrist,plucky,plowed,pledging,playroom,playhouse,play's,plait,placate,pitchfork,pissant,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,penny's,pellets,peeved,peerless,payable,pauses,pathways,pathologist,pat's,parchment,papi,pagliacci,owls,overwrought,overwhelmingly,overreaction,overqualified,overheated,outward,outlines,outcasts,otherworldly,originality,organisms,opinionated,oodles,oftentimes,octane,occured,obstinate,observatory,o'er,nutritionist,nutrition,numbness,nubile,notification,notary,nooooooo,nodes,nobodies,nepotism,neighborhoods,neanderthals,musicals,mushu,murphy's,multimedia,mucus,mothering,mothballs,monogrammed,monk's,molesting,misspoke,misspelled,misconstrued,miscellaneous,miscalculated,minimums,mince,mildew,mighta,middleman,metabolic,messengers,mementos,mellowed,meditate,medicare,mayol,maximilian,mauled,massaged,marmalade,mardi,mannie,mandates,mammals,malaysia,makings,major's,maim,lundegaard,lovingly,lout,louisville,loudest,lotto,loosing,loompa,looming,longs,lodging,loathes,littlest,littering,linebacker,lifelike,li'l,legalities,lavery's,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,katya,karras,jungles,juke,joes,jockeys,jeremy's,jefe,janeiro,jacqueline's,ithaca,irrigation,iranoff,invoices,invigorating,intestinal,interactive,integration,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infrastructure,infestation,infants,individuality,indianapolis,indeterminate,indefinite,inconsistent,incomprehensible,inaugural,inadequacy,impropriety,importer,imaginations,illuminating,ignited,ignite,iggy,i'da,hysterics,hypodermic,hyperventilate,hypertension,hyperactive,humoring,hotdogs,honeymooning,honed,hoist,hoarding,hitching,hinted,hill's,hiker,hijo,hightail,highlands,hemoglobin,helo,hell'd,heinie,hanoi,hags,gush,guerrillas,growin,grog,grissom's,gregory's,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,geared,gawk,gawd,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabe's,gabby's,gabbing,futon,fulla,frightful,freshener,freedoms,fountains,fortuitous,formulas,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,firefighters,fins,filtered,feverish,favell,fattest,fattening,fate's,fallow,faculties,fabricated,extraordinaire,expressly,expressive,explorers,evade,evacuating,euclid,ethanol,errant,envied,enchant,enamored,enact,embarking,election's,egocentric,eeny,dussander,dunwitty,dullest,dru's,dropout,dredged,dorsia,dormitory,doot,doornail,dongs,dogged,dodgy,do's,ditty,dishonorable,discriminating,discontinue,dings,dilly,diffuse,diets,dictation,dialysis,deteriorated,delly,delightfully,definitions,decreased,declining,deadliest,daryll,dandruff,cynthia's,cush,cruddy,croquet,crocodiles,cringe,crimp,credo,cranial,crackling,coyotes,courtside,coupling,counteroffer,counterfeiting,corrupting,corrective,copter,copping,conway's,conveyor,contusions,contusion,conspirator,consoling,connoisseur,conjecture,confetti,composure,competitor,compel,commanders,coloured,collector's,colic,coldest,coincide,coddle,cocksuckers,coax,coattails,cloned,cliff's,clerical,claustrophobia,classrooms,clamoring,civics,churn,chugga,chromosomes,christened,chopper's,chirping,chasin,characterized,chapped,chalkboard,centimeter,caymans,catheter,caspian,casings,cartilage,carlton's,card's,caprica,capelli,cannolis,cannoli,canals,campaigns,camogli,camembert,butchers,butchered,busboys,bureaucrats,bungalow,buildup,budweiser,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,blended,blackberry,bitch's,birthplace,biocyte,biking,bike's,betrays,bestowed,bested,beryllium,beheading,beginner's,beggar,begbie,beamed,bayou,bastille,bask,barstool,barricades,baron's,barbecues,barbecued,barb's,bandwagon,bandits,ballots,ballads,backfiring,bacarra,avoidance,avenged,autopsies,austrian,aunties,attache,atrium,associating,artichoke,arrowhead,arrivals,arose,armory,appendage,apostrophe,apostles,apathy,antacid,ansel,anon,annul,annihilation,andrew's,anderson's,anastasia's,amuses,amped,amicable,amendments,amberg,alluring,allotted,alfalfa,alcoholism,airs,ailing,affinity,adversaries,admirers,adlai,adjective,acupuncture,acorn,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,xena,wrinkly,wracked,wording,withered,winks,windmills,widow's,whopping,wholly,wendle,weigart,weekend's,waterworks,waterford,waterbed,watchful,wantin,wally's,wail,wagging,waal,waaah,vying,voter,ville,vertebrae,versatile,ventures,ventricle,varnish,vacuumed,uugh,utilities,uptake,updating,unreachable,unprovoked,unmistakable,unky,unfriendly,unfolding,undesirable,undertake,underpaid,uncuff,unchanged,unappealing,unabomber,ufos,tyres,typhoid,tweek's,tuxedos,tushie,turret,turds,tumnus,tude,truman's,troubadour,tropic,trinium,treaters,treads,transpired,transient,transgression,tournaments,tought,touchdowns,totem,tolstoy,thready,thins,thinners,thas,terrible's,television's,techs,teary,tattaglia,tassels,tarzana,tape's,tanking,tallahassee,tablecloths,synonymous,synchronize,symptomatic,symmetrical,sycophant,swimmingly,sweatshop,surrounds,surfboard,superpowers,sunroom,sunflower,sunblock,sugarplum,sudan,subsidies,stupidly,strumpet,streetcar,strategically,strapless,straits,stooping,stools,stifler,stems,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spores,spelt,spectacularly,spaniel,soulful,sorbet,socked,society's,sociable,snubbed,snub,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,sludge,slouch,slingshot,slicer,slaved,skimmed,skier,sisterhood,silliest,sideline,sidarthur,shrink's,shipwreck,shimmy,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scaled,scagnetti,saxophone,sawchuk,saviour,saugus,saturated,sasquatch,sandbag,saltines,s'pose,royalties,routinely,roundabout,roston,rostle,riveting,ristle,righ,rifling,revulsion,reverently,retrograde,restriction,restful,resolving,resents,rescinded,reptilian,repository,reorganize,rentals,rent's,renovating,renal,remedies,reiterate,reinvent,reinmar,reibers,reechard,recuse,recorders,record's,reconciling,recognizance,recognised,reclaiming,recitation,recieved,rebate,reacquainted,rations,rascals,raptors,railly,quintuplets,quahog,pygmies,puzzling,punctuality,psychoanalysis,psalm,prosthetic,proposes,proms,proliferation,prohibition,probie,printers,preys,pretext,preserver,preppie,prag,practise,postmaster,portrayed,pollen,polled,poachers,plummet,plumbers,pled,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,pied,physique,pessimistic,persecute,perjure,perch,percentile,pentothal,pensky,penises,peking,peini,peacetime,pazzi,pastels,partisan,parlour,parkway,parallels,paperweight,pamper,palsy,palaces,pained,overwhelm,overview,overalls,ovarian,outrank,outpouring,outhouse,outage,ouija,orbital,old's,offset,offer's,occupying,obstructed,obsessions,objectives,obeying,obese,o'riley,o'neal,o'higgins,nylon,notoriously,nosebleeds,norman's,norad,noooooooo,nononono,nonchalant,nominal,nome,nitrous,nippy,neurosis,nekhorvich,necronomicon,nativity,naquada,nano,nani,n'est,mystik,mystified,mums,mumps,multinational,muddle,mothership,moped,monumentally,monogamous,mondesi,molded,mixes,misogynistic,misinterpreting,miranda's,mindlock,mimic,midtown,microphones,mending,megaphone,meeny,medicating,meanings,meanie,masseur,maru,marshal's,markstrom,marklars,mariachi,margueritas,manifesting,maintains,mail's,maharajah,lurk,lulu's,lukewarm,loveliest,loveable,lordship,looting,lizardo,liquored,lipped,lingers,limey,limestone,lieutenants,lemkin,leisurely,laureate,lathe,latched,lars,lapping,ladle,kuala,krevlorneswath,kosygin,khakis,kenaru,keats,kath,kaitlan,justin's,julliard,juliet's,journeys,jollies,jiff,jaundice,jargon,jackals,jabot's,invoked,invisibility,interacting,instituted,insipid,innovative,inflamed,infinitely,inferiority,inexperience,indirectly,indications,incompatible,incinerated,incinerate,incidental,incendiary,incan,inbred,implicitly,implicating,impersonator,impacted,ida's,ichiro,iago,hypo,hurricanes,hunks,host's,hospice,horsing,hooded,honey's,homestead,hippopotamus,hindus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,hecate,headstone,hayloft,hater,hast,harold's,harbucks,handguns,hallucinate,halliwell's,haldol,hailing,haggling,hadj,gynaecologist,gumball,gulag,guilder,guaranteeing,groundskeeper,ground's,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,glossy,glam,giddyup,gentlemanly,gels,gelatin,gazelle,gawking,gaulle,gate's,ganged,fused,fukes,fromby,frenchmen,franny,foursome,forsley,foreman's,forbids,footwork,foothold,fonz,fois,foie,floater,flinging,flicking,fittest,fistfight,fireballs,filtration,fillings,fiddling,festivals,fertilization,fennyman,felonious,felonies,feces,favoritism,fatten,fanfare,fanatics,faceman,extensions,executions,executing,excusing,excepted,examiner's,ex's,evaluating,eugh,erroneous,enzyme,envoy,entwined,entrances,ensconced,enrollment,england's,enemy's,emit,emerges,embankment,em's,ellison's,electrons,eladio,ehrlichman,easterland,dylan's,dwellers,dueling,dubbed,dribbling,drape,doze,downtrodden,doused,dosed,dorleen,dopamine,domesticated,dokie,doggone,disturbances,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,disabilities,diperna,dioxide,dined,diligent,dicaprio,diameter,dialect,detonated,destitute,designate,depress,demolish,demographics,degraded,deficient,decoded,debatable,dealey,darsh,dapper,damsels,damning,daisy's,dad'll,d'oeuvre,cutter's,curlers,curie,cubed,cryo,critically,crikey,crepes,crackhead,countrymen,count's,correlation,cornfield,coppers,copilot,copier,coordinating,cooing,converge,contributor,conspiracies,consolidated,consigliere,consecrated,configuration,conducts,condoning,condemnation,communities,commoner,commies,commented,comical,combust,comas,colds,clod,clique,clay's,clawed,clamped,cici,christianity,choosy,chomping,chimps,chigorin,chianti,cheval,chet's,cheep,checkups,check's,cheaters,chase's,charted,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,carb,capturing,canteen,candlesticks,candies,candidacy,canasta,calendars,cain't,caboose,buster's,burro,burnin,buon,bunking,bumming,bullwinkle,budgets,brummel,brooms,broadcasts,britt's,brews,breech,breathin,braslow,bracing,bouts,botulism,bosnia,boorish,bluenote,bloodless,blayne,blatantly,blankie,birdy,bene,beetles,bedbugs,becuase,becks,bearers,bazooka,baywatch,bavarian,baseman,bartender's,barrister,barmaid,barges,bared,baracus,banal,bambino,baltic,baku,bakes,badminton,bacon's,backpacks,authorizing,aurelius,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,artistry,arnon,aren,approximate,apprehension,appraisal,applauding,anya's,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,allegation,alienation,algerian,algae,alerting,airport's,aided,agricultural,afterthought,affront,affirm,adapted,actuality,acoustics,acoustic,accumulate,accountability,abysmal,absentee,zimm,yves,yoohoo,ymca,yeller,yakushova,wuzzy,wriggle,worrier,workmen,woogyman,womanizer,windpipe,windex,windbag,willy's,willin,widening,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,wartime,waaay,vowel,vouched,volkswagen,viznick,visuals,visitor's,veteran's,ventriloquist,venomous,vendors,vendettas,veils,vehicular,vayhue,vary,varies,van's,vamanos,vadimus,uuhh,upstage,uppity,upheaval,unsaid,unlocking,universally,unintentionally,undisputed,undetected,undergraduate,undergone,undecided,uncaring,unbearably,twos,tween,tuscan,turkey's,tumor's,tryout,trotting,tropics,trini,trimmings,trickier,tree's,treatin,treadstone,trashcan,transports,transistor,transcendent,tramps,toxicity,townsfolk,torturous,torrid,toothpicks,tombs,tolerable,toenail,tireless,tiptoeing,tins,tinkerbell,tink,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,thompson's,these'll,testicular,terminology,teriyaki,tenors,tenacity,tellers,telemetry,teas,tea's,tarragon,taliban,switchblade,swicker,swells,sweatshirts,swatches,swatch,swapped,suzanne's,surging,supremely,suntan,sump'n,suga,succumb,subsidize,subordinate,stumbles,stuffs,stronghold,stoppin,stipulate,stewie's,stenographer,steamroll,stds,stately,stasis,stagger,squandered,splint,splendidly,splatter,splashy,splashing,spectra's,specter,sorry's,sorcerers,soot,somewheres,somber,solvent,soldier's,soir,snuggled,snowmobile,snowball's,sniffed,snake's,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,skirmish,siree,siphoning,singed,sincerest,signifying,sidney's,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,shingle,sheetrock,shawshank,shamu,sha're,servitude,sequins,seinfeld's,seat's,seascape,seam,sculptor,scripture,scrapings,scoured,scoreboard,scorching,sciences,sara's,sandpaper,salvaged,saluting,salud,salamander,rugrats,ruffles,ruffled,rudolph's,router,roughnecks,rougher,rosslyn,rosses,rosco's,roost,roomy,romping,romeo's,robs,roadie,ride's,riddler,rianna's,revolutionize,revisions,reuniting,retake,retaining,restitution,restaurant's,resorts,reputed,reprimanded,replies,renovate,remnants,refute,refrigerated,reforms,reeled,reefs,reed's,redundancies,rectangle,rectal,recklessly,receding,reassignment,rearing,reapers,realms,readout,ration,raring,ramblings,racetrack,raccoons,quoi,quell,quarantined,quaker,pursuant,purr,purging,punters,pulpit,publishers,publications,psychologists,psychically,provinces,proust,protocols,prose,prophets,project's,priesthood,prevailed,premarital,pregnancies,predisposed,precautionary,poppin,pollute,pollo,podunk,plums,plaything,plateau,pixilated,pivot,pitting,piranhas,pieced,piddles,pickled,picker,photogenic,phosphorous,phases,pffft,petey's,pests,pestilence,pessimist,pesos,peruvian,perspiration,perps,penticoff,pedals,payload,passageways,pardons,paprika,paperboy,panics,pancamo,pam's,paleontologist,painting's,pacifist,ozzie,overwhelms,overstating,overseeing,overpaid,overlap,overflow,overdid,outspoken,outlive,outlaws,orthodontist,orin,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,oakwood,nymph,nutritional,nuremberg,nozzle,novocaine,notable,noooooooooo,node,nipping,nilly,nikko,nightstick,nicaragua,neurology,nelson's,negate,neatness,natured,narrowly,narcotic,narcissism,napoleon's,nana's,namun,nakatomi,murky,muchacho,mouthwash,motzah,motherfucker's,mortar,morsel,morrison's,morph,morlocks,moreover,mooch,monoxide,moloch,molest,molding,mohra,modus,modicum,mockolate,mobility,missionaries,misdemeanors,miscalculation,minorities,middies,metric,mermaids,meringue,mercilessly,merchandising,ment,meditating,me'n,mayakovsky,maximillian,martinique,marlee,markovski,marissa's,marginal,mansions,manitoba,maniacal,maneuvered,mags,magnificence,maddening,lyrical,lutze,lunged,lovelies,lou's,lorry,loosening,lookee,liver's,liva,littered,lilac,lightened,lighted,licensing,lexington,lettering,legality,launches,larvae,laredo,landings,lancelot's,laker,ladyship's,laces,kurzon,kurtzweil,kobo,knowledgeable,kinship,kind've,kimono,kenji,kembu,keanu,kazuo,kayaking,juniors,jonesing,joad,jilted,jiggling,jewelers,jewbilee,jeffrey's,jamey's,jacqnoud,jacksons,jabs,ivories,isnt,irritation,iraqis,intellectuals,insurmountable,instances,installments,innocuous,innkeeper,inna,influencing,infantery,indulged,indescribable,incorrectly,incoherent,inactive,inaccurate,improperly,impervious,impertinent,imperfections,imhotep,ideology,identifies,i'il,hymns,huts,hurdles,hunnert,humpty,huffy,hourly,horsies,horseradish,hooo,honours,honduras,hollowed,hogwash,hockley,hissing,hiromitsu,hierarchy,hidin,hereafter,helpmann,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,gunn's,grossly,grossed,grope,grocer,grits,gripping,greenpeace,granddad's,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,galactic,gairwyn,gail's,futterman,futility,fumigated,fruitless,friendless,freon,fraternities,franc,fractions,foxes,foregone,forego,foliage,flux,floored,flighty,fleshy,flapjacks,fizzled,fittings,fisherman's,finalist,ficus,festering,ferragamo's,federation,fatalities,farbman,familial,famed,factual,fabricate,eyghon,extricate,exchanges,exalted,evolving,eventful,esophagus,eruption,envision,entre,enterprising,entail,ensuring,enrolling,endor,emphatically,eminent,embarrasses,electroshock,electronically,electrodes,efficiently,edinburgh,ecstacy,ecological,easel,dwarves,duffle,drumsticks,drake's,downstream,downed,dollface,divas,distortion,dissent,dissection,dissected,disruptive,disposing,disparaging,disorientation,disintegrated,discounts,disarming,dictated,devoting,deviation,detective's,dessaline,deprecating,deplorable,delve,deity,degenerative,deficiencies,deduct,decomposed,deceased's,debbie's,deathly,dearie,daunting,dankova,czechoslovakia,cyclotron,cyberspace,cutbacks,cusp,culpable,cuddled,crypto,crumpets,cruises,cruisers,cruelly,crowns,crouching,cristo,crip,criminology,cranium,cramming,cowering,couric,counties,cosy,corky's,cordesh,conversational,conservatory,conklin's,conducive,conclusively,competitions,compatibility,coeur,clung,cloud's,clotting,cleanest,classify,clambake,civilizations,cited,cipher,cinematic,chlorine,chipping,china's,chimpanzee,chests,checkpoints,cheapen,chainsaws,censure,censorship,cemeteries,celebrates,ceej,cavities,catapult,cassettes,cartridge,caravaggio,carats,captivating,cancers,campuses,campbell's,calrissian,calibre,calcutta,calamity,butt's,butlers,busybody,bussing,bureau's,bunion,bundy's,bulimic,bulgaria,budging,brung,browbeat,brokerage,brokenhearted,brecher,breakdowns,braun's,bracebridge,boyhood,botanical,bonuses,boning,blowhard,bloc,blisters,blackboard,blackbird,births,birdies,bigotry,biggy,bibliography,bialy,bhamra,bethlehem,bet's,bended,belgrade,begat,bayonet,bawl,battering,baste,basquiat,barrymore,barrington's,barricaded,barometer,balsom's,balled,ballast,baited,badenweiler,backhand,aztec,axle,auschwitz,astrophysics,ascenscion,argumentative,arguably,arby's,arboretum,aramaic,appendicitis,apparition,aphrodite,anxiously,antagonistic,anomalies,anne's,angora,anecdotes,anand,anacott,amniotic,amenities,ambience,alonna,aleck,albert's,akashic,airing,ageless,afro,affiliates,advertisers,adobe,adjustable,acrobat,accommodation,accelerating,absorbing,abouts,abortions,abnormalities,aawwww,aaaaarrrrrrggghhh,zuko's,zoloft,zendi,zamboni,yuppies,yodel,y'hear,wyck,wrangle,wounding,worshippers,worker's,worf,wombosi,wittle,withstanding,wisecracks,williamsburg,wilder's,wiggly,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weighted,weakling,waxy,waverly,wasps,warhol,warfarin,waponis,wampum,walled,wadn't,waco,vorash,vogler's,vizzini,visas,virtucon,viridiana,veve,vetoed,vertically,veracity,ventricular,ventilated,varicose,varcon,vandalized,vampire's,vamos,vamoose,val's,vaccinated,vacationing,usted,urinal,uppers,upkeep,unwittingly,unsigned,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unearthed,unbreakable,unanimously,unadvisedly,udall,tynacorp,twisty,tuxes,tussle,turati,tunic,tubing,tsavo,trussed,troublemakers,trollop,trip's,trinket,trilogy,tremors,trekkie,transsexual,transitional,transfusions,tractors,toothbrushes,toned,toke,toddlers,titan's,tita,tinted,timon,timeslot,tightened,thundering,thorpey,thoracic,this'd,thespian,therapist's,theorem,thaddius,texan,tenuous,tenths,tenement,telethon,teleprompter,technicolor,teaspoon,teammate,teacup,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,tanith,tandem,talons,talcum,tais,tacks,synchronized,swivel,swig,swaying,swann's,suppression,supplements,superpower,summed,summarize,sumbitch,sultry,sulfur,sues,subversive,suburbia,substantive,styrofoam,stylings,struts,strolls,strobe,streaks,strategist,stockpile,stewardesses,sterilized,sterilize,stealin,starred,stakeouts,stad,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,spectators,specialties,sparklers,spareribs,sowing,sororities,sorbonne,sonovabitch,solicit,softy,softness,softening,socialite,snuggling,snatchers,snarling,snarky,snacking,smythe's,smears,slumped,slowest,slithering,sleepers,sleazebag,slayed,slaughtering,skynet,skidded,skated,sivapathasundaram,sitter's,sitcoms,sissies,sinai,silliness,silences,sidecar,sicced,siam,shylock,shtick,shrugged,shriek,shredder,shoves,should'a,shorten,shortcake,shockingly,shirking,shelly's,shedding,shaves,shatner,sharpener,shapely,shafted,sexless,sequencing,septum,semitic,selflessness,sega,sectors,seabea,scuff,screwball,screened,scoping,scooch,scolding,scholarly,schnitzel,schemed,scalper,sayings,saws,sashimi,santy,sankara,sanest,sanatorium,sampled,samoan,salzburg,saltwater,salma,salesperson,sakulos,safehouse,sabers,rwanda,ruth's,runes,rumblings,rumbling,ruijven,roxie's,round's,ringers,rigorous,righto,rhinestones,reviving,retrieving,resorted,reneging,remodelling,reliance,relentlessly,relegated,relativity,reinforced,reigning,regurgitate,regulated,refills,referencing,reeking,reduces,recreated,reclusive,recklessness,recanted,ranges,ranchers,rallied,rafer,racy,quintet,quaking,quacks,pulses,provision,prophesied,propensity,pronunciation,programmer,profusely,procedural,problema,principals,prided,prerequisite,preferences,preceded,preached,prays,postmark,popsicles,poodles,pollyanna,policing,policeman's,polecat,polaroids,polarity,pokes,poignant,poconos,pocketful,plunging,plugging,pleeease,pleaser,platters,pitied,pinetti,piercings,phyllis's,phooey,phonies,pestering,periscope,perennial,perceptions,pentagram,pelts,patronized,parliamentary,paramour,paralyze,paraguay,parachutes,pancreatic,pales,paella,paducci,oxymoron,owatta,overpass,overgrown,overdone,overcrowded,overcompensating,overcoming,ostracized,orphaned,organise,organisation,ordinate,orbiting,optometrist,oprah's,operandi,oncology,on's,omoc,omens,okayed,oedipal,occupants,obscured,oboe,nuys,nuttier,nuptial,nunheim,noxious,nourish,notepad,notation,nordic,nitroglycerin,niki's,nightmare's,nightlife,nibblet,neuroses,neighbour's,navy's,nationally,nassau,nanosecond,nabbit,mythic,murdock's,munchkins,multiplied,multimillion,mulroney,mulch,mucous,muchas,moxie,mouth's,mountaintop,mounds,morlin,mongorians,moneymaker,moneybags,monde,mom'll,molto,mixup,mitchell's,misgivings,misery's,minerals,mindset,milo's,michalchuk,mesquite,mesmerized,merman,mensa,megan's,media's,meaty,mbwun,materialize,materialistic,mastery,masterminded,mastercard,mario's,marginally,mapuhe,manuscripts,manny's,malvern,malfunctioning,mahatma,mahal,magnify,macnamara,macinerney,machinations,macarena,macadamia,lysol,luxembourg,lurks,lumpur,luminous,lube,lovelorn,lopsided,locator,lobbying,litback,litany,linea,limousines,limo's,limes,lighters,liechtenstein,liebkind,lids,libya,levity,levelheaded,letterhead,lester's,lesabre,leron,lepers,legions,lefts,leftenant,learner's,laziness,layaway,laughlan,lascivious,laryngitis,laptops,lapsed,laos,landok,landfill,laminated,laden,ladders,labelled,kyoto,kurten,kobol,koala,knucklehead,knowed,knotted,kit's,kinsa,kiln,kickboxing,karnovsky,karat,kacl's,judiciary,judaism,journalistic,jolla,joked,jimson,jettison,jet's,jeric,jeeves,jay's,jawed,jankis,janitors,janice's,jango,jamaican,jalopy,jailbreak,jackers,jackasses,j'ai,ivig,invalidate,intoxicated,interstellar,internationally,intercepting,intercede,integrate,instructors,insinuations,insignia,inn's,inflicting,infiltrated,infertile,ineffective,indies,indie,impetuous,imperialist,impaled,immerse,immaterial,imbeciles,imam,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hydraulic,hurtling,hurried,hunchback,hums,humid,hullo,hugger,hubby's,howard's,hostel,horsting,horned,hoooo,homies,homeboys,hollywood's,hollandaise,hoity,hijinks,heya,hesitates,herrero,herndorff,hemp,helplessly,heeyy,heathen,hearin,headband,harv,harrassment,harpies,harmonious,harcourt,harbors,hannah's,hamstring,halstrom,hahahahaha,hackett's,hacer,gunmen,guff,grumbling,grimlocks,grift,greets,grandmothers,grander,granddaughter's,gran's,grafts,governing,gordievsky,gondorff,godorsky,goddesses,glscripts,gillman's,geyser,gettysburg,geological,gentlemen's,genome,gauntlet,gaudy,gastric,gardeners,gardener's,gandolf,gale's,gainful,fuses,fukienese,fucker's,frizzy,freshness,freshening,freb,fraught,frantically,fran's,foxbooks,fortieth,forked,forfeited,forbidding,footed,foibles,flunkies,fleur,fleece,flatbed,flagship,fisted,firefight,fingerpaint,fined,filibuster,fiancee's,fhloston,ferrets,fenceline,femur,fellow's,fatigues,farmhouse,fanucci,fantastically,familiars,falafel,fabulously,eyesore,extracting,extermination,expedient,expectancy,exiles,executor,excluding,ewwww,eviscerated,eventual,evac,eucalyptus,ethnicity,erogenous,equestrian,equator,epidural,enrich,endeavors,enchante,embroidered,embarassed,embarass,embalming,emails,elude,elspeth,electrocute,electrified,eigth,eheh,eggshell,eeyy,echinacea,eases,earpiece,earlobe,dwarfs,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,drainage,dracula's,dorma,dolittle,doily,divvy,diverting,ditz,dissuade,disrespecting,displacement,displace,disorganized,dismantled,disgustingly,discriminate,discord,disapproving,dinero,dimwit,diligence,digitally,didja,diddy,dickless,diced,devouring,devlin's,detach,destructing,desperado,desolate,designation,derek's,deposed,dependency,dentist's,demonstrates,demerits,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dazs,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cuvee's,cussing,curate,cryss,cripes,cretins,creature's,crapper,crackerjack,cower,coveting,couriers,countermission,cotswolds,cornholio,copa,convinces,convertibles,conversationalist,contributes,conspirators,consorting,consoled,conservation,consarn,confronts,conformity,confides,confidentially,confederacy,concise,competence,commited,commissioners,commiserate,commencing,comme,commandos,comforter,comeuppance,combative,comanches,colosseum,colling,collaboration,coli,coexist,coaxing,cliffside,clayton's,clauses,cia's,chuy,chutes,chucked,christian's,chokes,chinaman,childlike,childhoods,chickening,chicano,chenowith,chassis,charmingly,changin,championships,chameleon,ceos,catsup,carvings,carlotta's,captioning,capsize,cappucino,capiche,cannonball,cannibal,candlewell,cams,call's,calculation,cakewalk,cagey,caesar's,caddie,buxley,bumbling,bulky,bulgarian,bugle,buggered,brussel,brunettes,brumby,brotha,bros,bronck,brisket,bridegroom,breathing's,breakout,braveheart,braided,bowled,bowed,bovary,bordering,bookkeeper,bluster,bluh,blue's,blot,bloodline,blissfully,blarney,binds,billionaires,billiard,bide,bicycles,bicker,berrisford,bereft,berating,berate,bendy,benches,bellevue,belive,believers,belated,beikoku,beens,bedspread,bed's,bear's,bawdy,barrett's,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,backdrop,awkwardly,avoids,avocado,auras,attuned,attends,atheists,astaire,assuredly,art's,arrivederci,armaments,arises,argyle,argument's,argentine,appetit,appendectomy,appealed,apologetic,antihistamine,antigua,anesthesiologist,amulets,algonquin,alexander's,ales,albie,alarmist,aiight,agility,aforementioned,adstream,adolescents,admirably,adjectives,addison's,activists,acquaint,acids,abound,abominable,abolish,abode,abfc,aaaaaaah,zorg,zoltan,zoe's,zekes,zatunica,yama,wussy,wrcw,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whitey's,whitaker's,whisker,whims,whatiya,whadya,westerns,welded,weirdly,weenies,webster's,waunt,washout,wanto,waning,vitality,vineyards,victimless,vicki's,verdad,veranda,vegan,veer,vandaley,vancouver,vancomycin,valise,validated,vaguest,usefulness,upshot,uprising,upgrading,unzip,unwashed,untrained,unsuitable,unstuck,unprincipled,unmentionables,unjustly,unit's,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,unbeknownst,unaffected,ubiquitous,tyndareus,tutors,turncoat,turlock,tulle,tuesday's,tryouts,truth's,trouper,triplette,trepkos,tremor,treeger,treatment's,traveller,traveler's,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,tilted,thumbprint,throat's,this's,theater's,thankless,terrestrial,tenney's,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tc's,tarred,tankers,tambourine,talentless,taki,takagi,swooped,switcheroo,swirly,sweatpants,surpassed,surgeon's,supermarkets,sunstroke,suitors,suggestive,sugarcoat,succession,subways,subterfuge,subservient,submitting,subletting,stunningly,student's,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stimuli,stigmata,stifle,stealer,statewide,stark's,stardom,stalemate,staggered,squeezes,squatter,squarely,sprouted,spool,spirit's,spindly,spellman's,speedos,specify,specializing,spacey,soups,soundly,soulmates,somethin's,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,slender,skyscrapers,skulk,skivvies,skillful,skewered,skewer,skaters,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,shiv,shifter,sharply,sharpened,shareholder,shapeshifter,shadowing,shadoe,serviced,selwyn,selectman,sefelt,seared,seamen,scrounging,scribbling,scotty's,scooping,scintillating,schmoozing,schenectady,scene's,scattering,scampi,scallops,sat's,sapphires,sans,sanitarium,sanded,sanction,safes,sacrificial,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rile,ricochet,rhinoceros,rewrote,reverence,revamp,retaliatory,rescues,reprimand,reportedly,replicators,replaceable,repeal,reopening,renown,remo's,remedied,rembrandt,relinquishing,relieving,rejoicing,reincarnated,reimbursed,refinement,referral,reevaluate,redundancy,redid,redefine,recreating,reconnected,recession,rebelling,reassign,rearview,reappeared,readily,rayne,ravings,ravage,ratso,rambunctious,rallying,radiologist,quiver,quiero,queef,quark,qualms,pyrotechnics,pyro,puritan,punky,pulsating,publisher's,psychosomatic,provisional,proverb,protested,proprietary,promiscuous,profanity,prisoner's,prioritize,preying,predisposition,precocious,precludes,preceding,prattling,prankster,povich,potting,postpartum,portray,porter's,porridge,polluting,pogo,plowing,plating,plankton,pistachio,pissin,pinecone,pickpocket,physicists,physicals,pesticides,peruse,pertains,personified,personalize,permitting,perjured,perished,pericles,perfecting,percentages,pepys,pepperdine,pembry,peering,peels,pedophile,patties,pathogen,passkey,parrots,paratroopers,paratrooper,paraphernalia,paralyzing,panned,pandering,paltry,palpable,painkiller,pagers,pachyderm,paced,overtaken,overstay,overestimated,overbite,outwit,outskirts,outgrow,outbid,origins,ordnance,ooze,ooops,oomph,oohhh,omni,oldie,olas,oddball,observers,obscurity,obliterate,oblique,objectionable,objected,oars,o'keefe,nygma,nyet,nouveau,notting,nothin's,noches,nnno,nitty,nighters,nigger's,niche,newsstands,newfoundland,newborns,neurosurgery,networking,nellie's,nein,neighboring,negligible,necron,nauseated,nastiest,nasedo's,narrowing,narrator,narcolepsy,napa,nala,nairobi,mutilate,muscled,murmur,mulva,multitude,multiplex,mulling,mules,mukada,muffled,mueller's,motorized,motif,mortgages,morgues,moonbeams,monogamy,mondays,mollusk,molester,molestation,molars,modifications,modeled,moans,misuse,misprint,mismatched,mirth,minnow,mindful,mimosas,millander,mikhail,mescaline,mercutio,menstrual,menage,mellowing,medicaid,mediator,medevac,meddlesome,mcgarry's,matey,massively,massacres,marky,many's,manifests,manifested,manicures,malevolent,malaysian,majoring,madmen,mache,macarthur's,macaroons,lydell,lycra,lunchroom,lunching,lozenges,lorenzo's,looped,look's,lolly,lofty,lobbyist,litigious,liquidate,linoleum,lingk,lincoln's,limitless,limitation,limber,lilacs,ligature,liftoff,lifeboats,lemmiwinks,leggo,learnin,lazarre,lawyered,landmarks,lament,lambchop,lactose,kringle,knocker,knelt,kirk's,kins,kiev,keynote,kenyon's,kenosha,kemosabe,kazi,kayak,kaon,kama,jussy,junky,joyce's,journey's,jordy,jo's,jimmies,jetson,jeriko,jean's,janet's,jakovasaur,jailed,jace,issacs,isotopes,isabela,irresponsibility,ironed,intravenous,intoxication,intermittent,insufficient,insinuated,inhibitors,inherits,inherently,ingest,ingenue,informs,influenza,inflexible,inflame,inevitability,inefficient,inedible,inducement,indignant,indictments,indentured,indefensible,inconsistencies,incomparable,incommunicado,in's,improvising,impounded,illogical,ignoramus,igneous,idlewild,hydrochloric,hydrate,hungover,humorless,humiliations,humanoid,huhh,hugest,hudson's,hoverdrone,hovel,honor's,hoagie,hmmph,hitters,hitchhike,hit's,hindenburg,hibernating,hermione,herds,henchman,helloooo,heirlooms,heaviest,heartsick,headshot,headdress,hatches,hastily,hartsfield's,harrison's,harrisburg,harebrained,hardships,hapless,hanen,handsomer,hallows,habitual,habeas,guten,gus's,gummy,guiltier,guidebook,gstaad,grunts,gruff,griss,grieved,grids,grey's,greenville,grata,granny's,gorignak,goosed,goofed,goat's,gnarly,glowed,glitz,glimpses,glancing,gilmores,gilligan's,gianelli,geraniums,georgie's,genitalia,gaydar,gart,garroway,gardenia,gangbusters,gamblers,gamble's,galls,fuddy,frumpy,frowning,frothy,fro'tak,friars,frere,freddy's,fragrances,founders,forgettin,footsie,follicles,foes,flowery,flophouse,floor's,floatin,flirts,flings,flatfoot,firefighter,fingerprinting,fingerprinted,fingering,finald,film's,fillet,file's,fianc,femoral,fellini,federated,federales,faze,fawkes,fatally,fascists,fascinates,farfel,familiarity,fambly,falsified,fait,fabricating,fables,extremist,exterminators,extensively,expectant,excusez,excrement,excercises,excavation,examinations,evian,evah,etins,esther's,esque,esophageal,equivalency,equate,equalizer,environmentally,entrees,enquire,enough's,engine's,endorsed,endearment,emulate,empathetic,embodies,emailed,eggroll,edna's,economist,ecology,eased,earmuffs,eared,dyslexic,duper,dupe,dungeons,duncan's,duesouth,drunker,drummers,druggie,dreadfully,dramatics,dragnet,dragline,dowry,downplay,downers,doritos,dominatrix,doers,docket,docile,diversify,distracts,disruption,disloyalty,disinterested,disciple,discharging,disagreeable,dirtier,diplomats,dinghy,diner's,dimwitted,dimoxinil,dimmy,dietary,didi,diatribe,dialects,diagrams,diagnostics,devonshire,devising,deviate,detriment,desertion,derp,derm,dept,depressants,depravity,dependence,denounced,deniability,demolished,delinquents,defiled,defends,defamation,deepcore,deductive,decrease,declares,declarations,decimated,decimate,deb's,deadbolt,dauthuille,dastardly,darla's,dans,daiquiris,daggers,dachau,d'ah,cymbals,customized,curved,curiouser,curdled,cupid's,cults,cucamonga,cruller,cruces,crow's,crosswalk,crossover,crinkle,crescendo,cremate,creeper,craftsman,cox's,counteract,counseled,couches,coronet,cornea,cornbread,corday,copernicus,conveyed,contrition,contracting,contested,contemptible,consultants,constructing,constipated,conqueror,connor's,conjoined,congenital,confounded,condescend,concubine,concoct,conch,concerto,conceded,compounded,compensating,comparisons,commoners,committment,commencement,commandeered,comely,coined,cognitive,codex,coddled,cockfight,cluttered,clunky,clownfish,cloaked,cliches,clenched,cleft,cleanin,cleaner's,civilised,circumcised,cimmeria,cilantro,chutzpah,chutney,chucking,chucker,chronicles,chiseled,chicka,chicago's,chattering,charting,characteristic,chaise,chair's,cervix,cereals,cayenne,carrey,carpal,carnations,caricature,cappuccinos,candy's,candied,cancer's,cameo,calluses,calisthenics,cadre,buzzsaw,bushy,burners,bundled,bum's,budington,buchanans,brock's,britons,brimming,breeders,breakaway,braids,bradley's,boycotting,bouncers,botticelli,botherin,boosting,bookkeeping,booga,bogyman,bogged,bluepoint's,bloodthirsty,blintzes,blanky,blak,biosphere,binturong,billable,bigboote,bewildered,betas,bernard's,bequeath,beirut,behoove,beheaded,beginners,beginner,befriend,beet,bedpost,bedded,bay's,baudelaires,barty,barreled,barboni,barbeque,bangin,baltus,bailout,bag's,backstabber,baccarat,awning,awaited,avenues,austen,augie,auditioned,auctions,astrology,assistant's,assassinations,aspiration,armenians,aristocrat,arguillo,archway,archaeologist,arcane,arabic,apricots,applicant,apologising,antennas,annyong,angered,andretti,anchorman,anchored,amritsar,amour,amidst,amid,americana,amenable,ambassadors,ambassador's,amazement,allspice,alannis,airliner,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,afternoon's,afghan,affirmation,affiliate,aegean,adrenal,actor's,acidosis,achy,achoo,accessorizing,accentuate,academically,abuses,abrasions,abilene,abductor,aaaahhh,zuzu,zoot,zeroing,zelner,zeldy,yo's,yevgeny,yeup,yeska,yellows,yeesh,yeahh,yamuri,yaks,wyatt's,wspr,writing's,wrestlers,wouldn't've,workmanship,woodsman,winnin,winked,wildness,widespread,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,whaling,westerburg,wegener's,weekdays,weeding,weaving,watermelons,watcher's,washboard,warmly,wards,waltzes,walt's,walkway,waged,wafting,voulez,voluptuous,vitone,vision's,villa's,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,ventured,vaya,vaults,vases,vasculitis,varieties,vapor,valets,upriver,upholstered,upholding,unwavering,unused,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unilaterally,unglued,unequivocal,underside,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,turnovers,tugging,trouble's,triads,trespasses,treehorn,traviata,trappers,transplants,transforming,trannie,tramping,trainers,traders,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,tine,tilting,thruster,thoughtfulness,thornwood,therapies,thanksgiving's,tha's,terri's,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,teddy's,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surrey,surges,surf's,supermodels,superhighway,sunup,sun'll,summaries,sumerian,sulu,sulphur,sullivan's,sulfa,suis,sugarless,sufficed,substituted,subside,submerged,subdue,styling,strolled,stringy,strengthens,street's,straightest,straightens,storyteller,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stereotypical,stepladder,stepbrother,steers,steeple,steelheads,steakhouse,statue's,stathis,stankylecartmankennymr,standoffish,stalwart,stallions,stacy's,squirted,squeaker,squad's,spuds,spritz,sprig,sprawl,spousal,sportsman,sphincter,spenders,spearmint,spatter,sparrows,spangled,southey,soured,sonuvabitch,somethng,societies,snuffed,snowfall,snowboarding,sniffs,snafu,smokescreen,smilin,slurred,slurpee,slums,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skateboarding,skanks,sixed,siri,sired,siphoned,siphon,singer's,simpering,silencer,sigfried,siena,sidearm,siddons,sickie,siberian,shuteye,shuk,shuffleboard,shrubberies,shrouded,showmanship,shower's,shouldn't've,shortwave,shoplift,shooter's,shiatsu,sheriffs,shak,shafts,serendipity,serena's,sentries,sentance,sensuality,semesters,seething,sedition,secular,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schwarzenegger,schoolers,schmucks,scepters,scaly,scalps,scaling,scaffolding,sauces,sartorius,santen,sampler,salivating,salinger,sainthood,said's,saget,saddens,rygalski,rusting,rumson's,ruination,rueland,rudabaga,rubles,rowr,rottweiler,rotations,roofies,romantics,rollerblading,roldy,rob's,roadshow,rike,rickets,rible,rheza,revisiting,revisited,reverted,retrospective,retentive,resurface,restores,respite,resounding,resorting,resolutions,resists,repulse,repressing,repaying,reneged,relays,relayed,reinforce,regulator,registers,refunds,reflections,rediscover,redecorated,recruitment,reconstructive,reconstructed,recommitted,recollect,recoil,recited,receptor,receptacle,receivers,reassess,reanimation,realtors,razinin,ravaged,ratios,rationalization,ratified,ratatouille,rashum,rasczak,rarer,rapping,rancheros,rampler,rain's,railway,racehorse,quotient,quizzing,quips,question's,quartered,qualification,purring,pummeling,puede,publicized,psychedelic,proximo,proteins,protege,prospectus,pronouncing,pronoun,prolonging,program's,proficient,procreation,proclamations,prio,principled,prides,pricing,presbyterian,preoccupation,prego,preferential,predicts,precog,prattle,pounced,potshots,potpourri,portsmouth,porque,poppie's,poms,pomeranian,pomegranates,polynesian,polymer,polenta,plying,plume,plumber's,pluie,plough,plesac,playoff,playmates,planter,plantains,plaintiff's,pituitary,pisano's,pillowcase,piddle,pickers,phys,photocopied,philistine,pfeiffer's,peyton's,petitioned,persuading,perpetuate,perpetually,periodically,perilous,pensacola,pawned,pausing,pauper,patterned,pats,patronage,passover,partition,parter,parlez,parlay,parkinson's,parades,paperwork's,pally,pairing,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,ouzo,outweighs,outings,outfit's,out's,ottos,orrin,originate,orifice,orangutan,optimal,optics,opportunistic,ooww,oopsy,ooooooooh,ooohhhh,onyx,onslaught,oldsmobile,ocular,ocean's,obstruct,obscenely,o'dwyer,o'brien's,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,network's,nestled,nessie,necessities,nearsighted,ne'er,nazareth,navidad,nastier,nasa's,narco,nakedness,muted,mummified,multiplying,mudda,mtv's,mozzarella,moxica,motorists,motivator,motility,mothafucka,mortmain,mortgaged,mortally,moroccan,mores,moonshine,mongers,moe's,modify,mobster's,mobilization,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mirrored,mineshaft,mimosa,millers,millaney,miho,midday,microwaves,mick's,metzenbaum,metres,merc,mentoring,medicine's,mccovey,maya's,mau's,masterful,masochistic,martie,marliston,market's,marijawana,marie's,marian's,manya,manuals,mantumbi,mannheim,mania,mane,mami's,malarkey,magnifique,magics,magician's,madrona,madox,madison's,machida,m'mm,m'hm,m'hidi,lyric,luxe,luther's,lusty,lullabies,loveliness,lotions,looka,lompoc,loader,litterbug,litigator,lithe,liquorice,lins,linguistics,linds,limericks,lightbulb,lewises,letch,lemec,lecter's,leavenworth,leasing,leases,layover,layered,lavatory,laurels,launchers,laude,latvian,lateness,lasky's,laparotomy,landlord's,laboring,la's,kumquat,kuato,kroff,krispy,kree,krauts,kona,knuckleheads,knighthood,kiva,kitschy,kippers,kip's,kimbrow,kike,keypad,keepsake,kebab,keane's,kazakhstan,karloff,justices,junket,juicer,judy's,judgemental,jsut,jointed,jogs,jezzie,jetting,jekyll,jehovah's,jeff's,jeeze,jeeter,jeesus,jeebs,janeane,jalapeno,jails,jailbait,jagged,jackin,jackhammer,jacket's,ixnay,ivanovich,issue's,isotope,island's,irritates,irritability,irrevocable,irrefutable,irma's,irked,invoking,intricacies,interferon,intents,inte,insubordinate,instructive,instinctive,inspector's,inserting,inscribed,inquisitive,inlay,injuns,inhibited,infringement,information's,infer,inebriated,indignity,indecisive,incisors,incacha,inauguration,inalienable,impresses,impregnate,impregnable,implosion,immersed,ikea,idolizes,ideological,idealism,icepick,hypothyroidism,hypoglycemic,hyde's,hutz,huseni,humvee,hummingbird,hugely,huddling,housekeeper's,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hinder,himalayan,hikita,hikes,hightailed,hieroglyphics,heyy,heuh,heretofore,herbalist,her's,henryk,henceforth,hehey,hedriks,heartstrings,headmistress,headlight,harvested,hardheaded,happend,handlers,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,grooves,groan,greenbacks,greats,gravedigger,grating,grasshoppers,grappling,graph,granger's,grandiose,grandest,gram's,grains,grafted,gradual,grabthar's,goop,gooood,goood,gooks,godsakes,goaded,gloria's,glamorama,giveth,gingham,ghostbusters,germane,georgy,geisha,gazzo,gazelles,gargle,garbled,galgenstein,galapagos,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frommer's,frighteningly,fresco,freebies,freakshow,freakishly,fraudulent,fragrant,forewarned,foreclose,forearms,fordson,ford's,fonics,follies,foghorn,fly's,flushes,fluffy's,flitting,flintstone,flemmer,flatline,flamboyant,flabby,fishbowl,firsts,finger's,financier,figs,fidgeting,fictitious,fevers,feur,ferns,feminism,fema,feigning,faxing,fatigued,fathoms,fatherless,fares,fancier,fanatical,fairs,factored,eyelid,eyeglasses,eye's,expresso,exponentially,expletive,expectin,excruciatingly,evidentiary,ever'thing,evelyn's,eurotrash,euphoria,eugene's,eubie,ethiopian,ethiopia,estrangement,espanol,erupted,ernie's,erlich,eres,epitome,epitaph,environments,environmentalists,entrap,enthusiastically,entertainers,entangled,enclose,encased,empowering,empires,emphysema,embers,embargo,emasculating,elizabethan,elephant's,eighths,egyptians,effigy,editions,echoing,eardrum,dyslexia,duplicitous,duplicated,dumpty,dumbledore,dufus,dudley's,duddy,duck's,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,downey's,douggie,douchebag,dostoyevsky,dorian's,doodling,don'tcha,domo,domineering,doings,dogcatcher,documenting,doctoring,doctoral,dockers,divides,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,discretionary,discard,disavowed,directives,dippy,diorama,dimmed,diminishing,dilate,dijon,digitalis,diggory,dicing,diagnosing,devout,devola,developmental,deter,destiny's,desolation,descendant,derived,derevko's,deployment,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,defenders,deduced,decrepit,decreed,decoding,deciphered,dazed,dawdle,dauphine,daresay,dangles,dampen,damndest,customer's,curricular,cucumbers,cucaracha,cryogenically,cruella,crowd's,croaks,croaked,criticise,crit,crisper,creepiest,creep's,credit's,creams,crawford's,crackle,crackin,covertly,cover's,county's,counterintelligence,corrosive,corpsman,cordially,cops'll,convulsions,convoluted,convincingly,conversing,contradictions,conga,confucius,confrontational,confab,condolence,conditional,condition's,condiments,composing,complicit,compiled,compile,compiegne,commuter,commodus,commissions,comings,cometh,combining,colossus,collusion,collared,cockeyed,coastline,clobber,clemonds,clashes,clarithromycin,clarified,cinq,cienega,chronological,christmasy,christmassy,chloroform,chippie,childless,chested,chemistry's,cheerios,cheeco,checklist,chaz,chauvinist,char,chang's,chandlers,chamois,chambermaid,chakras,chak,censored,cemented,cellophane,celestial,celebrations,caveat,catholicism,cataloguing,cartmanland,carples,carny,carded,caramels,captors,caption,cappy,caped,canvassing,cannibalism,canada's,camille's,callback,calibrated,calamine,cal's,cabo,bypassed,buzzy,buttermilk,butterfingers,bushed,burlesque,bunsen,bung,bulimia,bukatari,buildin,budged,bronck's,brom,brobich,bringer,brine,brendell,brawling,bratty,brasi,braking,braised,brackett's,braced,boyish,boundless,botch,borough,boosh,bookies,bonbons,bois,bodes,bobunk,bluntly,blossoming,bloopers,bloomers,bloodstains,bloodhounds,blitzen,blinker,blech,blasts,blanca's,bitterly,biter,biometric,bioethics,bilk,bijan,bigoted,bicep,betrothed,bergdorf's,bereaved,bequeathed,belo,bellowing,belching,beholden,befriended,beached,bawk,battled,batmobile,batman's,baseline,baseball's,barcodes,barch,barbie's,barbecuing,bandanna,baldy,bailey's,baghdad,backwater,backtrack,backdraft,ayuh,awgh,augustino,auctioned,attaching,attaches,atrophy,atrocity,atley,athletics,atchoo,asymmetrical,asthmatic,assoc,assists,ascending,ascend,articulated,arrr,armstrong's,armchair,arisen,archeology,archeological,arachnids,aptly,applesauce,appetizing,antisocial,antagonizing,anorexia,anini,angie's,andersons,anarchist,anagram,amputation,amherst,alleluia,algorithms,albemarle,ajar,airlock,airbag,aims,aimless,ailments,agua,agonized,agitate,aggravating,affirming,aerosol,aerosmith,aeroplane,acing,accumulated,accomplishing,accolades,accidently,academia,abuser,abstain,abso,abnormally,aberration,abandons,aaww,aaaaahh,zlotys,zesty,zerzura,zapruder,zany,zantopia,yugoslavia,youo,yoru,yipe,yeow,yello,yelburton,yeess,yaah,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolfe's,wolchek,woes,wishin,wiseguys,winston's,winky,wine's,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,whey,whet,wherefore,wharvey,welts,welt,wellstone,weee,wednesday's,wedges,wavered,watchit,wastebasket,ward's,wank,wango,wallet's,wall's,waken,waiver,waitressed,wacquiem,wabbit,vrykolaka,voula,vote's,volt,volga,volcanoes,vocals,vitally,visualizing,viscous,virgo,virg,violet's,viciousness,vewy,vespers,vertes,verily,vegetarians,vater,vaseline,varied,vaporize,vannacutt,vallens,valenti's,vacated,uterine,usta,ussher,urns,urinating,urchin,upping,upheld,unwitting,untreated,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undisclosed,undeserving,undermines,undergarments,unconcerned,unbroken,ukrainian,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tricycle,trickle,tribulations,trevor's,tremont,tremoille,treaties,trawler,translators,transcends,trafficker,touchin,tonnage,tomfoolery,tolls,tokens,tinkered,tinfoil,tightrope,ticket's,thth,thousan,thoracotomy,theses,thesaurus,theologian,themed,thawing,thatta,thar,textiles,testimonies,tessio,terminating,temps,taxidermist,tator,tarkin,tangent,tactile,tachycardia,t'akaya,synthesize,symbolically,swelco,sweetbreads,swedes,swatting,swastika,swamps,suze,supernova,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subtitle,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,striving,streetwalker,strategizing,straining,straightaway,storyline,stoli,stock's,stipulated,stimulus,stiffer,stickup,stens,steamroller,steadwell,steadfast,stave,statutes,stateroom,stans,stacey's,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spoiler,spirals,spinner's,speedboat,spectacles,speakerphone,spar,spaniards,spacing,sovereignty,southglen,souse,soundproof,soothsayer,soon's,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,sniper's,snifter,sniffin,snickering,sneer,snarl,smila,slinking,sleuth,slater's,slated,slanted,slanderous,slammin,skyscraper,skimp,skilosh,skeletal,skag,siteid,sirloin,singe,simulate,signaled,sighing,sidekicks,sicken,shrubs,shrub,showstopper,shot's,shostakovich,shoreline,shoppin,shoplifter,shop's,shoe's,shoal,shitter,shirt's,shimokawa,sherborne,sheds,shawna's,shavadai,sharpshooters,sharking,shane's,shakespearean,shagged,shaddup,sexism,sexes,sesterces,serotonin,sequences,sentient,sensuous,seminal,selections,seismic,seashell,seaplane,sealing,seahaven,seagrave,scuttled,scullery,scow,scots,scorcher,scorch,schotzie,schnoz,schmooze,schlep,schizo,schindler's,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandy's,sandstorm,sandalwood,samoa,samo,salutations,salad's,saki,sailor's,sagman,s'okay,rudy's,rsvp'd,royale,rousted,rootin,roofs,romper,romanovs,rollercoaster,rolfie,rockers,rock's,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revolved,revolutionaries,revoking,reviewer,reverts,retrofit,retort,retinas,resurfaced,respirations,respectively,resolute,resin,reprobate,replaying,repayment,repaint,renquist,renege,renders,rename,remarked,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,reinstatement,reigns,referendums,recriminations,recitals,rechecked,reception's,recaptured,rebounds,reassemble,rears,reamed,realty,reader's,reacquaint,rayanne,ravish,rava,rathole,raspail,rarest,rapists,rants,ramone,ragnar,radiating,radial,racketeer,quotation,quittin,quitters,quintessential,quincy's,queremos,quellek,quelle,quasimodo,quarterbacks,quarter's,pyromaniac,puttanesca,puritanical,purged,purer,puree,punishments,pungent,pummel,puedo,pudge,puce,psychotherapist,psycho's,prosecutorial,prosciutto,propositioning,propellers,pronouns,progresses,procured,procrastination,processes,probationary,primping,primates,priest's,preventative,prevails,presided,preserves,preservatives,prefix,predecessors,preachy,prancer,praetorians,practicality,powders,potus,pot's,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plunder,plummeted,plucking,plop,plimpton,plethora,playthings,player's,playboys,plastique,plainclothes,pious,pinpointed,pinkus,pinks,pilgrimage,pigskin,piffle,pictionary,piccata,photocopy,phobias,persia,permissible,perils,perignon,perfumes,peon,penned,penalized,peg's,pecks,pecked,paving,patriarch,patents,patently,passable,participants,parasitic,parasailing,paramus,paramilitary,parabolic,parable,papier,paperback,paintbrush,pacer,paaiint,oxen,owen's,overtures,overthink,overstayed,overrule,overlapping,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,outbound,ostensibly,originating,orchestrate,orally,oppress,opposable,opponent's,operation's,oooohh,oomupwah,omitted,okeydokey,okaaay,ohashi,offerings,of'em,od'd,occurrences,occupant,observable,obscenities,obligatory,oakie,o'malley's,o'gar,nyah's,nurection,nun's,nougat,nostradamus,norther,norcom,nooch,nonviolent,nonsensical,nominating,nomadic,noel's,nkay,nipped,nimbala,nigeria,nigel's,nicklaus,newscast,nervously,nell's,nehru,neckline,nebbleman,navigator,nasdaq,narwhal,nametag,n'n't,mycenae,myanmar,muzak,muumuu,murderer's,mumbled,mulvehill,multiplication,multiples,muggings,muffet,mozart's,mouthy,motorbike,motivations,motivates,motaba,mortars,mordred,mops,moocher,moniker,mongi,mondo,monday's,moley,molds,moisturize,mohair,mocky,mmkay,mistuh,missis,mission's,misdeeds,minuscule,minty,mined,mincemeat,milton's,milt,millennia,mikes,miggs,miffed,mieke's,midwestern,methadone,metaphysics,messieur,merging,mergers,menopausal,menagerie,meee,mckenna's,mcgillicuddy,mayflowers,maxim's,matrimonial,matisse,matick,masculinity,mascots,masai,marzipan,marika,maplewood,manzelle,manufactures,manticore's,mannequins,manhole,manhandle,manatee,mallory's,malfunctions,mainline,magua's,madwoman,madeline's,machiavelli,lynley,lynching,lynched,lurconis,lujack,lubricant,looove,loons,loom,loofah,longevity,lonelyhearts,lollipops,loca,llama,liquidation,lineswoman,lindsey's,lindbergh,lilith's,lila's,lifers,lichen,liberty's,lias,lexter,levee,letter's,lessen,lepner,leonard's,lemony,leggy,leafy,leaflets,leadeth,lazerus,lazare,lawford,languishing,langford's,landslide,landlords,lagoda,ladman,lad's,kuwait,kundera,krist's,krinkle,krendler,kreigel,kowolski,kosovo,knockdown,knifed,kneed,kneecap,kids'll,kevlar,kennie,keeled,kazootie,kaufman's,katzenmoyer,kasdan,karl's,karak,kapowski,kakistos,jumpers,julyan,juanito,jockstrap,jobless,jiggly,jesuit,jaunt,jarring,jabbering,israelites,irrigate,irrevocably,irrationally,ironies,ions,invitro,inventions,intrigues,intimated,interview's,intervening,interchangeable,intently,intentioned,intelligently,insulated,institutional,instill,instigator,instigated,instep,inopportune,innuendoes,inheriting,inflate,infiltration,infects,infamy,inducing,indiscretions,indiscreet,indio,indignities,indict,indecision,incurred,incubation,inconspicuous,inappropriately,impunity,impudent,improves,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,illustration,illumination,idiot's,idealized,idealist,icelandic,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hurricane's,hunt's,hunched,huffed,hubris,hubbub,hovercraft,houngan,hotel's,hosed,horoscopes,hoppy,hopelessness,hoodwinked,honourable,honorably,honeysuckle,homeowners,homegirl,holiest,hoisted,hoho,ho's,hippity,hildie,hikers,hieroglyphs,hexton,herein,helicopter's,heckle,heats,heartbeat's,heaping,healthilizer,headmaster's,headfirst,hawk's,haviland's,hatsue,harlot,hardwired,hanno's,hams,hamilton's,halothane,hairstyles,hails,hailed,haagen,haaaaa,gyno,gutting,gurl,gumshoe,gummi,gull,guerilla,gttk,grover's,grouping,groundless,groaning,gristle,grills,graynamore,grassy,graham's,grabbin,governmental,goodes,goggle,godlike,glittering,glint,gliding,gleaming,glassy,girth,gimbal,gilmore's,gibson's,giblets,gert,geometric,geographical,genealogy,gellers,geller's,geezers,geeze,garshaw,gargantuan,garfunkel,gardner's,garcia's,garb,gangway,gandarium,gamut,galoshes,gallivanting,galleries,gainfully,gack,gachnar,fusionlips,fusilli,furiously,fulfil,fugu,frugal,fron,friendship's,fricking,frederika,freckling,frauds,fraternal,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,footnotes,fondling,fondled,fondle,folksy,fluttering,flutie,fluffing,floundering,florin,florentine,flirtatious,flexing,flatterer,flaring,fizz,fixating,five's,fishnet,firs,firestorm,finchy,figurehead,fifths,fiendish,fertilize,ferment,fending,fellahs,feeny's,feelers,feeders,fatality,fascinate,fantabulous,falsify,fallopian,faithless,fairy's,fairer,fair's,fainter,failings,facto,facets,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,exports,expenditure,expelling,exorbitant,exigent,exhilarated,exertion,exerting,exemption,excursions,excludes,excessively,excercise,exceeds,exceeding,everbody,evaporated,euthanasia,euros,europeans,escargot,escapee,erases,epizootics,epithelials,ephrum,enthusiast,entanglements,enslaved,enslave,engrossed,endeavour,enables,enabled,empowerment,employer's,emphatic,emeralds,embroiled,embraces,ember,embellished,emancipated,ello,elisa's,elevates,ejaculate,ego's,effeminate,economically,eccentricities,easygoing,earshot,durp,dunks,dunes,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,dost,doofer,donowitz,dominoes,dominance,doe's,diversions,distinctions,distillery,distended,dissolving,dissipate,disraeli,disqualify,disowned,dishwashing,discusses,discontent,disclosed,disciplining,discerning,disappoints,dinged,diluted,digested,dicking,diablos,deux,detonating,destinations,despising,designer's,deserts,derelict,depressor,depose,deport,dents,demonstrations,deliberations,defused,deflection,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,dealer's,deafening,deadlock,dawning,dater,darkened,darcy's,dappy,dancing's,damon's,dallying,dagon,d'etat,czechoslovakians,cuticles,cuteness,curacao,cupboards,cumulative,culottes,culmination,culminating,csi's,cruisin,crosshairs,cronyn,croc,criminalistics,crimean,creatively,creaming,crapping,cranny,cowed,countermeasures,corsica,corinne's,corey's,cooker,convened,contradicting,continuity,constitutionally,constipation,consort,consolidate,consisted,connection's,confining,confidences,confessor,confederates,condensation,concluding,conceiving,conceivably,concealment,compulsively,complainin,complacent,compiling,compels,communing,commonplace,commode,commission's,commissary,comming,commensurate,columnists,colonoscopy,colonists,collagen,collaborate,colchicine,coddling,clump,clubbed,clowning,closet's,clones,clinton's,clinic's,cliffhanger,classification,clang,citrus,cissy,circuitry,chronology,christophe,choosers,choker,chloride,chippewa,chip's,chiffon,chesty,chesapeake,chernobyl,chants,channeled,champagne's,chalet,chaka,cervical,cellphone,cellmates,caverns,catwalk,cathartic,catcher's,cassandra's,caseload,carpenter's,carolyn's,carnivorous,carjack,carbohydrates,capt,capitalists,canvass,cantonese,canisters,candlestick,candlelit,canaries,camry,camel's,calzones,calitri,caldy,cabin's,byline,butterball,bustier,burmese,burlap,burgeoning,bureaucrat,buffoons,buenas,bryan's,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brea,brays,brassieres,braille,brahms,braddock's,boysenberry,bowman's,bowline,boutiques,botticelli's,boooo,boonies,booklets,bookish,boogeyman,boogey,bomb's,boldly,bogs,bogas,boardinghouse,bluuch,blundering,bluffs,bluer,blowed,blotto,blotchy,blossomed,blooms,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,bison,birdson,bings,bilateral,bfmid,bfast,berserker,berkshires,bequest,benjamins,benevolence,benched,benatar,belthazor's,bellybutton,belabor,bela's,behooves,beddy,beaujolais,beattle,baxworth,batted,baseless,baring,barfing,barbi,bannish,bankrolled,banek,ballsy,ballpoint,balkans,balconies,bakers,bahama,baffling,badder,badda,bada,bactine,backgammon,baako,aztreonam,aztecs,awed,avon,autobiographical,autistic,authoritah,auspicious,august's,auditing,audible,auctioning,attitude's,atrocities,athlete's,astronomer,assessed,ascot,aristocratic,arid,argues,arachtoids,arachnid,aquaman,apropos,aprons,apprised,apprehensive,apex,anythng,antivenin,antichrist,antennae,anorexic,anoint,annum,annihilated,animal's,anguished,angioplasty,angio,amply,ampicillin,amphetamines,amino,american's,ambiguity,ambient,amarillo,alyssa's,alternator,alcove,albacore,alarm's,alabaster,airlifted,ahta,agrabah,affidavits,advocacy,advises,adversely,admonished,admonish,adler's,addled,addendum,acknowledgement,accuser,accompli,acclaim,acceleration,abut,abundant,absurdity,absolved,abrusso,abreast,abrasive,aboot,abductions,abducting,abbots,aback,ababwa,aand,aaahhhh,zorin,zinthar,zinfandel,zimbabwe,zillions,zephyrs,zatarcs,zacks,youuu,youths,yokels,yech,yardstick,yammer,y'understand,wynette,wrung,wrought,wreaths,wowed,wouldn'ta,worshiped,worming,wormed,workday,wops,woolly,wooh,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,winner's,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,whah,wetlands,westward,wenus,weirdoes,weds,webs,weaver's,wearer,weaning,watusi,wastes,warlock's,warfield's,waponi,waiting's,waistband,waht,wackos,vouching,votre,voight's,voiced,vivica,viveca,vivant,vivacious,visor,visitin,visage,virgil's,violins,vinny,vinci's,villas,vigor,video's,vicrum,vibrator,vetted,versailles,vernon's,venues,ventriloquism,venison,venerable,varnsen,variant,variance,vaporized,vapid,vanstock,vandals,vader's,vaccination,uuuuh,utilize,ushering,usda,usable,urur,urologist,urination,urinary,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,university's,universe's,uninsured,uninspired,uniformity,unicycle,unhooked,ungh,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,undertaken,understan,undershirt,underlings,underline,undercurrent,uncontrolled,uncivilized,uncharacteristic,umpteenth,uglies,u're,tut's,turner's,turbine,tunnel's,tuney,trustee,trumps,truckasaurus,trubshaw,trouser,trippy,tringle,trifling,trickster,triangular,trespassers,trespasser,traverse,traumas,trattoria,trashes,transgressions,tranquil,trampling,trainees,tracy's,tp'ed,toxoplasmosis,tounge,tortillas,torrent,torpedoed,topsy,topple,topnotch,top's,tonsil,tippin's,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,thrones,threepio,thoughtfully,thornhart's,thorkel,thommo,thing'll,theological,thel,theh,thefts,that've,thanksgivings,tetherball,testikov,terraforming,terminus,tepid,tendonitis,tenboom,telex,teleport,telepathic,teenybopper,taxicab,taxed,taut,tattered,tattaglias,tapered,tantric,tanneke,takedown,tailspin,tacs,tacit,tablet,tablecloth,systemic,syria,syphon,synthesis,symbiotic,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swayzak's,swaddling,swackhammer,svetkoff,suzie's,surpass,supossed,superdad,super's,sumptuous,sula,suit's,sugary,sugar's,sugai,suey,subvert,suburb,substantiate,subsidy,submersible,sublimating,subjugation,styx,stymied,stuntman,studded,strychnine,strikingly,strenuous,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,stepdad's,steerage,steena,staunch,statuary,starlets,stanza,stanley's,stagnant,staggeringly,ssshhh,squaw,spurt,spungeon,sprightly,sprays,sportswear,spoonful,splittin,splitsville,spirituality,spiny,spider's,speedily,speculative,specialise,spatial,spastic,spas,sparrin,soybean,souvlaki,southie,southampton,sourpuss,soupy,soup's,soundstage,sophie's,soothes,somebody'd,solicited,softest,sociopathic,socialized,socialism,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,slurp,slur,sloshed,sleight,skyrocket,skied,skewed,sizeable,sixpence,sipowicz,singling,simulations,simulates,similarly,silvery,silverstone,siesta,siempre,sidewinder,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shingles,shifu,shes,sherman's,shelve,shelbyville,sheepskin,shat,sharpens,shaquille,shaq,shanshu,shania's,set's,servings,serpico,sequined,sensibilities,seizes,seesaw,seep,seconded,sebastian's,seashells,scrapped,scrambler,scorpions,scopes,schnauzer,schmo,schizoid,scampered,scag,savagely,saudis,satire,santas,sanskrit,sandovals,sanding,sandal,salient,saleswoman,sagging,s'cuse,rutting,ruthlessly,runoff,runneth,rulers,ruffians,rubes,roughriders,rotates,rotated,roswell's,rosalita,rookies,ron's,rollerblades,rohypnol,rogues,robinson's,roasts,roadies,river's,ritten,rippling,ripples,ring's,rigor,rigoletto,richardo,ribbed,revolutions,revlon's,reverend's,retreating,retractable,rethought,retaliated,retailers,reshoot,reserving,reseda,researchers,rescuer,reread,requisitions,repute,reprogram,representations,report's,replenish,repetitive,repetitious,repentance,reorganizing,renton,renee's,remodeled,religiously,relics,reinventing,reinvented,reheat,rehabilitate,registrar,regeneration,refueling,refrigerators,refining,reenter,redress,recruiter,recliner,reciprocal,reappears,razors,rawdy,rashes,rarity,ranging,rajeski,raison,raisers,rainier,ragtime,rages,radar's,quinine,questscape,queller,quartermaine's,pyre,pygmalion,pushers,pusan,purview,purification,pumpin,puller,pubescent,psychiatrist's,prudes,provolone,protestants,prospero,propriety,propped,prom's,procrastinate,processors,processional,princely,preyed,preventive,pretrial,preside,premiums,preface,preachers,pounder,ports,portrays,portrayal,portent,populations,poorest,pooling,poofy,pontoon,pompeii,polymerization,polloi,policia,poacher,pluses,pleasuring,pleads,playgrounds,platitudes,platforms,plateaued,plate's,plantations,plaguing,pittance,pitcher's,pinky's,pinheads,pincushion,pimply,pimped,piggyback,pierce's,piecing,physiological,physician's,phosphate,phillipe,philipse,philby,phased,pharaohs,petyr,petitioner,peshtigo,pesaram,perspectives,persnickety,perpetrate,percolating,pepto,pensions,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,panda's,panache,paltrow,palamon,padlock,paddy's,paddling,oversleep,overheating,overdosed,overcharge,overcame,overblown,outset,outrageously,outfitted,orsini's,ornery,origami,orgasmic,orga,order's,opportune,ooow,oooooooooh,oohhhh,olympian,olfactory,okum,ohhhhhh,ogres,odysseus,odorless,occupations,occupancy,obscenity,obliterated,nyong,nymphomaniac,nutsack,numa,ntozake,novocain,nough,noth,nosh,norwegians,northstar,nonnie,nonissue,nodules,nightmarish,nightline,nighthawk,niggas,nicu,nicolae,nicknamed,niceties,newsman,neverland,negatively,needra,nedry,necking,navour,nauseam,nauls,narim,nanda,namath,nagged,nads,naboo,n'sync,mythological,mysticism,myslexia,mutator,mustafi,mussels,muskie,musketeer,murtaugh,murderess,murder's,murals,munching,mumsy,muley,mouseville,mosque,mosh,mortifying,morgendorffers,moola,montel,mongoloid,molten,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,minimalist,millie's,millgate,migrate,michelangelo's,mettle,metricconverter,methodology,meter's,meteors,mesozoic,menorah,mengele,mendy's,membranes,melding,meanness,mcneil's,mcgruff,mcarnold,matzoh,matted,mathematically,materialized,mated,masterpieces,mastectomy,massager,masons,marveling,marta's,marquee,marooned,marone's,marmaduke,marick,marcie's,manhandled,mangoes,manatees,managerial,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeshift,makeovers,maiming,magazine's,machismo,maarten,lutheran,lumpectomy,lumbering,luigi's,luge,lubrication,lording,lorca,lookouts,loogie,loners,london's,loin,lodgings,locomotive,lobes,loathed,lissen,linus,lighthearted,ligament,lifetime's,lifer,lier,lido,lickin,lewen,levitation,lestercorp,lessee,lentils,lena's,lemur,lein,legislate,legalizing,lederhosen,lawmen,laundry's,lasskopf,lardner,landscapes,landfall,lambeau,lamagra,lagging,ladonn,lactic,lacquer,laborers,labatier,kwan's,krit,krabappel,kpxy,kooks,knobby,knickknacks,klutzy,kleynach,klendathu,kinross,kinko's,kinkaid,kind'a,kimberly's,kilometer,khruschev's,khaki,keyboards,kewl,ketch,kesher,ken's,karikos,karenina,kanamits,junshi,juno's,jumbled,jujitsu,judith's,jt's,joust,journeyed,jotted,jonathan's,jizz,jingling,jigalong,jerseys,jerries,jellybean,jellies,jeeps,jeannie's,javna,jamestown,james's,jamboree,jail's,islanders,irresistable,irene's,ious,investigation's,investigates,invaders,inundated,introductory,interviewer,interrupts,interpreting,interplanetary,internist,intercranial,inspections,inspecting,inseminated,inquisitor,inland,infused,infuriate,influx,inflating,infidelities,inference,inexpensive,industrialist,incessantly,inception,incensed,incase,incapacitate,inca,inasmuch,inaccuracies,imus,improvised,imploding,impeding,impediments,immaturity,ills,illegible,idols,iditarod,identifiable,id'n,icicles,ibuprofen,i'i'm,hymie,hydrolase,hybrids,hunsecker's,hunker,humps,humons,humidor,humdinger,humbling,humankind,huggin,huffing,households,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honouring,honks,honeymooners,homophobic,homily,homeopathic,hoffman's,hnnn,hitchhikers,hissed,hispanics,hillnigger,hexavalent,hewwo,heston's,hershe,herodotus,hermey,hergott,heresy,henny,hennigans,henhouse,hemolytic,hells,helipad,heifer,hebrews,hebbing,heaved,heartland,heah,headlock,hatchback,harvard's,harrowing,harnessed,harding's,happy's,hannibal's,hangovers,handi,handbasket,handbags,halloween's,hall's,halfrek,halfback,hagrid,hacene,gyges,guys're,gut's,gundersons,gumption,guardia,gruntmaster,grubs,group's,grouch,grossie,grosser,groped,grins,grime,grigio,griff's,greaseball,gravesite,gratuity,graphite,granma,grandfathers,grandbaby,gradski,gracing,got's,gossips,goonie,gooble,goobers,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glub,global's,glares,gizmos,givers,ginza,gimmie,gimmee,georgia's,gennero,gazpacho,gazed,gato,gated,gassy,gargling,gandhiji,galvanized,gallery's,gallbladder,gabriel's,gaaah,furtive,furthering,fungal,fumigation,fudd,fucka,fronkonsteen,fromby's,frills,fresher,freezin,freewald,freeloader,franklin's,framework,frailty,fortified,forger,forestry,foreclosure,forbade,foray,football's,foolhardy,fondest,fomin,followin,follower,follicle,flue,flowering,flotation,flopping,floodgates,flogged,flog,flicked,flenders,fleabag,flanks,fixings,fixable,fistful,firewater,firestarter,firelight,fingerbang,finalizing,fillin,filipov,fido,fiderer,feminists,felling,feldberg,feign,favorably,fave,faunia,faun,fatale,fasting,farkus,fared,fallible,faithfulness,factoring,facilitated,fable,eyeful,extramarital,extracts,extinguished,exterminated,exposes,exporter,exponential,exhumed,exhume,exasperated,eviscerate,evidenced,evanston,estoy,estimating,esmerelda,esme,escapades,erosion,erie,equitable,epsom,epoxy,enticed,enthused,entendre,ensued,enhances,engulfed,engrossing,engraving,endorphins,enamel,emptive,empirical,emmys,emission,eminently,embody,embezzler,embarressed,embarrassingly,embalmed,emancipation,eludes,eling,elevation,electorate,elated,eirie,egotitis,effecting,eerily,eeew,eecom,editorials,edict,eczema,ecumenical,ecklie's,earthy,earlobes,eally,dyeing,dwells,dvds,duvet,duncans,dulcet,duckling,droves,droppin,drools,drey'auc,dreamers,dowser's,downriver,downgraded,doping,doodie,dominicans,dominating,domesticity,dollop,doesnt,doer,dobler,divulged,divisional,diversionary,distancing,dissolves,dissipated,displaying,dispensers,dispensation,disorienting,disneyworld,dismissive,dismantling,disingenuous,disheveled,disfiguring,discourse,discontinued,disallowed,dinning,dimming,diminutive,diligently,dilettante,dilation,diggity,diggers,dickensian,diaphragms,diagnoses,dewy,developer,devastatingly,determining,destabilize,desecrate,derives,deposing,denzel,denouncing,denominations,denominational,deniece,demony,delving,delt,delicates,deigned,degrassi's,degeneration,defraud,deflower,defibrillator,defiantly,deferred,defenceless,defacing,dedicating,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,databases,darwinism,darnit,darks,danke,danieljackson,dangled,daimler,cytoxan,cylinders,cutout,cutlery,cuss,cushing's,curveball,curiously,curfews,cummerbund,cuckoo's,crunches,crucifixion,crouched,croix,criterion,crisps,cripples,crilly,cribs,crewman,cretaceous,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crasher,crackheads,coworker,counterpart,councillor,coun,couldn't've,cots,costanza's,cosgrove's,corwins,corset,correspondents,coriander,copiously,convenes,contraceptives,continuously,contingencies,contaminating,consul,constantinople,conniption,connie's,conk,conjugate,condiment,concurrently,concocting,conclave,concert's,con's,comprehending,compliant,complacency,compilation,competitiveness,commendatore,comedies,comedians,comebacks,combines,com'on,colonized,colonization,collided,collectively,collarbone,collaborating,collaborated,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,cluett's,cloverleaf,closeted,cloistered,clinched,clicker,cleve,clergyman,cleats,clarifying,clapped,citations,cinnabar,cinco,chunnel,chumps,chucks,christof,cholinesterase,choirboy,chocolatey,chlamydia,chili's,chigliak,cheesie,cheeses,chechnya,chauvinistic,chasm,chartreuse,charnier,chapil,chapel's,chalked,chadway,cerveza,cerulean,certifiably,celsius,cellulite,celled,ceiling's,cavalry's,cavalcade,catty,caters,cataloging,casy,castrated,cassio,cashman's,cashews,carwash,cartouche,carnivore,carcinogens,carasco's,carano's,capulet,captives,captivated,capt'n,capsized,canoes,cannes,candidate's,cancellations,camshaft,campin,callate,callar,calendar's,calculators,cair,caffeinated,cadavers,cacophony,cackle,byproduct,bwana,buzzes,buyout,buttoning,busload,burglaries,burbs,bura,buona,bunions,bungalows,bundles,bunches,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,brigadier,briefings,bridgeport,brewskies,breathalyzer,breakups,breadth,bratwurst,brania,branching,braiding,brags,braggin,bradywood,bozo's,bottomed,bottom's,bottling,botany,boston's,bossa,bordello,booo,bookshelf,boogida,bondsman,bolsheviks,bolder,boggles,boarder,boar's,bludgeoned,blowtorch,blotter,blips,blends,blemish,bleaching,blainetologists,blading,blabbermouth,bismarck,bishops,biscayne,birdseed,birdcage,bionic,biographies,biographical,bimmel,biloxi,biggly,bianchinni,bette's,betadine,berg's,berenson,belus,belt's,belly's,belloq,bella's,belfast,behavior's,begets,befitting,beethoven's,beepers,beelzebub,beefed,bedroom's,bedrock,bedridden,bedevere,beckons,beckett's,beauty's,beaded,baubles,bauble,battlestar,battleground,battle's,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,barium,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,baio,bahrain,bagman,baffles,backstroke,backroom,bachelor's,babysat,babylonian,baboons,aviv,avez,averse,availability,augmentation,auditory,auditor,audiotape,auctioneer,atten,attained,attackers,atcha,astonishment,asshole's,assembler,arugula,arsonist's,arroz,arigato,arif,ardent,archaic,approximation,approving,appointing,apartheid,antihistamines,antarctica,annoyances,annals,annabelle's,angrily,angelou,angelo's,anesthesiology,android,anatomically,anarchists,analyse,anachronism,amiable,amex,ambivalent,amassed,amaretto,alumnus,alternating,alternates,alteration,aloft,alluding,allen's,allahu,alight,alfred's,alfie,airlift,aimin,ailment,aground,agile,ageing,afterglow,africans,affronte,affectionately,aerobic,adviser,advil,adventist,advancements,adrenals,admiral's,administrators,adjutant,adherence,adequately,additives,additions,adapting,adaptable,actualization,activating,acrost,ached,accursed,accoutrements,absconded,aboveboard,abou,abetted,abbot's,abbey's,aargh,aaaahh,zuzu's,zuwicky,zolda,zits,ziploc,zakamatak,yutz,yumm,youve,yolk,yippie,yields,yiddish,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,yacht's,y'mean,y'are,xand,wuthering,wreaks,woul,worsened,worrisome,workstation,workiiing,worcestershire,woop,wooooooo,wooded,wonky,womanizing,wolodarsky,wnkw,wnat,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,winery,windthorne,windsurfing,windermere,wiggles,wiggled,wiggen,whys,whwhat,whuh,whos,whore's,whodunit,whoaaa,whittling,whitesnake,whirling,whereof,wheezing,wheeze,whatley's,whatd'ya,whataya,whammo,whackin,wets,westbound,wellll,wellesley,welch's,weirdo's,weightless,weevil,wedgies,webbing,weasly,weapon's,wean,wayside,waxes,wavelengths,waturi,washy,washrooms,warton's,wandell,wakeup,waitaminute,waddya,wabash,waaaah,vornac,voir,voicing,vocational,vocalist,vixens,vishnoor,viscount,virulent,virtuoso,vindictiveness,vinceres,vince's,villier,viii,vigeous,viennese,viceroy,vestigial,vernacular,venza's,ventilate,vented,venereal,vell,vegetative,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,vacation's,uuml,urethra,upstaged,uploading,upgrades,unwrapping,unwieldy,untenable,untapped,unsatisfied,unsatisfactory,unquenchable,unnerved,unmentionable,unlovable,unknowns,universes,uninformed,unimpressed,unhappily,unguarded,unexplored,underpass,undergarment,underdeveloped,undeniably,uncompromising,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,unas,umpa,ululd,uhhhm,tweeze,tutsami,tusk,tushy,tuscarora,turkle,turghan,turbulent,turbinium,tuffy,tubers,tsun,trucoat,troxa,trou,tropicana,triquetra,tripled,trimmers,triceps,tribeca,trespassed,traya,travellers,traumatizing,transvestites,transatlantic,tran's,trainors,tradin,trackers,townies,tourelles,toughness,toucha,totals,totalled,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tobs,tizzy,tiramisu,tippers,timmi,timbre,thwap,thusly,ththe,thruway,thrusts,throwers,throwed,throughway,thrice,thomas's,thickening,thia,thermonuclear,therapy's,thelwall,thataway,th's,textile,texans,terry's,terrifically,tenets,tendons,tendon,telescopic,teleportation,telepathically,telekinetic,teetering,teaspoons,teamsters,taunts,tatoo,tarantulas,tapas,tanzania,tanned,tank's,tangling,tangerine,tamales,tallied,tailors,tai's,tahitian,tag's,tactful,tackles,tachy,tablespoon,tableau,syrah,syne,synchronicity,synch,synaptic,synapses,swooning,switchman,swimsuits,swimmer's,sweltering,swelling's,sweetly,sweeper,suvolte,suss,suslov,surname,surfed,supremacy,supposition,suppertime,supervillains,superman's,superfluous,superego,sunspots,sunnydale's,sunny's,sunning,sunless,sundress,sump,suki,suffolk,sue's,suckah,succotash,substation,subscriptions,submarines,sublevel,subbasement,styled,studious,studio's,striping,stresses,strenuously,streamlined,strains,straights,stony,stonewalled,stonehenge,stomper,stipulates,stinging,stimulated,stillness,stilettos,stewards,stevesy,steno,sten,stemmed,steenwyck,statesmen,statehood,stargates,standstill,stammering,staedert,squiggly,squiggle,squashing,squaring,spurred,sprints,spreadsheet,spramp,spotters,sporto,spooking,sponsorship,splendido,spittin,spirulina,spiky,speculations,spectral,spate,spartacus,spans,spacerun,sown,southbound,sorr,sorcery,soonest,sono,sondheim,something'll,someth,somepin,someone'll,solicitor,sofas,sodomy,sobs,soberly,sobered,soared,soapy,snowmen,snowbank,snowballing,snorkel,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,smackdown,slumlord,slugging,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skirmishes,skipper's,skeptic,sitka,sitarides,sistah,sipped,sindell,simpletons,simp,simony,simba's,silkwood,silks,silken,silicone,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,shipyard,shielded,sheldon's,sheeny,shaven,shapetype,shankar,shaming,shallows,shale,shading,shackle,shabbily,shabbas,severus,settlements,seppuku,senility,semite,semiautomatic,semester's,selznick,secretarial,sebacio,sear,seamless,scuzzy,scummy,scud,scrutinized,scrunchie,scriptures,scribbled,scouted,scotches,scolded,scissor,schooner,schmidt's,schlub,scavenging,scarin,scarfing,scarecrow's,scant,scallions,scald,scabby,say's,savour,savored,sarcoidosis,sandbar,saluted,salted,salish,saith,sailboats,sagittarius,sagan,safeguards,sacre,saccharine,sacamano,sabe,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotterdam,roto,rotisserie,rosebuds,rootie,roosters,roosevelt's,rooney's,roofy,roofie,romanticize,roma's,rolodex,rolf's,roland's,rodney's,robotic,robin's,rittle,ristorante,rippin,rioting,rinsing,ringin,rincess,rickety,rewritten,revising,reveling,rety,retreats,retest,retaliating,resumed,restructuring,restrict,restorative,reston,restaurateur,residences,reshoots,resetting,resentments,rescuers,rerouted,reprogramming,reprisals,reprisal,repossess,repartee,renzo,renfield,remore,remitting,remeber,reliability,relaxants,rejuvenate,rejections,rehu,regularity,registrar's,regionals,regimes,regenerated,regency,refocus,referrals,reeno,reelected,redevelopment,recycles,recrimination,recombinant,reclining,recanting,recalling,reattach,reassigning,realises,reactors,reactionary,rbis,razor's,razgul,raved,rattlesnakes,rattles,rashly,raquetball,rappers,rapido,ransack,rankings,rajah,raisinettes,raheem,radisson,radishes,radically,radiance,rabbi's,raban,quoth,qumari,quints,quilts,quilting,quien,queue,quarreled,qualifying,pygmy,purty,puritans,purblind,puppy's,punctuation,punchbowl,puget,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protruding,protracted,protons,protections,protectin,prospector,prosecutor's,propping,proportioned,prophylactic,propelled,proofed,prompting,prompter,professed,procreate,proclivities,prioritizing,prinze,princess's,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,preamble,pram,pralines,pragmatist,powering,powerbar,pottie,pottersville,potsie,potholes,potency,posses,posner's,posies,portkey,porterhouse,pornographers,poring,poppycock,poppet,poppers,poopsie,pomponi,pokin,poitier,poes,podiatry,plush,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pj's,pixels,pitted,pistachios,pisa,pirated,pirate's,pinochle,pineapples,pinafore,pimples,piggly,piggies,pie's,piddling,picon,pickpockets,picchu,physiologically,physic,photo's,phobic,philosophies,philosophers,philly's,philandering,phenomenally,pheasants,phasing,phantoms,pewter,petticoat,petronis,petitioning,perturbed,perth,persists,persians,perpetuating,permutat,perishable,periphery,perimeters,perfumed,percocet,per'sus,pepperjack,pensioners,penalize,pelting,pellet,peignoir,pedicures,pedestrians,peckers,pecans,payback's,pay's,pawning,paulsson,pattycake,patrolmen,patrolled,patois,pathos,pasted,passer,partnerships,parp,parishioners,parishioner,parcheesi,parachuting,pappa,paperclip,papayas,paolo's,pantheon,pantaloons,panhandle,pampers,palpitations,paler,palantine,paintballing,pago,owow,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlived,outlined,outlast,outlander,outfield,out've,ortolani's,orphey,ornate,ornamental,orienteering,orchestrating,orator,oppressive,operator's,openers,opec,ooky,oliver's,olde,okies,okee,ohhhhhhhhh,ohhhhhhhh,ogling,offline,offbeat,oceanographic,obsessively,obeyed,oaths,o'leary's,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuff,nuances,nourishing,noticeably,notably,nosedive,northeastern,norbu,nomlies,nomine,nomads,noge,nixed,niro,nihilist,nightshift,newmeat,nevis,nemo's,neighborhood's,neglectful,neediness,needin,necromancer,neck's,ncic,nathaniel's,nashua,naphthalene,nanotechnology,nanocytes,nanite,naivete,nacho,n'yeah,mystifying,myhnegon,mutating,muskrat,musing,museum's,muppets,mumbles,mulled,muggy,muerto,muckraker,muchachos,mris,move's,mourners,mountainside,moulin,mould,motherless,motherfuck,mosquitos,morphed,mopped,moodoo,montage,monsignor,moncho,monarchs,mollem,moisturiser,moil,mohicans,moderator,mocks,mobs,mizz,mites,mistresses,misspent,misinterpretation,mishka,miscarry,minuses,minotaur,minoan,mindee,mimicking,millisecond,milked,militants,migration,mightn't,mightier,mierzwiak,midwives,micronesia,microchips,microbes,michele's,mhmm,mezzanine,meyerling,meticulously,meteorite,metaphorical,mesmerizing,mershaw,meir,meg's,meecrob,medicate,medea,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,maytag,mayors,matzah,matriarch,matic,mathematicians,masturbated,masselin,marxist,martyrs,martini's,martialed,marten's,marlboros,marksmanship,marishka,marion's,marinate,marge's,marchin,manifestations,manicured,mandela,mamma's,mame,malnourished,malk,malign,majorek,maidens,mahoney's,magnon,magnificently,maestro's,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lynx,lynn's,lyman's,lydells,lusts,lures,luna's,ludwig's,lucite,lubricants,louise's,lopper,lopped,loneliest,lonelier,lomez,lojack,localized,locale,loath,lloyd's,literate,liquidated,liquefy,lippy,linguistic,limps,lillian's,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,lewis's,leveraged,leticia's,leotards,leopards,leonid,leonardo's,lemmings,leland's,legitimacy,leanin,laxatives,lavished,latka,later's,larval,lanyard,lans,lanky,landscaping,landmines,lameness,lakeshore,laddies,lackluster,lacerated,labored,laboratories,l'amour,kyrgyzstan,kreskin,krazy,kovitch,kournikova,kootchy,konoss,know's,knknow,knickety,knackety,kmart,klicks,kiwanis,kitty's,kitties,kites,kissable,kirby's,kingdoms,kindergartners,kimota,kimble's,kilter,kidnet,kidman,kid'll,kicky,kickbacks,kickback,kickass,khrushchev,kholokov,kewpie,kent's,keno,kendo,keller's,kcdm,katrina's,katra,kareoke,kaia,kafelnikov,kabob,ka's,junjun,jumba,julep,jordie,jondy,jolson,jinnah,jeweler's,jerkin,jenoff,jefferson's,jaye's,jawbone,janitorial,janiro,janie's,iron's,ipecac,invigorated,inverted,intruded,intros,intravenously,interruptus,interrogations,interracial,interpretive,internment,intermediate,intermediary,interject,interfacing,interestin,insuring,instilled,instantaneous,insistence,insensitivity,inscrutable,inroads,innards,inlaid,injector,initiatives,inhe,ingratitude,infuriates,infra,informational,infliction,infighting,induction,indonesian,indochina,indistinguishable,indicators,indian's,indelicate,incubators,incrimination,increments,inconveniencing,inconsolable,incite,incestuous,incas,incarnation,incarcerate,inbreeding,inaccessible,impudence,impressionists,implemented,impeached,impassioned,impacts,imipenem,idling,idiosyncrasies,icicle,icebreaker,icebergs,i'se,hyundai,hypotensive,hydrochloride,huuh,hushed,humus,humph,hummm,hulking,hubcaps,hubald,http,howya,howbout,how'll,houseguests,housebroken,hotwire,hotspots,hotheaded,horticulture,horrace,horde,horace's,hopsfield,honto,honkin,honeymoons,homophobia,homewrecker,hombres,hollow's,hollers,hollerin,hokkaido,hohh,hogwarts,hoedown,hoboes,hobbling,hobble,hoarse,hinky,himmler,hillcrest,hijacking,highlighters,hiccup,hibernation,hexes,heru'ur,hernias,herding,heppleman,henderson's,hell're,heine's,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,headliner,he'p,hazelnut,hazards,hayseed,haveo,hauls,hattie's,hathor's,hasten,harriers,harridan,harpoons,harlin's,hardens,harcesis,harbouring,hangouts,hangman,handheld,halkein,haleh,halberstam,hairpin,hairnet,hairdressers,hacky,haah,haaaa,h'yah,gyms,gusta,gushy,gusher,gurgling,gunnery,guilted,guilt's,gruel,grudging,grrrrrr,grouse,grossing,grosses,groomsmen,griping,gretchen's,gregorian,gray's,gravest,gratified,grated,graphs,grandad,goulash,goopy,goonies,goona,goodman's,goodly,goldwater,godliness,godawful,godamn,gobs,gob's,glycerin,glutes,glowy,glop,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gimp,gilbey,gil's,gigglepuss,ghora,gestating,geologists,geographically,gelato,gekko's,geishas,geek's,gearshift,gear's,gayness,gasped,gaslighting,garretts,garba,gams,gags,gablyczyck,g'head,fungi,fumigating,fumbling,fulton's,fudged,fuckwad,fuck're,fuchsia,fruition,freud's,fretting,freshest,frenchies,freezers,fredrica,fraziers,francesca's,fraidy,foxholes,fourty,fossilized,forsake,formulate,forfeits,foreword,foreclosed,foreal,foraging,footsies,focussed,focal,florists,flopped,floorshow,floorboard,flinching,flecks,flavours,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fizzle,fiver,fitzy,fishsticks,finster,finetti,finelli,finagle,filko,filipino,figurines,figurative,fifi,fieldstone,fibber,fiance's,feuds,feta,ferrini,female's,feedin,fedora,fect,feasting,favore,fathering,farrouhk,farmin,far's,fanny's,fajita,fairytale,fairservice,fairgrounds,fads,factoid,facet,facedown,fabled,eyeballin,extortionist,exquisitely,exporting,explicitly,expenditures,expedited,expands,exorcise,existentialist,exhaustive,execs,exculpatory,excommunicated,exacerbate,everthing,eventuality,evander,eustace,euphoric,euphemisms,eton,esto,estimation,estamos,establishes,erred,environmentalist,entrepreneurial,entitle,enquiries,enormity,engages,enfants,enen,endive,end's,encyclopedias,emulating,emts,employee's,emphasized,embossed,embittered,embassies,eliot,elicit,electrolyte,ejection,effortless,effectiveness,edvard,educators,edmonton's,ecuador,ectopic,ecirc,easely,earphones,earmarks,earmarked,earl's,dysentery,dwindling,dwight's,dweller,dusky,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,duce,druthers,druggist,drug's,drossos,drosophila,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dragoons,dozing,down's,dour,dougie's,dotes,dorsal,dorkface,doorknobs,doohickey,donnell's,donnatella,doncha,don's,dominates,domicile,dokos,dobermans,djez,dizzying,divola,dividends,ditsy,distaste,disservice,disregarded,dispensed,dismay,dislodged,dislodge,disinherit,disinformation,discrete,discounting,disciplines,disapproved,dirtball,dinka,dimly,dilute,dilucca's,digesting,diello,diddling,dictatorships,dictators,diagonal,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,descends,derris,deplore,deplete,depicts,depiction,depicted,denver's,denounce,demure,demolitions,demean,deluge,dell's,delish,deliberation,delbruck,delaford,deities,degaulle,deftly,deft,deformity,deflate,definatly,defense's,defector,deducted,decrypted,decontamination,decker's,decapitate,decanter,deadline's,dardis,danger's,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechs,czechoslovakian,cyrillic,cymbal,cyberdyne,cutoffs,cuticle,cut's,curvaceous,curiousity,curfew's,culturally,cued,cubby,cruised,crucible,crowing,crowed,croutons,cropped,croaker,cristobel's,criminy,crested,crescentis,cred,cream's,crashers,crapola,cranwell,coverin,cousteau,courtrooms,counterattack,countenance,counselor's,cottages,cosmically,cosign,cosa,corroboration,corresponds,correspond,coroners,coro,cornflakes,corbett's,copy's,copperpot,copperhead,copacetic,coordsize,convulsing,contradicted,contract's,continuation,consults,consultations,constraints,conjures,congenial,confluence,conferring,confederation,condominium,concourse,concealer,compulsory,complexities,comparatively,compactor,commodities,commercialism,colleague's,collaborator,cokey,coiled,cognizant,cofell's,cobweb,co's,cnbc,clyde's,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clop,clods,clocking,clings,climbers,clef,clearances,clavicle,claudia's,classless,clashing,clanking,clanging,clamping,civvies,citywide,citing,circulatory,circuited,circ,chung's,chronisters,chromic,choppy,choos,chongo,chloroformed,chilton's,chillun,chil,chicky,cheetos,cheesed,chatterbox,charlies,chaperoned,channukah,chamberlain's,chairman's,chaim,cessation,cerebellum,centred,centerpieces,centerfold,cellars,ceecee,ccedil,cavorting,cavemen,cavaliers,cauterized,caustic,cauldwell,catting,cathy's,caterine,castor's,cassiopeia,cascade's,carves,cartwheel,cartridges,carpeted,carob,carlsbad,caressing,carelessly,careening,carcinoma,capricious,capitalistic,capillaries,capes,candle's,candidly,canaan,camaraderie,calumet,callously,calligraphy,calfskin,cake's,caddies,cabinet's,buzzers,buttholes,butler's,busywork,busses,burps,burgomeister,buoy,bunny's,bunkhouse,bungchow,bulkhead,builders,bugler,buffets,buffed,buckaroo's,brutish,brusque,browser,bronchitis,bromden,brolly,brody's,broached,brewskis,brewski,brewin,brewers,brean,breadwinner,brana,brackets,bozz,bountiful,bounder,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bons,boneyard,bombosity,bolting,bolivia,boilerplate,boba,bluey,blowback,blouses,bloodsuckers,bloodstained,blonde's,bloat,bleeth,blazed,blaine's,blackhawk,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,binghamton,biltmore,billiards,bilked,big'uns,bidwell's,bidet,bessie's,besotted,beset,berth,bernheim,benson's,beni,benegas,bendiga,belushi,beltway,bellboys,belittling,belinda's,behinds,behemoth,begone,beeline,beehive,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,be's,bauk,bathes,batak,bastion,baser,baseballs,barker's,barber's,barbella,bans,bankrolling,bangladesh,bandaged,bamba,bally's,bagpipe,bagger,baerly,backlog,backin,babying,azkaban,ayatollah,axes,awwwww,awakens,aviary,avery's,autonomic,authorizes,austero,aunty,augustine's,attics,atreus,astronomers,astounded,astonish,assertion,asserting,assailants,asha's,artemus,arses,arousal,armin,arintero,argon's,arduous,archers,archdiocese,archaeology,arbitrarily,ararat,appropriated,appraiser,applicable,apathetic,anybody'd,anxieties,anwar's,anticlimactic,antar,ankle's,anima,anglos,angleman,anesthetist,androscoggin,andromeda,andover,andolini,andale,anan,amway,amuck,amphibian,amniocentesis,amnesiac,ammonium,americano,amara,alway,alvah,alum,altruism,alternapalooza,alphabetize,alpaca,almanac,ally's,allus,alluded,allocation,alliances,allergist,alleges,alexandros,alec's,alaikum,alabam,akimbo,airy,ahab's,agoraphobia,agides,aggrhh,agatha's,aftertaste,affiliations,aegis,adoptions,adjuster,addictions,adamantium,acumen,activator,activates,acrylic,accomplishes,acclaimed,absorbs,aberrant,abbu,aarp,aaaaargh,aaaaaaaaaaaaa,a'ight,zucchini,zoos,zookeeper,zirconia,zippers,zequiel,zephyr's,zellary,zeitgeist,zanuck,zambia,zagat,ylang,yielded,yes'm,yenta,yegg,yecchh,yecch,yayo,yawp,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,wort,worshiping,worsen,wormy,wormtail,wormholes,woosh,woodworking,wonka,womens,wolverines,wollsten,wolfing,woefully,wobbling,witter's,wisp,wiry,wire's,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,wilco,wiggum,wields,widened,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whitefish,whistled,whist,whinny,whereupon,whereby,wheelies,wheaties,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whar,whacks,wexler's,wewell,wewe,wetsuit,wetland,westport,welluh,weight's,weeps,webpage,waylander,wavin,watercolors,wassail,wasnt,warships,warns,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vork,vorhees,voldemort,vivre,vittles,vishnu,vips,vindaloo,videogames,victors,vicky's,vichyssoise,vicarious,vet's,vesuvius,verve,verguenza,venturing,ventura's,venezuelan,ven't,velveteen,velour,velociraptor,vegetation,vaudeville,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,valerian,vacuums,vaccines,uzbekistan,usurp,usernum,us'll,urinals,unyielding,unwillingness,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unregistered,unpublished,unpretentious,unopposed,unnerstand,unmade,unlicensed,unites,union's,uninhabited,unimpeachable,unilateral,unicef,unfolded,unfashionable,undisturbed,underwriting,underwrite,underlining,underling,underestimates,underappreciated,undamaged,uncouth,uncork,uncontested,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,uhmm,ughuh,ughh,ufo's,typewriters,twitches,twitched,twirly,twinkling,twink,twinges,twiddling,twiddle,tutored,tutelage,turners,turnabout,ture,tunisian,tumultuous,tumour,tumblin,tryed,truckin,trubshaw's,trowel,trousseau,trivialize,trifles,tribianni,trib,triangulation,trenchcoat,trembled,traumatize,transplanted,translations,transitory,transients,transfuse,transforms,transcribing,transcend,tranq,trampy,traipsed,trainin,trail's,trafalgar,trachea,traceable,touristy,toughie,totality,totaling,toscanini,tortola,tortilla,tories,toreador,tooo,tonka,tommorrow,tollbooth,tollans,toidy,togs,togas,tofurkey,toddling,toddies,tobruk,toasties,toadstool,to've,tive,tingles,timin,timey,timetables,tightest,tide's,tibetans,thunderstorms,thuggee,thrusting,thrombus,throes,throated,thrifty,thoroughbred,thornharts,thinnest,thicket,thetas,thesulac,tethered,testimonial,testaburger,tersenadine,terrif,teresa's,terdlington,tepui,tenured,tentacle,temping,temperance,temp's,teller's,televisions,telefono,tele,teddies,tector,taxidermy,taxi's,taxation,tastebuds,tasker's,tartlets,tartabull,tard,tar'd,tantamount,tans,tangy,tangles,tamer,talmud,taiwan's,tabula,tabletops,tabithia,tabernacle,szechwan,syrian,synthedyne,synopsis,synonyms,swaps,swahili,svenjolly,svengali,suvs,sush,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,supervisors,superstore,supermen,supercop,supercilious,suntac,sunburned,summercliff,sullied,suite's,sugared,sufficiency,suerte,suckle,sucker's,sucka,succumbing,subtleties,substantiated,subsidiaries,subsides,subliminal,subhuman,stst,strowman,stroked,stroganoff,strikers,strengthening,streetlight,straying,strainer,straighter,straightener,storytelling,stoplight,stockade,stirrups,stink's,sting's,stimulates,stifler's,stewing,stetson's,stereotyping,ster,stepmommy,stephano,steeped,statesman,stashing,starshine,stand's,stamping,stamford,stairwells,stabilization,squatsie,squandering,squalid,squabbling,squab,sprinkling,spring's,spreader,spongy,spongebob,spokeswoman,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,speckled,spearchucker,spatulas,sparse,sparking,spares,spaceboy,soybeans,southtown,southside,southport,southland,soused,sotheby's,soshi,sorter,sorrowful,sorceress,sooth,songwriters,some'in,solstice,soliloquy,sods,sodomized,sode,sociologist,sobriki,soaping,snows,snowcone,snowcat,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smolensk,smarten,smallish,slushy,slurring,sluman,slobber,slithers,slippin,sleuthing,sleeveless,slade's,skinner's,skinless,skillfully,sketchbook,skagnetti,sista,sioux,sinning,sinjin,singularly,sinewy,sinclair's,simultaneous,silverlake,silva's,siguto,signorina,signature's,signalling,sieve,sids,sidearms,shyster,shying,shunning,shtud,shrooms,shrieks,shorting,shortbread,shopkeepers,shmuck,shmancy,shizzit,shitheads,shitfaced,shitbag,shipmates,shiftless,sherpa,shelving,shelley's,sheik,shedlow,shecky,sheath,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,settlers,setter,seti,serviceable,serrated,serbian,sequentially,sepsis,senores,sendin,semis,semanski,seller's,selflessly,selects,selectively,seinfelds,seers,seer's,seeps,see's,seductress,sedimentary,sediment,second's,secaucus,seater,seashore,sealant,seaborn's,scuttling,scusa,sculpting,scrunched,scrimmage,screenwriter,scotsman,scorer,sclerosis,scissorhands,schreber,scholastic,schmancy,schlong,scathing,scandinavia,scamps,scalloped,savoir,savagery,sasha's,sarong,sarnia,santangel,samool,samba,salons,sallow,salino,safecracker,sadism,saddles,sacrilegious,sabrini,sabath,s'aright,ruttheimer,russia's,rudest,rubbery,rousting,rotarian,roslin,rosey,rosa's,roomed,romari,romanticism,romanica,rolltop,rolfski,rod's,rockland,rockettes,roared,riverfront,rinpoche,ringleader,rims,riker's,riffing,ricans,ribcage,riana's,rhythmic,rhah,rewired,retroactive,retrial,reting,reticulum,resuscitated,resuming,restricting,restorations,restock,resilience,reservoirs,resembled,resale,requisitioned,reprogrammed,reproducing,repressive,replicant,repentant,repellant,repays,repainting,reorganization,renounced,renegotiating,rendez,renamed,reminiscent,remem,remade,relived,relinquishes,reliant,relearn,relaxant,rekindling,rehydrate,regulatory,regiments,regan's,refueled,refrigeration,refreshingly,reflector,refine,refilling,reexamine,reeseman,redness,redirected,redeemable,redder,redcoats,rectangles,recoup,reconstituted,reciprocated,recipients,recessed,recalls,rebounded,reassessing,realy,reality's,realisation,realer,reachin,re'kali,rawlston,ravages,rattlers,rasa,raps,rappaports,ramoray,ramming,ramadan,raindrops,rahesh,radioactivity,radials,racists,racin,rabartu,quotas,quintus,quiches,ques,queries,quench,quel,quarrels,quarreling,quaintly,quagmire,quadrants,pylon,putumayo,put'em,purifier,purified,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,puccini,pterodactyl,psychodrama,pseudonym,psats,proximal,providers,protestations,protectee,prospered,prosaic,propositioned,prolific,progressively,proficiency,professions,prodigious,proclivity,probed,probabilities,pro's,prison's,printouts,principally,prig,prevision,prevailing,presumptive,pressers,preset,presentations,preposition,preparatory,preliminaries,preempt,preemie,predetermined,preconceptions,precipitate,prancan,powerpuff,powerfully,potties,potters,potpie,poseur,portraying,portico,porthole,portfolios,poops,pooping,pone,pomp,pomade,polyps,polymerized,politic,politeness,polisher,polack,pokers,pocketknife,poatia,plebeian,playgroup,platonically,plato's,platitude,platelet,plastering,plasmapheresis,plaques,plaids,placemats,place's,pizzazz,piracy,pipelines,pip's,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pillaged,pileup,pilates,pigment,pigmen,pieter,pieeee,picturesque,piano's,phrasing,phrased,photojournalist,photocopies,phosphorus,phonograph,phoebes,phoe,philistines,philippine,philanderer,pheromone,phasers,pharaoh's,pfff,pfeffernuesse,petrov,petitions,peterman's,peso,pervs,perspire,personify,perservere,perplexed,perpetrating,perp's,perkiness,perjurer,periodontist,perfunctory,performa,perdido,percodan,penzance,pentameter,pentagon's,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegs,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,payout,paxcow,paused,pauline's,patted,pasteur,passe,parochial,parkland,parkishoff,parkers,pardoning,paraplegic,paraphrasing,parapet,paperers,papered,panoramic,pangs,paneling,pander,pandemonium,pamela's,palooza,palmed,palmdale,palisades,palestinian,paleolithic,palatable,pakistanis,pageants,packaged,pacify,pacified,oyes,owwwww,overthrown,overt,oversexed,overriding,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outtakes,outmaneuver,outlying,outlining,outfoxed,ousted,oust,ouse,ould,oughtn't,ough,othe,ostentatious,oshun,oscillation,orthopedist,organizational,organization's,orca,orbits,or'derves,opting,ophthalmologist,operatic,operagirl,oozes,oooooooh,only's,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrics,obstetrical,obeys,obeah,o'rourke,o'reily's,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutrients,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,ntnt,nourished,notoriety,northland,nonspecific,nonfiction,noing,noinch,nohoho,nobler,nitwits,nitric,nips,nibs,nibbles,newton's,newsprint,newspaperman,newspaper's,newscaster,never's,neuter,neuropathy,netherworld,nests,nerf,neee,neediest,neath,navasky,naturalization,nat's,narcissists,napped,nando,nags,nafta,myocardial,mylie's,mykonos,mutilating,mutherfucker,mutha,mutations,mutates,mutate,musn't,muskets,murray's,murchy,mulwray's,multitasking,muldoon's,mujeeb,muerte,mudslinging,muckraking,mrsa,mown,mousie,mousetrap,mourns,mournful,motivating,motherland,motherf,mostro,mosaic,morphing,morphate,mormons,moralistic,moored,moochy,mooching,monotonous,monorail,monopolize,monogram,monocle,molehill,molar,moland,mofet,modestly,mockup,moca,mobilizing,mitzvahs,mitre,mistreating,misstep,misrepresentation,misjudge,misinformation,miserables,misdirected,miscarriages,minute's,miniskirt,minimizing,mindwarped,minced,milquetoast,millimeters,miguelito,migrating,mightily,midsummer,midstream,midriff,mideast,midas,microbe,metropolis,methuselah,mesdames,mescal,mercury's,menudo,menu's,mentors,men'll,memorial's,memma,melvins,melanie's,megaton,megara,megalomaniac,meeee,medulla,medivac,mediate,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,maturing,matter's,mateys,mate's,mastering,masher,marxism,martimmy's,marshack,marseille,markles,marketed,marketable,mansiere,manservant,manse,manhandling,manco's,manana,maman,malnutrition,mallomars,malkovich's,malcontent,malaise,makeup's,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,madcap,mack's,machu,macfarlane's,macado,ma'm,m'boy,m'appelle,lying's,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,lonnegan's,lola's,loire,loincloth,logistical,lofts,lodges,lodgers,lobbing,loaner,livered,lithuania,liqueur,linkage,ling's,lillienfield's,ligourin,lighter's,lifesaving,lifeguards,lifeblood,library's,liberte,liaisons,liabilities,let'em,lesbianism,lenny's,lennart,lence,lemonlyman,legz,legitimize,legalized,legalization,leadin,lazars,lazarro,layoffs,lawyering,lawson's,lawndale's,laugher,laudanum,latte's,latrines,lations,laters,lastly,lapels,lansing's,lan's,lakefront,lait,lahit,lafortunata,lachrymose,laborer,l'italien,l'il,kwaini,kuzmich,kuato's,kruczynski,kramerica,krakatoa,kowtow,kovinsky,koufax,korsekov,kopek,knoxville,knowakowski,knievel,knacks,klux,klein's,kiran,kiowas,kinshasa,kinkle's,kincaid's,killington,kidnapper's,kickoff,kickball,khan's,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,katmandu,katan's,karajan,kamerev,kamal's,kaggs,juvi,jurisdictional,jujyfruit,judeo,jostled,joni's,jonestown,jokey,joists,joint's,johnnie's,jocko,jimmied,jiggled,jig's,jests,jessy,jenzen,jensen's,jenko,jellyman,jeet,jedediah,jealitosis,jaya's,jaunty,jarmel,jankle,jagoff,jagielski,jacky,jackrabbits,jabbing,jabberjaw,izzat,iuml,isolating,irreverent,irresponsibly,irrepressible,irregularity,irredeemable,investigator's,inuvik,intuitions,intubated,introspective,intrinsically,intra,intimates,interval,intersections,interred,interned,interminable,interloper,intercostal,interchange,integer,intangible,instyle,instrumentation,instigate,instantaneously,innumerable,inns,injustices,ining,inhabits,ings,ingrown,inglewood,ingestion,ingesting,infusion,infusing,infringing,infringe,inflection,infinitum,infact,inexplicably,inequities,ineligible,industry's,induces,indubitably,indisputable,indirect,indescribably,independents,indentation,indefinable,incursion,incontrovertible,inconsequential,incompletes,incoherently,inclement,inciting,incidentals,inarticulate,inadequacies,imprudent,improvisation,improprieties,imprison,imprinted,impressively,impostors,importante,implicit,imperious,impale,immortalized,immodest,immobile,imbued,imbedded,imbecilic,illustrates,illegals,iliad,idn't,idiom,icons,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,hungarians,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,html,hows,howlin,hoth,hotbed,hosing,hosers,horsehair,homegrown,homebody,homebake,holographic,holing,holies,hoisting,hogwallop,hogan's,hocks,hobbits,hoaxes,hmmmmm,hisses,hippos,hippest,hindrance,hindi,him's,hillbillies,hilarity,highball,hibiscus,heyday,heurh,hershey's,herniated,hermaphrodite,hera,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heey,heeey,hedda,heck's,heartbeats,heaped,healers,headstart,headsets,headlong,headlining,hawkland,havta,havana's,haulin,hastened,hasn,harvey'll,harpo,hardass,haps,hanta,hansom,hangnail,handstand,handrail,handoff,hander,han's,hamlet's,hallucinogen,hallor,halitosis,halen,hahah,hado,haberdashery,gypped,guy'll,guni,gumbel,gulch,gues,guerillas,guava,guatemalan,guardrail,guadalajara,grunther,grunick,grunemann's,growers,groppi,groomer,grodin,gris,gripes,grinds,grimaldi's,grifters,griffins,gridlock,gretch,greevey,greasing,graveyards,grandkid,grainy,graced,governed,gouging,gordie's,gooney,googly,golfers,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,goa'uld's,glues,gloriously,glengarry,glassware,glamor,glaciers,ginseng,gimmicks,gimlet,gilded,giggly,gig's,giambetti,ghoulish,ghettos,ghandi,ghali,gether,get's,gestation,geriatrics,gerbils,gerace's,geosynchronous,georgio,geopolitical,genus,gente,genital,geneticist,generation's,generates,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,garages,gantu,gangy,gangly,gangland,gamer,galling,galilee,galactica's,gaiety,gadda,gacy,futuristic,futs,furrowed,funny's,funnies,funkytown,fundraisers,fundamentalist,fulcrum,fugimotto,fuente,fueling,fudging,fuckup,fuckeen,frutt's,frustrates,froufrou,froot,frontiers,fromberge,frog's,frizzies,fritters,fringes,frightfully,frigate,friendliest,freeloading,freelancing,fredonia,freakazoid,fraternization,frankfurter,francine's,franchises,framers,fostered,fortune's,fornication,fornicating,formulating,formations,forman's,forgeries,forethought,forage,footstool,foisting,focussing,focking,foal,flutes,flurries,fluffed,flourished,florida's,floe,flintstones,fleischman's,fledgling,fledermaus,flayed,flay,flawlessly,flatters,flashbang,flapped,flanking,flamer,fission,fishies,firmer,fireproof,fireman's,firebug,firebird,fingerpainting,finessed,findin,financials,finality,fillets,fighter's,fiercest,fiefdom,fibrosis,fiberglass,fibbing,feudal,festus,fervor,fervent,fentanyl,fenelon,fenders,fedorchuk,feckless,feathering,fearsome,fauna,faucets,farmland,farewells,fantasyland,fanaticism,faltered,fallacy,fairway,faggy,faberge,extremism,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,exemptions,excesses,excels,exasperating,exacting,evoked,evocative,everyman,everybody'd,evasions,evangelical,establishments,espressos,esoteric,esmail,errrr,erratically,eroding,erode,ernswiler,episcopalian,ephemeral,epcot,entrenched,entomology,entomologist,enthralled,ensuing,ensenada,enriching,enrage,enlisting,enhancer,enhancements,endorsing,endear,encrusted,encino,enacted,employing,emperors,empathic,embodied,embezzle,embarked,emanates,elton's,eloquence,eloi,elmwood,elliptical,ellenor's,elemental,electricians,electing,elapsed,eking,egomaniacal,eggo,egging,effected,effacing,eeww,edits,editor's,edging,ectoplasm,economical,ecch,eavesdropped,eastbound,earwig,e'er,durable,dunbar's,dummkopf,dugray,duchaisne,duality,drusilla's,drunkard,drudge,drucilla's,droop,droids,drips,dripped,dribbles,drew's,dressings,drazens,downy,downsize,downpour,dowager,dote,dosages,dorothy's,doppler,doppelganger,dopes,doorman's,doohicky,doof,dontcha,donovon's,doneghy,domi,domes,dojo,documentaries,divinity,divining,divest,diuretics,diuretic,distrustful,distortions,dissident,disrupts,disruptions,disproportionate,dispensary,disparity,dismemberment,dismember,disinfect,disillusionment,disheartening,discriminated,discourteous,discotheque,discolored,disassembled,disabling,dirtiest,diphtheria,dinks,dimpled,digg,diffusion,differs,didya,dickweed,dickwad,dickson's,diatribes,diathesis,diabetics,dewars,deviants,detrimental,detonates,detests,detestable,detaining,despondent,desecration,descriptive,derision,derailing,deputized,depressors,depo,depicting,depict,dependant,dentures,denominators,demur,demonstrators,demonology,delts,dellarte,delinquency,delacour,deflated,definitively,defib,defected,defaced,deeded,decorators,debit,deaqon,davola,datin,dasilva's,darwinian,darling's,darklighters,dandelions,dandelion,dancer's,dampened,dame's,damaskinos,dama,dalrimple,dagobah,dack,d'peshu,d'hoffryn,d'astier,cystic,cynics,cybernetic,cutoff,cutesy,cutaway,customarily,curtain's,cursive,curmudgeon,curdle,cuneiform,cultivated,culpability,culo,cuisinart,cuffing,crypts,cryptid,cryogenic,crux,crunched,crumblers,crudely,crosscheck,croon,crissake,crime's,cribbage,crevasse,creswood,creepo,creases,creased,creaky,cranks,cran,craftsmen,crafting,crabgrass,cowboy's,coveralls,couple'a,councilors,coughs,cotton's,cosmology,coslaw,corresponded,corporeal,corollary,cornucopia,cornering,corks,cordoned,coolly,coolin,cooley's,coolant,cookbooks,converging,contrived,contrite,contributors,contradictory,contra,contours,contented,contenders,contemplated,contact's,constrictor,congressman's,congestion,confrontations,confound,conform,confit,confiscating,conferred,condoned,conditioners,concussions,concentric,conceding,coms,comprised,comprise,comprendo,composers,commuted,commercially,commentator,commentaries,commemorating,commander's,comers,comedic,combustible,combusted,columbo,columbia's,colourful,colonials,collingswood,coliseum,coldness,cojones,coitus,cohesive,cohesion,cohen's,coffey's,codicil,cochran's,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clumps,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleave,cleanses,claymores,clarisse,clarissa's,clammed,civilisation,ciudad,circumvent,circulated,circuit's,cinnamon's,cind,church's,chugging,chronically,christsakes,chris's,choque,chompers,choco,chiseling,chirpy,chirp,chinks,chingachgook,chigger,chicklet,chickenpox,chickadee,chewin,chessboard,cherub,chemo's,chauffeur's,chaucer,chariots,chargin,characterizing,chanteuse,chandeliers,chamdo,chalupa,chagrined,chaff,certs,certify,certification,certainties,cerreno,cerebrum,cerebro,century's,centennial,censured,cemetary,cellist,celine's,cedar's,cayo,caterwauling,caterpillars,categorized,catchers,cataclysmic,cassidy's,casitas,casino's,cased,carvel,cartographers,carting,cartels,carriages,carrear,carr's,carolling,carolinas,carolers,carnie,carne,cardiovascular,cardiogram,carbuncle,caramba,capulets,capping,canyons,canines,candaules,canape,canadiens,campaigned,cambodian,camberwell,caldecott,calamitous,caff,cadillacs,cachet,cabeza,cabdriver,byzantium,buzzkill,buzzards,buzz's,buyer's,butai,bustling,businesswomen,bunyan,bungled,bumpkins,bummers,bulletins,bullet's,bulldoze,bulbous,bug's,buffybot,budgeted,budda,bubut,bubbies,brunei,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,broadening,briskly,briefcases,bricked,breezing,breeher,breckinridge,breakwater,breakable,breadstick,bravenet,braved,brass's,brandies,brandeis,branched,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boyd's,boutonniere,bottle's,bossed,bosomy,bosnian,borans,boosts,boombox,bookshelves,bookmark,booklet,bookends,bontecou's,bongos,boneless,bone's,bond's,bombarding,bombarded,bollo,boinked,boink,boilers,bogart's,bobbo,bobbin,bluest,bluebells,blowjobs,bloodshot,blondie's,blockhead,blockbusters,blithely,blim,bleh,blather,blasters,blankly,bladders,blackhawks,blackbeard,bjorn,bitte,bippy,bios,biohazard,biogenetics,biochemistry,biochemist,bilingual,bilge,bigmouth,bighorn,bigglesworth,bicuspids,beususe,betaseron,besmirch,besieged,bernece,bergman's,bereavement,bentonville,benthic,benjie,benji's,benefactors,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,being's,behrle,beginnin,begining,beenie,beefs,beechwood,bee's,bedbug,becau,beaverhausen,beakers,beacon's,bazillion,baudouin,bat's,bartlett's,barrytown,barringtons,baroque,baronet,barneys,barbs,barbers,barbatus,baptists,bankrupted,banker's,bamn,bambi's,ballon's,balinese,bakeries,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,averages,avengers,avatars,autonomous,automotive,automaton,automatics,autism,authoritative,authenticated,authenticate,aught,audition's,aubyn,attired,attagirl,atrophied,atonement,atherton's,asystole,astroturf,assimilated,assimilate,assertiveness,assemblies,assassin's,artiste,article's,artichokes,arsehole,arrears,arquillians,arnie's,aright,archenemy,arched,arcade's,aquatic,apps,appraise,applauded,appendages,appeased,apostle,apollo's,antwerp,antler,antiquity,antin,antidepressant,antibody,anthropologists,anthology,anthea,antagonism,ant's,anspaugh,annually,anka,angola,anesthetics,anda,ancients,anchoring,anaphylactic,anaheim,ana's,amtrak,amscray,amputated,amounted,americas,amended,ambivalence,amalio,amah,altoid,alriiight,alphabetized,alpena,alouette,allowable,allora,alliteration,allenwood,alleging,allegiances,aligning,algerians,alerts,alchemist,alcerro,alastor,airway's,airmen,ahaha,ah'm,agitators,agitation,aforethought,afis,aesthetics,aerospace,aerodynamics,advertises,advert,advantageous,admonition,administration's,adirondacks,adenoids,adebisi's,acupuncturist,acula,actuarial,activators,actionable,acme's,acknowledges,achmed,achingly,acetate,accusers,accumulation,accorded,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abraham's,aboriginal,ablaze,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","), +q;q=function(){var b,a,c,e,g;b=function(a){var b,e,c,g,k;b=0;for(c in a)k=a[c],b+=function(){var a,b,d;d=[];a=0;for(b=k.length;a. + * + */ + +namespace SP\Controller; + +use SP\Account; +use SP\AccountHistory; +use SP\Acl; +use SP\Common; +use SP\CustomFields; +use SP\Groups; +use SP\Session; +use SP\SPException; +use SP\UserUtil; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Clase encargada de preparar la presentación de las vistas de una cuenta + * + * @package Controller + */ +class AccountC extends Controller implements ActionsInterface +{ + /** + * @var int con la acción a realizar + */ + protected $_action; + /** + * @var Account|AccountHistory instancia para el manejo de datos de una cuenta + */ + private $_account; + /** + * @var bool indica si se han obtenido datos de la cuenta + */ + private $_gotData = false; + /** + * @var int con el id de la cuenta + */ + private $_id; + + /** + * Constructor + * + * @param \SP\Template $template instancia del motor de plantillas + * @param $lastAction int con la última acción realizada + * @param null $accountId int con el id de la cuenta + */ + public function __construct(\SP\Template $template = null, $lastAction, $accountId = null) + { + parent::__construct($template); + + $this->setId($accountId); + + $this->view->assign('changesHash', ''); + $this->view->assign('chkUserEdit', ''); + $this->view->assign('chkGroupEdit', ''); + $this->view->assign('gotData', $this->isGotData()); + $this->view->assign('sk', Common::getSessionKey(true)); + } + + /** + * @return Account|AccountHistory + */ + private function getAccount() + { + return $this->_account; + } + + /** + * @param Account|AccountHistory $account + */ + private function setAccount($account) + { + $this->_account = $account; + } + + /** + * @return boolean + */ + private function isGotData() + { + return $this->_gotData; + } + + /** + * @param boolean $gotData + */ + private function setGotData($gotData) + { + $this->_gotData = $gotData; + } + + /** + * @return int + */ + private function getId() + { + return $this->_id; + } + + /** + * @param int $id + */ + private function setId($id) + { + $this->_id = $id; + } + + /** + * Obtener los datos para mostrar el interface para nueva cuenta + */ + public function getNewAccount() + { + $this->setAction(self::ACTION_ACC_NEW); + + if (!$this->checkAccess()) { + return; + } + + $this->view->addTemplate('account'); + $this->view->assign('title', + array( + 'class' => 'titleGreen', + 'name' => _('Nueva Cuenta'), + 'icon' => 'add' + ) + ); + $this->view->assign('showform', true); + $this->view->assign('nextaction', Acl::ACTION_ACC_SEARCH); + + $this->setCommonData(); + $this->setShowData(); + } + + /** + * Comprobar si el usuario dispone de acceso al módulo + * + * @return bool + */ + protected function checkAccess($action = null) + { + if (!Acl::checkUserAccess($this->getAction())) { + $this->showError(self::ERR_PAGE_NO_PERMISSION); + return false; + } elseif (!UserUtil::checkUserUpdateMPass()) { + $this->showError(self::ERR_UPDATE_MPASS); + return false; + } elseif ($this->_id > 0 && !Acl::checkAccountAccess($this->_action, $this->_account->getAccountDataForACL())) { + $this->showError(self::ERR_ACCOUNT_NO_PERMISSION); + return false; + } + + return true; + } + + /** + * Establecer variables comunes del formulario para todos los interfaces + */ + private function setCommonData() + { + if ($this->isGotData()) { +// $this->view->assign('accountParentId', $this->getAccount()->getAccountParentId()); + $this->view->assign('accountIsHistory', $this->getAccount()->getAccountIsHistory()); + $this->view->assign('accountOtherUsers', $this->getAccount()->getAccountUsersId()); + $this->view->assign('accountOtherUsersName', UserUtil::getUsersNameForAccount($this->getId())); + $this->view->assign('accountOtherGroups', $this->getAccount()->getAccountUserGroupsId()); + $this->view->assign('accountOtherGroupsName', \SP\Groups::getGroupsNameForAccount($this->getId())); + $this->view->assign('changesHash', $this->getAccount()->calcChangesHash()); + $this->view->assign('chkUserEdit', ($this->view->accountData->account_otherUserEdit) ? 'checked' : ''); + $this->view->assign('chkGroupEdit', ($this->view->accountData->account_otherGroupEdit) ? 'checked' : ''); + $this->view->assign('historyData', \SP\AccountHistory::getAccountList($this->getAccount()->getAccountParentId())); + $this->view->assign('isModified', ($this->view->accountData->account_dateEdit && $this->view->accountData->account_dateEdit <> '0000-00-00 00:00:00')); + $this->view->assign('maxFileSize', round(\SP\Config::getValue('files_allowed_size') / 1024, 1)); + $this->view->assign('filesAllowedExts', \SP\Config::getValue('files_allowed_exts')); + $this->view->assign('filesDelete', ($this->_action == Acl::ACTION_ACC_EDIT) ? 1 : 0); + } + + $this->view->assign('accountParentId', Session::getLastAcountId()); + $this->view->assign('categories', \SP\DB::getValuesForSelect('categories', 'category_id', 'category_name')); + $this->view->assign('customers', \SP\DB::getValuesForSelect('customers', 'customer_id', 'customer_name')); + $this->view->assign('otherUsers', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); + $this->view->assign('otherGroups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->getCustomFieldsForItem(); + } + + /** + * Establecer variables para los interfaces que muestran datos + */ + private function setShowData() + { + $this->view->assign('showHistory', (($this->_action == Acl::ACTION_ACC_VIEW || $this->_action == Acl::ACTION_ACC_VIEW_HISTORY) + && Acl::checkUserAccess(Acl::ACTION_ACC_VIEW_HISTORY) + && ($this->view->isModified || $this->_action == Acl::ACTION_ACC_VIEW_HISTORY))); + $this->view->assign('showDetails', ($this->_action == Acl::ACTION_ACC_VIEW || $this->_action == Acl::ACTION_ACC_VIEW_HISTORY || $this->_action == Acl::ACTION_ACC_DELETE)); + $this->view->assign('showPass', ($this->_action == Acl::ACTION_ACC_NEW || $this->_action == Acl::ACTION_ACC_COPY)); + $this->view->assign('showFiles', (($this->_action == Acl::ACTION_ACC_EDIT || $this->_action == Acl::ACTION_ACC_VIEW || $this->_action == Acl::ACTION_ACC_VIEW_HISTORY) + && (\SP\Util::fileIsEnabled() && Acl::checkUserAccess(Acl::ACTION_ACC_FILES)))); + $this->view->assign('showViewPass', (($this->_action == Acl::ACTION_ACC_VIEW || $this->_action == Acl::ACTION_ACC_VIEW_HISTORY) + && (Acl::checkAccountAccess(Acl::ACTION_ACC_VIEW_PASS, $this->_account->getAccountDataForACL()) + && Acl::checkUserAccess(Acl::ACTION_ACC_VIEW_PASS)))); + $this->view->assign('showSave', ($this->_action == Acl::ACTION_ACC_EDIT || $this->_action == Acl::ACTION_ACC_NEW || $this->_action == Acl::ACTION_ACC_COPY)); + $this->view->assign('showEdit', ($this->_action == Acl::ACTION_ACC_VIEW + && Acl::checkAccountAccess(Acl::ACTION_ACC_EDIT, $this->_account->getAccountDataForACL()) + && Acl::checkUserAccess(Acl::ACTION_ACC_EDIT) + && !$this->_account->getAccountIsHistory())); + $this->view->assign('showEditPass', ($this->_action == Acl::ACTION_ACC_EDIT || $this->_action == Acl::ACTION_ACC_VIEW + && Acl::checkAccountAccess(Acl::ACTION_ACC_EDIT_PASS, $this->_account->getAccountDataForACL()) + && Acl::checkUserAccess(Acl::ACTION_ACC_EDIT_PASS) + && !$this->_account->getAccountIsHistory())); + $this->view->assign('showDelete', ($this->_action == Acl::ACTION_ACC_DELETE || $this->_action == Acl::ACTION_ACC_EDIT + && Acl::checkAccountAccess(Acl::ACTION_ACC_DELETE, $this->_account->getAccountDataForACL()) + && Acl::checkUserAccess(Acl::ACTION_ACC_DELETE))); + $this->view->assign('showRestore', ($this->_action == Acl::ACTION_ACC_VIEW_HISTORY + && Acl::checkAccountAccess(Acl::ACTION_ACC_EDIT, $this->_account->getAccountDataForACL($this->_account->getAccountParentId())) + && Acl::checkUserAccess(Acl::ACTION_ACC_EDIT))); + } + + /** + * Obtener los datos para mostrar el interface para copiar cuenta + */ + public function getCopyAccount() + { + $this->setAction(self::ACTION_ACC_COPY); + + // Obtener los datos de la cuenta antes y comprobar el acceso + $isOk = ($this->setAccountData() && $this->checkAccess()); + + if (!$isOk) { + return; + } + + $this->view->addTemplate('account'); + $this->view->assign('title', + array( + 'class' => 'titleGreen', + 'name' => _('Copiar Cuenta'), + 'icon' => 'content_copy' + ) + ); + $this->view->assign('showform', true); + $this->view->assign('nextaction', self::ACTION_ACC_COPY); + + $this->setCommonData(); + $this->setShowData(); + } + + /** + * Establecer las variables que contienen la información de la cuenta. + * + * @return bool + */ + private function setAccountData() + { + try { + $this->setAccount(new Account()); + $this->_account->setAccountId($this->getId()); + $this->_account->setAccountParentId($this->getId()); + + $this->view->assign('accountId', $this->getId()); + $this->view->assign('accountData', $this->getAccount()->getAccountData()); + $this->view->assign('gotData', true); + + $this->setAccountDetails(); + $this->setGotData(true); + + Session::setLastAcountId($this->getId()); + } catch (SPException $e) { + return false; + } + return true; + } + + /** + * Establecer variables que contienen la información detallada de la cuenta. + */ + private function setAccountDetails() + { + $this->_account->setAccountUsersId(UserUtil::getUsersForAccount($this->getId())); + $this->_account->setAccountUserGroupsId(Groups::getGroupsForAccount($this->getId())); + } + + /** + * Obtener los datos para mostrar el interface para editar cuenta + */ + public function getEditAccount() + { + $this->setAction(self::ACTION_ACC_EDIT); + + // Obtener los datos de la cuenta antes y comprobar el acceso + $isOk = ($this->setAccountData() && $this->checkAccess()); + + if (!$isOk) { + return; + } + + $this->view->addTemplate('account'); + $this->view->assign('title', + array( + 'class' => 'titleOrange', + 'name' => _('Editar Cuenta'), + 'icon' => 'mode_edit' + ) + ); + $this->view->assign('showform', true); + $this->view->assign('nextaction', self::ACTION_ACC_VIEW); + + $this->setCommonData(); + $this->setShowData(); + } + + /** + * Obtener los datos para mostrar el interface de eliminar cuenta + */ + public function getDeleteAccount() + { + $this->setAction(self::ACTION_ACC_DELETE); + + // Obtener los datos de la cuenta antes y comprobar el acceso + $isOk = ($this->setAccountData() && $this->checkAccess()); + + if (!$isOk) { + return; + } + + $this->view->addTemplate('account'); + $this->view->assign('title', + array( + 'class' => 'titleRed', + 'name' => _('Eliminar Cuenta'), + 'icon' => 'delete' + ) + ); + $this->view->assign('showform', false); + + $this->setCommonData(); + $this->setShowData(); + } + + /** + * Obtener los datos para mostrar el interface para ver cuenta + */ + public function getViewAccount() + { + $this->setAction(self::ACTION_ACC_VIEW); + + // Obtener los datos de la cuenta antes y comprobar el acceso + $isOk = ($this->setAccountData() && $this->checkAccess()); + + if (!$isOk) { + return; + } + + $this->view->addTemplate('account'); + $this->view->assign('title', + array( + 'class' => 'titleNormal', + 'name' => _('Detalles de Cuenta'), + 'icon' => 'visibility' + ) + ); + $this->view->assign('showform', false); + + \SP\Session::setAccountParentId($this->getId()); + $this->_account->incrementViewCounter(); + + $this->setCommonData(); + $this->setShowData(); + } + + /** + * Obtener los datos para mostrar el interface para ver cuenta en fecha concreta + */ + public function getViewHistoryAccount() + { + $this->setAction(self::ACTION_ACC_VIEW_HISTORY); + + // Obtener los datos de la cuenta antes y comprobar el acceso + $isOk = ($this->setAccountDataHistory() && $this->checkAccess()); + + if (!$isOk) { + return; + } + + $this->view->addTemplate('account'); + $this->view->assign('title', + array( + 'class' => 'titleNormal', + 'name' => _('Detalles de Cuenta'), + 'icon' => 'access_time' + ) + ); + $this->view->assign('showform', false); + + $this->_account->setAccountIsHistory(1); + + $this->setCommonData(); + $this->setShowData(); + } + + /** + * Establecer las variables que contienen la información de la cuenta en una fecha concreta. + * + * @return bool + */ + private function setAccountDataHistory() + { + try { + $this->setAccount(new AccountHistory()); + $this->_account->setAccountId($this->getId()); + $this->_account->setAccountParentId(\SP\Session::getAccountParentId()); + + $this->view->assign('accountId', $this->getId()); + $this->view->assign('accountData', $this->getAccount()->getAccountData()); + $this->view->assign('gotData', true); + + $this->setAccountDetails(); + $this->setGotData(true); + + Session::setLastAcountId(\SP\Session::getAccountParentId()); + } catch (SPException $e) { + return false; + } + + return true; + } + + /** + * Obtener los datos para mostrar el interface para modificar la clave de cuenta + */ + public function getEditPassAccount() + { + $this->setAction(self::ACTION_ACC_EDIT_PASS); + + // Obtener los datos de la cuenta antes y comprobar el acceso + $isOk = ($this->setAccountData() && $this->checkAccess()); + + if (!$isOk) { + return; + } + + $this->view->addTemplate('editpass'); + $this->view->assign('title', + array( + 'class' => 'titleOrange', + 'name' => _('Modificar Clave de Cuenta'), + 'icon' => 'mode_edit' + ) + ); + $this->view->assign('nextaction', self::ACTION_ACC_VIEW); + } + + /** + * Obtener los datos para mostrar el interface de solicitud de cambios en una cuenta + */ + public function getRequestAccountAccess() + { + // Obtener los datos de la cuenta + $this->setAccountData(); + + $this->view->addTemplate('request'); + } + + /** + * Obtener la lista de campos personalizados y sus valores + */ + private function getCustomFieldsForItem() + { + // Se comprueba que hayan campos con valores para la cuenta actual + if($this->isGotData() && CustomFields::checkCustomFieldExists(ActionsInterface::ACTION_ACC_NEW, $this->_id)){ + $this->view->assign('customFields', CustomFields::getCustomFieldsData(ActionsInterface::ACTION_ACC_NEW, $this->_id)); + } else { + $this->view->assign('customFields', CustomFields::getCustomFieldsForModule(ActionsInterface::ACTION_ACC_NEW)); + } + } +} \ No newline at end of file diff --git a/web/AccountsMgmtC.class.php b/web/AccountsMgmtC.class.php new file mode 100644 index 00000000..7f1817d2 --- /dev/null +++ b/web/AccountsMgmtC.class.php @@ -0,0 +1,323 @@ +. + * + */ + +namespace SP\Controller; + +use SP\ApiTokens; +use SP\CustomFieldDef; +use SP\CustomFields; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Clase encargada de preparar la presentación de las vistas de gestión de cuentas + * + * @package Controller + */ +class AccountsMgmtC extends Controller implements ActionsInterface +{ + /** + * Máximo numero de acciones antes de agrupar + */ + const MAX_NUM_ACTIONS = 3; + /** + * @var int + */ + private $_module = 0; + + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + */ + public function __construct(\SP\Template $template = null) + { + parent::__construct($template); + + $this->view->assign('isDemo', \SP\Util::demoIsEnabled()); + $this->view->assign('sk', \SP\Common::getSessionKey()); + } + + /** + * Obtener los datos para la pestaña de categorías + */ + public function getCategories() + { + $this->setAction(self::ACTION_MGM_CATEGORIES); + + if (!$this->checkAccess()) { + return; + } + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + + $categoriesTableProp = array( + 'tblId' => 'tblCategories', + 'header' => '', + 'tblHeaders' => array(_('Nombre'), _('Descripción')), + 'tblRowSrc' => array('category_name', 'category_description'), + 'tblRowSrcId' => 'category_id', + 'onCloseAction' => self::ACTION_MGM, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_MGM_CATEGORIES_NEW, + 'title' => _('Nueva Categoría'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_CATEGORIES_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'icon' => 'add', + 'skip' => true + ), + 'edit' => array( + 'id' => self::ACTION_MGM_CATEGORIES_EDIT, + 'title' => _('Editar Categoría'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_CATEGORIES_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_MGM_CATEGORIES_DELETE, + 'title' => _('Eliminar Categoría'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_MGM_CATEGORIES_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $categoriesTableProp['cellWidth'] = floor(65 / count($categoriesTableProp['tblHeaders'])); + + $this->view->append( + 'tabs', + array( + 'title' => _('Gestión de Categorías'), + 'query' => \SP\Category::getCategories(), + 'props' => $categoriesTableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + } + + /** + * Obtener los datos para la pestaña de clientes + */ + public function getCustomers() + { + $this->setAction(self::ACTION_MGM_CUSTOMERS); + + if (!$this->checkAccess()) { + return; + } + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + + $customersTableProp = array( + 'tblId' => 'tblCustomers', + 'header' => '', + 'tblHeaders' => array(_('Nombre'), _('Descripción')), + 'tblRowSrc' => array('customer_name', 'customer_description'), + 'tblRowSrcId' => 'customer_id', + 'onCloseAction' => self::ACTION_MGM, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_MGM_CUSTOMERS_NEW, + 'title' => _('Nuevo Cliente'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_CUSTOMERS_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'skip' => true + ), + 'edit' => array( + 'id' => self::ACTION_MGM_CUSTOMERS_EDIT, + 'title' => _('Editar Cliente'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_CUSTOMERS_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_MGM_CUSTOMERS_DELETE, + 'title' => _('Eliminar Cliente'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_MGM_CUSTOMERS_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $customersTableProp['cellWidth'] = floor(65 / count($customersTableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Gestión de Clientes'), + 'query' => \SP\Customer::getCustomers(), + 'props' => $customersTableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + } + + /** + * Inicializar las plantillas para las pestañas + */ + public function useTabs() + { + $this->view->addTemplate('tabs-start'); + $this->view->addTemplate('mgmttabs'); + $this->view->addTemplate('tabs-end'); + + $this->view->assign('tabs', array()); + $this->view->assign('activeTab', 0); + $this->view->assign('maxNumActions', self::MAX_NUM_ACTIONS); + } + + /** + * Obtener los datos para la ficha de cliente + */ + public function getCustomer() + { + $this->_module = self::ACTION_MGM_CUSTOMERS; + $this->view->addTemplate('customers'); + + $this->view->assign('customer', \SP\Customer::getCustomerData($this->view->itemId)); + $this->getCustomFieldsForItem(); + } + + /** + * Obtener los datos para la ficha de categoría + */ + public function getCategory() + { + $this->_module = self::ACTION_MGM_CATEGORIES; + $this->view->addTemplate('categories'); + + $this->view->assign('category', \SP\Category::getCategoryData($this->view->itemId)); + $this->getCustomFieldsForItem(); + } + + /** + * Obtener la lista de campos personalizados y sus valores + */ + private function getCustomFieldsForItem() + { + // Se comprueba que hayan campos con valores para el elemento actual + if (!$this->view->isView && CustomFields::checkCustomFieldExists($this->_module, $this->view->itemId)) { + $this->view->assign('customFields', CustomFields::getCustomFieldsData($this->_module, $this->view->itemId)); + } else { + $this->view->assign('customFields', CustomFields::getCustomFieldsForModule($this->_module)); + } + } + + /** + * Obtener los datos para la vista de archivos de una cuenta + */ + public function getFiles() + { + $this->setAction(self::ACTION_ACC_FILES); + + $this->view->assign('accountId', \SP\Request::analyze('id', 0)); + $this->view->assign('deleteEnabled', \SP\Request::analyze('del', 0)); + $this->view->assign('files', \SP\Files::getFileList($this->view->accountId)); + + if (!is_array($this->view->files) || count($this->view->files) === 0) { + return; + } + + $this->view->addTemplate('files'); + + $this->view->assign('sk', \SP\Common::getSessionKey()); + } + + /** + * Obtener los datos para la pestaña de campos personalizados + */ + public function getCustomFields() + { + $this->setAction(self::ACTION_MGM_CUSTOMFIELDS); + + if (!$this->checkAccess()) { + return; + } + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + + $tableProp = array( + 'tblId' => 'tblCustomFields', + 'header' => '', + 'tblHeaders' => array(_('Módulo'), _('Nombre'), _('Tipo')), + 'tblRowSrc' => array('module', 'name', 'typeName'), + 'tblRowSrcId' => 'id', + 'onCloseAction' => self::ACTION_MGM, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_MGM_CUSTOMFIELDS_NEW, + 'title' => _('Nuevo Campo'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_CUSTOMFIELDS_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'skip' => true + ), + 'edit' => array( + 'id' => self::ACTION_MGM_CUSTOMFIELDS_EDIT, + 'title' => _('Editar Campo'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_CUSTOMFIELDS_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_MGM_CUSTOMFIELDS_DELETE, + 'title' => _('Eliminar Campo'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_MGM_CUSTOMFIELDS_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $tableProp['cellWidth'] = floor(65 / count($tableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Campos Personalizados'), + 'query' => \SP\CustomFieldDef::getCustomFields(), + 'props' => $tableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + } + + /** + * Obtener los datos para la ficha de campo personalizado + */ + public function getCustomField() + { + $this->view->addTemplate('customfields'); + + $customField = \SP\CustomFieldDef::getCustomFields($this->view->itemId, true); + $field = unserialize($customField->customfielddef_field); + + $this->view->assign('gotData', ($customField && $field instanceof CustomFieldDef)); + $this->view->assign('customField', $customField); + $this->view->assign('field', $field); + $this->view->assign('types', \SP\CustomFieldDef::getFieldsTypes()); + $this->view->assign('modules', \SP\CustomFieldDef::getFieldsModules()); + } +} diff --git a/web/ConfigC.class.php b/web/ConfigC.class.php new file mode 100644 index 00000000..2c5c0d21 --- /dev/null +++ b/web/ConfigC.class.php @@ -0,0 +1,338 @@ +. + * + */ + +namespace SP\Controller; + +use SP\Config; +use SP\Session; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Clase encargada de preparar la presentación de las opciones de configuración + * + * @package Controller + */ +class ConfigC extends Controller implements ActionsInterface +{ + private $_tabIndex = 0; + + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + */ + public function __construct(\SP\Template $template = null) + { + parent::__construct($template); + + $this->view->assign('tabs', array()); + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('isDemoMode', (\SP\Util::demoIsEnabled() && !Session::getUserIsAdminApp())); + $this->view->assign('isDisabled', (\SP\Util::demoIsEnabled() && !Session::getUserIsAdminApp()) ? 'DISABLED' : ''); + } + + /** + * Obtener la pestaña de configuración + * + * @return bool + */ + public function getGeneralTab() + { + $this->setAction(self::ACTION_CFG_GENERAL); + + if (!$this->checkAccess()) { + return; + } + + $themesAvailable = array(); + + $dirThemes = dir(VIEW_PATH); + + while (false !== ($theme = $dirThemes->read())) { + if($theme != '.' && $theme != '..') { + include VIEW_PATH . DIRECTORY_SEPARATOR . $theme . DIRECTORY_SEPARATOR . 'index.php'; + + $themesAvailable[$theme] = $themeInfo['name']; + } + } + + $dirThemes->close(); + + $this->view->addTemplate('config'); + + $this->view->assign('langsAvailable', + array( + 'Español' => 'es_ES', + 'English' => 'en_US', + 'Deutsch' => 'de_DE', + 'Magyar' => 'hu_HU', + 'Français' => 'fr_FR' + ) + ); + + $this->view->assign('currentLang', \SP\Config::getValue('sitelang')); + $this->view->assign('themesAvailable', $themesAvailable); + $this->view->assign('currentTheme', \SP\Config::getValue('sitetheme')); + $this->view->assign('chkLog', (\SP\Config::getValue('log_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkDebug', (\SP\Config::getValue('debug')) ? 'checked="checked"' : ''); + $this->view->assign('chkMaintenance', (\SP\Config::getValue('maintenance')) ? 'checked="checked"' : ''); + $this->view->assign('chkUpdates', (\SP\Config::getValue('checkupdates')) ? 'checked="checked"' : ''); + $this->view->assign('chkNotices', (\SP\Config::getValue('checknotices')) ? 'checked="checked"' : ''); + $this->view->assign('sessionTimeout', \SP\Config::getValue('session_timeout')); + + // Files + $this->view->assign('chkFiles', (\SP\Config::getValue('files_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('filesAllowedExts', \SP\Config::getValue('files_allowed_exts')); + $this->view->assign('filesAllowedSize', \SP\Config::getValue('files_allowed_size')); + + // Accounts + $this->view->assign('chkGlobalSearch', (\SP\Config::getValue('globalsearch')) ? 'checked="checked"' : ''); + $this->view->assign('chkResultsAsCards', (\SP\Config::getValue('resultsascards')) ? 'checked="checked"' : ''); + $this->view->assign('chkAccountPassToImage', (\SP\Config::getValue('account_passtoimage')) ? 'checked="checked"' : ''); + $this->view->assign('chkAccountLink', (\SP\Config::getValue('account_link')) ? 'checked="checked"' : ''); + $this->view->assign('accountCount', \SP\Config::getValue('account_count')); + + // Proxy + $this->view->assign('chkProxy', (\SP\Config::getValue('proxy_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('proxyServer', \SP\Config::getValue('proxy_server')); + $this->view->assign('proxyPort', \SP\Config::getValue('proxy_port')); + $this->view->assign('proxyUser', \SP\Config::getValue('proxy_user')); + $this->view->assign('proxyPass', \SP\Config::getValue('proxy_pass')); + + $this->view->assign('actionId', $this->getAction(), 'config'); + $this->view->append('tabs', array('title' => _('General'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'config'); + } + + /** + * Obtener la pestaña de encriptación + * + * @return bool + */ + public function getEncryptionTab() + { + $this->setAction(self::ACTION_CFG_ENCRYPTION); + + if (!$this->checkAccess()) { + return; + } + + $this->view->addTemplate('encryption'); + + $this->view->assign('lastUpdateMPass', \SP\Config::getConfigDbValue("lastupdatempass")); + $this->view->assign('tempMasterPassTime', \SP\Config::getConfigDbValue("tempmaster_passtime")); + $this->view->assign('tempMasterMaxTime', \SP\Config::getConfigDbValue("tempmaster_maxtime")); + + $this->view->append('tabs', array('title' => _('Encriptación'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'encryption'); + } + + /** + * Obtener la pestaña de copia de seguridad + * + * @return bool + */ + public function getBackupTab() + { + $this->setAction(self::ACTION_CFG_BACKUP); + + if (!$this->checkAccess()) { + return; + } + + $this->view->addTemplate('backup'); + + $this->view->assign('siteName', \SP\Util::getAppInfo('appname')); + $this->view->assign('backupDir', \SP\Init::$SERVERROOT . '/backup'); + $this->view->assign('backupPath', \SP\Init::$WEBROOT . '/backup'); + + $backupHash = Config::getValue('backup_hash'); + $exportHash = Config::getValue('export_hash'); + + $this->view->assign('backupFile', + array('absolute' => $this->view->backupDir . DIRECTORY_SEPARATOR . $this->view->siteName . '-' . $backupHash . '.tar.gz', + 'relative' => $this->view->backupPath . '/' . $this->view->siteName . '-' . $backupHash . '.tar.gz', + 'filename' => $this->view->siteName . '-' . $backupHash . '.tar.gz') + ); + $this->view->assign('backupDbFile', + array('absolute' => $this->view->backupDir . DIRECTORY_SEPARATOR . $this->view->siteName . '_db-' . $backupHash . '.sql', + 'relative' => $this->view->backupPath . '/' . $this->view->siteName . '_db-' . $backupHash . '.sql', + 'filename' => $this->view->siteName . '_db-' . $backupHash . '.sql') + ); + $this->view->assign('lastBackupTime', (file_exists($this->view->backupFile['absolute'])) ? _('Último backup') . ": " . date("r", filemtime($this->view->backupFile['absolute'])) : _('No se encontraron backups')); + + $this->view->assign('exportFile', + array('absolute' => $this->view->backupDir . DIRECTORY_SEPARATOR . $this->view->siteName . '-' . $exportHash . '.xml', + 'relative' => $this->view->backupPath . '/' . $this->view->siteName . '-' . $exportHash . '.xml', + 'filename' => $this->view->siteName . '-' . $exportHash . '.xml') + ); + $this->view->assign('lastExportTime', (file_exists($this->view->exportFile['absolute'])) ? _('Última exportación') . ': ' . date("r", filemtime($this->view->exportFile['absolute'])) : _('No se encontró archivo de exportación')); + + $this->view->append('tabs', array('title' => _('Copia de Seguridad'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'backup'); + } + + /** + * Obtener la pestaña de Importación + * + * @return bool + */ + public function getImportTab() + { + $this->setAction(self::ACTION_CFG_IMPORT); + + if (!$this->checkAccess()) { + return; + } + + $this->view->addTemplate('import'); + + $this->view->assign('groups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->view->assign('users', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); + + $this->view->append('tabs', array('title' => _('Importar Cuentas'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'import'); + } + + /** + * Obtener la pestaña de información + * @return bool + */ + public function getInfoTab() + { + $this->setAction(self::ACTION_CFG_GENERAL); + + if (!$this->checkAccess()) { + return; + } + + $this->view->addTemplate('info'); + + $this->view->assign('dbInfo', \SP\DB::getDBinfo()); + $this->view->assign('dbName', \SP\Config::getValue('dbname') . '@' . \SP\Config::getValue('dbhost')); + + $this->view->append('tabs', array('title' => _('Información'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'info'); + } + + /** + * Obtener la pestaña de Wiki + * @return bool + */ + public function getWikiTab() + { + $this->setAction(self::ACTION_CFG_WIKI); + + if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) { + return; + } + + $this->view->addTemplate('wiki'); + + $this->view->assign('chkWiki', (\SP\Config::getValue('wiki_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('wikiSearchUrl', \SP\Config::getValue('wiki_searchurl')); + $this->view->assign('wikiPageUrl', \SP\Config::getValue('wiki_pageurl')); + $this->view->assign('wikiFilter', \SP\Config::getValue('wiki_filter')); + + $this->view->assign('actionId', $this->getAction(), 'wiki'); + $this->view->append('tabs', array('title' => _('Wiki'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'wiki'); + } + + /** + * Obtener la pestaña de LDAP + * @return bool + */ + public function getLdapTab() + { + $this->setAction(self::ACTION_CFG_LDAP); + + if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) { + return; + } + + $this->view->addTemplate('ldap'); + + $this->view->assign('chkLdap', (\SP\Config::getValue('ldap_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkLdapADS', (\SP\Config::getValue('ldap_ads')) ? 'checked="checked"' : ''); + $this->view->assign('ldapIsAvailable', \SP\Util::ldapIsAvailable()); + $this->view->assign('ldapServer', \SP\Config::getValue('ldap_server')); + $this->view->assign('ldapBindUser', \SP\Config::getValue('ldap_binduser')); + $this->view->assign('ldapBindPass', \SP\Config::getValue('ldap_bindpass')); + $this->view->assign('ldapBase', \SP\Config::getValue('ldap_base')); + $this->view->assign('ldapGroup', \SP\Config::getValue('ldap_group')); + $this->view->assign('groups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->view->assign('profiles', \SP\DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); + $this->view->assign('ldapDefaultGroup', \SP\Config::getValue('ldap_defaultgroup')); + $this->view->assign('ldapDefaultProfile', \SP\Config::getValue('ldap_defaultprofile')); + + $this->view->assign('actionId', $this->getAction(), 'ldap'); + $this->view->append('tabs', array('title' => _('LDAP'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'ldap'); + } + + /** + * Obtener la pestaña de Correo + * @return bool + */ + public function getMailTab() + { + $this->setAction(self::ACTION_CFG_MAIL); + + if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) { + return; + } + + $this->view->addTemplate('mail'); + + $this->view->assign('chkMail', (\SP\Config::getValue('mail_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkMailRequests', (\SP\Config::getValue('mail_requestsenabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkMailAuth', (\SP\Config::getValue('mail_authenabled')) ? 'checked="checked"' : ''); + $this->view->assign('mailServer', \SP\Config::getValue('mail_server','localhost')); + $this->view->assign('mailPort', \SP\Config::getValue('mail_port',25)); + $this->view->assign('mailUser', \SP\Config::getValue('mail_user')); + $this->view->assign('mailPass', \SP\Config::getValue('mail_pass')); + $this->view->assign('currentMailSecurity', \SP\Config::getValue('mail_security')); + $this->view->assign('mailFrom', \SP\Config::getValue('mail_from')); + $this->view->assign('mailSecurity', array('SSL', 'TLS')); + + $this->view->assign('actionId', $this->getAction(), 'mail'); + $this->view->append('tabs', array('title' => _('Correo'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'mail'); + } + + /** + * Obtener el índice actual de las pestañas + * + * @return int + */ + private function getTabIndex(){ + $index = $this->_tabIndex; + $this->_tabIndex++; + + return $index; + } +} diff --git a/web/EventlogC.class.php b/web/EventlogC.class.php new file mode 100644 index 00000000..0e832286 --- /dev/null +++ b/web/EventlogC.class.php @@ -0,0 +1,99 @@ +. + * + */ + +namespace SP\Controller; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Clase encargada de preparar la presentación del registro de eventos + * + * @package Controller + */ +class EventlogC extends Controller implements ActionsInterface +{ + /** + * Número de máximo de registros por página + */ + const MAX_ROWS = 50; + + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + */ + public function __construct(\SP\Template $template = null) + { + parent::__construct($template); + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + } + + /** + * Obtener los datos para la presentación de la tabla de eventos + */ + public function getEventlog() + { + $this->setAction(self::ACTION_EVL); + + if (!$this->checkAccess()) { + return; + } + + + $this->view->addTemplate('eventlog'); + + $this->view->assign('rowClass', 'row_even'); + $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled() || !\SP\Session::getUserIsAdminApp()); // FIXME + $this->view->assign('limitStart', (isset($this->view->limitStart)) ? (int)$this->view->limitStart : 0); + $this->view->assign('events', \SP\Log::getEvents($this->view->limitStart)); + $this->view->assign('totalRows', \SP\Log::$numRows); + $this->view->assign('firstPage', ceil(($this->view->limitStart + 1) / self::MAX_ROWS)); + $this->view->assign('lastPage', ceil(\SP\Log::$numRows / self::MAX_ROWS)); + + $limitLast = (\SP\Log::$numRows % self::MAX_ROWS == 0) ? \SP\Log::$numRows - self::MAX_ROWS : floor(\SP\Log::$numRows / self::MAX_ROWS) * self::MAX_ROWS; + + $this->view->assign('pagerOnnClick', array( + 'first' => 'navLog(0,' . $this->view->limitStart . ')', + 'last' => 'navLog(' . $limitLast . ',' . $this->view->limitStart . ')', + 'prev' => 'navLog(' . ($this->view->limitStart - self::MAX_ROWS) . ',' . $this->view->limitStart . ')', + 'next' => 'navLog(' . ($this->view->limitStart + self::MAX_ROWS) . ',' . $this->view->limitStart . ')', + )); + } + + /** + * Comprobar si es necesario limpiar el registro de eventos + */ + public function checkClear() + { + if ($this->view->clear && $this->view->sk && \SP\Common::checkSessionKey($this->view->sk)) { + if (\SP\Log::clearEvents()) { + \SP\Common::printJSON(_('Registro de eventos vaciado'), 0, "sysPassUtil.Common.doAction(" . ActionsInterface::ACTION_EVL . "); sysPassUtil.Common.scrollUp();"); + } else { + \SP\Common::printJSON(_('Error al vaciar el registro de eventos')); + } + } + } +} \ No newline at end of file diff --git a/web/MainC.class.php b/web/MainC.class.php new file mode 100644 index 00000000..c46459e0 --- /dev/null +++ b/web/MainC.class.php @@ -0,0 +1,423 @@ +. + * + */ + +namespace SP\Controller; + +use SP\Init; +use SP\Installer; +use SP\Request; +use SP\Session; +use SP\SessionUtil; +use SP\SPException; +use SP\Util; + +/** + * Clase encargada de mostrar el interface principal de la aplicación + * e interfaces que requieren de un documento html completo + * + * @package Controller + */ +class MainC extends Controller implements ActionsInterface +{ + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + * @param null $page El nombre de página para la clase del body + * @param bool $initialize Si es una inicialización completa + */ + public function __construct(\SP\Template $template = null, $page = null, $initialize = true) + { + parent::__construct($template); + + if ($initialize) { + $this->view->assign('startTime', microtime()); + + $this->view->addTemplate('header'); + $this->view->addTemplate('body'); + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('appInfo', Util::getAppInfo()); + $this->view->assign('appVersion', Util::getVersionString()); + $this->view->assign('isDemoMode', Util::demoIsEnabled()); + $this->view->assign('page', $page); + $this->view->assign('loggedIn', \SP\Init::isLoggedIn()); + $this->view->assign('logoIcon', Init::$WEBURI . '/imgs/logo.png'); + $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo.svg'); + $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full.svg'); + $this->view->assign('httpsEnabled', Util::httpsEnabled()); + + // Cargar la clave pública en la sesión + SessionUtil::loadPublicKey(); + + $this->getHtmlHeader(); + $this->setResponseHeaders(); + } + } + + /** + * Obtener los datos para la cabcera de la página + */ + public function getHtmlHeader() + { + $cssVersionHash = md5(implode(Util::getVersion()) . Util::resultsCardsIsEnabled()); + $jsVersionHash = md5(implode(Util::getVersion())); + + $this->view->assign('cssLink', Init::$WEBROOT . '/css/css.php?v=' . $cssVersionHash); + $this->view->assign('jsLink', Init::$WEBROOT . '/js/js.php?v=' . $jsVersionHash); + } + + /** + * Establecer las cabeceras HTTP + */ + private function setResponseHeaders() + { + // UTF8 Headers + header("Content-Type: text/html; charset=UTF-8"); + + // Cache Control + header("Cache-Control: public, no-cache, max-age=0, must-revalidate"); + header("Pragma: public; max-age=0"); + } + + /** + * Obtener los datos para el interface principal de sysPass + * + * @param string $onLoad Las acciones a realizar en la carga de la página + */ + public function getMain($onLoad = null) + { + if (is_null($onLoad)) { + $onLoad = array('sysPassUtil.Common.doAction(' . self::ACTION_ACC_SEARCH . ')'); + + if (Session::getUserIsAdminApp() || Util::demoIsEnabled()) { + $onLoad[] = 'sysPassUtil.Common.checkUpds()'; + } + + $this->view->assign('onLoad', implode(';', $onLoad)); + } else { + $this->view->assign('onLoad', $onLoad); + } + + $this->getSessionBar(); + $this->getMenu(); + + $this->view->addTemplate('footer'); + } + + /** + * Obtener los datos para la mostrar la barra de sesión + */ + private function getSessionBar() + { + $this->view->addTemplate('sessionbar'); + + $this->view->assign('adminApp', (Session::getUserIsAdminApp()) ? '(A+)' : ''); + $this->view->assign('userId', Session::getUserId()); + $this->view->assign('userLogin', strtoupper(Session::getUserLogin())); + $this->view->assign('userName', (Session::getUserName()) ? Session::getUserName() : strtoupper($this->view->userLogin)); + $this->view->assign('userGroup', Session::getUserGroupName()); + $this->view->assign('showPassIcon', !Session::getUserIsLdap()); + } + + /** + * Obtener los datos para mostrar el menú de acciones + */ + private function getMenu() + { + $this->view->addTemplate('menu'); + + $this->view->assign('actions', array( + array( + 'name' => self::ACTION_ACC_SEARCH, + 'title' => _('Buscar'), + 'img' => 'search.png', + 'icon' => 'search', + 'checkaccess' => 0), + array( + 'name' => self::ACTION_ACC_NEW, + 'title' => _('Nueva Cuenta'), + 'img' => 'add.png', + 'icon' => 'add', + 'checkaccess' => 1), + array( + 'name' => self::ACTION_USR, + 'title' => _('Gestión de Usuarios'), + 'img' => 'users.png', + 'icon' => 'account_box', + 'checkaccess' => 1), + array( + 'name' => self::ACTION_MGM, + 'title' => _('Gestión de Clientes y Categorías'), + 'img' => 'appmgmt.png', + 'icon' => 'group_work', + 'checkaccess' => 1), + array( + 'name' => self::ACTION_CFG, + 'title' => _('Configuración'), + 'img' => 'config.png', + 'icon' => 'settings_applications', + 'checkaccess' => 1), + array( + 'name' => self::ACTION_EVL, + 'title' => _('Registro de Eventos'), + 'img' => 'log.png', + 'icon' => 'view_headline', + 'checkaccess' => 1) + )); + } + + /** + * Obtener los datos para el interface de login + */ + public function getLogin() + { + $this->view->addTemplate('login'); + $this->view->addTemplate('footer'); + + $this->view->assign('demoEnabled', Util::demoIsEnabled()); + $this->view->assign('mailEnabled', Util::mailIsEnabled()); + $this->view->assign('isLogout', Request::analyze('logout', false, true)); + $this->view->assign('updated', Init::$UPDATED === true); + $this->view->assign('newFeatures', array( + _('Nuevo estilo visual basado en Material Design Lite by Google'), + _('Usuarios en múltiples grupos'), + _('Previsualización de imágenes'), + _('Mostrar claves como imágenes'), + _('Campos personalizados'), + _('API de consultas'), + _('Autentificación en 2 pasos'), + _('Complejidad de generador de claves'), + _('Consultas especiales'), + _('Exportación a XML'), + _('Clave maestra temporal'), + _('Importación de cuentas desde sysPass, KeePass, KeePassX y CSV'), + _('Optimización del código y mayor rapidez de carga'), + _('Mejoras de seguridad en XSS e inyección SQL') + )); + + // Comprobar y parsear los parámetros GET para pasarlos como POST en los inputs + $this->view->assign('getParams'); + + if (count($_GET) > 0) { + foreach ($_GET as $param => $value) { + $getParams['g_' . \SP\Html::sanitize($param)] = \SP\Html::sanitize($value); + } + + $this->view->assign('getParams', $getParams); + } + } + + /** + * Obtener los datos para el interface del instalador + */ + public function getInstaller() + { + $this->view->addTemplate('install'); + $this->view->addTemplate('js-common'); + $this->view->addTemplate('footer'); + + $this->view->assign('modulesErrors', Util::checkModules()); + $this->view->assign('versionErrors', Util::checkPhpVersion()); + $this->view->assign('securityErrors', array()); + $this->view->assign('resInstall', array()); + $this->view->assign('isCompleted', false); + $this->view->assign('version', \SP\Util::getVersionString()); + $this->view->assign('adminlogin', Request::analyze('adminlogin', 'admin')); + $this->view->assign('adminpass', Request::analyze('adminpass', '', false, false, false)); + $this->view->assign('masterpassword', Request::analyze('masterpassword', '', false, false, false)); + $this->view->assign('dbuser', Request::analyze('dbuser', 'root')); + $this->view->assign('dbpass', Request::analyze('dbpass', '', false, false, false)); + $this->view->assign('dbname', Request::analyze('dbname', 'syspass')); + $this->view->assign('dbhost', Request::analyze('dbhost', 'localhost')); + $this->view->assign('hostingmode', Request::analyze('hostingmode', false)); + + if (@file_exists(__FILE__ . "\0Nullbyte")) { + $this->view->append('securityErrors', array( + 'type' => SPException::SP_WARNING, + 'description' => _('La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)'), + 'hint' => _('Actualice la versión de PHP para usar sysPass de forma segura')) + ); + } + + if (!Util::secureRNG_available()) { + $this->view->append('securityErrors', array( + 'type' => SPException::SP_WARNING, + 'description' => _('No se encuentra el generador de números aleatorios.'), + 'hint' => _('Sin esta función un atacante puede utilizar su cuenta al resetear la clave')) + ); + } + + if (Request::analyze('install', false)) { + + try { + // Desencriptar con la clave RSA + $CryptPKI = new \SP\CryptPKI(); + $clearAdminPass = $CryptPKI->decryptRSA(base64_decode($this->view->adminpass)); + $clearMasterPassword = $CryptPKI->decryptRSA(base64_decode($this->view->masterpassword)); + $clearDbPass = $CryptPKI->decryptRSA(base64_decode($this->view->dbpass)); + } catch (\Exception $e) { + $this->view->append('errors', array( + 'type' => SPException::SP_CRITICAL, + 'description' => _('Error en clave RSA'), + 'hint' => $e->getMessage() + )); + return false; + } + + Installer::setUsername($this->view->adminlogin); + Installer::setPassword($clearAdminPass); + Installer::setMasterPassword($clearMasterPassword); + Installer::setDbuser($this->view->dbuser); + Installer::setDbpass($clearDbPass); + Installer::setDbname($this->view->dbname); + Installer::setDbhost($this->view->dbhost); + Installer::setIsHostingMode($this->view->hostingmode); + + $this->view->assign('resInstall', Installer::install()); + + if (count($this->view->resInstall) == 0) { + $this->view->append('errors', array( + 'type' => SPException::SP_OK, + 'description' => _('Instalación finalizada'), + 'hint' => _('Pulse aquí para acceder') + )); + $this->view->assign('isCompleted', true); + return true; + } + } + + $this->view->assign('errors', array_merge($this->view->modulesErrors, $this->view->securityErrors, $this->view->resInstall)); + } + + /** + * Obtener los datos para el interface de error + * + * @param bool $showLogo mostrar el logo de sysPass + */ + public function getError($showLogo = false) + { + $this->view->addTemplate('error'); + $this->view->addTemplate('footer'); + + $this->view->assign('showLogo', $showLogo); + } + + /** + * Obtener los datos para el interface de restablecimiento de clave de usuario + */ + public function getPassReset() + { + if (Util::mailIsEnabled() || Request::analyze('f', 0) === 1) { + $this->view->addTemplate('passreset'); + + $this->view->assign('action', Request::analyze('a')); + $this->view->assign('hash', Request::analyze('h')); + $this->view->assign('time', Request::analyze('t')); + + $this->view->assign('passReset', ($this->view->action === 'passreset' && $this->view->hash && $this->view->time)); + } else { + $this->view->assign('showLogo', true); + + $this->showError(self::ERR_UNAVAILABLE, false); + } + + $this->view->addTemplate('footer'); + } + + /** + * Obtener los datos para el interface de actualización de BD + */ + public function getUpgrade() + { + $this->view->addTemplate('upgrade'); + $this->view->addTemplate('footer'); + + $this->view->assign('action', Request::analyze('a')); + $this->view->assign('time', Request::analyze('t')); + $this->view->assign('upgrade', $this->view->action === 'upgrade'); + } + + /** + * Obtener los datos para el interface de autentificación en 2 pasos + */ + public function get2FA() + { + if (Request::analyze('f', 0) === 1) { + $this->view->addTemplate('2fa'); + + $this->view->assign('action', Request::analyze('a')); + $this->view->assign('userId', Request::analyze('i')); + $this->view->assign('time', Request::analyze('t')); + } else { + $this->view->assign('showLogo', true); + + $this->showError(self::ERR_UNAVAILABLE, false); + } + + $this->view->addTemplate('footer'); + + } + + /** + * Obtener los datos para el interface de comprobación de actualizaciones + */ + public function getCheckUpdates() + { + $updates = \SP\Util::checkUpdates(); + + $this->view->addTemplate('update'); + + if (is_array($updates)) { + $description = nl2br($updates['description']); + $version = $updates['version']; + + $this->view->assign('hasUpdates', true); + $this->view->assign('title', $updates['title']); + $this->view->assign('url', $updates['url']); + $this->view->assign('description', sprintf('%s - %s

            %s', _('Descargar nueva versión'), $version, $description)); + } else { + $this->view->assign('hasUpdates', false); + $this->view->assign('status', $updates); + } + + $notices = \SP\Util::checkNotices(); + $numNotices = count($notices); + $noticesTitle = ''; + + if ($notices !== false && $numNotices > 0) { + $noticesTitle = sprintf('%s

            ', _('Avisos de sysPass')); + + foreach ($notices as $notice) { + $noticesTitle .= sprintf('%s
            ', $notice[0]); + } + + } + + $this->view->assign('numNotices', $numNotices); + $this->view->assign('noticesTitle', $noticesTitle); + + } +} \ No newline at end of file diff --git a/web/SearchC.class.php b/web/SearchC.class.php new file mode 100644 index 00000000..3153d746 --- /dev/null +++ b/web/SearchC.class.php @@ -0,0 +1,300 @@ +. + * + */ + +namespace SP\Controller; + +use SP\UserUtil; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Clase encargada de obtener los datos para presentar la búsqueda + * + * @package Controller + */ +class SearchC extends Controller implements ActionsInterface +{ + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + */ + public function __construct(\SP\Template $template = null) + { + parent::__construct($template); + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->setVars(); + } + + /** + * Establecer las variables necesarias para las plantillas + */ + private function setVars() + { + $this->view->assign('isAdmin', (\SP\Session::getUserIsAdminApp() || \SP\Session::getUserIsAdminAcc())); + $this->view->assign('showGlobalSearch', \SP\Config::getValue('globalsearch', false)); + + // Comprobar si está creado el objeto de búsqueda en la sesión + if (!is_object(\SP\Session::getSearchFilters())) { + \SP\Session::setSearchFilters(new \SP\AccountSearch()); + } + + // Obtener el filtro de búsqueda desde la sesión + $filters = \SP\Session::getSearchFilters(); + + // Valores POST + $this->view->assign('searchKey', \SP\Request::analyze('skey', $filters->getSortKey())); + $this->view->assign('searchOrder', \SP\Request::analyze('sorder', $filters->getSortOrder())); + $this->view->assign('searchCustomer', \SP\Request::analyze('customer', $filters->getCustomerId())); + $this->view->assign('searchCategory', \SP\Request::analyze('category', $filters->getCategoryId())); + $this->view->assign('searchTxt', \SP\Request::analyze('search', $filters->getTxtSearch())); + $this->view->assign('searchGlobal', \SP\Request::analyze('gsearch', $filters->getGlobalSearch())); + $this->view->assign('limitStart', \SP\Request::analyze('start', $filters->getLimitStart())); + $this->view->assign('limitCount', \SP\Request::analyze('rpp', $filters->getLimitCount())); + } + + /** + * Obtener los datos para la caja de búsqueda + */ + public function getSearchBox() + { + $this->view->addTemplate('searchbox'); + + $this->view->assign('customers', \SP\DB::getValuesForSelect('customers', 'customer_id', 'customer_name')); + $this->view->assign('categories', \SP\DB::getValuesForSelect('categories', 'category_id', 'category_name')); + } + + /** + * Obtener los resultados de una búsqueda + */ + public function getSearch() + { + $this->view->addTemplate('search'); + + $this->view->assign('queryTimeStart', microtime()); + + $search = new \SP\AccountSearch(); + + $search->setGlobalSearch($this->view->searchGlobal); + $search->setTxtSearch($this->view->searchTxt); + $search->setCategoryId($this->view->searchCategory); + $search->setCustomerId($this->view->searchCustomer); + $search->setSortKey($this->view->searchKey); + $search->setSortOrder($this->view->searchOrder); + $search->setLimitStart($this->view->limitStart); + $search->setLimitCount($this->view->limitCount); + + $resQuery = $search->getAccounts(); + + if (!$resQuery) { + $this->view->assign('accounts', false); + return; + } + + $this->processSearchResults($resQuery); + } + + /** + * Procesar los resultados de la búsqueda y crear la variable que contiene los datos de cada cuenta + * a mostrar. + * + * @param &$results array Con los resultados de la búsqueda + */ + private function processSearchResults(&$results) + { + + // Variables para la barra de navegación + $this->view->assign('firstPage', ceil(($this->view->limitStart + 1) / $this->view->limitCount)); + $this->view->assign('lastPage', ceil(\SP\AccountSearch::$queryNumRows / $this->view->limitCount)); + $this->view->assign('totalRows', \SP\AccountSearch::$queryNumRows); + $this->view->assign('filterOn', ($this->view->searchKey > 1 || $this->view->searchCustomer || $this->view->searchCategory || $this->view->searchTxt) ? true : false); + + $limitLast = ((\SP\AccountSearch::$queryNumRows % $this->view->limitCount) == 0) ? \SP\AccountSearch::$queryNumRows - $this->view->limitCount : floor(\SP\AccountSearch::$queryNumRows / $this->view->limitCount) * $this->view->limitCount; + + $this->view->assign('pagerOnnClick', array( + 'first' => 'sysPassUtil.Common.searchSort(' . $this->view->searchKey . ', 0,1)', + 'last' => 'sysPassUtil.Common.searchSort(' . $this->view->searchKey . ',' . $limitLast . ',1)', + 'prev' => 'sysPassUtil.Common.searchSort(' . $this->view->searchKey . ',' . ($this->view->limitStart - $this->view->limitCount) . ',1)', + 'next' => 'sysPassUtil.Common.searchSort(' . $this->view->searchKey . ',' . ($this->view->limitStart + $this->view->limitCount) . ',1)', + )); + + // Variables de configuración + $this->view->assign('accountLink', \SP\Config::getValue('account_link', 0)); + $this->view->assign('requestEnabled', \SP\Util::mailrequestIsEnabled()); + $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled()); + $maxTextLength = (\SP\Util::resultsCardsIsEnabled()) ? 40 : 60; + + $wikiEnabled = \SP\Util::wikiIsEnabled(); + + if ($wikiEnabled) { + $wikiSearchUrl = \SP\Config::getValue('wiki_searchurl', false); + $this->view->assign('wikiFilter', explode(',', \SP\Config::getValue('wiki_filter'))); + $this->view->assign('wikiPageUrl', \SP\Config::getValue('wiki_pageurl')); + } + + $colors = array( + '2196F3', + '03A9F4', + '00BCD4', + '009688', + '4CAF50', + '8BC34A', + 'CDDC39', + 'FFC107', + '795548', + '607D8B', + '9E9E9E', + 'FF5722', + 'F44336', + 'E91E63', + '9C27B0', + '673AB7', + '3F51B5', + ); + + $this->setSortFields(); + + $objAccount = new \SP\Account(); + + foreach ($results as $account) { + $objAccount->setAccountId($account->account_id); + $objAccount->setAccountUserId($account->account_userId); + $objAccount->setAccountUserGroupId($account->account_userGroupId); + $objAccount->setAccountOtherUserEdit($account->account_otherUserEdit); + $objAccount->setAccountOtherGroupEdit($account->account_otherGroupEdit); + + // Obtener los datos de la cuenta para aplicar las ACL + $accountAclData = $objAccount->getAccountDataForACL(); + + // Establecer los permisos de acceso + $accView = (\SP\Acl::checkAccountAccess(self::ACTION_ACC_VIEW, $accountAclData) && \SP\Acl::checkUserAccess(self::ACTION_ACC_VIEW)); + $accViewPass = (\SP\Acl::checkAccountAccess(self::ACTION_ACC_VIEW_PASS, $accountAclData) && \SP\Acl::checkUserAccess(self::ACTION_ACC_VIEW_PASS)); + $accEdit = (\SP\Acl::checkAccountAccess(self::ACTION_ACC_EDIT, $accountAclData) && \SP\Acl::checkUserAccess(self::ACTION_ACC_EDIT)); + $accCopy = (\SP\Acl::checkAccountAccess(self::ACTION_ACC_COPY, $accountAclData) && \SP\Acl::checkUserAccess(self::ACTION_ACC_COPY)); + $accDel = (\SP\Acl::checkAccountAccess(self::ACTION_ACC_DELETE, $accountAclData) && \SP\Acl::checkUserAccess(self::ACTION_ACC_DELETE)); + + $show = ($accView || $accViewPass || $accEdit || $accCopy || $accDel); + + // Se asigna el color de forma aleatoria a cada cliente + $color = array_rand($colors); + + if (!isset($customerColor) || !array_key_exists($account->account_customerId, $customerColor)) { + $customerColor[$account->account_customerId] = '#' . $colors[$color]; + } + + $hexColor = $customerColor[$account->account_customerId]; + + // Obtenemos datos si el usuario tiene acceso a los datos de la cuenta + if ($show) { + $secondaryGroups = \SP\Groups::getGroupsNameForAccount($account->account_id); + $secondaryUsers = UserUtil::getUsersNameForAccount($account->account_id); + + $secondaryAccesses = '(G) ' . $account->usergroup_name . '*
            '; + + if ($secondaryGroups) { + foreach ($secondaryGroups as $group) { + $secondaryAccesses .= '(G) ' . $group . '
            '; + } + } + + if ($secondaryUsers) { + foreach ($secondaryUsers as $user) { + $secondaryAccesses .= '(U) ' . $user . '
            '; + } + } + + $accountNotes = ''; + + if ($account->account_notes) { + $accountNotes = (strlen($account->account_notes) > 300) ? substr($account->account_notes, 0, 300) . "..." : $account->account_notes; + $accountNotes = nl2br(wordwrap(htmlspecialchars($accountNotes), 50, '
            ', true)); + } + } + + // Variable $accounts de la plantilla utilizada para obtener los datos de las cuentas + $this->view->append('accounts', array( + 'id' => $account->account_id, + 'name' => $account->account_name, + 'login' => \SP\Html::truncate($account->account_login, $maxTextLength), + 'category_name' => $account->category_name, + 'customer_name' => \SP\Html::truncate($account->customer_name, $maxTextLength), + 'customer_link' => ($wikiEnabled) ? $wikiSearchUrl . $account->customer_name : '', + 'color' => $hexColor, + 'url' => $account->account_url, + 'url_short' => \SP\Html::truncate($account->account_url, $maxTextLength), + 'url_islink' => (preg_match("#^https?://.*#i", $account->account_url)) ? true : false, + 'notes' => $accountNotes, + 'accesses' => (isset($secondaryAccesses)) ? $secondaryAccesses : '', + 'numFiles' => (\SP\Util::fileIsEnabled()) ? $account->num_files : 0, + 'show' => $show, + 'showView' => $accView, + 'showViewPass' => $accViewPass, + 'showEdit' => $accEdit, + 'showCopy' => $accCopy, + 'showDel' => $accDel, + )); + } + } + + /** + * Establecer los campos de ordenación + */ + private function setSortFields() + { + $this->view->assign('sortFields', array( + array( + 'key' => \SP\AccountSearch::SORT_CUSTOMER, + 'title' => _('Ordenar por Cliente'), + 'name' => _('Cliente'), + 'function' => 'sysPassUtil.Common.searchSort(' . \SP\AccountSearch::SORT_CUSTOMER . ',' . $this->view->limitStart . ')' + ), + array( + 'key' => \SP\AccountSearch::SORT_NAME, + 'title' => _('Ordenar por Nombre'), + 'name' => _('Nombre'), + 'function' => 'sysPassUtil.Common.searchSort(' . \SP\AccountSearch::SORT_NAME . ',' . $this->view->limitStart . ')' + ), + array( + 'key' => \SP\AccountSearch::SORT_CATEGORY, + 'title' => _('Ordenar por Categoría'), + 'name' => _('Categoría'), + 'function' => 'sysPassUtil.Common.searchSort(' . \SP\AccountSearch::SORT_CATEGORY . ',' . $this->view->limitStart . ')' + ), + array( + 'key' => \SP\AccountSearch::SORT_LOGIN, + 'title' => _('Ordenar por Usuario'), + 'name' => _('Usuario'), + 'function' => 'sysPassUtil.Common.searchSort(' . \SP\AccountSearch::SORT_LOGIN . ',' . $this->view->limitStart . ')' + ), + array( + 'key' => \SP\AccountSearch::SORT_URL, + 'title' => _('Ordenar por URL / IP'), + 'name' => _('URL / IP'), + 'function' => 'sysPassUtil.Common.searchSort(' . \SP\AccountSearch::SORT_URL . ',' . $this->view->limitStart . ')' + ) + )); + } +} \ No newline at end of file diff --git a/web/UsersMgmtC.class.php b/web/UsersMgmtC.class.php new file mode 100644 index 00000000..a38242fa --- /dev/null +++ b/web/UsersMgmtC.class.php @@ -0,0 +1,473 @@ +. + * + */ + +namespace SP\Controller; + +use SP\Common; +use SP\CustomFields; +use SP\DB; +use SP\Groups; +use SP\Log; +use SP\Profile; +use SP\Session; +use SP\Template; +use SP\UserUtil; +use SP\Util; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Clase encargada de de preparar la presentación de las vistas de gestión de usuarios + * + * @package Controller + */ +class UsersMgmtC extends Controller implements ActionsInterface +{ + /** + * Máximo numero de acciones antes de agrupar + */ + const MAX_NUM_ACTIONS = 3; + /** + * @var int + */ + private $_module = 0; + + /** + * Constructor + * + * @param $template Template con instancia de plantilla + */ + public function __construct(Template $template = null) + { + parent::__construct($template); + + $this->view->assign('isDemo', Util::demoIsEnabled()); + $this->view->assign('sk', Common::getSessionKey()); + } + + /** + * Obtener los datos para la pestaña de usuarios + */ + public function getUsersList() + { + $this->setAction(self::ACTION_USR_USERS); + + $this->view->assign('sk', Common::getSessionKey(true)); + + if (!$this->checkAccess()) { + return; + } + + $arrUsersTableProp = array( + 'tblId' => 'tblUsers', + 'header' => '', + 'tblHeaders' => array( + _('Nombre'), + _('Login'), + _('Perfil'), + _('Grupo'), + _('Propiedades')), + 'tblRowSrc' => array( + 'user_name', + 'user_login', + 'userprofile_name', + 'usergroup_name', + 'images' => array( + 'user_isAdminApp' => array( + 'img_file' => 'check_blue.png', + 'img_title' => _('Admin Aplicación'), + 'icon' => 'star'), + 'user_isAdminAcc' => array( + 'img_file' => 'check_orange.png', + 'img_title' => _('Admin Cuentas'), + 'icon' => 'star_half'), + 'user_isLdap' => array( + 'img_file' => 'ldap.png', + 'img_title' => _('Usuario de LDAP'), + 'icon' => 'business'), + 'user_isDisabled' => array( + 'img_file' => 'disabled.png', + 'img_title' => _('Deshabilitado'), + 'icon' => 'error') + ) + ), + 'tblRowSrcId' => 'user_id', + 'onCloseAction' => self::ACTION_USR, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_USR_USERS_NEW, + 'title' => _('Nuevo Usuario'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_USERS_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'icon' => 'add', + 'skip' => true + ), + 'view' => array( + 'id' => self::ACTION_USR_USERS_VIEW, + 'title' => _('Ver Detalles de Usuario'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_USERS_VIEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/view.png', + 'icon' => 'visibility' + ), + 'edit' => array( + 'id' => self::ACTION_USR_USERS_EDIT, + 'title' => _('Editar Usuario'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_USERS_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'pass' => array( + 'id' => self::ACTION_USR_USERS_EDITPASS, + 'title' => _('Cambiar Clave de Usuario'), + 'onclick' => 'sysPassUtil.Common.usrUpdPass(this,' . self::ACTION_USR_USERS_EDITPASS . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/key.png', + 'icon' => 'lock_outline' + ), + 'del' => array( + 'id' => self::ACTION_USR_USERS_DELETE, + 'title' => _('Eliminar Usuario'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_USR_USERS_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ), + ) + ); + + $arrUsersTableProp['cellWidth'] = floor(65 / count($arrUsersTableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Gestión de Usuarios'), + 'query' => UserUtil::getUsers(), + 'props' => $arrUsersTableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + + } + + /** + * Obtener los datos para la pestaña de grupos + */ + public function getGroupsList() + { + $this->setAction(self::ACTION_USR_GROUPS); + + $this->view->assign('sk', Common::getSessionKey(true)); + + if (!$this->checkAccess()) { + return; + } + + $arrGroupsTableProp = array( + 'tblId' => 'tblGroups', + 'header' => '', + 'tblHeaders' => array(_('Nombre'), _('Descripción')), + 'tblRowSrc' => array('usergroup_name', 'usergroup_description'), + 'tblRowSrcId' => 'usergroup_id', + 'onCloseAction' => self::ACTION_USR, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_USR_GROUPS_NEW, + 'title' => _('Nuevo Grupo'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_GROUPS_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'icon' => 'add', + 'skip' => true + ), + 'edit' => array( + 'id' => self::ACTION_USR_GROUPS_EDIT, + 'title' => _('Editar Grupo'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_GROUPS_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_USR_GROUPS_DELETE, + 'title' => _('Eliminar Grupo'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_USR_GROUPS_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $arrGroupsTableProp['cellWidth'] = floor(65 / count($arrGroupsTableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Gestión de Grupos'), + 'query' => Groups::getGroups(), + 'props' => $arrGroupsTableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + } + + /** + * Obtener los datos para la pestaña de perfiles + */ + public function getProfilesList() + { + $this->setAction(self::ACTION_USR_PROFILES); + + $this->view->assign('sk', Common::getSessionKey(true)); + + if (!$this->checkAccess()) { + return; + } + + $arrProfilesTableProp = array( + 'tblId' => 'tblProfiles', + 'header' => '', + 'tblHeaders' => array(_('Nombre')), + 'tblRowSrc' => array('userprofile_name'), + 'tblRowSrcId' => 'userprofile_id', + 'onCloseAction' => self::ACTION_USR, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_USR_PROFILES_NEW, + 'title' => _('Nuevo Perfil'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_PROFILES_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'icon' => 'add', + 'skip' => true + ), + 'view' => array( + 'id' => self::ACTION_USR_PROFILES_VIEW, + 'title' => _('Ver Detalles de Perfil'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_PROFILES_VIEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/view.png', + 'icon' => 'visibility' + ), + 'edit' => array( + 'id' => self::ACTION_USR_PROFILES_EDIT, + 'title' => _('Editar Perfil'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_USR_PROFILES_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_USR_PROFILES_DELETE, + 'title' => _('Eliminar Perfil'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_USR_PROFILES_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $arrProfilesTableProp['cellWidth'] = floor(65 / count($arrProfilesTableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Gestión de Perfiles'), + 'query' => Profile::getProfiles(), + 'props' => $arrProfilesTableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5) + ) + ); + } + + /** + * Inicializar las plantillas para las pestañas + */ + public function useTabs() + { + $this->view->addTemplate('tabs-start'); + $this->view->addTemplate('mgmttabs'); + $this->view->addTemplate('tabs-end'); + + $this->view->assign('tabs', array()); + $this->view->assign('activeTab', 0); + $this->view->assign('maxNumActions', self::MAX_NUM_ACTIONS); + } + + /** + * Obtener los datos para la ficha de usuario + */ + public function getUser() + { + $this->_module = self::ACTION_USR_USERS; + $this->view->addTemplate('users'); + + $this->view->assign('isDisabled', ($this->view->isDemo || $this->view->actionId === self::ACTION_USR_USERS_VIEW) ? 'disabled' : ''); + $this->view->assign('user', UserUtil::getUserData($this->view->itemId)); + $this->view->assign('groups', DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->view->assign('profiles', DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); + $this->view->assign('ro', ($this->view->user['checks']['user_isLdap']) ? 'READONLY' : ''); + + $this->getCustomFieldsForItem(); + } + + /** + * Obtener los datos para la ficha de grupo + */ + public function getGroup() + { + $this->_module = self::ACTION_USR_GROUPS; + $this->view->addTemplate('groups'); + + $this->view->assign('group', Groups::getGroupData($this->view->itemId)); + $this->view->assign('users', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); + $this->view->assign('groupUsers', \SP\Groups::getUsersForGroup($this->view->itemId)); + + $this->getCustomFieldsForItem(); + } + + /** + * Obtener los datos para la ficha de perfil + */ + public function getProfile() + { + $this->view->addTemplate('profiles'); + + $profile = ($this->view->itemId) ? Profile::getProfile($this->view->itemId) : new Profile(); + + $this->view->assign('profile', $profile); + $this->view->assign('isDisabled', ($this->view->actionId === self::ACTION_USR_PROFILES_VIEW) ? 'disabled' : ''); + + if ($this->view->isView === true) { + $this->view->assign('usedBy', Profile::getProfileInUsersName($this->view->itemId)); + } + } + + /** + * Inicializar la vista de cambio de clave de usuario + */ + public function getUserPass() + { + $this->setAction(self::ACTION_USR_USERS_EDITPASS); + + // Comprobar si el usuario a modificar es distinto al de la sesión + if ($this->view->userId != Session::getUserId() && !$this->checkAccess()) { + return; + } + + $this->view->addTemplate('userspass'); + + $this->view->assign('actionId', self::ACTION_USR_USERS_EDITPASS); + + // Obtener de nuevo el token de seguridad por si se habñia regenerado antes + $this->view->assign('sk', Common::getSessionKey()); + } + + /** + * Obtener los datos para la pestaña de tokens de API + */ + public function getAPITokensList() + { + $this->setAction(self::ACTION_MGM_APITOKENS); + + if (!$this->checkAccess()) { + return; + } + + $tokensTableProp = array( + 'tblId' => 'tblTokens', + 'header' => '', + 'tblHeaders' => array(_('Usuario'), _('Acción')), + 'tblRowSrc' => array('user_login', 'authtoken_actionId'), + 'tblRowSrcId' => 'authtoken_id', + 'onCloseAction' => self::ACTION_USR, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_MGM_APITOKENS_NEW, + 'title' => _('Nueva Autorización'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_APITOKENS_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'icon' => 'add', + 'skip' => true + ), + 'view' => array( + 'id' => self::ACTION_MGM_APITOKENS_VIEW, + 'title' => _('Ver token de Autorización'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_APITOKENS_VIEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/view.png', + 'icon' => 'visibility' + ), + 'edit' => array( + 'id' => self::ACTION_MGM_APITOKENS_EDIT, + 'title' => _('Editar Autorización'), + 'onclick' => 'sysPassUtil.Common.appMgmtData(this,' . self::ACTION_MGM_APITOKENS_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_MGM_APITOKENS_DELETE, + 'title' => _('Eliminar Autorización'), + 'onclick' => 'sysPassUtil.Common.appMgmtDelete(this,' . self::ACTION_MGM_APITOKENS_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $tokensTableProp['cellWidth'] = floor(65 / count($tokensTableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Gestión de Autorizaciones API'), + 'query' => \SP\ApiTokens::getTokens(), + 'props' => $tokensTableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + } + + /** + * Obtener los datos para la ficha de tokens de API + */ + public function getToken() + { + $this->view->addTemplate('tokens'); + + $token = \SP\ApiTokens::getTokens($this->view->itemId, true); + + $this->view->assign('users', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); + $this->view->assign('actions', \SP\ApiTokens::getTokenActions()); + $this->view->assign('token', $token); + $this->view->assign('gotData', is_object($token)); + + if ($this->view->isView === true) { + $msg = sprintf('%s ;;Usuario: %s', _('Token de autorización visualizado'), $token->user_login); + Log::writeNewLogAndEmail(_('Autorizaciones'), $msg); + } + } + + /** + * Obtener la lista de campos personalizados y sus valores + */ + private function getCustomFieldsForItem() + { + // Se comprueba que hayan campos con valores para el elemento actual + if (!$this->view->isView && CustomFields::checkCustomFieldExists($this->_module, $this->view->itemId)) { + $this->view->assign('customFields', CustomFields::getCustomFieldsData($this->_module, $this->view->itemId)); + } else { + $this->view->assign('customFields', CustomFields::getCustomFieldsForModule($this->_module)); + } + } +} \ No newline at end of file diff --git a/web/UsersPrefsC.class.php b/web/UsersPrefsC.class.php new file mode 100644 index 00000000..04c6ff45 --- /dev/null +++ b/web/UsersPrefsC.class.php @@ -0,0 +1,100 @@ +. + * + */ + +namespace SP\Controller; + +use SP\Auth\Auth2FA; +use SP\Session; +use SP\UserPreferences; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Class PreferencesC encargada de mostrar las preferencias de los usuarios + * + * @package SP\Controller + */ +class UsersPrefsC extends Controller implements ActionsInterface +{ + private $_tabIndex = 0; + + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + */ + public function __construct(\SP\Template $template = null) + { + parent::__construct($template); + + $this->view->assign('tabs', array()); + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + } + + /** + * Obtener la pestaña de seguridad + */ + public function getSecurityTab() + { + $this->setAction(self::ACTION_USR_PREFERENCES_SECURITY); + +// if (!$this->checkAccess()) { +// $this->showError(self::ERR_PAGE_NO_PERMISSION); +// return; +// } + + $this->view->addTemplate('security'); + + $userId = Session::getUserId(); + + $userPrefs = UserPreferences::getPreferences($userId); + + $twoFa = new Auth2FA($userId, Session::getUserLogin()); + + $this->view->assign('userId', $userId); + + if (!$userPrefs->isUse2Fa()) { + $this->view->assign('qrCode', $twoFa->getUserQRCode()); + } + + $this->view->assign('chk2FAEnabled', $userPrefs->isUse2Fa()); + + $this->view->append('tabs', array('title' => _('Seguridad'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'security'); + $this->view->assign('actionId', $this->getAction(), 'security'); + } + + /** + * Obtener el índice actual de las pestañas + * + * @return int + */ + private function getTabIndex(){ + $index = $this->_tabIndex; + $this->_tabIndex++; + + return $index; + } +} \ No newline at end of file