From 8fbe1fd93688b5ddd3479dd986df8ae403598dd1 Mon Sep 17 00:00:00 2001 From: gpedic Date: Thu, 14 Nov 2013 13:58:15 +0100 Subject: [PATCH 001/223] check if the conditions value_type is 'Value' before fixing up the formatting condition value fields should not be formatted if their value_type is not 'Value', otherwise, for value_type 'Field', the fields name will be lost if the field type is not string --- modules/AOW_Conditions/AOW_Condition.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/AOW_Conditions/AOW_Condition.php b/modules/AOW_Conditions/AOW_Condition.php index 085d86de831..78589f87b33 100755 --- a/modules/AOW_Conditions/AOW_Condition.php +++ b/modules/AOW_Conditions/AOW_Condition.php @@ -80,7 +80,7 @@ function save_lines($post_data, $parent, $key = ''){ default: $post_data[$key.$field_def['name']][$i] = encodeMultienumValue($post_data[$key.$field_def['name']][$i]); } - } else if($field_def['name'] == 'value') { + } else if($field_def['name'] === 'value' && $post_data[$key.'value_type'][$i] === 'Value') { $post_data[$key.$field_def['name']][$i] = fixUpFormatting($_REQUEST['flow_module'], $condition->field, $post_data[$key.$field_def['name']][$i]); } $condition->$field_def['name'] = $post_data[$key.$field_def['name']][$i]; From 91da069276593f40291172a830e4c5e944453784 Mon Sep 17 00:00:00 2001 From: Jorge Obeaga Date: Tue, 19 Nov 2013 11:40:57 -0300 Subject: [PATCH 002/223] Base language package es_es --- .gitignore | 4 +- .../Fields/Address/es_es.DetailView.tpl | 72 + .../Fields/Address/es_es.EditView.tpl | 146 + .../assignable/language/es_es.lang.php | 52 + .../team_security/language/es_es.lang.php | 52 + .../templates/basic/language/es_es.lang.php | 66 + .../language/application/es_es.lang.php | 60 + .../templates/company/language/es_es.lang.php | 143 + .../file/language/application/es_es.lang.php | 67 + .../templates/file/language/es_es.lang.php | 112 + .../issue/language/application/es_es.lang.php | 73 + .../templates/issue/language/es_es.lang.php | 71 + .../templates/person/language/es_es.lang.php | 99 + .../sale/language/application/es_es.lang.php | 52 + .../templates/sale/language/es_es.lang.php | 136 + include/language/es_es.lang.php | 2921 +++++++++++++++++ include/language/es_es.notify_template.html | 350 ++ modules/ACL/language/es_es.lang.php | 64 + modules/ACLActions/language/es_es.lang.php | 75 + modules/ACLRoles/language/es_es.lang.php | 66 + modules/Accounts/language/es_es.lang.php | 199 ++ modules/Activities/language/es_es.lang.php | 132 + .../Administration/language/es_es.lang.php | 1127 +++++++ modules/Audit/language/es_es.lang.php | 57 + modules/Bugs/language/es_es.lang.php | 137 + modules/Calendar/language/es_es.lang.php | 154 + modules/Calls/language/es_es.lang.php | 170 + modules/CampaignLog/language/es_es.lang.php | 102 + .../CampaignTrackers/language/es_es.lang.php | 73 + modules/Campaigns/language/es_es.lang.php | 430 +++ modules/Cases/language/es_es.lang.php | 147 + modules/Charts/language/es_es.lang.php | 113 + modules/Configurator/language/es_es.lang.php | 355 ++ modules/Connectors/language/es_es.lang.php | 127 + modules/Contacts/language/es_es.lang.php | 247 ++ modules/Currencies/language/es_es.lang.php | 83 + .../DocumentRevisions/language/es_es.lang.php | 82 + modules/Documents/language/es_es.lang.php | 181 + modules/DynamicFields/language/es_es.lang.php | 130 + modules/EAPM/language/es_es.lang.php | 122 + .../EmailAddresses/language/es_es.lang.php | 57 + modules/EmailMan/language/es_es.lang.php | 158 + .../EmailMarketing/language/es_es.lang.php | 102 + .../EmailTemplates/language/es_es.lang.php | 118 + modules/Emails/language/es_es.lang.php | 375 +++ modules/Employees/language/es_es.lang.php | 162 + modules/Groups/language/es_es.lang.php | 57 + modules/Help/language/es_es.lang.php | 64 + modules/History/language/es_es.lang.php | 126 + modules/Home/language/es_es.lang.php | 265 ++ modules/Import/language/es_es.lang.php | 367 +++ modules/InboundEmail/language/es_es.lang.php | 194 ++ modules/LabelEditor/language/es_es.lang.php | 52 + modules/Leads/language/es_es.lang.php | 280 ++ modules/MailMerge/language/es_es.lang.php | 86 + modules/Meetings/language/es_es.lang.php | 191 ++ modules/MergeRecords/language/es_es.lang.php | 79 + modules/ModuleBuilder/language/es_es.lang.php | 677 ++++ modules/Notes/language/es_es.lang.php | 116 + modules/OAuthKeys/language/es_es.lang.php | 75 + modules/OAuthTokens/language/es_es.lang.php | 61 + modules/Opportunities/language/es_es.lang.php | 160 + .../OptimisticLock/language/es_es.lang.php | 56 + modules/Project/language/es_es.lang.php | 136 + modules/ProjectTask/language/es_es.lang.php | 121 + modules/ProspectLists/language/es_es.lang.php | 99 + modules/Prospects/language/es_es.lang.php | 219 ++ modules/Relationships/language/es_es.lang.php | 65 + modules/Releases/language/es_es.lang.php | 72 + modules/Roles/language/es_es.lang.php | 65 + modules/SavedSearch/language/es_es.lang.php | 67 + modules/Schedulers/language/es_es.lang.php | 152 + .../SchedulersJobs/language/es_es.lang.php | 73 + modules/Studio/language/es_es.lang.php | 174 + modules/SugarFeed/language/es_es.lang.php | 135 + modules/Tasks/language/es_es.lang.php | 135 + modules/Trackers/language/es_es.lang.php | 88 + modules/UpgradeWizard/language/es_es.lang.php | 297 ++ modules/Users/language/es_es.lang.php | 532 +++ 79 files changed, 15156 insertions(+), 1 deletion(-) create mode 100644 include/SugarFields/Fields/Address/es_es.DetailView.tpl create mode 100644 include/SugarFields/Fields/Address/es_es.EditView.tpl create mode 100644 include/SugarObjects/implements/assignable/language/es_es.lang.php create mode 100644 include/SugarObjects/implements/team_security/language/es_es.lang.php create mode 100644 include/SugarObjects/templates/basic/language/es_es.lang.php create mode 100644 include/SugarObjects/templates/company/language/application/es_es.lang.php create mode 100644 include/SugarObjects/templates/company/language/es_es.lang.php create mode 100644 include/SugarObjects/templates/file/language/application/es_es.lang.php create mode 100644 include/SugarObjects/templates/file/language/es_es.lang.php create mode 100644 include/SugarObjects/templates/issue/language/application/es_es.lang.php create mode 100644 include/SugarObjects/templates/issue/language/es_es.lang.php create mode 100644 include/SugarObjects/templates/person/language/es_es.lang.php create mode 100644 include/SugarObjects/templates/sale/language/application/es_es.lang.php create mode 100644 include/SugarObjects/templates/sale/language/es_es.lang.php create mode 100644 include/language/es_es.lang.php create mode 100644 include/language/es_es.notify_template.html create mode 100644 modules/ACL/language/es_es.lang.php create mode 100644 modules/ACLActions/language/es_es.lang.php create mode 100644 modules/ACLRoles/language/es_es.lang.php create mode 100644 modules/Accounts/language/es_es.lang.php create mode 100644 modules/Activities/language/es_es.lang.php create mode 100644 modules/Administration/language/es_es.lang.php create mode 100644 modules/Audit/language/es_es.lang.php create mode 100644 modules/Bugs/language/es_es.lang.php create mode 100644 modules/Calendar/language/es_es.lang.php create mode 100644 modules/Calls/language/es_es.lang.php create mode 100644 modules/CampaignLog/language/es_es.lang.php create mode 100644 modules/CampaignTrackers/language/es_es.lang.php create mode 100644 modules/Campaigns/language/es_es.lang.php create mode 100644 modules/Cases/language/es_es.lang.php create mode 100644 modules/Charts/language/es_es.lang.php create mode 100644 modules/Configurator/language/es_es.lang.php create mode 100644 modules/Connectors/language/es_es.lang.php create mode 100644 modules/Contacts/language/es_es.lang.php create mode 100644 modules/Currencies/language/es_es.lang.php create mode 100644 modules/DocumentRevisions/language/es_es.lang.php create mode 100644 modules/Documents/language/es_es.lang.php create mode 100644 modules/DynamicFields/language/es_es.lang.php create mode 100644 modules/EAPM/language/es_es.lang.php create mode 100644 modules/EmailAddresses/language/es_es.lang.php create mode 100644 modules/EmailMan/language/es_es.lang.php create mode 100644 modules/EmailMarketing/language/es_es.lang.php create mode 100644 modules/EmailTemplates/language/es_es.lang.php create mode 100644 modules/Emails/language/es_es.lang.php create mode 100644 modules/Employees/language/es_es.lang.php create mode 100644 modules/Groups/language/es_es.lang.php create mode 100644 modules/Help/language/es_es.lang.php create mode 100644 modules/History/language/es_es.lang.php create mode 100644 modules/Home/language/es_es.lang.php create mode 100644 modules/Import/language/es_es.lang.php create mode 100644 modules/InboundEmail/language/es_es.lang.php create mode 100644 modules/LabelEditor/language/es_es.lang.php create mode 100644 modules/Leads/language/es_es.lang.php create mode 100644 modules/MailMerge/language/es_es.lang.php create mode 100644 modules/Meetings/language/es_es.lang.php create mode 100644 modules/MergeRecords/language/es_es.lang.php create mode 100644 modules/ModuleBuilder/language/es_es.lang.php create mode 100644 modules/Notes/language/es_es.lang.php create mode 100644 modules/OAuthKeys/language/es_es.lang.php create mode 100644 modules/OAuthTokens/language/es_es.lang.php create mode 100644 modules/Opportunities/language/es_es.lang.php create mode 100644 modules/OptimisticLock/language/es_es.lang.php create mode 100644 modules/Project/language/es_es.lang.php create mode 100644 modules/ProjectTask/language/es_es.lang.php create mode 100644 modules/ProspectLists/language/es_es.lang.php create mode 100644 modules/Prospects/language/es_es.lang.php create mode 100644 modules/Relationships/language/es_es.lang.php create mode 100644 modules/Releases/language/es_es.lang.php create mode 100644 modules/Roles/language/es_es.lang.php create mode 100644 modules/SavedSearch/language/es_es.lang.php create mode 100644 modules/Schedulers/language/es_es.lang.php create mode 100644 modules/SchedulersJobs/language/es_es.lang.php create mode 100644 modules/Studio/language/es_es.lang.php create mode 100644 modules/SugarFeed/language/es_es.lang.php create mode 100644 modules/Tasks/language/es_es.lang.php create mode 100644 modules/Trackers/language/es_es.lang.php create mode 100644 modules/UpgradeWizard/language/es_es.lang.php create mode 100644 modules/Users/language/es_es.lang.php diff --git a/.gitignore b/.gitignore index 69e89dd5387..e6383678ac0 100755 --- a/.gitignore +++ b/.gitignore @@ -53,4 +53,6 @@ nbproject/ Session.vim # Windows Thumbs.db -Desktop.ini \ No newline at end of file +Desktop.ini +# Disytel +lang_cmp.php diff --git a/include/SugarFields/Fields/Address/es_es.DetailView.tpl b/include/SugarFields/Fields/Address/es_es.DetailView.tpl new file mode 100644 index 00000000000..34b9104e4e0 --- /dev/null +++ b/include/SugarFields/Fields/Address/es_es.DetailView.tpl @@ -0,0 +1,72 @@ +{* +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + +/********************************************************************************* + + * Description: Defines the Spanish language pack for the base application. + * Portions created by REDK Ingeniería del Software S.L.. + * All Rights Reserved. + * Contributor(s): REDK Software Engineering (www.redk.net) + ********************************************************************************/ + + +*} + + + +{{if !empty($displayParams.enableConnectors)}} + +{{/if}} + + +
+ + + + +{$fields.{{$displayParams.key}}_address_street.value|escape:'htmlentitydecode'|escape:'html'|url2html|nl2br}
+{$fields.{{$displayParams.key}}_address_city.value|escape:'htmlentitydecode'|escape:'html'|url2html|nl2br} {$fields.{{$displayParams.key}}_address_state.value|escape:'htmlentitydecode'|strip_tags|url2html|nl2br}  {$fields.{{$displayParams.key}}_address_postalcode.value|escape:'htmlentitydecode'|strip_tags|url2html|nl2br}
+{$fields.{{$displayParams.key}}_address_country.value|escape:'htmlentitydecode'|escape:'html'|url2html|nl2br} +
+{{sugarvar_connector view='DetailView'}} + +{{* +Este es el código personalizado que se puede configurar para que muestre en la segunda columna +de la tabla de direcciones. Un ejemplo podría ser el botón "Copiar" de la presente DetailView Cuentas. +Ver modules modules/Accounts/views/view.detail.php para ver el valor que se establece +*}} +{$custom_code_{{$displayParams.key}}} +
\ No newline at end of file diff --git a/include/SugarFields/Fields/Address/es_es.EditView.tpl b/include/SugarFields/Fields/Address/es_es.EditView.tpl new file mode 100644 index 00000000000..fe695d5ee47 --- /dev/null +++ b/include/SugarFields/Fields/Address/es_es.EditView.tpl @@ -0,0 +1,146 @@ +{* +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + +/********************************************************************************* + + * Description: Defines the Spanish language pack for the base application. + * Portions created by REDK Ingeniería del Software S.L.. + * All Rights Reserved. + * Contributor(s): REDK Software Engineering (www.redk.net) + ********************************************************************************/ + + +*} + +{{assign var="key" value=$displayParams.key|upper}} +{{assign var="street" value=$displayParams.key|cat:'_address_street'}} +{{assign var="city" value=$displayParams.key|cat:'_address_city'}} +{{assign var="state" value=$displayParams.key|cat:'_address_state'}} +{{assign var="country" value=$displayParams.key|cat:'_address_country'}} +{{assign var="postalcode" value=$displayParams.key|cat:'_address_postalcode'}} +
+{sugar_translate label='LBL_{{$key}}_ADDRESS' module='{{$module}}'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{{if $displayParams.copy}} + + + + +{{else}} + + + +{{/if}} +
+{sugar_translate label='LBL_{{$key}}_STREET' module='{{$module}}'}: +{if $fields.{{$street}}.required || {{if $street|lower|in_array:$displayParams.required}}true{{else}}false{{/if}}} +{$APP.LBL_REQUIRED_SYMBOL} +{/if} + +{{if $displayParams.maxlength}} + +{{else}} + +{{/if}} +
+{sugar_translate label='LBL_CITY' module='{{$module}}'}: +{if $fields.{{$city}}.required || {{if $city|lower|in_array:$displayParams.required}}true{{else}}false{{/if}}} +{$APP.LBL_REQUIRED_SYMBOL} +{/if} + + +
+{sugar_translate label='LBL_STATE' module='{{$module}}'}: +{if $fields.{{$state}}.required || {{if $state|lower|in_array:$displayParams.required}}true{{else}}false{{/if}}} +{$APP.LBL_REQUIRED_SYMBOL} +{/if} + + +
+ +{sugar_translate label='LBL_POSTAL_CODE' module='{{$module}}'}: +{if $fields.{{$postalcode}}.required || {{if $postalcode|lower|in_array:$displayParams.required}}true{{else}}false{{/if}}} +{$APP.LBL_REQUIRED_SYMBOL} +{/if} + + +
+ +{sugar_translate label='LBL_COUNTRY' module='{{$module}}'}: +{if $fields.{{$country}}.required || {{if $country|lower|in_array:$displayParams.required}}true{{else}}false{{/if}}} +{$APP.LBL_REQUIRED_SYMBOL} +{/if} + + +
+{sugar_translate label='LBL_COPY_ADDRESS_FROM_LEFT' module=''}: + + +
 
+
+ \ No newline at end of file diff --git a/include/SugarObjects/implements/assignable/language/es_es.lang.php b/include/SugarObjects/implements/assignable/language/es_es.lang.php new file mode 100644 index 00000000000..3d442562240 --- /dev/null +++ b/include/SugarObjects/implements/assignable/language/es_es.lang.php @@ -0,0 +1,52 @@ + 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', +); \ No newline at end of file diff --git a/include/SugarObjects/implements/team_security/language/es_es.lang.php b/include/SugarObjects/implements/team_security/language/es_es.lang.php new file mode 100644 index 00000000000..9c6c4db90de --- /dev/null +++ b/include/SugarObjects/implements/team_security/language/es_es.lang.php @@ -0,0 +1,52 @@ + 'Equipos', + 'LBL_TEAMS' => 'Equipos', +); \ No newline at end of file diff --git a/include/SugarObjects/templates/basic/language/es_es.lang.php b/include/SugarObjects/templates/basic/language/es_es.lang.php new file mode 100644 index 00000000000..0a6b100ff5d --- /dev/null +++ b/include/SugarObjects/templates/basic/language/es_es.lang.php @@ -0,0 +1,66 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', +); \ No newline at end of file diff --git a/include/SugarObjects/templates/company/language/application/es_es.lang.php b/include/SugarObjects/templates/company/language/application/es_es.lang.php new file mode 100644 index 00000000000..3e03a4c1b2c --- /dev/null +++ b/include/SugarObjects/templates/company/language/application/es_es.lang.php @@ -0,0 +1,60 @@ + '', + 'Analyst' => NULL, + 'Competitor' => NULL, + 'Customer' => NULL, + 'Integrator' => NULL, + 'Investor' => 'Inversor', + 'Partner' => 'Partner', + 'Press' => 'Prensa', + 'Prospect' => 'Prospecto', + 'Reseller' => 'Revendedor', + 'Other' => 'Otro', +); diff --git a/include/SugarObjects/templates/company/language/es_es.lang.php b/include/SugarObjects/templates/company/language/es_es.lang.php new file mode 100644 index 00000000000..628c4f099f6 --- /dev/null +++ b/include/SugarObjects/templates/company/language/es_es.lang.php @@ -0,0 +1,143 @@ + '¿Está seguro de que desea quitar esta cuenta de este proyecto?', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la cuenta.', + 'LBL_ACCOUNT_NAME' => 'Nombre de Cuenta:', + 'LBL_ACCOUNT' => 'Cuenta:', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_ADDRESS_INFORMATION' => 'Direcciones', + 'LBL_ANNUAL_REVENUE' => 'Ingresos Anuales:', + 'LBL_ANY_ADDRESS' => 'Cualquier Dirección:', + 'LBL_ANY_EMAIL' => 'Cualquier Email:', + 'LBL_EMAIL_NON_PRIMARY' => 'Correo Electrónico No Principal', + 'LBL_ANY_PHONE' => 'Cualquier Teléfono:', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario:', + 'LBL_RATING' => 'Rating', + 'LBL_ASSIGNED_TO' => 'Asignado A:', + 'LBL_ASSIGNED_USER' => 'Asignado a:', + 'LBL_ASSIGNED_TO_ID' => 'Asignado a:', + 'LBL_BILLING_ADDRESS_CITY' => 'Ciudad de Dirección de Facturación:', + 'LBL_BILLING_ADDRESS_COUNTRY' => 'País de Dirección de Facturación:', + 'LBL_BILLING_ADDRESS_POSTALCODE' => 'CP de Dirección de Facturación:', + 'LBL_BILLING_ADDRESS_STATE' => 'Estado/Provincia de Dirección de Facturación:', + 'LBL_BILLING_ADDRESS_STREET_2' => 'Calle de Dirección de Facturación 2', + 'LBL_BILLING_ADDRESS_STREET_3' => 'Calle de Dirección de Facturación 3', + 'LBL_BILLING_ADDRESS_STREET_4' => 'Calle de Dirección de Facturación 4', + 'LBL_BILLING_ADDRESS_STREET' => 'Calle de Dirección de Facturación:', + 'LBL_BILLING_ADDRESS' => 'Dirección de Facturación:', + 'LBL_ACCOUNT_INFORMATION' => 'Información de la Cuenta', + 'LBL_CITY' => 'Ciudad:', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_COUNTRY' => 'País:', + 'LBL_DATE_ENTERED' => 'Creado:', + 'LBL_DATE_MODIFIED' => 'Modificado:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_DESCRIPTION_INFORMATION' => 'Información Adicional', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DUPLICATE' => 'Posible Cuenta Duplicada', + 'LBL_EMAIL' => 'Correo Electrónico:', + 'LBL_EMPLOYEES' => 'Empleados:', + 'LBL_FAX' => 'Fax:', + 'LBL_INDUSTRY' => 'Industria:', + 'LBL_LIST_ACCOUNT_NAME' => 'Nombre', + 'LBL_LIST_CITY' => 'Ciudad', + 'LBL_LIST_EMAIL_ADDRESS' => 'Email', + 'LBL_LIST_PHONE' => 'Teléfono', + 'LBL_LIST_STATE' => 'Estado/Provincia', + 'LBL_LIST_WEBSITE' => 'Sitio Web', + 'LBL_MEMBER_OF' => 'Miembro de:', + 'LBL_MEMBER_ORG_FORM_TITLE' => 'Organizaciones Miembro', + 'LBL_MEMBER_ORG_SUBPANEL_TITLE' => 'Organizaciones Miembro', + 'LBL_NAME' => 'Nombre:', + 'LBL_OTHER_EMAIL_ADDRESS' => 'Email Alternativo:', + 'LBL_OTHER_PHONE' => 'Tel. Alternativo:', + 'LBL_OWNERSHIP' => 'Propietario:', + 'LBL_PARENT_ACCOUNT_ID' => 'ID Cuenta Padre', + 'LBL_PHONE_ALT' => 'Tel. Alternativo:', + 'LBL_PHONE_FAX' => 'Fax Oficina:', + 'LBL_PHONE_OFFICE' => 'Teléfono Oficina:', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_EMAIL_ADDRESS' => 'Dirección(es) de Email', + 'LBL_EMAIL_ADDRESSES' => 'Direcciones de Email', + 'LBL_POSTAL_CODE' => 'Código Postal:', + 'LBL_PUSH_BILLING' => 'Emisión de Facturas', + 'LBL_PUSH_SHIPPING' => 'Emisión de Envíos', + 'LBL_SAVE_ACCOUNT' => 'Guardar Cuenta', + 'LBL_SHIPPING_ADDRESS_CITY' => 'Ciudad de Dirección de Envío:', + 'LBL_SHIPPING_ADDRESS_COUNTRY' => 'País de Dirección de Envío:', + 'LBL_SHIPPING_ADDRESS_POSTALCODE' => 'CP de Dirección de Envío:', + 'LBL_SHIPPING_ADDRESS_STATE' => 'Estado/Provincia de Dirección de Envío:', + 'LBL_SHIPPING_ADDRESS_STREET_2' => 'Calle de Dirección de Envío 2', + 'LBL_SHIPPING_ADDRESS_STREET_3' => 'Calle de Dirección de Envío 3', + 'LBL_SHIPPING_ADDRESS_STREET_4' => 'Calle de Dirección de Envío 4', + 'LBL_SHIPPING_ADDRESS_STREET' => 'Calle de Dirección de Envío:', + 'LBL_SHIPPING_ADDRESS' => 'Dirección de Envío:', + 'LBL_STATE' => 'Estado/Provincia:', + 'LBL_TICKER_SYMBOL' => 'Símbolo Ticker:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_USERS_ASSIGNED_LINK' => 'Usuarios Asignados', + 'LBL_USERS_CREATED_LINK' => 'Creado por Usuarios', + 'LBL_USERS_MODIFIED_LINK' => 'Usuarios Modificados', + 'LBL_VIEW_FORM_TITLE' => 'Vista de Cuenta', + 'LBL_WEBSITE' => 'Sitio Web:', + 'LNK_ACCOUNT_LIST' => 'Cuentas', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'MSG_DUPLICATE' => 'La creación de esta cuenta puede producir una cuenta duplicada. Puede elegir una cuenta existente de la lista inferior o hacer clic en Guardar para continuar la creación de una nueva cuenta con los datos introducidos previamente.', + 'MSG_SHOW_DUPLICATES' => 'La creación de esta cuenta puede crear un duplicado. Puede hacer clic en Guardar para continuar con la creación de esta nueva cuenta con los datos previamente introducidos o puede hacer clic en Cancelar.', + 'NTC_COPY_BILLING_ADDRESS' => 'Copiar dirección de facturación a dirección de envío', + 'NTC_COPY_BILLING_ADDRESS2' => 'Copiar a dirección de envío', + 'NTC_COPY_SHIPPING_ADDRESS' => 'Copiar dirección de envío a dirección de facturación', + 'NTC_COPY_SHIPPING_ADDRESS2' => 'Copiar a dirección de facturación', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'NTC_REMOVE_ACCOUNT_CONFIRMATION' => '¿Está seguro de que desea quitar este registro?', + 'NTC_REMOVE_MEMBER_ORG_CONFIRMATION' => '¿Está seguro de que desea quitar este registro como organización miembro?', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', +); \ No newline at end of file diff --git a/include/SugarObjects/templates/file/language/application/es_es.lang.php b/include/SugarObjects/templates/file/language/application/es_es.lang.php new file mode 100644 index 00000000000..9eb9f3dd396 --- /dev/null +++ b/include/SugarObjects/templates/file/language/application/es_es.lang.php @@ -0,0 +1,67 @@ + '', + 'Marketing' => 'Marketing', + 'Knowledege Base' => 'Base de Conocimiento', + 'Sales' => 'Ventas', +); +$app_list_strings['_subcategory_dom'] = array ( + '' => '', + 'Marketing Collateral' => 'Impresos de Marketing', + 'Product Brochures' => 'Folletos de Producto', + 'FAQ' => 'FAQ', +); +$app_list_strings['_status_dom'] = array ( + 'Active' => 'Activo', + 'Draft' => 'Borrador', + 'FAQ' => 'FAQ', + 'Expired' => 'Caducado', + 'Under Review' => 'En Revisión', + 'Pending' => 'Pendiente', +); diff --git a/include/SugarObjects/templates/file/language/es_es.lang.php b/include/SugarObjects/templates/file/language/es_es.lang.php new file mode 100644 index 00000000000..e5a49bfc7f3 --- /dev/null +++ b/include/SugarObjects/templates/file/language/es_es.lang.php @@ -0,0 +1,112 @@ + 'Documentos', + 'LBL_MODULE_TITLE' => 'Documentos: Inicio', + 'LNK_NEW_DOCUMENT' => 'Crear Documento', + 'LNK_DOCUMENT_LIST' => 'Lista de Documentos', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Documentos', + 'LBL_DOCUMENT_ID' => 'ID de Documento', + 'LBL_NAME' => 'Nombre de Documento', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_ASSIGNED_TO' => 'Asignado a:', + 'LBL_CATEGORY' => 'Categoría', + 'LBL_SUBCATEGORY' => 'Subcategoría', + 'LBL_STATUS' => 'Estado', + 'LBL_IS_TEMPLATE' => 'Es una Plantilla', + 'LBL_TEMPLATE_TYPE' => 'Tipo de Documento', + 'LBL_REVISION_NAME' => 'Número de Versión', + 'LBL_MIME' => 'Tipo MIME', + 'LBL_REVISION' => 'Versión', + 'LBL_DOCUMENT' => 'Documento Relacionado', + 'LBL_LATEST_REVISION' => 'Última Versión', + 'LBL_CHANGE_LOG' => 'Historial de Cambios', + 'LBL_ACTIVE_DATE' => 'Fecha de Publicación', + 'LBL_EXPIRATION_DATE' => 'Fecha de Caducidad', + 'LBL_FILE_EXTENSION' => 'Extensión de Archivo', + 'LBL_CAT_OR_SUBCAT_UNSPEC' => 'Sin especificar', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Documento', + 'LBL_DOC_NAME' => 'Nombre de Documento:', + 'LBL_FILENAME' => 'Nombre de Archivo:', + 'LBL_FILE_UPLOAD' => 'Fichero:', + 'LBL_DOC_VERSION' => 'Versión:', + 'LBL_CATEGORY_VALUE' => 'Categoría:', + 'LBL_SUBCATEGORY_VALUE' => 'Subcategoría:', + 'LBL_DOC_STATUS' => 'Estado:', + 'LBL_DET_TEMPLATE_TYPE' => 'Tipo de Documento:', + 'LBL_DOC_DESCRIPTION' => 'Descripción:', + 'LBL_DOC_ACTIVE_DATE' => 'Fecha de Publicación:', + 'LBL_DOC_EXP_DATE' => 'Fecha de Caducidad:', + 'LBL_LIST_FORM_TITLE' => 'Lista de Documentos', + 'LBL_LIST_DOCUMENT' => 'Documento', + 'LBL_LIST_CATEGORY' => 'Categoría', + 'LBL_LIST_SUBCATEGORY' => 'Subcategoría', + 'LBL_LIST_REVISION' => 'Versión', + 'LBL_LIST_LAST_REV_CREATOR' => 'Publicado Por', + 'LBL_LIST_LAST_REV_DATE' => 'Fecha de Versión', + 'LBL_LIST_VIEW_DOCUMENT' => 'Ver', + 'LBL_LIST_DOWNLOAD' => 'Descargar', + 'LBL_LIST_ACTIVE_DATE' => 'Fecha de Publicación', + 'LBL_LIST_EXP_DATE' => 'Fecha de Caducidad', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_SF_DOCUMENT' => 'Nombre de Documento:', + 'LBL_SF_CATEGORY' => 'Categoría:', + 'LBL_SF_SUBCATEGORY' => 'Subcategoría:', + 'LBL_SF_ACTIVE_DATE' => 'Fecha de Publicación:', + 'LBL_SF_EXP_DATE' => 'Fecha de Caducidad:', + 'DEF_CREATE_LOG' => 'Documento Creado', + 'ERR_DOC_NAME' => 'Nombre de Documento', + 'ERR_DOC_ACTIVE_DATE' => 'Fecha de Publicación', + 'ERR_DOC_EXP_DATE' => 'Fecha de Caducidad', + 'ERR_FILENAME' => 'Nombre de Archivo', + 'LBL_TREE_TITLE' => 'Documentos', + 'LBL_LIST_DOCUMENT_NAME' => 'Nombre de Documento', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', +); \ No newline at end of file diff --git a/include/SugarObjects/templates/issue/language/application/es_es.lang.php b/include/SugarObjects/templates/issue/language/application/es_es.lang.php new file mode 100644 index 00000000000..1be027de3a0 --- /dev/null +++ b/include/SugarObjects/templates/issue/language/application/es_es.lang.php @@ -0,0 +1,73 @@ + 'Administración', + 'Product' => 'Producto', + 'User' => 'Usuario', +); +$app_list_strings['_status_dom'] = array ( + 'New' => 'Nuevo', + 'Assigned' => 'Asignado', + 'Closed' => 'Cerrado', + 'Pending Input' => 'Pendiente de Información', + 'Rejected' => 'Rechazado', + 'Duplicate' => 'Duplicado', +); +$app_list_strings['_priority_dom'] = array ( + 'P1' => 'Alta', + 'P2' => 'Media', + 'P3' => 'Baja', +); +$app_list_strings['_resolution_dom'] = array ( + '' => '', + 'Accepted' => 'Aceptado', + 'Duplicate' => 'Duplicado', + 'Closed' => 'Cerrado', + 'Out of Date' => 'Caducado', + 'Invalid' => 'No Válido', +); diff --git a/include/SugarObjects/templates/issue/language/es_es.lang.php b/include/SugarObjects/templates/issue/language/es_es.lang.php new file mode 100644 index 00000000000..55227181ebd --- /dev/null +++ b/include/SugarObjects/templates/issue/language/es_es.lang.php @@ -0,0 +1,71 @@ + 'Nombre', + 'LBL_NUMBER' => 'Número:', + 'LBL_STATUS' => 'Estado:', + 'LBL_PRIORITY' => 'Prioridad:', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_RESOLUTION' => 'Resolución', + 'LBL_LAST_MODIFIED' => 'Última Modificación', + 'LBL_ASSIGNED_TO_ID' => 'Asignado A:', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario:', + 'LBL_WORK_LOG' => 'Registro de Actividad:', + 'LBL_CREATED_BY' => 'Creado Por:', + 'LBL_DATE_CREATED' => 'Fecha de Creación:', + 'LBL_DATE_ENTERED' => 'Fecha de Creación:', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación:', + 'LBL_MODIFIED_BY' => 'Modificado Por:', + 'LBL_ASSIGNED_USER' => 'Usuario Asignado:', + 'LBL_SYSTEM_ID' => 'Id Sistema:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', +); \ No newline at end of file diff --git a/include/SugarObjects/templates/person/language/es_es.lang.php b/include/SugarObjects/templates/person/language/es_es.lang.php new file mode 100644 index 00000000000..738e985d1e8 --- /dev/null +++ b/include/SugarObjects/templates/person/language/es_es.lang.php @@ -0,0 +1,99 @@ + 'Saludo', + 'LBL_NAME' => 'Nombre', + 'LBL_FIRST_NAME' => 'Nombre', + 'LBL_LAST_NAME' => 'Apellidos', + 'LBL_TITLE' => 'Cargo', + 'LBL_DEPARTMENT' => 'Departamento', + 'LBL_DO_NOT_CALL' => 'No Llamar', + 'LBL_HOME_PHONE' => 'Tel. Casa', + 'LBL_MOBILE_PHONE' => 'Móvil', + 'LBL_OFFICE_PHONE' => 'Tel. Oficina', + 'LBL_OTHER_PHONE' => 'Tel. Alternativo', + 'LBL_FAX_PHONE' => 'Fax', + 'LBL_EMAIL_ADDRESS' => 'Direcciones de Email', + 'LBL_PRIMARY_ADDRESS' => 'Dirección Principal', + 'LBL_PRIMARY_ADDRESS_STREET' => 'Dirección Principal', + 'LBL_PRIMARY_ADDRESS_STREET_2' => 'Dirección Principal 2:', + 'LBL_PRIMARY_ADDRESS_STREET_3' => 'Dirección Principal 3:', + 'LBL_PRIMARY_ADDRESS_CITY' => 'Ciudad', + 'LBL_PRIMARY_ADDRESS_STATE' => 'Estado/Provincia', + 'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'Código Postal', + 'LBL_PRIMARY_ADDRESS_COUNTRY' => 'País de Dirección Principal:', + 'LBL_ALT_ADDRESS' => 'Dirección alternativa', + 'LBL_ALT_ADDRESS_STREET' => 'Dirección Alternativa', + 'LBL_ALT_ADDRESS_STREET_2' => 'Dirección Alternativa 2:', + 'LBL_ALT_ADDRESS_STREET_3' => 'Dirección Alternativa 3:', + 'LBL_ALT_ADDRESS_CITY' => 'Ciudad', + 'LBL_ALT_ADDRESS_STATE' => 'Estado/Provincia', + 'LBL_ALT_ADDRESS_POSTALCODE' => 'Código Postal', + 'LBL_ALT_ADDRESS_COUNTRY' => 'País', + 'LBL_COUNTRY' => 'País', + 'LBL_STREET' => 'Dirección Alternativa', + 'LBL_PRIMARY_STREET' => 'Dirección', + 'LBL_ALT_STREET' => 'Otra dirección', + 'LBL_CITY' => 'Ciudad', + 'LBL_STATE' => 'Estado/Provincia', + 'LBL_POSTALCODE' => 'Código Postal', + 'LBL_POSTAL_CODE' => 'Código Postal', + 'LBL_CONTACT_INFORMATION' => 'Información de Contacto', + 'LBL_ADDRESS_INFORMATION' => 'Direcciones', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', + 'LBL_OTHER_EMAIL_ADDRESS' => 'Correo Alternativo:', + 'LBL_ASSISTANT' => 'Asistente', + 'LBL_ASSISTANT_PHONE' => 'Tel. Asistente', + 'LBL_WORK_PHONE' => 'Tel. Trabajo', + 'LNK_IMPORT_VCARD' => 'Crear Desde vCard', + 'LBL_ANY_EMAIL' => 'Cualquier email', + 'LBL_EMAIL_NON_PRIMARY' => 'Correo Electrónico No Principal', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', +); \ No newline at end of file diff --git a/include/SugarObjects/templates/sale/language/application/es_es.lang.php b/include/SugarObjects/templates/sale/language/application/es_es.lang.php new file mode 100644 index 00000000000..4b9a1235a61 --- /dev/null +++ b/include/SugarObjects/templates/sale/language/application/es_es.lang.php @@ -0,0 +1,52 @@ + '', + 'Existing Business' => 'Negocios Existentes', + 'New Business' => 'Nuevos Negocios', +); diff --git a/include/SugarObjects/templates/sale/language/es_es.lang.php b/include/SugarObjects/templates/sale/language/es_es.lang.php new file mode 100644 index 00000000000..a80f0d49bfd --- /dev/null +++ b/include/SugarObjects/templates/sale/language/es_es.lang.php @@ -0,0 +1,136 @@ + 'Ventas', + 'LBL_MODULE_TITLE' => 'Ventas: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Ventas', + 'LBL_VIEW_FORM_TITLE' => 'Vista de Ventas', + 'LBL_LIST_FORM_TITLE' => 'Lista de Ventas', + 'LBL_SALE_NAME' => 'Nombre de Venta:', + 'LBL_SALE' => 'Venta:', + 'LBL_NAME' => 'Nombre de Venta', + 'LBL_LIST_SALE_NAME' => 'Nombre', + 'LBL_LIST_ACCOUNT_NAME' => 'Nombre de Cuenta', + 'LBL_LIST_AMOUNT' => 'Cantidad', + 'LBL_LIST_DATE_CLOSED' => 'Cierre', + 'LBL_LIST_SALE_STAGE' => 'Etapa de Ventas', + 'LBL_ACCOUNT_ID' => 'ID de Cuenta', + 'LBL_CURRENCY_ID' => 'ID de Moneda', + 'db_sales_stage' => NULL, + 'db_name' => NULL, + 'db_amount' => NULL, + 'db_date_closed' => NULL, + 'UPDATE' => 'Venta - Actualización de Moneda', + 'UPDATE_DOLLARAMOUNTS' => 'Actualizar Cantidades en Dólares EEUU', + 'UPDATE_VERIFY' => 'Verificar Cantidades', + 'UPDATE_VERIFY_TXT' => 'Verifica que los valores de las cantidades en las ventas son números decimales válidos con sólo caracteres numéricos (0-9) y decimales(.)', + 'UPDATE_FIX' => 'Corregir Cantidades', + 'UPDATE_FIX_TXT' => 'Intenta corregir cualquier cantidad no válida creando un número decimal válido a partir de la cantidad actual. Antes realiza una copia de seguridad de todas las cantidades modificadas en el campo de base de datos amount_backup. Si tras la correción detecta problemas, no vuelva a realizar esta operación sin restaurar los valores previos desde la copia de seguridad ya que si no sobrescribirá la copia de seguridad con nuevos datos no válidos.', + 'UPDATE_DOLLARAMOUNTS_TXT' => 'Actualiza las cantidades en Dólares EEUU para las ventas basadas en el conjunto actual de cambios de moneda. Este valor se usa para calcular gráficas y vistas de listas de cantidades monetarias.', + 'UPDATE_CREATE_CURRENCY' => 'Creando Nueva Moneda:', + 'UPDATE_VERIFY_FAIL' => 'Fallo de Verificación de Registro:', + 'UPDATE_VERIFY_CURAMOUNT' => 'Moneda Actual:', + 'UPDATE_VERIFY_FIX' => 'La Corrección daría', + 'UPDATE_INCLUDE_CLOSE' => 'Registros Cerrados Incluidos', + 'UPDATE_VERIFY_NEWAMOUNT' => 'Nueva Cantidad:', + 'UPDATE_VERIFY_NEWCURRENCY' => 'Nueva Moneda:', + 'UPDATE_DONE' => 'Hecho', + 'UPDATE_BUG_COUNT' => 'Problemas Detectados cuya Resolución se ha Intentado:', + 'UPDATE_BUGFOUND_COUNT' => 'Problemas Detectados:', + 'UPDATE_COUNT' => 'Registros Actualizados:', + 'UPDATE_RESTORE_COUNT' => 'Registros con Cantidades Restauradas:', + 'UPDATE_RESTORE' => 'Restaurar Cantidades', + 'UPDATE_RESTORE_TXT' => 'Restaura los valores de las cantidades desde la copia de seguridad creada durante la corrección.', + 'UPDATE_FAIL' => 'No ha podido actualizarse -', + 'UPDATE_NULL_VALUE' => 'La cantidad es NULL, estableciéndola a 0 -', + 'UPDATE_MERGE' => 'Unificar Monedas', + 'UPDATE_MERGE_TXT' => 'Unifica múltiples monedas en una única moneda. Si detecta que hay múltiples registros de tipo moneda para la misma moneda, puede unificarlas. Esto también unificará las monedas para el resto de módulos.', + 'LBL_ACCOUNT_NAME' => 'Nombre de Cuenta:', + 'LBL_AMOUNT' => 'Cantidad:', + 'LBL_AMOUNT_USDOLLAR' => 'Cantidad en Dólares EEUU:', + 'LBL_CURRENCY' => 'Moneda:', + 'LBL_DATE_CLOSED' => 'Fecha de Cierre Prevista:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_PROJECTS_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_NEXT_STEP' => 'Próximo Paso:', + 'LBL_LEAD_SOURCE' => 'Toma de Contacto:', + 'LBL_SALES_STAGE' => 'Etapa de Ventas:', + 'LBL_PROBABILITY' => 'Probabilidad (%):', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DUPLICATE' => 'Posible Venta Duplicada', + 'MSG_DUPLICATE' => 'El registro para la venta que va a crear podría ser un duplicado de otro registro de venta existente. Los registros de venta con nombres similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de esta venta, o en Cancelar para volver al módulo sin crear la venta.', + 'LBL_NEW_FORM_TITLE' => 'Nueva Venta', + 'LNK_NEW_SALE' => 'Nueva Venta', + 'LNK_SALE_LIST' => 'Venta', + 'ERR_DELETE_RECORD' => 'Debe de especificar un número de registro para eliminar la venta.', + 'LBL_TOP_SALES' => 'Mis Principales Ventas Abiertas', + 'NTC_REMOVE_OPP_CONFIRMATION' => '¿Está seguro de que desea eliminar este contacto de la venta?', + 'SALE_REMOVE_PROJECT_CONFIRM' => '¿Está seguro de que desea eliminar esta venta del proyecto?', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Venta', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_RAW_AMOUNT' => 'Importe Bruto', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario:', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_MY_CLOSED_SALES' => 'Mis Ventas Cerradas', + 'LBL_TOTAL_SALES' => 'Ventas Totales', + 'LBL_CLOSED_WON_SALES' => 'Ventas Ganadas', + 'LBL_ASSIGNED_TO_ID' => 'Asignada a ID', + 'LBL_CREATED_ID' => 'Creada por ID', + 'LBL_MODIFIED_ID' => 'Modificada por ID', + 'LBL_MODIFIED_NAME' => 'Modificada por Usuario', + 'LBL_SALE_INFORMATION' => 'Información sobre la Venta', + 'LBL_CURRENCY_NAME' => 'Nombre de Moneda', + 'LBL_CURRENCY_SYMBOL' => 'Símbolo de Moneda', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', +); \ No newline at end of file diff --git a/include/language/es_es.lang.php b/include/language/es_es.lang.php new file mode 100644 index 00000000000..26a14da88a4 --- /dev/null +++ b/include/language/es_es.lang.php @@ -0,0 +1,2921 @@ + 'Inicio', + 'Contacts' => 'Contactos', + 'Accounts' => 'Cuentas', + 'Opportunities' => 'Oportunidades', + 'Cases' => 'Casos', + 'Notes' => 'Notas', + 'Calls' => 'Llamadas', + 'Emails' => 'Emails', + 'Meetings' => 'Reuniones', + 'Tasks' => 'Tareas', + 'Calendar' => 'Calendario', + 'Leads' => 'Clientes Potenciales', + 'Currencies' => 'Monedas', + 'Activities' => 'Actividades', + 'Bugs' => 'Gestor de Incidencias', + 'Feeds' => 'RSS', + 'iFrames' => 'Mis Sitios', + 'TimePeriods' => 'Períodos de Tiempo', + 'TaxRates' => 'Tipos de Impuestos', + 'ContractTypes' => 'Tipos de Contrato', + 'Schedulers' => 'Planificadores', + 'Project' => 'Proyectos', + 'ProjectTask' => 'Tareas de Proyecto', + 'Campaigns' => 'Campañas', + 'CampaignLog' => 'Registro de Campañas', + 'Documents' => 'Documentos', + 'DocumentRevisions' => 'Versiones de documento', + 'Connectors' => 'Conectores', + 'Roles' => 'Roles', + 'Notifications' => 'Notificaciones', + 'Sync' => 'Sincronización', + 'Users' => 'Usuarios', + 'Employees' => 'Empleados', + 'Administration' => 'Administración', + 'ACLRoles' => 'Roles', + 'InboundEmail' => 'Correo Entrante', + 'Releases' => 'Lanzamientos', + 'Prospects' => 'Público Objetivo', + 'Queues' => 'Colas', + 'EmailMarketing' => 'Marketing por Email', + 'EmailTemplates' => 'Plantillas de Email', + 'SNIP' => 'Facilidad de Sugar', + 'ProspectLists' => 'Listas de Público Objetivo', + 'SavedSearch' => 'Búsquedas Guardadas', + 'UpgradeWizard' => 'Asistente de Actualizaciones', + 'Trackers' => 'Monitorización', + 'TrackerPerfs' => 'Monitorización de Rendimiento', + 'TrackerSessions' => 'Monitorización de Sesiones', + 'TrackerQueries' => 'Consultas de Monitorización', + 'FAQ' => 'FAQ', + 'Newsletters' => 'Boletines de Noticias', + 'SugarFeed' => 'Sugar Feed', + 'KBDocuments' => 'Base de Conocimiento', + 'SugarFavorites' => 'Favoritos', + 'OAuthKeys' => 'Claves del Consumidor OAuth', + 'OAuthTokens' => 'OAuth Tokens', + 'Library' => 'Biblioteca', + 'EmailAddresses' => 'Dirección de Email', + 'Sugar_Favorites' => 'Favoritos', +); +$app_list_strings['moduleListSingular'] = array ( + 'Home' => 'Inicio', + 'Dashboard' => 'Cuadro de Mando', + 'Contacts' => 'Contacto', + 'Accounts' => 'Cuenta', + 'Opportunities' => 'Oportunidad', + 'Cases' => 'Caso', + 'Notes' => 'Nota', + 'Calls' => 'Llamada', + 'Emails' => 'Email', + 'Meetings' => 'Reunión', + 'Tasks' => 'Tarea', + 'Calendar' => 'Calendario', + 'Leads' => 'Cliente Potencial', + 'Activities' => 'Actividad', + 'Bugs' => 'Gestor de Incidencias', + 'KBDocuments' => 'Base de Conocimiento', + 'Feeds' => 'RSS', + 'iFrames' => 'Mis Sitios', + 'TimePeriods' => 'Período de Tiempo', + 'Project' => 'Proyecto', + 'ProjectTask' => 'Tarea de Proyecto', + 'Prospects' => 'Público Objetivo', + 'Campaigns' => 'Campaña', + 'Documents' => 'Documento', + 'SugarFollowing' => 'SugarFollowing', + 'Sync' => 'Sincronización', + 'Users' => 'Usuario', + 'SugarFavorites' => 'SugarFavorites', +); +$app_list_strings['checkbox_dom'] = array ( + '' => '', + 1 => 'Sí', + 2 => 'No', +); +$app_list_strings['account_type_dom'] = array ( + '' => '', + 'Analyst' => 'Analista', + 'Competitor' => 'Competidor', + 'Customer' => 'Cliente', + 'Integrator' => 'Integrador', + 'Investor' => 'Inversor', + 'Partner' => 'Partner', + 'Press' => 'Prensa', + 'Prospect' => 'Prospecto', + 'Reseller' => 'Revendedor', + 'Other' => 'Otro', +); +$app_list_strings['industry_dom'] = array ( + '' => '', + 'Apparel' => 'Textil', + 'Banking' => 'Banca', + 'Biotechnology' => 'Biotecnología', + 'Chemicals' => 'Química', + 'Communications' => 'Comunicaciones', + 'Construction' => 'Construcción', + 'Consulting' => 'Consultoría', + 'Education' => 'Educación', + 'Electronics' => 'Electronica', + 'Energy' => 'Energía', + 'Engineering' => 'Ingeniería', + 'Entertainment' => 'Entretenimiento', + 'Environmental' => 'Medio ambiente', + 'Finance' => 'Finanzas', + 'Government' => 'Gobierno', + 'Healthcare' => 'Sanidad', + 'Hospitality' => 'Caridad', + 'Insurance' => 'Seguros', + 'Machinery' => 'Maquinaria', + 'Manufacturing' => 'Fabricación', + 'Media' => 'Medios de comunicación', + 'Not For Profit' => 'Sin ánimo de lucro', + 'Recreation' => 'Ocio', + 'Retail' => 'Minoristas', + 'Shipping' => 'Envíos', + 'Technology' => 'Tecnología', + 'Telecommunications' => 'Telecomunicaciones', + 'Transportation' => 'Transporte', + 'Utilities' => 'Servicios públicos', + 'Other' => 'Otro', +); +$app_list_strings['lead_source_dom'] = array ( + '' => '', + 'Cold Call' => 'Llamada en Frío', + 'Existing Customer' => 'Cliente Existente', + 'Self Generated' => 'Auto Generado', + 'Employee' => 'Empleado', + 'Partner' => 'Partner', + 'Public Relations' => 'Relaciones Públicas', + 'Direct Mail' => 'Correo Directo', + 'Conference' => 'Conferencia', + 'Trade Show' => 'Exposición', + 'Web Site' => 'Sitio Web', + 'Word of mouth' => 'Recomendación', + 'Email' => 'Email', + 'Campaign' => 'Campaña', + 'Other' => 'Otro', +); +$app_list_strings['opportunity_type_dom'] = array ( + '' => '', + 'Existing Business' => 'Negocios Existentes', + 'New Business' => 'Nuevos Negocios', +); +$app_list_strings['roi_type_dom'] = array ( + 'Revenue' => 'Ingresos', + 'Investment' => 'Inversión', + 'Expected_Revenue' => 'Ingresos Esperados', + 'Budget' => 'Presupuesto', +); +$app_list_strings['opportunity_relationship_type_dom'] = array ( + '' => '', + 'Primary Decision Maker' => 'Tomador de Decisión Principal', + 'Business Decision Maker' => 'Tomador de Decisión de Negocio', + 'Business Evaluator' => 'Evaluador de Negocio', + 'Technical Decision Maker' => 'Tomador de Decisión Técnica', + 'Technical Evaluator' => 'Evaluador Técnico', + 'Executive Sponsor' => 'Patrocinador Ejecutivo', + 'Influencer' => 'Influenciador', + 'Other' => 'Otro', +); +$app_list_strings['case_relationship_type_dom'] = array ( + '' => '', + 'Primary Contact' => 'Contacto Principal', + 'Alternate Contact' => 'Contacto Alternativo', +); +$app_list_strings['payment_terms'] = array ( + '' => '', + 'Net 15' => 'Neto 15', + 'Net 30' => 'Neto 30', +); +$app_list_strings['fts_type'] = array ( + '' => '', + 'Elastic' => 'Buscar elástica', +); +$app_list_strings['sales_stage_dom'] = array ( + 'Prospecting' => 'Prospecto', + 'Qualification' => 'Calificación', + 'Needs Analysis' => 'Necesita Análisis', + 'Value Proposition' => 'Propuesta de Valor', + 'Id. Decision Makers' => 'Id. Tomadores de Decisiones', + 'Perception Analysis' => 'Análisis de Percepción', + 'Proposal/Price Quote' => 'Propuesta/Presupuesto', + 'Negotiation/Review' => 'Negociación/Revisión', + 'Closed Won' => 'Ganado', + 'Closed Lost' => 'Perdido', +); +$app_list_strings['in_total_group_stages'] = array ( + 'Draft' => 'Borrador', + 'Negotiation' => 'Negociación', + 'Delivered' => 'Enviado', + 'On Hold' => 'En Espera', + 'Confirmed' => 'Confirmado', + 'Closed Accepted' => 'Cerrado Aceptado', + 'Closed Lost' => 'Cerrado Perdido', + 'Closed Dead' => 'Cerrado Muerto', +); +$app_list_strings['sales_probability_dom'] = array ( + 'Prospecting' => '10', + 'Qualification' => '20', + 'Needs Analysis' => '25', + 'Value Proposition' => '30', + 'Id. Decision Makers' => '40', + 'Perception Analysis' => '50', + 'Proposal/Price Quote' => '65', + 'Negotiation/Review' => '80', + 'Closed Won' => '100', + 'Closed Lost' => '', +); +$app_list_strings['activity_dom'] = array ( + 'Call' => 'Llamada', + 'Meeting' => 'Reunión', + 'Task' => 'Tarea', + 'Email' => 'Email', + 'Note' => 'Nota', +); +$app_list_strings['salutation_dom'] = array ( + '' => '', + 'Mr.' => 'Sr.', + 'Ms.' => 'Sra.', + 'Mrs.' => 'Sra.', + 'Dr.' => 'Dr.', + 'Prof.' => 'Prof.', +); +$app_list_strings['reminder_time_options'] = array ( + 60 => '1 minuto antes', + 300 => '5 minutos antes', + 600 => '10 minutos antes', + 900 => '15 minutos antes', + 1800 => '30 minutos antes', + 3600 => '1 hora antes', + 7200 => '2 horas antes', + 10800 => '3 horas antes', + 18000 => '5 horas antes', + 86400 => '1 día antes', +); +$app_list_strings['task_priority_dom'] = array ( + 'High' => 'Alta', + 'Medium' => 'Media', + 'Low' => 'Baja', +); +$app_list_strings['task_status_dom'] = array ( + 'Not Started' => 'No Iniciada', + 'In Progress' => 'En Progreso', + 'Completed' => 'Completada', + 'Pending Input' => 'Pendiente de Información', + 'Deferred' => 'Aplazada', +); +$app_list_strings['meeting_status_dom'] = array ( + 'Planned' => 'Planificada', + 'Held' => 'Realizada', + 'Not Held' => 'No Realizada', +); +$app_list_strings['extapi_meeting_password'] = array ( + 'WebEx' => 'WebEx', +); +$app_list_strings['meeting_type_dom'] = array ( + 'Other' => 'Otro', + 'Sugar' => 'SugarCRM', +); +$app_list_strings['call_status_dom'] = array ( + 'Planned' => 'Planificada', + 'Held' => 'Realizada', + 'Not Held' => 'No Realizada', +); +$app_list_strings['call_direction_dom'] = array ( + 'Inbound' => 'Entrante', + 'Outbound' => 'Saliente', +); +$app_list_strings['lead_status_dom'] = array ( + '' => '', + 'New' => 'Nuevo', + 'Assigned' => 'Asignado', + 'In Process' => 'En Proceso', + 'Converted' => 'Convertido', + 'Recycled' => 'Reciclado', + 'Dead' => 'Muerto', +); +$app_list_strings['gender_list'] = array ( + 'male' => 'Masculino', + 'female' => 'Femenino', +); +$app_list_strings['case_status_dom'] = array ( + 'New' => 'Nuevo', + 'Assigned' => 'Asignado', + 'Closed' => 'Cerrado', + 'Pending Input' => 'Pendiente de Información', + 'Rejected' => 'Rechazado', + 'Duplicate' => 'Duplicado', +); +$app_list_strings['case_priority_dom'] = array ( + 'P1' => 'Alta', + 'P2' => 'Media', + 'P3' => 'Baja', +); +$app_list_strings['user_type_dom'] = array ( + 'RegularUser' => 'Usuario Normal', + 'Administrator' => 'Administrador', +); +$app_list_strings['user_status_dom'] = array ( + 'Active' => 'Activo', + 'Inactive' => 'Inactivo', +); +$app_list_strings['employee_status_dom'] = array ( + 'Active' => 'Activo', + 'Terminated' => 'Despedido', + 'Leave of Absence' => 'Excedencia', +); +$app_list_strings['messenger_type_dom'] = array ( + '' => '', + 'MSN' => 'MSN', + 'Yahoo!' => 'Yahoo!', + 'AOL' => 'AOL', +); +$app_list_strings['project_task_priority_options'] = array ( + 'High' => 'Alta', + 'Medium' => 'Media', + 'Low' => 'Baja', +); +$app_list_strings['project_task_status_options'] = array ( + 'Not Started' => 'No Iniciada', + 'In Progress' => 'En Progreso', + 'Completed' => 'Completeda', + 'Pending Input' => 'Pendiente de Información', + 'Deferred' => 'Retrasada', +); +$app_list_strings['project_task_utilization_options'] = array ( + 0 => 'ninguno', + 25 => '25', + 50 => '50', + 75 => '75', + 100 => '100', +); +$app_list_strings['project_status_dom'] = array ( + 'Draft' => 'Borrador', + 'In Review' => 'En Revisión', + 'Published' => 'Publicado', +); +$app_list_strings['project_duration_units_dom'] = array ( + 'Days' => 'Días', + 'Hours' => 'Horas', +); +$app_list_strings['project_priority_options'] = array ( + 'High' => 'Alta', + 'Medium' => 'Media', + 'Low' => 'Baja', +); +$app_list_strings['record_type_display'] = array ( + '' => '', + 'Accounts' => 'Cuenta', + 'Opportunities' => 'Oportunidad', + 'Cases' => 'Caso', + 'Leads' => 'Cliente Potencial', + 'Contacts' => 'Contacto', + 'Bugs' => 'Incidencia', + 'Project' => 'Proyecto', + 'Prospects' => 'Público Objetivo', + 'ProjectTask' => 'Tarea de Proyecto', + 'Tasks' => 'Tarea', +); +$app_list_strings['record_type_display_notes'] = array ( + 'Accounts' => 'Cuenta', + 'Contacts' => 'Contacto', + 'Opportunities' => 'Oportunidad', + 'Tasks' => 'Tarea', + 'Emails' => 'Email', + 'Bugs' => 'Incidencia', + 'Project' => 'Proyecto', + 'ProjectTask' => 'Tarea de Proyecto', + 'Prospects' => 'Público Objetivo', + 'Cases' => 'Caso', + 'Leads' => 'Cliente Potencial', + 'Meetings' => 'Reunión', + 'Calls' => 'Llamada', +); +$app_list_strings['parent_type_display'] = array ( + 'Accounts' => 'Cuenta', + 'Contacts' => 'Contacto', + 'Tasks' => 'Tarea', + 'Opportunities' => 'Oportunidad', + 'Bugs' => 'Incidencia', + 'Cases' => 'Caso', + 'Leads' => 'Cliente Potencial', + 'Project' => 'Proyecto', + 'ProjectTask' => 'Tarea de Proyecto', + 'Prospects' => 'Público Objetivo', +); +$app_list_strings['issue_priority_dom'] = array ( + 'Urgent' => 'Urgente', + 'High' => 'Alta', + 'Medium' => 'Media', + 'Low' => 'Baja', +); +$app_list_strings['issue_resolution_dom'] = array ( + '' => '', + 'Accepted' => 'Aceptado', + 'Duplicate' => 'Duplicado', + 'Closed' => 'Cerrado', + 'Out of Date' => 'Caducado', + 'Invalid' => 'No Válido', +); +$app_list_strings['issue_status_dom'] = array ( + 'New' => 'Nuevo', + 'Assigned' => 'Asignado', + 'Closed' => 'Cerrado', + 'Pending' => 'Pendiente', + 'Rejected' => 'Rechazado', +); +$app_list_strings['bug_priority_dom'] = array ( + 'Urgent' => 'Urgente', + 'High' => 'Alta', + 'Medium' => 'Media', + 'Low' => 'Baja', +); +$app_list_strings['bug_resolution_dom'] = array ( + '' => '', + 'Accepted' => 'Aceptado', + 'Duplicate' => 'Duplicado', + 'Fixed' => 'Corregido', + 'Out of Date' => 'Caducado', + 'Invalid' => 'No Válido', + 'Later' => 'Pospuesto', +); +$app_list_strings['bug_status_dom'] = array ( + 'New' => 'Nuevo', + 'Assigned' => 'Asignado', + 'Closed' => 'Cerrado', + 'Pending' => 'Pendiente', + 'Rejected' => 'Rechazado', +); +$app_list_strings['bug_type_dom'] = array ( + 'Defect' => 'Defecto', + 'Feature' => 'Característica', +); +$app_list_strings['case_type_dom'] = array ( + 'Administration' => 'Administración', + 'Product' => 'Producto', + 'User' => 'Usuario', +); +$app_list_strings['source_dom'] = array ( + '' => '', + 'Internal' => 'Interno', + 'Forum' => 'Foro', + 'Web' => 'Web', + 'InboundEmail' => 'Email', +); +$app_list_strings['product_category_dom'] = array ( + '' => '', + 'Accounts' => 'Cuentas', + 'Activities' => 'Actividades', + 'Bug Tracker' => 'Seguimiento de Incidencias', + 'Calendar' => 'Calendario', + 'Calls' => 'Llamadas', + 'Campaigns' => 'Campañas', + 'Cases' => 'Casos', + 'Contacts' => 'Contactos', + 'Currencies' => 'Monedas', + 'Dashboard' => 'Cuadro de Mando', + 'Documents' => 'Documentos', + 'Emails' => 'Emails', + 'Feeds' => 'Fuentes RSS', + 'Forecasts' => 'Previsiones', + 'Help' => 'Ayuda', + 'Home' => 'Inicio', + 'Leads' => 'Clientes Potenciales', + 'Meetings' => 'Reuniones', + 'Notes' => 'Notas', + 'Opportunities' => 'Oportunidades', + 'Outlook Plugin' => 'Plugin de Outlook', + 'Projects' => 'Proyectos', + 'Quotes' => 'Presupuestos', + 'Releases' => 'Lanzamientos', + 'RSS' => 'Fuentes RSS', + 'Studio' => 'Estudio', + 'Upgrade' => 'Actualización', + 'Users' => 'Usuarios', +); +$app_list_strings['campaign_status_dom'] = array ( + '' => '', + 'Planning' => 'Planificación', + 'Active' => 'Activa', + 'Inactive' => 'Inactiva', + 'Complete' => 'Completa', + 'In Queue' => 'En cola', + 'Sending' => 'En envío', +); +$app_list_strings['campaign_type_dom'] = array ( + '' => '', + 'Telesales' => 'Televenta', + 'Mail' => 'Correo', + 'Email' => 'Email', + 'Print' => 'Imprenta', + 'Web' => 'Web', + 'Radio' => 'Radio', + 'Television' => 'Televisión', + 'NewsLetter' => 'Boletín de Noticias', +); +$app_list_strings['newsletter_frequency_dom'] = array ( + '' => '', + 'Weekly' => 'Semanal', + 'Monthly' => 'Mensual', + 'Quarterly' => 'Trimestral', + 'Annually' => 'Anual', +); +$app_list_strings['notifymail_sendtype'] = array ( + 'SMTP' => 'SMTP', +); +$app_list_strings['dom_cal_month_long'] = array ( + 0 => '', + 1 => 'Enero', + 2 => 'Febrero', + 3 => 'Marzo', + 4 => 'Abril', + 5 => 'Mayo', + 6 => 'Junio', + 7 => 'Julio', + 8 => 'Agosto', + 9 => 'Septiembre', + 10 => 'Octubre', + 11 => 'Noviembre', + 12 => 'Diciembre', +); +$app_list_strings['dom_cal_month_short'] = array ( + 0 => '', + 1 => 'Ene', + 2 => 'Feb', + 3 => 'Mar', + 4 => 'Abr', + 5 => 'May', + 6 => 'Jun', + 7 => 'Jul', + 8 => 'Ago', + 9 => 'Sep', + 10 => 'Oct', + 11 => 'Nov', + 12 => 'Dic', +); +$app_list_strings['dom_cal_day_long'] = array ( + 0 => '', + 1 => 'Domingo', + 2 => 'Lunes', + 3 => 'Martes', + 4 => 'Miércoles', + 5 => 'Jueves', + 6 => 'Viernes', + 7 => 'Sábado', +); +$app_list_strings['dom_cal_day_short'] = array ( + 0 => '', + 1 => 'Dom', + 2 => 'Lun', + 3 => 'Mar', + 4 => 'Mié', + 5 => 'Jue', + 6 => 'Vie', + 7 => 'Sáb', +); +$app_list_strings['dom_meridiem_lowercase'] = array ( + 'am' => 'am', + 'pm' => 'pm', +); +$app_list_strings['dom_meridiem_uppercase'] = array ( + 'AM' => 'AM', + 'PM' => 'PM', +); +$app_list_strings['dom_report_types'] = array ( + 'tabular' => 'Filas y Columnas', + 'summary' => 'Resumen', + 'detailed_summary' => 'Resumen con detalles', + 'Matrix' => 'Matriz', +); +$app_list_strings['dom_email_types'] = array ( + 'out' => 'Enviado', + 'archived' => 'Archivado', + 'draft' => 'Borrador', + 'inbound' => 'Entrante', + 'campaign' => 'Campaña', +); +$app_list_strings['dom_email_status'] = array ( + 'archived' => 'Archivado', + 'closed' => 'Cerrado', + 'draft' => 'Borrador', + 'read' => 'Leído', + 'replied' => 'Respondido', + 'sent' => 'Enviado', + 'send_error' => 'Error de Envío', + 'unread' => 'No leído', +); +$app_list_strings['dom_email_archived_status'] = array ( + 'archived' => 'Archivado', +); +$app_list_strings['dom_email_server_type'] = array ( + '' => '--Ninguno--', + 'imap' => 'IMAP', +); +$app_list_strings['dom_mailbox_type'] = array ( + 'pick' => '--Ninguno--', + 'createcase' => 'Nuevo Caso', + 'bounce' => 'Gestión de Rebotes', +); +$app_list_strings['dom_email_distribution'] = array ( + '' => '--Ninguno--', + 'direct' => 'Asignación Directa', + 'roundRobin' => 'Round-Robin', + 'leastBusy' => 'Menos-Ocupado', +); +$app_list_strings['dom_email_distribution_for_auto_create'] = array ( + 'roundRobin' => 'Turno Rotatorio', + 'leastBusy' => 'Menos Ocupado', +); +$app_list_strings['dom_email_errors'] = array ( + 1 => 'Seleccione sólo un usuario cuando realice una Asignación Directa de elementos.', + 2 => 'Debe asignar Sólo Elementos Marcados cuando realice una Asignación Directa de elementos.', +); +$app_list_strings['dom_email_bool'] = array ( + 'bool_true' => 'Sí', + 'bool_false' => 'No', +); +$app_list_strings['dom_int_bool'] = array ( + 1 => 'Sí', + 0 => 'No', +); +$app_list_strings['dom_switch_bool'] = array ( + 'on' => 'Sí', + 'off' => 'No', + '' => 'No', +); +$app_list_strings['dom_email_link_type'] = array ( + 'sugar' => 'Cliente de correo de Sugar', + 'mailto' => 'Cliente de correo externo', +); +$app_list_strings['dom_email_editor_option'] = array ( + '' => 'Formato de correo por defecto', + 'html' => 'Correo HTML', + 'plain' => 'Correo con texto plano', +); +$app_list_strings['schedulers_times_dom'] = array ( + 'not run' => 'Hora de Ejecución Pasada, No Ejecutado', + 'ready' => 'Listo', + 'in progress' => 'En Progreso', + 'failed' => 'Fallado', + 'completed' => 'Completado', + 'no curl' => 'No ejecutado: cURL no está disponible', +); +$app_list_strings['scheduler_status_dom'] = array ( + 'Active' => 'Activo', + 'Inactive' => 'Inactivo', +); +$app_list_strings['scheduler_period_dom'] = array ( + 'min' => 'Minutos', + 'hour' => 'Horas', +); +$app_list_strings['forecast_schedule_status_dom'] = array ( + 'Active' => 'Activo', + 'Inactive' => 'Inactivo', +); +$app_list_strings['forecast_type_dom'] = array ( + 'Direct' => 'Directo', + 'Rollup' => 'Rollup', +); +$app_list_strings['document_category_dom'] = array ( + '' => '', + 'Marketing' => 'Marketing', + 'Knowledege Base' => 'Base de Conocimiento', + 'Sales' => 'Ventas', +); +$app_list_strings['document_subcategory_dom'] = array ( + '' => '', + 'Marketing Collateral' => 'Impresos de Marketing', + 'Product Brochures' => 'Folletos de Producto', + 'FAQ' => 'FAQ', +); +$app_list_strings['document_status_dom'] = array ( + 'Active' => 'Activo', + 'Draft' => 'Borrador', + 'FAQ' => 'FAQ', + 'Expired' => 'Caducado', + 'Under Review' => 'En Revisión', + 'Pending' => 'Pendiente', +); +$app_list_strings['document_template_type_dom'] = array ( + '' => '', + 'mailmerge' => 'Combinar correspondencia', + 'eula' => 'CLUF', + 'nda' => 'ANR', + 'license' => 'Contrato de Licencia', +); +$app_list_strings['dom_meeting_accept_options'] = array ( + 'accept' => 'Aceptar', + 'decline' => 'Rechazar', + 'tentative' => 'Tentativa', +); +$app_list_strings['dom_meeting_accept_status'] = array ( + 'accept' => 'Aceptado', + 'decline' => 'Rechazado', + 'tentative' => 'Tentativa', + 'none' => 'Ninguno', +); +$app_list_strings['duration_intervals'] = array ( + 0 => '00', + 15 => '15', + 30 => '30', + 45 => '45', +); +$app_list_strings['repeat_type_dom'] = array ( + '' => 'Ninguno', + 'Daily' => 'Diario', + 'Weekly' => 'Semanal', + 'Monthly' => 'Mensual', + 'Yearly' => 'Anual', +); +$app_list_strings['repeat_intervals'] = array ( + '' => '', + 'Daily' => 'Diario', + 'Weekly' => 'Semanal', + 'Monthly' => 'Mensual', + 'Yearly' => 'Anual', +); +$app_list_strings['duration_dom'] = array ( + '' => 'Ninguna', + 900 => '15 minutos', + 1800 => '30 minutos', + 2700 => '45 minutos', + 3600 => '1 hora', + 5400 => '1.5 horas', + 7200 => '2 horas', + 10800 => '3 horas', + 21600 => '6 horas', + 86400 => '1 día', + 172800 => '2 días', + 259200 => '3 días', + 604800 => '1 semana', +); +$app_list_strings['prospect_list_type_dom'] = array ( + 'default' => 'Por Defecto', + 'seed' => 'Cabeza de Serie', + 'exempt_domain' => 'Lista de Exclusión - Por Dominio', + 'exempt_address' => 'Lista de Exclusión - Por Dirección de Email', + 'exempt' => 'Lista de Exclusión - Por Id', + 'test' => 'Prueba', +); +$app_list_strings['email_settings_num_dom'] = array ( + 10 => '10', + 20 => '20', + 50 => '50', +); +$app_list_strings['email_marketing_status_dom'] = array ( + '' => '', + 'active' => 'Activo', + 'inactive' => 'Inactivo', +); +$app_list_strings['campainglog_activity_type_dom'] = array ( + '' => '', + 'targeted' => 'Mensaje Enviado/Intentado', + 'send error' => 'Mensajes Rebotados,Otra causa', + 'invalid email' => 'Mensajes Rebotados,Email no válido', + 'link' => 'Enlace', + 'viewed' => 'Mensaje Visto', + 'removed' => 'Descartado', + 'lead' => 'Clientes Potenciales Creados', + 'contact' => 'Contactos Creados', + 'blocked' => 'Excluidos por dirección o dominio', +); +$app_list_strings['campainglog_target_type_dom'] = array ( + 'Contacts' => 'Contactos', + 'Users' => 'Usuarios', + 'Prospects' => 'Público Objetivo', + 'Leads' => 'Clientes Potenciales', + 'Accounts' => 'Cuentas', +); +$app_list_strings['merge_operators_dom'] = array ( + 'like' => 'Contiene', + 'exact' => 'Exactamente', + 'start' => 'Comienza con', +); +$app_list_strings['custom_fields_importable_dom'] = array ( + 'true' => 'Sí', + 'false' => 'No', + 'required' => 'Requerido', +); +$app_list_strings['Elastic_boost_options'] = array ( + 0 => 'Inhabilitado', + 1 => 'Bajo impulso', + 2 => 'Medio impulso', + 3 => 'Alto impulso', +); +$app_list_strings['custom_fields_merge_dup_dom'] = array ( + 0 => 'Inhabilitado', + 1 => 'Habilitado', +); +$app_list_strings['navigation_paradigms'] = array ( + 'm' => 'Módulos', + 'gm' => 'Módulos Agrupados', +); +$app_list_strings['projects_priority_options'] = array ( + 'high' => 'Alta', + 'medium' => 'Media', + 'low' => 'Baja', +); +$app_list_strings['projects_status_options'] = array ( + 'notstarted' => 'No Iniciado', + 'inprogress' => 'En Progreso', + 'completed' => 'Completado', +); +$app_list_strings['chart_strings'] = array ( + 'expandlegend' => 'Expandir Leyenda', + 'collapselegend' => 'Contraer Leyenda', + 'clickfordrilldown' => 'Clic para Profundizar', + 'drilldownoptions' => 'Opciones de Profundización', + 'detailview' => 'Más Detalles...', + 'piechart' => 'Gráfico Circular', + 'groupchart' => 'Gráfico Agrupado', + 'stackedchart' => 'Gráfico Apilado', + 'barchart' => 'Gráfico de Barras', + 'horizontalbarchart' => 'Gráfico de Barras Horizontal', + 'linechart' => 'Gráfico de Líneas', + 'noData' => 'Datos no disponibles', + 'print' => 'Imprimir', + 'pieWedgeName' => 'secciones', +); +$app_list_strings['release_status_dom'] = array ( + 'Active' => 'Activo', + 'Inactive' => 'Inactivo', +); +$app_list_strings['email_settings_for_ssl'] = array ( + 0 => '', + 1 => 'SSL', + 2 => 'TLS', +); +$app_list_strings['import_enclosure_options'] = array ( + '\'' => 'Comillas Simples ($#39;)', + '"' => 'Comillas Dobles (")', + '' => 'Ninguno', + 'other' => 'Otro:', +); +$app_list_strings['import_delimeter_options'] = array ( + ',' => ',', + ';' => ';', + '\\t' => '\\t', + '.' => '.', + ':' => ':', + '|' => '|', + 'other' => 'Otro:', +); +$app_list_strings['link_target_dom'] = array ( + '_blank' => 'Nueva Ventana', + '_self' => 'Misma Ventana', +); +$app_list_strings['dashlet_auto_refresh_options'] = array ( + 4294967295 => 'No actualizar automáticamente', + 30 => 'Cada 30 segundos', + 60 => 'Cada minuto', + 180 => 'Cada 3 minutos', + 300 => 'Cada 5 minutos', + 600 => 'Cada 10 minutos', +); +$app_list_strings['dashlet_auto_refresh_options_admin'] = array ( + 4294967295 => 'Nunca', + 30 => 'Cada 30 segundos', + 60 => 'Cada minuto', + 180 => 'Cada 3 minutos', + 300 => 'Cada 5 minutos', + 600 => 'Cada 10 minutos', +); +$app_list_strings['date_range_search_dom'] = array ( + '=' => 'Igual a', + 'not_equal' => 'Distinto de', + 'greater_than' => 'Después de', + 'less_than' => 'Antes de', + 'last_7_days' => 'Últimos 7 días', + 'next_7_days' => 'Próximos 7 días', + 'last_30_days' => 'Últimos 30 días', + 'next_30_days' => 'Próximos 30 días', + 'last_month' => 'Último mes', + 'this_month' => 'Este mes', + 'next_month' => 'Próximo mes', + 'last_year' => 'Último año', + 'this_year' => 'Este año', + 'next_year' => 'Próximo año', + 'between' => 'Está entre', +); +$app_list_strings['numeric_range_search_dom'] = array ( + '=' => 'Igual a', + 'not_equal' => 'Distinto de', + 'greater_than' => 'Mayor que', + 'greater_than_equals' => 'Mayor o Igual que', + 'less_than' => 'Menor que', + 'less_than_equals' => 'Menor o Igual a', + 'between' => 'Está entre', +); +$app_list_strings['lead_conv_activity_opt'] = array ( + 'copy' => 'Copiar', + 'move' => 'Mover', + 'donothing' => 'No hacer nada', +); +$app_list_strings['library_type'] = array ( + 'Books' => 'Libro', + 'Music' => 'Música', + 'DVD' => 'DVD', + 'Magazines' => 'Revistas', +); +$app_list_strings['kbdocument_status_dom'] = array ( + 'Draft' => 'Borrador', + 'Expired' => 'Caducado', + 'In Review' => 'En Revisión', + 'Published' => 'Publicado', +); +$app_list_strings['kbadmin_actions_dom'] = array ( + '' => '--Acciones de Admin.--', + 'Create New Tag' => 'Crear Nueva EtiquetaTag', + 'Delete Tag' => 'Eliminar Etiqueta', + 'Rename Tag' => 'Renombrar Etiqueta', + 'Move Selected Articles' => 'Mover Artículos Seleccionados', + 'Apply Tags On Articles' => 'Aplicar Etiquetas a Artículos', + 'Delete Selected Articles' => 'Eliminar Artículos Seleccionados', +); +$app_list_strings['kbdocument_attachment_option_dom'] = array ( + '' => '', + 'some' => 'Tiene Adjuntos', + 'none' => 'No Tiene', + 'mime' => 'Especificar Tipo MIME', + 'name' => 'Especificar Nombre', +); +$app_list_strings['kbdocument_viewing_frequency_dom'] = array ( + '' => '', + 'Top_5' => '5 Principales', + 'Top_10' => '10 Principales', + 'Top_20' => '20 Principales', + 'Bot_5' => '5 Últimos', + 'Bot_10' => '10 Últimos', + 'Bot_20' => '20 Últimos', +); +$app_list_strings['kbdocument_canned_search'] = array ( + 'all' => 'Todos', + 'added' => 'Añadido en los Últimos 30 días', + 'pending' => 'Pendiente de mi Aprobación', + 'updated' => 'Actualizado en los Últimos 30 días', + 'faqs' => 'COMOs', +); +$app_list_strings['kbdocument_date_filter_options'] = array ( + '' => '', + 'on' => 'En', + 'before' => 'Antes de', + 'after' => 'Después de', + 'between_dates' => 'Está Entre', + 'last_7_days' => 'Últimos 7 Días', + 'next_7_days' => 'Próximos 7 Días', + 'last_month' => 'Último Mes', + 'this_month' => 'Este Mes', + 'next_month' => 'Próximo Mes', + 'last_30_days' => 'Últimos 30 Días', + 'next_30_days' => 'Próximos 30 Días', + 'last_year' => 'Último Año', + 'this_year' => 'Este Año', + 'next_year' => 'Próximo Año', + 'isnull' => 'Es Nulo', +); +$app_list_strings['countries_dom'] = array ( + '' => '', + 'ABU DHABI' => 'ABU DHABI', + 'ADEN' => 'ADEN', + 'AFGHANISTAN' => 'AFGHANISTAN', + 'ALBANIA' => 'ALBANIA', + 'ALGERIA' => 'ALGERIA', + 'AMERICAN SAMOA' => 'AMERICAN SAMOA', + 'ANDORRA' => 'ANDORRA', + 'ANGOLA' => 'ANGOLA', + 'ANTARCTICA' => 'ANTARCTICA', + 'ANTIGUA' => 'ANTIGUA', + 'ARGENTINA' => 'ARGENTINA', + 'ARMENIA' => 'ARMENIA', + 'ARUBA' => 'ARUBA', + 'AUSTRALIA' => 'AUSTRALIA', + 'AUSTRIA' => 'AUSTRIA', + 'AZERBAIJAN' => 'AZERBAIJAN', + 'BAHAMAS' => 'BAHAMAS', + 'BAHRAIN' => 'BAHRAIN', + 'BANGLADESH' => 'BANGLADESH', + 'BARBADOS' => 'BARBADOS', + 'BELARUS' => 'BELARUS', + 'BELGIUM' => 'BELGIUM', + 'BELIZE' => 'BELIZE', + 'BENIN' => 'BENIN', + 'BERMUDA' => 'BERMUDA', + 'BHUTAN' => 'BHUTAN', + 'BOLIVIA' => 'BOLIVIA', + 'BOSNIA' => 'BOSNIA', + 'BOTSWANA' => 'BOTSWANA', + 'BOUVET ISLAND' => 'BOUVET ISLAND', + 'BRAZIL' => 'BRAZIL', + 'BRITISH ANTARCTICA TERRITORY' => 'BRITISH ANTARCTICA TERRITORY', + 'BRITISH INDIAN OCEAN TERRITORY' => 'BRITISH INDIAN OCEAN TERRITORY', + 'BRITISH VIRGIN ISLANDS' => 'BRITISH VIRGIN ISLANDS', + 'BRITISH WEST INDIES' => 'BRITISH WEST INDIES', + 'BRUNEI' => 'BRUNEI', + 'BULGARIA' => 'BULGARIA', + 'BURKINA FASO' => 'BURKINA FASO', + 'BURUNDI' => 'BURUNDI', + 'CAMBODIA' => 'CAMBODIA', + 'CAMEROON' => 'CAMEROON', + 'CANADA' => 'CANADA', + 'CANAL ZONE' => 'CANAL ZONE', + 'CANARY ISLAND' => 'ISLAS CANARIAS', + 'CAPE VERDI ISLANDS' => 'CAPE VERDI ISLANDS', + 'CAYMAN ISLANDS' => 'ISLAS CAIMAN', + 'CEVLON' => 'CEVLON', + 'CHAD' => 'CHAD', + 'CHANNEL ISLAND UK' => 'CHANNEL ISLAND UK', + 'CHILE' => 'CHILE', + 'CHINA' => 'CHINA', + 'CHRISTMAS ISLAND' => 'CHRISTMAS ISLAND', + 'COCOS (KEELING) ISLAND' => 'COCOS (KEELING) ISLAND', + 'COLOMBIA' => 'COLOMBIA', + 'COMORO ISLANDS' => 'COMORO ISLANDS', + 'CONGO' => 'CONGO', + 'CONGO KINSHASA' => 'CONGO KINSHASA', + 'COOK ISLANDS' => 'COOK ISLANDS', + 'COSTA RICA' => 'COSTA RICA', + 'CROATIA' => 'CROACIA', + 'CUBA' => 'CUBA', + 'CURACAO' => 'CURACAO', + 'CYPRUS' => 'CHIPRE', + 'CZECH REPUBLIC' => 'REPÚBLICA CHECA', + 'DAHOMEY' => 'DAHOMEY', + 'DENMARK' => 'DINAMARCA', + 'DJIBOUTI' => 'YIBUTI', + 'DOMINICA' => 'DOMINICA', + 'DOMINICAN REPUBLIC' => 'REPÚBLICA DOMINICANA', + 'DUBAI' => 'DUBAI', + 'ECUADOR' => 'ECUADOR', + 'EGYPT' => 'EGIPTO', + 'EL SALVADOR' => 'EL SALVADOR', + 'EQUATORIAL GUINEA' => 'GUINEA ECUATORIAL', + 'ESTONIA' => 'ESTONIA', + 'ETHIOPIA' => 'ETHIOPIA', + 'FAEROE ISLANDS' => 'FAEROE ISLANDS', + 'FALKLAND ISLANDS' => 'FALKLAND ISLANDS', + 'FIJI' => 'FIJI', + 'FINLAND' => 'FINLANDIA', + 'FRANCE' => 'FRANCIA', + 'FRENCH GUIANA' => 'GUAYANA FRANCESA', + 'FRENCH POLYNESIA' => 'POLINESIA FRANCESA', + 'GABON' => 'GABON', + 'GAMBIA' => 'GAMBIA', + 'GEORGIA' => 'GEORGIA', + 'GERMANY' => 'ALEMANIA', + 'GHANA' => 'GHANA', + 'GIBRALTAR' => 'GIBRALTAR', + 'GREECE' => 'GRECIA', + 'GREENLAND' => 'GROENLANDIA', + 'GUADELOUPE' => 'GUADELOUPE', + 'GUAM' => 'GUAM', + 'GUATEMALA' => 'GUATEMALA', + 'GUINEA' => 'GUINEA', + 'GUYANA' => 'GUYANA', + 'HAITI' => 'HAITI', + 'HONDURAS' => 'HONDURAS', + 'HONG KONG' => 'HONG KONG', + 'HUNGARY' => 'HUNGRÍA', + 'ICELAND' => 'ISLANDIA', + 'IFNI' => 'IFNI', + 'INDIA' => 'INDIA', + 'INDONESIA' => 'INDONESIA', + 'IRAN' => 'IRAN', + 'IRAQ' => 'IRAQ', + 'IRELAND' => 'IRLANDA', + 'ISRAEL' => 'ISRAEL', + 'ITALY' => 'ITALIA', + 'IVORY COAST' => 'COSTA DE MARFIL', + 'JAMAICA' => 'JAMAICA', + 'JAPAN' => 'JAPON', + 'JORDAN' => 'JORDANIA', + 'KAZAKHSTAN' => 'KAZAJSTÁN', + 'KENYA' => 'KENIA', + 'KOREA' => 'KOREA', + 'KOREA, SOUTH' => 'COREA DEL SUR', + 'KUWAIT' => 'KUWAIT', + 'KYRGYZSTAN' => 'KIRGUISTÁN', + 'LAOS' => 'LAOS', + 'LATVIA' => 'LETONIA', + 'LEBANON' => 'LÍBANO', + 'LEEWARD ISLANDS' => 'ISLAS DE SOTAVENTO', + 'LESOTHO' => 'LESOTHO', + 'LIBYA' => 'LIBIA', + 'LIECHTENSTEIN' => 'LIECHTENSTEIN', + 'LITHUANIA' => 'LITUANIA', + 'LUXEMBOURG' => 'LUXEMBURGO', + 'MACAO' => 'MACAO', + 'MACEDONIA' => 'MACEDONIA', + 'MADAGASCAR' => 'MADAGASCAR', + 'MALAWI' => 'MALAWI', + 'MALAYSIA' => 'MALAYSIA', + 'MALDIVES' => 'MALDIVES', + 'MALI' => 'MALI', + 'MALTA' => 'MALTA', + 'MARTINIQUE' => 'MARTINIQUE', + 'MAURITANIA' => 'MAURITANIA', + 'MAURITIUS' => 'MAURITIUS', + 'MELANESIA' => 'MELANESIA', + 'MEXICO' => 'MÉXICO', + 'MOLDOVIA' => 'MOLDOVIA', + 'MONACO' => 'MONACO', + 'MONGOLIA' => 'MONGOLIA', + 'MOROCCO' => 'MARRUECOS', + 'MOZAMBIQUE' => 'MOZAMBIQUE', + 'MYANAMAR' => 'MYANAMAR', + 'NAMIBIA' => 'NAMIBIA', + 'NEPAL' => 'NEPAL', + 'NETHERLANDS' => 'PAÍSES BAJOS', + 'NETHERLANDS ANTILLES' => 'ANTILLAS HOLANDESAS', + 'NETHERLANDS ANTILLES NEUTRAL ZONE' => 'ANTILLAS HOLANDESAS NEUTRAL ZONE', + 'NEW CALADONIA' => 'NUEVA CALADONIA', + 'NEW HEBRIDES' => 'NEW HEBRIDES', + 'NEW ZEALAND' => 'NUEVA ZELANDA', + 'NICARAGUA' => 'NICARAGUA', + 'NIGER' => 'NIGER', + 'NIGERIA' => 'NIGERIA', + 'NORFOLK ISLAND' => 'ISLA NORFOLK', + 'NORWAY' => 'NORWAY', + 'OMAN' => 'OMAN', + 'OTHER' => 'OTHER', + 'PACIFIC ISLAND' => 'ISLA DEL PACIFICO', + 'PAKISTAN' => 'PAKISTAN', + 'PANAMA' => 'PANAMA', + 'PAPUA NEW GUINEA' => 'PAPUA NUEVA GUINEA', + 'PARAGUAY' => 'PARAGUAY', + 'PERU' => 'PERU', + 'PHILIPPINES' => 'FILIPINAS', + 'POLAND' => 'POLONIA', + 'PORTUGAL' => 'PORTUGAL', + 'PORTUGUESE TIMOR' => 'PORTUGUESE TIMOR', + 'PUERTO RICO' => 'PUERTO RICO', + 'QATAR' => 'QATAR', + 'REPUBLIC OF BELARUS' => 'REPÚBLICA DE BIELORRUSIA', + 'REPUBLIC OF SOUTH AFRICA' => 'REPÚBLICA DE SUDÁFRICA', + 'REUNION' => 'REUNION', + 'ROMANIA' => 'RUMANIA', + 'RUSSIA' => 'RUSIA', + 'RWANDA' => 'RUANDA', + 'RYUKYU ISLANDS' => 'RYUKYU ISLANDS', + 'SABAH' => 'SABAH', + 'SAN MARINO' => 'SAN MARINO', + 'SAUDI ARABIA' => 'ARABIA SAUDITA', + 'SENEGAL' => 'SENEGAL', + 'SERBIA' => 'SERBIA', + 'SEYCHELLES' => 'SEYCHELLES', + 'SIERRA LEONE' => 'SIERRA LEONE', + 'SINGAPORE' => 'SINGAPORE', + 'SLOVAKIA' => 'SLOVAKIA', + 'SLOVENIA' => 'SLOVENIA', + 'SOMALILIAND' => 'SOMALILIAND', + 'SOUTH AFRICA' => 'SUDÁFRICA', + 'SOUTH YEMEN' => 'SOUTH YEMEN', + 'SPAIN' => 'ESPAÑA', + 'SPANISH SAHARA' => 'SAHARA ESPAÑOL', + 'SRI LANKA' => 'SRI LANKA', + 'ST. KITTS AND NEVIS' => 'ST. KITTS AND NEVIS', + 'ST. LUCIA' => 'ST. LUCIA', + 'SUDAN' => 'SUDAN', + 'SURINAM' => 'SURINAM', + 'SW AFRICA' => 'SW AFRICA', + 'SWAZILAND' => 'SWAZILAND', + 'SWEDEN' => 'SUECIA', + 'SWITZERLAND' => 'SUIZA', + 'SYRIA' => 'SIRIA', + 'TAIWAN' => 'TAIWAN', + 'TAJIKISTAN' => 'TAJIKISTAN', + 'TANZANIA' => 'TANZANIA', + 'THAILAND' => 'THAILAND', + 'TONGA' => 'TONGA', + 'TRINIDAD' => 'TRINIDAD', + 'TUNISIA' => 'TUNISIA', + 'TURKEY' => 'TURKEY', + 'UGANDA' => 'UGANDA', + 'UKRAINE' => 'UCRANIA', + 'UNITED ARAB EMIRATES' => 'EMIRATOS ÁRABES UNIDOS', + 'UNITED KINGDOM' => 'REINO UNIDO', + 'UPPER VOLTA' => 'ALTO VOLTA', + 'URUGUAY' => 'URUGUAY', + 'US PACIFIC ISLAND' => 'EE.UU. ISLA DEL PACIFICO', + 'US VIRGIN ISLANDS' => 'ISLAS VÍRGENES DE EE.UU.', + 'USA' => 'EE.UU.', + 'UZBEKISTAN' => 'UZBEKISTÁN', + 'VANUATU' => 'VANUATU', + 'VATICAN CITY' => 'CIUDAD DEL VATICANO', + 'VENEZUELA' => 'VENEZUELA', + 'VIETNAM' => 'VIETNAM', + 'WAKE ISLAND' => 'WAKE ISLAND', + 'WEST INDIES' => 'ANTILLAS', + 'WESTERN SAHARA' => 'SAHARA OCCIDENTAL', + 'YEMEN' => 'YEMEN', + 'ZAIRE' => 'ZAIRE', + 'ZAMBIA' => 'ZAMBIA', + 'ZIMBABWE' => 'ZIMBABWE', +); +$app_list_strings['charset_dom'] = array ( + 'BIG-5' => 'BIG-5 (Taiwan y Hong Kong)', + 'CP1251' => 'CP1251 (Cirílico de MS)', + 'CP1252' => 'CP1252 (Europa Occidental y EEUU de Ms)', + 'EUC-CN' => 'EUC-CN (Chino Simplificado GB2312)', + 'EUC-JP' => 'EUC-JP (Japonés Unix)', + 'EUC-KR' => 'EUC-KR (Coreano)', + 'EUC-TW' => 'EUC-TW (Taiwanés)', + 'ISO-2022-JP' => 'ISO-2022-JP (Japonés)', + 'ISO-2022-KR' => 'ISO-2022-KR (Coreano)', + 'ISO-8859-1' => 'ISO-8859-1 (Europa Occidental y EEUU)', + 'ISO-8859-2' => 'ISO-8859-2 (Centroeuropa y Europa del Este)', + 'ISO-8859-3' => 'ISO-8859-3 (Latín 3)', + 'ISO-8859-4' => 'ISO-8859-4 (Latín 4)', + 'ISO-8859-5' => 'ISO-8859-5 (Cirílico)', + 'ISO-8859-6' => 'ISO-8859-6 (Árabe)', + 'ISO-8859-7' => 'ISO-8859-7 (Griego)', + 'ISO-8859-8' => 'ISO-8859-8 (Hebreo)', + 'ISO-8859-9' => 'ISO-8859-9 (Latín 5)', + 'ISO-8859-10' => 'ISO-8859-10 (Latín 6)', + 'ISO-8859-13' => 'ISO-8859-13 (Latín 7)', + 'ISO-8859-14' => 'ISO-8859-14 (Latín 8)', + 'ISO-8859-15' => 'ISO-8859-15 (Latín 9)', + 'KOI8-R' => 'KOI8-R (Cirílico Ruso)', + 'KOI8-U' => 'KOI8-U (Cirílico Ucraniano)', + 'SJIS' => 'SJIS (Japonés de MS)', + 'UTF-8' => 'UTF-8', +); +$app_list_strings['timezone_dom'] = array ( + 'Africa/Algiers' => 'Africa/Algiers', + 'Africa/Luanda' => 'Africa/Luanda', + 'Africa/Porto-Novo' => 'Africa/Porto-Novo', + 'Africa/Gaborone' => 'Africa/Gaborone', + 'Africa/Ouagadougou' => 'Africa/Ouagadougou', + 'Africa/Bujumbura' => 'Africa/Bujumbura', + 'Africa/Douala' => 'Africa/Douala', + 'Atlantic/Cape_Verde' => 'Atlantic/Cape_Verde', + 'Africa/Bangui' => 'Africa/Bangui', + 'Africa/Ndjamena' => 'Africa/Ndjamena', + 'Indian/Comoro' => 'Indian/Comoro', + 'Africa/Kinshasa' => 'Africa/Kinshasa', + 'Africa/Lubumbashi' => 'Africa/Lubumbashi', + 'Africa/Brazzaville' => 'Africa/Brazzaville', + 'Africa/Abidjan' => 'Africa/Abidjan', + 'Africa/Djibouti' => 'Africa/Djibouti', + 'Africa/Cairo' => 'Africa/Cairo', + 'Africa/Malabo' => 'Africa/Malabo', + 'Africa/Asmera' => 'Africa/Asmera', + 'Africa/Addis_Ababa' => 'Africa/Addis_Ababa', + 'Africa/Libreville' => 'Africa/Libreville', + 'Africa/Banjul' => 'Africa/Banjul', + 'Africa/Accra' => 'Africa/Accra', + 'Africa/Conakry' => 'Africa/Conakry', + 'Africa/Bissau' => 'Africa/Bissau', + 'Africa/Nairobi' => 'Africa/Nairobi', + 'Africa/Maseru' => 'Africa/Maseru', + 'Africa/Monrovia' => 'Africa/Monrovia', + 'Africa/Tripoli' => 'Africa/Tripoli', + 'Indian/Antananarivo' => 'Indian/Antananarivo', + 'Africa/Blantyre' => 'Africa/Blantyre', + 'Africa/Bamako' => 'Africa/Bamako', + 'Africa/Nouakchott' => 'Africa/Nouakchott', + 'Indian/Mauritius' => 'Indian/Mauritius', + 'Indian/Mayotte' => 'Indian/Mayotte', + 'Africa/Casablanca' => 'Africa/Casablanca', + 'Africa/El_Aaiun' => 'Africa/El_Aaiun', + 'Africa/Maputo' => 'Africa/Maputo', + 'Africa/Windhoek' => 'Africa/Windhoek', + 'Africa/Niamey' => 'Africa/Niamey', + 'Africa/Lagos' => 'Africa/Lagos', + 'Indian/Reunion' => 'Indian/Reunion', + 'Africa/Kigali' => 'Africa/Kigali', + 'Atlantic/St_Helena' => 'Atlantic/St_Helena', + 'Africa/Sao_Tome' => 'Africa/Sao_Tome', + 'Africa/Dakar' => 'Africa/Dakar', + 'Indian/Mahe' => 'Indian/Mahe', + 'Africa/Freetown' => 'Africa/Freetown', + 'Africa/Mogadishu' => 'Africa/Mogadishu', + 'Africa/Johannesburg' => 'Africa/Johannesburg', + 'Africa/Khartoum' => 'Africa/Khartoum', + 'Africa/Mbabane' => 'Africa/Mbabane', + 'Africa/Dar_es_Salaam' => 'Africa/Dar_es_Salaam', + 'Africa/Lome' => 'Africa/Lome', + 'Africa/Tunis' => 'Africa/Tunis', + 'Africa/Kampala' => 'Africa/Kampala', + 'Africa/Lusaka' => 'Africa/Lusaka', + 'Africa/Harare' => 'Africa/Harare', + 'Antarctica/Casey' => 'Antarctica/Casey', + 'Antarctica/Davis' => 'Antarctica/Davis', + 'Antarctica/Mawson' => 'Antarctica/Mawson', + 'Indian/Kerguelen' => 'Indian/Kerguelen', + 'Antarctica/DumontDUrville' => 'Antarctica/DumontDUrville', + 'Antarctica/Syowa' => 'Antarctica/Syowa', + 'Antarctica/Vostok' => 'Antarctica/Vostok', + 'Antarctica/Rothera' => 'Antarctica/Rothera', + 'Antarctica/Palmer' => 'Antarctica/Palmer', + 'Antarctica/McMurdo' => 'Antarctica/McMurdo', + 'Asia/Kabul' => 'Asia/Kabul', + 'Asia/Yerevan' => 'Asia/Yerevan', + 'Asia/Baku' => 'Asia/Baku', + 'Asia/Bahrain' => 'Asia/Bahrain', + 'Asia/Dhaka' => 'Asia/Dhaka', + 'Asia/Thimphu' => 'Asia/Thimphu', + 'Indian/Chagos' => 'Indian/Chagos', + 'Asia/Brunei' => 'Asia/Brunei', + 'Asia/Rangoon' => 'Asia/Rangoon', + 'Asia/Phnom_Penh' => 'Asia/Phnom_Penh', + 'Asia/Beijing' => 'Asia/Beijing', + 'Asia/Harbin' => 'Asia/Harbin', + 'Asia/Shanghai' => 'Asia/Shanghai', + 'Asia/Chongqing' => 'Asia/Chongqing', + 'Asia/Urumqi' => 'Asia/Urumqi', + 'Asia/Kashgar' => 'Asia/Kashgar', + 'Asia/Hong_Kong' => 'Asia/Hong_Kong', + 'Asia/Taipei' => 'Asia/Taipei', + 'Asia/Macau' => 'Asia/Macau', + 'Asia/Nicosia' => 'Asia/Nicosia', + 'Asia/Tbilisi' => 'Asia/Tbilisi', + 'Asia/Dili' => 'Asia/Dili', + 'Asia/Calcutta' => 'Asia/Calcutta', + 'Asia/Jakarta' => 'Asia/Jakarta', + 'Asia/Pontianak' => 'Asia/Pontianak', + 'Asia/Makassar' => 'Asia/Makassar', + 'Asia/Jayapura' => 'Asia/Jayapura', + 'Asia/Tehran' => 'Asia/Tehran', + 'Asia/Baghdad' => 'Asia/Baghdad', + 'Asia/Jerusalem' => 'Asia/Jerusalem', + 'Asia/Tokyo' => 'Asia/Tokyo', + 'Asia/Amman' => 'Asia/Amman', + 'Asia/Almaty' => 'Asia/Almaty', + 'Asia/Qyzylorda' => 'Asia/Qyzylorda', + 'Asia/Aqtobe' => 'Asia/Aqtobe', + 'Asia/Aqtau' => 'Asia/Aqtau', + 'Asia/Oral' => 'Asia/Oral', + 'Asia/Bishkek' => 'Asia/Bishkek', + 'Asia/Seoul' => 'Asia/Seoul', + 'Asia/Pyongyang' => 'Asia/Pyongyang', + 'Asia/Kuwait' => 'Asia/Kuwait', + 'Asia/Vientiane' => 'Asia/Vientiane', + 'Asia/Beirut' => 'Asia/Beirut', + 'Asia/Kuala_Lumpur' => 'Asia/Kuala_Lumpur', + 'Asia/Kuching' => 'Asia/Kuching', + 'Indian/Maldives' => 'Indian/Maldives', + 'Asia/Hovd' => 'Asia/Hovd', + 'Asia/Ulaanbaatar' => 'Asia/Ulaanbaatar', + 'Asia/Choibalsan' => 'Asia/Choibalsan', + 'Asia/Katmandu' => 'Asia/Katmandu', + 'Asia/Muscat' => 'Asia/Muscat', + 'Asia/Karachi' => 'Asia/Karachi', + 'Asia/Gaza' => 'Asia/Gaza', + 'Asia/Manila' => 'Asia/Manila', + 'Asia/Qatar' => 'Asia/Qatar', + 'Asia/Riyadh' => 'Asia/Riyadh', + 'Asia/Singapore' => 'Asia/Singapore', + 'Asia/Colombo' => 'Asia/Colombo', + 'Asia/Damascus' => 'Asia/Damascus', + 'Asia/Dushanbe' => 'Asia/Dushanbe', + 'Asia/Bangkok' => 'Asia/Bangkok', + 'Asia/Ashgabat' => 'Asia/Ashgabat', + 'Asia/Dubai' => 'Asia/Dubai', + 'Asia/Samarkand' => 'Asia/Samarkand', + 'Asia/Tashkent' => 'Asia/Tashkent', + 'Asia/Saigon' => 'Asia/Saigon', + 'Asia/Aden' => 'Asia/Aden', + 'Australia/Darwin' => 'Australia/Darwin', + 'Australia/Perth' => 'Australia/Perth', + 'Australia/Brisbane' => 'Australia/Brisbane', + 'Australia/Lindeman' => 'Australia/Lindeman', + 'Australia/Adelaide' => 'Australia/Adelaide', + 'Australia/Hobart' => 'Australia/Hobart', + 'Australia/Currie' => 'Australia/Currie', + 'Australia/Melbourne' => 'Australia/Melbourne', + 'Australia/Sydney' => 'Australia/Sydney', + 'Australia/Broken_Hill' => 'Australia/Broken_Hill', + 'Indian/Christmas' => 'Indian/Christmas', + 'Pacific/Rarotonga' => 'Pacific/Rarotonga', + 'Indian/Cocos' => 'Indian/Cocos', + 'Pacific/Fiji' => 'Pacific/Fiji', + 'Pacific/Gambier' => 'Pacific/Gambier', + 'Pacific/Marquesas' => 'Pacific/Marquesas', + 'Pacific/Tahiti' => 'Pacific/Tahiti', + 'Pacific/Guam' => 'Pacific/Guam', + 'Pacific/Tarawa' => 'Pacific/Tarawa', + 'Pacific/Enderbury' => 'Pacific/Enderbury', + 'Pacific/Kiritimati' => 'Pacific/Kiritimati', + 'Pacific/Saipan' => 'Pacific/Saipan', + 'Pacific/Majuro' => 'Pacific/Majuro', + 'Pacific/Kwajalein' => 'Pacific/Kwajalein', + 'Pacific/Truk' => 'Pacific/Truk', + 'Pacific/Ponape' => 'Pacific/Ponape', + 'Pacific/Kosrae' => 'Pacific/Kosrae', + 'Pacific/Nauru' => 'Pacific/Nauru', + 'Pacific/Noumea' => 'Pacific/Noumea', + 'Pacific/Auckland' => 'Pacific/Auckland', + 'Pacific/Chatham' => 'Pacific/Chatham', + 'Pacific/Niue' => 'Pacific/Niue', + 'Pacific/Norfolk' => 'Pacific/Norfolk', + 'Pacific/Palau' => 'Pacific/Palau', + 'Pacific/Port_Moresby' => 'Pacific/Port_Moresby', + 'Pacific/Pitcairn' => 'Pacific/Pitcairn', + 'Pacific/Pago_Pago' => 'Pacific/Pago_Pago', + 'Pacific/Apia' => 'Pacific/Apia', + 'Pacific/Guadalcanal' => 'Pacific/Guadalcanal', + 'Pacific/Fakaofo' => 'Pacific/Fakaofo', + 'Pacific/Tongatapu' => 'Pacific/Tongatapu', + 'Pacific/Funafuti' => 'Pacific/Funafuti', + 'Pacific/Johnston' => 'Pacific/Johnston', + 'Pacific/Midway' => 'Pacific/Midway', + 'Pacific/Wake' => 'Pacific/Wake', + 'Pacific/Efate' => 'Pacific/Efate', + 'Pacific/Wallis' => 'Pacific/Wallis', + 'Europe/London' => 'Europe/London', + 'Europe/Dublin' => 'Europe/Dublin', + 'WET' => 'WET', + 'CET' => 'CET', + 'MET' => 'MET', + 'EET' => 'EET', + 'Europe/Tirane' => 'Europe/Tirane', + 'Europe/Andorra' => 'Europe/Andorra', + 'Europe/Vienna' => 'Europe/Vienna', + 'Europe/Minsk' => 'Europe/Minsk', + 'Europe/Brussels' => 'Europe/Brussels', + 'Europe/Sofia' => 'Europe/Sofia', + 'Europe/Prague' => 'Europe/Prague', + 'Europe/Copenhagen' => 'Europe/Copenhagen', + 'Atlantic/Faeroe' => 'Atlantic/Faeroe', + 'America/Danmarkshavn' => 'America/Danmarkshavn', + 'America/Scoresbysund' => 'America/Scoresbysund', + 'America/Godthab' => 'America/Godthab', + 'America/Thule' => 'America/Thule', + 'Europe/Tallinn' => 'Europe/Tallinn', + 'Europe/Helsinki' => 'Europe/Helsinki', + 'Europe/Paris' => 'Europe/Paris', + 'Europe/Berlin' => 'Europe/Berlin', + 'Europe/Gibraltar' => 'Europe/Gibraltar', + 'Europe/Athens' => 'Europe/Athens', + 'Europe/Budapest' => 'Europe/Budapest', + 'Atlantic/Reykjavik' => 'Atlantic/Reykjavik', + 'Europe/Rome' => 'Europe/Rome', + 'Europe/Riga' => 'Europe/Riga', + 'Europe/Vaduz' => 'Europe/Vaduz', + 'Europe/Vilnius' => 'Europe/Vilnius', + 'Europe/Luxembourg' => 'Europe/Luxembourg', + 'Europe/Malta' => 'Europe/Malta', + 'Europe/Chisinau' => 'Europe/Chisinau', + 'Europe/Monaco' => 'Europe/Monaco', + 'Europe/Amsterdam' => 'Europe/Amsterdam', + 'Europe/Oslo' => 'Europe/Oslo', + 'Europe/Warsaw' => 'Europe/Warsaw', + 'Europe/Lisbon' => 'Europe/Lisbon', + 'Atlantic/Azores' => 'Atlantic/Azores', + 'Atlantic/Madeira' => 'Atlantic/Madeira', + 'Europe/Bucharest' => 'Europe/Bucharest', + 'Europe/Kaliningrad' => 'Europe/Kaliningrad', + 'Europe/Moscow' => 'Europe/Moscow', + 'Europe/Samara' => 'Europe/Samara', + 'Asia/Yekaterinburg' => 'Asia/Yekaterinburg', + 'Asia/Omsk' => 'Asia/Omsk', + 'Asia/Novosibirsk' => 'Asia/Novosibirsk', + 'Asia/Krasnoyarsk' => 'Asia/Krasnoyarsk', + 'Asia/Irkutsk' => 'Asia/Irkutsk', + 'Asia/Yakutsk' => 'Asia/Yakutsk', + 'Asia/Vladivostok' => 'Asia/Vladivostok', + 'Asia/Sakhalin' => 'Asia/Sakhalin', + 'Asia/Magadan' => 'Asia/Magadan', + 'Asia/Kamchatka' => 'Asia/Kamchatka', + 'Asia/Anadyr' => 'Asia/Anadyr', + 'Europe/Belgrade' => 'Europe/Belgrade', + 'Europe/Madrid' => 'Europe/Madrid', + 'Africa/Ceuta' => 'Africa/Ceuta', + 'Atlantic/Canary' => 'Atlantic/Canary', + 'Europe/Stockholm' => 'Europe/Stockholm', + 'Europe/Zurich' => 'Europe/Zurich', + 'Europe/Istanbul' => 'Europe/Istanbul', + 'Europe/Kiev' => 'Europe/Kiev', + 'Europe/Uzhgorod' => 'Europe/Uzhgorod', + 'Europe/Zaporozhye' => 'Europe/Zaporozhye', + 'Europe/Simferopol' => 'Europe/Simferopol', + 'America/New_York' => 'America/New_York', + 'America/Chicago' => 'America/Chicago', + 'America/North_Dakota/Center' => 'America/North_Dakota/Center', + 'America/Denver' => 'America/Denver', + 'America/Los_Angeles' => 'America/Los_Angeles', + 'America/Juneau' => 'America/Juneau', + 'America/Yakutat' => 'America/Yakutat', + 'America/Anchorage' => 'America/Anchorage', + 'America/Nome' => 'America/Nome', + 'America/Adak' => 'America/Adak', + 'Pacific/Honolulu' => 'Pacific/Honolulu', + 'America/Phoenix' => 'America/Phoenix', + 'America/Boise' => 'America/Boise', + 'America/Indiana/Indianapolis' => 'America/Indiana/Indianapolis', + 'America/Indiana/Marengo' => 'America/Indiana/Marengo', + 'America/Indiana/Knox' => 'America/Indiana/Knox', + 'America/Indiana/Vevay' => 'America/Indiana/Vevay', + 'America/Kentucky/Louisville' => 'America/Kentucky/Louisville', + 'America/Kentucky/Monticello' => 'America/Kentucky/Monticello', + 'America/Detroit' => 'America/Detroit', + 'America/Menominee' => 'America/Menominee', + 'America/St_Johns' => 'America/St_Johns', + 'America/Goose_Bay' => 'America/Goose_Bay', + 'America/Halifax' => 'America/Halifax', + 'America/Glace_Bay' => 'America/Glace_Bay', + 'America/Montreal' => 'America/Montreal', + 'America/Toronto' => 'America/Toronto', + 'America/Thunder_Bay' => 'America/Thunder_Bay', + 'America/Nipigon' => 'America/Nipigon', + 'America/Rainy_River' => 'America/Rainy_River', + 'America/Winnipeg' => 'America/Winnipeg', + 'America/Regina' => 'America/Regina', + 'America/Swift_Current' => 'America/Swift_Current', + 'America/Edmonton' => 'America/Edmonton', + 'America/Vancouver' => 'America/Vancouver', + 'America/Dawson_Creek' => 'America/Dawson_Creek', + 'America/Pangnirtung' => 'America/Pangnirtung', + 'America/Iqaluit' => 'America/Iqaluit', + 'America/Coral_Harbour' => 'America/Coral_Harbour', + 'America/Rankin_Inlet' => 'America/Rankin_Inlet', + 'America/Cambridge_Bay' => 'America/Cambridge_Bay', + 'America/Yellowknife' => 'America/Yellowknife', + 'America/Inuvik' => 'America/Inuvik', + 'America/Whitehorse' => 'America/Whitehorse', + 'America/Dawson' => 'America/Dawson', + 'America/Cancun' => 'America/Cancun', + 'America/Merida' => 'America/Merida', + 'America/Monterrey' => 'America/Monterrey', + 'America/Mexico_City' => 'America/Mexico_City', + 'America/Chihuahua' => 'America/Chihuahua', + 'America/Hermosillo' => 'America/Hermosillo', + 'America/Mazatlan' => 'America/Mazatlan', + 'America/Tijuana' => 'America/Tijuana', + 'America/Anguilla' => 'America/Anguilla', + 'America/Antigua' => 'America/Antigua', + 'America/Nassau' => 'America/Nassau', + 'America/Barbados' => 'America/Barbados', + 'America/Belize' => 'America/Belize', + 'Atlantic/Bermuda' => 'Atlantic/Bermuda', + 'America/Cayman' => 'America/Cayman', + 'America/Costa_Rica' => 'America/Costa_Rica', + 'America/Havana' => 'America/Havana', + 'America/Dominica' => 'America/Dominica', + 'America/Santo_Domingo' => 'America/Santo_Domingo', + 'America/El_Salvador' => 'America/El_Salvador', + 'America/Grenada' => 'America/Grenada', + 'America/Guadeloupe' => 'America/Guadeloupe', + 'America/Guatemala' => 'America/Guatemala', + 'America/Port-au-Prince' => 'America/Port-au-Prince', + 'America/Tegucigalpa' => 'America/Tegucigalpa', + 'America/Jamaica' => 'America/Jamaica', + 'America/Martinique' => 'America/Martinique', + 'America/Montserrat' => 'America/Montserrat', + 'America/Managua' => 'America/Managua', + 'America/Panama' => 'America/Panama', + 'America/Puerto_Rico' => 'America/Puerto_Rico', + 'America/St_Kitts' => 'America/St_Kitts', + 'America/St_Lucia' => 'America/St_Lucia', + 'America/Miquelon' => 'America/Miquelon', + 'America/St_Vincent' => 'America/St_Vincent', + 'America/Grand_Turk' => 'America/Grand_Turk', + 'America/Tortola' => 'America/Tortola', + 'America/St_Thomas' => 'America/St_Thomas', + 'America/Argentina/Buenos_Aires' => 'America/Argentina/Buenos_Aires', + 'America/Argentina/Cordoba' => 'America/Argentina/Cordoba', + 'America/Argentina/Tucuman' => 'America/Argentina/Tucuman', + 'America/Argentina/La_Rioja' => 'America/Argentina/La_Rioja', + 'America/Argentina/San_Juan' => 'America/Argentina/San_Juan', + 'America/Argentina/Jujuy' => 'America/Argentina/Jujuy', + 'America/Argentina/Catamarca' => 'America/Argentina/Catamarca', + 'America/Argentina/Mendoza' => 'America/Argentina/Mendoza', + 'America/Argentina/Rio_Gallegos' => 'America/Argentina/Rio_Gallegos', + 'America/Argentina/Ushuaia' => 'America/Argentina/Ushuaia', + 'America/Aruba' => 'America/Aruba', + 'America/La_Paz' => 'America/La_Paz', + 'America/Noronha' => 'America/Noronha', + 'America/Belem' => 'America/Belem', + 'America/Fortaleza' => 'America/Fortaleza', + 'America/Recife' => 'America/Recife', + 'America/Araguaina' => 'America/Araguaina', + 'America/Maceio' => 'America/Maceio', + 'America/Bahia' => 'America/Bahia', + 'America/Sao_Paulo' => 'America/Sao_Paulo', + 'America/Campo_Grande' => 'America/Campo_Grande', + 'America/Cuiaba' => 'America/Cuiaba', + 'America/Porto_Velho' => 'America/Porto_Velho', + 'America/Boa_Vista' => 'America/Boa_Vista', + 'America/Manaus' => 'America/Manaus', + 'America/Eirunepe' => 'America/Eirunepe', + 'America/Rio_Branco' => 'America/Rio_Branco', + 'America/Santiago' => 'America/Santiago', + 'Pacific/Easter' => 'Pacific/Easter', + 'America/Bogota' => 'America/Bogota', + 'America/Curacao' => 'America/Curacao', + 'America/Guayaquil' => 'America/Guayaquil', + 'Pacific/Galapagos' => 'Pacific/Galapagos', + 'Atlantic/Stanley' => 'Atlantic/Stanley', + 'America/Cayenne' => 'America/Cayenne', + 'America/Guyana' => 'America/Guyana', + 'America/Asuncion' => 'America/Asuncion', + 'America/Lima' => 'America/Lima', + 'Atlantic/South_Georgia' => 'Atlantic/South_Georgia', + 'America/Paramaribo' => 'America/Paramaribo', + 'America/Port_of_Spain' => 'America/Port_of_Spain', + 'America/Montevideo' => 'America/Montevideo', + 'America/Caracas' => 'America/Caracas', +); +$app_list_strings['eapm_list'] = array ( + 'Sugar' => 'Sugar', + 'WebEx' => 'WebEx', + 'GoToMeeting' => 'GoToMeeting', + 'IBMSmartCloud' => 'IBM SmartCloud', + 'Google' => 'Google', + 'Box' => 'Box.net', + 'Facebook' => 'Facebook', + 'Twitter' => 'Twitter', +); +$app_list_strings['eapm_list_import'] = array ( + 'Google' => 'Contactos de Google', +); +$app_list_strings['eapm_list_documents'] = array ( + 'Google' => 'Documentos de Google', +); +$app_list_strings['token_status'] = array ( + 1 => 'Solicitud', + 2 => 'Acceso', + 3 => 'Invalido', +); +$app_list_strings['emailTemplates_type_list'] = array ( + '' => '', + 'campaign' => 'Campaña', + 'email' => 'Email', +); +$app_list_strings['emailTemplates_type_list_campaigns'] = array ( + '' => '', + 'campaign' => 'Campaña', +); +$app_list_strings['emailTemplates_type_list_no_workflow'] = array ( + '' => '', + 'campaign' => 'Campaña', + 'email' => 'Email', +); +$app_list_strings['language_pack_name'] = 'Español'; + +$app_strings = array ( + 'LBL_TOUR_NEXT' => 'Siguiente', + 'LBL_TOUR_SKIP' => 'Saltar', + 'LBL_TOUR_BACK' => 'Atrás', + 'LBL_TOUR_CLOSE' => 'Cerrar:', + 'LBL_TOUR_TAKE_TOUR' => 'Visita guiada', + 'LBL_MY_AREA_LINKS' => 'Mi área de enlaces:', + 'LBL_GETTINGAIR' => 'Cogiendo Aire', + 'LBL_WELCOMEBAR' => 'Bienvenido', + 'LBL_ADVANCEDSEARCH' => 'Búsqueda avanzada', + 'LBL_MOREDETAIL' => 'Más detalles', + 'LBL_EDIT_INLINE' => 'Editar en línea', + 'LBL_VIEW_INLINE' => 'Ver', + 'LBL_BASIC_SEARCH' => 'Buscar', + 'LBL_PROJECT_MINUS' => 'Quitar', + 'LBL_PROJECT_PLUS' => 'Añadir', + 'LBL_Blank' => ' ', + 'LBL_ICON_COLUMN_1' => 'Columna', + 'LBL_ICON_COLUMN_2' => '2 columnas', + 'LBL_ICON_COLUMN_3' => '3 Columnas', + 'LBL_ADVANCED_SEARCH' => 'Búsqueda avanzada', + 'LBL_ID_FF_ADD' => 'Añadir', + 'LBL_HIDE_SHOW' => 'Ocultar/Mostrar', + 'LBL_DELETE_INLINE' => 'Eliminar', + 'LBL_PLUS_INLINE' => 'Añadir', + 'LBL_ID_FF_CLEAR' => 'Limpiar', + 'LBL_ID_FF_VCARD' => 'vCard', + 'LBL_ID_FF_REMOVE' => 'Quitar', + 'LBL_ADD' => 'Añadir', + 'LBL_COMPANY_LOGO' => 'Logo compañia', + 'LBL_JS_CALENDAR' => 'Calendario', + 'LBL_ADVANCED' => 'Avanzado', + 'LBL_BASIC' => 'Básico', + 'LBL_MODULE_FILTER' => 'Filtrar por', + 'LBL_CONNECTORS_POPUPS' => 'Conectores Popups', + 'LBL_CLOSEINLINE' => 'Cerrado', + 'LBL_EDITINLINE' => 'Editar', + 'LBL_VIEWINLINE' => 'Ver', + 'LBL_INFOINLINE' => 'Información', + 'LBL_POWERED_BY_SUGARCRM' => 'Desarrollado por SugarCRM', + 'LBL_PRINT' => 'Imprimir', + 'LBL_HELP' => 'Ayuda', + 'LBL_ID_FF_SELECT' => 'Seleccionar', + 'DEFAULT' => 'Básico', + 'LBL_SORT' => 'Ordenar', + 'LBL_OUTBOUND_EMAIL_ADD_SERVER' => 'Agregar Servidor...', + 'LBL_EMAIL_SMTP_SSL_OR_TLS' => '¿Habilitar SMTP sobre SSL o TLS?', + 'LBL_NO_ACTION' => 'No hay ninguna acción con ese nombre.', + 'LBL_NO_DATA' => 'Sin Datos', + 'LBL_ROUTING_ADD_RULE' => 'Agregar Regla', + 'LBL_ROUTING_ALL' => 'Al menos', + 'LBL_ROUTING_ANY' => 'Cualquiera', + 'LBL_ROUTING_BREAK' => '-', + 'LBL_ROUTING_BUTTON_CANCEL' => 'Cancelar', + 'LBL_ROUTING_BUTTON_SAVE' => 'Guardar Regla', + 'LBL_ROUTING_ACTIONS_COPY_MAIL' => 'Copiar Mail', + 'LBL_ROUTING_ACTIONS_DELETE_BEAN' => 'Eliminar Objeto Sugar', + 'LBL_ROUTING_ACTIONS_DELETE_FILE' => 'Eliminar Archivo', + 'LBL_ROUTING_ACTIONS_DELETE_MAIL' => 'Eliminar Email', + 'LBL_ROUTING_ACTIONS_FORWARD' => 'Reenviar Email', + 'LBL_ROUTING_ACTIONS_MARK_FLAGGED' => 'Marcar Email para Seguimiento', + 'LBL_ROUTING_ACTIONS_MARK_READ' => 'Marcar como Leído', + 'LBL_ROUTING_ACTIONS_MARK_UNREAD' => 'Marcar como No leído', + 'LBL_ROUTING_ACTIONS_MOVE_MAIL' => 'Mover Email', + 'LBL_ROUTING_ACTIONS_PEFORM' => 'Realizar las siguientes acciones', + 'LBL_ROUTING_ACTIONS_REPLY' => 'Responder al Email', + 'LBL_ROUTING_CHECK_RULE' => 'Se ha detectado un error:', + 'LBL_ROUTING_CHECK_RULE_DESC' => 'Por favor, verifique todos los campos que han sido marcados.', + 'LBL_ROUTING_CONFIRM_DELETE' => '¿Está seguro de que desea eliminar esta regla?
Esta operación no puede hacerse atrás.', + 'LBL_ROUTING_FLAGGED' => 'conjunto de marcas de seguimiento', + 'LBL_ROUTING_FORM_DESC' => 'Las reglas se activan inmediatamente tras ser guardadas.', + 'LBL_ROUTING_FW' => 'RV:', + 'LBL_ROUTING_LIST_TITLE' => 'Reglas', + 'LBL_ROUTING_MATCH' => 'Si', + 'LBL_ROUTING_MATCH_2' => 'de las siguientes condiciones se cumple:', + 'LBL_NOTIFICATIONS' => 'Notificaciones', + 'LBL_ROUTING_MATCH_CC_ADDR' => 'CC', + 'LBL_ROUTING_MATCH_DESCRIPTION' => 'Contenido del Cuerpo', + 'LBL_ROUTING_MATCH_FROM_ADDR' => 'De', + 'LBL_ROUTING_MATCH_NAME' => 'Asunto', + 'LBL_ROUTING_MATCH_PRIORITY_HIGH' => 'Alta Prioridad', + 'LBL_ROUTING_MATCH_PRIORITY_NORMAL' => 'Prioridad Normal', + 'LBL_ROUTING_MATCH_PRIORITY_LOW' => 'Baja Prioridad', + 'LBL_ROUTING_MATCH_TO_ADDR' => 'A', + 'LBL_ROUTING_MATCH_TYPE_MATCH' => 'Contiene', + 'LBL_ROUTING_MATCH_TYPE_NOT_MATCH' => 'No contiene', + 'LBL_ROUTING_NAME' => 'Nombre de Regla', + 'LBL_ROUTING_NEW_NAME' => 'Nueva Regla', + 'LBL_ROUTING_ONE_MOMENT' => 'Un momento, por favor...', + 'LBL_ROUTING_ORIGINAL_MESSAGE_FOLLOWS' => 'Mensaje original a continuación.', + 'LBL_ROUTING_RE' => 'RE:', + 'LBL_ROUTING_SAVING_RULE' => 'Guardando Regla', + 'LBL_ROUTING_SUB_DESC' => 'Las reglas marcadas están activas. Haga clic en un nombre para editarlas.', + 'LBL_ROUTING_TO' => 'a', + 'LBL_ROUTING_TO_ADDRESS' => 'a la dirección', + 'LBL_ROUTING_WITH_TEMPLATE' => 'con la plantilla', + 'NTC_OVERWRITE_ADDRESS_PHONE_CONFIRM' => 'Los campos Teléfono y Dirección de su formulario ya tienen valor asignado. Para sobrescribir dichos valores con el teléfono/dirección de la Cuenta que ha seleccionado, haga clic en "Aceptar". Para mantener los valores actuales, haga clic en "Cancelar".', + 'LBL_DROP_HERE' => '[Soltar Aquí]', + 'LBL_EMAIL_ACCOUNTS_EDIT' => 'Editar', + 'LBL_EMAIL_ACCOUNTS_GMAIL_DEFAULTS' => 'Establecer configuración para Gmail™', + 'LBL_EMAIL_ACCOUNTS_NAME' => 'Nombre', + 'LBL_EMAIL_ACCOUNTS_OUTBOUND' => 'Propiedades del Servidor de Correo Saliente', + 'LBL_EMAIL_ACCOUNTS_SENDTYPE' => 'Agente de transferencia de correo (MTA)', + 'LBL_EMAIL_ACCOUNTS_SMTPAUTH_REQ' => '¿Usar Autenticación SMTP?', + 'LBL_EMAIL_ACCOUNTS_SMTPPASS' => 'Contraseña SMTP', + 'LBL_EMAIL_ACCOUNTS_SMTPPORT' => 'Puerto SMTP', + 'LBL_EMAIL_ACCOUNTS_SMTPSERVER' => 'Servidor SMTP', + 'LBL_EMAIL_ACCOUNTS_SMTPSSL' => 'Usar SSL en la conexión', + 'LBL_EMAIL_ACCOUNTS_SMTPUSER' => 'Nombre de usuario SMTP', + 'LBL_EMAIL_ACCOUNTS_SMTPDEFAULT' => 'Por Defecto', + 'LBL_EMAIL_WARNING_MISSING_USER_CREDS' => 'Aviso: Falta el nombre de usuario y la contraseña para la cuenta de correo saliente.', + 'LBL_EMAIL_ACCOUNTS_SMTPUSER_REQD' => 'Hace falta el nombre de usuario SMTP', + 'LBL_EMAIL_ACCOUNTS_SMTPPASS_REQD' => 'Hace falta la contraseña SMTP', + 'LBL_EMAIL_ACCOUNTS_TITLE' => 'Administración de Cuentas de Correo', + 'LBL_EMAIL_POP3_REMOVE_MESSAGE' => 'El Protocolo de Servidores de Correo de tipo POP3 no estará soportado en la siguiente versión. Sólo se soportará IMAP.', + 'LBL_EMAIL_ACCOUNTS_SUBTITLE' => 'Configurar Cuentas de Correo para ver correos entrantes de sus cuentas de correo.', + 'LBL_EMAIL_ACCOUNTS_OUTBOUND_SUBTITLE' => 'Proporcionar información del servidor de correo SMTP a utilizar para el correo saliente en Cuentas de Correo.', + 'LBL_EMAIL_ADD' => 'Agregar Dirección', + 'LBL_EMAIL_ADDRESS_BOOK_ADD' => 'Hecho', + 'LBL_EMAIL_ADDRESS_BOOK_CLEAR' => 'Borrar', + 'LBL_EMAIL_ADDRESS_BOOK_ADD_TO' => 'Para:', + 'LBL_EMAIL_ADDRESS_BOOK_ADD_CC' => 'Cc:', + 'LBL_EMAIL_ADDRESS_BOOK_ADD_BCC' => 'Cco:', + 'LBL_EMAIL_ADDRESS_BOOK_ADRRESS_TYPE' => 'Para/Cc/Cco', + 'LBL_EMAIL_ADDRESS_BOOK_ADD_LIST' => 'Nueva Lista', + 'LBL_EMAIL_ADDRESS_BOOK_EMAIL_ADDR' => 'Dirección de Email', + 'LBL_EMAIL_ADDRESS_BOOK_ERR_NOT_CONTACT' => 'Sólo se permite la edición de Contactos, de momento.', + 'LBL_EMAIL_ADDRESS_BOOK_FILTER' => 'Filtro', + 'LBL_EMAIL_ADDRESS_BOOK_FIRST_NAME' => 'Nombre/Cuenta', + 'LBL_EMAIL_ADDRESS_BOOK_LAST_NAME' => 'Apellidos', + 'LBL_EMAIL_ADDRESS_BOOK_MY_CONTACTS' => 'Mis Contactos', + 'LBL_EMAIL_ADDRESS_BOOK_MY_LISTS' => 'Mis Listas de Correo', + 'LBL_EMAIL_ADDRESS_BOOK_NAME' => 'Nombre', + 'LBL_EMAIL_ADDRESS_BOOK_NOT_FOUND' => 'No se han encontrado ninguna dirección', + 'LBL_EMAIL_ADDRESS_BOOK_SAVE_AND_ADD' => 'Guardar y Agregar a la Libreta de Direcciones', + 'LBL_EMAIL_ADDRESS_BOOK_SEARCH' => 'Búsqueda', + 'LBL_EMAIL_ADDRESS_BOOK_SELECT_TITLE' => 'Seleccionar Destinatarios de Correo', + 'LBL_EMAIL_ADDRESS_BOOK_TITLE' => 'Libreta de Direcciones', + 'LBL_EMAIL_REPORTS_TITLE' => 'Informes', + 'LBL_EMAIL_REMOVE_SMTP_WARNING' => '¡Aviso! La cuenta de correo saliente que está intentando eliminar está asociada a una cuenta de correo entrante existente. ¿Está seguro de que quiere continuar?', + 'LBL_EMAIL_ADDRESSES' => 'Email', + 'LBL_EMAIL_ADDRESS_PRIMARY' => 'Dirección de Email', + 'LBL_EMAIL_ADDRESSES_TITLE' => 'Direcciones de Email', + 'LBL_EMAIL_ARCHIVE_TO_SUGAR' => 'Importar a Sugar', + 'LBL_EMAIL_ASSIGNMENT' => 'Asignación', + 'LBL_EMAIL_ATTACH_FILE_TO_EMAIL' => 'Adjuntar', + 'LBL_EMAIL_ATTACHMENT' => 'Adjuntar', + 'LBL_EMAIL_ATTACHMENTS' => 'Desde el Equipo Local', + 'LBL_EMAIL_ATTACHMENTS2' => 'Desde Documentos Sugar', + 'LBL_EMAIL_ATTACHMENTS3' => 'Adjuntos de Plantilla', + 'LBL_EMAIL_ATTACHMENTS_FILE' => 'Archivo', + 'LBL_EMAIL_ATTACHMENTS_DOCUMENT' => 'Documento', + 'LBL_EMAIL_ATTACHMENTS_EMBEDED' => 'Incrustado', + 'LBL_EMAIL_BCC' => 'CCO', + 'LBL_EMAIL_CANCEL' => 'Cancelar', + 'LBL_EMAIL_CC' => 'CC', + 'LBL_EMAIL_CHARSET' => 'Juego de Caracteres', + 'LBL_EMAIL_CHECK' => 'Comprobar Correo', + 'LBL_EMAIL_CHECKING_NEW' => 'Comprobando Correo Nuevo', + 'LBL_EMAIL_CHECKING_DESC' => 'Un momento, por favor...

Si es la primera comprobación para esta cuenta de correo, puede tardar un poco.', + 'LBL_EMAIL_CLOSE' => 'Cerrar', + 'LBL_EMAIL_COFFEE_BREAK' => 'Comprobando Correo Nuevo.

Las cuentas de correo con gran volumen pueden tardar una cantidad considerable de tiempo.', + 'LBL_EMAIL_COMMON' => 'Común', + 'LBL_EMAIL_COMPOSE' => 'Correo', + 'LBL_EMAIL_COMPOSE_ERR_NO_RECIPIENTS' => 'Por favor, introduzca los destinatarios de este correo.', + 'LBL_EMAIL_COMPOSE_LINK_TO' => 'Asociar con', + 'LBL_EMAIL_COMPOSE_NO_BODY' => 'El cuerpo de este mensaje está vacío. ¿Enviar de todas formas?', + 'LBL_EMAIL_COMPOSE_NO_SUBJECT' => 'Este mensaje no tiene asunto. ¿Enviar de todas formas?', + 'LBL_EMAIL_COMPOSE_NO_SUBJECT_LITERAL' => '(sin asunto)', + 'LBL_EMAIL_COMPOSE_READ' => 'Leer y Redactar Correo', + 'LBL_EMAIL_COMPOSE_SEND_FROM' => 'Enviar Cuenta de Correo', + 'LBL_EMAIL_COMPOSE_OPTIONS' => 'Opciones', + 'LBL_EMAIL_COMPOSE_INVALID_ADDRESS' => 'Por favor, introduzca una dirección de correo válida para los campos Para, CC y CCO', + 'LBL_EMAIL_CONFIRM_CLOSE' => '¿Descartar este correo?', + 'LBL_EMAIL_CONFIRM_DELETE' => '¿Desea quitar estas entradas de su Libreta de Direcciones?', + 'LBL_EMAIL_CONFIRM_DELETE_SIGNATURE' => '¿Está seguro de que desea eliminar esta firma?', + 'LBL_EMAIL_CREATE_NEW' => '--Crear Al Guardar--', + 'LBL_EMAIL_MULT_GROUP_FOLDER_ACCOUNTS' => 'Múltiple', + 'LBL_EMAIL_MULT_GROUP_FOLDER_ACCOUNTS_EMPTY' => 'Vacío', + 'LBL_EMAIL_DATE_SENT_BY_SENDER' => 'Fecha de Envío por Remitente', + 'LBL_EMAIL_DATE_RECEIVED' => 'Fecha de Recepción', + 'LBL_EMAIL_ASSIGNED_TO_USER' => 'Asignado a Usuario', + 'LBL_EMAIL_DATE_TODAY' => 'Hoy', + 'LBL_EMAIL_DATE_YESTERDAY' => 'Ayer', + 'LBL_EMAIL_DD_TEXT' => 'email(s) seleccionados.', + 'LBL_EMAIL_DEFAULTS' => 'Por defecto', + 'LBL_EMAIL_DELETE' => 'Eliminar', + 'LBL_EMAIL_DELETE_CONFIRM' => '¿Eliminar mensajes seleccionados?', + 'LBL_EMAIL_DELETE_SUCCESS' => 'Email eliminado satisfactoriamente.', + 'LBL_EMAIL_DELETING_MESSAGE' => 'Eliminando Mensaje', + 'LBL_EMAIL_DETAILS' => 'Detalles', + 'LBL_EMAIL_DISPLAY_MSG' => 'Mostrando emails {0} - {1} de {2}', + 'LBL_EMAIL_ADDR_DISPLAY_MSG' => 'Mostrando direcciones de email {0} - {1} de {2}', + 'LBL_EMAIL_EDIT_CONTACT' => 'Editar Contacto', + 'LBL_EMAIL_EDIT_CONTACT_WARN' => 'Sólo se utilizará la Dirección principal de cada Contacto.', + 'LBL_EMAIL_EDIT_MAILING_LIST' => 'Editar Lista de Correo', + 'LBL_EMAIL_EMPTYING_TRASH' => 'Vaciando Papelera', + 'LBL_EMAIL_DELETING_OUTBOUND' => 'Eliminando servidor saliente', + 'LBL_EMAIL_CLEARING_CACHE_FILES' => 'Limpiando archivos de la caché', + 'LBL_EMAIL_EMPTY_MSG' => 'No hay emails que mostrar.', + 'LBL_EMAIL_EMPTY_ADDR_MSG' => 'No hay direcciones de correo que mostrar.', + 'LBL_EMAIL_ERROR_ADD_GROUP_FOLDER' => 'El nombre de carpeta debe ser único y no vacío. Por favor, inténtelo de nuevo.', + 'LBL_EMAIL_ERROR_DELETE_GROUP_FOLDER' => 'No puede borrarse la carpeta. O la carpeta o sus hijos tienen correos o una bandeja de correo asociada.', + 'LBL_EMAIL_ERROR_CANNOT_FIND_NODE' => 'No se ha podido determinar la carpeta pretendida a partir del contexto. Inténtelo de nuevo.', + 'LBL_EMAIL_ERROR_CHECK_IE_SETTINGS' => 'Por favor, compruebe su configuración.', + 'LBL_EMAIL_ERROR_CONTACT_NAME' => 'Por favor, asegúrese de que introduce un apellido.', + 'LBL_EMAIL_ERROR_DESC' => 'Se han detectado errores:', + 'LBL_EMAIL_DELETE_ERROR_DESC' => 'No tiene acceso a este área. Contacte con el administrador del sitio para obtener acceso.', + 'LBL_EMAIL_ERROR_DUPE_FOLDER_NAME' => 'Los nombres de carpetas Sugar deben ser únicos.', + 'LBL_EMAIL_ERROR_EMPTY' => 'Por favor, introduzca algún criterio de búsqueda.', + 'LBL_EMAIL_ERROR_GENERAL_TITLE' => 'Ha ocurrido un error', + 'LBL_EMAIL_ERROR_LIST_NAME' => 'Ya existe una lista de correo con ese nombre', + 'LBL_EMAIL_ERROR_MESSAGE_DELETED' => 'Mensaje eliminado del servidor', + 'LBL_EMAIL_ERROR_IMAP_MESSAGE_DELETED' => 'O el mensaje se ha eliminado en el servidor o ha sido movido a otra carpeta', + 'LBL_EMAIL_ERROR_MAILSERVERCONNECTION' => 'La conexión con el servidor de correo ha fallado. Por favor, contacte con su Administrador', + 'LBL_EMAIL_ERROR_MOVE' => 'De momento no está soportado el mover correo entre servidores y/o cuentas de correo.', + 'LBL_EMAIL_ERROR_MOVE_TITLE' => 'Error al Mover', + 'LBL_EMAIL_ERROR_NAME' => 'Se requiere un nombre.', + 'LBL_EMAIL_ERROR_FROM_ADDRESS' => 'Se requiere la Dirección del Remitente. Por favor, introduzca una dirección de correo válida.', + 'LBL_EMAIL_ERROR_NO_FILE' => 'Por favor, proporcione un archivo.', + 'LBL_EMAIL_ERROR_NO_IMAP_FOLDER_RENAME' => 'De momento, no está soportado el cambio de nombre en carpetas IMAP.', + 'LBL_EMAIL_ERROR_SERVER' => 'Se requiere una dirección de servidor de correo.', + 'LBL_EMAIL_ERROR_SAVE_ACCOUNT' => 'La cuenta de correo puede no haber sido guardada.', + 'LBL_EMAIL_ERROR_TIMEOUT' => 'Ha ocurrido un error en la comunicación con el servidor de correo.', + 'LBL_EMAIL_ERROR_USER' => 'Se requiere un nombre de inicio de sesión.', + 'LBL_EMAIL_ERROR_PASSWORD' => 'Se requiere una contraseña.', + 'LBL_EMAIL_ERROR_PORT' => 'Se requiere un puerto del servidor de correo.', + 'LBL_EMAIL_ERROR_PROTOCOL' => 'Se requiere un protocolo en el servidor.', + 'LBL_EMAIL_ERROR_MONITORED_FOLDER' => 'Se requiere una Carpeta Monitorizada.', + 'LBL_EMAIL_ERROR_TRASH_FOLDER' => 'Se requiere una Carpeta de Papelera.', + 'LBL_EMAIL_ERROR_VIEW_RAW_SOURCE' => 'Esta información no setá disponible', + 'LBL_EMAIL_ERROR_NO_OUTBOUND' => 'No se ha especificado un servidor de correo saliente.', + 'LBL_EMAIL_FOLDERS_ACTIONS' => 'Mover A', + 'LBL_EMAIL_FOLDERS_ADD' => 'Agregar', + 'LBL_EMAIL_FOLDERS_ADD_DIALOG_TITLE' => 'Agregar Nueva Carpeta', + 'LBL_EMAIL_FOLDERS_RENAME_DIALOG_TITLE' => 'Renombrar Carpeta', + 'LBL_EMAIL_FOLDERS_ADD_NEW_FOLDER' => 'Guardar', + 'LBL_EMAIL_FOLDERS_ADD_THIS_TO' => 'Agregar esta carpeta a', + 'LBL_EMAIL_FOLDERS_CHANGE_HOME' => 'Esta carpeta no puede ser cambiada', + 'LBL_EMAIL_FOLDERS_DELETE_CONFIRM' => '¿Está seguro de que quiere eliminar esta carpeta?\\nEste proceso no puede ser vuelto atrás.\\nLa eliminación de carpetas se aplicará en cascada a todas las carpetas contenidas.', + 'LBL_EMAIL_FOLDERS_NEW_FOLDER' => 'Nombre de la Nueva Carpeta', + 'LBL_EMAIL_FOLDERS_NO_VALID_NODE' => 'Por favor, seleccione una carpeta antes de realizar esta acción.', + 'LBL_EMAIL_FOLDERS_TITLE' => 'Administración de Carpetas', + 'LBL_EMAIL_FOLDERS_USING_GROUP_USER' => 'Usando el Grupo', + 'LBL_EMAIL_FORWARD' => 'Reenviar', + 'LBL_EMAIL_DELIMITER' => '::;::', + 'LBL_EMAIL_DOWNLOAD_STATUS' => '[[count]] de [[total]] emails descargados', + 'LBL_EMAIL_FOUND' => 'Encontrado', + 'LBL_EMAIL_FROM' => 'De', + 'LBL_EMAIL_GROUP' => 'grupo', + 'LBL_EMAIL_UPPER_CASE_GROUP' => 'Grupo', + 'LBL_EMAIL_HOME_FOLDER' => 'Inicio', + 'LBL_EMAIL_HTML_RTF' => 'Enviar HTML', + 'LBL_EMAIL_IE_DELETE' => 'Eliminando Cuenta de Correo', + 'LBL_EMAIL_IE_DELETE_SIGNATURE' => 'Eliminando firma', + 'LBL_EMAIL_IE_DELETE_CONFIRM' => '¿Está seguro de que desea eliminar esta cuenta de correo?', + 'LBL_EMAIL_IE_DELETE_SUCCESSFUL' => 'Borrado satisfactorio.', + 'LBL_EMAIL_IE_SAVE' => 'Guardando Información de Cuenta de Correo', + 'LBL_EMAIL_IMPORTING_EMAIL' => 'Importando Email', + 'LBL_EMAIL_IMPORT_EMAIL' => 'Importar en Sugar', + 'LBL_EMAIL_IMPORT_SETTINGS' => 'Configuración de Importación', + 'LBL_EMAIL_INVALID' => 'No válido', + 'LBL_EMAIL_LOADING' => 'Cargando...', + 'LBL_EMAIL_MARK' => 'Marcar', + 'LBL_EMAIL_MARK_FLAGGED' => 'Como Etiquetado', + 'LBL_EMAIL_MARK_READ' => 'Como Leído', + 'LBL_EMAIL_MARK_UNFLAGGED' => 'Como No Etiquetado', + 'LBL_EMAIL_MARK_UNREAD' => 'Como no Ledído', + 'LBL_EMAIL_ASSIGN_TO' => 'Asignar a', + 'LBL_EMAIL_MENU_ADD_FOLDER' => 'Crear Carpeta', + 'LBL_EMAIL_MENU_COMPOSE' => 'Redactar para', + 'LBL_EMAIL_MENU_DELETE_FOLDER' => 'Eliminar Carpeta', + 'LBL_EMAIL_MENU_EDIT' => 'Editar', + 'LBL_EMAIL_MENU_EMPTY_TRASH' => 'Vaciar Papelera', + 'LBL_EMAIL_MENU_SYNCHRONIZE' => 'Sincronizar', + 'LBL_EMAIL_MENU_CLEAR_CACHE' => 'Limpiar archivos de caché', + 'LBL_EMAIL_MENU_REMOVE' => 'Quitar', + 'LBL_EMAIL_MENU_RENAME' => 'Renombrar', + 'LBL_EMAIL_MENU_RENAME_FOLDER' => 'Renombrar Carpeta', + 'LBL_EMAIL_MENU_RENAMING_FOLDER' => 'Renombrando Carpeta', + 'LBL_EMAIL_MENU_MAKE_SELECTION' => 'Por favor, realice una selección antes de intentar esta operación.', + 'LBL_EMAIL_MENU_HELP_ADD_FOLDER' => 'Crear una Carpeta (remota o en Sugar)', + 'LBL_EMAIL_MENU_HELP_ARCHIVE' => 'Archivar estos emails en SugarCRM', + 'LBL_EMAIL_MENU_HELP_COMPOSE_TO_LIST' => 'Enviar por Email a las listas de Correo seleccionadas', + 'LBL_EMAIL_MENU_HELP_CONTACT_COMPOSE' => 'Enviar por Email a este Contacto', + 'LBL_EMAIL_MENU_HELP_CONTACT_REMOVE' => 'Quitar un Contacto', + 'LBL_EMAIL_MENU_HELP_DELETE' => 'Eliminar estos emails', + 'LBL_EMAIL_MENU_HELP_DELETE_FOLDER' => 'Eliminar una Carpeta (remota o en Sugar)', + 'LBL_EMAIL_MENU_HELP_EDIT_CONTACT' => 'Editar un Contacto', + 'LBL_EMAIL_MENU_HELP_EDIT_LIST' => 'Editar una Lista de Correo', + 'LBL_EMAIL_MENU_HELP_EMPTY_TRASH' => 'Vacía todas las carpetas de Papelera de sus cuentas de correo', + 'LBL_EMAIL_MENU_HELP_MARK_FLAGGED' => 'Marcar estos emails como etiquetados', + 'LBL_EMAIL_MENU_HELP_MARK_READ' => 'Marcar estos emails como leídos', + 'LBL_EMAIL_MENU_HELP_MARK_UNFLAGGED' => 'Marcar estos emails no etiquetados', + 'LBL_EMAIL_MENU_HELP_MARK_UNREAD' => 'Marcar estos emails no leídos', + 'LBL_EMAIL_MENU_HELP_REMOVE_LIST' => 'Quita las Listas de Correo', + 'LBL_EMAIL_MENU_HELP_RENAME_FOLDER' => 'Renombrar una Carpeta (remota o en Sugar)', + 'LBL_EMAIL_MENU_HELP_REPLY' => 'Responder a estos emails', + 'LBL_EMAIL_MENU_HELP_REPLY_ALL' => 'Responder a todos los destinatarios de estos emails', + 'LBL_EMAIL_MESSAGES' => 'mensajes', + 'LBL_EMAIL_ML_NAME' => 'Nombre de Lista', + 'LBL_EMAIL_ML_ADDRESSES_1' => 'Lista de Direcciones Seleccionada', + 'LBL_EMAIL_ML_ADDRESSES_2' => 'Lista de Direcciones Disponibles', + 'LBL_EMAIL_MULTISELECT' => 'Ctrl-Clic para seleccionar múltiples
(los usuarios de Mac pueden usar CMD-Clic)', + 'LBL_EMAIL_NO' => 'No', + 'LBL_EMAIL_NOT_SENT' => 'El sistema no puede procesar su petición. Por favor, póngase en contacto con el administrador del sistema.', + 'LBL_EMAIL_OK' => 'Aceptar', + 'LBL_EMAIL_ONE_MOMENT' => 'Un momento, por favor...', + 'LBL_EMAIL_OPEN_ALL' => 'Abrir Múltiples Mensajes', + 'LBL_EMAIL_OPTIONS' => 'Opciones', + 'LBL_EMAIL_QUICK_COMPOSE' => 'Redacción Rápida', + 'LBL_EMAIL_OPT_OUT' => 'Rehusado', + 'LBL_EMAIL_OPT_OUT_AND_INVALID' => 'Rehusado e invalido', + 'LBL_EMAIL_PAGE_AFTER' => 'de {0}', + 'LBL_EMAIL_PAGE_BEFORE' => 'Página', + 'LBL_EMAIL_PERFORMING_TASK' => 'Realizando Tarea', + 'LBL_EMAIL_PRIMARY' => 'Principal', + 'LBL_EMAIL_PRINT' => 'Imprimir', + 'LBL_EMAIL_QC_BUGS' => 'Incidencia', + 'LBL_EMAIL_QC_CASES' => 'Caso', + 'LBL_EMAIL_QC_LEADS' => 'Cliente Potencial', + 'LBL_EMAIL_QC_CONTACTS' => 'Contacto', + 'LBL_EMAIL_QC_TASKS' => 'Tarea', + 'LBL_EMAIL_QC_OPPORTUNITIES' => 'Oportunidad', + 'LBL_EMAIL_QUICK_CREATE' => 'Creación Rápida', + 'LBL_EMAIL_REBUILDING_FOLDERS' => 'Reconstruyendo Carpetas', + 'LBL_EMAIL_RELATE_TO' => 'Relacionar con', + 'LBL_EMAIL_VIEW_RELATIONSHIPS' => 'Ver Relaciones', + 'LBL_EMAIL_RECORD' => 'Registro de Email', + 'LBL_EMAIL_REMOVE' => 'Quitar', + 'LBL_EMAIL_REPLY' => 'Responder', + 'LBL_EMAIL_REPLY_ALL' => 'Responder a Todos', + 'LBL_EMAIL_REPLY_TO' => 'Responder a', + 'LBL_EMAIL_RETRIEVING_LIST' => 'Recuperando Lista de Emails', + 'LBL_EMAIL_RETRIEVING_MESSAGE' => 'Recuperando Mensaje', + 'LBL_EMAIL_RETRIEVING_RECORD' => 'Recuperando Registro de Email', + 'LBL_EMAIL_SELECT_ONE_RECORD' => 'Por favor, seleccione un único registro de email', + 'LBL_EMAIL_RETURN_TO_VIEW' => '¿Volver a Módulo Anterior?', + 'LBL_EMAIL_REVERT' => 'Revertir', + 'LBL_EMAIL_RELATE_EMAIL' => 'Relacionar Email', + 'LBL_EMAIL_RULES_TITLE' => 'Administración de Reglas', + 'LBL_EMAIL_SAVE' => 'Guardar', + 'LBL_EMAIL_SAVE_AND_REPLY' => 'Guardar y Responder', + 'LBL_EMAIL_SAVE_DRAFT' => 'Guardar Borrador', + 'LBL_EMAIL_SEARCHING' => 'Llevando a cabo la Búsqueda', + 'LBL_EMAIL_SEARCH_ADVANCED' => 'Búsqueda Avanzada', + 'LBL_EMAIL_SEARCH_DATE_FROM' => 'Fecha Desde', + 'LBL_EMAIL_SEARCH_DATE_UNTIL' => 'Fecha Hasta', + 'LBL_EMAIL_SEARCH_FULL_TEXT' => 'Texto del Cuerpo', + 'LBL_EMAIL_SEARCH_NO_RESULTS' => 'No hay resultados para sus criterios de búsqueda.', + 'LBL_EMAIL_SEARCH_RESULTS_TITLE' => 'Resultados de la Búsqueda', + 'LBL_EMAIL_SEARCH_TITLE' => 'Búsqueda Simple', + 'LBL_EMAIL_SEARCH__FROM_ACCOUNTS' => 'Buscar cuenta de correo', + 'LBL_EMAIL_SELECT' => 'Seleccionar', + 'LBL_EMAIL_SEND' => 'Enviar', + 'LBL_EMAIL_SENDING_EMAIL' => 'Enviando Email', + 'LBL_EMAIL_SETTINGS' => 'Configuración', + 'LBL_EMAIL_SETTINGS_2_ROWS' => '2 Filas', + 'LBL_EMAIL_SETTINGS_3_COLS' => '3 Columnas', + 'LBL_EMAIL_SETTINGS_LAYOUT' => 'Estilo de Presentación', + 'LBL_EMAIL_SETTINGS_ACCOUNTS' => 'Cuentas de Correo', + 'LBL_EMAIL_SETTINGS_ADD_ACCOUNT' => 'Limpiar Formulario', + 'LBL_EMAIL_SETTINGS_AUTO_IMPORT' => 'Importar Email en Visualización', + 'LBL_EMAIL_SETTINGS_CHECK_INTERVAL' => 'Comprobar Correo Nuevo', + 'LBL_EMAIL_SETTINGS_COMPOSE_INLINE' => 'Usar Panel de Previsualización', + 'LBL_EMAIL_SETTINGS_COMPOSE_POPUP' => 'Usar Ventana Emergente', + 'LBL_EMAIL_SETTINGS_DISPLAY_NUM' => 'Número de emails por página', + 'LBL_EMAIL_SETTINGS_EDIT_ACCOUNT' => 'Editar Cuenta de Correo', + 'LBL_EMAIL_SETTINGS_FOLDERS' => 'Carpetas', + 'LBL_EMAIL_SETTINGS_FROM_ADDR' => 'Dirección de Remitente', + 'LBL_EMAIL_SETTINGS_FROM_TO_EMAIL_ADDR' => 'Dirección para Notificación de Prueba:', + 'LBL_EMAIL_SETTINGS_TO_EMAIL_ADDR' => 'Dirección del Destinatario', + 'LBL_EMAIL_SETTINGS_FROM_NAME' => 'Nombre de Remitente', + 'LBL_EMAIL_SETTINGS_REPLY_TO_ADDR' => 'Dirección de Responder a', + 'LBL_EMAIL_SETTINGS_FULL_SCREEN' => 'Pantalla Completa', + 'LBL_EMAIL_SETTINGS_FULL_SYNC' => 'Sincronizar Todas las Cuentas de Correo', + 'LBL_EMAIL_TEST_NOTIFICATION_SENT' => 'Se ha enviado un correo electrónico a la dirección utilizando la configuración de correo saliente proporcionada. Por favor, compruebe si ha recibido el correo para verificar que la configuración es correcta.', + 'LBL_EMAIL_SETTINGS_FULL_SYNC_DESC' => 'Esta acción sincronizará las cuentas de correo y su contenido.', + 'LBL_EMAIL_SETTINGS_FULL_SYNC_WARN' => '¿Realizar una sincronización completa?\\nPara cuentas de correo grandes, puede durar varios minutos.', + 'LBL_EMAIL_SUBSCRIPTION_FOLDER_HELP' => 'Haga clic en la Tecla Shift o en la tecla Ctrl para seleccionar carpetas múltiples.', + 'LBL_EMAIL_SETTINGS_GENERAL' => 'General', + 'LBL_EMAIL_SETTINGS_GROUP_FOLDERS' => 'Carpetas de Grupo Disponibles', + 'LBL_EMAIL_SETTINGS_GROUP_FOLDERS_CREATE' => 'Crear Carpetas de Grupo', + 'LBL_EMAIL_SETTINGS_GROUP_FOLDERS_Save' => 'Guardando Carpetas de Grupo', + 'LBL_EMAIL_SETTINGS_RETRIEVING_GROUP' => 'Recuperando Carpetas de Grupo', + 'LBL_EMAIL_SETTINGS_GROUP_FOLDERS_EDIT' => 'Editar Carpetas de Grupo', + 'LBL_EMAIL_SETTINGS_NAME' => 'Nombre de Cuenta de Correo', + 'LBL_EMAIL_SETTINGS_REQUIRE_REFRESH' => 'Seleccione el número de correos por página en la Bandeja de Entrada. Estas opciones pueden requerir de un refresco de página para ser activadas.', + 'LBL_EMAIL_SETTINGS_RETRIEVING_ACCOUNT' => 'Recuperando Email de Cuenta', + 'LBL_EMAIL_SETTINGS_RULES' => 'Reglas', + 'LBL_EMAIL_SETTINGS_SAVED' => 'La configuración ha sido guardada.\\n\\nDebe recargar la página para que la nueva configuración tenga efecto.', + 'LBL_EMAIL_SETTINGS_SEND_EMAIL_AS' => 'Enviar Sólo Correos con Texto Plano', + 'LBL_EMAIL_SETTINGS_SHOW_IN_FOLDERS' => 'Activas', + 'LBL_EMAIL_SETTINGS_SHOW_NUM_IN_LIST' => 'Emails por Página', + 'LBL_EMAIL_SETTINGS_TAB_POS' => 'Poner Pestañas Abajo', + 'LBL_EMAIL_SETTINGS_TITLE_LAYOUT' => 'Configuración Visual', + 'LBL_EMAIL_SETTINGS_TITLE_PREFERENCES' => 'Preferencias', + 'LBL_EMAIL_SETTINGS_TOGGLE_ADV' => 'Mostrar Avanzado', + 'LBL_EMAIL_SETTINGS_USER_FOLDERS' => 'Carpetas de Usuario Disponibles', + 'LBL_EMAIL_ERROR_PREPEND' => 'Error:', + 'LBL_EMAIL_INVALID_PERSONAL_OUTBOUND' => 'El servidor de correo saliente seleccionado para la cuenta de correo que está utilizando no es válido. Compruebe la configuración o seleccione un servidor de correo distinto para la cuenta.', + 'LBL_EMAIL_INVALID_SYSTEM_OUTBOUND' => 'No se ha configurado un servidor de correo saliente para el envío de correos. Por favor, configure o seleccione un servidor de correo saliente para la cuenta de correo que está utilizando en Configuración >> Cuenta de Correo.', + 'LBL_EMAIL_SHOW_READ' => 'Mostrar Todo', + 'LBL_EMAIL_SHOW_UNREAD_ONLY' => 'Mostrar Sólo No leídos', + 'LBL_EMAIL_SIGNATURES' => 'Firmas', + 'LBL_EMAIL_SIGNATURE_CREATE' => 'Nueva Firma', + 'LBL_EMAIL_SIGNATURE_NAME' => 'Nombre de la Firma', + 'LBL_EMAIL_SIGNATURE_TEXT' => 'Cuerpo de la Firma', + 'LBL_SMTPTYPE_GMAIL' => 'Gmail', + 'LBL_SMTPTYPE_YAHOO' => 'Yahoo! Mail', + 'LBL_SMTPTYPE_EXCHANGE' => 'Microsoft Exchange', + 'LBL_SMTPTYPE_OTHER' => 'Otro:', + 'LBL_EMAIL_SPACER_MAIL_SERVER' => '[ Carpetas Remotas ]', + 'LBL_EMAIL_SPACER_LOCAL_FOLDER' => '[ Carpetas de Sugar ]', + 'LBL_EMAIL_SUBJECT' => 'Asunto', + 'LBL_EMAIL_TO' => 'Para', + 'LBL_EMAIL_SUCCESS' => 'Éxito', + 'LBL_EMAIL_SUGAR_FOLDER' => 'CarpetaDeSugar', + 'LBL_EMAIL_TEMPLATE_EDIT_PLAIN_TEXT' => 'El cuerpo de la plantilla de correo está vacío', + 'LBL_EMAIL_TEMPLATES' => 'Plantillas', + 'LBL_EMAIL_TEXT_FIRST' => 'Página Primera', + 'LBL_EMAIL_TEXT_PREV' => 'Página Anterior', + 'LBL_EMAIL_TEXT_NEXT' => 'Página Siguiente', + 'LBL_EMAIL_TEXT_LAST' => 'Página Última', + 'LBL_EMAIL_TEXT_REFRESH' => 'Actualizar', + 'LBL_EMAIL_TOGGLE_LIST' => 'Cambiar Lista', + 'LBL_EMAIL_VIEW' => 'Ver', + 'LBL_EMAIL_VIEWS' => 'Vistas', + 'LBL_EMAIL_VIEW_HEADERS' => 'Mostrar Cabeceras', + 'LBL_EMAIL_VIEW_PRINTABLE' => 'Versión Imprimible', + 'LBL_EMAIL_VIEW_RAW' => 'Mostrar Código Fuente del Email', + 'LBL_EMAIL_VIEW_UNSUPPORTED' => 'Esta característica no está soportada cuando se usa con POP3.', + 'LBL_DEFAULT_LINK_TEXT' => 'Texto de enlace por defecto.', + 'LBL_EMAIL_YES' => 'Sí', + 'LBL_EMAIL_TEST_OUTBOUND_SETTINGS' => 'Enviar Correo de Prueba', + 'LBL_EMAIL_TEST_OUTBOUND_SETTINGS_SENT' => 'Correo de Prueba Enviado', + 'LBL_EMAIL_CHECK_INTERVAL_DOM' => + array ( + 4294967295 => 'Manualmente', + 5 => 'Cada 5 minutos', + 15 => 'Cada 15 minutos', + 30 => 'Cada 30 minutos', + 60 => 'Cada hora', + ), + 'LBL_EMAIL_MESSAGE_NO' => 'Mensaje Nº', + 'LBL_EMAIL_IMPORT_SUCCESS' => 'Importación Existosa', + 'LBL_EMAIL_IMPORT_FAIL' => 'Importación Fallida debido a que el mensaje ya ha sido importado o eliminado del servidor', + 'LBL_LINK_NONE' => 'Ninguno', + 'LBL_LINK_ALL' => 'Todos', + 'LBL_LINK_RECORDS' => 'Registros', + 'LBL_LINK_SELECT' => 'Seleccionar', + 'LBL_LINK_ACTIONS' => 'Acciones', + 'LBL_LINK_MORE' => 'Más', + 'LBL_CLOSE_ACTIVITY_HEADER' => 'Confirmar', + 'LBL_CLOSE_ACTIVITY_CONFIRM' => '¿Desea cerrar este #module#?', + 'LBL_CLOSE_ACTIVITY_REMEMBER' => 'No mostrar este mensaje en el futuro:  ', + 'LBL_INVALID_FILE_EXTENSION' => 'Extensión de archivo invalida', + 'ERR_AJAX_LOAD' => 'Se produjo un error:', + 'ERR_AJAX_LOAD_FAILURE' => 'Se ha producido un error al procesar su petición, por favor inténtelo de nuevo más tarde.', + 'ERR_AJAX_LOAD_FOOTER' => 'Si persiste el error, por favor solicite al administrador que deshabilite Ajax para este módulo', + 'ERR_CREATING_FIELDS' => 'Error al rellenar los campos adicionales de detalle:', + 'ERR_CREATING_TABLE' => 'Error al crear la tabla:', + 'ERR_DECIMAL_SEP_EQ_THOUSANDS_SEP' => 'No puede utilizarse el mismo carácter como separador decimal que el utilizado como separador de miles.\\n\\n Por favor, cambie los valores.', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar el contacto.', + 'ERR_EXPORT_DISABLED' => 'Exportación deshabilitada.', + 'ERR_EXPORT_TYPE' => 'Error exportando', + 'ERR_INVALID_AMOUNT' => 'Por favor, introduzca una cantidad válida.', + 'ERR_INVALID_DATE_FORMAT' => 'El formato de fecha debe ser:', + 'ERR_INVALID_DATE' => 'Por favor, introduzca una fecha válida.', + 'ERR_INVALID_DAY' => 'Por favor, introduzca un día válido.', + 'ERR_INVALID_EMAIL_ADDRESS' => 'no es una dirección de correo válida.', + 'ERR_INVALID_FILE_REFERENCE' => 'Referencia a archivo no válida', + 'ERR_INVALID_HOUR' => 'Por favor, introduzca una hora válida.', + 'ERR_INVALID_MONTH' => 'Por favor, introduzca un mes válido.', + 'ERR_INVALID_TIME' => 'Por favor, introduzca una hora válida.', + 'ERR_INVALID_YEAR' => 'Por favor, introduzca un año válido de 4 dígitos.', + 'ERR_NEED_ACTIVE_SESSION' => 'Debe tener una sesión activa para exportar el contenido.', + 'ERR_NO_HEADER_ID' => 'Esta funcionalidad no está disponible con este tema.', + 'ERR_NOT_ADMIN' => 'Acceso no autorizado a la administración.', + 'ERR_MISSING_REQUIRED_FIELDS' => 'Falta campo requerido:', + 'ERR_INVALID_REQUIRED_FIELDS' => 'Campo requerido no válido:', + 'ERR_INVALID_VALUE' => 'Valor no válido:', + 'ERR_NO_SUCH_FILE' => 'El archivo no existe en el sistema', + 'ERR_NO_SINGLE_QUOTE' => 'No podemos utilizar las comillas simples para', + 'ERR_NOTHING_SELECTED' => 'Por favor, realice una selección antes de proceder.', + 'ERR_OPPORTUNITY_NAME_DUPE' => 'Ya existe una oportunidad con el nombre %s. Por favor, introduzca otro nombre a continuación.', + 'ERR_OPPORTUNITY_NAME_MISSING' => 'No ha introducido un nombre para la oportunidad. Por favor, introduzca un nombre para la oportunidad a continuación.', + 'ERR_POTENTIAL_SEGFAULT' => 'Se ha detectado un posible error de segmentación de Apache. Por favor, notifique a su administrador del sistema para que le confirme este problema y lo reporte a SugarCRM.', + 'ERR_SELF_REPORTING' => 'Un usuario no puede ser informador de si mismo.', + 'ERR_SINGLE_QUOTE' => 'La comilla simple no está soportada en este campo. Por favor, cambie el valor.', + 'ERR_SQS_NO_MATCH_FIELD' => 'No se han encontrado coincidencias para el campo:', + 'ERR_SQS_NO_MATCH' => 'Sin coincidencias', + 'ERR_ADDRESS_KEY_NOT_SPECIFIED' => 'Por favor, especifique el índice 'clave' en el atributo displayParams para la definición de Meta-Datos', + 'ERR_EXISTING_PORTAL_USERNAME' => 'Error: El Nombre de Portal ya ha sido asignado a otro contacto.', + 'ERR_COMPATIBLE_PRECISION_VALUE' => 'El valor del campo no es compatible con el tipo de precisión', + 'ERR_EXTERNAL_API_SAVE_FAIL' => 'Se produjo un error al tratar de salvar en la cuenta externa.', + 'ERR_EXTERNAL_API_UPLOAD_FAIL' => 'Se produjo un error durante la carga. Asegúrese de que el archivo que está cargando no está vacío.', + 'ERR_NO_DB' => 'No se ha podido realizar una conexión a la base de datos. Por favor, consulte sugarcrm.log para más detalles.', + 'ERR_DB_FAIL' => 'Error de base de datos. Por favor, consulte sugarcrm.log para más detalles.', + 'ERR_EXTERNAL_API_403' => 'Permiso denegado. El tipo de archivo no es compatible.', + 'ERR_DB_VERSION' => 'Archivos de Sugar CRM {0} sólo se puede utilizar con una base de datos de Sugar CRM {1}.', + 'LBL_ACCOUNT' => 'Cuenta', + 'LBL_OLD_ACCOUNT_LINK' => 'Cuenta Antigua', + 'LBL_ACCOUNTS' => 'Cuentas', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_ACCUMULATED_HISTORY_BUTTON_KEY' => 'H', + 'LBL_ACCUMULATED_HISTORY_BUTTON_LABEL' => 'Ver Resumen', + 'LBL_ACCUMULATED_HISTORY_BUTTON_TITLE' => 'Ver Resumen [Alt+H]', + 'LBL_ADD_BUTTON_KEY' => 'A', + 'LBL_ADD_BUTTON_TITLE' => 'Agregar [Alt+A]', + 'LBL_ADD_BUTTON' => 'Agregar', + 'LBL_ADD_DOCUMENT' => 'Agregar Documento', + 'LBL_REPLACE_BUTTON' => 'Reemplazar', + 'LBL_ADD_TO_PROSPECT_LIST_BUTTON_KEY' => 'L', + 'LBL_ADD_TO_PROSPECT_LIST_BUTTON_LABEL' => 'Agregar A Lista de Público Objetivo', + 'LBL_ADD_TO_PROSPECT_LIST_BUTTON_TITLE' => 'Agregar A Lista de Público Objetivo', + 'LBL_ADDITIONAL_DETAILS_CLOSE_TITLE' => 'Clic para Cerrar', + 'LBL_ADDITIONAL_DETAILS_CLOSE' => 'Cerrar', + 'LBL_ADDITIONAL_DETAILS' => 'Detalles Adicionales', + 'LBL_ADMIN' => 'Admin', + 'LBL_ALT_HOT_KEY' => 'Alt+', + 'LBL_ARCHIVE' => 'Archivo', + 'LBL_ASSIGNED_TO_USER' => 'Asignado a Usuario', + 'LBL_ASSIGNED_TO' => 'Asignado a:', + 'LBL_BACK' => 'Atrás', + 'LBL_BILL_TO_ACCOUNT' => 'Cargar en Cuenta', + 'LBL_BILL_TO_CONTACT' => 'Cargar a Contacto', + 'LBL_BILLING_ADDRESS' => 'Dirección de Facturación', + 'LBL_QUICK_CREATE_TITLE' => 'Creación rápida', + 'LBL_BROWSER_TITLE' => 'SugarCRM - CRM Comercial de Fuentes Abiertas', + 'LBL_BUGS' => 'Incidencias', + 'LBL_BY' => 'por', + 'LBL_CALLS' => 'Llamadas', + 'LBL_CALL' => 'Llamada', + 'LBL_CAMPAIGNS_SEND_QUEUED' => 'Enviar Emails de Campaña Encolados', + 'LBL_SUBMIT_BUTTON_LABEL' => 'Enviar', + 'LBL_CASE' => 'Caso', + 'LBL_CASES' => 'Casos', + 'LBL_CHANGE_BUTTON_KEY' => 'G', + 'LBL_CHANGE_PASSWORD' => 'Cambiar contraseña', + 'LBL_CHANGE_BUTTON_LABEL' => 'Cambiar', + 'LBL_CHANGE_BUTTON_TITLE' => 'Cambiar [Alt+G]', + 'LBL_CHARSET' => 'UTF-8', + 'LBL_CHECKALL' => 'Marcar Todos', + 'LBL_CITY' => 'Ciudad', + 'LBL_CLEAR_BUTTON_KEY' => 'C', + 'LBL_CLEAR_BUTTON_LABEL' => 'Limpiar', + 'LBL_CLEAR_BUTTON_TITLE' => 'Limpiar [Alt+C]', + 'LBL_CLEARALL' => 'Desmarcar Todos', + 'LBL_CLOSE_BUTTON_TITLE' => 'Cerrar', + 'LBL_CLOSE_BUTTON_KEY' => 'Q', + 'LBL_CLOSE_WINDOW' => 'Cerrar Ventana', + 'LBL_CLOSEALL_BUTTON_KEY' => 'Q', + 'LBL_CLOSEALL_BUTTON_LABEL' => 'Cerrar Todo', + 'LBL_CLOSEALL_BUTTON_TITLE' => 'Cerrar Todo [Alt+I]', + 'LBL_CLOSE_AND_CREATE_BUTTON_LABEL' => 'Cerrar y Crear Nuevo', + 'LBL_CLOSE_AND_CREATE_BUTTON_TITLE' => 'Cerrar y Crear Nuevo', + 'LBL_CLOSE_AND_CREATE_BUTTON_KEY' => 'C', + 'LBL_OPEN_ITEMS' => 'Abrir elementos:', + 'LBL_COMPOSE_EMAIL_BUTTON_KEY' => 'L', + 'LBL_COMPOSE_EMAIL_BUTTON_LABEL' => 'Redactar Correo', + 'LBL_COMPOSE_EMAIL_BUTTON_TITLE' => 'Redactar Correo [Alt+L]', + 'LBL_SEARCH_DROPDOWN_YES' => 'Sí', + 'LBL_SEARCH_DROPDOWN_NO' => 'No', + 'LBL_CONTACT_LIST' => 'Lista de Contactos', + 'LBL_CONTACT' => 'Contacto', + 'LBL_CONTACTS' => 'Contactos', + 'LBL_CONTRACTS' => 'Contratos', + 'LBL_COUNTRY' => 'País:', + 'LBL_CREATE_BUTTON_LABEL' => 'Crear', + 'LBL_CREATED_BY_USER' => 'Creado por Usuario', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_CREATED_ID' => 'Creado por Id', + 'LBL_CREATED' => 'Creado por', + 'LBL_CURRENT_USER_FILTER' => 'Mis Elementos:', + 'LBL_CURRENCY' => 'Moneda:', + 'LBL_DOCUMENTS' => 'Documentos', + 'LBL_DATE_ENTERED' => 'Fecha de Creación:', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación:', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_DUPLICATE_BUTTON' => 'Duplicar', + 'LBL_DELETE_BUTTON' => 'Eliminar', + 'LBL_DELETE' => 'Eliminar', + 'LBL_DELETED' => 'Eliminado', + 'LBL_DIRECT_REPORTS' => 'Informa a', + 'LBL_DONE_BUTTON_KEY' => 'X', + 'LBL_DONE_BUTTON_LABEL' => 'Hecho', + 'LBL_DONE_BUTTON_TITLE' => 'Hecho [Alt+X]', + 'LBL_DST_NEEDS_FIXIN' => 'La aplicación requiere que se aplique una reparación de Horario de Verano. Por favor, vaya al vínculo Reparar en la consola de Administración y aplique la reparación de Horario de Verano.', + 'LBL_EDIT_AS_NEW_BUTTON_LABEL' => 'Editar Como Nuevo', + 'LBL_EDIT_AS_NEW_BUTTON_TITLE' => 'Editar Como Nuevo', + 'LBL_FAVORITES' => 'Favoritos', + 'LBL_FILTER_MENU_BY' => 'Filtrar menú por', + 'LBL_VCARD' => 'vCard', + 'LBL_EMPTY_VCARD' => 'Por favor, seleccione un archivo vCard', + 'LBL_IMPORT_VCARD' => 'Importar vCard:', + 'LBL_IMPORT_VCARD_BUTTON_KEY' => 'I', + 'LBL_IMPORT_VCARD_BUTTON_LABEL' => 'Importar vCard', + 'LBL_IMPORT_VCARD_BUTTON_TITLE' => 'Importar vCard [Alt+I]', + 'LBL_VIEW_BUTTON_KEY' => 'V', + 'LBL_VIEW_BUTTON_LABEL' => 'Ver', + 'LBL_VIEW_BUTTON_TITLE' => 'Ver [Alt+V]', + 'LBL_VIEW_BUTTON' => 'Ver', + 'LBL_EMAIL_PDF_BUTTON_KEY' => 'M', + 'LBL_EMAIL_PDF_BUTTON_LABEL' => 'Enviar como PDF', + 'LBL_EMAIL_PDF_BUTTON_TITLE' => 'Enviar como PDF [Alt+M]', + 'LBL_EMAILS' => 'Correos', + 'LBL_EMPLOYEES' => 'Empleados', + 'LBL_ENTER_DATE' => 'Introducir Fecha', + 'LBL_EXPORT_ALL' => 'Exportar Todo', + 'LBL_EXPORT' => 'Exportar', + 'LBL_FAVORITES_FILTER' => 'Mis Favoritos:', + 'LBL_GO_BUTTON_LABEL' => 'Adelante', + 'LBL_GS_HELP' => 'Los campos de este módulo utilizado en esta búsqueda aparecen más arriba. El texto resaltado con los criterios requeridos.', + 'LBL_HIDE' => 'Ocultar', + 'LBL_ID' => 'ID', + 'LBL_IMPORT' => 'Importar', + 'LBL_IMPORT_STARTED' => 'Importación iniciada:', + 'LBL_MISSING_CUSTOM_DELIMITER' => 'Debe especificar un delimitador particular.', + 'LBL_LAST_VIEWED' => 'Recientes', + 'LBL_SHOW_LESS' => 'Mostrar menos', + 'LBL_SHOW_MORE' => 'Mostrar más', + 'LBL_TODAYS_ACTIVITIES' => 'Actividades de Hoy', + 'LBL_LEADS' => 'Clientes Potenciales', + 'LBL_LESS' => 'menos', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_CAMPAIGNS' => 'Campañas', + 'LBL_CAMPAIGNLOG' => 'LogDeCampaña', + 'LBL_CAMPAIGN_CONTACT' => 'Campañas', + 'LBL_CAMPAIGN_ID' => 'campaña_id', + 'LBL_SITEMAP' => 'Mapa del sitio', + 'LBL_THEME' => 'Tema:', + 'LBL_THEME_PICKER' => 'Estilo de Página', + 'LBL_THEME_PICKER_IE6COMPAT_CHECK' => 'Aviso: Internet Explorer 6 no estará soportado para el tema seleccionado. Haga clic en Aceptar para seleccionarlo de todas maneras o Cancelar para seleccionar otro tema.', + 'LBL_FOUND_IN_RELEASE' => 'Encontrado en Versión', + 'LBL_FIXED_IN_RELEASE' => 'Corregido en Versión', + 'LBL_LIST_ACCOUNT_NAME' => 'Nombre Cuenta', + 'LBL_LIST_ASSIGNED_USER' => 'Usuario', + 'LBL_LIST_CONTACT_NAME' => 'Nombre Contacto', + 'LBL_LIST_CONTACT_ROLE' => 'Rol Contacto', + 'LBL_LIST_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_LIST_EMAIL' => 'Correo', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_OF' => 'de', + 'LBL_LIST_PHONE' => 'Teléfono', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_USER_NAME' => 'Nombre de Usuario', + 'LBL_LISTVIEW_MASS_UPDATE_CONFIRM' => '¿Está seguro de que desea actualizar la lista entera?', + 'LBL_LISTVIEW_NO_SELECTED' => 'Por favor, seleccione al menos 1 registro para proceder.', + 'LBL_LISTVIEW_TWO_REQUIRED' => 'Por favor, seleccione al menos 2 registros para proceder.', + 'LBL_LISTVIEW_LESS_THAN_TEN_SELECT' => 'Por favor, seleccione menos de 10 registros para proceder.', + 'LBL_LISTVIEW_ALL' => 'Todo', + 'LBL_LISTVIEW_NONE' => 'Quitar Selección', + 'LBL_LISTVIEW_OPTION_CURRENT' => 'Seleccionar Página Actual', + 'LBL_LISTVIEW_OPTION_ENTIRE' => 'Seleccionar Todo', + 'LBL_LISTVIEW_OPTION_SELECTED' => 'Registros Seleccionados', + 'LBL_LISTVIEW_SELECTED_OBJECTS' => 'Seleccionados:', + 'LBL_LOCALE_NAME_EXAMPLE_FIRST' => 'Juan', + 'LBL_LOCALE_NAME_EXAMPLE_LAST' => 'Pérez', + 'LBL_LOCALE_NAME_EXAMPLE_SALUTATION' => 'Sr.', + 'LBL_LOCALE_NAME_EXAMPLE_TITLE' => 'Mago del Código Fuente', + 'LBL_LOGIN_TO_ACCESS' => 'Por favor, inicie la sesión para acceder a este área.', + 'LBL_LOGOUT' => 'Salir', + 'LBL_PROFILE' => 'Perfil', + 'LBL_MAILMERGE_KEY' => 'M', + 'LBL_MAILMERGE' => 'Combinar Correspondencia', + 'LBL_MASS_UPDATE' => 'Actualización Masiva', + 'LBL_NO_MASS_UPDATE_FIELDS_AVAILABLE' => 'No hay campos disponibles para la operación de actualización masiva.', + 'LBL_OPT_OUT_FLAG_PRIMARY' => 'Rehusar para Email Principal', + 'LBL_MEETINGS' => 'Reuniones', + 'LBL_MEETING' => 'Reunión', + 'LBL_MEETING_GO_BACK' => 'Volver a la reunión', + 'LBL_MEMBERS' => 'Miembros', + 'LBL_MEMBER_OF' => 'Miembro de', + 'LBL_MODIFIED_BY_USER' => 'Modificado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_MODIFIED_ID' => 'Modificado por Id', + 'LBL_MORE' => 'Más', + 'LBL_MY_ACCOUNT' => 'Mi Configuración', + 'LBL_NAME' => 'Nombre', + 'LBL_NEW_BUTTON_KEY' => 'N', + 'LBL_NEW_BUTTON_LABEL' => 'Nuevo', + 'LBL_NEW_BUTTON_TITLE' => 'Nuevo [Alt+N]', + 'LBL_NEXT_BUTTON_LABEL' => 'Siguiente', + 'LBL_NONE' => '-ninguno-', + 'LBL_NOTES' => 'Notas', + 'LBL_OPENALL_BUTTON_KEY' => 'O', + 'LBL_OPENALL_BUTTON_LABEL' => 'Abrir Todo', + 'LBL_OPENALL_BUTTON_TITLE' => 'Abrir Todo [Alt+O]', + 'LBL_OPENTO_BUTTON_KEY' => 'T', + 'LBL_OPENTO_BUTTON_LABEL' => 'Abrir En:', + 'LBL_OPENTO_BUTTON_TITLE' => 'Abrir En: [Alt+T]', + 'LBL_OPPORTUNITIES' => 'Oportunidades', + 'LBL_OPPORTUNITY_NAME' => 'Nombre de Oportunidad', + 'LBL_OPPORTUNITY' => 'Oportunidad', + 'LBL_OR' => 'O', + 'LBL_LOWER_OR' => 'o', + 'LBL_PANEL_ASSIGNMENT' => 'Otro', + 'LBL_PANEL_ADVANCED' => 'Más Información', + 'LBL_PARENT_TYPE' => 'Tipo de Padre', + 'LBL_PERCENTAGE_SYMBOL' => '%', + 'LBL_PHASE' => 'Fase', + 'LBL_POSTAL_CODE' => 'Código Postal:', + 'LBL_PRIMARY_ADDRESS_CITY' => 'Ciudad de dirección principal:', + 'LBL_PRIMARY_ADDRESS_COUNTRY' => 'País de dirección principal:', + 'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'CP de dirección principal:', + 'LBL_PRIMARY_ADDRESS_STATE' => 'Estado/Provincia de dirección principal:', + 'LBL_PRIMARY_ADDRESS_STREET_2' => 'Calle de dirección principal 2', + 'LBL_PRIMARY_ADDRESS_STREET_3' => 'Calle de dirección principal 3', + 'LBL_PRIMARY_ADDRESS_STREET' => 'Calle de dirección principal:', + 'LBL_PRIMARY_ADDRESS' => 'Dirección principal:', + 'LBL_BILLING_STREET' => 'Calle:', + 'LBL_SHIPPING_STREET' => 'Calle:', + 'LBL_PRODUCT_BUNDLES' => 'Juegos de Productos', + 'LBL_PRODUCTS' => 'Productos', + 'LBL_PROJECT_TASKS' => 'Tareas de Proyecto', + 'LBL_PROJECTS' => 'Proyectos', + 'LBL_QUOTE_TO_OPPORTUNITY_KEY' => 'O', + 'LBL_QUOTE_TO_OPPORTUNITY_LABEL' => 'Crear Oportunidad a partir de Presupuesto', + 'LBL_QUOTE_TO_OPPORTUNITY_TITLE' => 'Crear Oportunidad a partir de Presupuesto [Alt+O]', + 'LBL_QUOTES_SHIP_TO' => 'Presupuestos enviados a', + 'LBL_QUOTES' => 'Presupuestos', + 'LBL_RELATED' => 'Relacionado', + 'LBL_RELATED_INFORMATION' => 'Información Relacionada', + 'LBL_RELATED_RECORDS' => 'Registros Relacionados', + 'LBL_REMOVE' => 'Quitar', + 'LBL_REPORTS_TO' => 'Informa a', + 'LBL_REQUIRED_SYMBOL' => '*', + 'LBL_REQUIRED_TITLE' => 'Indica que es un campo requerido', + 'LBL_EMAIL_DONE_BUTTON_LABEL' => 'Hecho', + 'LBL_SAVE_AS_BUTTON_KEY' => 'A', + 'LBL_SAVE_AS_BUTTON_LABEL' => 'Guardar Como', + 'LBL_SAVE_AS_BUTTON_TITLE' => 'Guardar Como [Alt+A]', + 'LBL_FULL_FORM_BUTTON_KEY' => 'F', + 'LBL_FULL_FORM_BUTTON_LABEL' => 'Formulario Completo', + 'LBL_FULL_FORM_BUTTON_TITLE' => 'Formulario Completo [Alt+F]', + 'LBL_SAVE_NEW_BUTTON_KEY' => 'V', + 'LBL_SAVE_NEW_BUTTON_LABEL' => 'Guardar y Crear Nuevo', + 'LBL_SAVE_NEW_BUTTON_TITLE' => 'Guardar y Crear Nuevo [Alt+V]', + 'LBL_SAVE_OBJECT' => 'Guardar {0}', + 'LBL_SEARCH_BUTTON_KEY' => 'Q', + 'LBL_SEARCH_BUTTON_LABEL' => 'Buscar', + 'LBL_SEARCH_BUTTON_TITLE' => 'Buscar [Alt+Q]', + 'LBL_SEARCH' => 'Buscar', + 'LBL_SEARCH_TIPS' => 'Pulse el botón de búsqueda o haga clic en Enter para obtener una coincidencia exacta para ellos.', + 'LBL_SEARCH_TIPS_2' => 'Pulse el botón de búsqueda o haga clic en Enter para obtener una coincidencia exacta para', + 'LBL_SEARCH_MORE' => 'más', + 'LBL_SEE_ALL' => 'Ver Todo', + 'LBL_UPLOAD_IMAGE_FILE_INVALID' => 'Formato de archivo no válido, sólo es posible subir archivos con imágenes.', + 'LBL_SELECT_BUTTON_KEY' => 'T', + 'LBL_SELECT_BUTTON_LABEL' => 'Seleccionar', + 'LBL_SELECT_BUTTON_TITLE' => 'Seleccionar [Alt+T]', + 'LBL_SELECT_TEAMS_KEY' => 'Z', + 'LBL_SELECT_TEAMS_LABEL' => 'Agregar Equipo(s)', + 'LBL_SELECT_TEAMS_TITLE' => 'Agregar Equipo(s) [Alt+Z]', + 'LBL_BROWSE_DOCUMENTS_BUTTON_KEY' => 'B', + 'LBL_BROWSE_DOCUMENTS_BUTTON_LABEL' => 'Explorar Documentos', + 'LBL_BROWSE_DOCUMENTS_BUTTON_TITLE' => 'Explorar Documentos [Alt+B]', + 'LBL_SELECT_CONTACT_BUTTON_KEY' => 'T', + 'LBL_SELECT_CONTACT_BUTTON_LABEL' => 'Seleccionar Contacto', + 'LBL_SELECT_CONTACT_BUTTON_TITLE' => 'Seleccionar Contacto [Alt+T]', + 'LBL_GRID_SELECTED_FILE' => 'archivo seleccionado', + 'LBL_GRID_SELECTED_FILES' => 'archivos seleccionados', + 'LBL_SELECT_REPORTS_BUTTON_LABEL' => 'Seleccionar desde Informes', + 'LBL_SELECT_REPORTS_BUTTON_TITLE' => 'Seleccionar Informes', + 'LBL_SELECT_USER_BUTTON_KEY' => 'U', + 'LBL_SELECT_USER_BUTTON_LABEL' => 'Seleccionar Usuario', + 'LBL_SELECT_USER_BUTTON_TITLE' => 'Seleccionar Usuario [Alt+U]', + 'LBL_ACCESSKEY_CLEAR_RELATE_KEY' => 'Limpiar relación', + 'LBL_ACCESSKEY_CLEAR_RELATE_TITLE' => 'Limpiar selección', + 'LBL_ACCESSKEY_CLEAR_RELATE_LABEL' => 'Limpiar selección', + 'LBL_ACCESSKEY_CLEAR_COLLECTION_KEY' => 'Limpiar colección', + 'LBL_ACCESSKEY_CLEAR_COLLECTION_TITLE' => 'Limpiar selección', + 'LBL_ACCESSKEY_CLEAR_COLLECTION_LABEL' => 'Limpiar selección', + 'LBL_ACCESSKEY_SELECT_FILE_KEY' => 'F', + 'LBL_ACCESSKEY_SELECT_FILE_TITLE' => 'Seleccionar archivo [Alt+F]', + 'LBL_ACCESSKEY_SELECT_FILE_LABEL' => 'Seleccionar archivo', + 'LBL_ACCESSKEY_CLEAR_FILE_KEY' => 'Limpiar archivos', + 'LBL_ACCESSKEY_CLEAR_FILE_TITLE' => 'Limpiar archivo', + 'LBL_ACCESSKEY_CLEAR_FILE_LABEL' => 'Limpiar archivo', + 'LBL_ACCESSKEY_SELECT_USERS_KEY' => 'U', + 'LBL_ACCESSKEY_SELECT_USERS_TITLE' => 'Seleccionar usuario [Alt+U]', + 'LBL_ACCESSKEY_SELECT_USERS_LABEL' => 'Seleccionar usuario', + 'LBL_ACCESSKEY_CLEAR_USERS_KEY' => 'Limpiar usuarios', + 'LBL_ACCESSKEY_CLEAR_USERS_TITLE' => 'Limpiar usuario', + 'LBL_ACCESSKEY_CLEAR_USERS_LABEL' => 'Limpiar usuairo', + 'LBL_ACCESSKEY_SELECT_ACCOUNTS_KEY' => 'A', + 'LBL_ACCESSKEY_SELECT_ACCOUNTS_TITLE' => 'Seleccionar cuenta [Alt+A]', + 'LBL_ACCESSKEY_SELECT_ACCOUNTS_LABEL' => 'Seleccionar cuenta', + 'LBL_ACCESSKEY_CLEAR_ACCOUNTS_KEY' => 'Limpiar cuentas', + 'LBL_ACCESSKEY_CLEAR_ACCOUNTS_TITLE' => 'Limpiar cuenta', + 'LBL_ACCESSKEY_CLEAR_ACCOUNTS_LABEL' => 'Limpiar cuenta', + 'LBL_ACCESSKEY_SELECT_CAMPAIGNS_KEY' => 'M', + 'LBL_ACCESSKEY_SELECT_CAMPAIGNS_TITLE' => 'Seleccionar campaña [Alt+M]', + 'LBL_ACCESSKEY_SELECT_CAMPAIGNS_LABEL' => 'Seleccionar campaña', + 'LBL_ACCESSKEY_CLEAR_CAMPAIGNS_KEY' => 'Limpiar campañas', + 'LBL_ACCESSKEY_CLEAR_CAMPAIGNS_TITLE' => 'Limpiar campaña', + 'LBL_ACCESSKEY_CLEAR_CAMPAIGNS_LABEL' => 'Limpiar campaña', + 'LBL_ACCESSKEY_SELECT_CONTACTS_KEY' => 'C', + 'LBL_ACCESSKEY_SELECT_CONTACTS_TITLE' => 'Seleccionar contacto [Alt+C]', + 'LBL_ACCESSKEY_SELECT_CONTACTS_LABEL' => 'Seleccionar contacto', + 'LBL_ACCESSKEY_CLEAR_CONTACTS_KEY' => 'Limpiar contactos', + 'LBL_ACCESSKEY_CLEAR_CONTACTS_TITLE' => 'Limpiar contacto', + 'LBL_ACCESSKEY_CLEAR_CONTACTS_LABEL' => 'Limpiar contacto', + 'LBL_ACCESSKEY_SELECT_TEAMSET_KEY' => 'Z', + 'LBL_ACCESSKEY_SELECT_TEAMSET_TITLE' => 'Seleccionar equipo [Alt+Z]', + 'LBL_ACCESSKEY_SELECT_TEAMSET_LABEL' => 'Seleccionar equipo', + 'LBL_ACCESSKEY_CLEAR_TEAMS_KEY' => 'Limpiar equipos', + 'LBL_ACCESSKEY_CLEAR_TEAMS_TITLE' => 'Limpiar equipo', + 'LBL_ACCESSKEY_CLEAR_TEAMS_LABEL' => 'Limpiar equipo', + 'LBL_SERVER_RESPONSE_RESOURCES' => 'Recursos usados para construir esta página (consultas, archivos)', + 'LBL_SERVER_RESPONSE_TIME_SECONDS' => 'segundos.', + 'LBL_SERVER_RESPONSE_TIME' => 'Tiempo de respuesta del servidor:', + 'LBL_SERVER_MEMORY_BYTES' => 'bytes', + 'LBL_SERVER_MEMORY_USAGE' => 'Uso de la memoria del servidor: {0} ({1})', + 'LBL_SERVER_MEMORY_LOG_MESSAGE' => 'Uso: - modulo: {0} - acción: {1}', + 'LBL_SERVER_PEAK_MEMORY_USAGE' => 'Uso de la memoria máxima del servidor: {0} ({1})', + 'LBL_SHIP_TO_ACCOUNT' => 'Enviar a Cuenta', + 'LBL_SHIP_TO_CONTACT' => 'Enviar a Contacto', + 'LBL_SHIPPING_ADDRESS' => 'Dirección de Envío', + 'LBL_SHORTCUTS' => 'Atajos', + 'LBL_SHOW' => 'Mostrar', + 'LBL_SQS_INDICATOR' => '', + 'LBL_STATE' => 'Estado/Provincia:', + 'LBL_STATUS_UPDATED' => '¡Su estado para este evento ha sido actualizado!', + 'LBL_STATUS' => 'Estado:', + 'LBL_STREET' => 'Calle', + 'LBL_SUBJECT' => 'Asunto', + 'LBL_INBOUNDEMAIL_ID' => 'ID de Correo Entrante', + 'LBL_SUGAR_COPYRIGHT' => '© 2004-2011 SugarCRM Inc. El Programa ha sido proporcionado TAL CUAL, sin garantía de ningún tipo. Licenciado bajo la AGPLv3.
SugarCRM es una marca registrada de SugarCRM, Inc. Cualquier otro nombre de compañía o producto puede ser marca registrada de las respectivas compañías con las que esté asociado.', + 'LBL_SUGAR_COPYRIGHT_SUB' => '© 2004-2011 SugarCRM Inc. Todos los Derechos Reservados.
SugarCRM es una marca registrada de SugarCRM, Inc. Cualquier otro nombre de compañía o producto puede ser marca registrada de las respectivas compañías con las que esté asociado.', + 'LBL_SYNC' => 'Sincronizar', + 'LBL_TABGROUP_ALL' => 'Todo', + 'LBL_TABGROUP_ACTIVITIES' => 'Actividades', + 'LBL_TABGROUP_COLLABORATION' => 'Colaboración', + 'LBL_TABGROUP_HOME' => 'Inicio', + 'LBL_TABGROUP_MARKETING' => 'Marketing', + 'LBL_TABGROUP_MY_PORTALS' => 'Mis Sitios', + 'LBL_TABGROUP_OTHER' => 'Otro', + 'LBL_TABGROUP_REPORTS' => 'Informes', + 'LBL_TABGROUP_SALES' => 'Ventas', + 'LBL_TABGROUP_SUPPORT' => 'Soporte', + 'LBL_TABGROUP_TOOLS' => 'Herramientas', + 'LBL_TASKS' => 'Tareas', + 'LBL_TEAMS_LINK' => 'Equipos', + 'LBL_THEME_COLOR' => 'Color', + 'LBL_THEME_FONT' => 'Fuente', + 'LBL_THOUSANDS_SYMBOL' => 'K', + 'LBL_TRACK_EMAIL_BUTTON_KEY' => 'K', + 'LBL_TRACK_EMAIL_BUTTON_LABEL' => 'Archivar Correo', + 'LBL_TRACK_EMAIL_BUTTON_TITLE' => 'Archivar Correo [Alt+K]', + 'LBL_UNAUTH_ADMIN' => 'Acceso no autorizado a la administración', + 'LBL_UNDELETE_BUTTON_LABEL' => 'Restaurar', + 'LBL_UNDELETE_BUTTON_TITLE' => 'Restaurar [Alt+D]', + 'LBL_UNDELETE_BUTTON' => 'Restaurar', + 'LBL_UNDELETE' => 'Restaurar', + 'LBL_UNSYNC' => 'Desincronizar', + 'LBL_UPDATE' => 'Actualizar', + 'LBL_USER_LIST' => 'Lista de Usuarios', + 'LBL_USERS_SYNC' => 'Sincronización de Usuarios', + 'LBL_USERS' => 'Usuarios', + 'LBL_VERIFY_EMAIL_ADDRESS' => 'Comprobando la entrada de correo actual...', + 'LBL_VERIFY_PORTAL_NAME' => 'Comprobando el nombre de portal actual...', + 'LBL_VIEW_IMAGE' => 'ver', + 'LBL_VIEW_PDF_BUTTON_KEY' => 'P', + 'LBL_VIEW_PDF_BUTTON_LABEL' => 'Imprimir como PDF', + 'LBL_VIEW_PDF_BUTTON_TITLE' => 'Imprimir como PDF [Alt+P]', + 'LNK_ABOUT' => 'Acerca de', + 'LNK_ADVANCED_SEARCH' => 'Búsqueda Avanzada', + 'LNK_BASIC_SEARCH' => 'Búsqueda Básica', + 'LNK_SEARCH_FTS_VIEW_ALL' => 'Ver todos los resultados', + 'LNK_SEARCH_NONFTS_VIEW_ALL' => 'Mostrar Todo', + 'LNK_CLOSE' => 'cerrar', + 'LBL_MODIFY_CURRENT_SEARCH' => 'Modificar búsqueda actual', + 'LNK_SAVED_VIEWS' => 'Opciones de Diseño', + 'LNK_DELETE_ALL' => 'elim todo', + 'LNK_DELETE' => 'elim', + 'LNK_EDIT' => 'editar', + 'LNK_GET_LATEST' => 'Obtener última', + 'LNK_GET_LATEST_TOOLTIP' => 'Reemplazar con última versión', + 'LNK_HELP' => 'Ayuda', + 'LNK_CREATE' => 'Crear', + 'LNK_LIST_END' => 'Fin', + 'LNK_LIST_NEXT' => 'Siguiente', + 'LNK_LIST_PREVIOUS' => 'Anterior', + 'LNK_LIST_RETURN' => 'Volver a lista', + 'LNK_LIST_START' => 'Inicio', + 'LNK_LOAD_SIGNED' => 'Firmar', + 'LNK_LOAD_SIGNED_TOOLTIP' => 'Reemplazar con documento firmado', + 'LNK_PRINT' => 'Imprimir', + 'LNK_BACKTOTOP' => 'Volver al parte superior', + 'LNK_REMOVE' => 'quit', + 'LNK_RESUME' => 'Continuar', + 'LNK_VIEW_CHANGE_LOG' => 'Ver Registro de Cambios', + 'NTC_CLICK_BACK' => 'Por favor, presione el botón anterior del navegador y corrija el error.', + 'NTC_DATE_FORMAT' => '(aaaa-mm-dd)', + 'NTC_DATE_TIME_FORMAT' => '(aaaa-mm-dd 24:00)', + 'NTC_DELETE_CONFIRMATION_MULTIPLE' => '¿Está seguro de que desea eliminar los registros seleccionados?', + 'NTC_TEMPLATE_IS_USED' => 'La plantilla se está utilizando en al menos un registro de marketing por email. ¿Está seguro de que desea eliminarla?', + 'NTC_TEMPLATES_IS_USED' => 'Las siguientes plantillas se están utilizando en registros de marketing por email. ¿Está seguro de que desea eliminarlas?', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar esta registro?', + 'NTC_DELETE_CONFIRMATION_NUM' => '¿Está seguro de que desea eliminar el (los)', + 'NTC_UPDATE_CONFIRMATION_NUM' => '¿Está seguro de que desea actualizar el (los)', + 'NTC_DELETE_SELECTED_RECORDS' => 'registro(s) seleccionado(s)?', + 'NTC_LOGIN_MESSAGE' => 'Por favor, introduzca su nombre de usuario y contraseña.', + 'NTC_NO_ITEMS_DISPLAY' => 'ninguno', + 'NTC_REMOVE_CONFIRMATION' => '¿Está seguro de que desea quitar esta relación?', + 'NTC_REQUIRED' => 'Indica un campo requerido', + 'NTC_SUPPORT_SUGARCRM' => 'Soporte el proyecto de fuentes abiertos SugarCRM mediante una donación a través de PayPal - ¡es rápido, gratis y seguro!', + 'NTC_TIME_FORMAT' => '(24:00)', + 'NTC_WELCOME' => 'Bienvenido', + 'NTC_YEAR_FORMAT' => '(aaaa)', + 'LOGIN_LOGO_ERROR' => 'Por favor, reemplace los logos de SugarCRM.', + 'ERROR_FULLY_EXPIRED' => 'La licencia de su compañía para SugarCRM ha caducado hace más de 30 días y necesita ser actualizada. Sólo los administradores podrán iniciar la sesión.', + 'ERROR_LICENSE_EXPIRED' => 'La licencia de su compañía para SugarCRM debe ser actualizada. Sólo los administradores podrán iniciar la sesión', + 'ERROR_LICENSE_VALIDATION' => 'La licencia para SugarCRM de su compañía necesita ser validada. Sólo los administradores pueden iniciar la sesión', + 'WARN_BROWSER_VERSION_WARNING' => '

Aviso: Su navegador o la versión de su navegador no es compatible.

Se recomiendan las siguientes versiones de navegadores:

', + 'WARN_LICENSE_SEATS' => 'Aviso: El número de usuarios activos ha alcanzado el número máximo de licencias permitidas.', + 'WARN_LICENSE_SEATS_MAXED' => 'Aviso: El número de usuarios activos supera el número máximo de licencias permitidas.', + 'WARN_ONLY_ADMINS' => 'Sólo los administradores pueden iniciar la sesión.', + 'WARN_UNSAVED_CHANGES' => 'Está a punto de abandonar este registro sin guardar los cambios que haya podido realizar. ¿Está seguro de que desea salir de este registro?', + 'ERROR_NO_RECORD' => 'Error al recuperar registro. Este registro puede haber sido eliminado o puede que no esté autorizado para verlo.', + 'ERROR_TYPE_NOT_VALID' => 'Error. Este tipo no es válido.', + 'ERROR_NO_BEAN' => 'Falló la obtención del bean', + 'LBL_DUP_MERGE' => 'Buscar Duplicados', + 'LBL_MANAGE_SUBSCRIPTIONS' => 'Administrar Suscripciones', + 'LBL_MANAGE_SUBSCRIPTIONS_FOR' => 'Administrar Suscripciones a', + 'LBL_SUBSCRIBE' => 'Suscribir', + 'LBL_UNSUBSCRIBE' => 'Eliminar Suscripción', + 'LBL_LOADING' => 'Cargando ...', + 'LBL_SEARCHING' => 'Buscando...', + 'LBL_SAVING_LAYOUT' => 'Guardando Diseño ...', + 'LBL_SAVED_LAYOUT' => 'El diseño ha sido guardado.', + 'LBL_SAVED' => 'Guardado', + 'LBL_SAVING' => 'Guardando', + 'LBL_FAILED' => '¡Error!', + 'LBL_DISPLAY_COLUMNS' => 'Mostrar Columnas', + 'LBL_HIDE_COLUMNS' => 'Ocultar Columnas', + 'LBL_SEARCH_CRITERIA' => 'Criterios de Búsqueda', + 'LBL_SAVED_VIEWS' => 'Vistas Guardadas', + 'LBL_PROCESSING_REQUEST' => 'Procesando...', + 'LBL_REQUEST_PROCESSED' => 'Hecho', + 'LBL_AJAX_FAILURE' => 'Fallo de Ajax', + 'LBL_MERGE_DUPLICATES' => 'Combinar', + 'LBL_SAVED_SEARCH_SHORTCUT' => 'Búsquedas Guardadas', + 'LBL_SEARCH_POPULATE_ONLY' => 'Realizar una búsqueda utilizando el formulario de búsqueda anterior', + 'LBL_DETAILVIEW' => 'Vista de Detalle', + 'LBL_LISTVIEW' => 'Vista de Lista', + 'LBL_EDITVIEW' => 'Vista de Edición', + 'LBL_SEARCHFORM' => 'Formulario de Búsqueda', + 'LBL_SAVED_SEARCH_ERROR' => 'Por favor, introduzca un nombre para esta vista.', + 'LBL_DISPLAY_LOG' => 'Mostrar Traza', + 'ERROR_JS_ALERT_SYSTEM_CLASS' => 'Sistema', + 'ERROR_JS_ALERT_TIMEOUT_TITLE' => 'Cierre de la Sesión', + 'ERROR_JS_ALERT_TIMEOUT_MSG_1' => 'Su sesión va a expirar en 2 minutos. Por favor, guarde su trabajo.', + 'ERROR_JS_ALERT_TIMEOUT_MSG_2' => 'Su sesión ha expirado.', + 'MSG_JS_ALERT_MTG_REMINDER_AGENDA' => 'Agenda:', + 'MSG_JS_ALERT_MTG_REMINDER_MEETING' => 'Reunión', + 'MSG_JS_ALERT_MTG_REMINDER_CALL' => 'Llamada', + 'MSG_JS_ALERT_MTG_REMINDER_TIME' => 'Hora:', + 'MSG_JS_ALERT_MTG_REMINDER_LOC' => 'Lugar:', + 'MSG_JS_ALERT_MTG_REMINDER_DESC' => 'Descripción:', + 'MSG_JS_ALERT_MTG_REMINDER_CALL_MSG' => 'Haga clic en Aceptar para acceder a esta llamada o haga clic en Cancelar para cerrar este mensaje.', + 'MSG_JS_ALERT_MTG_REMINDER_MEETING_MSG' => 'Haga clic en Aceptar para ver esta reunión o en Cancelar para omitir este mensaje.', + 'MSG_LIST_VIEW_NO_RESULTS_BASIC' => 'No se encontraron resultados.', + 'MSG_LIST_VIEW_NO_RESULTS' => 'No se encontraron resultados.', + 'MSG_LIST_VIEW_NO_RESULTS_SUBMSG' => 'Crear como uno nuevo', + 'MSG_EMPTY_LIST_VIEW_NO_RESULTS' => 'Actualmente no tiene registros guardados.', + 'MSG_EMPTY_LIST_VIEW_NO_RESULTS_SUBMSG' => 'Aprender más sobre el módulo. Para obtener más información, use el menú desplegable de usuario localizado en la barra de navegación principal para acceder a Ayuda.', + 'LBL_CLICK_HERE' => 'Haga clic aquí', + 'LBL_ADD_TO_FAVORITES' => 'Agregar a Mis Favoritos', + 'LBL_MARK_AS_FAVORITES' => 'Marcar como Favorito', + 'LBL_CREATE_CONTACT' => 'Nuevo Contacto', + 'LBL_CREATE_CASE' => 'Nuevo Caso', + 'LBL_CREATE_NOTE' => 'Nueva Nota', + 'LBL_CREATE_OPPORTUNITY' => 'Nueva Oportunidad', + 'LBL_SCHEDULE_CALL' => 'Registrar Llamada', + 'LBL_SCHEDULE_MEETING' => 'Programar Reunión', + 'LBL_CREATE_TASK' => 'Nueva Tarea', + 'LBL_REMOVE_FROM_FAVORITES' => 'Quitar de Mis Favoritos', + 'LBL_GENERATE_WEB_TO_LEAD_FORM' => 'Generar Formulario', + 'LBL_SAVE_WEB_TO_LEAD_FORM' => 'Guardar Formulario Web A Cliente Potencial', + 'LBL_PLEASE_SELECT' => 'Por favor, Seleccione', + 'LBL_REDIRECT_URL' => 'URL de Redirección', + 'LBL_RELATED_CAMPAIGN' => 'Campaña relacionada', + 'LBL_ADD_ALL_LEAD_FIELDS' => 'Agregar Todos los Campos', + 'LBL_REMOVE_ALL_LEAD_FIELDS' => 'Quitar Todos los Campos', + 'LBL_ONLY_IMAGE_ATTACHMENT' => 'Sólo puede incluirse un adjunto de tipo imagen', + 'LBL_TRAINING' => 'Soporte', + 'ERR_DATABASE_CONN_DROPPED' => 'Error ejecutando una consulta. Posiblemente su base de datos se ha desconectado. Por favor, actualice esta página. Es posible que incluso necesite reiniciar su servidor web.', + 'ERR_MSSQL_DB_CONTEXT' => 'Cambiado el contexto de base de datos a', + 'ERR_MSSQL_WARNING' => 'Aviso:', + 'ERR_MISSING_VARDEF_NAME' => 'Aviso: el campo [[field]] no tiene una entrada mapeada en el archivo vardefs.php de [moduleDir]', + 'ERR_CANNOT_CREATE_METADATA_FILE' => 'Error: No existe el archivo [[file]]. No se ha podido crear porque el archivo con el HTML correspondiente no ha sido encontrado.', + 'ERR_CANNOT_FIND_MODULE' => 'Error: El módulo [module] no existe.', + 'LBL_ALT_ADDRESS' => 'Otra Dirección:', + 'ERR_SMARTY_UNEQUAL_RELATED_FIELD_PARAMETERS' => 'Error: Hay un número de argumentos desigual para los elementos 'key' y 'copy' en el array displayParams.', + 'ERR_SMARTY_MISSING_DISPLAY_PARAMS' => 'Falta el índice del Array en displayParams para:', + 'LBL_DASHLET_CONFIGURE_GENERAL' => 'General', + 'LBL_DASHLET_CONFIGURE_FILTERS' => 'Filtros', + 'LBL_DASHLET_CONFIGURE_MY_ITEMS_ONLY' => 'Sólo Mis Elementos', + 'LBL_DASHLET_CONFIGURE_TITLE' => 'Título', + 'LBL_DASHLET_CONFIGURE_DISPLAY_ROWS' => 'Mostrar Filas', + 'LBL_CREATING_NEW_PAGE' => 'Creando Nueva Página ...', + 'LBL_NEW_PAGE_FEEDBACK' => 'Ha creado una nueva página. Puede agregar nuevo contenido con la opción de menú Agregar Sugar Dashlets.', + 'LBL_DELETE_PAGE_CONFIRM' => '¿Está seguro de que desea eliminar esta página?', + 'LBL_SAVING_PAGE_TITLE' => 'Guardando Título de Página ...', + 'LBL_RETRIEVING_PAGE' => 'Recuperando Página ...', + 'LBL_MAX_DASHLETS_REACHED' => 'Ha alcanzado el máximo número de dashlets establecido por su administrador. Por favor, quite un Sugar Dashlet para poder agregar más.', + 'LBL_ADDING_DASHLET' => 'Agregando Sugar Dashlet ...', + 'LBL_ADDED_DASHLET' => 'Sugar Dashlet Agregado', + 'LBL_REMOVE_DASHLET_CONFIRM' => '¿Está seguro de que desea quitar el Sugar Dashlet?', + 'LBL_REMOVING_DASHLET' => 'Quitando Sugar Dashlet ...', + 'LBL_REMOVED_DASHLET' => 'Sugar Dashlet Quitado', + 'LBL_ADD_PAGE' => 'Agregar Página', + 'LBL_DELETE_PAGE' => 'Eliminar Página', + 'LBL_CHANGE_LAYOUT' => 'Cambiar Diseño', + 'LBL_RENAME_PAGE' => 'Renombrar Página', + 'LBL_LOADING_PAGE' => 'Cargando página, espere por favor...', + 'LBL_RELOAD_PAGE' => 'Por favor, recargue la ventana para usar este Sugar Dashlet.', + 'LBL_ADD_DASHLETS' => 'Agregar Dashlets', + 'LBL_CLOSE_DASHLETS' => 'Cerrar', + 'LBL_OPTIONS' => 'Opciones', + 'LBL_NUMBER_OF_COLUMNS' => 'Seleccione el número de columnas', + 'LBL_1_COLUMN' => '1 Columna', + 'LBL_2_COLUMN' => '2 Columnas', + 'LBL_3_COLUMN' => '3 Columnas', + 'LBL_PAGE_NAME' => 'Nombre de página', + 'LBL_SEARCH_RESULTS' => 'Resultados de Búsqueda', + 'LBL_SEARCH_MODULES' => 'Módulos', + 'LBL_SEARCH_CHARTS' => 'Gráficos', + 'LBL_SEARCH_REPORT_CHARTS' => 'Gráficos de Informe', + 'LBL_SEARCH_TOOLS' => 'Herramientas', + 'LBL_SEARCH_HELP_TITLE' => 'Consejos de Búsqueda', + 'LBL_SEARCH_HELP_CLOSE_TOOLTIP' => 'Cerrar', + 'LBL_SEARCH_RESULTS_FOUND' => 'Resultados de la búsqueda', + 'LBL_SEARCH_RESULTS_TIME' => 'ms.', + 'ERR_BLANK_PAGE_NAME' => 'Por favor, introduzca un nombre de página.', + 'LBL_NO_IMAGE' => 'Sin Imagen', + 'LBL_MODULE' => 'Módulo', + 'LBL_COPY_ADDRESS_FROM_LEFT' => 'Copiar dirección de la izquierda:', + 'LBL_SAVE_AND_CONTINUE' => 'Guardar y Continuar', + 'LBL_SEARCH_HELP_TEXT' => 'Al utilizar el operador % como comodín puede hacer su búsqueda más amplio. Por ejemplo, el INSEAD de sólo la búsqueda de resultados que la igualdad de "Manzanas", que podría cambiar su búsqueda a "Manzanas%", que coinciden con los resultados que comienzan con la palabra, sino que las manzanas pueden contener otros personajes también.', + 'ERR_QUERY_LIMIT' => 'Error: Límite de $limit consultas alcanzado en el módulo $module.', + 'ERROR_NOTIFY_OVERRIDE' => 'Error: ResourceObserver->notify() necesita ser reemplazado.', + 'ERR_MONITOR_FILE_MISSING' => 'Error: No se puede crear monitor porque el archivo de metadatos está vacío o el archivo no existe.', + 'ERR_MONITOR_NOT_CONFIGURED' => 'Error: No hay monitor configurado para el nombre solicitado', + 'ERR_UNDEFINED_METRIC' => 'Error: No se puede establecer el valor de métrica definido', + 'ERR_STORE_FILE_MISSING' => 'Error: No se puede encontrar el archivo de la aplicación de la tienda', + 'LBL_MONITOR_ID' => 'Monitor de Id', + 'LBL_USER_ID' => 'ID Usuario', + 'LBL_MODULE_NAME' => 'Nombre de Módulo', + 'LBL_ITEM_ID' => 'Ítem Id', + 'LBL_ITEM_SUMMARY' => 'Ítem resumen', + 'LBL_ACTION' => 'Acción', + 'LBL_SESSION_ID' => 'Sesión Id', + 'LBL_BREADCRUMBSTACK_CREATED' => 'BreadCrumbStack creado por el usuario id {0}', + 'LBL_VISIBLE' => 'Dato visible', + 'LBL_DATE_LAST_ACTION' => 'Fecha de última acción', + 'MSG_IS_NOT_BEFORE' => 'no antes de', + 'MSG_IS_MORE_THAN' => 'es más que', + 'MSG_IS_LESS_THAN' => 'es menor que', + 'MSG_SHOULD_BE' => 'debe ser', + 'MSG_OR_GREATER' => 'o más', + 'LBL_PORTAL_WELCOME_TITLE' => 'Bienvenido a Sugar Portal 5.1.0', + 'LBL_PORTAL_WELCOME_INFO' => 'El Portal de Sugar es un marco que proporciona en tiempo real punto de vista de los casos, los errores y boletines de noticias a los clientes, etc. Se trata de una interfaz externa de Sugar que se puede implementar en cualquier sitio web. Manténgase atento a las características de servicio al cliente como el auto de Gestión de Proyectos y foros en nuestras futuras versiones.', + 'LBL_LIST' => 'Lista', + 'LBL_CREATE_BUG' => 'Crear incidencia', + 'LBL_NO_RECORDS_FOUND' => '- 0 Registros Encontrados -', + 'DATA_TYPE_DUE' => 'Vencimiento:', + 'DATA_TYPE_START' => 'Inicio:', + 'DATA_TYPE_SENT' => 'Enviado:', + 'DATA_TYPE_MODIFIED' => 'Modificado:', + 'LBL_REPORT_NEWREPORT_COLUMNS_TAB_COUNT' => 'Total', + 'LBL_OBJECT_IMAGE' => 'imagen objeto', + 'LBL_MASSUPDATE_DATE' => 'Seleccionar fecha', + 'LBL_VALIDATE_RANGE' => 'no está dentro del rango válido', + 'LBL_DROPDOWN_LIST_ALL' => 'Todos', + 'LBL_OPERATOR_IN_TEXT' => 'es uno de los siguientes:', + 'LBL_OPERATOR_NOT_IN_TEXT' => 'no es uno de los siguientes:', + 'ERR_CONNECTOR_FILL_BEANS_SIZE_MISMATCH' => 'Error: La cantidad del Array del parámetro bean no coincide con la cantidad del Array del resultado.', + 'ERR_MISSING_MAPPING_ENTRY_FORM_MODULE' => 'Error: Falta el módulo de entrada de asignación.', + 'ERROR_UNABLE_TO_RETRIEVE_DATA' => 'Error: No se puede recuperar datos de {0} conector. Actualmente, el servicio puede ser inaccesible o los ajustes de configuración pueden no ser válidas. Mensaje de error del conector: ({1}).', + 'LBL_MERGE_CONNECTORS' => 'Obtener datos', + 'LBL_MERGE_CONNECTORS_BUTTON_KEY' => '[D]', + 'LBL_REMOVE_MODULE_ENTRY' => '¿Está usted seguro de que quiere desactivar la integración del conector de este módulo?', + 'LBL_FASTCGI_LOGGING' => 'Para unos resultados óptimos al utilizar el sapi IIS/FastCGI, establezca fastcgi.logging a 0 en su archivo php.ini.', + 'LBL_MASSUPDATE_DELETE_GLOBAL_TEAM' => 'El equipo Global no se pueden eliminar.', + 'LBL_MASSUPDATE_DELETE_USER_EXISTS' => 'Este equipo privado [{0}] no puede ser eliminado hasta que el usuario [{1}] se elimine.', + 'LBL_NO_FLASH_PLAYER' => 'Usted tiene Adobe Flash apagado o está utilizando una versión anterior del reproductor de Adobe Flash Player. Para obtener la última versión de Flash Player, clic aquí.', + 'LBL_COLLECTION_NAME' => 'Nombre', + 'LBL_COLLECTION_PRIMARY' => 'Principal', + 'ERROR_MISSING_COLLECTION_SELECTION' => 'Campo vacío requerido', + 'LBL_COLLECTION_EXACT' => 'Exactamente', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_YESTERDAY' => 'Ayer', + 'LBL_TODAY' => 'hoy', + 'LBL_TOMORROW' => 'mañana', + 'LBL_NEXT_WEEK' => 'la semana que viene', + 'LBL_NEXT_MONDAY' => 'próximo lunes', + 'LBL_NEXT_FRIDAY' => 'próximo viernes', + 'LBL_TWO_WEEKS' => 'dos semanas', + 'LBL_NEXT_MONTH' => 'el mes que viene', + 'LBL_FIRST_DAY_OF_NEXT_MONTH' => 'primer día del próximo mes', + 'LBL_THREE_MONTHS' => 'tres meses', + 'LBL_SIXMONTHS' => 'seis meses', + 'LBL_NEXT_YEAR' => 'próximo año', + 'LBL_FILTERED' => 'Filtrado', + 'LBL_HOURS' => 'Horas', + 'LBL_MINUTES' => 'Minutos', + 'LBL_MERIDIEM' => 'Meridiem', + 'LBL_DATE' => 'Fecha', + 'LBL_DASHLET_CONFIGURE_AUTOREFRESH' => 'Actualización automática', + 'LBL_DURATION_DAY' => 'día', + 'LBL_DURATION_HOUR' => 'hora', + 'LBL_DURATION_MINUTE' => 'minuto', + 'LBL_DURATION_DAYS' => 'días', + 'LBL_DURATION_HOURS' => 'horas', + 'LBL_DURATION_MINUTES' => 'minutos', + 'LBL_CHOOSE_MONTH' => 'Elegir mes', + 'LBL_ENTER_YEAR' => 'Poner año', + 'LBL_ENTER_VALID_YEAR' => 'Por favor, poner un año valido', + 'LBL_INVALID_USA_PHONE_FORMAT' => 'Por favor, introduce un número de teléfono de EE.UU., incluyendo código de área.', + 'ERR_FILE_WRITE' => 'Error: No se pudo escribir el archivo {0}. Por favor, revise el sistema y los permisos del servidor web.', + 'ERR_FILE_NOT_FOUND' => 'Error: No se puede cargar el archivo {0}. Por favor, compruebe los permisos del sistema y del servidor web.', + 'LBL_AND' => 'y', + 'LBL_BEFORE' => 'Antes de', + 'LBL_UPLOAD_FROM_COMPUTER' => 'Cargar de vuestro ordenador', + 'LBL_SEARCH_EXTERNAL_API' => 'Fichero en fuente externa', + 'LBL_EXTERNAL_SECURITY_LEVEL' => 'Seguridad', + 'LBL_SHARE_PRIVATE' => 'Privado', + 'LBL_SHARE_COMPANY' => 'Compañía', + 'LBL_SHARE_LINKABLE' => 'Enlazable', + 'LBL_SHARE_PUBLIC' => 'Público', + 'LBL_RSS_FEED' => 'RSS Feed', + 'LBL_RSS_RECORDS_FOUND' => 'registro(s) encontrado(s)', + 'ERR_RSS_INVALID_INPUT' => 'RSS no tiene una entrada valida', + 'ERR_RSS_INVALID_RESPONSE' => 'RSS no tiene una respuesta validad para este metodo', + 'ERR_GOOGLE_API_415' => 'Google Docs no soporta el formato del fichero.', + 'LBL_EMPTY' => 'Vacío', + 'LBL_IS_EMPTY' => 'Está Vacío', + 'LBL_IS_NOT_EMPTY' => 'No está Vacío', + 'LBL_IMPORT_SAMPLE_FILE_TEXT' => '"Este es un archivo de importación de muestra que es un ejemplo de los contenidos que se espera de un archivo que está listo para la importación." "El archivo es uno delimitado por comas .csv, usando comillas como el calificador de campo." "La fila de encabezado es la fila de arriba la mayoría en el archivo que contiene las etiquetas de campo como si fuera a ver en la aplicación." "Estas etiquetas se utilizan para el mapeo de los datos en el archivo de los campos de la aplicación." "Notas: Los nombres de base de datos también podrían ser utilizados en la cabecera. Esto es útil cuando usted está usando phpMyAdmin o cualquier otra herramienta de bases de datos para proporcionar una lista de exportación de datos a importar." "El orden de las columnas no es crítico, el proceso de importación coincide con los datos en los campos apropiados basados ​​en la fila de cabecera". "Para utilizar este archivo como plantilla, haga lo siguiente:" "1. Quitar las filas de la muestra de los datos" "2. Retire el texto de ayuda que usted está leyendo ahora mismo" "3. de entrada de sus propios datos en las filas correspondientes y columnas" " 4. Guarde el archivo en una ubicación conocida de su sistema " " 5. Haga clic en la opción Importar en el menú Acciones en la aplicación y elegir el archivo a subir "', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'Asignado a', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_REPORTS_TO_ID' => 'Informa a Id', + 'LBL_EXPORT_FULL_NAME' => 'Nombre Completo', + 'LBL_EXPORT_TEAM_ID' => 'ID de equipo', + 'LBL_EXPORT_TEAM_NAME' => 'Equipos', + 'LBL_EXPORT_TEAM_SET_ID' => 'ID Conjunto de equipo', + 'LBL_QUICKEDIT_NODEFS_NAVIGATION' => 'Navegando...', + 'LBL_PENDING_NOTIFICATIONS' => 'Notificaciones', + 'LBL_ALT_ADD_TEAM_ROW' => 'Añadir nuevo registro de equipo.', + 'LBL_ALT_REMOVE_TEAM_ROW' => 'Eliminar equipo', + 'LBL_ALT_SPOT_SEARCH' => 'Lugar de búsqueda', + 'LBL_ALT_SORT_DESC' => 'Ordenado descendente', + 'LBL_ALT_SORT_ASC' => 'Ordenado ascendente', + 'LBL_ALT_SORT' => 'Ordenar', + 'LBL_ALT_SHOW_OPTIONS' => 'Mostrar opciones', + 'LBL_ALT_HIDE_OPTIONS' => 'Ocultar opciones', + 'LBL_ALT_MOVE_COLUMN_LEFT' => 'Mover selección a la lista de la izquierda', + 'LBL_ALT_MOVE_COLUMN_RIGHT' => 'Mover selección a la lista de la derecha', + 'LBL_ALT_MOVE_COLUMN_UP' => 'Mover selección hacia arriba en el orden de la lista', + 'LBL_ALT_MOVE_COLUMN_DOWN' => 'Mover selección hacia abajo en el orden de la lista', + 'LBL_ALT_INFO' => 'Información', + 'MSG_DUPLICATE' => 'El registro {0} que está a punto de crear puede ser un duplicado de un registro {0} que ya existe. {1} registros que contienen nombres similares se enumeran a continuación.
Haga clic en Crear {1} para continuar la creación de este nuevo {0}, o seleccionar un archivo {0} se enumeran a continuación.', + 'MSG_SHOW_DUPLICATES' => 'El registro {0} que está a punto de crear puede ser un duplicado de un registro {0} que ya existe. {1} registros que contienen nombres similares se enumeran a continuación. Haga clic en Guardar para continuar con la creación de este nuevo {0}, o haga clic en Cancelar para volver al módulo sin necesidad de crear {0}.', + 'LBL_EMAIL_TITLE' => 'Email', + 'LBL_EMAIL_OPT_TITLE' => 'Email rehusado', + 'LBL_EMAIL_INV_TITLE' => 'email invalido', + 'LBL_EMAIL_PRIM_TITLE' => 'email principal', + 'LBL_SELECT_ALL_TITLE' => 'Seleccionar todo', + 'LBL_SELECT_THIS_ROW_TITLE' => 'Seleccionar esta fila', + 'LBL_TEAM_SELECTED_TITLE' => 'Equipo seleccionado', + 'LBL_TEAM_SELECT_AS_PRIM_TITLE' => 'Seleccione para hacer este equipo el principal', + 'UPLOAD_ERROR_TEXT' => 'ERROR: Hubo un error durante la subida. Código de error: {0} - {1}', + 'UPLOAD_ERROR_TEXT_SIZEINFO' => 'ERROR: Hubo un error durante la subida. Código de error: {0} - {1}. El upload_maxsize es {2}', + 'UPLOAD_ERROR_HOME_TEXT' => 'ERROR: Se ha producido un error durante la subida, por favor póngase en contacto con un administrador para obtener ayuda.', + 'UPLOAD_MAXIMUM_EXCEEDED' => 'El tamaño de la ({0} bytes) Superó el máximo permitido: {1} bytes', + 'LBL_EDIT_BUTTON_KEY' => 'E', + 'LBL_EDIT_BUTTON_LABEL' => 'Editar', + 'LBL_EDIT_BUTTON_TITLE' => 'Editar [Alt+E]', + 'LBL_DUPLICATE_BUTTON_KEY' => 'U', + 'LBL_DUPLICATE_BUTTON_LABEL' => 'Duplicar', + 'LBL_DUPLICATE_BUTTON_TITLE' => 'Duplicar [Alt+U]', + 'LBL_DELETE_BUTTON_KEY' => 'D', + 'LBL_DELETE_BUTTON_LABEL' => 'Eliminar', + 'LBL_DELETE_BUTTON_TITLE' => 'Eliminar [Alt+D]', + 'LBL_SAVE_BUTTON_KEY' => 'S', + 'LBL_SAVE_BUTTON_LABEL' => 'Guardar', + 'LBL_SAVE_BUTTON_TITLE' => 'Guardar [Alt+S]', + 'LBL_CANCEL_BUTTON_KEY' => 'X', + 'LBL_CANCEL_BUTTON_LABEL' => 'Cancelar', + 'LBL_CANCEL_BUTTON_TITLE' => 'Cancelar [Alt+X]', + 'LBL_FIRST_INPUT_EDIT_VIEW_KEY' => '7', + 'LBL_ADV_SEARCH_LNK_KEY' => '8', + 'LBL_FIRST_INPUT_SEARCH_KEY' => '9', + 'LBL_GLOBAL_SEARCH_LNK_KEY' => '', + 'LBL_KEYBOARD_SHORTCUTS_HELP_TITLE' => 'Atajos de teclado', + 'LBL_KEYBOARD_SHORTCUTS_HELP' => '

Funcionalidad en formularios- Alt+
I = editar (detailview)
U = duplicar (detailview)
D = borrar (detailview)
A = guardar (editview)
L = cancelar (editview)

Búsquedas y Navegación - Alt+
7 = Primer elemento en el formulario de edición
8 = Enlace de búsqueda avanzada
9 = Primer elemento en el formulario de búsqueda
0 = Elemento en búsqueda unificada

', + 'ERR_CONNECTOR_NOT_ARRAY' => 'conector serie en {0} ha definido incorrectamente o está vacío y no se podían usar.', + 'ERR_SUHOSIN' => 'El flujo de subida está bloqueado por Suhosin, añade un "upload" en suhosin.executor.include.whitelist (Ver sugarcrm.log para más información)', + 'LBL_CREATE_KB_DOCUMENT' => 'Crear artículo', + 'documentation' => + array ( + 'COM' => '05_Sugar_Community_Edition', + 'CORP' => '03_Sugar_Corporate', + 'ENT' => '02_Sugar_Enterprise', + 'LBL_DOCS' => 'Documentación', + 'PRO' => '04_Sugar_Professional', + 'ULT' => '02_Sugar_Ultimate', + ), +); + diff --git a/include/language/es_es.notify_template.html b/include/language/es_es.notify_template.html new file mode 100644 index 00000000000..38dca1576e0 --- /dev/null +++ b/include/language/es_es.notify_template.html @@ -0,0 +1,350 @@ + + + + +Presupuesto de SugarCRM - {QUOTE_SUBJECT} + + +{ASSIGNER} ha asignado un Presupuesto a {ASSIGNED_USER}. + +Asunto: {QUOTE_SUBJECT} +Estado: {QUOTE_STATUS} +Fecha de Cierre Estimada: {QUOTE_CLOSEDATE} +Descripcin: {QUOTE_DESCRIPTION} + +Puede examinar este Presupuesto en: +<{URL}> + + + + +Cuenta de SugarCRM - {ACCOUNT_NAME} + + +{ASSIGNER} ha asignado una Cuenta a {ASSIGNED_USER}. + +Nombre: {ACCOUNT_NAME} +Tipo: {ACCOUNT_TYPE} +Descripcin: {ACCOUNT_DESCRIPTION} + +Puede examinar esta Cuenta en: +<{URL}> + + + + +Caso de SugarCRM - {CASE_SUBJECT} + + +{ASSIGNER} ha asignado un Caso a {ASSIGNED_USER}. + +Asunto: {CASE_SUBJECT} +Prioridad: {CASE_PRIORITY} +Estado: {CASE_STATUS} +Descripcin: {CASE_DESCRIPTION} + +Puede examinar este Caso en: +<{URL}> + + + + +Tarea de SugarCRM - {TASK_SUBJECT} + + +{ASSIGNER} ha asignado una Tarea a {ASSIGNED_USER}. + +Asunto: {TASK_SUBJECT} +Prioridad: {TASK_PRIORITY} +Fecha de Vencimiento: {TASK_DUEDATE} +Estado: {TASK_STATUS} +Descripcin: {TASK_DESCRIPTION} + +Puede examinar esta Tarea en: +<{URL}> + + + + +Reunin de SugarCRM - {MEETING_SUBJECT} + + +A: {MEETING_TO} + +{ASSIGNER} le ha invitado a una Reunin. + +Asunto: {MEETING_SUBJECT} +Estado: {MEETING_STATUS} +Fecha inicio: {MEETING_STARTDATE} +Duracin: {MEETING_HOURS}h, {MEETING_MINUTES}m +Descripcin: {MEETING_DESCRIPTION} + +Aceptar esta reunin: +<{ACCEPT_URL}&accept_status=accept> + +Aceptar provisionalmente esta reunin +<{ACCEPT_URL}&accept_status=tentative> + +Rechazar esta reunin +<{ACCEPT_URL}&accept_status=decline> + + + +Reunin de SugarCRM - {MEETING_SUBJECT} + + +{ASSIGNER} ha asignado una Reunin a {ASSIGNED_USER}. + +Asunto: {MEETING_SUBJECT} +Estado: {MEETING_STATUS} +Fecha de Inicio: {MEETING_STARTDATE} +Duracin: {MEETING_HOURS}h, {MEETING_MINUTES}m +Descripcin: {MEETING_DESCRIPTION} + +Puede examinar esta Reunin en: +<{URL}> + + + + +Correo de SugarCRM - {EMAIL_SUBJECT} + + +{ASSIGNER} ha asignado un Correo a {ASSIGNED_USER}. + +Asunto: {EMAIL_SUBJECT} +Fecha envo: {EMAIL_DATESENT} + +Puede revisar este Correo en: +<{URL}> + + + + +Contacto de SugarCRM - {CONTACT_NAME} + + +{ASSIGNER} ha asignado un Contacto a {ASSIGNED_USER}. + +Nombre: {CONTACT_NAME} +Descripcin: {CONTACT_DESCRIPTION} + +Puede examinar este Contacto en: +<{URL}> + + + + +Cliente Potencial de SugarCRM - {LEAD_NAME} + + +{ASSIGNER} ha asignado un Cliente Potencial a {ASSIGNED_USER}. + +Nombre: {LEAD_NAME} +Origen: {LEAD_SOURCE} +Estado: {LEAD_STATUS} +Descripcin: {LEAD_DESCRIPTION} + +Puede examinar este Cliente Potencial en: +<{URL}> + + + + +Oportunidad de SugarCRM - {OPPORTUNITY_NAME} + + +{ASSIGNER} ha asignado una Oportunidad a {ASSIGNED_USER}. + +Nombre: {OPPORTUNITY_NAME} +Cantidad: {OPPORTUNITY_AMOUNT} +Fecha cierre estimada: {OPPORTUNITY_CLOSEDATE} +Estapa de la venta: {OPPORTUNITY_STAGE} +Descripcin: {OPPORTUNITY_DESCRIPTION} + +Puede examinar esta Oportunidad en: +<{URL}> + + + + +Incidencia de SugarCRM - {BUG_SUBJECT} + + +{ASSIGNER} ha asignado una Incidencia a {ASSIGNED_USER}. + +Nmero de Incidencia: {BUG_BUG_NUMBER} +Asunto: {BUG_SUBJECT} +Tipo: {BUG_TYPE} +Prioridad: {BUG_PRIORITY} +Estado: {BUG_STATUS} +Resolucin: {BUG_RESOLUTION} +Publicacin: {BUG_RELEASE} +Descripcin: {BUG_DESCRIPTION} +Registro de Actividad: {BUG_WORK_LOG} + +Puede examinar esta Incidencia en: +<{URL}> + + + + +SugarCRM - {OBJECT} Asignado + + +{ASSIGNER} ha asignado algn objeto de tipo {OBJECT} a {ASSIGNED_USER}. + +Puede examinar este objeto de tipo {OBJECT} en: +<{URL}> + + + +Llamada de SugarCRM - {CALL_SUBJECT} + + +To: {CALL_TO}, + {ASSIGNER} le ha invitado a una Llamada +Asunto: {CALL_SUBJECT} +Estado: {CALL_STATUS} +Fecha de Inicio: {CALL_STARTDATE} +Duracin: {CALL_HOURS}h, {CALL_MINUTES}m +Descripcin: {CALL_DESCRIPTION} + +Aceptar esta llamada: +<{ACCEPT_URL}&accept_status=accept> + +Aceptar provisionalmente esta llamada +<{ACCEPT_URL}&accept_status=tentative> + +Rechazar esta llamada +<{ACCEPT_URL}&accept_status=decline> + + + + +Llamada de SugarCRM - {CALL_SUBJECT} + + +{ASSIGNER} ha asignado una Llamada a {ASSIGNED_USER}. + +Asunto: {CALL_SUBJECT} +Estado: {CALL_STATUS} +Fecha de Inicio: {CALL_STARTDATE} +Duracin: {CALL_HOURS}h, {CALL_MINUTES}m +Descripcin: {CALL_DESCRIPTION} + +Puede revisar esta Llamada en: +<{URL}> + + + +Campaa de SugarCRM - {CAMPAIGN_NAME} + + +{ASSIGNER} ha asignado una Campaa a {ASSIGNED_USER}. + +Asunto: {CAMPAIGN_NAME} +Cantidad: {CAMPAIGN_AMOUNT} +Fecha de cierre: {CAMPAIGN_CLOSEDATE} +Estado: {CAMPAIGN_STATUS} +Descripcin: {CAMPAIGN_DESCRIPTION} + +Puede examinar esta Campaa en: +<{URL}> + + + +Presupuestos de SugarCRM - Su Presupuesto para {QUOTA_TIMEPERIOD} + + +{ASSIGNER} ha asignado un Presupuesto a {ASSIGNED_USER}. + +Cantidad: {QUOTA_AMOUNT} +Perodo: {QUOTA_TIMEPERIOD} + +Puede revisar este Prespuesto en: +<{QUOTA_URL}> + + + +Documento de SugarCRM - {KBDOCUMENT_NAME} + + + +{NOTIFICATION_MESSAGE} + +Nombre: {KBDOCUMENT_NAME} +Fecha de Creacin: {KBDOCUMENT_DATE_CREATED} +Creador Por: {KBDOCUMENT_CREATED_BY} +Estado: {KBDOCUMENT_STATUS} +Descripcin: {KBDOCUMENT_DESCRIPTION} + +Puede revisar este Documento en: +<{URL}> + + + +Contrato de SugarCRM - {CONTRACT_NAME} + + + +{ASSIGNER} ha asignado un Contrato a {ASSIGNED_USER}. + +Puede revisar este Contrato en: +<{URL}> + + + +Contrato de SugarCRM - {CONTRACT_NAME} + + + +Su Contrato: {CONTRACT_NAME} vencer el {CONTRACT_END_DATE}. + +Puede revisar este Contrato en: +<{URL}> + diff --git a/modules/ACL/language/es_es.lang.php b/modules/ACL/language/es_es.lang.php new file mode 100644 index 00000000000..3ba5088a92b --- /dev/null +++ b/modules/ACL/language/es_es.lang.php @@ -0,0 +1,64 @@ + 'Todo', + 'LBL_ALLOW_NONE' => 'Nada', + 'LBL_ALLOW_OWNER' => 'Propietario', + 'LBL_ROLE' => 'Rol', + 'LBL_NAME' => 'Nombre', + 'LBL_DESCRIPTION' => 'Descripción', + 'LIST_ROLES' => 'Listar Roles', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LIST_ROLES_BY_USER' => 'Listar Roles por Usuarios', + 'LBL_ROLES_SUBPANEL_TITLE' => 'Roles de Usuario', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda', + 'LBL_NO_ACCESS' => 'No tiene acceso a esta área. Contacte con el Administrador de su sitio web para obtenerlo.', + 'LBL_REDIRECT_TO_HOME' => 'Redirigir a la página principal en', + 'LBL_SECONDS' => 'segundos', + 'LBL_ADDING' => 'Añadiendo para', +); \ No newline at end of file diff --git a/modules/ACLActions/language/es_es.lang.php b/modules/ACLActions/language/es_es.lang.php new file mode 100644 index 00000000000..4543efac687 --- /dev/null +++ b/modules/ACLActions/language/es_es.lang.php @@ -0,0 +1,75 @@ + 'Todo', + 'LBL_ACCESS_NONE' => 'Nada', + 'LBL_ACCESS_OWNER' => 'Propietario', + 'LBL_ACCESS_NORMAL' => 'Normal', + 'LBL_ACCESS_ADMIN' => 'Admin', + 'LBL_ACCESS_ENABLED' => 'Habilitado', + 'LBL_ACCESS_DISABLED' => 'Deshabilitado', + 'LBL_ACCESS_DEV' => 'Desarrollador', + 'LBL_ACCESS_ADMIN_DEV' => 'Admin. y Desarrollador', + 'LBL_NAME' => 'Nombre', + 'LBL_DESCRIPTION' => 'Descripción', + 'LIST_ROLES' => 'Listar Roles', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LIST_ROLES_BY_USER' => 'Listar Roles por Usuario', + 'LBL_ROLES_SUBPANEL_TITLE' => 'Roles de Usuario', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda', + 'LBL_ACTION_VIEW' => 'Ver', + 'LBL_ACTION_EDIT' => 'Editar', + 'LBL_ACTION_DELETE' => 'Eliminar', + 'LBL_ACTION_IMPORT' => 'Importar', + 'LBL_ACTION_EXPORT' => 'Exportar', + 'LBL_ACTION_LIST' => 'Listar', + 'LBL_ACTION_MASSUPDATE' => 'Actualización masiva', + 'LBL_ACTION_ACCESS' => 'Acceso', + 'LBL_ACTION_ADMIN' => 'Tipo de Acceso', + 'LBL_ACCESS_DEFAULT' => 'No Establecido', +); \ No newline at end of file diff --git a/modules/ACLRoles/language/es_es.lang.php b/modules/ACLRoles/language/es_es.lang.php new file mode 100644 index 00000000000..705f6b48ee0 --- /dev/null +++ b/modules/ACLRoles/language/es_es.lang.php @@ -0,0 +1,66 @@ + 'Roles', + 'LBL_MODULE_TITLE' => 'Roles: Inicio', + 'LBL_ROLE' => 'Rol', + 'LBL_NAME' => 'Nombre', + 'LBL_DESCRIPTION' => 'Descripción', + 'LIST_ROLES' => 'Listar Roles', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LIST_ROLES_BY_USER' => 'Listar Roles por Usuario', + 'LBL_LIST_FORM_TITLE' => 'Roles', + 'LBL_ROLES_SUBPANEL_TITLE' => 'Roles de Usuario', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda', + 'LBL_CREATE_ROLE' => 'Nuevo Rol', + 'LBL_EDIT_VIEW_DIRECTIONS' => 'Haga doble clic en una celda para cambiar su valor.', + 'LBL_ACCESS_DEFAULT' => 'No Establecido', + 'LBL_ACTION_ADMIN' => 'Tipo de Acceso', + 'LBL_ALL' => 'Todo', + 'LBL_DUPLICATE_OF' => 'Duplicado De', +); \ No newline at end of file diff --git a/modules/Accounts/language/es_es.lang.php b/modules/Accounts/language/es_es.lang.php new file mode 100644 index 00000000000..ffbca6f37d0 --- /dev/null +++ b/modules/Accounts/language/es_es.lang.php @@ -0,0 +1,199 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Creado:', + 'LBL_DATE_MODIFIED' => 'Modificado:', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id:', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre:', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Usuario Asignado:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a:', + 'ACCOUNT_REMOVE_PROJECT_CONFIRM' => '¿Está seguro de que desea quitar esta cuenta del proyecto?', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la cuenta.', + 'LBL_ACCOUNT_NAME' => 'Nombre:', + 'LBL_ACCOUNT' => 'Cuenta:', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_ADDRESS_INFORMATION' => 'Direcciones', + 'LBL_ANNUAL_REVENUE' => 'Ingresos anuales:', + 'LBL_ANY_ADDRESS' => 'Cualquier dirección:', + 'LBL_ANY_EMAIL' => 'Cualquier email:', + 'LBL_EMAIL_NON_PRIMARY' => 'Correo Electrónico No Principal', + 'LBL_ANY_PHONE' => 'Cualquier teléfono:', + 'LBL_RATING' => 'Rating:', + 'LBL_ASSIGNED_TO' => 'Asignado A:', + 'LBL_ASSIGNED_USER' => 'Asignado a:', + 'LBL_BILLING_ADDRESS_CITY' => 'Ciudad de facturación:', + 'LBL_BILLING_ADDRESS_COUNTRY' => 'País de facturación:', + 'LBL_BILLING_ADDRESS_POSTALCODE' => 'CP de facturación:', + 'LBL_BILLING_ADDRESS_STATE' => 'Estado/provincia de facturación:', + 'LBL_BILLING_ADDRESS_STREET_2' => 'Calle de facturación 2', + 'LBL_BILLING_ADDRESS_STREET_3' => 'Calle de facturación 3', + 'LBL_BILLING_ADDRESS_STREET_4' => 'Calle de facturación 4', + 'LBL_BILLING_ADDRESS_STREET' => 'Calle de facturación:', + 'LBL_BILLING_ADDRESS' => 'Dirección de facturación:', + 'LBL_ACCOUNT_INFORMATION' => 'Visión General', + 'LBL_CITY' => 'Ciudad:', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_COUNTRY' => 'País:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_DUPLICATE' => 'Posible cuenta duplicada', + 'LBL_EMAIL' => 'Correo electrónico:', + 'LBL_EMPLOYEES' => 'Empleados:', + 'LBL_FAX' => 'Fax:', + 'LBL_INDUSTRY' => 'Industria:', + 'LBL_LIST_ACCOUNT_NAME' => 'Nombre', + 'LBL_LIST_CITY' => 'Ciudad', + 'LBL_LIST_EMAIL_ADDRESS' => 'Email', + 'LBL_LIST_PHONE' => 'Teléfono', + 'LBL_LIST_STATE' => 'Estado/Provincia', + 'LBL_LIST_WEBSITE' => 'Sitio Web', + 'LBL_MEMBER_OF' => 'Miembro de:', + 'LBL_MEMBER_ORG_FORM_TITLE' => 'Organizaciones Miembro', + 'LBL_MEMBER_ORG_SUBPANEL_TITLE' => 'Organizaciones Miembro', + 'LBL_OTHER_EMAIL_ADDRESS' => 'Email alternativo:', + 'LBL_OTHER_PHONE' => 'Tel. alternativo:', + 'LBL_OWNERSHIP' => 'Propietario:', + 'LBL_PARENT_ACCOUNT_ID' => 'ID Cuenta Padre', + 'LBL_PHONE_ALT' => 'Teléfono alternativo:', + 'LBL_PHONE_FAX' => 'Fax oficina:', + 'LBL_PHONE_OFFICE' => 'Teléfono oficina:', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_EMAIL_ADDRESS' => 'Dirección(es) de Email', + 'LBL_EMAIL_ADDRESSES' => 'Direcciones de Email', + 'LBL_POSTAL_CODE' => 'Código postal:', + 'LBL_PUSH_BILLING' => 'Emisión de Facturas', + 'LBL_PUSH_SHIPPING' => 'Emisión de Envíos', + 'LBL_SAVE_ACCOUNT' => 'Guardar Cuenta', + 'LBL_SHIPPING_ADDRESS_CITY' => 'Ciudad de envío:', + 'LBL_SHIPPING_ADDRESS_COUNTRY' => 'País de envío:', + 'LBL_SHIPPING_ADDRESS_POSTALCODE' => 'CP de envío:', + 'LBL_SHIPPING_ADDRESS_STATE' => 'Estado/provincia de envío:', + 'LBL_SHIPPING_ADDRESS_STREET_2' => 'Calle de envío 2', + 'LBL_SHIPPING_ADDRESS_STREET_3' => 'Calle de envío 3', + 'LBL_SHIPPING_ADDRESS_STREET_4' => 'Calle de envío 4', + 'LBL_SHIPPING_ADDRESS_STREET' => 'Calle de envío:', + 'LBL_SHIPPING_ADDRESS' => 'Dirección de envío:', + 'LBL_STATE' => 'Estado/Provincia:', + 'LBL_TICKER_SYMBOL' => 'Símbolo Ticker:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_USERS_ASSIGNED_LINK' => 'Usuarios Asignados', + 'LBL_USERS_CREATED_LINK' => 'Usuarios Creado Por', + 'LBL_USERS_MODIFIED_LINK' => 'Usuarios Modificados', + 'LBL_VIEW_FORM_TITLE' => 'Vista de Cuenta', + 'LBL_WEBSITE' => 'Web:', + 'LNK_ACCOUNT_LIST' => 'Ver Cuentas', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'MSG_DUPLICATE' => 'El registro para la cuenta que va a crear podría ser un duplicado de otro registro de cuenta existente. Los registros de cuenta con nombres similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de esta cuenta, o en Cancelar para volver al módulo sin crear la cuenta.', + 'MSG_SHOW_DUPLICATES' => 'El registro para la cuenta que va a crear podría ser un duplicado de otro registro de cuenta existente. Los registros de cuenta con nombres similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de esta cuenta, o en Cancelar para volver al módulo sin crear la cuenta.', + 'NTC_COPY_BILLING_ADDRESS' => 'Copiar dirección de facturación a dirección de envío', + 'NTC_COPY_BILLING_ADDRESS2' => 'Copiar a dirección de envío', + 'NTC_COPY_SHIPPING_ADDRESS' => 'Copiar dirección de envío a dirección de facturación', + 'NTC_COPY_SHIPPING_ADDRESS2' => 'Copiar a dirección de facturación', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'NTC_REMOVE_ACCOUNT_CONFIRMATION' => '¿Está seguro de que desea quitar este registro?', + 'NTC_REMOVE_MEMBER_ORG_CONFIRMATION' => '¿Está seguro de que desea quitar este registro como organización miembro?', + 'db_name' => 'LBL_LIST_ACCOUNT_NAME', + 'db_website' => 'LBL_LIST_WEBSITE', + 'db_billing_address_city' => 'LBL_LIST_CITY', + 'LBL_DOCUMENTS_SUBPANEL_TITLE' => 'Documentos', + 'LBL_CHARTS' => 'Gráficos', + 'LBL_DEFAULT' => 'Vistas', + 'LBL_MISC' => 'Varios', + 'LBL_UTILS' => 'Utilidades', + 'LBL_BUG_FORM_TITLE' => 'Cuentas', + 'LBL_BUGS_SUBPANEL_TITLE' => 'Incidencias', + 'LBL_CALLS_SUBPANEL_TITLE' => 'Llamadas', + 'LBL_CAMPAIGN_ID' => 'ID Campaña', + 'LBL_CASES_SUBPANEL_TITLE' => 'Casos', + 'LBL_EMAIL_OPT_OUT' => 'Rehusar Email:', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_HOMEPAGE_TITLE' => 'Mis Cuentas', + 'LBL_INVALID_EMAIL' => 'Email no válido:', + 'LBL_INVITEE' => 'Contactos', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_LIST_CONTACT_NAME' => 'Contacto', + 'LBL_LIST_FORM_TITLE' => 'Lista de Cuentas', + 'LBL_MEETINGS_SUBPANEL_TITLE' => 'Reuniones', + 'LBL_MODULE_NAME' => 'Cuentas', + 'LBL_MODULE_TITLE' => 'Cuentas: Inicio', + 'LBL_MODULE_ID' => 'Cuentas', + 'LBL_NEW_FORM_TITLE' => 'Nueva Cuenta', + 'LBL_OPPORTUNITIES_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_PRODUCTS_TITLE' => 'Productos', + 'LBL_PROJECTS_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_PUSH_CONTACTS_BUTTON_LABEL' => 'Copiar a Contactos', + 'LBL_PUSH_CONTACTS_BUTTON_TITLE' => 'Copiar...', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Cuentas', + 'LBL_SIC_CODE' => 'Código CNAE/SIC:', + 'LBL_TASKS_SUBPANEL_TITLE' => 'Tareas', + 'LBL_TEAMS_LINK' => 'Equipos', + 'LBL_CAMPAIGNS' => 'Campañas', + 'LNK_IMPORT_ACCOUNTS' => 'Importar Cuentas', + 'LBL_ASSIGNED_USER_NAME' => 'Asignado a:', + 'LBL_PROSPECT_LIST' => 'Lista de Público Objetivo', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_PROJECT_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_COPY' => 'Copiar', + 'LBL_ACCOUNT_TYPE' => 'Tipo de cuenta', + 'LBL_PARENT_ID' => 'ID Padre:', + 'LBL_PHONE_ALTERNATE' => 'Teléfono alternativo', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_CONTACT_HISTORY_SUBPANEL_TITLE' => 'Emails de contactos relacionados', +); \ No newline at end of file diff --git a/modules/Activities/language/es_es.lang.php b/modules/Activities/language/es_es.lang.php new file mode 100644 index 00000000000..a4897c40d66 --- /dev/null +++ b/modules/Activities/language/es_es.lang.php @@ -0,0 +1,132 @@ + 'Actividades', + 'LBL_MODULE_TITLE' => 'Actividades: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Actividades', + 'LBL_LIST_FORM_TITLE' => 'Lista de Actividades', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_CONTACT' => 'Contacto', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_DATE' => 'Fecha', + 'LBL_LIST_TIME' => 'Hora inicio', + 'LBL_LIST_CLOSE' => 'Cerrar', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_STATUS' => 'Estado:', + 'LBL_LOCATION' => 'Lugar:', + 'LBL_DATE_TIME' => 'Inicio:', + 'LBL_DATE' => 'Fecha inicio:', + 'LBL_TIME' => 'Hora inicio:', + 'LBL_DURATION' => 'Duración:', + 'LBL_DURATION_MINUTES' => 'Minutos de Duración:', + 'LBL_HOURS_MINS' => '(horas/minuntos)', + 'LBL_CONTACT_NAME' => 'Contacto:', + 'LBL_MEETING' => 'Reunión:', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_COLON' => ':', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'LNK_NEW_NOTE' => 'Nueva Nota o Agregar Archivo Adjunto', + 'LNK_NEW_EMAIL' => 'Nuevo Email Archivado', + 'LNK_CALL_LIST' => 'Ver Llamadas', + 'LNK_MEETING_LIST' => 'Ver Reuniones', + 'LNK_TASK_LIST' => 'Ver Tareas', + 'LNK_NOTE_LIST' => 'Ver Notas', + 'LNK_EMAIL_LIST' => 'Ver Emails', + 'LBL_DELETE_ACTIVITY' => '¿Está seguro de que desea eliminar esta actividad?', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la cuenta.', + 'NTC_REMOVE_INVITEE' => '¿Está seguro de que desea eliminar a este asistente a la reunión?', + 'LBL_INVITEE' => 'Asistentes', + 'LBL_LIST_DIRECTION' => 'Dirección', + 'LBL_DIRECTION' => 'Dirección', + 'LNK_NEW_APPOINTMENT' => 'Nueva Cita', + 'LNK_VIEW_CALENDAR' => 'Ver Calendario', + 'LBL_OPEN_ACTIVITIES' => 'Actividades Abiertas', + 'LBL_HISTORY' => 'Historial', + 'LBL_UPCOMING' => 'Mis Próximas Citas', + 'LBL_TODAY' => 'hasta', + 'LBL_NEW_TASK_BUTTON_TITLE' => 'Nueva Tarea [Alt+N]', + 'LBL_NEW_TASK_BUTTON_KEY' => 'N', + 'LBL_NEW_TASK_BUTTON_LABEL' => 'Nueva Tarea', + 'LBL_SCHEDULE_MEETING_BUTTON_TITLE' => 'Programar Reunión [Alt+M]', + 'LBL_SCHEDULE_MEETING_BUTTON_KEY' => 'M', + 'LBL_SCHEDULE_MEETING_BUTTON_LABEL' => 'Programar Reunión', + 'LBL_SCHEDULE_CALL_BUTTON_TITLE' => 'Registrar Llamada [Alt+C]', + 'LBL_SCHEDULE_CALL_BUTTON_KEY' => 'C', + 'LBL_SCHEDULE_CALL_BUTTON_LABEL' => 'Registrar Llamada', + 'LBL_NEW_NOTE_BUTTON_TITLE' => 'Nueva Nota o Archivo Adjunto [Alt+T]', + 'LBL_NEW_NOTE_BUTTON_KEY' => 'T', + 'LBL_NEW_NOTE_BUTTON_LABEL' => 'Nueva Nota o Archivo Adjunto', + 'LBL_TRACK_EMAIL_BUTTON_TITLE' => 'Email Seguimiento [Alt+K]', + 'LBL_TRACK_EMAIL_BUTTON_KEY' => 'K', + 'LBL_TRACK_EMAIL_BUTTON_LABEL' => 'Email Seguimiento', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_DUE_DATE' => 'Fecha Vencimiento', + 'LBL_LIST_LAST_MODIFIED' => 'Modificado', + 'NTC_NONE_SCHEDULED' => 'Sin programación.', + 'appointment_filter_dom' => + array ( + 'last next_month' => 'el mes que viene', + 'last this_month' => 'este mes', + 'next Saturday' => 'la semana que viene', + 'this Saturday' => 'esta semana', + 'today' => 'hoy', + 'tomorrow' => 'mañana', + ), + 'LNK_IMPORT_CALLS' => 'Importar Llamadas', + 'LNK_IMPORT_MEETINGS' => 'Importar Reuniones', + 'LNK_IMPORT_TASKS' => 'Importar Tareas', + 'LNK_IMPORT_NOTES' => 'Importar Notas', + 'NTC_NONE' => 'Ninguna', + 'LBL_ACCEPT_THIS' => '¿Aceptar?', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Actividades Abiertas', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_ACCEPT' => 'Aceptar', +); \ No newline at end of file diff --git a/modules/Administration/language/es_es.lang.php b/modules/Administration/language/es_es.lang.php new file mode 100644 index 00000000000..62ea3b11415 --- /dev/null +++ b/modules/Administration/language/es_es.lang.php @@ -0,0 +1,1127 @@ + 'Captcha es un método de pruebas de tipo desafío-respuesta utilizado para asegurar que una respuesta no es generada por un ordenador. Obtenga una clave Pública y una Privada de reCAPTCHA en http://recaptcha.net/.', + 'CAPTCHA' => 'Validación Captcha', + 'CAPTCHA_PRIVATE_KEY' => 'Clave privada Captcha', + 'CAPTCHA_PUBLIC_KEY' => 'Clave pública Captcha', + 'ENABLE_CAPTCHA' => 'Habilitar Validaciones reCAPTCHA', + 'ERR_PUBLIC_CAPTCHA_KEY' => 'Clave Captcha No válida', + 'BTN_REBUILD_CONFIG' => 'Reconstruir', + 'EXPORT_DELIMITER' => 'Delimitador para Exportación', + 'ADMIN_EXPORT_ONLY' => 'Exportación sólo realizable por el Administrador', + 'EXPORT' => 'Configuración de Exportación', + 'EXPORT_CHARSET' => 'Juego de Caracteres Por Defecto para Importación y Exportación', + 'DISABLE_EXPORT' => 'Deshabilitar exportación', + 'DESC_DROPDOWN_EDITOR' => 'Agregar, quitar o cambiar las listas desplegables', + 'DESC_EDIT_CUSTOM_FIELDS' => 'Edición de los campos personalizados creados para el Diseño de Campos', + 'DESC_FILES_INSTALLED' => 'Las siguientes actualizaciones han sido instaladas:', + 'DESC_FILES_QUEUED' => 'Los siguientes módulos están listas para ser instaladas:', + 'DESC_IFRAME' => 'Agregar pestañas que puedan mostrar cualquier sitio web', + 'DESC_MODULES_INSTALLED' => 'Los siguientes módulos han sido instalados:', + 'DOWNLOAD_QUESTION' => '¿Está seguro de que desea descargar los paquetes seleccionados?', + 'ENABLED_OFFLINE_CLIENTS' => 'Los Clientes Desconectados están habilitados.', + 'SEARCHING_UPDATES' => 'Buscando actualizaciones...', + 'DOWNLOADING' => 'Descargando...', + 'DL_PACKAGES_DOWNLOADING' => 'Descargando', + 'DL_PACKAGES_OF' => 'de', + 'DL_PACKAGES_PACKAGES' => 'Paquete(s)', + 'LOADING_CATEGORIES' => 'Cargando categorías...', + 'SEARCHING_PACKAGES' => 'Buscando paquetes...', + 'AUTHENTICATING' => 'Autenticando...', + 'LBL_MINUTES' => 'Minutos', + 'LBL_HOURS' => 'Horas', + 'LBL_DAYS' => 'Días', + 'LBL_WEEKS' => 'Semanas', + 'LBL_MONTHS' => 'Meses', + 'LBL_PUBLIC_KEY' => 'Clave Pública', + 'LBL_PRIVATE_KEY' => 'Clave Privada', + 'ERR_INVALID_LOCALE_NAME_FORMAT_UPGRADE' => 'El "Formato de Nombre" que fue establecido antes de la actualización dispone de una longitud no soportada. El formato ha sido establecido de forma automática al valor por defecto. Por favor seleccione un nuevo formato y pulse en "Guarcar" para cerrar este mensaje.', + 'ERR_CANNOT_CREATE_RESTORE_FILE' => 'Error: No ha podido crearse un archivo de restauración', + 'ERR_CREDENTIALS_MISSING' => 'Faltan sus credenciales de sugarcrm.com.', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para borrar la cuenta.', + 'ERR_ENABLE_CURL' => 'Por favor, asegúrese de que tiene curl habilitado.', + 'ERR_EXPAND_DATABASE_COMPLETED' => 'Error: La presencia del archivo restoreExpand.sql indica que ya ha expandido la anchura de las columnas de base de datos.', + 'ERR_INCORRECT_REGEX' => 'La expresión regular del campo de Requisito Regex tiene una sintaxis incorrecta. Por favor, compruebe la expresión y proporcione la sintaxis correcta', + 'ERR_EMPTY_REGEX_DESCRIPTION' => 'Proporcione una descripción del Requisito Regex. La descripción se mostrará a los usuarios nuevos a la hora de proporcionar una contraseña nueva.', + 'ERR_NO_COLUMNS_TO_EXPAND' => 'Error: La base de datos no contiene ninguna columna de tipo varchar, char o text para expandir.', + 'ERR_NOT_FOR_MSSQL' => 'Esta función no está implementada para esta configuración.', + 'ERR_NOT_FOR_MYSQL' => 'Esta función no está actualmente soportada en esta configuración.', + 'ERR_NOT_FOR_ORACLE' => 'Esta función actualmente no está soportada en esta configuración.', + 'ERR_NOT_IMPLEMENTED' => 'Esta función no está actualmente soportada para esta configuración.', + 'ERR_NUM_OFFLINE_CLIENTS_MET' => 'Ha alcanzado el número de Clientes Desconectados para su clave de licencia. Debe, o bien deshabilitar un Cliente Desconectado actual, o actualizar su licencia.', + 'ERR_OC_USER_ALREADY_EXISTS' => 'El usuario que ha elegido ya existe en el sistema.', + 'ERR_SUGAR_DEPOT_DOWN' => 'El sistema no puede conectar con Sugar Exchange para buscar y descargar los paquetes.', + 'ERR_SMTP_SERVER_NOT_SET' => 'Aviso: No se ha configurado un servidor SMTP para correo saliente en Configuración de Email. Es necesario configurarlo para enviar contraseñas a los usuarios.', + 'ERR_UW_ACCEPT_LICENSE' => 'Antes de proceder, debe aceptar el Acuerdo de Licencia', + 'ERR_UW_CONFIG_FAILED' => 'Error generando archivo config.php.', + 'ERR_UW_COPY_FAILED' => 'No puedo copiarse el archivo', + 'ERR_UW_INVALID_VIEW' => 'Vista especificada no válida.', + 'ERR_UW_MUST_SELECT_OVERWRITE_OPTION' => 'Por favor, seleccione una opción de sobrescritura', + 'ERR_UW_NO_DEPENDENCY' => 'Las siguientes dependencias no han sido encontradas en el sistema.', + 'ERR_UW_NO_FILES' => 'No se han especificado los Archivos a copiar.', + 'ERR_UW_NO_INSTALL_FILE' => 'Archivo de Instalación no especificado.', + 'ERR_UW_NO_LANG_DESC' => 'Descripción de idioma no especificada.', + 'ERR_UW_NO_LANG' => 'Nombre de idioma no especificado.', + 'ERR_UW_NO_MANIFEST' => 'El archivo zip no contiene un archivo manifest.php. No se puede continuar.', + 'ERR_UW_NO_MODE' => 'Modo de operación no especificado.', + 'ERR_UW_NO_TEMP_DIR' => 'Directorio Temporal del que copiar archivos no especificado.', + 'ERR_UW_NO_UPDATE_RECORD' => 'No se ha podido localizar el registro de instalación de', + 'ERR_UW_NO_UPLOAD_FILE' => 'Por favor, haga clic en Explorar para seleccionar un archivo a subir desde su sistema.
', + 'ERR_UW_NO_VIEW' => 'Vista no definida. Por favor, vaya al inicio de Administración para navegar a esta página.', + 'ERR_UW_NOT_ACCEPTIBLE_TYPE' => 'Sólo puede subir paquetes con módulos, temas y idiomas en esta página.', + 'ERR_UW_NOT_RECOGNIZED' => 'no está reconocido', + 'ERR_UW_NOT_VALID_UPLOAD' => 'Subida no válida.', + 'ERR_UW_ONLY_PATCHES' => 'Sólo puede subir parches en esta página.', + 'ERR_UW_REMOVE_FAILED' => 'No ha podido quitarse el archivo', + 'ERR_UW_REMOVE_PACKAGE' => 'Problema quitando el paquete', + 'ERR_UW_RUN_SQL' => 'Error ejecutando archivo sql:', + 'ERR_UW_UPDATE_CONFIG' => 'Error actualizando config.php con la información de la nueva versión.', + 'ERR_UW_UPLOAD_ERROR' => 'Ha ocurrido un error en la subida del archivo, por favor, ¡inténtelo de nuevo!
', + 'ERROR_FLAVOR_INCOMPATIBLE' => 'El archivo subido no es compatible con esta edición de Sugar Suite:', + 'ERROR_LICENSE_EXPIRED' => 'Error: Su licencia caducó hace', + 'ERROR_LICENSE_EXPIRED2' => 'días(s). Por favor, vaya a "Administración de Licencias" en la pantalla de Administración para introducir su nueva clave de licencia. Si no introduce una nueva clave de licencia en 30 días a partir de la fecha de caducidad de su clave de licencia, no podrá iniciar la sesión en esta aplicación.', + 'ERROR_MANIFEST_TYPE' => 'El archivo de Manifiesto debe especificar el tipo de paquete.', + 'ERROR_PACKAGE_TYPE' => 'El archivo de Manifiesto especifica un tipo de paquete no reconocido', + 'ERROR_VALIDATION_EXPIRED' => 'Error: Su clave de validación caducó hace', + 'ERROR_VALIDATION_EXPIRED2' => 'día(s). Por favor, vaya a "Administración de Licencias" en la pantalla de Administración para introducir su nueva clave de validación. Si no introduce una nueva clave de validación en 30 días de la caducidad de su actual clave de validación, no podrá iniciar la sesión en esta aplicación.', + 'ERROR_VERSION_INCOMPATIBLE' => 'El archivo subido no es compatible con esta versión de Sugar Suite:', + 'FATAL_LICENSE_ALTERED' => 'Su licencia ha sido alterada desde la última vez que pudo validarla.
Por favor, vaya a "Administración de Licencias" en la pantalla de Administración.', + 'FATAL_LICENSE_EXPIRED' => 'Fatal: Su licencia caducó hace más de 30 días', + 'FATAL_LICENSE_EXPIRED2' => 'Por favor, vaya a "Administración de Licencias" en la pantalla de Administración para actualizar la información de su licencia y restaurar la funcionalidad completa del programa.', + 'FATAL_LICENSE_REQUIRED' => 'Fatal: Es necesaria la información de su clave de licencia.
Por favor, vaya a "Administración de Licencias" en la pantalla de Administración para actualizar la información de su licencia y restaurar la funcionalidad completa del programa.', + 'FATAL_VALIDATION_EXPIRED' => 'Fatal: Su clave de validación caducó hace más de 30 días', + 'FATAL_VALIDATION_EXPIRED2' => 'Por favor, vaya a "Administración de Licencias" en la pantalla Administración para actualizar la información sobre su licencia y restaurar la funcionalidad completa del programa.', + 'FATAL_VALIDATION_REQUIRED' => 'Fatal: Es necesaria la información de su clave de validación.
Por favor, vaya a en la pantalla de Administración para actualizar la información de su licencia y restaurar la funcionalidad completa del programa.
Guarde de nuevo su información de licencia para que sea autenticada o exporte la clave e importe la clave de validación.', + 'HDR_LOGIN_PANEL' => 'Por favor, introduzca sus credenciales de sugarcrm.com.', + 'HEARTBEAT_MESSAGE' => '
El mecanismo de Actualizaciones de Sugar permite que su servidor compruebe si hay disponible alguna actualización para su versión de Sugar.', + 'LBL_ACCEPT_TERMS' => 'Aceptar Términos y Condiciones', + 'LBL_ACCEPT' => 'Aceptar', + 'LBL_ADMIN_SUGAR_SERVER' => 'Nombre de Usuario Administrador:', + 'LBL_ADMIN_WIZARD_TITLE' => 'Asistente de Administración', + 'LBL_ADMIN_WIZARD' => 'Configura Fácilmente su sistema SugarCRM', + 'LBL_ADMINISTRATION_HOME_TITLE' => 'Sistema', + 'LBL_ADMINISTRATION_HOME_DESC' => 'Administre la configuración global según las especificaciones de su organización. Los usuarios pueden reemplazar algunas de las opciones de configuración regional en su página de configuración de usuario.', + 'LBL_ALLOW_USER_TABS' => 'Permite a los usuarios ocultar las pestañas', + 'LBL_ALREADY_RUNNING' => 'Este servidor está corriendo como un Cliente sin conexión.', + 'LBL_APPLY_DST_FIX_DESC' => 'Este paso obligatorio actualizará la forma de gestionar el horario (SÓLO MYSQL).', + 'LBL_APPLY_DST_FIX' => 'Aplicar Reparación de Horario de Verano', + 'LBL_AVAILABLE_MODULES' => 'Módulos Disponibles para Descarga', + 'LBL_AVAILABLE_UPDATES' => 'Actualizaciones Disponibles', + 'LBL_BACKUP_BACK_HOME' => 'Volver a Administración', + 'LBL_BACKUP_CONFIRM' => 'Confirmación de configuración', + 'LBL_BACKUP_CONFIRMED' => 'Configuración confirmada. Haga clic en Copia de seguridad para iniciar el proceso.', + 'LBL_BACKUP_DIRECTORY_ERROR' => 'Debe especificar un directorio para la copia de seguridad.', + 'LBL_BACKUP_DIRECTORY_EXISTS' => 'El directorio de copia de seguridad no existe, y no ha podido ser creado.', + 'LBL_BACKUP_DIRECTORY_NOT_WRITABLE' => 'El directorio de copia de seguridad existe, pero no tiene permisos de escritura.', + 'LBL_BACKUP_DIRECTORY_WRITABLE' => 'Sugar debe tener permisos de escritura', + 'LBL_BACKUP_DIRECTORY' => 'Directorio:', + 'LBL_BACKUP_FILE_AS_SUB' => 'El archivo de destino ya existe como un subdirectorio en el directorio especificado para la copia de seguridad', + 'LBL_BACKUP_FILE_EXISTS' => 'El archivo de destino ya existe en el directorio.', + 'LBL_BACKUP_FILE_STORED' => 'La copia de seguridad se ha guardado con éxito en', + 'LBL_BACKUP_FILENAME_ERROR' => 'Debe especificar un nombre de archivo para la copia de seguridad.', + 'LBL_BACKUP_FILENAME' => 'Nombre de archivo:', + 'LBL_BACKUP_INSTRUCTIONS_1' => 'El propósito de esta herramienta es ayudarle a crear copias de seguridad de los archivos de aplicación de Sugar. Las copias de seguridad de la base de datos deberían de realizarse regularmente. Por favor, consulte la documentación de su proveedor de base de datos para más información', + 'LBL_BACKUP_INSTRUCTIONS_2' => 'Para realizar una copia de seguridad de los archivos de aplicación de Sugar como un archivo zip, introduzca la siguiente información:', + 'LBL_BACKUP_RUN_BACKUP' => 'Iniciar copia de seguridad', + 'LBL_BACKUP_TITLE' => 'Copias de Seguridad en Línea', + 'LBL_BACKUP' => 'Planifica copias de seguridad al Sugar Online Data Vault. Activa una restauración del sistema a partir de una copia de seguridad.', + 'LBL_BACKUPS_TITLE' => 'Hacer una Copia de Seguridad de Sugar', + 'LBL_BACKUPS' => 'Realizar una copia de seguridad', + 'LBL_BROWSE' => 'Navegar', + 'LBL_BUG_TITLE' => 'Seguimiento de Incidencias', + 'LBL_BUG_DESC' => 'Mantenga una lista de lanzamientos de su producto. Los lanzamientos activos se muestran en el menú desplegable Lanzamientos, dentro de los registros de incidencias creadas dentro del módulo de Seguimiento de Incidencias.', + 'LBL_CANCEL_BUTTON_TITLE' => 'Cancelar', + 'LBL_CAT_VIEW' => 'Categorías', + 'LBL_CHANGE_NAME_MODULES' => 'Cambiar los nombres de los módulos que aparecen dentro de la aplicación', + 'LBL_CHECK_FOR_UPDATES' => 'Comprobar Actualizaciones', + 'LBL_CHECK_NOW_LABEL' => 'Comprobar Ahora', + 'LBL_CHECK_NOW_TITLE' => 'Comprobar Ahora', + 'LBL_CHECK_DB_VARDEFS' => 'Comprobando la estructura de base de datos contra los vardefs...', + 'LBL_CONFIGURE_TABS_AND_SUBPANELS_DESC' => 'Seleccionar las pestañas de módulos y subpaneles que se muestran en todo el sistema', + 'LBL_CLEAR_CHART_DATA_CACHE_DESC' => 'Quita los archivos de datos de la caché utilizada por los gráficos.', + 'LBL_CLEAR_CHART_DATA_CACHE_TITLE' => 'Limpiar Caché de Datos de Gráficos', + 'LBL_CLEAR_CHART_DATA_CACHE_FINDING' => 'Buscando archivos...', + 'LBL_CLEAR_CHART_DATA_CACHE_DELETING1' => 'Eliminando archivos de datos de la caché de gráficos...', + 'LBL_CLEAR_CHART_DATA_CACHE_DELETING2' => 'eliminando:', + 'LBL_CLEAR_THEME_CACHE_DESC' => 'Elimina los archivo de datos de la caché utilizada para los temas', + 'LBL_CLEAR_THEME_CACHE_TITLE' => 'Limpiar la Caché de Temas', + 'LBL_CLEAR_UNIFIED_SEARCH_CACHE_DELETING1' => 'Eliminando archivos de la caché unificada de búsquedas...', + 'LBL_CLEAR_UNIFIED_SEARCH_CACHE_DELETING2' => 'eliminando:', + 'LBL_CLEAR_PDFFONTS_DESC' => 'Eliminando Archivos de la Caché de Fuentes PDF. Ésta será reconstruida cuando sea necesario.', + 'LBL_CLEAR_PDFFONTS_DESC_SUCCESS' => 'Éxito : Caché de Archivos de Fuentes PDF eliminada', + 'LBL_CLEAR_PDFFONTS_DESC_FAILURE' => 'Error : Fallo al Limpiar los Archivos de Datos de Fuentes PDF de la Caché', + 'LBL_CLEAR_PDF_FONT_CACHE_TITLE' => 'Limpiar la Caché de Archivos de Fuentes PDF', + 'LBL_CLEAR_PDF_FONT_CACHE_DESC' => 'Elimina los archivos de la caché utilizados para guardar datos de fuentes PDF', + 'LBL_CONFIG_CHECK' => 'Comprobar Configuración', + 'LBL_CONFIG_AJAX' => 'Configurar la interfaz de usuario AJAX', + 'LBL_CONFIG_FTS' => 'Configurar el motor de búsqueda de texto', + 'LBL_CONFIG_AJAX_DESC' => 'Activar o desactivar el uso de la interfaz de usuario AJAX para módulos específicos', + 'LBL_CONFIG_AJAX_HELP' => 'Arrastrar y soltar los nombres de los módulos de abajo para activar o desactivar el uso de la interfaz de usuario AJAX en los módulos', + 'LBL_CONFIG_TABS' => 'Seleccionar Pestañas de Módulos y Subpaneles', + 'LBL_CONFIG_TABS_DESC' => 'Arrastre y suelte los nombres de los siguientes módulos para dejar sus pestañas o subpaneles visibles u ocultos. Para controlar el acceso a lo modulos, use
Role Management.', + 'LBL_CONFIG_LANGS_DESC' => 'Arrastrar y soltar los nombres de los idiomas siguientes para activar y desactivar.', + 'LBL_CONFIG_TABS_ALLOW_USERS_HIDE_TABS_HELP' => 'Seleccione esta opción para permitir a los usuarios elegir qué pestañas de módulos pueden ver. Cuando está seleccionado, los usuarios podrán elegir las pestañas de módulos que están visibles administrando las pestañas en su Configuración de Usuario.', + 'LBL_CONFIGURATOR_DESC' => 'Configurar Config.php', + 'LBL_CONFIGURATOR_TITLE' => 'Configurador', + 'LBL_CONFIGURE_GROUP_TABS_DESC' => 'Crear y editar la agrupación de las pestañas de navegación', + 'LBL_CONFIGURE_GROUP_TABS' => 'Configurar Módulos Agrupados', + 'LBL_CONFIGURE_SETTINGS_TITLE' => 'Configuración', + 'LBL_CONFIGURE_SETTINGS' => 'Configuración del sistema', + 'LBL_CONFIGURE_TABS_AND_SUBPANELS' => 'Mostrar Pestañas de Módulo y Subpaneles', + 'LBL_CONFIGURE_UPDATER' => 'Configurar Actualizaciones de Sugar', + 'LBL_CONTRACT_TITLE' => 'Contratos', + 'LBL_CONTRACT_DESC' => 'Defina tipos de contrato para el módulo de Contratos. Cuando los usuarios creen un contrato, el menú desplegable Tipos mostrará los tipos de contrato para su selección.', + 'LBL_CONTRACT_TYPES' => 'Administrar tipos de contrato', + 'LBL_COULD_NOT_CONNECT' => 'Error: No fue posible la conexión al servidor de Sugar.
Por favor, compruebe la Configuración de Proxy en el panel de administración Configuración del Sistema.
Último intento de conexión en', + 'LBL_CREATE_RESOTRE_FILE' => 'El archivo restoreExpand.sql ha sido creado con éxito. Por favor, utilice este archivo para echar atrás los cambios a las columnas.', + 'LBL_CURRENCY' => 'Configuración de monedas y cambios de moneda', + 'LBL_CONNECTOR_SETTINGS' => 'Conectores', + 'LBL_CONNECTOR_SETTINGS_DESC' => 'Administración de la configuración de los conectores', + 'LBL_SUGARPDF_SETTINGS' => 'PDF', + 'LBL_SUGARPDF_SETTINGS_DESC' => 'Administración de opciones para la generación de archivos PDF', + 'LBL_DENY' => 'Rechazar', + 'LBL_DIAG_CANCEL_BUTTON' => 'Cancelar', + 'LBL_DIAG_EXECUTE_BUTTON' => 'Ejecutar Diagnóstico', + 'LBL_DIAGNOSTIC_ACCESS' => 'Debe ser un administrador para ejecutar la herramienta de diagnóstico.', + 'LBL_DIAGNOSTIC_BEANLIST_DESC' => 'Esta información nos indica si los archivos bean especificados en la lista de beans realmente existen. Esto puede ser un problema con una extensión cargada de un módulo mal definido.', + 'LBL_DIAGNOSTIC_BEANLIST_GREEN' => 'El verde indica que el archivo existe.', + 'LBL_DIAGNOSTIC_BEANLIST_ORANGE' => 'El naranja indica que no hay un archivo indexado, de modo que no podemos buscarlo.', + 'LBL_DIAGNOSTIC_BEANLIST_RED' => 'El rojo indica que el archivo no existe.', + 'LBL_DIAGNOSTIC_BLBF' => 'Los archivos BeanList/BeanFiles existen', + 'LBL_DIAGNOSTIC_CALCMD5' => '    -  Copia de lista calculada de MD5', + 'LBL_DIAGNOSTIC_CONFIGPHP' => 'SugarCRM config.php', + 'LBL_DIAGNOSTIC_CUSTOMDIR' => 'SugarCRM - Directorio custom', + 'LBL_DIAGNOSTIC_DELETED' => 'El archivo ha sido eliminado', + 'LBL_DIAGNOSTIC_DELETELINK' => 'Eliminar el archivo de Diagnóstico', + 'LBL_DIAGNOSTIC_FILE' => 'Archivo', + 'LBL_DIAGNOSTIC_ZIP' => '.zip no existe.

', + 'LBL_DIAGNOSTIC_DELETE_ERROR' => 'No ha recibido un nombre de archivo o ruta guid para eliminar el archivo

', + 'LBL_DIAGNOSTIC_DELETE_DIE' => 'Está intentando eliminar un archivo que no es de diagnóstico.', + 'LBL_DIAGNOSTIC_DELETE_RETURN' => 'Volver a página de Administración', + 'LBL_DIAGNOSTIC_DESC' => 'Captura la configuración del sistema para diagnóstico y análisis', + 'LBL_DIAGNOSTIC_DONE' => 'Hecho', + 'LBL_DIAGNOSTIC_DOWNLOADLINK' => 'Descargar el archivo de Diagnóstico', + 'LBL_DIAGNOSTIC_EXECUTING' => 'Ejecutando Operaciones de Diagnóstico...', + 'LBL_DIAGNOSTIC_FILESMD5' => '    -  Copia de files.md5', + 'LBL_DIAGNOSTIC_GETBEANFILES' => 'Comprobando que exiten los beans...', + 'LBL_DIAGNOSTIC_GETCONFPHP' => 'Obteniendo config.php...', + 'LBL_DIAGNOSTIC_GETCUSTDIR' => 'Obteniendo directorio custom...', + 'LBL_DIAGNOSTIC_GETMD5INFO' => 'Obteniendo información md5...', + 'LBL_DIAGNOSTIC_GETMYSQLINFO' => 'información de mysql', + 'LBL_DIAGNOSTIC_GETMYSQLTD' => 'volcados de mysql', + 'LBL_DIAGNOSTIC_GETMYSQLTS' => 'esquema de mysql', + 'LBL_DIAGNOSTIC_GETPHPINFO' => 'Obteniendo phpinfo()', + 'LBL_DIAGNOSTIC_GETSUGARLOG' => 'Obteniendo sugarcrm.log', + 'LBL_DIAGNOSTIC_GETTING' => 'Obteniendo...', + 'LBL_DIAGNOSTIC_MD5' => 'Información MD5', + 'LBL_DIAGNOSTIC_MYSQLDUMPS' => 'MySQL - Configuración de Volcado de Tablas', + 'LBL_DIAGNOSTIC_MYSQLINFO' => 'MySQL - Información General', + 'LBL_DIAGNOSTIC_MYSQLSCHEMA' => 'MySQL - Esquema con Todas las Tablas', + 'LBL_DIAGNOSTIC_NO_MYSQL' => 'No tiene MySQL. Las funciones de MySQL han sido deshabilitadas.', + 'LBL_DIAGNOSTIC_PHPINFO' => 'phpinfo()', + 'LBL_DIAGNOSTIC_SUGARLOG' => 'Archivo de Registro SugarCRM', + 'LBL_DIAGNOSTIC_TITLE' => 'Herramienta de Diagnóstico', + 'LBL_DIAGNOSTIC_VARDEFS' => 'Salida de esquema de Sugar (VARDEFS)', + 'LBL_DISABLED' => 'Deshabilitado', + 'LBL_DISPLAY_TABS' => 'Mostrar Pestañas', + 'LBL_DO_OVERWRITE_FILES' => 'No Sobrescribir Archivos', + 'LBL_DOCUMENTATION_TITLE' => 'Documentación en Línea', + 'LBL_DOCUMENTATION' => 'Ver la documentación de Sugar para administradores y usuarios finales', + 'LBL_DONE' => 'Hecho.', + 'LBL_DROP_HERE' => '[Soltar Aquí]', + 'LBL_DROPDOWN_EDITOR' => 'Editor de Listas Desplegables', + 'LBL_DST_APPLY_FIX' => 'Aplicar reparación de Horario de Verano a los datos actuales. Por favor, haga antes una copia de seguridad de sus datos.', + 'LBL_DST_BEFORE_DESC' => 'Esta reparación realizará cambios a sus datos. Por favor, haga una copia de seguridad completa de su base de datos antes de ejecutar esta reparación.', + 'LBL_DST_BEFORE' => 'Antes de empezar:', + 'LBL_DST_CURRENT_SERVER_TIME_ZONE_LOCALE' => 'Zona Horaria de la Configuración Regional del Servidor:', + 'LBL_DST_CURRENT_SERVER_TIME_ZONE' => 'Zona Horaria del Servidor Detectada:', + 'LBL_DST_CURRENT_SERVER_TIME' => 'Hora Local del Servidor Detectada:', + 'LBL_DST_END_DATE_TIME' => 'Fecha/Hora de Finalización', + 'LBL_DST_FIX_CONFIRM_DESC' => 'Por favor, revise los siguientes valores y compruebe que su sistema está configurado correctamente.', + 'LBL_DST_FIX_CONFIRM' => 'A comprobar:', + 'LBL_DST_FIX_DONE_DESC' => 'La reparación de Horario de Verano ha sido realizada con éxito.', + 'LBL_DST_FIX_TARGET' => 'Objetivo:', + 'LBL_DST_FIX_USER_TZ' => 'Este paso configura la zona horaria para todos los usuarios al valor más probable.', + 'LBL_DST_FIX_USER' => 'Zonas horarias del usuario:
(OPCIONAL)', + 'LBL_DST_SET_USER_TZ' => 'Configurar Zonas Horarias del Usuario', + 'LBL_DST_START_DATE_TIME' => 'Fecha/Hora de Inicio', + 'LBL_DST_UPGRADE' => 'Actualización:', + 'LBL_EDIT_CUSTOM_FIELDS' => 'Editar Campos Personalizados', + 'LBL_EDIT_TABS' => 'Editar Pestañas', + 'LBL_EMAIL_TITLE' => 'Email', + 'LBL_EMAIL_DESC' => 'Gestiona correo entrante y saliente. La configuración de correo debe realizarse para que los usuarios puedan enviar correo y boletines de noticias de las campañas.', + 'LBL_EMAIL_ADDRESS_REQUIRED_FOR_FEATURE' => 'Para poder utilizar esta funcionalidad, hace falta una dirección de correo principal para cada usuario.', + 'LBL_ENABLE_MAILMERGE' => '¿Habilitar Combinar Correspondencia?', + 'LBL_ENABLED' => 'Habilitado', + 'LBL_ERROR_VERSION_INFO' => 'Error al recuperar la información de versión, por favor inténtelo de nuevo más tarde.', + 'LBL_EXCEEDING_OC_LICENSES' => 'Error: El número de Clientes Desconectados habilitados excede el número especificado en su licencia. Por favor, vaya a "Ver Clientes Desconectados", en la pantalla de Administración, para deshabilitar Clientes Desconectados o actualizar su Licencia.', + 'LBL_EXECUTE' => 'Ejecutar', + 'LBL_EXPAND_DATABASE_COLUMNS_DESC' => 'Expande algunas columnas de tipos char, varchar y text en la base de datos (SÓLO MSSQL)', + 'LBL_EXPAND_DATABASE_COLUMNS' => 'Expandir Ancho de Columna', + 'LBL_EXPAND_DATABASE_TEXT' => 'Esta herramienta le permite expandir las columnas de base de datos seleccionadas como corrección provisional para las limitaciones de caracteres multi-byte en SQL Server.
Puede escoger una de las siguientes tres opciones:
Mostrar SQL mostrará el sql que se ejecutará en la pantalla
Exportar SQL exportará el sql a un archivo
Ejecutar SQL ejecutará el SQL.', + 'LBL_EXPORT_CUSTOM_FIELDS_TITLE' => 'Exportar Estructura de Campos Personalizados', + 'LBL_EXPORT_CUSTOM_FIELDS' => 'Exporta las definiciones de campos personalizados a un archivo .sugar', + 'LBL_EXPORT_DOWNLOAD_KEY' => 'Exportar Clave de Descarga', + 'LBL_EXTERNAL_DEV_DESC' => 'Migración de la estructura de campos personalizados de un sistema a otro', + 'LBL_EXTERNAL_DEV_TITLE' => 'Migración de Campos Personalizados', + 'LBL_FORECAST_TITLE' => 'Previsión', + 'LBL_FORECAST_DESC' => 'Defina períodos de tiempo para el módulo de Forecasts. Estos períodos de tiempo se muestran en el menú desplegable Períodos de Tiempo del módulo de Forecasts.', + 'LBL_GLOBAL_SEARCH_SETTINGS' => 'Búsqueda global', + 'LBL_GLOBAL_SEARCH_SETTINGS_DESC' => 'Configure las opciones de búsqueda global para el sistema.', + 'LBL_FTS_SETTINGS' => 'Búsqueda de texto completo', + 'LBL_FTS_SETTINGS_DESC' => 'Configurar el sistema de búsqueda de texto completo.', + 'LBL_GLOBAL_TEAM_DESC' => 'Globalmente Visible', + 'LBL_GLOBAL_TEAM_SELECT' => 'No se ha encontrado un equipo global por defecto. Por favor, seleccione un equipo de la siguiente lista.', + 'LBL_GLOBAL_TEAM' => 'Reconstruir el acceso al equipo global.', + 'LBL_GO' => 'Adelante', + 'LBL_HELP_BOOKMARK' => 'Añadir a Favoritos', + 'LBL_HELP_EMAIL' => 'Email', + 'LBL_HELP_LINK' => 'Enlace a esta página', + 'LBL_HELP_PRINT' => 'Imprimir', + 'LBL_HIDE_TABS' => 'Ocultar Pestañas', + 'LBL_HIDDEN_PANELS' => 'Subpaneles Ocultos', + 'LBL_HIDDEN_TABS' => 'Pestañas Ocultas', + 'LBL_HIDE_ADVANCED_OPTIONS' => 'Ocultar Opciones Avanzadas', + 'LBL_HT_DONE' => '--- HECHO ---', + 'LBL_HT_NO_WRITE_2' => 'Si quiere evitar que sus archivos sean accesibles a través de un navegador, cree un archivo .htaccess en su directorio raíz con las líneas:', + 'LBL_HT_NO_WRITE' => 'No hay permisos de escritura para el archivo:', + 'LBL_ICF_ADDING' => 'Agregando Información de Meta Datos de Campos Personalizados -', + 'LBL_ICF_DROPPING' => 'Eliminando - Información de Meta Datos de Campos Personalizados', + 'LBL_ICF_IMPORT_S' => 'Importar Estructura', + 'LBL_IFRAME' => 'Mis Sitios', + 'LBL_IMPORT_CUSTOM_FIELDS_DESC' => '
Importa un archivo .sug que fue exportado de otra máquina. Esto hará que la estructura de campo personalizado de esta máquina sea idéntica a la de la otra máquina. Se recomienda que exporte su Estructura de Campo Personalizado actual antes de realizar la importación. Tras importar la Estructura de Campo Personalizado, el sistema le guiará automáticamente a través de una Actualización de Campos Personalizados en la que se le informará de los cambios a realizar en la base de datos. Si está de acuerdo con estos cambios haga clic en el enlace ejecutar en modo no-simulación en la parte inferior. Si desea echar atrás el proceso de importación simplemente importe la estructura que había exportado antes de ejecutar esta última importación. Si lo hace
Advertencia: Esto eliminará cualquier estructura de campos personalizados previamente definida que no esté incluida en el archivo .sug así como todos los datos almacenados en esos campos personalizados.', + 'LBL_IMPORT_CUSTOM_FIELDS_STRUCT' => 'Estructura de Campo Personalizados (SugarCustomFieldStruct.sug)', + 'LBL_IMPORT_CUSTOM_FIELDS_TITLE' => 'Importar Estructura de Campos Personalizados', + 'LBL_IMPORT_CUSTOM_FIELDS' => 'Importa las definiciones de campos personalizados desde un archivo .sugar', + 'LBL_IMPORT_VALIDATION_KEY' => 'Importar Clave de Validación', + 'LBL_IMPORT_WIZARD' => 'Asistente de importación', + 'LBL_IMPORT_WIZARD_DESC' => 'Utilice el asistente de importación para importar fácilmente los registros en el sistema', + 'LBL_INBOUND_EMAIL_TITLE' => 'Email Entrante', + 'LBL_LANGUAGES' => 'Administrar qué idiomas están disponibles para los usuarios', + 'LBL_LAYOUT' => 'Agregar, quitar y cambiar campos, y alterar la disposición de los campos y paneles en la aplicación', + 'LBL_LICENSE_EXPIRE_DATE' => 'Fecha de Caducidad', + 'LBL_LICENSE_KEY' => 'Clave de Descarga', + 'LBL_LICENSE_NUM_LIC_OC' => 'Número de Licencias de Cliente sin conexión', + 'LBL_LICENSE_NUM_PORTAL_USERS' => 'Número de Usuarios Concurrentes del Portal de Autoservicio', + 'LBL_LICENSE_USERS' => 'Número de Usuarios', + 'LBL_LICENSE_VALIDATION_END' => 'Caducidad de la Clave de Validación', + 'LBL_LICENSE_VALIDATION_KEY' => 'Clave de Validación', + 'LBL_LICENSE_VALIDATION' => 'Validación de Licencia', + 'LBL_LICENSE' => 'Licencia', + 'LBL_LICENSE_UNAUTHORIZED_ACCESS' => 'El acceso a la configuración de licencias no está autorizado', + 'LBL_LIST_FIRST_CONNECT_DATE' => 'Fecha de Primera Conexión', + 'LBL_LIST_LAST_CONNECT_DATE' => 'Fecha de Última Conexión', + 'LBL_LIST_NUM_SYNCS' => 'Núm. de Sincronizaciones', + 'LBL_LIST_SET_STATUS' => 'Establecer Estado', + 'LBL_LIST_SYSTEM_KEY' => 'Clave del Sistema', + 'LBL_LIST_SYSTEM_NAME' => 'Nombre del Sistema', + 'LBL_LIST_VIEW' => 'Lista', + 'LBL_LDAP_TITLE' => 'Soporte LDAP', + 'LBL_LDAP_ENABLE' => 'Habilitar Autenticación LDAP', + 'LBL_LDAP_HELP_TXT' => 'Cuando se habilita la autenticación LDAP, las contraseñas sólo pueden ser administradas a través de LDPA. Ninguna de las características de Administración de Contraseñas de Sugar tendrá efecto.', + 'LBL_LDAP_SERVER_HOSTNAME' => 'Servidor:', + 'LBL_LDAP_SERVER_PORT' => 'Número de Puerto:', + 'LBL_LDAP_ADMIN_USER' => 'Nombre de Usuario:', + 'LBL_LDAP_ADMIN_USER_DESC' => 'Utilizado para buscar el usuario Sugar. [Es posible que tenga que ser totalmente calificado] La conexión será anónima si no se provee.', + 'LBL_LDAP_ADMIN_PASSWORD' => 'Contraseña:', + 'LBL_LDAP_AUTHENTICATION' => 'Autenticación:', + 'LBL_LDAP_AUTHENTICATION_DESC' => 'Conectarse al servidor LDAP utilizando credenciales de usuarios específicos', + 'LBL_LDAP_AUTO_CREATE_USERS' => 'Crear Usuarios Automáticamente:', + 'LBL_LDAP_USER_DN' => 'DN de Usuario:', + 'LBL_LDAP_GROUP_DN' => 'DN de Grupo:', + 'LBL_LDAP_GROUP_DN_DESC' => 'Ejemplo: ou=grupos,dc=ejemplo,dc=com', + 'LBL_LDAP_USER_FILTER' => 'Filtro de Usuarios:', + 'LBL_LDAP_GROUP_MEMBERSHIP' => 'Pertenencia a Grupos:', + 'LBL_LDAP_GROUP_MEMBERSHIP_DESC' => 'Los usuarios deben de ser miembros de un grupo específico', + 'LBL_LDAP_GROUP_USER_ATTR' => 'Atributo de Usuario:', + 'LBL_LDAP_GROUP_USER_ATTR_DESC' => 'El identificador único de una persona que será utilizado para comprobar si son miembros del grupo. Ejemplo: uid', + 'LBL_LDAP_GROUP_ATTR_DESC' => 'El atributo del Grupo será utilizado como filtro sobre el Atributo de Usuario. Ejemplo: memberUid', + 'LBL_LDAP_GROUP_ATTR' => 'Atributo de Grupo:', + 'LBL_LDAP_GROUP_ATTR_REQ_DN' => 'With User DN:', + 'LBL_LDAP_GROUP_ATTR_REQ_DN_DESC' => 'Include the User DN with the User Attribute when checking group membership', + 'LBL_LDAP_USER_FILTER_DESC' => 'Cualquier parámetro de filtrado adicional a aplicar a la hora de autenticar usuarios. Por ejemplo:\\nis_sugar_user=1 o (is_sugar_user=1)(is_sales=1)', + 'LBL_LDAP_LOGIN_ATTRIBUTE' => 'Atributo de Inicio de Sesión:', + 'LBL_LDAP_BIND_ATTRIBUTE' => 'Atributo de Conexión (Bind):', + 'LBL_LDAP_BIND_ATTRIBUTE_DESC' => 'Para conectarse con el Usuario LDAP
Ejemplos: AD: userPrincipalName, openLDAP: userPrincipalName, Mac OS X: uid', + 'LBL_LDAP_LOGIN_ATTRIBUTE_DESC' => 'Para buscar al Usuario LDAP
Ejemplos:AD: userPrincipalName, openLDAP: dn, Mac OS X: dn', + 'LBL_LDAP_SERVER_HOSTNAME_DESC' => 'Ejemplo: ldap.example.com o ldaps://ldap.example.com cuando se usa SSL', + 'LBL_LDAP_SERVER_PORT_DESC' => 'Ejemplo: 389 o 636 cuando se usa SSL', + 'LBL_LDAP_GROUP_NAME' => 'Nombre de Grupo:', + 'LBL_LDAP_GROUP_NAME_DESC' => 'Ejemplo: cn=sugarcrm', + 'LBL_LDAP_USER_DN_DESC' => 'Ejemplo: ou=gente,dc=ejemplo,dc=com', + 'LBL_LDAP_AUTO_CREATE_USERS_DESC' => 'Si un usuario autenticado no existe, se creará uno en Sugar.', + 'LBL_LDAP_ENC_KEY' => 'Clave de Encriptación:', + 'LBL_LOADING' => 'Cargando, espere por favor...', + 'LBL_LOCALE_DB_COLLATION_TITLE' => 'Ordenación de Base de datos', + 'LBL_LOCALE_DB_COLLATION' => 'Ordenación', + 'LBL_LOCALE_DEFAULT_CURRENCY_ISO4217' => 'Código de Moneda ISO 4217', + 'LBL_LOCALE_DEFAULT_CURRENCY_NAME' => 'Moneda', + 'LBL_LOCALE_DEFAULT_CURRENCY_SYMBOL' => 'Símbolo de Moneda', + 'LBL_LOCALE_DEFAULT_CURRENCY' => 'Moneda del Sistema', + 'LBL_LOCALE_DEFAULT_DATE_FORMAT' => 'Formato de Fecha', + 'LBL_LOCALE_DEFAULT_DECIMAL_SEP' => 'Símbolo Decimal', + 'LBL_LOCALE_DEFAULT_LANGUAGE' => 'Idioma', + 'LBL_LOCALE_DEFAULT_NAME_FORMAT' => 'Formato de Nombre', + 'LBL_LOCALE_DEFAULT_NUMBER_GROUPING_SEP' => 'Separador de miles', + 'LBL_LOCALE_DEFAULT_SYSTEM_SETTINGS' => 'Interfaz de Usuario', + 'LBL_LOCALE_DEFAULT_TIME_FORMAT' => 'Formato de Hora', + 'LBL_LOCALE_EXAMPLE_NAME_FORMAT' => 'Ejemplo', + 'LBL_LOCALE_NAME_FORMAT_DESC' => '"s" Título
"f" Nombre
"l" Apellido', + 'LBL_LOCALE_TITLE' => 'Configuración Regional del Sistema', + 'LBL_LOCALE' => 'Establece la configuración regional por defecto para su sistema', + 'LBL_LOGIN_SUGAR_SERVER_DESC' => '- El Nombre de Usuario de la persona que utilizará este cliente', + 'LBL_LOGIN_SUGAR_SERVER' => 'Nombre de Usuario Final:', + 'LBL_MAILBOX_DESC' => 'Configurar buzones para la monitorización del correo entrante.', + 'LBL_MANAGE_CONTRACTEMPLATES_TITLE' => 'Tipos de Contrato', + 'LBL_MANAGE_CURRENCIES' => 'Monedas', + 'LBL_MANAGE_GROUPS_TITLE' => 'Administrar Grupos', + 'LBL_MANAGE_GROUPS' => 'Administrar colas de grupos', + 'LBL_MANAGE_LANGUAGES' => 'Idiomas', + 'LBL_MANAGE_LAYOUT' => 'Disposición de Campos', + 'LBL_MANAGE_LICENSE_TITLE' => 'Administración de Licencias', + 'LBL_MANAGE_LICENSE' => 'Administración de las propiedades de la licencia', + 'LBL_MANAGE_LOCALE' => 'Configuración Regional', + 'LBL_MANAGE_MAILBOX' => 'Email Entrante', + 'LBL_MANAGE_OFFLINE_CLIENT' => 'Ver Clientes Desconectados', + 'LBL_MANAGE_OPPORTUNITIES' => 'Oportunidades', + 'LBL_MANAGE_PASSWORD_TITLE' => 'Administración de Contraseñas', + 'LBL_MANAGE_PASSWORD' => 'Administración de los requisitos de las contraseñas así como de su caducidad', + 'LBL_MANAGE_RELEASES' => 'Lanzamientos', + 'LBL_MANAGE_ROLES_TITLE' => 'Administración de Roles', + 'LBL_MANAGE_ROLES' => 'Administración de la pertenencia a roles y sus propiedades', + 'LBL_MANAGE_TEAMS_TITLE' => 'Administración de Equipos', + 'LBL_MANAGE_TEAMS' => 'Administra la pertenencia a equipos y sus propiedades', + 'LBL_MANAGE_TIMEPERIODS_TITLE' => 'Administración de Períodos de Tiempo', + 'LBL_MANAGE_TIMEPERIODS' => 'Administra los períodos de tiempo', + 'LBL_MANAGE_USERS_TITLE' => 'Administración de Usuarios', + 'LBL_MANAGE_USERS' => 'Administración de cuentas de usuario', + 'LBL_MANAGE_WORKFLOW' => 'Administración de Workflow', + 'LBL_MANUAL_VALIDATION_TXT' => 'Validación Manual', + 'LBL_MANUAL_VALIDATION' => 'Si experimenta problemas continuos con la validación automática, por favor compruebe su configuración de Proxy en el panel de administración Configuración. Si el entorno de su sistema impide que su sistema se comunique con el servidor de validación de licencias a través de internet, debería proceder con los pasos de Validación Manual.', + 'LBL_MANUAL_VALIDATION1' => 'Paso 1: Genere un archivo con la información de la clave de licencia haciendo clic en el siguiente botón.', + 'LBL_MANUAL_VALIDATION2' => 'Guarde después el archivo (sugarkey.lic) en su sistema de ficheros local.', + 'LBL_MANUAL_VALIDATION3' => 'Paso 2: Copie el archivo sugarkey.lic a un sistema desde el que pueda acceder a internet mediante un navegador web. Vaya http://updates.sugarcrm.com/license y envíe el archivo sugarkey.lic.

El sitio web de validación de licencias realizará la validación de forma inmediata y le devolverá un archivo válido de clave de validación (sugarvalidationkey.lic) si el proceso de validación tiene éxito. Su navegador debería solicitarle que guarde el archivo.', + 'LBL_MANUAL_VALIDATION4' => 'Paso 3: Copie el archivo de clave de validación (sugarvalidationkey.lic) de nuevo al sistema SugarCRM. Importe la clave de validación utilizando el siguiente formulario:', + 'LBL_MANUAL_VALIDATION5' => 'Tras la importación de la clave de validación, habrá completado el proceso de validación manual. Su sistema actualizará la fecha de caducidad de la clave de validación, que determina la próxima vez en que debe revalidarse.', + 'LBL_MANUFACTURERS_TITLE' => 'Proveedores', + 'LBL_MANUFACTURERS' => 'Configurar la lista de proveedores', + 'LBL_MASS_EMAIL_CONFIG_DESC' => 'Configurar las opciones de email', + 'LBL_MASS_EMAIL_CONFIG_TITLE' => 'Configuración de Email', + 'LBL_MASS_EMAIL_MANAGER_DESC' => 'Administración de la cola de envío de email', + 'LBL_MASS_EMAIL_MANAGER_HEADER' => 'Administración de Campañas por Email', + 'LBL_MASS_EMAIL_MANAGER_TITLE' => 'Cola de Email', + 'LBL_MASSAGE_MASS_EMAIL_DESC' => 'SugarCRM 3.5.1+ requiere una actualización a los datos de EMails Masivos. Haga clic en "Realizar Actualización" para continuar.', + 'LBL_MASSAGE_MASS_EMAIL' => 'Corrección de la Hora GMT para Emails Masivos enviados', + 'LBL_MISSING_GLOBAL' => 'Hemos detectado que hay usuarios que no pertenecen al equipo global. Si desea incluirlos en un equipo global, marque la siguiente opción, por favor.', + 'LBL_MISSING_PRIVATE' => 'Hemos detectado que hay usuario que no pertenecen a ningún equipo privado. Si desea asegurarse de que todos los usuarios pertenecen a algún equipo privado, le recomendamos que repare la siguiente opción.', + 'LBL_MISSING_TEAMS' => 'Hemos detectado discrepancias entre su estructura de reporte interno y su estructura de equipos. Si desea corregirlo, marque la siguiente opción, por favor.', + 'LBL_MI_REBUILDING' => 'Reconstruyendo', + 'LBL_MI_SECTION' => 'Sección...', + 'LBL_MI_IN_EXT' => 'Instalar la extensión %s', + 'LBL_MI_UN_EXT' => 'Desinstalar la extensión %s', + 'LBL_MI_UN_CUSTOMFIELD' => 'Desinstalando Campos Personalizados...', + 'LBL_MI_IN_CUSTOMFIELD' => 'Instalando Campos Personalizados...', + 'LBL_MI_COMPLETE' => 'Completado', + 'LBL_MI_UN_BEAN' => 'Desinstalando Bean :', + 'LBL_MI_IN_BEAN' => 'Instalando Bean :', + 'LBL_MI_IN_DASHLETS' => 'Instalando Sugar Dashlet', + 'LBL_MI_UN_DASHLETS' => 'Desinstalando Sugar Dashlet', + 'LBL_MI_IN_IMAGES' => 'Instalando Imágenes', + 'LBL_MI_IN_MENUS' => 'Instalando menús', + 'LBL_MI_UN_MENUS' => 'Desinstalando menús', + 'LBL_MI_IN_ADMIN' => 'Instalando Sección de Administración', + 'LBL_MI_UN_ADMIN' => 'Desinstalando Sección de Administración', + 'LBL_MI_IN_USER' => 'Instalando Sección de Página de Usuario', + 'LBL_MI_UN_USER' => 'Desinstalando Sección de Página de Usuario', + 'LBL_MI_IN_VAR' => 'Instalando Definiciones de Variables', + 'LBL_MI_UN_VAR' => 'Deinstalando Definiciones de Variables', + 'LBL_MI_IN_SUBPANEL' => 'Instalando Diseños de Subpaneles', + 'LBL_MI_UN_SUBPANEL' => 'Desinstalando Diseños de Subpaneles', + 'LBL_MI_IN_LANG' => 'Instalando Paquetes de Idioma', + 'LBL_MI_UN_LANG' => 'Desinstalando Paquetes de Idioma', + 'LBL_MI_IN_RELATIONSHIPS' => 'Instalando Relaciones', + 'LBL_MI_UN_RELATIONSHIPS' => 'Desinstalando Relaciones', + 'LBL_MI_UN_RELATIONSHIPS_DROP' => 'eliminando tabla', + 'LBL_MI_REPAIR_INDICES' => 'Reparando índices', + 'LBL_MI_IN_CONNECTORS' => 'Instalando Conectores', + 'LBL_MI_UN_CONNECTORS' => 'Desinstalando Conectores', + 'LBL_MI_IN_HOOKS' => 'Instalación de los Logic Hooks', + 'LBL_MI_UN_HOOKS' => 'Desinstalación de los Logic Hooks', + 'LBL_MI_IN_SCHEDULEDTASKS' => 'Instalación de las tareas programadas', + 'LBL_MI_UN_SCHEDULEDTASKS' => 'Desinstalación de las tareas programadas', + 'LBL_ML_ACTION' => 'Acción', + 'LBL_ML_CANCEL' => 'Cancelar', + 'LBL_ML_COMMIT' => 'Proceder', + 'LBL_ML_DESCRIPTION' => 'Descripción', + 'LBL_ML_INSTALLED' => 'Fecha de Instalación', + 'LBL_ML_NAME' => 'Nombre', + 'LBL_ML_PUBLISHED' => 'Fecha de Publicación', + 'LBL_ML_TYPE' => 'Tipo', + 'LBL_ML_UNINSTALLABLE' => 'Desinstalable', + 'LBL_ML_VERSION' => 'Versión', + 'LBL_ML_INSTALL' => 'Instalar', + 'LBL_ML_ENABLE_OR_DISABLE' => 'Habilitar/Deshabilitar', + 'LBL_ML_DELETE' => 'Eliminar', + 'LBL_MODIFY_CREDENTIALS' => 'Modificar Credenciales', + 'LBL_MODULE_LICENSE' => 'Por favor, lea el siguiente Acuerdo de Licencia:', + 'LBL_MODULE_LOADER_TITLE' => 'Cargador de Módulos', + 'LBL_MODULE_LOADER' => 'Agregar o quitar módulos, temas, paquetes de idioma y otras extensiones a Sugar', + 'LBL_MODULE_NAME' => 'Administración', + 'LBL_MODULE_TITLE' => 'Administración: Inicio', + 'LBL_MODULES_TO_DOWNLOAD' => 'Módulos a Descargar (arrastre y suelte aquí)', + 'LBL_NEVER' => 'Nunca', + 'LBL_NEW_FORM_TITLE' => 'Nueva Cuenta', + 'LBL_NOTIFY_SUBJECT' => 'Asunto:', + 'LBL_OC_SEARCH_FORM_TITLE' => 'Búsqueda de Cliente Desconectado', + 'LBL_OFFLINE_CLIENT' => 'Ver Clientes Desconectados que están conectados a este sistema Sugar', + 'LBL_OOTB_BOUNCE' => 'Ejecutar Proceso Nocturno de Emails de Campaña Rebotados', + 'LBL_OOTB_CAMPAIGN' => 'Ejecutar Proceso Nocturno de Campañas de Email Masivo', + 'LBL_OOTB_IE' => 'Comprobar Cuentas de Correo Entrante', + 'LBL_OOTB_PRUNE' => 'Truncar Base de datos al Inicio del Mes', + 'LBL_OOTB_REPORTS' => 'Ejecutar Tareas Programadas de Generación de Informes', + 'LBL_OOTB_WORKFLOW' => 'Tareas de Proceso de Workflow', + 'LBL_OOTB_TRACKER' => 'Limpiar la Tabla de Historial de Usuario a primero de Mes', + 'LBL_UPDATE_TRACKER_SESSIONS' => 'Actualizar la Tabla tracker_sessions', + 'LBL_OOTB_DCE_CLNUP' => 'Close loop on completed DCE actions', + 'LBL_OOTB_DCE_REPORT' => 'Create Action to gather daily reports', + 'LBL_OOTB_DCE_SALES_REPORT' => 'Create weekly Sales Report Email', + 'LBL_OVERWRITE_FILES' => 'Sobrescribir Archivos', + 'LBL_PASSWORD_SUGAR_SERVER_DESC' => '- Un nombre de usuario y contraseña de administrador en el servidor', + 'LBL_PASSWORD_SUGAR_SERVER' => 'Constraseña de Administrador:', + 'LBL_PASSWORD' => 'Contraseña', + 'LBL_PASSWORD_RESET_MANAGEMENT' => 'Opción de Restaurar Contraseña', + 'LBL_PASSWORD_RULES_MANAGEMENT' => 'Requisitos de Contraseñas', + 'LBL_PASSWORD_TEMPLATE' => 'Plantillas de Email', + 'LBL_PASSWORD_CREATE_TEMPLATE' => 'Crear', + 'LBL_PASSWORD_EDIT_TEMPLATE' => 'Editar', + 'LBL_PASSWORD_GENERATE_TEMPLATE_MSG' => 'Plantilla de Email que contiene una contraseña generada por el sistema', + 'LBL_PASSWORD_LOST_TEMPLATE_MSG' => 'Plantilla de Email que contiene un enlace generado por el sistema para restaurar la contraseña', + 'LBL_PASSWORD_INVALID_LENGTH' => 'La Longitud Mínima debe ser menor que la Longitud Máxima', + 'LBL_PASSWORD_INVALID_MINLENGTH' => 'La Longitud Mínima debe ser mayor de 0', + 'LBL_PASSWORD_SYST_GENERATED_PWD_ON' => 'Habilitar Característica de Contraseñas Generadas por el Sistema', + 'LBL_PASSWORD_SYST_GENERATED_PWD_HELP' => 'Cuando se habilita esta característica, se enviará un correo a los usuarios con un enlace generado por el sistema para restaurar su contraseña. Los requisitos de esta característica son: 1) debe haberse configurado correctamente un servidor de correo saliente en la Configuración de Email, y 2) los usuarios deben de tener direcciones de correo válidas en sus registros de usuario', + 'LBL_PASSWORD_EXP_AFTER' => 'La Contraseña Caduca en', + 'LBL_PASSWORD_FORGOT_FEATURE' => 'Habilitar carcaterística de He olvidado mi contraseña', + 'LBL_PASSWORD_FORGOT_FEATURE_HELP' => 'Cuando está habilitada, los usuarios podrán restablecer sus propias contraseñas en la página de Inicio de Sesión. Requisitos para usar esta característica: 1) los usuarios deben tener direcciones de correo válidas en sus registros de usuario, y 2) debe haberse configurado correctamente un servidor de correo saliente en la Configuración de Email.', + 'LBL_PASSWORD_ONE_UPPER_CASE' => 'Debe contener una letra en mayúsculas (A-Z)', + 'LBL_PASSWORD_ONE_LOWER_CASE' => 'Debe contener una letra en minúsculas (a-z)', + 'LBL_PASSWORD_ONE_NUMBER' => 'Debe contener un número (0-9)', + 'LBL_PASSWORD_ONE_SPECIAL_CHAR' => 'Debe contener uno de los siguientes caracteres especiales (~,!,@,#,$,%,^,&,*,(,),_,+,-,=,{,},|)', + 'LBL_PASSWORD_ONLY_LOWCASE' => 'Sólo caracteres en minúsculas', + 'LBL_PASSWORD_LOCKOUT' => 'Bloqueo de Inicio de Sesión', + 'LBL_PASSWORD_LOCKOUT_ATTEMPT1' => 'Bloquear usuarios tras', + 'LBL_PASSWORD_LOCKOUT_ATTEMPT2' => 'intentos fallidos de inicio de sesión', + 'LBL_PASSWORD_LOGIN' => 'Inicio de Sesión', + 'LBL_PASSWORD_LOGINS' => 'inicios de sesión', + 'LBL_PASSWORD_LOGIN_DELAY' => 'Habilitar inicio de sesión de nuevo tras', + 'LBL_PASSWORD_NEEDED_CARACTERS' => 'Caracteres requeridos', + 'LBL_PASSWORD_PROHIBITED_CARACTERS' => 'Caracteres prohibidos', + 'LBL_PASSWORD_MINIMUM_LENGTH' => 'Longitud Mínima', + 'LBL_PASSWORD_MAXIMUM_LENGTH' => 'Longitud Máxima', + 'LBL_PASSWORD_AND_MAXIMUM_LENGTH' => 'y Longitud Máxima', + 'LBL_PASSWORD_FIRSTNAME_PROHIBITED' => 'Nombre no permitido', + 'LBL_PASSWORD_LASTNAME_PROHIBITED' => 'Apellido no permitido', + 'LBL_PASSWORD_SYST_EXPIRATION' => 'Caducidad de Contraseña Generada por el Sistema', + 'LBL_PASSWORD_SYST_GENERATED_TITLE' => 'Contraseñas Generadas por el Sistema', + 'LBL_PASSWORD_USER_EXPIRATION' => 'Caducidad de Contraseña Generada por Usuario', + 'ERR_PASSWORD_LINK_EXPIRE_TIME' => 'Especificar el período de tiempo tras el cual el enlace generado caduca.', + 'ERR_PASSWORD_EXPIRE_TIME' => 'Especificar el período de tiempo tras el cual la contraseña caduca.', + 'ERR_PASSWORD_EXPIRE_LOGIN' => 'Especificar el número de inicios de sesión tras los cuales la contraseña caduca.', + 'ERR_PASSWORD_LOCKOUT_TIME' => 'Especificar el período de tiempo tras el cual los usuarios pueden intentar iniciar la sesión de nuevo.', + 'ERR_PASSWORD_LOCKOUT_LOGIN' => 'Especificar el número de intentos fallidos de inicio de sesión tras los cuales un usuario será bloqueado.', + 'LBL_PASSWORD_LINK_EXPIRATION' => 'Caducidad de Enlace Generada', + 'LBL_PASSWORD_LINK_EXPIRATION_HELP' => 'El sistema genera un enlace y lo envía al usuario para permitirle acceder a la página de Restaurar Contraseña.', + 'LBL_PASSWORD_REGEX' => 'Requisito de Regex', + 'LBL_PASSWORD_REGEX_COMMENT' => 'Descripción de Regex', + 'LBL_PASSWORD_RULES' => 'Reglas para Contraseñas', + 'LBL_PASSWORD_LINK_EXP_IN' => 'El Enlace Caduca en', + 'LBL_PASSWORD_EXP_IN' => 'La Contraseña Caduca en', + 'LBL_PASSWORD_USER_RESET' => 'Contraseña Restaurable por Usuario', + 'LBL_PERFORM_UPDATE' => 'Realizar Actualización', + 'LBL_PLUGINS_TITLE' => 'Sugar Forge', + 'LBL_PLUGINS' => 'Obtiene complementos y otras extensiones de Sugar.', + 'LBL_PRICE_LIST_TITLE' => 'Productos y Presupuestos', + 'LBL_PRICE_LIST_DESC' => 'Administre el catálogo de productos, junto con la información relacionada sobre fabricantes y proveedores de envío.', + 'LBL_PRIVATE_TEAM' => 'Reconstruir el acceso a un equipo privado. Todo usuario de la aplicación debe tener uno, y todos los gestores superiores en la jerarquía deben tener acceso a él.', + 'LBL_PRODUCT_CATEGORIES_TITLE' => 'Categorías de Productos', + 'LBL_PRODUCT_CATEGORIES' => 'Actualiza la lista de categorías de productos', + 'LBL_PRODUCT_TYPES_TITLE' => 'Tipos de Productos', + 'LBL_PRODUCT_TYPES' => 'Configura la lista de tipos de productos', + 'LBL_PRODUCTS_TITLE' => 'Catálogo de Productos', + 'LBL_PRODUCTS' => 'Introduzca elementos en el catálogo de productos', + 'LBL_PROXY_AUTH' => '¿Autenticación?', + 'LBL_PROXY_HOST' => 'Servidor Proxy', + 'LBL_PROXY_ON_DESC' => 'Utilice un proxy para acceder a información externa como las actualizaciones de Sugar.', + 'LBL_PROXY_ON' => '¿Habilitar Proxy?', + 'LBL_PROXY_PASSWORD' => 'Contraseña', + 'LBL_PROXY_PORT' => 'Puerto', + 'LBL_PROXY_TITLE' => 'Configuración de Proxy', + 'LBL_PROXY_USERNAME' => 'Nombre de Usuario', + 'LBL_QUOTES_ORDERS_TITLE' => 'Presupuestos y Pedidos', + 'LBL_README' => 'Léame', + 'LBL_REBUILD_AUDIT_DESC' => 'Reconstruye la tabla de auditorías.', + 'LBL_REBUILD_AUDIT_TITLE' => 'Reconstruir Auditoría', + 'LBL_REBUILD_AUDIT_SEARCH' => 'Buscando nuevos módulos con auditoría habilitada', + 'LBL_REBUILD_AUDIT_CREATING' => 'creando tabla %1$s para %2$s .
', + 'LBL_REBUILD_AUDIT_SKIP' => 'La tabla de auditoría para %1$s ya exite. saltando...
', + 'LBL_REBUILD_CONFIG_DESC' => 'Reconstruye config.php actualizando la versión y agregando opciones por defecto cuando no han sido declaradas explícitamente.', + 'LBL_REBUILD_CONFIG' => 'Reconstruir Archivo de Configuración', + 'LBL_REBUILD_DASHLETS_DESC_SHORT' => 'Reconstruye el archivo caché de Sugar Dashlets.', + 'LBL_REBUILD_DASHLETS_DESC_SUCCESS' => 'Archivo caché de Sugar Dashlets reconstruido.', + 'LBL_REBUILD_DASHLETS_DESC' => 'Quitando caché de Sugar Dashlets y buscando archivos de Dashlets en directorios conocidos.', + 'LBL_REBUILD_DASHLETS_TITLE' => 'Reconstruir Sugar Dashlets', + 'LBL_REBUILD_EXTENSIONS_DESC' => 'Reconstruye las extensiones incluyendo vardefs extendidos, paquetes de idioma, menús, y administración', + 'LBL_REBUILD_EXTENSIONS_TITLE' => 'Reconstruir Extensiones', + 'LBL_REBUILD_EXPRESSIONS_DESC' => 'Reconstruye la caché de funciones de Sugar Logic', + 'LBL_REBUILD_EXPRESSIONS_TITLE' => 'Reconstruir Funciones de Sugar Logic', + 'LBL_REBUILD_HTACCESS_DESC' => 'Reconstruye el archivo .htaccess para limitar el acceso a ciertos archivos.', + 'LBL_REBUILD_HTACCESS' => 'Reconstruir archivo .htaccess', + 'LBL_REBUILD_WEBCONFIG_DESC' => 'Reconstruye web.config para limitar el acceso directo a ciertos archivos', + 'LBL_REBUILD_WEBCONFIG' => 'Reconstruir el Archivo web.config', + 'LBL_REBUILD_JAVASCRIPT_LANG_DESC_SHORT' => 'Reconstruye versiones JavaScript de los archivos de idioma', + 'LBL_REBUILD_JAVASCRIPT_LANG_DESC' => 'Quitando versiones JavaScript de archivos de idioma, se reconstruirán cuando sea necesario.', + 'LBL_REBUILD_JAVASCRIPT_LANG_TITLE' => 'Reconstruir JavaScript para Idiomas', + 'LBL_REBUILD_JS_FILES_TITLE' => 'Reconstruir Archivos JS Comprimidos', + 'LBL_REBUILD_JS_FILES_DESC_SHORT' => 'Copia los archivos originales con el Código JS Completo y reemplaza los archivos actuales JS comprimidos', + 'LBL_REBUILD_CONCAT_JS_FILES_TITLE' => 'Reconstruir los Archivos de Agrupación de JS', + 'LBL_REBUILD_CONCAT_JS_FILES_DESC_SHORT' => 'Reconcatena y sobrescribe los archivos agrupados existentes con las últimas versiones de los archivos agrupados', + 'LBL_REBUILD_JS_MINI_FILES_TITLE' => 'Reconstuir Archivos JS Reducidos', + 'LBL_REBUILD_JS_MINI_FILES_DESC_SHORT' => 'Copia los archivos originales con el Código JS Completo y los reduce, para luego reemplazar los archivos actuales comprimidos con éstos', + 'LBL_REPAIR_JS_FILES_TITLE' => 'Reparar Archivos JS', + 'LBL_REPAIR_JS_FILES_DESC_SHORT' => 'Comprime los archivos JS Actuales - incluye cualquier cambio realizado, pero no sobrescribe los archivos de Código Fuente JS originales', + 'LBL_REPAIR_JS_FILES_PROCESSING' => 'Procesando archivos. Esto puede tardar varios minutos. Si sale de esta página no cancelará el proceso, de modo que si lo desea puede hacerlo o esperar a que el proceso finalice...', + 'LBL_REPAIR_JS_FILES_DONE_PROCESSING' => 'Fin de Proceso de Archivos.', + 'LBL_REPAIR_FIELD_CASING_TITLE' => 'Reparar Campos que No están en Minúsculas', + 'LBL_REPAIR_FIELD_CASING_DESC_SHORT' => 'Repara las tablas personalizadas y los archivos de metadatos que tienen nombres con capitalización mezclada (mayúsculas y minúsculas) para corregir problemas debidos a que el código espera nombres de campos en minúscula', + 'LBL_REPAIR_FIELD_CASING_PROCESSING' => 'Buscando campos personalizados y archivos...', + 'LBL_REPAIR_FIELD_CASING_SQL_FIELD_META_DATA' => 'Actualizando entrada de fila {0} en el fields_meta_data de la tabla', + 'LBL_REPAIR_FIELD_CASING_SQL_CUSTOM_TABLE' => 'Actualizando columna {0} en la tabla {1}', + 'LBL_REBUILD_REL_DESC' => 'Reconstruye los metadatos sobre las relaciones y purga el archivo de caché.', + 'LBL_REBUILD_REL_TITLE' => 'Reconstruir Relaciones', + 'LBL_REBUILD_REL_PROC_META' => 'Procesando metadatos de relación para', + 'LBL_REBUILD_REL_PROC_C_META' => 'Procesando metadatos de relación personalizada para', + 'LBL_REBUILD_REL_DEL_CACHE' => 'Eliminado archivo de caché de relaciones...
', + 'LBL_REBUILD_REL_UPD_WARNING' => 'Actualizando el mensaje de advertencia de administrador...
', + 'LBL_REBUILD_SCHEDULERS_DESC_SHORT' => 'Reconstruye sus Trabajos Planificados de serie', + 'LBL_REBUILD_SCHEDULERS_DESC_SUCCESS' => 'Reconstrucción de Trabajo Planificado completada.', + 'LBL_REBUILD_SCHEDULERS_DESC' => 'La reconstrucción de sus Trabajos del Planificador eliminará todas las entradas de trabajos actuales y sus registros respectivos. Todos los trabajos del Planificador incluidos de serie se reconstruirán con su configuración por defecto, incluyendo la propiedad de Activo/Inactivo.', + 'LBL_REBUILD_SCHEDULERS_TITLE' => 'Reconstruir Planificadores', + 'LBL_REBUILD_SPRITES_TITLE' => 'Reconstruir Sprites', + 'LBL_REBUILD_SPRITES_DESC_SHORT' => 'Reconstruye las imágenes de sprites y archivos de configuración', + 'LBL_REBUILD_WORKFLOW_CACHE' => 'Reconstruyendo Caché de Workflow...
', + 'LBL_REBUILD_WORKFLOW_COMPILING' => 'Compilando Plugins...
', + 'LBL_REBUILD' => 'Reconstruir', + 'LBL_REGEX_HELP_TITLE' => 'Descripción de Regex', + 'LBL_REGEX_HELP_TEXT' => 'Las Expresiones Regulares proporcionan un mecanismo conciso y flexible para identificar cadenas de contraseñas, como algunos caracteres en particular o patrones de caracteres. Puede crear reglas de contraseña personalizadas proporcionando una regex que será utilizada en una condición NOT MATCH; la contraseña no debe contener ninguna coincidencia con cualquiera de las expresiones de la regex.', + 'LBL_REGEX_DESC_HELP_TEXT' => 'Esta descripción debería explicar el Requisito de la Regex y será mostrada en la lista de requisitos para los usuarios cuando éstos proporcionen nuevas contraseñas.', + 'LBL_RELEASE' => 'Administrar publicaciones y versiones', + 'LBL_RENAME_TABS' => 'Renombrar Pestañas', + 'LBL_REPAIR_ACTION' => '¿Qué acción desearía realizar?', + 'LBL_REPAIR_DATABASE_DESC' => 'Repara la base de datos basándose en valores definidos en las vardefs', + 'LBL_REPAIR_DATABASE_PROCESSING' => 'Procesando comparación de base de datos con vardefs...', + 'LBL_REPAIR_DATABASE_DIFFERENCES' => 'Se han encontrado diferencias entre base de datos y las vardefs', + 'LBL_REPAIR_DATABASE_TEXT' => 'El siguiente script sincronizará la estructura de la base de datos con la estructura definida en las vardefs. Tiene la opción de exportar este script y ejecutarlo contra su base de datos utilizando herramientas de gestión de base de datos externas, o de permitir que el módulo de administración ejecute el script.

NOTA: cualquier cambio que haga al script en el cuadro de texto se reflejará en el código exportado o ejecutado.

', + 'LBL_REPAIR_DATABASE_SYNCED' => 'Las tablas de base de datos están sincronizadas con los vardefs', + 'LBL_REPAIR_DATABASE_EXECUTE' => 'Ejecutar', + 'LBL_REPAIR_DATABASE_EXPORT' => 'Exportar', + 'LBL_REPAIR_DATABASE' => 'Reparar base de datos', + 'LBL_REPAIR_DISPLAYSQL' => 'Mostrar SQL', + 'LBL_REPAIR_ENTRY_POINTS_DESC' => 'Comprobación de reparación de Puntos de Entrada. Ejecute esta reparación si observa errores de tipo 'Not A Valid Entry Point'.', + 'LBL_REPAIR_ENTRY_POINTS' => 'Reparar Puntos de Entrada', + 'LBL_REPAIR_EXECUTESQL' => 'Ejecutar SQL', + 'LBL_REPAIR_EXPORTSQL' => 'Exportar SQL', + 'LBL_REPAIR_IE_DESC' => 'Repara las cuentas de Email Entrante y encripta las contraseñas de las cuentas', + 'LBL_REPAIR_IE_FAILURE' => 'Las siguientes cuentas de Email Entrante deben ser reparadas manualmente - por favor, introduzca de nuevo el nombre de usuario y la contraseña para cada una:', + 'LBL_REPAIR_IE_SUCCESS' => '¡Todas las cuentas de Email Entrante han sido reparadas con éxito!', + 'LBL_REPAIR_IE' => 'Reparar Cuentas de Email Entrante', + 'LBL_REPAIR_INDEX' => 'Reparar Índices', + 'LBL_REPAIR_INDEX_DROPPING' => '
Eliminando restricciones/índices.', + 'LBL_REPAIR_INDEX_EXECUTING' => '
Ejecutando', + 'LBL_REPAIR_INDEX_DROP' => '
Eliminar estas restrincciones/índices.', + 'LBL_REPAIR_INDEX_ADDING' => '
Agregando restricciones/índices.', + 'LBL_REPAIR_INDEX_ADD' => '

Agregar estas restricciones/índices.', + 'LBL_REPAIR_INDEX_ALTERING' => '
Alterando restricciones/índices.', + 'LBL_REPAIR_INDEX_ALTER' => '

Cambiar estas restricciones/índices.', + 'LBL_REPAIR_INDEX_SYNC' => '


Las definiciones de índices están sincronizadas.', + 'LBL_REPAIR_ORACLE_COMMIT_DONE' => 'Todas las consultas SQL realizadas.', + 'LBL_REPAIR_ORACLE_COMMIT' => 'Proceder', + 'LBL_REPAIR_ORACLE_VARCHAR_DESC_LONG_1' => 'Las siguientes consultas deberían ejecutarse contra su base de datos. Ejecútelas manualmente con un cliente de su elección o haga clic en el botón "Proceder" para que SugarCRM ejecute las consultas de forma inmediata.', + 'LBL_REPAIR_ORACLE_VARCHAR_DESC_LONG_2' => 'No se han encontrado columnas que necesiten el cambio de semántica de VARCHAR2 a carácter.', + 'LBL_REPAIR_ORACLE_VARCHAR_DESC' => 'Cambia la semántica de las columnas VARCHAR2 de byte a carácter; necesario para soporte de UTF-8 y MBCS.', + 'LBL_REPAIR_ORACLE_VARCHAR' => 'Reparar Columnas VARCHAR2 de Oracle', + 'LBL_REPAIR_ROLES_DESC' => 'Repara los Roles añadiendo todos los nuevos módulos que soporntan Controles ed Acceso así como añadiendo nuevos Controles de Acceso a los módulos existentes', + 'LBL_REPAIR_ROLES' => 'Reparar Roles', + 'LBL_REPAIR_TEAMS_DESC' => 'Reconstruye la pertenencia a equipos privados según la jerarquía de reporte de usuarios.', + 'LBL_REPAIR_TEAMS' => 'Reparar Equipos', + 'LBL_REPAIR_TEAMS_PROCESS_USER' => '
Procesando usuario=', + 'LBL_REPAIR_TEAMS_REPORT' => 'informa a=', + 'LBL_REPAIR_TEAMS_SKIP_USER' => '
Saltando usuario=', + 'LBL_REPAIR_TEAMS_NO_PROC' => '

Nada para procesar...', + 'LBL_REPAIR_THEME_IMAGES' => 'Optimizar Temas', + 'LBL_REPAIR_THEME_IMAGES_DESC' => 'Optimizar temas eliminando imágenes clonadas.', + 'LBL_REPAIR_XSS' => 'Quitar XSS', + 'LBL_REPAIR_ACTIVITIES_DESC' => 'Repara la fecha de finalización de una Actividad (Llamadas, Reuniones).', + 'LBL_REPAIR_ACTIVITIES_TEXT' => 'Esta herramienta le permite reparar la fecha de finalización de las Llamadas y las Reuniones.', + 'LBL_REPAIR_ACTIVITIES' => 'Reparar Actividades', + 'LBL_CHECK_REPORTS_DESC' => 'Comprueba si los informes son aún válidos tras una actualización y lista cualquier informe no válido encontrado durante la comprobación', + 'LBL_CHECK_REPORTS_TEXT' => 'Esta herramienta le permite comprobar si todos sus informes son válidos.', + 'LBL_CHECK_REPORTS' => 'Comprobar Informes', + 'LBL_ALL' => 'Todo', + 'LBL_REPAIRXSS_COUNT' => 'Objetos encontrados', + 'LBL_REPAIRXSS_INSTRUCTIONS' => 'Seleccione un módulo para quitar potenciales cadenas XSS. Seleccione "Todo" para revisar todos los módulos.
Presione ejecutar para iniciar el proceso de detección y eliminación.', + 'LBL_REPAIRXSS_REPAIRED' => 'Objetos reparados', + 'LBL_REPAIRXSS_TITLE' => 'Quita vulnerabilidades XSS de la Base de Datos', + 'LBL_RESERVE_OC_SPOT' => 'Reserve una Situación de Cliente Desconectado', + 'LBL_RESTORE_BUTTON_LABEL' => 'Restaurar', + 'LBL_RETURN' => 'Volver', + 'LBL_REVALIDATE' => 'Revalidar', + 'LBL_SEARCH_MODULE_NAME' => 'Introduzca el nombre completo del módulo o parte de él:', + 'LBL_SELECT_USER' => 'Seleccione Usuario:', + 'LBL_SEND_STAT' => 'Enviar Estadísticas de Uso Anónimas - Si está seleccionado, Sugar enviará estadísticas de forma anónima sobre su actualización a SugarCRM Inc. cada vez que su sistema compruebe la existencia de actualizaciones. La información nos ayudará a entender como se utiliza la aplicación y mejorar el producto.', + 'LBL_SHIPPERS_TITLE' => 'Proveedores de Transporte', + 'LBL_SHIPPERS' => 'Configura la lista de métodos de transporte', + 'LBL_SHOW_ADVANCED_OPTIONS' => 'Mostrar Opciones Avanzadas', + 'LBL_STATUS' => 'Estado', + 'LBL_TOOLS_DESC' => 'Cree y edite módulos y diseños de módulos, gestione campos estándar y personalizados, y configure pestañas.', + 'LBL_STUDIO_DESC' => 'Personalice campos de módulos, diseños y relaciones', + 'LBL_STUDIO_TITLE' => 'Herramientas de Desarrollo', + 'LBL_STUDIO' => 'Estudio', + 'LBL_SUGAR_NETWORK_TITLE' => 'Sugar Connect', + 'LBL_SUGAR_NETWORK_DESC' => 'Conéctese a los diversos servicios de SugarCRM donde podrá acceder a los foros de SugarCRM y al Sugar Wiki, búsquedas de FAQs (Preguntas Frecuentemente Realizadas), descargas de la última versión de Sugar, compra de subscripciones de red, y archivo y búsqueda de incidencias reportadas, peticiones de nuevas características y más.', + 'LBL_SUGAR_SCHEDULER_TITLE' => 'Planificador', + 'LBL_SUGAR_SCHEDULER' => 'Configurar eventos planificados', + 'LBL_SUGAR_SERVER_URL_DESC' => '- El URL del servidor al que este cliente se conectará (ej: http://localhost/sugarserver).', + 'LBL_SUGAR_SERVER_URL' => 'URL del servidor:', + 'LBL_SUGAR_UPDATE_TITLE' => 'Actualizaciones de Sugar', + 'LBL_SUGAR_UPDATE' => 'Comprobación de nuevas actualizaciones de Sugar', + 'LBL_SUGARCRM_HELP' => 'Ayuda de SugarCRM', + 'LBL_SUPPORT_TITLE' => 'Portal Sugar Support', + 'LBL_SUPPORT' => 'Acceda al soporte técnico y más', + 'LBL_SYSTEM_NAME' => 'Nombre del Sistema', + 'LBL_TAXRATES_TITLE' => 'Tipos de Impuestos', + 'LBL_TAXRATES' => 'Configurar la lista de tipos de gravamen disponibles para los presupuestos', + 'LBL_TEAM_HIERARCHY' => 'Reconstruye la jerarquía de equipos. El acceso implícito para todos los usuarios será reconstruido.
Supongamos que un usuario A informa a otro usuario B, que a su vez informa a un tercer usuario C. Si hay un acceso explícito al Equipo 1 para el Usuario A, entonces el Usuario B y el Usuario C adquirirán acceso a este equipo.', + 'LBL_TEAMS_TITLE' => 'Equipos', + 'LBL_TERMS_AND_CONDITIONS' => 'Términos y Condiciones', + 'LBL_THEME_SETTINGS' => 'Temas', + 'LBL_THEME_SETTINGS_DESC' => 'Elija los temas que los usuarios pueden seleccionar', + 'LBL_THEME_SETTINGS_AVAILABLE_THEMES' => 'Temas Disponibles', + 'LBL_THEME_SETTINGS_UNAVAILABLE_THEMES' => 'Temas no Disponibles', + 'LBL_TIMEZONE' => 'Zona Horaria', + 'LBL_TO' => 'a', + 'LBL_TRACKER_SETTINGS' => 'Monitorización', + 'LBL_TRACKER_SETTINGS_DESC' => 'Seleccione qué datos de sistema y usuario son monitorizados', + 'LBL_SUGARFEED_SETTINGS' => 'Sugar Feed', + 'LBL_SUGARFEED_SETTINGS_DESC' => 'Habilitar Feed para Usuarios y seleccionar los módulos a los que enviar las actualizaciones', + 'LBL_UPDATE_CHECK_AUTO' => 'Automáticamente', + 'LBL_UPDATE_CHECK_MANUAL' => 'Manualmente', + 'LBL_UPDATE_CHECK_TYPE' => 'Comprobar actualizaciones automáticamente - Si está seleccionado, el sistema comprobará periódicamente si hay disponibles versiones actualizadas de la aplicación.', + 'LBL_UPDATE_DESCRIPTIONS' => 'Descripción', + 'LBL_UPDATE_TITLE' => 'Actualizaciones de Sugar', + 'LBL_UPGRADE_ADDED_TO_GROUP' => 'Añadido a Grupo', + 'LBL_UPGRADE_ALREADY_EXISTS_GROUP' => 'ya existe un grupo', + 'LBL_UPGRADE_ALREADY_EXISTS_IN_GROUP' => 'Ya existe en el grupo:', + 'LBL_UPGRADE_CONVERT_DISC_CLIENT_TITLE' => 'Convertir a Cliente sin conexión', + 'LBL_UPGRADE_CONVERT_DISC_CLIENT' => 'Convertir esta instalación de Sugar en un Cliente sin conexión', + 'LBL_UPGRADE_CONVERT_DISC_DESCRIPTION' => 'Aviso: Por favor, asegúrese de que se trata de una instalación nueva sin datos.
Introduzca la siguiente información y pulse Guardar para convertir este sistema en un Cliente sin conexión.', + 'LBL_UPGRADE_CURRENCY' => 'Actualizar cantidades monetarias en', + 'LBL_UPGRADE_CUSTOM_LABELS_DESC' => 'Actualiza el formato de las etiquetas de campos personalizados en todos los archivos de idioma.', + 'LBL_UPGRADE_CUSTOM_LABELS_TITLE' => 'Actualizar Etiquetas Personalizadas', + 'LBL_UPGRADE_DB_BEGIN' => 'Iniciando Actualización', + 'LBL_UPGRADE_DB_COMPLETE' => 'Actualización Completa', + 'LBL_UPGRADE_DB_FAIL' => 'La actualización ha fallado', + 'LBL_UPGRADE_DB_TITLE' => 'Actualizar la base de datos', + 'LBL_UPGRADE_DB' => 'Actualizar la base de datos de la versión 2.0.x a la 2.5', + 'LBL_UPGRADE_FOR_PRODUCT' => 'para el Producto', + 'LBL_UPGRADE_NEW_GROUP' => 'Nuevo Grupo creado', + 'LBL_UPGRADE_NOT_UPGRADING' => 'No se intentará la actualización', + 'LBL_UPGRADE_STUDIO_DESC' => 'Actualiza archivos pre 4.5 para el Estudio de la versión 4.5', + 'LBL_UPGRADE_STUDIO_TITLE' => 'Estudio de Actualizaciones', + 'LBL_UPGRADE_SYNC_DISC_CLIENT_TITLE' => 'Cliente de Sincronización', + 'LBL_UPGRADE_SYNC_DISC_CLIENT' => 'Sincroniza los archivos del cliente y sus datos en el servidor', + 'LBL_UPGRADE_TEAM_CREATE' => 'Equipos Creados para -', + 'LBL_UPGRADE_TEAM_EXISTS' => 'El Equipo Ya Existe', + 'LBL_UPGRADE_TEAM_TITLE' => 'Actualizar Equipos', + 'LBL_UPGRADE_TEAMS' => 'Crea equipos para los usuarios', + 'LBL_UPGRADE_TITLE' => 'Reparación', + 'LBL_UPGRADE_VERSION' => 'Actualizando la información de versión', + 'LBL_UPGRADE_WIZARD_TITLE' => 'Asistente de Actualizaciones', + 'LBL_UPGRADE_WIZARD' => 'Descarga e instalación de actualizaciones de Sugar', + 'LBL_UPGRADE' => 'Comprobar y reparar Sugar', + 'LBL_UPLOAD_UPGRADE' => 'Subir una actualización:', + 'LBL_UPTODATE' => 'Tiene la última versión disponible', + 'LBL_USER_NAME' => 'Nombre de Usuario:', + 'LBL_USERNAME' => 'Nombre de Usuario', + 'LBL_USERS_TITLE' => 'Usuarios', + 'LBL_HISTORY_CONTACTS_EMAILS' => 'History Subpanel', + 'LBL_HISTORY_CONTACTS_EMAILS_DESC' => 'Enable/Disable contacts\' emails in history', + 'LBL_USERS_DESC' => 'Cree, edite, active y desactive usuarios en Sugar. Cree y gestione equipos y roles, incluyendo el aceso a nivel de módulo y campo.', + 'LBL_UW_BTN_BACK_TO_MOD_LOADER' => 'Volver a Cargador de Módulos', + 'LBL_UW_BTN_BACK_TO_UW' => 'Volver al Asistente de Actualizaciones', + 'LBL_UW_BTN_DELETE_PACKAGE' => 'Eliminar Paquete', + 'LBL_UW_BTN_DOWNLOAD' => 'Descargar', + 'LBL_UW_BTN_INSTALL' => 'Instalar', + 'LBL_UW_BTN_UPLOAD' => 'Subir', + 'LBL_UW_CHECK_ALL' => 'Marcar Todo', + 'LBL_UW_DESC_MODULES_INSTALLED' => 'Los siguientes módulos han sido instalados:', + 'LBL_UW_DESC_MODULES_QUEUED' => 'Los siguientes módulos están listos para ser instalados:', + 'LBL_UW_DISABLE' => 'Deshabilitar', + 'LBL_UW_ENABLE' => 'Habilitar', + 'LBL_UW_FOLLOWING_FILES' => 'Los siguientes archivos fueron', + 'LBL_UW_HIDE_DETAILS' => 'Ocultar Detalles', + 'LBL_UW_INCLUDING' => 'Incluyendo', + 'LBL_UW_MODULE_READY_DISABLE' => 'El módulo está listo para ser deshabilitado.', + 'LBL_UW_MODULE_READY_ENABLE' => 'El módulo está listo para ser habilitado.', + 'LBL_UW_LANGPACK_READY_DISABLE' => 'El paquete de idioma está listo para ser deshabilitado.', + 'LBL_UW_LANGPACK_READY_ENABLE' => 'El paquete de idioma está listo para ser habilitado.', + 'LBL_UW_MODULE_READY_UNISTALL' => 'El módulo está listo para ser desinstalado.', + 'LBL_UW_LANGPACK_READY_UNISTALL' => 'El paquete de idioma está listo para ser desinstalado.', + 'LBL_UW_MODULE_READY' => 'El módulo está listo para ser instalado.', + 'LBL_UW_LANGPACK_READY' => 'El paquete de idioma está listo para ser instalado.', + 'LBL_UW_NO_FILES_SELECTED' => 'No se han seleccionado archivos para ser', + 'LBL_UW_NO_INSTALLED_UPGRADES' => 'No hay actualizaciones registradas.
', + 'LBL_UW_NONE' => 'Nada', + 'LBL_UW_NOT_AVAILABLE' => 'No Disponible', + 'LBL_UW_OP_MODE' => 'Modo de operación:', + 'LBL_UW_PACKAGE_REMOVED' => 'ha sido quitado.
', + 'LBL_UW_PATCH_READY' => '

Listo para Instalar

', + 'LBL_UW_UNINSTALL_READY' => '

Listo para Desinstalar

', + 'LBL_UW_DISABLE_READY' => '

Listo para Deshabilitar

', + 'LBL_UW_ENABLE_READY' => '

Listo para Habilitar

', + 'LBL_UW_SHOW_DETAILS' => 'Mostrar Detalles', + 'LBL_UW_SUCCESSFUL' => 'Exitoso', + 'LBL_UW_SUCCESSFULLY' => 'Con éxito', + 'LBL_UW_UNINSTALL' => 'Desinstalar', + 'LBL_UW_UPGRADE_SUCCESSFUL' => 'Actualización aplicada con éxito!
', + 'LBL_UW_UPLOAD_MODULE' => 'Módulo', + 'LBL_UW_TYPE_FULL' => 'Actualización Completa', + 'LBL_UW_TYPE_LANGPACK' => 'Paquete de Idioma', + 'LBL_UW_TYPE_MODULE' => 'Módulo', + 'LBL_UW_TYPE_PATCH' => 'Parche', + 'LBL_UW_TYPE_THEME' => 'Tema', + 'LBL_UW_MODE_INSTALL' => 'Instalado', + 'LBL_UW_MODE_UNINSTALL' => 'Desinstalado', + 'LBL_UW_MODE_DISABLE' => 'Deshabilitado', + 'LBL_UW_MODE_ENABLE' => 'Habilitado', + 'LBL_UW_UPLOAD_SUCCESS' => 'ha sido subido.
', + 'LBL_VALIDATION_FAIL_DATE' => 'Última validación fallida:', + 'LBL_VALIDATION_FILE' => 'Archivo de Clave de Validación', + 'LBL_VALIDATION_SUCCESS_DATE' => 'Última validación exitosa:', + 'LBL_VISIBLE_PANELS' => 'Subpaneles Visibles', + 'LBL_VISIBLE_TABS' => 'Pestañas Visibles', + 'LBL_WORKFLOW_DESC' => 'Administrar condiciones de workflow, alertas y acciones', + 'LBL_WORKFLOW_TITLE' => 'Administración de Workflow', + 'LBL_WORKBENCH' => 'Banco de trabajo', + 'LBL_WORKBENCH_DESC' => 'Personalizar la aplicación y crear nuevos módulos.', + 'LNK_DISABLE' => 'Desactivar', + 'LNK_ENABLE' => 'Activar', + 'LNK_FORGOT_PASS' => '¿Ha olvidado su contraseña?', + 'LNK_NEW_ACCOUNT' => 'Crear una cuenta', + 'LNK_NEW_PRODUCT' => 'Crear Producto', + 'LNK_NEW_TEAM' => 'Crear Equipo', + 'LNK_NEW_USER' => 'Nuevo Usuario', + 'LNK_REPAIR_CUSTOM_FIELD' => 'Reparar Campos Personalizados', + 'LNK_SELECT_CUSTOM_FIELD' => 'Seleccionar Campo Personalizado', + 'LNK_NEW_PORTAL_USER' => 'Crear Nuevo Usuario de Portal', + 'LNK_NEW_GROUP_USER' => 'Crear Nuevo Usuario del Grupo', + 'MI_LBL_DISABLE_DEPEDENCIES' => 'Este módulo no puede ser deshabilitado ya que hay otros módulos que dependen de él.', + 'MI_REDIRECT_TO_UPGRADE_WIZARD' => 'Al seleccionar este parche será redireccionado al Asistente de Actualizaciones para realizar las comprobaciones del sistema necesarias. ¿Desea continuar?', + 'ML_DESC_DOCUMENTATION' => 'Haga clic en un nodo del árbol para ver los detalles y documentació asociados.', + 'ML_LBL_DETAIILS' => 'Detalles', + 'ML_LBL_DO_NOT_REMOVE_TABLES' => 'No Quitar Tablas', + 'ML_LBL_DOCUMENTATION' => 'Documentación', + 'ML_LBL_INSTALL_FROM_LOCAL' => 'Instalar desde archivo local', + 'ML_LBL_INSTALL_FROM_SERVER' => 'Instalar desde Sugar', + 'ML_LBL_OVERWRITE_FILES' => 'Los siguientes archivos han cambiado desde su última utilización de este módulo. ¿Qué desea hacer?', + 'ML_LBL_REMOVE_TABLES' => 'Quitar Tablas', + 'ML_LBL_REVIEWS' => 'Críticas', + 'ML_LBL_SCREENSHOTS' => 'Capturas de pantalla', + 'MSG_CONFIG_FILE_READY_FOR_REBUILD' => 'El archivo config.php está listo para su reconstrucción.', + 'MSG_CONFIG_FILE_REBUILD_FAILED' => 'El archivo config.php no ha podido ser reconstruido.', + 'MSG_CONFIG_FILE_REBUILD_SUCCESS' => 'El archivo config.php ha sido reconstruido con éxito.', + 'MSG_INCREASE_UPLOAD_MAX_FILESIZE' => 'Aviso: Su configuración de PHP debe ser cambiada para permitir la subida de archivos de al menos 6MB. Por favor, modifique el valor de upload_max_filesize en su php.ini localizado en:', + 'MSG_MAKE_CONFIG_FILE_WRITABLE' => 'Por favor, de permisos de escritura a config.php e inténtelo de nuevo.', + 'MSG_REBUILD_EXTENSIONS' => 'Por favor, vaya a la pantalla de Reparación y haga clic en Reconstruir Extensiones.', + 'MSG_REBUILD_RELATIONSHIPS' => 'Por favor, vaya a la pantalla de Reparación y haga clic en Reconstruir Relaciones.', + 'NO_ENABLED_OFFLINE_CLIENTS' => 'Actualmente no hay Clientes Desconectados habilitados.', + 'NTC_DISABLE_OFFLINE_CLIENT_ALERT' => '¿Está seguro de que desea deshabilitar este Cliente Desconectado?', + 'NTC_ENABLE_OFFLINE_CLIENT_ALERT' => '¿Está seguro de que desea habilitar este Cliente Desconectado?', + 'NTC_OC_NOT_AVAILABLE' => 'No Disponible', + 'NTC_OC_RESERVED' => 'Reservado', + 'REMOVE_QUESTION' => '¿Está seguro de que desea quitar el paquete seleccionado?', + 'WARN_POSSIBLE_JS_OVERWRITE' => 'Aviso, esto sobrescribirá cualquier cambio que haya realizado a los archivos de javascript, ¿quiere continuar?', + 'WARN_INSTALLER_LOCKED' => 'Aviso: Para salvaguardar sus datos, el instalador debe estar bloqueado estableciendo 'installer_locked' a 'true' en el archivo config.php.', + 'WARN_LICENSE_EXPIRED' => 'Aviso: Su licencia caduca en', + 'WARN_LICENSE_EXPIRED2' => 'días(s). Por favor, vaya a "Administración de Licencias" en la pantalla de Administración.', + 'WARN_LICENSE_SEATS' => 'Aviso: Licencias de usuario excedidas por', + 'WARN_LICENSE_SEATS2' => '. Por favor, vaya a "Administración de Licencias" en la pantalla de Administración.', + 'WARN_LICENSE_SEATS_MAXED' => 'Aviso: El número de usuarios activos ha alcanzado el máximo número de licencias permitidas:', + 'WARN_LICENSE_SEATS_EDIT_USER' => 'Aviso: El número de usuarios activos ha alcanzado el máximo número de licencias permitidas', + 'WARN_LICENSE_SEATS_USER_CREATE' => 'Aviso: El número de usuarios activos permitidos por su licencia es igual al número de usuarios activos en el sistema. No podrá crear usuarios activos adicionales.', + 'WARN_REPAIR_CONFIG' => 'Aviso: El archivo config.php necesita ser reparado. Por favor, use el enlace "Repair" en la pantalla Administración para reparar su archivo de configuración.', + 'WARN_UPGRADE_APP' => 'Hay disponible una versión actualizada de la aplicación.', + 'WARN_UPGRADE' => 'Aviso: Por favor, actualice', + 'WARN_UPGRADENOTE' => 'Nota:', + 'WARN_UPGRADE2' => 'utilizando la actualización en el panel de administración', + 'WARN_VALIDATION_EXPIRED' => 'Aviso: Su clave de validación caduca en', + 'WARN_VALIDATION_EXPIRED2' => 'día(s). Por favor, vaya a "License Management" en la pantalla de Administración.', + 'WARN_NO_SMTP_SERVER_AVAILABLE_ERROR' => 'Nota: Para el envío de asignaciones de registros, es necesario configurar un servidor de SMTP en la Configuración de Email.', + 'LBL_MODULEBUILDER' => 'Constructor de Módulos', + 'LBL_MODULEBUILDER_DESC' => 'Construye nuevos módulos para extender la funcionalidad de Sugar', + 'LBL_SUGARPORTAL' => 'Sugar Portal', + 'LBL_SUGARPORTAL_DESC' => 'Administra Sugar Portal', + 'LBL_CLEAR_TEMPLATE_DATA_CACHE_DESC' => 'Quita los archivos de plantillas en caché', + 'LBL_CLEAR_TEMPLATE_DATA_CACHE_TITLE' => 'Limpia la Caché de Datos de Plantillas', + 'LBL_CLEAR_VARDEFS_DATA_CACHE_TITLE' => 'Limpia la Caché de Datos de Vardefs', + 'LBL_CLEAR_VARDEFS_DATA_CACHE_DESC' => 'Quita las vardefs del caché', + 'LBL_CLEAR_UNIFIED_SEARCH_CACHE_TITLE' => 'Limpia la Caché Unificada de Búsquedas', + 'LBL_CLEAR_UNIFIED_SEARCH_CACHE_DESC' => 'Quita el archivo unified_search_modules.php de la caché', + 'LBL_QUICK_REPAIR_AND_REBUILD' => 'Reparación y Reconstrucción Rápida', + 'LBL_QUICK_REPAIR_TITLE' => 'Por favor, seleccione los Módulos a reparar:', + 'LBL_FAILED_CONNECTION' => 'Error en conexión:', + 'LBL_QUICK_REPAIR_AND_REBUILD_DESC' => 'Repara y reconstruye la Base de Datos, Extensiones, Vardefs, Sugar Dashlets, etc.', + 'LBL_ALL_MODULES' => 'Todos los Módulos', + 'LBL_CAMPAIGN_CONFIG_TITLE' => 'Configuración de Email para Campañas', + 'LBL_CAMPAIGN_CONFIG_DESC' => 'Configurar opciones de Email para Campañas.', + 'LBL_REPAIR_ORACLE_FULLTEXT' => 'Reconstruye los índices de texto completo', + 'LBL_REPAIR_ORACLE_FULLTEXT_DESC' => 'Provoca una reconstrucción de los índices de texto completo. Los propietarios de Oracle 9i deberían ejecutar este proceso frecuentemente.', + 'LBL_REPAIR' => 'Reparar', + 'LBL_QR_CBOX_DATAB' => 'Reparar Base de datos', + 'LBL_QR_CBOX_CLEARTPL' => 'Eliminar Archivos .tpl', + 'LBL_QR_CBOX_CLEARJS' => 'Eliminar Archivos JavaScript', + 'LBL_QR_CBOX_CLEARVARDEFS' => 'Eliminar Vardefs', + 'LBL_QR_CBOX_CLEARJSLANG' => 'Eliminar Archivos de Idioma JavaScript', + 'LBL_QR_CBOX_CLEARDASHLET' => 'Eliminar Datos de Caché de Dashlets', + 'LBL_QR_CBOX_REBUILDAUDIT' => 'Reconstruir Tablas de Auditoría', + 'LBL_QR_CBOX_REBUILDEXT' => 'Reconstruir Extensiones', + 'LBL_QR_CBOX_CLEARLANG' => 'Eliminar Archivos de Idioma', + 'LBL_QR_CBOX_CLEARSEARCH' => 'Limpiar Caché Unificada de Búsqueda', + 'LBL_QR_REBUILDEXT' => '

Reconstruyendo Extensiones...

', + 'LBL_QR_CLEARSMARTY' => 'Eliminado plantillas de Smarty de la caché...hecho', + 'LBL_QR_XMLFILES' => 'Eliminando archivos XML de la caché...hecho', + 'LBL_QR_CLEARDASHLET' => 'Eliminando archivos de Sugar Dashlets de la caché...hecho', + 'LBL_QR_CLEARTEMPLATE' => 'Eliminando archivos de Plantilla de la caché...hecho', + 'LBL_QR_CLEARVADEFS' => 'Eliminando Vardefs de la caché...hecho', + 'LBL_QR_CLEARJS' => 'Eliminando archivos JS de la caché...hecho', + 'LBL_QR_CLEARJSLANG' => 'Eliminando archivos de Idioma JS de la caché...hecho', + 'LBL_QR_CLEARLANG' => 'Eliminando archivos de idioma de la caché...hecho', + 'LBL_QR_CLEARSEARCH' => 'Eliminando Caché Unificada de Búsquedas...hecho', + 'LBL_QR_REBUILDAUDIT' => 'Reconstruyendo Tablas de Auditoría...', + 'LBL_QR_CBOX_CLEARSUGARFEEDCACHE' => 'Eliminar Caché de Sugar Feed', + 'LBL_QR_CLEARSUGARFEEDCACHE' => 'Eliminando Caché de Sugar Feed...hecho', + 'LBL_QR_CBOX_CLEARTHEMECACHE' => 'Limpiar Caché de Temas', + 'LBL_QR_CLEARTHEMECACHE' => 'Limpiando Caché de Temas...hecho', + 'LBL_REPAIR_DB_FOR' => 'Reparando Base de Datos para', + 'LBL_QR_CREATING_TABLE' => 'creando tabla', + 'LBL_QR_NOT_AUDIT_ENABLED' => 'Auditoría No Habilitada...
', + 'LBL_FOR' => 'para', + 'LBL_QR_CBOX_CLEARPDFFONT' => 'Limpiar Archivo de Caché de Fuentes PDF', + 'LBL_QR_CLEARPDFFONT' => 'Limpiando Archivo de Caché de Fuentes PDF...hecho', + 'LBL_QR_CLEAR_EXT_API' => 'Borrado de archivos de cache de las API externas...hecho', + 'LBL_REPAIR_SEED_USERS_TITLE' => 'Habilitar/Deshabilitar Usuarios Cabeza de Serie', + 'LBL_REPAIR_SEED_USERS_ACTIVATE' => 'Activar', + 'LBL_REPAIR_SEED_USERS_DECACTIVATE' => 'Desactivar', + 'LBL_REPAIR_SEED_USERS_DESC' => 'Habilitar o deshabilitar de forma rápida usuarios cabeza de serie rellenados durante la instalación de la demo.', + 'LBL_UW_FILES_REMOVED' => 'Los archivos serán eliminados del sistema:
', + 'LBL_TEAM_SETS' => 'Limpiar combinaciones de equipos no usadas.', + 'LBL_MODULE_UPLOAD_DISABLE_HELP_TEXT' => 'Se han deshabilitado nuevas subidas para el Cargador de Módulos. Los módulos instalables están restringidos a los módulos precargados mostrados a continuación.', + 'ML_PACKAGE_SCANNING' => 'Analizando {PACKAGE}', + 'ML_INSTALLATION_FAILED' => '¡La instalación ha fallado!', + 'ML_PACKAGE_NOT_CONFIRM' => 'El paquete que está intentando instalar no cumple con las políticas establecidas en Sugar Open Cloud o por su administrador del sistema.', + 'ML_TO_RESOLVE' => 'Para resolver este problema:', + 'ML_OBTAIN_NEW_PACKAGE' => 'Los clientes de Sugar Open Cloud deben obtener un nuevo paquete de su proveedor que corrija los problemas descritos a continuación.', + 'ML_RELAX_LOCAL' => 'Si está ejecutando Sugar de forma local, puede relajar las restricciones de su Cargador de Módulos para permitir que el paquete sea instalado.', + 'ML_SUGAR_LOADING_POLICY' => 'Las políticas de carga de paquetes de Sugar Open Cloud están detalladas en la', + 'ML_SUGAR_KB' => 'Base de Conocimientos de SugarCRM', + 'ML_SUGAR_DZ' => 'Zona de Desarrolladores de SugarCRM', + 'ML_AVAIL_RESTRICTION' => 'Las restricciones y excepciones disponibles están detalladas en la', + 'ML_OVERRIDE_CORE_FILES' => 'No está permitido reemplazar el núcleo de los archivos de SugarCRM', + 'ML_PATH_MAY_NOT_CONTAIN' => 'La ruta del archivo no puede contener', + 'ML_INVALID_ACTION_IN_MANIFEST' => 'Acción no válida en su manifiesto:', + 'ML_NO_MANIFEST' => 'Este paquete no tiene un manifiesto', + 'ML_INVALID_FUNCTION' => 'Uso no válido de una función', + 'ML_INVALID_METHOD' => 'Uso no válido de un nombre reservado de método', + 'ML_INVALID_EXT' => 'Extensión de archivo no válida', + 'ML_ISSUES' => 'Problemas', + 'ML_MANIFEST_ISSUE' => 'Problema con el manifiesto', + 'ML_CONFIG_OVERRIDE' => 'No está permitido modificar el Config', + 'LBL_ACTIVE_MODULES' => 'Módulos Habilitados', + 'LBL_DISABLED_MODULES' => 'Módulos Deshabilitados', + 'LBL_SAVE_SUCCESS' => '

Cambios Guardados Satisfactoriamente


Ahora será redirigido de vuelta al inicio del área de administración.', + 'LBL_SAVE_FAILED' => 'Fallo al guardar.
Por favor, compruebe sus permisos de archivos', + 'LBL_SAVING' => 'Guardando...', + 'LBL_ACTIVE_THEMES' => 'Temas Habilitados', + 'LBL_DISABLED_THEMES' => 'Temas Deshabilitados', + 'DEFAULT_THEME' => 'Tema predeterminado', + 'LBL_DEFAULT_THEME_IS_DISABLED' => 'El tema por defecto que usted ha elegido está desactivado. Haga clic en "Aceptar" para continuar guardando los cambios temáticos o "Cancelar" para escoger un tema predeterminado diferente.', + 'LBL_ENABLED_LANGS' => 'Idiomas habilitados', + 'LBL_DISABLED_LANGS' => 'Idiomas deshabilitados', + 'LBL_CURRENT_LANGUAGE_CHANGE' => 'Su idioma actual ha sido cambiado al', + 'LBL_DEFAULT_LANGUAGE_CHANGE' => 'El idioma por defecto del sistema ha sido cambiado al', + 'ACLActions' => 'ACLAction', + 'ACLFields' => 'ACLField', + 'ACLRoles' => 'ACLRole', + 'Administration' => 'Administración', + 'Audit' => 'Auditoría', + 'CampaignTrackers' => 'CampaignTracker', + 'Connectors' => 'Conectores', + 'ContractTypes' => 'ContractType', + 'Currencies' => 'Moneda', + 'CustomFields' => 'CustomFields', + 'CustomQueries' => 'CustomQuery', + 'DataSets' => 'DataSet', + 'DocumentRevisions' => 'DocumentRevision', + 'DynamicFields' => 'DynamicField', + 'EditCustomFields' => 'FieldsMetaData', + 'EmailMan' => 'EmailMan', + 'Employees' => 'Empleado', + 'Expressions' => 'Expresión', + 'Feeds' => 'Feed', + 'ForecastOpportunities' => 'ForecastOpportunities', + 'ForecastSchedule' => 'ForecastSchedule', + 'Groups' => 'Grupo', + 'Holidays' => 'Festivo', + 'Import_1' => 'ImportMap', + 'Import_2' => 'UsersLastImport', + 'InboundEmail' => 'InboundEmail', + 'KBContents' => 'KBContent', + 'KBDocumentKBTags' => 'KBDocumentKBTag', + 'KBDocumentRevisions' => 'KBDocumentRevision', + 'KBTags' => 'KBTag', + 'Manufacturers' => 'Manufacturer', + 'ProductBundleNotes' => 'ProductBundleNote', + 'ProductBundles' => 'ProductBundle', + 'ProjectResources' => 'ProjectResource', + 'Relationships' => 'Relationship', + 'Releases' => 'Release', + 'ReportMaker' => 'ReportMaker', + 'Reports_1' => 'SavedReport', + 'Roles' => 'Role', + 'Schedulers' => 'Programador', + 'SchedulersJobs' => 'SchedulersJob', + 'Shippers' => 'Shipper', + 'TaxRates' => 'TaxRate', + 'TeamHierarchies' => 'TeamHierarchy', + 'TeamMemberships' => 'TeamMembership', + 'TeamNotices' => 'TeamNotice', + 'TeamSetModules' => 'TeamSetModule', + 'TeamSets' => 'TeamSet', + 'TimePeriods' => 'TimePeriod', + 'TrackerPerfs' => 'TrackerPerf', + 'TrackerQueries' => 'TrackerQuery', + 'TrackerSessions' => 'TrackerSession', + 'UserPreferences' => 'UserPreference', + 'Versions' => 'Version', + 'WorkFlowActions' => 'WorkFlowAction', + 'WorkFlowActionShells' => 'WorkFlowActionShell', + 'WorkFlowAlerts' => 'WorkFlowAlert', + 'WorkFlowAlertShells' => 'WorkFlowAlertShell', + 'WorkFlowTriggerShells' => 'WorkFlowTriggerShell', + 'Worksheet' => 'Worksheet', + 'LBL_SAML_ENABLE' => 'Habilitar Autenticación SAML', + 'LBL_SAML_HELP_TXT' => 'Cuando la autenticación SAML está habilitada, las contraseñas sólo se gestionan a través de SAML. Ninguna de las opciones de la Gestión de Contraseñas de Sugar tendrá efecto.', + 'LBL_SAML_TITLE' => 'Autenticación SAML', + 'LBL_SAML_CERT' => 'Certificado X509', + 'LBL_SAML_CERT_DESC' => 'Introducir Certificado X509', + 'LBL_SAML_LOGIN_URL' => 'URL de Inicio de Sesión', + 'LBL_SAML_LOGIN_URL_DESC' => 'Introducir URL de Inicio de Sesión', + 'LBL_GLOBAL_SEARCH_SETTINGS_TITLE' => 'Seleccione el módulo(s) sobre los que usuarios podrán realizar la búsqueda usando la búsqueda global.', + 'LBL_SELECT_MODULES' => 'Avanzado', + 'LBL_SELECT_MODULES_TITLE' => 'Arrastrar y soltar para seleccionar los módulos y para cambiar el orden de presentación. Realizar una búsqueda para aplicar los cambios.', + 'LBL_SELECT_FTS_MODULES_TITLE' => 'Arrastrar y soltar para seleccionar los módulos que se utilizarán en la búsqueda global. Haga clic en Guardar para aplicar los cambios.', + 'LBL_EAPM_SETTINGS' => 'Cuentas externas', + 'LBL_EAPM_SETTINGS_DESC' => 'Seleccionar las aplicaciones externas sobre las cuales los usuarios pueden proporcionar información de su cuenta para tener acceso desde el interior de Sugar.', + 'LBL_LANGUAGE_PACKS' => 'Paquetes de Lenguaje', + 'LBL_PATCH_UPGRADES' => 'Patch Upgrades', + 'LBL_ADVANCED_SEARCH' => 'Búsqueda Avanzada', + 'LBL_BASIC_SEARCH' => 'Búsqueda Básica', + 'LBL_PROCESSING' => 'Procesando', + 'LBL_MI_IN_ACTIONVIEWMAP' => 'Instalación de Acción Ver Mapa', + 'LBL_MI_UN_ACTIONVIEWMAP' => 'Desinstalación de Acción Ver Mapa', + 'LBL_OAUTH_TITLE' => 'Claves de OAuth', + 'LBL_OAUTH' => 'OAuth key management', + 'LBL_SNIP_TITLE' => 'Facilidad de Sugar', + 'LBL_SNIP_DESC' => 'Configure el archivo en línea (Facilidad de Sugar)', + 'LBL_CONFIGURE_SNIP' => 'Facilidad de Sugar', + 'LBL_CONFIGURE_SNIP_DESC' => 'Activar/desactivar el servicio de archivado de correo electrónico de Sugar', + 'LBL_SPRITES_NOT_SUPPORTED' => 'Error: No se puede crear sprites ya que la función imagecreatetruecolor no se puede cargar', + 'LBL_SPRITES_CREATING_NAMESPACE' => 'Creando espacio de nombres de sprites {0}', + 'LBL_SPRITES_PROCESSING_DIR' => 'Procesando directorio {0}', + 'LBL_SPRITES_ADDED' => 'Añadido sprite {0}', + 'LBL_SPRITES_EXCLUDING_FILE' => 'Excluyendo archivo: {0}', + 'LBL_FTS_TYPE' => 'Tipo de sistema', + 'LBL_FTS_HOST' => 'Host', + 'LBL_FTS_PORT' => 'Puerto', + 'LBL_FTS_TYPE_HELP' => 'Seleccione el motor que se utilizará para la búsqueda de texto completo. El sistema detecta los motores compatibles y los muestra en la lista. Sugar incluye una función de soporte para el motor elasticsearch.', + 'LBL_FTS_HOST_HELP' => 'El nombre del host donde el motor de búsqueda de texto completo reside.', + 'LBL_FTS_PORT_HELP' => 'El número de puerto donde el motor de búsqueda de texto completo reside.', + 'LBL_AVAILABLE_FTS_MODULES' => 'Seleccione el módulo(s) para la indexación.', + 'LBL_FTS_INDEX_BUTTON' => 'Índice', + 'LBL_DELETE_FTS_DATA' => 'Borrar los datos existentes cuando el índice se lleva a cabo. Sólo los datos en los módulos seleccionados serán indexados.', + 'LBL_CONNECT_STATUS' => 'Estado de la conexión', + 'LBL_FTS_SETTINGS_TITLE' => 'Configuración de búsqueda de texto completo', + 'LBL_FTS_TEST' => 'Prueba', + 'LBL_SAVE_SCHED_BUTTON' => 'Programar índice de todo el sistema', + 'LBL_SAVE_SCHED_WARNING' => '¿Estás seguro?', + 'LBL_FTS_NO_MODULES' => 'Seleccione al menos un módulo de la búsqueda.', + 'LBL_FTS_NO_MODULES_FOR_SCHED' => 'Seleccione al menos un módulo para programar.', + 'LBL_FTS_ADVANCED_LINK' => 'Habilitar los módulos', + 'LBL_FTS_ADVANCED_LINK_HELP' => 'Seleccione el módulo(s) que los usuarios podrán realizar la búsqueda utilizando la Búsqueda de texto completo.', + 'LBL_FTS_CONN_SUCCESS' => 'La conexión se ha establecido satisfactoriamente y que se recomienda la realización de un índice de todo el sistema. Por favor, haga clic en el calendario completo el botón de índice del sistema cuando esté listo.', + 'LBL_FTS_CONN_SUCCESS_SHORT' => 'Una operación de Sistema de Índice completo ha sido programada.', + 'LBL_FTS_CONN_FAILURE_SHORT' => 'No se puede programar una operación de índices.', + 'LBL_FTS_PAGE_DESC' => 'Para habilitar la búsqueda de texto completo, seleccione el motor de búsqueda que se utilizarán y entrar en el host y el puerto del motor de búsqueda. Para finalizar la instalación, conectar con el motor y realizar un índice de todo el sistema.', + 'LBL_FTS_DISABLED' => 'La búsqueda de texto completo ha sido desactivada debido a que el sistema no ha sido capaz de conectarse al motor de búsqueda.', + 'LBL_FTS_CONNECTION_INVALID' => 'Los parámetros del texto completo de la búsqueda que ha introducido no son válidos y pueden ralentizar el rendimiento del sistema. Por favor, actualice la configuración.', + 'MSG_RECONNECT_LOTUSLIVE' => 'Actualmente no se encuentra conectado a IBM SmartCloud. Conéctese al IBM SmartCloud mediante su perfil para poder tener acceso a las reuniones y ficheros de IBM SmartCloud.', + 'LBL_REPAIR_UPLOAD_FOLDER' => 'Remove missed files from upload directory', + 'LBL_REPAIR_UPLOAD_FOLDER_DESC' => 'Please note that removal can take a lot of time', + 'LBL_TOTAL_FILES' => 'Total files', + 'LBL_REMOVED_FILES' => 'Removed files', +); \ No newline at end of file diff --git a/modules/Audit/language/es_es.lang.php b/modules/Audit/language/es_es.lang.php new file mode 100644 index 00000000000..183573ca67d --- /dev/null +++ b/modules/Audit/language/es_es.lang.php @@ -0,0 +1,57 @@ + 'Campo', + 'LBL_OLD_NAME' => 'Valor Anterior', + 'LBL_NEW_VALUE' => 'Valor Nuevo', + 'LBL_CREATED_BY' => 'Cambiado Por', + 'LBL_LIST_DATE' => 'Fecha de Cambio', + 'LBL_AUDITED_FIELDS' => 'Campos auditados en este módulo: ', + 'LBL_NO_AUDITED_FIELDS_TEXT' => 'No hay campos auditados en este módulo', + 'LBL_CHANGE_LOG' => 'Registro de Cambios', +); \ No newline at end of file diff --git a/modules/Bugs/language/es_es.lang.php b/modules/Bugs/language/es_es.lang.php new file mode 100644 index 00000000000..c40c77adbdf --- /dev/null +++ b/modules/Bugs/language/es_es.lang.php @@ -0,0 +1,137 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación:', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación:', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Asignado A:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_NUMBER' => 'Número:', + 'LBL_STATUS' => 'Estado:', + 'LBL_PRIORITY' => 'Prioridad:', + 'LBL_RESOLUTION' => 'Resolución:', + 'LBL_LAST_MODIFIED' => 'Última Modificación', + 'LBL_WORK_LOG' => 'Registro de Actividad:', + 'LBL_CREATED_BY' => 'Creado por:', + 'LBL_DATE_CREATED' => 'Fecha de creación:', + 'LBL_MODIFIED_BY' => 'Modificado por:', + 'LBL_ASSIGNED_USER' => 'Usuario Asignado:', + 'LBL_SYSTEM_ID' => 'ID Sistema', + 'LBL_TYPE' => 'Tipo:', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_MODULE_NAME' => 'Incidencias', + 'LBL_MODULE_TITLE' => 'Seguimiento de Incidencias: Inicio', + 'LBL_MODULE_ID' => 'Incidencias', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Incidencias', + 'LBL_LIST_FORM_TITLE' => 'Lista de Incidencias', + 'LBL_NEW_FORM_TITLE' => 'Nueva Incidencia', + 'LBL_CONTACT_BUG_TITLE' => 'Contacto-Incidencia:', + 'LBL_BUG' => 'Incidencia:', + 'LBL_BUG_NUMBER' => 'Número de Incidencia:', + 'LBL_CONTACT_NAME' => 'Contacto:', + 'LBL_BUG_SUBJECT' => 'Asunto de la Incidencia:', + 'LBL_CONTACT_ROLE' => 'Rol:', + 'LBL_LIST_NUMBER' => 'Núm.', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_PRIORITY' => 'Prioridad', + 'LBL_LIST_RELEASE' => 'Publicación', + 'LBL_LIST_RESOLUTION' => 'Resolución', + 'LBL_LIST_LAST_MODIFIED' => 'Modificado', + 'LBL_INVITEE' => 'Contactos', + 'LBL_LIST_TYPE' => 'Tipo', + 'LBL_RELEASE' => 'Publicación:', + 'LNK_NEW_BUG' => 'Informe de Incidencia', + 'LNK_BUG_LIST' => 'Ver Incidencias', + 'NTC_REMOVE_INVITEE' => '¿Está seguro de que desea quitar este contacto de la incidencia?', + 'NTC_REMOVE_ACCOUNT_CONFIRMATION' => '¿Está seguro de que desea mover esta incidencia fuera de esta cuenta?', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la incidencia.', + 'LBL_LIST_MY_BUGS' => 'Mis Incidencias Asignadas', + 'LNK_IMPORT_BUGS' => 'Importаr Incidencias', + 'LBL_FOUND_IN_RELEASE' => 'Encontrado en Lanzamiento:', + 'LBL_FIXED_IN_RELEASE' => 'Corregido en Lanzamiento:', + 'LBL_LIST_FIXED_IN_RELEASE' => 'Corregido en Lanzamiento', + 'LBL_SOURCE' => 'Fuente:', + 'LBL_PRODUCT_CATEGORY' => 'Categoría:', + 'LBL_DATE_LAST_MODIFIED' => 'Última modificación:', + 'LBL_LIST_EMAIL_ADDRESS' => 'Email', + 'LBL_LIST_CONTACT_NAME' => 'Contacto', + 'LBL_LIST_ACCOUNT_NAME' => 'Cuenta', + 'LBL_LIST_PHONE' => 'Teléfono', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea quitar este contacto de esta incidencia?', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Seguimiento de Incidencias', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_CASES_SUBPANEL_TITLE' => 'Casos', + 'LBL_PROJECTS_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_DOCUMENTS_SUBPANEL_TITLE' => 'Documentos', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_BUG_INFORMATION' => 'Visión General', + 'LBL_FOUND_IN_RELEASE_NAME' => 'Encontrado en la versión', + 'LBL_PORTAL_VIEWABLE' => 'Visible en portal', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID Usuario asignado', + 'LBL_EXPORT_FIXED_IN_RELEASE_NAMR' => 'Fijado en la versión', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificador por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', +); \ No newline at end of file diff --git a/modules/Calendar/language/es_es.lang.php b/modules/Calendar/language/es_es.lang.php new file mode 100644 index 00000000000..f1188559447 --- /dev/null +++ b/modules/Calendar/language/es_es.lang.php @@ -0,0 +1,154 @@ + 'Calendario', + 'LBL_MODULE_TITLE' => 'Calendario', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_APPOINTMENT' => 'Crear Cita', + 'LNK_NEW_TASK' => 'Crear Tarea', + 'LNK_CALL_LIST' => 'Ver Llamadas', + 'LNK_MEETING_LIST' => 'Ver Reuniones', + 'LNK_TASK_LIST' => 'Ver Tareas', + 'LNK_VIEW_CALENDAR' => 'Hoy', + 'LNK_IMPORT_CALLS' => 'Importar Llamadas', + 'LNK_IMPORT_MEETINGS' => 'Importar Reuniones', + 'LNK_IMPORT_TASKS' => 'Importar Tareas', + 'LBL_MONTH' => 'Mes', + 'LBL_DAY' => 'Día', + 'LBL_YEAR' => 'Año', + 'LBL_WEEK' => 'Semana', + 'LBL_PREVIOUS_MONTH' => 'Mes Anterior', + 'LBL_PREVIOUS_DAY' => 'Día Anterior', + 'LBL_PREVIOUS_YEAR' => 'Año Anterior', + 'LBL_PREVIOUS_WEEK' => 'Semana Anterior', + 'LBL_NEXT_MONTH' => 'Mes Siguiente', + 'LBL_NEXT_DAY' => 'Día Siguiente', + 'LBL_NEXT_YEAR' => 'Año Siguiente', + 'LBL_NEXT_WEEK' => 'Semana Siguiente', + 'LBL_AM' => 'AM', + 'LBL_PM' => 'PM', + 'LBL_SCHEDULED' => 'Planificado', + 'LBL_BUSY' => 'Ocupado', + 'LBL_CONFLICT' => 'Conflicto', + 'LBL_USER_CALENDARS' => 'Calendarios de Usuario', + 'LBL_SHARED' => 'Compartido', + 'LBL_PREVIOUS_SHARED' => 'Anterior', + 'LBL_NEXT_SHARED' => 'Siguiente', + 'LBL_SHARED_CAL_TITLE' => 'Calendario Compartido', + 'LBL_USERS' => 'Usuario', + 'LBL_REFRESH' => 'Actualizar', + 'LBL_EDIT_USERLIST' => 'Lista de Usuarios', + 'LBL_SELECT_USERS' => 'Seleccione usuarios para la visualización de calendario', + 'LBL_FILTER_BY_TEAM' => 'Filtrado de usuarios por equipo:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_DATE' => 'Fecha y Hora de Inicio', + 'LBL_CREATE_MEETING' => 'Programar Reunión', + 'LBL_CREATE_CALL' => 'Registrar Llamada', + 'LBL_HOURS_ABBREV' => 'h', + 'LBL_MINS_ABBREV' => 'm', + 'LBL_YES' => 'Sí', + 'LBL_NO' => 'No', + 'LBL_SETTINGS' => 'Configuración', + 'LBL_CREATE_NEW_RECORD' => 'Crear Actividad', + 'LBL_LOADING' => 'Cargando ...', + 'LBL_SAVING' => 'Guardando...', + 'LBL_SENDING_INVITES' => 'Guardando y Enviando invitaciones .....', + 'LBL_CONFIRM_REMOVE' => 'Esta seguro que desea eliminar el registro?', + 'LBL_CONFIRM_REMOVE_ALL_RECURRING' => '¿Está seguro que desea eliminar todos los registros recurrentes?', + 'LBL_EDIT_RECORD' => 'Editar Actividad', + 'LBL_ERROR_SAVING' => 'Error al guardar', + 'LBL_ERROR_LOADING' => 'Error al cargar', + 'LBL_GOTO_DATE' => 'Ir a Fecha', + 'NOTICE_DURATION_TIME' => 'El tiempo de duración debe ser mayor que 0', + 'LBL_STYLE_BASIC' => 'Básico', + 'LBL_STYLE_ADVANCED' => 'Avanzado', + 'LBL_INFO_TITLE' => 'Detalles Adicionales', + 'LBL_INFO_DESC' => 'Descripción', + 'LBL_INFO_START_DT' => 'Fecha de inicio', + 'LBL_INFO_DUE_DT' => 'Fecha de fin', + 'LBL_INFO_DURATION' => 'Duración:', + 'LBL_INFO_NAME' => 'Asunto', + 'LBL_INFO_RELATED_TO' => 'Relacionado con', + 'LBL_NO_USER' => 'Ningún resultado para el campo: Asignado a', + 'LBL_SUBJECT' => 'Asunto', + 'LBL_DURATION' => 'Duración:', + 'LBL_STATUS' => 'Estado', + 'LBL_DATE_TIME' => 'Fecha y hora', + 'LBL_SETTINGS_TITLE' => 'Configuración', + 'LBL_SETTINGS_DISPLAY_TIMESLOTS' => 'Mostrar espacios de tiempo en vistas de día y semana:', + 'LBL_SETTINGS_TIME_STARTS' => 'Hora inicio:', + 'LBL_SETTINGS_TIME_ENDS' => 'Hora fin:', + 'LBL_SETTINGS_CALLS_SHOW' => 'Ver llamadas:', + 'LBL_SETTINGS_TASKS_SHOW' => 'Ver tareas:', + 'LBL_SETTINGS_COMPLETED_SHOW' => 'Mostrar Reuniones, Llamadas y Tareas Hechas:', + 'LBL_SAVE_BUTTON' => 'Guardar', + 'LBL_DELETE_BUTTON' => 'Eliminar', + 'LBL_APPLY_BUTTON' => 'Aplicar', + 'LBL_SEND_INVITES' => 'Guardar y Enviar Invitaciones', + 'LBL_CANCEL_BUTTON' => 'Cancelar', + 'LBL_CLOSE_BUTTON' => 'Cerrar:', + 'LBL_GENERAL_TAB' => 'Detalles', + 'LBL_PARTICIPANTS_TAB' => 'Asistentes', + 'LBL_REPEAT_TAB' => 'Repetir', + 'LBL_REPEAT_TYPE' => 'Repetir', + 'LBL_REPEAT_INTERVAL' => 'Intervalo', + 'LBL_REPEAT_END' => 'Fin', + 'LBL_REPEAT_END_AFTER' => 'Después de', + 'LBL_REPEAT_OCCURRENCES' => 'Ocurrencias', + 'LBL_REPEAT_END_BY' => 'Por', + 'LBL_REPEAT_DOW' => 'En', + 'LBL_REPEAT_UNTIL' => 'Repetir Hasta', + 'LBL_REPEAT_COUNT' => 'Número de ocurrencias', + 'LBL_REPEAT_LIMIT_ERROR' => 'Your request was going to create more than $limit meetings.', + 'LBL_EDIT_ALL_RECURRENCES' => 'Editar todas las recurrencias', + 'LBL_REMOVE_ALL_RECURRENCES' => 'Eliminar todas las recurrencias', + 'LBL_DATE_END_ERROR' => 'La fecha de finalización es antes que la fecha de inicio', + 'ERR_YEAR_BETWEEN' => 'Lo siento, el calendario no dispone del año solicitado
Es necesario que el año sea entre 1970 y 2037', + 'ERR_NEIGHBOR_DATE' => 'get_neighbor_date_str: no definido para esta vista', +); \ No newline at end of file diff --git a/modules/Calls/language/es_es.lang.php b/modules/Calls/language/es_es.lang.php new file mode 100644 index 00000000000..9566df72d24 --- /dev/null +++ b/modules/Calls/language/es_es.lang.php @@ -0,0 +1,170 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'quit', + 'LBL_ASSIGNED_TO_ID' => 'Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_BLANK' => '-vacío-', + 'LBL_MODULE_NAME' => 'Llamadas', + 'LBL_MODULE_TITLE' => 'Llamadas: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Llamadas', + 'LBL_LIST_FORM_TITLE' => 'Lista de Llamadas', + 'LBL_NEW_FORM_TITLE' => 'Crear Cita', + 'LBL_LIST_CLOSE' => 'Cerrar', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_CONTACT' => 'Contacto', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_RELATED_TO_ID' => 'Relacionado con ID', + 'LBL_LIST_DATE' => 'Fecha Inicio', + 'LBL_LIST_TIME' => 'Hora Inicio', + 'LBL_LIST_DURATION' => 'Duración', + 'LBL_LIST_DIRECTION' => 'Dirección', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_REMINDER' => 'Aviso', + 'LBL_CONTACT_NAME' => 'Contacto:', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_STATUS' => 'Estado:', + 'LBL_DIRECTION' => 'Dirección:', + 'LBL_DATE' => 'Fecha Inicio:', + 'LBL_DURATION' => 'Duración:', + 'LBL_DURATION_HOURS' => 'Horas Duración:', + 'LBL_DURATION_MINUTES' => 'Minutos Duración:', + 'LBL_HOURS_MINUTES' => '(horas/minutos)', + 'LBL_CALL' => 'Llamada:', + 'LBL_DATE_TIME' => 'Inicio:', + 'LBL_TIME' => 'Hora inicio:', + 'LBL_HOURS_ABBREV' => 'h', + 'LBL_MINSS_ABBREV' => 'm', + 'LBL_COLON' => ':', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_CALL_LIST' => 'Ver Llamadas', + 'LNK_IMPORT_CALLS' => 'Importar Llamadas', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a eliminar.', + 'NTC_REMOVE_INVITEE' => '¿Está seguro de que desea quitar a este participante de la llamada?', + 'LBL_INVITEE' => 'Participantes', + 'LBL_RELATED_TO' => 'Relacionado con', + 'LNK_NEW_APPOINTMENT' => 'Crear Cita', + 'LBL_SCHEDULING_FORM_TITLE' => 'Planificación', + 'LBL_ADD_INVITEE' => 'Añadir asistentes', + 'LBL_FIRST_NAME' => 'Nombre', + 'LBL_LAST_NAME' => 'Apellido', + 'LBL_EMAIL' => 'Email', + 'LBL_PHONE' => 'Teléfono', + 'LBL_REMINDER_POPUP' => 'Popup', + 'LBL_REMINDER_EMAIL' => 'Email', + 'LBL_REMINDER_EMAIL_ALL_INVITEES' => 'Enviar correo electrónico a todos los asistentes', + 'LBL_EMAIL_REMINDER' => 'Recordatorio por correo electrónico', + 'LBL_EMAIL_REMINDER_TIME' => 'Tiempo de recordatorio por correo electrónico', + 'LBL_SEND_BUTTON_TITLE' => 'Enviar Invitaciones [Alt+I]', + 'LBL_SEND_BUTTON_KEY' => 'I', + 'LBL_SEND_BUTTON_LABEL' => 'Enviar Invitaciones', + 'LBL_DATE_END' => 'Fecha de Fin', + 'LBL_TIME_END' => 'Hora de Fin', + 'LBL_REMINDER_TIME' => 'Hora Aviso', + 'LBL_EMAIL_REMINDER_SENT' => 'Recordatorio por correo electrónico enviado', + 'LBL_SEARCH_BUTTON' => 'Buscar', + 'LBL_ACTIVITIES_REPORTS' => 'Informe de Actividad', + 'LBL_ADD_BUTTON' => 'Añadir', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Llamadas', + 'LBL_LOG_CALL' => 'Registrar Llamada', + 'LNK_SELECT_ACCOUNT' => 'Seleccionar Cuenta', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LBL_DEL' => 'Eliminar', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LBL_OUTLOOK_ID' => 'ID Outlook', + 'LBL_MEMBER_OF' => 'Miembro De', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Notas', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_LIST_MY_CALLS' => 'Mis Llamadas', + 'LBL_SELECT_FROM_DROPDOWN' => 'Por favor, seleccione antes un elemento de la lista desplegable Relacionado Con.', + 'NOTICE_DURATION_TIME' => 'El tiempo de duración debe ser mayor que 0', + 'LBL_CALL_INFORMATION' => 'Visión General', + 'LBL_ACCEPT_STATUS' => 'Aceptar estato', + 'LBL_ACCEPT_LINK' => 'Aceptar Link', + 'LBL_PARENT_ID' => 'ID Padre', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID Usuario Asignado', + 'LBL_EXPORT_DATE_START' => 'Fecha y Hora de Inicio', + 'LBL_EXPORT_PARENT_TYPE' => 'Relacionado con el módulo', + 'LBL_EXPORT_REMINDER_TIME' => 'Tiempo de Recordatorio (en minutos)', + 'LBL_CREATE_INVITEE' => 'Crear una invitación', + 'LBL_CREATE_CONTACT' => 'Nuevo Contacto', + 'LBL_CREATE_LEAD' => 'Nuevo Cliente Potencial', + 'LBL_CREATE_AND_ADD' => 'Crear y Añadir', + 'LBL_CANCEL_CREATE_INVITEE' => 'Cancelar', + 'LBL_EMPTY_SEARCH_RESULT' => 'Lo sentimos, no se encontraron resultados. Por favor cree una invitación abajo.', + 'LBL_NO_ACCESS' => 'No tiene permisos para crear registros en el módulo $module', + 'LBL_REPEAT_TYPE' => 'Repetición', + 'LBL_REPEAT_INTERVAL' => 'Intervalo de repetición', + 'LBL_REPEAT_DOW' => 'Repita el Dow', + 'LBL_REPEAT_UNTIL' => 'Repetir Hasta', + 'LBL_REPEAT_COUNT' => 'Número de repeticiones', + 'LBL_REPEAT_PARENT_ID' => 'Repita el ID principal', + 'LBL_RECURRING_SOURCE' => 'Fuente periódica', + 'LBL_SYNCED_RECURRING_MSG' => 'Esta convocatoria se originó en otro sistema y se sincronizan con el Sugar. Para realizar cambios, vaya a la llamada original en el otro sistema. Los cambios realizados en el otro sistema se puede sincronizar con este registro.', +); \ No newline at end of file diff --git a/modules/CampaignLog/language/es_es.lang.php b/modules/CampaignLog/language/es_es.lang.php new file mode 100644 index 00000000000..a8acb188c8a --- /dev/null +++ b/modules/CampaignLog/language/es_es.lang.php @@ -0,0 +1,102 @@ + 'ID Lista Prospectos', + 'LBL_ID' => 'ID', + 'LBL_TARGET_TRACKER_KEY' => 'Clave de Seguimiento de Objetivo', + 'LBL_TARGET_ID' => 'ID de Objetivo', + 'LBL_TARGET_TYPE' => 'Tipo de Objetivo', + 'LBL_ACTIVITY_TYPE' => 'Tipo de Actividad', + 'LBL_ACTIVITY_DATE' => 'Fecha de Actividad', + 'LBL_RELATED_ID' => 'ID Relacionado', + 'LBL_RELATED_TYPE' => 'Tipo Relacionado', + 'LBL_DELETED' => 'Eliminado', + 'LBL_MODULE_NAME' => 'Registro de Campaña', + 'LBL_LIST_RECIPIENT_EMAIL' => 'Email de Destinatario', + 'LBL_LIST_RECIPIENT_NAME' => 'Nombre de Destinatario', + 'LBL_ARCHIVED' => 'Archivado', + 'LBL_HITS' => 'Aciertos', + 'LBL_CAMPAIGN_NAME' => 'Nombre:', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_NAME' => 'Nombre:', + 'LBL_INVITEE' => 'Contactos', + 'LBL_LIST_CAMPAIGN_NAME' => 'Campaña', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_TYPE' => 'Tipo', + 'LBL_LIST_END_DATE' => 'Fecha de Fin', + 'LBL_DATE_ENTERED' => 'Fecha de Alta', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado Por:', + 'LBL_CREATED' => 'Creado Por:', + 'LBL_TEAM' => 'Equipo:', + 'LBL_ASSIGNED_TO' => 'Asignado A:', + 'LBL_CAMPAIGN_START_DATE' => 'Fecha de Inicio:', + 'LBL_CAMPAIGN_END_DATE' => 'Fecha de Fin:', + 'LBL_CAMPAIGN_STATUS' => 'Estado:', + 'LBL_CAMPAIGN_BUDGET' => 'Presupuesto:', + 'LBL_CAMPAIGN_EXPECTED_COST' => 'Coste Estimado:', + 'LBL_CAMPAIGN_ACTUAL_COST' => 'Coste Real:', + 'LBL_CAMPAIGN_EXPECTED_REVENUE' => 'Ingresos Estimados:', + 'LBL_CAMPAIGN_TYPE' => 'Tipo:', + 'LBL_CAMPAIGN_OBJECTIVE' => 'Objetivo:', + 'LBL_CAMPAIGN_CONTENT' => 'Descripción:', + 'LBL_CREATED_LEAD' => 'Cliente Potencial Creado', + 'LBL_CREATED_CONTACT' => 'Contacto Creado', + 'LBL_CREATED_OPPORTUNITY' => 'Creada una nueva oportunidad', + 'LBL_TARGETED_USER' => 'Usuario Destino', + 'LBL_SENT_EMAIL' => 'Email Enviado', + 'LBL_LIST_FORM_TITLE' => 'Campañas Objetivo', + 'LBL_LIST_ACTIVITY_DATE' => 'Fecha de Actividad', + 'LBL_LIST_CAMPAIGN_OBJECTIVE' => 'Objetivo de la Campaña', + 'LBL_RELATED' => 'Relacionado', + 'LBL_CLICKED_URL_KEY' => 'Clave del URL Visitado', + 'LBL_URL_CLICKED' => 'URL Visitado', + 'LBL_MORE_INFO' => 'Más Información', + 'LBL_CAMPAIGNS' => 'Campañas', + 'LBL_LIST_MARKETING_NAME' => 'Id de Marketing', +); \ No newline at end of file diff --git a/modules/CampaignTrackers/language/es_es.lang.php b/modules/CampaignTrackers/language/es_es.lang.php new file mode 100644 index 00000000000..9e260389959 --- /dev/null +++ b/modules/CampaignTrackers/language/es_es.lang.php @@ -0,0 +1,73 @@ + 'Id', + 'LBL_TRACKER_KEY' => 'Clave de Seguimiento', + 'LBL_TRACKER_URL' => 'URL de Seguimiento', + 'LBL_TRACKER_NAME' => 'Nombre de Seguimiento', + 'LBL_CAMPAIGN_ID' => 'Id Campaña', + 'LBL_DATE_ENTERED' => 'Fecha Creación', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación', + 'LBL_MODIFIED_USER_ID' => 'Modificado por', + 'LBL_CREATED_BY' => 'Creado por', + 'LBL_DELETED' => 'Eliminado', + 'LBL_CAMPAIGN' => 'Campaña', + 'LBL_OPTOUT' => 'Opción de rehusar', + 'LBL_MODULE_NAME' => 'Seguimientos de Campaña', + 'LBL_EDIT_CAMPAIGN_NAME' => 'Nombre de Campaña:', + 'LBL_EDIT_TRACKER_NAME' => 'Nombre de Seguimiento:', + 'LBL_EDIT_TRACKER_URL' => 'URL de Seguimiento:', + 'LBL_SUBPANEL_TRACKER_NAME' => 'Nombre', + 'LBL_SUBPANEL_TRACKER_URL' => 'URL', + 'LBL_SUBPANEL_TRACKER_KEY' => 'Clave', + 'LBL_EDIT_MESSAGE_URL' => 'URL para Mensaje de Campaña:', + 'LBL_EDIT_TRACKER_KEY' => 'Clave de Seguimiento:', + 'LBL_EDIT_OPT_OUT' => '¿Enlace para rehusar?', + 'LNK_CAMPAIGN_LIST' => 'Campañas', + 'LBL_EDIT_LAYOUT' => 'Editar diseño', +); \ No newline at end of file diff --git a/modules/Campaigns/language/es_es.lang.php b/modules/Campaigns/language/es_es.lang.php new file mode 100644 index 00000000000..0b2872714a1 --- /dev/null +++ b/modules/Campaigns/language/es_es.lang.php @@ -0,0 +1,430 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha Creación', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación', + 'LBL_MODIFIED' => 'Modificada por:', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creada por:', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre:', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Usuario Modificado', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'quit', + 'LBL_ASSIGNED_TO_ID' => 'Asignada a:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignada a:', + 'LBL_FROM_ADDR' => 'Dirección del Remitente', + 'LBL_REPLY_ADDR' => 'Dirección de "Responder a":', + 'LBL_REPLY_NAME' => 'Nombre de "Responder a":', + 'LBL_MODULE_NAME' => 'Campañas', + 'LBL_MODULE_TITLE' => 'Campañas: Inicio', + 'LBL_NEWSLETTER_TITLE' => 'Campañas: Boletines de noticias', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Campañas', + 'LBL_LIST_FORM_TITLE' => 'Lista de Campañas', + 'LBL_NEWSLETTER_LIST_FORM_TITLE' => 'Lista de Boletines de noticias', + 'LBL_CAMPAIGN_NAME' => 'Nombre:', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_INVITEE' => 'Contactos', + 'LBL_LIST_CAMPAIGN_NAME' => 'Campaña', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_TYPE' => 'Tipo', + 'LBL_LIST_START_DATE' => 'Fecha Inicio', + 'LBL_LIST_END_DATE' => 'Fecha Fin', + 'LBL_TEAM' => 'Equipo:', + 'LBL_ASSIGNED_TO' => 'Asignada a:', + 'LBL_CAMPAIGN_START_DATE' => 'Fecha Inicio:', + 'LBL_CAMPAIGN_END_DATE' => 'Fecha Fin:', + 'LBL_CAMPAIGN_STATUS' => 'Estado:', + 'LBL_CAMPAIGN_BUDGET' => 'Presupuesto:', + 'LBL_CAMPAIGN_EXPECTED_COST' => 'Coste Esperado:', + 'LBL_CAMPAIGN_ACTUAL_COST' => 'Coste Real:', + 'LBL_CAMPAIGN_EXPECTED_REVENUE' => 'Ingresos Esperados:', + 'LBL_CAMPAIGN_IMPRESSIONS' => 'Impresiones:', + 'LBL_CAMPAIGN_COST_PER_IMPRESSION' => 'Coste Por Impresión:', + 'LBL_CAMPAIGN_COST_PER_CLICK_THROUGH' => 'Coste Por Clic en Banner:', + 'LBL_CAMPAIGN_OPPORTUNITIES_WON' => 'Oportunidades Ganadas:', + 'LBL_CAMPAIGN_TYPE' => 'Tipo:', + 'LBL_CAMPAIGN_OBJECTIVE' => 'Objetivo:', + 'LBL_CAMPAIGN_CONTENT' => 'Descripción:', + 'LBL_CAMPAIGN_DAYS_REMAIN' => 'Días Restantes', + 'LBL_CAMPAIGN_INACTIVE_SCHEDULE' => 'Campaña '{0}' está 'Inactiva'. Debería cambiar el estado como 'Activa'.', + 'LNK_NEW_CAMPAIGN' => 'Crear Campaña (Clásica)', + 'LNL_NEW_CAMPAIGN_WIZARD' => 'Creación de Campaña (Asistente)', + 'LNK_CAMPAIGN_LIST' => 'Ver Campañas', + 'LNK_NEW_PROSPECT' => 'Crear Público Objetivo', + 'LNK_PROSPECT_LIST' => 'Ver Público Objetivo', + 'LNK_NEW_PROSPECT_LIST' => 'Crear Lista de Público Objetivo', + 'LNK_PROSPECT_LIST_LIST' => 'Ver Listas de Público Objetivo', + 'LBL_MODIFIED_BY' => 'Modificada por:', + 'LBL_CREATED_BY' => 'Creada por:', + 'LBL_DATE_CREATED' => 'Fecha Creación:', + 'LBL_DATE_LAST_MODIFIED' => 'Fecha Modificación:', + 'LBL_TRACKER_KEY' => 'Seguimiento:', + 'LBL_TRACKER_URL' => 'URL de Seguimiento:', + 'LBL_TRACKER_TEXT' => 'Texto de Enlace de Seguimiento:', + 'LBL_TRACKER_COUNT' => 'Contador de Seguimiento:', + 'LBL_REFER_URL' => 'URL de Redirección de Seguimiento:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Campañas', + 'LBL_EMAIL_CAMPAIGNS_TITLE' => 'Campañas por Email', + 'LBL_NEW_FORM_TITLE' => 'Nueva Campaña', + 'LBL_TRACKED_URLS' => 'URLs de Sequimiento', + 'LBL_TRACKED_URLS_SUBPANEL_TITLE' => 'URLs de Seguimiento', + 'LBL_CAMPAIGN_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_PROSPECT_LIST_SUBPANEL_TITLE' => 'Lista de Público Objetivo', + 'LBL_EMAIL_MARKETING_SUBPANEL_TITLE' => 'Marketing por EMail', + 'LNK_NEW_EMAIL_TEMPLATE' => 'Nueva Plantilla de Email', + 'LNK_EMAIL_TEMPLATE_LIST' => 'Ver Plantillas de Email', + 'LBL_TRACK_BUTTON_TITLE' => 'Ver Estado', + 'LBL_TRACK_BUTTON_KEY' => 'T', + 'LBL_TRACK_BUTTON_LABEL' => 'Ver Estado', + 'LBL_QUEUE_BUTTON_TITLE' => 'Enviar Emails', + 'LBL_QUEUE_BUTTON_KEY' => 'u', + 'LBL_QUEUE_BUTTON_LABEL' => 'Enviar Emails', + 'LBL_TEST_BUTTON_TITLE' => 'Enviar Prueba', + 'LBL_TEST_BUTTON_KEY' => 'e', + 'LBL_TEST_BUTTON_LABEL' => 'Enviar Prueba', + 'LBL_COPY_AND_PASTE_CODE' => 'O copiar y pegar el siguiente código HTML en una página existente', + 'LBL_CHARSET_NOTICE' => 'NOTA: Por favor, asegúrese de que la página que contiene el formulario web-to-lead tiene las siguientes líneas en la sección :', + 'LBL_TODETAIL_BUTTON_TITLE' => 'Ver Detalles', + 'LBL_TODETAIL_BUTTON_KEY' => 'T', + 'LBL_TODETAIL_BUTTON_LABEL' => 'Ver Detalles', + 'LBL_DEFAULT' => 'Todas las Listas de Público Objetivo', + 'LBL_MESSAGE_QUEUE_TITLE' => 'Cola de Mensajes', + 'LBL_LOG_ENTRIES_TITLE' => 'Respuestas', + 'LBL_LOG_ENTRIES_TARGETED_TITLE' => 'Mensaje Enviado/Intentado', + 'LBL_LOG_ENTRIES_SEND_ERROR_TITLE' => 'Mensajes Rebotados,Otras causas', + 'LBL_LOG_ENTRIES_INVALID_EMAIL_TITLE' => 'Mensajes Rebotados,Email no válido', + 'LBL_LOG_ENTRIES_LINK_TITLE' => 'Enlace', + 'LBL_LOG_ENTRIES_VIEWED_TITLE' => 'Mensaje Visto', + 'LBL_LOG_ENTRIES_REMOVED_TITLE' => 'Descartados', + 'LBL_LOG_ENTRIES_LEAD_TITLE' => 'Clientes Portenciales Creados', + 'LBL_CAMPAIGN_LEAD_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_OPPORTUNITY_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_LOG_ENTRIES_CONTACT_TITLE' => 'Contactos Creados', + 'LBL_BACK_TO_CAMPAIGNS' => 'Volver a Campañas', + 'ERR_NO_EMAIL_MARKETING' => 'Debe haber al menos un mensaje de Marketing por Email asociado con la campaña.', + 'ERR_NO_TARGET_LISTS' => 'Debe haber al menos una Lista de Público Objetivo asociada con la campaña.', + 'ERR_NO_TEST_TARGET_LISTS' => 'Debe haber al menos una Lista de Público Objetivo de tipo Pruebas asociada con la campaña.', + 'ERR_SENDING_NOW' => 'Los mensajes están siendo enviados, por favor inténtelo de nuevo más tarde.', + 'ERR_MESS_NOT_FOUND_FOR_LIST' => 'No se ha definido un mensaje de Marketing por Email para esta lista de público objetivo', + 'ERR_MESS_DUPLICATE_FOR_LIST' => 'Se han definido múltiples mensajes de Marketing por Email para esta lista de público objetivo', + 'ERR_FIX_MESSAGES' => 'Por favor, corrija los siguientes errores antes de proceder', + 'LBL_TRACK_DELETE_BUTTON_KEY' => 'D', + 'LBL_TRACK_ROI_BUTTON_LABEL' => 'Ver ROI', + 'LBL_TRACK_DELETE_BUTTON_TITLE' => 'Eliminar Entradas de Pruebas', + 'LBL_TRACK_DELETE_BUTTON_LABEL' => 'Eliminar Entradas de Pruebas', + 'LBL_TRACK_DELETE_CONFIRM' => 'Esta opción eliminará las entradas del registro creadas por el juego de pruebas. ¿Desea continuar?', + 'ERR_NO_MAILBOX' => 'Los siguientes mensajes de marketing no tiene una cuenta de correo asociada.
Por favor, corrija este problema antes de continuar.', + 'LBL_LIST_TO_ACTIVITY' => 'Ver Estado', + 'LBL_CURRENCY_ID' => 'ID Moneda', + 'LBL_CURRENCY' => 'Moneda:', + 'LBL_ROLLOVER_VIEW' => 'Mueva el cursor sobre una barra para más detalles.', + 'LBL_TARGETED' => 'Objetivos', + 'LBL_TOTAL_TARGETED' => 'Total Objetivos', + 'LBL_CAMPAIGN_FREQUENCY' => 'Frecuencia:', + 'LBL_NEWSLETTERS' => 'Ver Boletines de Noticias', + 'LBL_NEWSLETTER' => 'Boletín de Noticias', + 'LBL_NEWSLETTER_FORENTRY' => 'Boletín de Noticias', + 'LBL_MORE_DETAILS' => 'Más Detalles', + 'LBL_CREATE_NEWSLETTER' => 'Nuevo Boletín de Noticias', + 'LBL_STATUS_TEXT' => 'Estado:', + 'LBL_FROM_MAILBOX_NAME' => 'Usar Cuenta de Correo:', + 'LBL_FROM_NAME' => 'Nombre Remitente:', + 'LBL_START_DATE_TIME' => 'Fecha y Hora de Inicio:', + 'LBL_DATE_START' => 'Fecha de Inicio', + 'LBL_TIME_START' => 'Hora de Inicio', + 'LBL_TEMPLATE' => 'Plantilla de Email:', + 'LBL_CREATE_EMAIL_TEMPLATE' => 'Crear', + 'LBL_MESSAGE_FOR' => 'Enviar Este Mensaje A:', + 'LBL_FINISH' => 'Finalizar', + 'LBL_ALL_PROSPECT_LISTS' => 'Todas las Listas de Público Objetivo en la Campaña.', + 'LBL_EDIT_EMAIL_TEMPLATE' => 'Editar', + 'LBL_EMAIL_SETUP_WIZARD' => 'Configurar Email', + 'LBL_DIAGNOSTIC_WIZARD' => 'Ver Diagnósticos', + 'LBL_ALREADY_SUBSCRIBED_HEADER' => 'Boletines de Noticias Suscritos', + 'LBL_UNSUBSCRIBED_HEADER' => 'Boletines de Noticias Disponibles/Sin Suscripción', + 'LBL_UNSUBSCRIBED_HEADER_EXPL' => 'Al mover el boletín de noticias a la lista de Boletines de Noticias Disponibles/Sin Suscripción añadirá el contacto a la Lista de Sin Suscripción para este boletín de noticias. El contacto no será eliminado de la Lista de Suscripción o Lista de Público Objetivo original.', + 'LBL_FILTER_CHART_BY' => 'Filtrar Gráfico Por:', + 'LBL_MANAGE_SUBSCRIPTIONS_TITLE' => 'Administrar Subscripciones', + 'LBL_MARK_AS_SENT' => 'Marcar Como Enviado', + 'LBL_DEFAULT_LIST_NOT_FOUND' => 'Lista de público objetivo por defecto no encontrada', + 'LBL_DEFAULT_LIST_ENTRIES_NOT_FOUND' => 'No se han encontrado entradas', + 'LBL_DEFAULT_LIST_ENTRIES_WERE_PROCESSED' => 'Las entradas han sido procesadas', + 'LBL_EDIT_TRACKER_NAME' => 'Nombre de Seguimiento:', + 'LBL_EDIT_TRACKER_URL' => 'URL de Seguimiento:', + 'LBL_EDIT_OPT_OUT_' => '¿Enlace para rehusar?', + 'LBL_EDIT_OPT_OUT' => 'Enlace para rehusar:', + 'LBL_UNSUBSCRIPTION_LIST_NAME' => 'Nombre de Lista de No suscripción:', + 'LBL_SUBSCRIPTION_LIST_NAME' => 'Nombre de Lista de Suscripción:', + 'LBL_TEST_LIST_NAME' => 'Nombre de Lista de Prueba:', + 'LBL_UNSUBSCRIPTION_TYPE_NAME' => 'No suscripción', + 'LBL_SUBSCRIPTION_TYPE_NAME' => 'Suscripción', + 'LBL_TEST_TYPE_NAME' => 'Pruebas', + 'LBL_UNSUBSCRIPTION_LIST' => 'Lista de No suscripción', + 'LBL_SUBSCRIPTION_LIST' => 'Lista de Suscripción', + 'LBL_MRKT_NAME' => 'Nombre', + 'LBL_TEST_LIST' => 'Lista de Pruebas', + 'LBL_WIZARD_HEADER_MESSAGE' => 'Rellene los campos requerido para ayudar a identificar la campaña.', + 'LBL_WIZARD_BUDGET_MESSAGE' => 'Introduzca el presupuesto para calcular el ROI.', + 'LBL_WIZARD_SUBSCRIPTION_MESSAGE' => 'Cada boletín de noticias debe tener tres listas de público objetivo (Suscripción, No suscripción, y Pruebas). Puede asignar una lista existente de público objetivo. Si no, se creará una lista vacía al guardar el boletín de noticias.', + 'LBL_WIZARD_TARGET_MESSAGE1' => 'Seleccione o cree una lista de público objetivo para utilizar con su campaña. Esta lista se usará para enviar emails con sus mensajes de marketing.', + 'LBL_WIZARD_TARGET_MESSAGE2' => 'O cree una nueva usando el siguiente formulario:', + 'LBL_WIZARD_TRACKER_MESSAGE' => 'Defina aquí un URL de seguimiento para utilizar con esta campaña. Debe introducir tanto el nombre como el URL para crear el seguimiento.', + 'LBL_WIZARD_MARKETING_MESSAGE' => 'Rellene el siguiente formulario para crear una instancia de email para su boletín de noticias. Esto le permitirá especificar cuándo y cómo su boletín de noticias debería ser distribuido.', + 'LBL_WIZARD_SENDMAIL_MESSAGE' => 'Éste es el último paso del proceso. Elija si quiere enviar una prueba, planificar la distribución de su boletín de noticias, o simplemente guardar su trabajo e ir al resumen.', + 'LBL_HOME_START_MESSAGE' => 'Seleccione el tipo de Campaña que desea crear.', + 'LBL_WIZARD_LAST_STEP_MESSAGE' => 'Ya está en el último paso.', + 'LBL_WIZARD_FIRST_STEP_MESSAGE' => 'Ya está en el primer paso.', + 'LBL_WIZ_NEWSLETTER_TITLE_STEP1' => 'Encabezado de la Campaña', + 'LBL_WIZ_NEWSLETTER_TITLE_STEP2' => 'Presupuesto de la Campaña', + 'LBL_WIZ_NEWSLETTER_TITLE_STEP3' => 'URLs de seguimiento de la Campaña', + 'LBL_WIZ_NEWSLETTER_TITLE_STEP4' => 'Información de Suscripción', + 'LBL_WIZ_MARKETING_TITLE' => 'Email de Marketing', + 'LBL_WIZ_SENDMAIL_TITLE' => 'Enviar Email', + 'LBL_WIZ_TEST_EMAIL_TITLE' => 'Probar Email', + 'LBL_WIZ_NEWSLETTER_TITLE_SUMMARY' => 'Resumen', + 'LBL_NAVIGATION_MENU_GEN1' => 'Encabezado de la Campaña', + 'LBL_NAVIGATION_MENU_GEN2' => 'Presupuesto', + 'LBL_NAVIGATION_MENU_TRACKERS' => 'Seguimientos', + 'LBL_NAVIGATION_MENU_MARKETING' => 'Marketing', + 'LBL_NAVIGATION_MENU_SEND_EMAIL' => 'Enviar Email', + 'LBL_NAVIGATION_MENU_SUBSCRIPTIONS' => 'Subscripciones', + 'LBL_NAVIGATION_MENU_SUMMARY' => 'Resumen', + 'LBL_SUBSCRIPTION_TARGET_WIZARD_DESC' => 'Esto definirá la lista de público objetivo de tipo Suscripción para esta campaña.
Esta lista de público objetivo se usará para enviar los emails de esta campaña.
Si no ha preparado previamente una lista, el sistema creará para usted una lista vacía.', + 'LBL_UNSUBSCRIPTION_TARGET_WIZARD_DESC' => 'Esto definirá la lista de público objetivo de tipo No suscripción para esta campaña.
Esta lista de público objetivo contendrá los nombres de las personas que han decidido no participar en su campaña y no deberían ser contactados por email.
Si no ha preparado previamente una lista, el sistema creará para usted una lista vacía.', + 'LBL_TEST_TARGET_WIZARD_DESC' => 'Esto definirá la lista de público objetivo de tipo Pruebas para esta campaña.
Esta lista de público objetivo se usará para enviar emails de pruebas para esta campaña.
Si no ha preparado previamente una lista, el sistema creará para usted una lista vacía.', + 'LBL_TRACKERS' => 'Seguimientos', + 'LBL_ADD_TRACKER' => 'Nuevo Seguimiento', + 'LBL_ADD_TARGET' => 'Añadir', + 'LBL_CREATE_TARGET' => 'Crear', + 'LBL_SELECT_TARGET' => 'Usar Lista de Público Objetivo existente', + 'LBL_CONFIRM' => 'Iniciar', + 'LBL_START' => 'Iniciar', + 'LBL_TOTAL_ENTRIES' => 'Entradas', + 'LBL_CONFIRM_CAMPAIGN_SAVE_CONTINUE' => 'Guardar el trabajo y proceder con el Email de Marketing', + 'LBL_CONFIRM_CAMPAIGN_SAVE_OPTIONS' => 'Guardar Opciones', + 'LBL_CONFIRM_CAMPAIGN_SAVE_EXIT' => '¿Desea guardar toda la información y salir?', + 'LBL_CONFIRM_SEND_SAVE' => 'Está a punto de terminar y proceder con la página de Envío de Email de Campaña. ¿Desea guardar los cambios y continuar?', + 'LBL_NEWSLETTER WIZARD_TITLE' => 'Boletín de noticias:', + 'LBL_NEWSLETTER_WIZARD_START_TITLE' => 'Editar boletín de noticias:', + 'LBL_CAMPAIGN_WIZARD_START_TITLE' => 'Editar Campaña:', + 'LBL_SEND_AS_TEST' => 'Enviar Marketing por Email como Pruebas', + 'LBL_SAVE_EXIT_BUTTON_LABEL' => 'Finalizar', + 'LBL_SAVE_CONTINUE_BUTTON_LABEL' => 'Guardar y Continuar', + 'LBL_TARGET_LISTS' => 'Listas de Público Objetivo', + 'LBL_NO_SUBS_ENTRIES_WARNING' => 'No puede enviar un email de marketing hasta que su lista de suscriptores tenga al menos una entrada. Puede rellenar su lista tras finalizar.', + 'LBL_NO_TARGET_ENTRIES_WARNING' => 'No puede enviar un email de marketing hasta que su lista de público objetivo tenga al menos una entrada. Puede rellenar su lista tras finalizar.', + 'LBL_NO_TARGETS_WARNING' => 'No puede enviar un email de marketing hasta que su campaña tenga al menos una lista de público objetivo.', + 'LBL_NONE' => 'ninguna creada', + 'LBL_CAMPAIGN_WIZARD' => 'Asistente de Campañas', + 'LBL_EMAIL' => 'Email', + 'LBL_OTHER_TYPE_CAMPAIGN' => 'Campaña no basada en email', + 'LBL_CHOOSE_CAMPAIGN_TYPE' => 'Tipo de Campaña', + 'LBL_TARGET_LIST' => 'Lista de Público Objetivo', + 'LBL_TARGET_TYPE' => 'Tipo de Lista de Público Objetivo', + 'LBL_TARGET_NAME' => 'Nombre de Lista de Público Objetivo', + 'LBL_EMAILS_SCHEDULED' => 'Emails Planificados', + 'LBL_TEST_EMAILS_SENT' => 'Probar Emails Enviados', + 'LBL_USERS_CANNOT_OPTOUT' => 'Los Usuarios de Sistema no pueden optar por no recibir emails.', + 'LBL_ELECTED_TO_OPTOUT' => 'Ha elegido optar por no recibir emails.', + 'LBL_COPY_OF' => 'Copia de', + 'LBL_SAVED_SEARCH' => 'Búsquedas y Diseños Guardados', + 'LBL_WIZ_FROM_NAME' => 'Nombre del Remitente:', + 'LBL_WIZ_FROM_ADDRESS' => 'Dirección del Remitente:', + 'LBL_EMAILS_PER_RUN' => 'Número de emails enviados por lote:', + 'LBL_CUSTOM_LOCATION' => 'Definida por el Usuario', + 'LBL_DEFAULT_LOCATION' => 'Por Defecto', + 'ERR_INT_ONLY_EMAIL_PER_RUN' => 'Sólo se permiten valores enteros para el Número de emails enviados por lote', + 'LBL_LOCATION_TRACK' => 'Localización de los archivos de seguimiento de la campaña (como campaign_tracker.php):', + 'LBL_MAIL_SENDTYPE' => 'Agente de Transferencia de Correo (MTA):', + 'LBL_MAIL_SMTPAUTH_REQ' => '¿Utilizar Autenticación SMTP?', + 'LBL_MAIL_SMTPPASS' => 'Contraseña SMTP:', + 'LBL_MAIL_SMTPPORT' => 'Puerto SMTP', + 'LBL_MAIL_SMTPSERVER' => 'Servidor SMTP', + 'LBL_MAIL_SMTPUSER' => 'Usuario SMTP', + 'LBL_EMAIL_SETUP_WIZARD_TITLE' => 'Configuración de Email para Campañas', + 'TRACKING_ENTRIES_LOCATION_DEFAULT_VALUE' => 'Valor de site_url en Config.php', + 'LBL_NOTIFY_TITLE' => 'Opciones de Notificación por Email', + 'LBL_MASS_MAILING_TITLE' => 'Opciones de Envío de Correo Masivo', + 'LBL_SERVER_TYPE' => 'Protocolo del Servidor de Correo', + 'LBL_SERVER_URL' => 'Dirección del Servidor de Correo', + 'LBL_LOGIN' => 'Nombre de Usuario', + 'LBL_PORT' => 'Puerto del Servidor de Correo', + 'LBL_MAILBOX_NAME' => 'Nombre de Cuenta de Correo:', + 'LBL_PASSWORD' => 'Contraseña', + 'LBL_MAILBOX_DEFAULT' => 'INBOX', + 'LBL_MAILBOX' => 'Carpeta Monitorizada', + 'LBL_NAVIGATION_MENU_SETUP' => 'Configuración de Email', + 'LBL_NAVIGATION_MENU_NEW_MAILBOX' => 'Nueva Cuenta de Correo', + 'LBL_MAILBOX_CHECK_WIZ_GOOD' => 'Se han detectado cuentas de correo con gestión de rebote de correo. No necesita crear una nueva, pero puede hacerlo a continuación si aun así lo desea.', + 'LBL_MAILBOX_CHECK_WIZ_BAD' => 'No se ha detectado ninguna cuenta de correo con gestión de rebote de correo. Por favor, cree una nueva a continuación.', + 'LBL_CAMP_MESSAGE_COPY' => 'Guardar copias de los mensajes de la campaña:', + 'LBL_CAMP_MESSAGE_COPY_DESC' => '¿Desea guardar copias completas de CADA mensaje de email enviado durante todas las campañas? Se recomienda el valor por defecto de no hacerlo. Si elige no, sólo se guardará la plantilla enviada y las variables para recrear el mensaje individual.', + 'LBL_YES' => 'Sí', + 'LBL_NO' => 'No', + 'LBL_DEFAULT_FROM_ADDR' => 'Por defecto:', + 'LBL_EMAIL_SETUP_DESC' => 'Rellene el siguiente formulario para modificar su configuración del sistema de forma que puedan enviarse los emails de la campaña.', + 'LBL_CREATE_MAILBOX' => 'Crear Nueva Cuenta de Correo', + 'LBL_SSL_DESC' => 'Si su servidor de correo soporta conexiones seguras de sockets (SSL), habilitar esta opción forzará conexiones SSL al importar el correo.', + 'LBL_SSL' => 'Usar SSL', + 'LNK_CAMPAIGN_DIGNOSTIC_LINK' => 'La campaña puede no tener el comportamiento deseado y sus emails puede que no sean enviados por las siguientes razones:', + 'LBL_CAMPAIGN_DIAGNOSTICS' => 'Diagnósticos de Campaña', + 'LBL_DIAGNOSTIC' => 'Diagnóstico', + 'LBL_MAILBOX_CHECK1_GOOD' => 'Cuentas de correo con gestión de rebote detectadas:', + 'LBL_MAILBOX_CHECK1_BAD' => 'No se han detectado cuentas de correo con gestión de rebote.', + 'LBL_MAILBOX_CHECK2_GOOD' => 'Las opciones de E-mail han sido configuradas:', + 'LBL_MAILBOX_CHECK2_BAD' => 'Por favor, configure la dirección de email de su sistema. Las opciones de E-mail no han sido configuradas.', + 'LBL_SCHEDULER_CHECK_GOOD' => 'Se han detectado Planificadores', + 'LBL_SCHEDULER_CHECK_BAD' => 'No se han detectado Planificadores', + 'LBL_SCHEDULER_CHECK1_BAD' => 'No se ha configurado el Planificador para procesar los Emails Rebotados de Campaña.', + 'LBL_SCHEDULER_CHECK2_BAD' => 'No se ha configurado el Planificador para procesar los Emails de Campaña.', + 'LBL_SCHEDULER_NAME' => 'Planificador', + 'LBL_SCHEDULER_STATUS' => 'Estado', + 'LBL_MARKETING_CHECK1_GOOD' => 'Se han detectado los componentes de marketing por Email.', + 'LBL_MARKETING_CHECK1_BAD' => 'No Email marketing components detected, you will need to create one to mail out a campaign.', + 'LBL_MARKETING_CHECK2_GOOD' => 'Se han detectado listas de público objetivo.', + 'LBL_MARKETING_CHECK2_BAD' => 'No se han detectado listas de público objetivo, tendrá que crear una de la pantalla de la campaña deseada.', + 'LBL_EMAIL_SETUP_WIZ' => 'Lanzar Configuración de Email', + 'LBL_SCHEDULER_LINK' => 'ir a la pantalla de administración del planificador.', + 'LBL_TO_WIZARD' => 'lanzar', + 'LBL_TO_WIZARD_TITLE' => 'Lanzar Asistente', + 'LBL_EDIT_EXISTING' => 'Editar Campaña', + 'LBL_EDIT_TARGET_LIST' => 'Editar Lista de Público Objetivo', + 'LBL_SEND_EMAIL' => 'Planificar Email', + 'LBL_USE_EXISTING' => 'Utilizar Existente', + 'LBL_CREATE_NEW_MARKETING_EMAIL' => 'Crear Nuevo Email de Marketing', + 'LBL_CHOOSE_NEXT_STEP' => 'Elija su siguiente paso', + 'LBL_NON_ADMIN_ERROR_MSG' => 'Por favor, notifíqueselo a su administrador del sistema para que corrija este problema', + 'LBL_EMAIL_COMPONENTS' => 'Componentes de Email', + 'LBL_SCHEDULER_COMPONENTS' => 'Componentes del Planificador', + 'LBL_RECHECK_BTN' => 'Comprobar de Nuevo', + 'LBL_WEB_TO_LEAD_FORM_TITLE1' => 'Nuevo Formulario de Cliente Potencial: Seleccione campos', + 'LBL_WEB_TO_LEAD_FORM_TITLE2' => 'Nuevo Formulario de Cliente Potencial: Propiedades del formulario', + 'LBL_DRAG_DROP_COLUMNS' => 'Arrastre y suelte los campos del cliente potencial en las columnas 1 y 2', + 'LBL_DEFINE_LEAD_HEADER' => 'Cabecera del Formulario:', + 'LBL_LEAD_DEFAULT_HEADER' => 'Formulario Web a cliente potencial para la Campaña', + 'LBL_DEFINE_LEAD_SUBMIT' => 'Etiqueta del Botón de Envío:', + 'LBL_DEFINE_LEAD_POST_URL' => 'URL de Envío (Post):', + 'LBL_EDIT_LEAD_POST_URL' => '¿Editar URL de Envío (Post)?', + 'LBL_DEFINE_LEAD_REDIRECT_URL' => 'URL de Redirección:', + 'LBL_LEAD_NOTIFY_CAMPAIGN' => 'Campaña Relacionada:', + 'LBL_DEFAULT_LEAD_SUBMIT' => 'Enviar', + 'LBL_WEB_TO_LEAD' => 'Nuevo Formulario de Cliente Potencial', + 'LBL_LEAD_FOOTER' => 'Pie del Formulario:', + 'LBL_CAMPAIGN_NOT_SELECTED' => 'Seleccione y asocie una campaña:', + 'NTC_NO_LEGENDS' => 'Ninguno', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'LBL_SELECT_LEAD_FIELDS' => 'Por favor, seleccione de entre los campos disponibles', + 'LBL_DESCRIPTION_LEAD_FORM' => 'Descripción del Formulario:', + 'LBL_DESCRIPTION_TEXT_LEAD_FORM' => 'Al enviar este formulario se creará un cliente potencial vinculado con la campaña', + 'LBL_DOWNLOAD_TEXT_WEB_TO_LEAD_FORM' => 'Por favor, descargue su formulario Web a Cliente potencial', + 'LBL_DOWNLOAD_WEB_TO_LEAD_FORM' => 'Formulario Web A Cliente Potencial', + 'LBL_PROVIDE_WEB_TO_LEAD_FORM_FIELDS' => 'Por favor, indique todos los campos requeridos', + 'LBL_NOT_VALID_EMAIL_ADDRESS' => 'No es una dirección de correo válida', + 'LBL_AVALAIBLE_FIELDS_HEADER' => 'Campos Disponibles', + 'LBL_LEAD_FORM_FIRST_HEADER' => 'Formulario de Cliente Potencial (Primera Columna)', + 'LBL_LEAD_FORM_SECOND_HEADER' => 'Formulario de Cliente Potencial (Segunda Columna)', + 'LBL_LEAD_MODULE' => 'Clientes Potenciales', + 'LBL_CREATE_WEB_TO_LEAD_FORM' => 'CreateWebToLeadForm', + 'LBL_SELECT_REQUIRED_LEAD_FIELDS' => 'Por favor, seleccione los campos requeridos:', + 'LBL_CAMPAIGN_RETURN_ON_INVESTMENT' => 'Retorno de Inversión de la Campaña', + 'LBL_CAMPAIGN_RESPONSE_BY_RECIPIENT_ACTIVITY' => 'Respuesta a la Campaña por Actividad del Destinatario', + 'LBL_LOG_ENTRIES_BLOCKEDD_TITLE' => 'Excluidos por Dirección de Correo o dominio', + 'LBL_AMOUNT_IN' => 'Cantidad en', + 'LBL_ROI_CHART_REVENUE' => 'Ingresos', + 'LBL_ROI_CHART_INVESTMENT' => 'Inversión', + 'LBL_ROI_CHART_BUDGET' => 'Presupuesto', + 'LBL_ROI_CHART_EXPECTED_REVENUE' => 'Ingresos Esperados', + 'LBL_TOP_CAMPAIGNS' => 'Campañas Principales', + 'LBL_TOP_CAMPAIGNS_NAME' => 'Nombre de Campaña', + 'LBL_TOP_CAMPAIGNS_REVENUE' => 'Ingresos', + 'LBL_TOP_CAMPAIGNS_DESCRIPTION' => 'Campañas con Mejor Rendimiento por Ingreso', + 'LBL_LEADS' => 'Clientes Potenciales', + 'LBL_CONTACTS' => 'Contactos', + 'LBL_ACCOUNTS' => 'Cuentas', + 'LBL_OPPORTUNITIES' => 'Oportunidades', + 'LBL_LOG_ENTRIES' => 'Entradas del Registro', + 'LBL_PROSPECTLISTS_SUBPANEL_TITLE' => 'Lista de Público Objetivo', + 'LBL_EMAILMARKETING_SUBPANEL_TITLE' => 'Email Marketing', + 'LBL_TRACK_QUEUE_SUBPANEL_TITLE' => 'Cola de Seguimiento', + 'LBL_TARGETED_SUBPANEL_TITLE' => 'Objetivos Seleccionados', + 'LBL_VIEWED_SUBPANEL_TITLE' => 'Visto', + 'LBL_LINK_SUBPANEL_TITLE' => 'Enlace', + 'LBL_LEAD_SUBPANEL_TITLE' => 'Cliente Potencial', + 'LBL_CONTACT_SUBPANEL_TITLE' => 'Contacto', + 'LBL_INVALID EMAIL_SUBPANEL_TITLE' => 'Email no Válido', + 'LBL_SEND ERROR_SUBPANEL_TITLE' => 'Error de Envío', + 'LBL_REMOVED_SUBPANEL_TITLE' => 'Eliminado', + 'LBL_BLOCKED_SUBPANEL_TITLE' => 'Bloqueado', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_OPPORTUNITIES_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_IMPORT_PROSPECTS' => 'Importar Público Objetivo', + 'LBL_LEAD_FORM_WIZARD' => 'Asistente de Formularios para Clientes Potenciales', + 'LBL_CAMPAIGN_INFORMATION' => 'Visión General', + 'LBL_MONTH' => 'Mes', + 'LBL_YEAR' => 'Año', + 'LBL_DAY' => 'Día', + 'LBL_EDIT_LAYOUT' => 'Editar diseño', + 'LBL_INVALID' => 'Invalido', + 'LBL_VALID' => 'Válido', + 'LBL_ALERT' => 'Alerta', + 'LBL_EDIT_INLINE' => 'Editar', + 'LBL_DELETE_INLINE' => 'Eliminar', + 'LBL_DELETE' => 'Quitar', + 'LBL_VIEW_INLINE' => 'Ver', + 'ERR_NO_OPTS_SAVED' => 'No se han guardado valores óptimos con su cuenta de correo entrante.', + 'ERR_REVIEW_EMAIL_SETTINGS' => 'Por favor, revise la configuración del correo entrante.', + 'LBL_LEADS_DELETED_SINCE_CREATED' => '{0} clientes potenciales que fueron creadas a través de esta campaña han sido eliminados desde su creación.', +); \ No newline at end of file diff --git a/modules/Cases/language/es_es.lang.php b/modules/Cases/language/es_es.lang.php new file mode 100644 index 00000000000..32e92b4cca3 --- /dev/null +++ b/modules/Cases/language/es_es.lang.php @@ -0,0 +1,147 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación:', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación:', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Usuario Modificado', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Asignado A:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_NUMBER' => 'Número:', + 'LBL_STATUS' => 'Estado:', + 'LBL_PRIORITY' => 'Prioridad:', + 'LBL_RESOLUTION' => 'Resolución:', + 'LBL_LAST_MODIFIED' => 'Última Modificación', + 'LBL_WORK_LOG' => 'Registro de Trabajo', + 'LBL_CREATED_BY' => 'Creado Por:', + 'LBL_DATE_CREATED' => 'Fecha de Creación:', + 'LBL_MODIFIED_BY' => 'Modificado Por:', + 'LBL_ASSIGNED_USER' => 'Usuario Asignado:', + 'LBL_SYSTEM_ID' => 'ID Sistema', + 'LBL_TYPE' => 'Tipo', + 'LBL_SUBJECT' => 'Asunto:', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a eliminar.', + 'LBL_ACCOUNT_ID' => 'ID Cuenta', + 'LBL_ACCOUNT_NAME' => 'Cuenta:', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_ATTACH_NOTE' => 'Adjuntar Nota', + 'LBL_BUGS_SUBPANEL_TITLE' => 'Incidencias', + 'LBL_CASE_NUMBER' => 'Número:', + 'LBL_CASE_SUBJECT' => 'Asunto:', + 'LBL_CASE' => 'Caso:', + 'LBL_CONTACT_CASE_TITLE' => 'Contacto-Caso:', + 'LBL_CONTACT_NAME' => 'Contacto:', + 'LBL_CONTACT_ROLE' => 'Rol:', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Casos', + 'LBL_FILENANE_ATTACHMENT' => 'Archivar Adjunto', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_INVITEE' => 'Contactos', + 'LBL_MEMBER_OF' => 'Cuenta', + 'LBL_MODULE_NAME' => 'Casos', + 'LBL_MODULE_TITLE' => 'Casos: Inicio', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Caso', + 'LBL_PROJECTS_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_DOCUMENTS_SUBPANEL_TITLE' => 'Documentos', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Casos', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_LIST_ACCOUNT_NAME' => 'Cuenta', + 'LBL_LIST_ASSIGNED' => 'Asignado a', + 'LBL_LIST_CLOSE' => 'Cerrar', + 'LBL_LIST_FORM_TITLE' => 'Lista de Casos', + 'LBL_LIST_LAST_MODIFIED' => 'Modificado', + 'LBL_LIST_MY_CASES' => 'Mis Casos Abiertos', + 'LBL_LIST_NUMBER' => 'Núm.', + 'LBL_LIST_PRIORITY' => 'Prioridad', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LNK_CASE_LIST' => 'Ver Casos', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'NTC_REMOVE_FROM_BUG_CONFIRMATION' => '¿Está seguro de que desea quitar este caso de la incidencia?', + 'NTC_REMOVE_INVITEE' => '¿Está seguro de que desea quitar a este contacto de la cuenta?', + 'LBL_LIST_DATE_CREATED' => 'Fecha de Creación', + 'LNK_IMPORT_CASES' => 'Importar Casos', + 'LBL_PROJECT_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_CASE_INFORMATION' => 'Visión General', + 'LBL_MODIFIED_BY_NAME_OWNER' => 'Modificado por nombre propietario', + 'LBL_MODIFIED_BY_NAME_MOD' => 'Modificado por nombre Mod', + 'LBL_CREATED_BY_NAME_OWNER' => 'Creado por nombre propietario', + 'LBL_CREATED_BY_NAME_MOD' => 'Creado por nombre Mod', + 'LBL_ASSIGNED_USER_NAME_OWNER' => 'Propietario del usuario asignado', + 'LBL_ASSIGNED_USER_NAME_MOD' => 'Mod del usuario asignado', + 'LBL_TEAM_COUNT_OWNER' => 'Propietario del número de equipos', + 'LBL_TEAM_COUNT_MOD' => 'Mod de número de equipos', + 'LBL_TEAM_NAME_OWNER' => 'Nombre del propietario del equipo', + 'LBL_TEAM_NAME_MOD' => 'Nombre del Mod del equipo', + 'LBL_ACCOUNT_NAME_OWNER' => 'Propietario de la cuenta', + 'LBL_ACCOUNT_NAME_MOD' => 'Nombre del Mod de la cuenta', + 'LBL_MODIFIED_USER_NAME' => 'Nombre del usuario modificado', + 'LBL_MODIFIED_USER_NAME_OWNER' => 'Propietario del usuario modificado', + 'LBL_MODIFIED_USER_NAME_MOD' => 'Mod del usuario modificado', + 'LBL_PORTAL_VIEWABLE' => 'Visible en portal', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID Usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificador por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_CREATED_BY_NAME' => 'Creado por el usuario', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Asignado al usuario', + 'LBL_EXPORT_TEAM_COUNT' => 'Número de equipos', + 'LBL_CONTACT_HISTORY_SUBPANEL_TITLE' => 'Relación de contactos en Emails', +); \ No newline at end of file diff --git a/modules/Charts/language/es_es.lang.php b/modules/Charts/language/es_es.lang.php new file mode 100644 index 00000000000..63d1ee07acf --- /dev/null +++ b/modules/Charts/language/es_es.lang.php @@ -0,0 +1,113 @@ + 'Por favor, cree al menos una Oportunidad para ver sus gráficos.', + 'LBL_ALL_OPPORTUNITIES' => 'El valor total de todas las oportunidades es', + 'LBL_CHART_TYPE' => 'Tipo de Gráfico', + 'LBL_CREATED_ON' => 'Ejecutado por última vez el', + 'LBL_CLOSE_DATE_START' => 'Fecha Estimada de Cierre - Desde:', + 'LBL_CLOSE_DATE_END' => 'Fecha Estimada de Cierre - Hasta:', + 'LBL_DATE_END' => 'Fecha de Fin:', + 'LBL_DATE_RANGE_TO' => 'a', + 'LBL_DATE_RANGE' => 'El rango de fechas es', + 'LBL_DATE_START' => 'Fecha de Inicio:', + 'LBL_EDIT' => 'Editar', + 'LBL_LEAD_SOURCE_BY_OUTCOME_DESC' => 'Muestra las cantidades acumuladas de oportunidades por la toma de contacto seleccionada por el resultado para los usuarios seleccionados. El resultado se basa en si el etapa de venta es Ganado, Perdido o cualquier otro valor.', + 'LBL_LEAD_SOURCE_BY_OUTCOME' => 'Todas las Oportunidades por Toma de Contacto por Resultado', + 'LBL_LEAD_SOURCE_FORM_DESC' => 'Muestra las cantidades acumuladas de oportunidades por la toma de contacto seleccionada por los usuarios seleccionados.', + 'LBL_LEAD_SOURCE_FORM_TITLE' => 'Todas las oportunidades por Toma de Contacto', + 'LBL_LEAD_SOURCE_OTHER' => 'Otro', + 'LBL_LEAD_SOURCES' => 'Toma de Contacto:', + 'LBL_MODULE_NAME' => 'Cuadro de Mando', + 'LBL_MODULE_TITLE' => 'Cuadro de Mando: Inicio', + 'LBL_MONTH_BY_OUTCOME_DESC' => 'Muestra las cantidades acumuladas de oportunidades por mes y por resultado para los usuarios seleccionados donde la fecha estimada de cierre está dentro del rango de fechas especificado. El resultado se basa en si el etapa de venta es Ganado, Perdido o cualquier otro valor.', + 'LBL_NUMBER_OF_OPPS' => 'Número de Oportunidades', + 'LBL_OPP_SIZE' => 'Valor de la oportunidad en', + 'LBL_OPP_THOUSANDS' => 'K', + 'LBL_OPPS_IN_LEAD_SOURCE' => 'oportunidades donde la toma de contacto es', + 'LBL_OPPS_IN_STAGE' => 'en donde la etapa de venta es', + 'LBL_OPPS_OUTCOME' => 'donde el resultado es', + 'LBL_OPPS_WORTH' => 'valor total de oportunidades', + 'LBL_PIPELINE_FORM_TITLE_DESC' => 'Muestra las cantidades acumuladas por los etapas de venta seleccionados para sus oportunidades donde la fecha de cierre esperada está dentro del rango de fechas especificado.', + 'LBL_CAMPAIGN_ROI_TITLE_DESC' => 'Muestra la respuesta a la campaña por retorno de inversión.', + 'LBL_REFRESH' => 'Actualizar', + 'LBL_ROLLOVER_DETAILS' => 'Mueva el cursor sobre una barra para más detalles.', + 'LBL_ROLLOVER_WEDGE_DETAILS' => 'Mueva el cursor sobre una sección para más detalles.', + 'LBL_SALES_STAGE_FORM_DESC' => 'Muestra las cantidades acumuladas de oportunidades por los etapas de venta seleccionados para los usuarios seleccionados donde la fecha estimada de cierre está dentro del rango de fechas especificado.', + 'LBL_SALES_STAGE_FORM_TITLE' => 'Embudo por etapa de venta', + 'LBL_SALES_STAGES' => 'Etapas de venta:', + 'LBL_TOTAL_PIPELINE' => 'Total en pipeline', + 'LBL_USERS' => 'Usuarios:', + 'LBL_YEAR_BY_OUTCOME' => 'Embudo por Mes por Resultado', + 'LBL_YEAR' => 'Año:', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LNK_NEW_ISSUE' => 'Informe de Incidencia', + 'LNK_NEW_LEAD' => 'Nuevo Cliente Potencial', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_NOTE' => 'Nueva Nota o Adjunto', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_NEW_QUOTE' => 'Nuevo Presupuesto', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'NTC_NO_LEGENDS' => 'Ninguno', + 'LBL_TITLE' => 'Título', + 'LBL_MY_MODULES_USED_SIZE' => 'Número de Accesos', + 'LBL_CHART_ACTION' => 'Action', + 'LBL_CHART_PIPELINE_BY_SALES_STAGE' => 'Pipeline by Sales Stage', + 'LBL_CHART_LEAD_SOURCE_BY_OUTCOME' => 'Lead Source By Outcome', + 'LBL_CHART_OUTCOME_BY_MONTH' => 'Outcome by Month', + 'LBL_CHART_PIPELINE_BY_LEAD_SOURCE' => 'Pipeline By Lead Source', + 'LBL_CHART_MY_PIPELINE_BY_SALES_STAGE' => 'My Pipeline by Sales Stage', + 'LBL_CHART_PIPELINE_BY_SALES_STAGE_FUNNEL' => 'Pipeline by Sales Stage Funnel', + 'LBL_CHART_OPPORTUNITIES_THIS_QUARTER' => 'Opportunities this Quarter', + 'LBL_CHART_MY_MODULES_USED_30_DAYS' => 'My Modules Used (Last 30 Days)', + 'LBL_CHART_MODULES_USED_DIRECT_REPORTS_30_DAYS' => 'Modules Used By My Direct Reports (Last 30 Days)', + 'LBL_CHART_DCE_ACTIONS_MONTH' => 'DCE Actions By Types (Current Month)', +); \ No newline at end of file diff --git a/modules/Configurator/language/es_es.lang.php b/modules/Configurator/language/es_es.lang.php new file mode 100644 index 00000000000..0997ca5498d --- /dev/null +++ b/modules/Configurator/language/es_es.lang.php @@ -0,0 +1,355 @@ + 'Avanzado', + 'DEFAULT_CURRENCY_ISO4217' => 'Código de moneda ISO 4217', + 'DEFAULT_CURRENCY_NAME' => 'Nombre de moneda', + 'DEFAULT_CURRENCY_SYMBOL' => 'Símbolo de moneda', + 'DEFAULT_CURRENCY' => 'Moneda predeterminada', + 'DEFAULT_DATE_FORMAT' => 'Formato de fecha predeterminado', + 'DEFAULT_DECIMAL_SEP' => 'Símbolo decimal', + 'DEFAULT_LANGUAGE' => 'Idioma predeterminado', + 'DEFAULT_NUMBER_GROUPING_SEP' => 'Separador de miles', + 'DEFAULT_SYSTEM_SETTINGS' => 'Interfaz de Usuario', + 'DEFAULT_THEME' => 'Tema predeterminado', + 'DEFAULT_TIME_FORMAT' => 'Formato de hora predeterminado', + 'DISPLAY_RESPONSE_TIME' => 'Mostrar los tiempos de respuesta del servidor', + 'IMAGES' => 'Logos', + 'LBL_ADMIN_WIZARD' => 'Asistente de Administración', + 'LBL_ALLOW_USER_TABS' => 'Permitir a los usuarios ocultar pestañas', + 'LBL_CONFIGURE_SETTINGS_TITLE' => 'Configuración del Sistema', + 'LBL_ENABLE_MAILMERGE' => '¿Habilitar combinar correspondencia?', + 'LBL_LOGVIEW' => 'Configuración de Registro', + 'LBL_MAIL_SMTPAUTH_REQ' => '¿Usar Autenticación SMTP?', + 'LBL_MAIL_SMTPPASS' => 'Contraseña SMTP:', + 'LBL_MAIL_SMTPPORT' => 'Puerto SMTP:', + 'LBL_MAIL_SMTPSERVER' => 'Servidor SMTP:', + 'LBL_MAIL_SMTPUSER' => 'Usuario SMTP:', + 'LBL_MAIL_SMTPTYPE' => 'Tipo de Servidor SMTP:', + 'LBL_MAIL_SMTP_SETTINGS' => 'Especificación de Servidor SMTP', + 'LBL_CHOOSE_EMAIL_PROVIDER' => 'Elija su proveedor de Email:', + 'LBL_YAHOOMAIL_SMTPPASS' => 'Contraseña de Yahoo! Mail:', + 'LBL_YAHOOMAIL_SMTPUSER' => 'ID de Yahoo! Mail:', + 'LBL_GMAIL_SMTPPASS' => 'Contraseña de Gmail:', + 'LBL_GMAIL_SMTPUSER' => 'Dirección de Email de Gmail:', + 'LBL_EXCHANGE_SMTPPASS' => 'Contraseña de Exchange:', + 'LBL_EXCHANGE_SMTPUSER' => 'Nombre de usuario de Exchange:', + 'LBL_EXCHANGE_SMTPPORT' => 'Puerto de Servidor Exchange:', + 'LBL_EXCHANGE_SMTPSERVER' => 'Servidor Exchange:', + 'LBL_ALLOW_DEFAULT_SELECTION' => 'Permitir a los usuarios usar esta cuenta para correo saliente:', + 'LBL_ALLOW_DEFAULT_SELECTION_HELP' => 'Cuando esta opción está seleccionada, todos los usuarios podrán enviar correos usando la misma cuenta de correo saliente para el envío de notificaciones del sistema y alertas. Si la opción no está seleccionada, los usuarios pueden usar el servidor de correo saliente tras proporcionar la información de su propia cuenta.', + 'LBL_MAILMERGE_DESC' => 'Esta opción debería marcarse sólo si tiene el complemento Sugar para Microsoft® Word®.', + 'LBL_MAILMERGE' => 'Combinar Correspondencia', + 'LBL_MIN_AUTO_REFRESH_INTERVAL' => 'Intervalo minimo de actualización del Dashlet', + 'LBL_MIN_AUTO_REFRESH_INTERVAL_HELP' => 'Este es el valor mínimo que uno puede elegir para la actualización automática de los dashlets. Ajustar a 'No' desactiva que se actualicen automáticamente los dashlets.', + 'LBL_MODULE_FAVICON' => 'Mostrar el icono del módulo como un favicon', + 'LBL_MODULE_FAVICON_HELP' => 'Si está visitando un módulo con icono, utiliza el icono del módulo como favicon, en lugar del favicon del tema, en la pestaña del navegador.', + 'LBL_MODULE_NAME' => 'Configuración del Sistema', + 'LBL_MODULE_ID' => 'Configurador', + 'LBL_MODULE_TITLE' => 'Interfaz de Usuario', + 'LBL_NOTIFY_FROMADDRESS' => 'Dirección "De":', + 'LBL_NOTIFY_SUBJECT' => 'Asunto de correo:', + 'LBL_PORTAL_ON_DESC' => 'Permite a los usuarios administrar información del portal de usuario relativa a los registros de los contactos. Los usuarios del Portal pueden acceder a Casos, Incidencias, artículos de la Base de Conocimiento y otros datos a través de la aplicación de Portal Sugar.', + 'LBL_PORTAL_ON' => 'Habilitar Administración de Portal de Usuario', + 'LBL_PORTAL_TITLE' => 'Portal de Autoservicio para el Cliente', + 'LBL_PROXY_AUTH' => '¿Autenticación?', + 'LBL_PROXY_HOST' => 'Servidor Proxy', + 'LBL_PROXY_ON_DESC' => 'Configura la dirección del servidor proxy y la configuración de la autenticación', + 'LBL_PROXY_ON' => '¿Utilizar servidor proxy?', + 'LBL_PROXY_PASSWORD' => 'Contraseña', + 'LBL_PROXY_PORT' => 'Puerto', + 'LBL_PROXY_TITLE' => 'Configuración del Proxy', + 'LBL_PROXY_USERNAME' => 'Nombre de Usuario', + 'LBL_RESTORE_BUTTON_LABEL' => 'Restaurar', + 'LBL_SYSTEM_SETTINGS' => 'Configuración del Sistema', + 'LBL_SKYPEOUT_ON_DESC' => 'Permite a los usuarios hacer clic en los números de teléfono para realizar llamadas utilizando SkypeOut®. Los números deben de estar formateados debidamente para utilizar esta funcionalidad. El número debe tener el formato: "+" "Código País" "Número", como +34 965 555 555. Para más información, vea el FAQ de Skype en FAQ de Skype®', + 'LBL_SKYPEOUT_ON' => 'Permitir integración con SkypeOut®', + 'LBL_SKYPEOUT_TITLE' => 'SkypeOut®', + 'LBL_USE_REAL_NAMES' => 'Show Nombre Completo', + 'LBL_USE_REAL_NAMES_DESC' => 'Mostrar el nombre completo de los usuarios en lugar de sus Nombres de Usuario en los campos de asignación.', + 'LBL_DISALBE_CONVERT_LEAD' => 'Desactivar la acción de convertir clientes potenciales para clientes potenciales convertidos.', + 'LBL_DISALBE_CONVERT_LEAD_DESC' => 'Si un cliente potencial se ha convertido ya, lo que permite esta opción, eliminar la acción principal de conversión.', + 'LBL_ENABLE_ACTION_MENU' => 'Mostrar acciones dentro de los menús', + 'LBL_ENABLE_ACTION_MENU_DESC' => 'Seleccione para mostrar la Vista de Detalle y el subpanel de acciones dentro de un menú desplegable. Si no se selecciona, las acciones se mostrarán como botones independientes.', + 'LIST_ENTRIES_PER_LISTVIEW' => 'Elementos por página para listas', + 'LIST_ENTRIES_PER_SUBPANEL' => 'Elementos por página para subpaneles', + 'LOG_MEMORY_USAGE' => 'Registrar utilización de memoria', + 'LOG_SLOW_QUERIES' => 'Registrar consultas lentas', + 'LOCK_HOMEPAGE_HELP' => 'Esta opción sirve para prevenir
1) la creación de nuevas páginas de inicio y dashlets en el módulo Inicio, y
2) la personalización de la ubicación del dashlet en las páginas de inicio usando arrastrar y soltar.', + 'CURRENT_LOGO' => 'Logo Actual:', + 'CURRENT_LOGO_HELP' => 'Este logo se muestra en la esquina superior izquierda de la aplicación Sugar.', + 'NEW_LOGO' => 'Seleccionar Logo:', + 'NEW_LOGO_HELP' => 'El formato de archivo de la imagen puede ser .png o .jpg.
El tamaño recomendado es de 212x40 puntos.', + 'NEW_LOGO_HELP_NO_SPACE' => 'El formato del archivo de imagen puede ser tanto .png como .jpg. La altura máxima es 17px, y la anchura máxima es 450px. Cualquier imagen cargada que se sobrepase en alguna de las medidas será modificada al tamaño indicado, según la medida que exceda. El nombre del archivo de imagen no puede contener un carácter espacio.', + 'NEW_QUOTE_LOGO' => 'Subir nuevo logo para Presupuestos', + 'NEW_QUOTE_LOGO_HELP' => 'El formato de archivo de la imagen requerido es .jpg.
El tamaño recomendado es de 867x74 puntos.', + 'QUOTES_CURRENT_LOGO' => 'Logo para Presupuestos', + 'SLOW_QUERY_TIME_MSEC' => 'Tiempo umbral para consultas lentas (ms)', + 'STACK_TRACE_ERRORS' => 'Mostrar traza de la pila de errores', + 'UPLOAD_MAX_SIZE' => 'Tamaño máximo para subida de archivos', + 'VERIFY_CLIENT_IP' => 'Validar dirección IP del usuario', + 'LOCK_HOMEPAGE' => 'No permitir el diseño personalizado de la Página de Inicio', + 'LOCK_SUBPANELS' => 'No permitir el diseño personalizado de subpaneles', + 'MAX_DASHLETS' => 'Máximo número de Sugar Dashlets en la Página de Inicio', + 'SYSTEM_NAME' => 'Nombre del Sistema:', + 'SYSTEM_NAME_WIZARD' => 'Nombre:', + 'SYSTEM_NAME_HELP' => 'Éste es el nombre mostrado en la barra de título de su navegador.', + 'LBL_LDAP_TITLE' => 'Soporte de Autenticación LDAP', + 'LBL_LDAP_ENABLE' => 'Habilitar LDAP', + 'LBL_LDAP_SERVER_HOSTNAME' => 'Servidor:', + 'LBL_LDAP_SERVER_PORT' => 'Número de Puerto:', + 'LBL_LDAP_ADMIN_USER' => 'Nombre de Usuario:', + 'LBL_LDAP_ADMIN_USER_DESC' => 'Utilizado para buscar el usuario Sugar. [Es posible que tenga que ser totalmente calificado] La conexión será anónima si no se provee.', + 'LBL_LDAP_ADMIN_PASSWORD' => 'Contraseña:', + 'LBL_LDAP_AUTHENTICATION' => 'Autenticación:', + 'LBL_LDAP_AUTHENTICATION_DESC' => 'Conectarse al servidor LDAP utilizando credenciales de usuarios específicos', + 'LBL_LDAP_AUTO_CREATE_USERS' => 'Crear Usuarios Automáticamente:', + 'LBL_LDAP_USER_DN' => 'DN de Usuario:', + 'LBL_LDAP_GROUP_DN' => 'DN de Grupo:', + 'LBL_LDAP_GROUP_DN_DESC' => 'Ejemplo: ou=grupos,dc=ejemplo,dc=com', + 'LBL_LDAP_USER_FILTER' => 'Filtro de Usuarios:', + 'LBL_LDAP_GROUP_MEMBERSHIP' => 'Pertenencia a Grupos:', + 'LBL_LDAP_GROUP_MEMBERSHIP_DESC' => 'Los usuarios deben de ser miembros de un grupo específico', + 'LBL_LDAP_GROUP_USER_ATTR' => 'Atributo de Usuario:', + 'LBL_LDAP_GROUP_USER_ATTR_DESC' => 'El identificador único de una persona que será utilizado para comprobar si son miembros del grupo. Ejemplo: uid', + 'LBL_LDAP_GROUP_ATTR_DESC' => 'El atributo del Grupo será utilizado como filtro sobre el Atributo de Usuario. Ejemplo: memberUid', + 'LBL_LDAP_GROUP_ATTR' => 'Atributo de Grupo:', + 'LBL_LDAP_USER_FILTER_DESC' => 'Cualquier parámetro de filtrado adicional a aplicar a la hora de autenticar usuarios. Por ejemplo:\\nis_sugar_user=1 o (is_sugar_user=1)(is_sales=1)', + 'LBL_LDAP_LOGIN_ATTRIBUTE' => 'Atributo de Inicio de Sesión:', + 'LBL_LDAP_BIND_ATTRIBUTE' => 'Atributo de Conexión (Bind):', + 'LBL_LDAP_BIND_ATTRIBUTE_DESC' => 'Para conectarse con el Usuario LDAP
Ejemplos: AD: userPrincipalName, openLDAP: userPrincipalName, Mac OS X: uid', + 'LBL_LDAP_LOGIN_ATTRIBUTE_DESC' => 'Para buscar al Usuario LDAP
Ejemplos:AD: userPrincipalName, openLDAP: dn, Mac OS X: dn', + 'LBL_LDAP_SERVER_HOSTNAME_DESC' => 'Ejemplo: ldap.example.com o ldaps://ldap.example.com cuando se usa SSL', + 'LBL_LDAP_SERVER_PORT_DESC' => 'Ejemplo: 389 o 636 cuando se usa SSL', + 'LBL_LDAP_GROUP_NAME' => 'Nombre de Grupo:', + 'LBL_LDAP_GROUP_NAME_DESC' => 'Ejemplo: cn=sugarcrm', + 'LBL_LDAP_USER_DN_DESC' => 'Ejemplo: ou=gente,dc=ejemplo,dc=com', + 'LBL_LDAP_AUTO_CREATE_USERS_DESC' => 'Si un usuario autenticado no existe, se creará uno en Sugar.', + 'LBL_LDAP_ENC_KEY' => 'Clave de Encriptación:', + 'DEVELOPER_MODE' => 'Modo Desarrollador', + 'SHOW_DOWNLOADS_TAB' => 'Visualizar la pestaña de descargas', + 'SHOW_DOWNLOADS_TAB_HELP' => 'Cuando se selecciona, la pestaña de descarga aparecerá en la configuración del usuario y ofrecer a los usuarios el acceso a los plug-ins y otros archivos de Sugar disponibles', + 'LBL_LDAP_ENC_KEY_DESC' => 'Para la autenticación SOAP al usar LDAP.', + 'LDAP_ENC_KEY_NO_FUNC_DESC' => 'La extensión php_mcrypt debe estar habilitada en su archivo php.ini.', + 'LBL_ALL' => 'Todo', + 'LBL_MARK_POINT' => 'Marcar Punto', + 'LBL_NEXT_' => 'Siguiente>>', + 'LBL_REFRESH_FROM_MARK' => 'Actualizar Desde Marca', + 'LBL_SEARCH' => 'Buscar:', + 'LBL_REG_EXP' => 'Exp. Reg.:', + 'LBL_IGNORE_SELF' => 'Ignorar Datos Propios:', + 'LBL_MARKING_WHERE_START_LOGGING' => 'Marcando Desde Donde Iniciar la Traza', + 'LBL_DISPLAYING_LOG' => 'Mostrando Traza', + 'LBL_YOUR_PROCESS_ID' => 'Su ID de proceso', + 'LBL_YOUR_IP_ADDRESS' => 'Su Dirección IP es', + 'LBL_IT_WILL_BE_IGNORED' => 'Será ignorado', + 'LBL_LOG_NOT_CHANGED' => 'La traza no ha cambiado', + 'LBL_ALERT_JPG_IMAGE' => 'El formato de archivo de la imagen debe ser JPEG. Suba un nuevo archivo cuya extensión sea .jpg.', + 'LBL_ALERT_TYPE_IMAGE' => 'El formato de archivo de la imagen debe ser JPEG o PNG. Suba un nuevo archivo cuya extensión sea .jpg o .png.', + 'LBL_ALERT_SIZE_RATIO' => 'La relación de aspecto de la imagen debería estar entre 1:1 y 10:1. La imagen será redimensionada.', + 'LBL_ALERT_SIZE_RATIO_QUOTES' => 'La relación de aspecto de la imagen debería estar entre 3:1 y 20:1. Suba una nueva imagen con esta proporción.', + 'ERR_ALERT_FILE_UPLOAD' => 'Error al subir la imagen.', + 'LBL_LOGGER' => 'Configuración de Traza', + 'LBL_LOGGER_FILENAME' => 'Nombre de Archivo de Traza', + 'LBL_LOGGER_FILE_EXTENSION' => 'Extensión', + 'LBL_LOGGER_MAX_LOG_SIZE' => 'Tamaño máximo de traza', + 'LBL_LOGGER_DEFAULT_DATE_FORMAT' => 'Formato de fecha por defecto', + 'LBL_LOGGER_LOG_LEVEL' => 'Nivel de Traza', + 'LBL_LEAD_CONV_OPTION' => 'Opciones de conversión del cliente potencial', + 'LEAD_CONV_OPT_HELP' => 'Copiar - Crea y se relaciona con copias de todas las actividades del cliente potencial para los nuevos registros que se han seleccionado por el usuario durante la conversión. Las copias se crean para cada uno de los registros seleccionados .

Mover - Mueve todas las actividades del cliente potencial al nuevo registro que ha seleccionado el usuario durante la conversión.

No hacer nada - No se hace nada con las actividades del cliente potencial durante la conversión. Las actividades continuaran vinculadas solo al cliente potencial.', + 'LBL_CONFIG_AJAX' => 'Configurar la interfaz de usuario AJAX', + 'LBL_CONFIG_AJAX_DESC' => 'Activar o desactivar el uso de la interfaz de usuario AJAX para módulos específicos', + 'LBL_LOGGER_MAX_LOGS' => 'Número máximo de trazas (antes de rotación)', + 'LBL_LOGGER_FILENAME_SUFFIX' => 'Agregar tras el nombre de archivo', + 'LBL_VCAL_PERIOD' => 'Período de Tiempo para Actualizaciones vCal:', + 'LBL_IMPORT_MAX_RECORDS' => 'Importación - Número máximo de registros:', + 'LBL_IMPORT_MAX_RECORDS_HELP' => 'Especificar cuántas filas se permiten dentro de los archivos de importación. Si el número de filas
en un archivo de importación supera este número, el usuario recibirá una alerta. Si no
se introduce un valor se tendra un número ilimitado de filas.', + 'vCAL_HELP' => 'Utilice esta opción para determinar el número de meses de antelación sobre la fecha actual con la que se publica la información relativa al estado de Disponible/Ocupado sobre llamadas y reuniones.
Para desactivar la publicación del estado Disponible/Ocupado, introduzca "0". El mínimo es 1 mes; el máximo 12 meses.', + 'LBL_PDFMODULE_NAME' => 'Configuración PDF', + 'SUGARPDF_BASIC_SETTINGS' => 'Propiedades del Documento', + 'SUGARPDF_ADVANCED_SETTINGS' => 'Configuración Avanzada', + 'SUGARPDF_LOGO_SETTINGS' => 'Imágenes', + 'PDF_CREATOR' => 'Creador del PDF', + 'PDF_CREATOR_INFO' => 'Define el creador del documento.
Normalmente es el nombre de la aplicación que genera el PDF.', + 'PDF_AUTHOR' => 'Autor', + 'PDF_AUTHOR_INFO' => 'El Autor aparece en las propiedades del documento.', + 'PDF_HEADER_LOGO' => 'Para Documentos PDF de Presupuestos', + 'PDF_HEADER_LOGO_INFO' => 'Esta imagen aparece en la Cabecera por defecto de los Documentos PDF de Presupuestos.', + 'PDF_NEW_HEADER_LOGO' => 'Seleccione una Nueva Imagen para los Presupuestos', + 'PDF_NEW_HEADER_LOGO_INFO' => 'El formato de archivo puede ser .jpg o .png. (Sólo .jpg para EZPDF)
El tamaño recomendado es 867x74 px.', + 'PDF_HEADER_LOGO_WIDTH' => 'Anchura de Imagen para Presupuestos', + 'PDF_HEADER_LOGO_WIDTH_INFO' => 'Cambia la escala de la imagen subida que aparece en los Documentos PDF de Presupuestos. (sólo TCPDF)', + 'PDF_SMALL_HEADER_LOGO' => 'Para Documentos PDF de Informes', + 'PDF_SMALL_HEADER_LOGO_INFO' => 'Esta imagen aparece en la Cabecera por defecto de los Documentos PDF de Informes.
Esta imagen también aparece en la esquina superior izquierda de la aplicación Sugar.', + 'PDF_NEW_SMALL_HEADER_LOGO' => 'Seleccione una Nueva Imagen de Presupuestos', + 'PDF_NEW_SMALL_HEADER_LOGO_INFO' => 'El formato de archivo puede ser .jpg o .png. (Sólo .jpg para EZPDF)
El tamaño recomendado es 212x40 px.', + 'PDF_SMALL_HEADER_LOGO_WIDTH' => 'Anchura de Imagen para Informes', + 'PDF_SMALL_HEADER_LOGO_WIDTH_INFO' => 'Cambia la escala de la imagen subida que aparece en los Documentos PDF de Informes. (sólo TCPDF)', + 'PDF_HEADER_STRING' => 'Cadena del Encabezado', + 'PDF_HEADER_STRING_INFO' => 'Cadena de descripción del Encabezado', + 'PDF_HEADER_TITLE' => 'Título de la Cabecera', + 'PDF_HEADER_TITLE_INFO' => 'Cadena a imprimir como título en la cabecera del documento', + 'PDF_FILENAME' => 'Nombre de Archivo Por Defecto', + 'PDF_FILENAME_INFO' => 'Nombre de archivo por defecto para los archivos PDF generados', + 'PDF_TITLE' => 'Título', + 'PDF_TITLE_INFO' => 'El título aparece en las propiedades del documento.', + 'PDF_SUBJECT' => 'Asunto', + 'PDF_SUBJECT_INFO' => 'El Asunto aparece en las propiedades del documento.', + 'PDF_KEYWORDS' => 'Palabra(s) clave', + 'PDF_KEYWORDS_INFO' => 'Asociar Palabras clave con el documento, generalmente en la forma "palabra1 palabra2..."', + 'PDF_COMPRESSION' => 'Compresión', + 'PDF_COMPRESSION_INFO' => 'Activa o desactiva la compresión de página.
Cuando ha sido activada, la represnetación interna de cada página se comprime, llevando a niveles de ratios de compresión de aprox. 2 para el documento resultante.', + 'PDF_JPEG_QUALITY' => 'Calidad JPEG (1-100)', + 'PDF_JPEG_QUALITY_INFO' => 'Establece la calidad de compresión JPEG por defecto (1-100)', + 'PDF_PDF_VERSION' => 'Versión PDF', + 'PDF_PDF_VERSION_INFO' => 'Establece la versión de PDF (consulte la referencia PDF para valores válidos).', + 'PDF_PROTECTION' => 'Protección de Documento', + 'PDF_PROTECTION_INFO' => 'Establece la protección de documento
- copiar: copiar texto e imágenes al portapapeles
- imprimir: imprimir el documento
- modificar: modificar el documento (excepto las anotaciones y formularios)
- anot.-forms.: añadir anotaciones y formularios
Nota: la protección ante la modificación es para gente que posee el producto Acrobat completo.', + 'PDF_USER_PASSWORD' => 'Contraseña de Usuario', + 'PDF_USER_PASSWORD_INFO' => 'Si no establece ninguna contraseña, el documento se abrirá como de costumbre.
Si establece una contraseña de usuario, el visor PDF se la solicitará antes de mostrar el documento.
Si la contraseña maestra es diferente de la de usuario podrá utilizarla para obtener acceso completo.', + 'PDF_OWNER_PASSWORD' => 'Contraseña de Propietario', + 'PDF_OWNER_PASSWORD_INFO' => 'Si no establece ninguna contraseña, el documento se abrirá como de costumbre.
Si establece una contraseña de usuario, el visor PDF se la solicitará antes de mostrar el documento.
Si la contraseña maestra es diferente de la de usuario podrá utilizarla para obtener acceso completo.', + 'PDF_ACL_ACCESS' => 'Control de Acceso', + 'PDF_ACL_ACCESS_INFO' => 'Control de Acceso por defecto para la generación del PDF.', + 'K_CELL_HEIGHT_RATIO' => 'Ratio de Altura de la Celda', + 'K_CELL_HEIGHT_RATIO_INFO' => 'Si la altura de una celda es menor que (Altura de la Fuente x Ratio de Altura de la Celda), entonces se utilizará (Altura de la Fuente x Ratio de Altura de la Celda) como la altura de la celda.
(Altura de la Fuente x Ratio de Altura de la Celda) también se utiliza como la altura de la celda cuando no hay ninguna altura definida.', + 'K_TITLE_MAGNIFICATION' => 'Aumento del Título', + 'K_TITLE_MAGNIFICATION_INFO' => 'Aumento del título respecto al tamaño principal de la fuente.', + 'K_SMALL_RATIO' => 'Coeficiente para Fuentes Pequeñas', + 'K_SMALL_RATIO_INFO' => 'Coeficiente de Reducción para fuentes pequeñas.', + 'HEAD_MAGNIFICATION' => 'Aumento de la Cabecera', + 'HEAD_MAGNIFICATION_INFO' => 'Coeficiente de aumento para títulos.', + 'PDF_IMAGE_SCALE_RATIO' => 'Ratio de escalado de imagen', + 'PDF_IMAGE_SCALE_RATIO_INFO' => 'Ratio utilizado para escalar las imágenes', + 'PDF_UNIT' => 'Unidad', + 'PDF_UNIT_INFO' => 'unidad de medida del documento', + 'PDF_GD_WARNING' => 'No ha instalado la librería GD para PHP. Sin la librería GD, sólo se mostrarán los logos JPEG en los documentos PDF.', + 'ERR_EZPDF_DISABLE' => 'Aviso : La clase EZPDF ha sido deshabilitada en la tabla de configuración y está establecida como la clase para PDF. Por favor, "Guarde" este formulario para establecer TCPDF como la Clase PDF y vuelva en un estado estable.', + 'LBL_IMG_RESIZED' => '(redimensionado para ser mostrado)', + 'LBL_FONTMANAGER_BUTTON' => 'Administrador de Fuentes PDF', + 'LBL_FONTMANAGER_TITLE' => 'Administrador de Fuentes PDF', + 'LBL_FONT_BOLD' => 'Negrita', + 'LBL_FONT_ITALIC' => 'Cursiva', + 'LBL_FONT_BOLDITALIC' => 'Negrita/Cursiva', + 'LBL_FONT_REGULAR' => 'Normal', + 'LBL_FONT_TYPE_CID0' => 'CID-0', + 'LBL_FONT_TYPE_CORE' => 'Core', + 'LBL_FONT_TYPE_TRUETYPE' => 'TrueType', + 'LBL_FONT_TYPE_TYPE1' => 'Type1', + 'LBL_FONT_TYPE_TRUETYPEU' => 'TrueTypeUnicode', + 'LBL_FONT_LIST_NAME' => 'Nombre', + 'LBL_FONT_LIST_FILENAME' => 'Nombre de archivo', + 'LBL_FONT_LIST_TYPE' => 'Tipo', + 'LBL_FONT_LIST_STYLE' => 'Estilo', + 'LBL_FONT_LIST_STYLE_INFO' => 'Estilo de la fuente', + 'LBL_FONT_LIST_ENC' => 'Codificación', + 'LBL_FONT_LIST_EMBEDDED' => 'Incrustado', + 'LBL_FONT_LIST_EMBEDDED_INFO' => 'Marque esta opción para incrustar la fuente en el archivo PDF', + 'LBL_FONT_LIST_CIDINFO' => 'Información CID', + 'LBL_FONT_LIST_CIDINFO_INFO' => 'Ejemplos :
  • Chino Tradicional :
    $enc=\\'UniCNS-UTF16-H\\';
    $cidinfo=array(\\'Registry\\'=>\\'Adobe\\', \\'Ordering\\'=>\\'CNS1\\',\\'Supplement\\'=>0);
    include(\\'include/tcpdf/fonts/uni2cid_ac15.php\\');
  • Chino Simplificado :
    $enc=\\'UniGB-UTF16-H\\';
    $cidinfo=array(\\'Registry\\'=>\\'Adobe\\', \\'Ordering\\'=>\\'GB1\\',\\'Supplement\\'=>2);
    include(\\'include/tcpdf/fonts/uni2cid_ag15.php\\');
  • Coreano :
    $enc=\\'UniKS-UTF16-H\\';
    $cidinfo=array(\\'Registry\\'=>\\'Adobe\\', \\'Ordering\\'=>\\'Korea1\\',\\'Supplement\\'=>0);
    include(\\'include/tcpdf/fonts/uni2cid_ak12.php\\');
  • Japonés :
    $enc=\\'UniJIS-UTF16-H\\';
    $cidinfo=array(\\'Registry\\'=>\\'Adobe\\', \\'Ordering\\'=>\\'Japan1\\',\\'Supplement\\'=>5);
    include(\\'include/tcpdf/fonts/uni2cid_aj16.php\\');
Más ayuda : www.tcpdf.org', + 'LBL_FONT_LIST_FILESIZE' => 'Tamaño de Fuente (KB)', + 'LBL_ADD_FONT' => 'Añadir una fuente', + 'LBL_BACK' => 'Atrás', + 'LBL_REMOVE' => 'quit', + 'LBL_JS_CONFIRM_DELETE_FONT' => '¿Está seguro de que desea eliminar esta fuente?', + 'LBL_ADDFONT_TITLE' => 'Añadir una Fuente PDF', + 'LBL_PDF_PATCH' => 'Parche', + 'LBL_PDF_PATCH_INFO' => 'Modificaciones personalizadas de la codificación. Escriba un array PHP .
Ejemplo :
ISO-8859-1 no contiene el símbolo del euro. Para añadirlo en la posición 164, escriba "array(164=>\\'Euro\\')".', + 'LBL_PDF_ENCODING_TABLE' => 'Tabla de Codificación', + 'LBL_PDF_ENCODING_TABLE_INFO' => 'Nombre de la tabla de codificación.
Esta opción es ignorada en Unicode TrueType, Unicode OpenType y fuentes con símbolos.
La codificación define la asociación entre un código (de 0 a 255) y un carácter contenido en la fuente.
Los primeros 128 son fijos y se corresponden con ASCII.', + 'LBL_PDF_FONT_FILE' => 'Archivo de Fuente', + 'LBL_PDF_FONT_FILE_INFO' => 'archivo .ttf o .otf o .pfb', + 'LBL_PDF_METRIC_FILE' => 'Archivo de Métrica', + 'LBL_PDF_METRIC_FILE_INFO' => 'archivo .afm o .ufm', + 'LBL_ADD_FONT_BUTTON' => 'Añadir', + 'JS_ALERT_PDF_WRONG_EXTENSION' => 'Este archivo no tiene una extensión de archivo adecuada.', + 'LBL_PDF_INSTRUCTIONS' => 'Instrucciones', + 'PDF_INSTRUCTIONS_ADD_FONT' => 'Fuentes soportadas por SugarPDF :

  • TrueTypeUnicode (Unicode UTF-8)

  • OpenTypeUnicode

  • TrueType

  • OpenType

  • Type1

  • CID-0




Si elije no incrustar su fuente en el archivo PDF, el archivo PDF generado será más ligero pero se utilizará una fuente de sustitución si la fuente no está disponible en el sistema de su lector.



Para añadir una fuente PDF a SugarCRM es necesario seguir los pasos 1 y 2 de la documentación de Fuentes TCPDF disponible en la sección "DOCS" del sitio web TCPDF.


Las utilidades pfm2afm y ttf2ufm están disponibles en la carpeta fonts/utils del paquete TCPDF que puede descargar en la sección "DOWNLOAD" del sitio web TCPDF.


Cargue el archivo de métricas generado en el paso 2 y su archivo de fuentes indicado a continuación.', + 'ERR_MISSING_CIDINFO' => 'El campo Información CID Information no puede estar vacío.', + 'LBL_ADDFONTRESULT_TITLE' => 'Resultado del proceso de adición de fuente', + 'LBL_STATUS_FONT_SUCCESS' => 'ÉXITO : La fuente ha sido añadida a SugarCRM.', + 'LBL_STATUS_FONT_ERROR' => 'ERROR : La fuente no ha sido añadida. Mire en el siguiente registro.', + 'LBL_FONT_MOVE_DEFFILE' => 'Mover el archivo de definición de Fuente a :', + 'LBL_FONT_MOVE_FILE' => 'Mover el archivo de fuente a :', + 'ERR_LOADFONTFILE' => 'ERROR: error en LoadFontFile!', + 'ERR_FONT_EMPTYFILE' => 'ERROR: Nombre de archivo vacío!', + 'ERR_FONT_UNKNOW_TYPE' => 'ERROR: Tipo de fuente desconocido:', + 'ERR_DELETE_CORE_FILE' => 'ERROR: No es posible eliminar una fuente principal del sistema.', + 'ERR_NO_FONT_PATH' => 'ERROR: La ruta de la fuente no está disponible!', + 'ERR_NO_CUSTOM_FONT_PATH' => 'ERROR: La ruta de la fuente personalizada no está disponible!', + 'ERR_FONT_NOT_WRITABLE' => 'no tiene permisos de escritura.', + 'ERR_FONT_FILE_DO_NOT_EXIST' => 'no existe o no es un directorio.', + 'ERR_FONT_MAKEFONT' => 'ERROR: error en MakeFont', + 'ERR_FONT_ALREADY_EXIST' => 'ERROR : Esta fuente ya existe. Volver a estado anterior...', + 'ERR_PDF_NO_UPLOAD' => 'Error durante la subida del archivo de fuente o de métricas.', + 'LBL_WIZARD_TITLE' => 'Asistente de Administración', + 'LBL_WIZARD_WELCOME_TAB' => 'Bienvenido', + 'LBL_WIZARD_WELCOME_TITLE' => '¡Bienvenido a Sugar!', + 'LBL_WIZARD_WELCOME' => 'Haga clic en Siguiente para establecer una imagen de marca, localizar y configurar Sugar ahora. Si desea configurar Sugar más tarde, haga clic en Saltar.', + 'LBL_WIZARD_NEXT_BUTTON' => 'Siguiente >', + 'LBL_WIZARD_BACK_BUTTON' => '< Anterior', + 'LBL_WIZARD_SKIP_BUTTON' => 'Saltar', + 'LBL_WIZARD_FINISH_BUTTON' => 'Finalizar', + 'LBL_WIZARD_CONTINUE_BUTTON' => 'Continuar', + 'LBL_WIZARD_FINISH_TAB' => 'Finalizar', + 'LBL_WIZARD_FINISH_TITLE' => 'La configuración básica del sistema ha sido completada', + 'LBL_WIZARD_FINISH' => 'Haga clic en Continuar para configurar sus opciones de usuario.


Para configurar opciones adicionales del sistema, haga clic aquí.', + 'LBL_WIZARD_SYSTEM_TITLE' => 'Imagen de marca', + 'LBL_WIZARD_SYSTEM_DESC' => 'Proporcione el nombre y logo de su organización para establecer la imagen de su marca en Sugar.', + 'LBL_WIZARD_LOCALE_DESC' => 'Especifique cómo desea que los datos sean mostrados en Sugar, basándose en su ubicación geográfica. La configuración que proporcione aquí será la utiliza por defecto. Los usuarios podrán establecer sus propias preferencias.', + 'LBL_WIZARD_SMTP_DESC' => 'Proporcione la cuenta de correo que se utilizará para enviar correos, como las notificaciones de asignación y las contraseñas de nuevos usuarios. Los usuarios recibirán correos de Sugar, como si hubieran sido enviados desde la cuenta de correo especificada.', + 'LBL_MOBILE_MOD_REPORTS_RESTRICTION' => '* El módulo de Informes sólo está disponible para el cliente de iPhone Sugar Mobile.', + 'LBL_GMAIL_LOGO' => 'Gmail Logo', + 'LBL_YAHOO_MAIL' => 'Yahoo Mail', + 'LBL_EXCHANGE_LOGO' => 'Exchange', + 'LBL_LOADING' => 'Cargando ...', + 'LBL_DELETE' => 'Eliminar', + 'LBL_WELCOME' => 'Bienvenido', + 'LBL_LOGO' => 'Logo', + 'LBL_ENABLE_HISTORY_CONTACTS_EMAILS' => 'Show related contacts\' emails in History subpanel for modules', +); \ No newline at end of file diff --git a/modules/Connectors/language/es_es.lang.php b/modules/Connectors/language/es_es.lang.php new file mode 100644 index 00000000000..008f0ab818a --- /dev/null +++ b/modules/Connectors/language/es_es.lang.php @@ -0,0 +1,127 @@ + 'Agregar', + 'LBL_ADDRCITY' => 'Ciudad', + 'LBL_ADDRCOUNTRY' => 'País', + 'LBL_ADDRCOUNTRY_ID' => 'Id País', + 'LBL_ADDRSTATEPROV' => 'Estado/Provincia', + 'LBL_ADMINISTRATION' => 'Administración de Conectores', + 'LBL_ADMINISTRATION_MAIN' => 'Configuración de Conectores', + 'LBL_AVAILABLE' => 'Disponible', + 'LBL_BACK' => '< Atrás', + 'LBL_COMPANY_ID' => 'Id Compañía', + 'LBL_CONFIRM_CONTINUE_SAVE' => 'Algunos campos requeridos se han dejado en blanco. ¿Desea continuar y guardar los cambios?', + 'LBL_CONNECTOR' => 'Conector', + 'LBL_CONNECTOR_FIELDS' => 'Campos del Conector', + 'LBL_DATA' => 'Datos', + 'LBL_DEFAULT' => 'Por Defecto', + 'LBL_DELETE_MAPPING_ENTRY' => '¿Está seguro de que desea eliminar esta entrada?', + 'LBL_DISABLED' => 'Deshabilitado', + 'LBL_DUNS' => 'DUNS', + 'LBL_EMPTY_BEANS' => 'No se ha encontrado ninguna ocurrencia para sus criterios de búsqueda.', + 'LBL_ENABLED' => 'Habilitado', + 'LBL_EXTERNAL' => 'Permiten a los usuarios crear registros en cuentas externas.', + 'LBL_EXTERNAL_SET_PROPERTIES' => 'Para poder usar este conector, las propiedades del conector también se debe definir en la página de configuración.', + 'LBL_FINSALES' => 'Ventas Anuales', + 'LBL_MARKET_CAP' => 'Cap. Bursátil', + 'LBL_MERGE' => 'Combinar', + 'LBL_MODIFY_DISPLAY_TITLE' => 'Habilitar Conectores', + 'LBL_MODIFY_DISPLAY_DESC' => 'Seleccione qué módulos están habilitados para cada conector.', + 'LBL_MODIFY_DISPLAY_PAGE_TITLE' => 'Configuración de Conectores: Habilitar Conectores', + 'LBL_MODULE_FIELDS' => 'Campos del Módulo', + 'LBL_MODIFY_MAPPING_TITLE' => 'Mapear Campos del Conector', + 'LBL_MODIFY_MAPPING_DESC' => 'Mapear campos del conector a campos del módulo para determinar qué datos del conector pueden ser vistos y combinados junto con los registros del módulo.', + 'LBL_MODIFY_MAPPING_PAGE_TITLE' => 'Configuración de Conectores: Mapear Campos del Conector', + 'LBL_MODIFY_PROPERTIES_TITLE' => 'Establecer Propiedades del Conector', + 'LBL_MODIFY_PROPERTIES_DESC' => 'Configurar las propiedades de cada conector, incluyendo los URLs y las claves del API.', + 'LBL_MODIFY_PROPERTIES_PAGE_TITLE' => 'Configuración de Conectores: Establecer las Propiedades del Conector', + 'LBL_MODIFY_SEARCH_TITLE' => 'Administrar Búsqueda de Conectores', + 'LBL_MODIFY_SEARCH' => 'Búsqueda', + 'LBL_MODIFY_SEARCH_DESC' => 'Seleccione los campos del conector a utilizar para la búsqueda de datos de cada módulo.', + 'LBL_MODIFY_SEARCH_PAGE_TITLE' => 'Configuración de Conectores: Administrar Búsqueda de Conectores', + 'LBL_MODULE_NAME' => 'Conectores', + 'LBL_NO_PROPERTIES' => 'No hay propiedades configurables para este conector.', + 'LBL_PARENT_DUNS' => 'DUNS Padres', + 'LBL_PREVIOUS' => '< Atrás', + 'LBL_QUOTE' => 'Presupuesto', + 'LBL_RECNAME' => 'Nombre de Compañía', + 'LBL_RESET_TO_DEFAULT' => 'Restablecer valores Por Defecto', + 'LBL_RESET_TO_DEFAULT_CONFIRM' => '¿Está seguro de que desea restablecer la configuración por defecto?', + 'LBL_RESET_BUTTON_TITLE' => 'Restablecer [Alt+R]', + 'LBL_RESULT_LIST' => 'Lista de Datos', + 'LBL_RUN_WIZARD' => 'Ejecutar Asistente', + 'LBL_SAVE' => 'Guardar', + 'LBL_SEARCHING_BUTTON_LABEL' => 'Buscando...', + 'LBL_SHOW_IN_LISTVIEW' => 'Mostrar en Vista de Lista de Combinación', + 'LBL_SMART_COPY' => 'Copia Inteligente', + 'LBL_SUMMARY' => 'Resumen', + 'LBL_STEP1' => 'Buscar y Ver Datos', + 'LBL_STEP2' => 'Combinar Registros con', + 'LBL_TEST_SOURCE' => 'Prueba de Conector', + 'LBL_TEST_SOURCE_FAILED' => 'Error en Prueba', + 'LBL_TEST_SOURCE_RUNNING' => 'Realizando Prueba...', + 'LBL_TEST_SOURCE_SUCCESS' => 'Prueba Exitosa', + 'LBL_TITLE' => 'Combinación de Datos', + 'LBL_ULTIMATE_PARENT_DUNS' => 'DUNS Padre Final', + 'ERROR_RECORD_NOT_SELECTED' => 'Error: Por favor, seleccione un registro de la lista antes de continuar.', + 'ERROR_EMPTY_WRAPPER' => 'Error: Ha sido imposible recuperar la instancia adaptadora (wrapper) para el origen [{$source_id}]', + 'ERROR_EMPTY_SOURCE_ID' => 'Error: El Id de origen no ha sido especificado o está vacío.', + 'ERROR_EMPTY_RECORD_ID' => 'Error: El Id de registro no ha sido especificado o está vacío.', + 'ERROR_NO_ADDITIONAL_DETAIL' => 'Error: No se han encontrado más detalles para el registro.', + 'ERROR_NO_SEARCHDEFS_DEFINED' => 'No se han habilitado módulos para este conector. Seleccione un módulo para este conector en la página Habilitar Conectores.', + 'ERROR_NO_SEARCHDEFS_MAPPED' => 'Error: No hay ningún conector habilitado con campos de búsqueda definidos.', + 'ERROR_NO_SOURCEDEFS_FILE' => 'Error: No se ha encontrado ningún archivo sourcedefs.php.', + 'ERROR_NO_SOURCEDEFS_SPECIFIED' => 'Error: No se han especificado orígenes desde los que obtener datos.', + 'ERROR_NO_CONNECTOR_DISPLAY_CONFIG_FILE' => 'Error: No se han mapeado conectores a este módulo.', + 'ERROR_NO_SEARCHDEFS_MAPPING' => 'Error: No se han definido campos de búsqueda para el módulo y el conector. Por favor, póngase en contacto con el administrador del sistema.', + 'ERROR_NO_FIELDS_MAPPED' => 'Error: Debe mapear por lo menos un campo del Conector a un campo de módulo para cada entrada de módulo.', + 'ERROR_NO_DISPLAYABLE_MAPPED_FIELDS' => 'Error: No se ha mapeado ningún campo de módulo para ser mostrado como parte de los resultados. Por favor, póngase en contacto con el administrador del sistema.', + 'LBL_INFO_INLINE' => 'Información', + 'LBL_CLOSE' => 'Cerrar:', +); \ No newline at end of file diff --git a/modules/Contacts/language/es_es.lang.php b/modules/Contacts/language/es_es.lang.php new file mode 100644 index 00000000000..a1dfca80782 --- /dev/null +++ b/modules/Contacts/language/es_es.lang.php @@ -0,0 +1,247 @@ + 'ID:', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por:', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre completo:', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_SALUTATION' => 'Saludo', + 'LBL_FIRST_NAME' => 'Nombre:', + 'LBL_LAST_NAME' => 'Apellidos:', + 'LBL_TITLE' => 'Cargo:', + 'LBL_DEPARTMENT' => 'Departamento:', + 'LBL_DO_NOT_CALL' => 'No llamar:', + 'LBL_HOME_PHONE' => 'Tel. casa:', + 'LBL_MOBILE_PHONE' => 'Móvil:', + 'LBL_OFFICE_PHONE' => 'Tel. Oficina:', + 'LBL_OTHER_PHONE' => 'Tel. Alternativo:', + 'LBL_FAX_PHONE' => 'Fax:', + 'LBL_EMAIL_ADDRESS' => 'Correo electrónico:', + 'LBL_PRIMARY_ADDRESS' => 'Dirección principal:', + 'LBL_PRIMARY_ADDRESS_STREET' => 'Calle de dirección principal:', + 'LBL_PRIMARY_ADDRESS_STREET_2' => 'Calle de dirección principal 2', + 'LBL_PRIMARY_ADDRESS_STREET_3' => 'Calle de dirección principal 3', + 'LBL_PRIMARY_ADDRESS_CITY' => 'Ciudad de dirección principal:', + 'LBL_PRIMARY_ADDRESS_STATE' => 'Estado/Provincia de dirección principal:', + 'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'CP de dirección principal:', + 'LBL_PRIMARY_ADDRESS_COUNTRY' => 'País de dirección principal:', + 'LBL_ALT_ADDRESS' => 'Otra dirección:', + 'LBL_ALT_ADDRESS_STREET' => 'Calle de dirección alternativa:', + 'LBL_ALT_ADDRESS_STREET_2' => 'Calle de dirección alternativa 2', + 'LBL_ALT_ADDRESS_STREET_3' => 'Calle de dirección alternativa 3', + 'LBL_ALT_ADDRESS_CITY' => 'Ciudad de dirección alternativa:', + 'LBL_ALT_ADDRESS_STATE' => 'Estado/Provincia de dirección alternativa:', + 'LBL_ALT_ADDRESS_POSTALCODE' => 'CP de dirección alternativa:', + 'LBL_ALT_ADDRESS_COUNTRY' => 'País de dirección alternativa:', + 'LBL_COUNTRY' => 'País:', + 'LBL_STREET' => 'Calle', + 'LBL_PRIMARY_STREET' => 'Dirección', + 'LBL_ALT_STREET' => 'Otra dirección', + 'LBL_CITY' => 'Ciudad:', + 'LBL_STATE' => 'Estado/Provincia:', + 'LBL_POSTALCODE' => 'Código Postal', + 'LBL_POSTAL_CODE' => 'Código postal:', + 'LBL_CONTACT_INFORMATION' => 'Visión General', + 'LBL_ADDRESS_INFORMATION' => 'Direcciones', + 'LBL_OTHER_EMAIL_ADDRESS' => 'Email Alternativo:', + 'LBL_ASSISTANT' => 'Asistente:', + 'LBL_ASSISTANT_PHONE' => 'Tel. asistente:', + 'LBL_WORK_PHONE' => 'Tel. Trabajo', + 'LNK_IMPORT_VCARD' => 'Nuevo Contacto desde vCard', + 'LBL_ANY_EMAIL' => 'Cualquier email:', + 'LBL_EMAIL_NON_PRIMARY' => 'Correo Electrónico No Principal', + 'db_last_name' => 'LBL_LIST_LAST_NAME', + 'db_first_name' => 'LBL_LIST_FIRST_NAME', + 'db_title' => 'LBL_LIST_TITLE', + 'db_email1' => 'LBL_LIST_EMAIL_ADDRESS', + 'db_email2' => 'LBL_LIST_OTHER_EMAIL_ADDRESS', + 'ERR_DELETE_RECORD' => 'Especifique el número de registro para eliminar el contacto.', + 'LBL_ACCOUNT_ID' => 'ID de cuenta', + 'LBL_ACCOUNT_NAME' => 'Cuenta:', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_ADD_BUSINESSCARD' => 'Nueva Tarjeta de Visita', + 'LBL_ADDMORE_BUSINESSCARD' => 'Añadir otra tarjeta de visita', + 'LBL_ALTERNATE_ADDRESS' => 'Dirección alternativa:', + 'LBL_ANY_ADDRESS' => 'Cualquier dirección:', + 'LBL_ANY_PHONE' => 'Cualquier Teléfono:', + 'LBL_BIRTHDATE' => 'Cumpleaños:', + 'LBL_BUSINESSCARD' => 'Tarjeta de Visita', + 'LBL_CAMPAIGN_ID' => 'ID Campaña', + 'LBL_CONTACT_NAME' => 'Nombre Contacto:', + 'LBL_CONTACT_OPP_FORM_TITLE' => 'Oportunidad-Contacto:', + 'LBL_CONTACT_ROLE' => 'Rol:', + 'LBL_CONTACT' => 'Contacto:', + 'LBL_CREATED_ACCOUNT' => 'Nueva cuenta creada', + 'LBL_CREATED_CALL' => 'Nueva llamada creada', + 'LBL_CREATED_CONTACT' => 'Nuevo contacto creado', + 'LBL_CREATED_MEETING' => 'Nueva reunión creada', + 'LBL_CREATED_OPPORTUNITY' => 'Creada nueva oportunidad', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Contactos', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_DIRECT_REPORTS_SUBPANEL_TITLE' => 'Informadores Directos', + 'LBL_DUPLICATE' => 'Posible contacto duplicado', + 'LBL_EMAIL_OPT_OUT' => 'Rehusar Email:', + 'LBL_EXISTING_ACCOUNT' => 'Usada cuenta existente', + 'LBL_EXISTING_CONTACT' => 'Usado contacto existente', + 'LBL_EXISTING_OPPORTUNITY' => 'Usada oportunidad existente', + 'LBL_FULL_NAME' => 'Nombre Completo:', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_IMPORT_VCARD' => 'Importar vCard', + 'LBL_VCARD' => 'vCard', + 'LBL_IMPORT_VCARDTEXT' => 'Crea automáticamente un nuevo contacto a partir de una vCard.', + 'LBL_INVALID_EMAIL' => 'Email no válido:', + 'LBL_INVITEE' => 'Informadores', + 'LBL_LEAD_SOURCE' => 'Toma de contacto:', + 'LBL_LIST_ACCEPT_STATUS' => 'Estado de Aceptación', + 'LBL_LIST_ACCOUNT_NAME' => 'Cuenta', + 'LBL_LIST_CONTACT_NAME' => 'Nombre Contacto', + 'LBL_LIST_CONTACT_ROLE' => 'Rol', + 'LBL_LIST_EMAIL_ADDRESS' => 'Email', + 'LBL_LIST_FIRST_NAME' => 'Nombre', + 'LBL_LIST_FORM_TITLE' => 'Lista de Contactos', + 'LBL_VIEW_FORM_TITLE' => 'Vista de Contactos', + 'LBL_LIST_LAST_NAME' => 'Apellidos', + 'LBL_LIST_OTHER_EMAIL_ADDRESS' => 'Otro Email', + 'LBL_LIST_PHONE' => 'Teléfono', + 'LBL_LIST_TITLE' => 'Cargo', + 'LBL_MODULE_NAME' => 'Contactos', + 'LBL_MODULE_TITLE' => 'Contactos: Inicio', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Contacto', + 'LBL_NEW_PORTAL_PASSWORD' => 'Nueva Contraseña del Portal:', + 'LBL_NOTE_SUBJECT' => 'Asunto de Nota', + 'LBL_OPP_NAME' => 'Nombre Oportunidad:', + 'LBL_OPPORTUNITY_ROLE_ID' => 'ID de Rol en Oportunidad', + 'LBL_OPPORTUNITY_ROLE' => 'Rol en Oportunidad', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_PORTAL_ACTIVE' => 'Portal Activo:', + 'LBL_PORTAL_APP' => 'Aplicación de Portal', + 'LBL_PORTAL_INFORMATION' => 'Información de Portal', + 'LBL_PORTAL_NAME' => 'Nombre del Portal:', + 'LBL_PORTAL_PASSWORD_ISSET' => 'Contraseña de Portal Establecida:', + 'LBL_PRODUCTS_TITLE' => 'Productos', + 'LBL_RELATED_CONTACTS_TITLE' => 'Contactos Relacionados', + 'LBL_REPORTS_TO_ID' => 'Informa a ID:', + 'LBL_REPORTS_TO' => 'Informa a:', + 'LBL_RESOURCE_NAME' => 'Nombre de Recurso', + 'LBL_SAVE_CONTACT' => 'Guardar Contacto', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Contactos', + 'LBL_SELECT_CHECKED_BUTTON_LABEL' => 'Seleccionar Contactos Marcados', + 'LBL_SELECT_CHECKED_BUTTON_TITLE' => 'Seleccionar Contactos Marcados', + 'LBL_SYNC_CONTACT' => 'Sincronizar con Outlook®', + 'LBL_PROSPECT_LIST' => 'Público Objetivo', + 'LNK_CONTACT_LIST' => 'Ver Contactos', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_APPOINTMENT' => 'Nueva Cita', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_NOTE' => 'Nueva Nota', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'LNK_SELECT_ACCOUNT' => 'Seleccione Cuenta', + 'MSG_DUPLICATE' => 'El registro para el contacto que va a crear podría ser un duplicado de otro registro de contacto existente. Los registros de contacto con nombres y/o direcciones de email similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de este contacto, o en Cancelar para volver al módulo sin crear el contacto.', + 'MSG_SHOW_DUPLICATES' => 'El registro para el contacto que va a crear podría ser un duplicado de otro registro de contacto existente. Los registros de contacto con nombres y/o direcciones de email similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de este contacto, o en Cancelar para volver al módulo sin crear el contacto.', + 'NTC_COPY_ALTERNATE_ADDRESS' => 'Copiar dirección alternativa a dirección principal', + 'NTC_COPY_PRIMARY_ADDRESS' => 'Copiar dirección principal a dirección alternativa', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que quiere eliminar este registro?', + 'NTC_OPPORTUNITY_REQUIRES_ACCOUNT' => 'La creación de una oportunidad requiere una cuenta.\\n Por favor, cree una nueva cuenta o seleccione una existente.', + 'NTC_REMOVE_CONFIRMATION' => '¿Está seguro que desea eliminar este contacto del caso?', + 'NTC_REMOVE_DIRECT_REPORT_CONFIRMATION' => '¿Está seguro que desea quitar este registro como informador directo?', + 'LBL_USER_PASSWORD' => 'Contraseña:', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_OPPORTUNITIES_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_DOCUMENTS_SUBPANEL_TITLE' => 'Documentos', + 'LBL_COPY_ADDRESS_CHECKED_PRIMARY' => 'Copiar dirección principal', + 'LBL_COPY_ADDRESS_CHECKED_ALT' => 'Copiar otra dirección', + 'LBL_CASES_SUBPANEL_TITLE' => 'Casos', + 'LBL_BUGS_SUBPANEL_TITLE' => 'Incidencias', + 'LBL_PROJECTS_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_PROJECTS_RESOURCES' => 'Proyectos de recursos', + 'LBL_TARGET_OF_CAMPAIGNS' => 'Campañas (Objetivo de) :', + 'LBL_CAMPAIGNS' => 'Campañas', + 'LBL_CAMPAIGN_LIST_SUBPANEL_TITLE' => 'Campañas', + 'LBL_LIST_CITY' => 'Ciudad', + 'LBL_LIST_STATE' => 'Estado/Provincia', + 'LBL_HOMEPAGE_TITLE' => 'Mis Contactos', + 'LBL_OPPORTUNITIES' => 'Oportunidades', + 'LBL_CHECKOUT_DATE' => 'Fecha de Salida', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_PROJECT_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_CAMPAIGNS_SUBPANEL_TITLE' => 'Campañas', + 'LNK_IMPORT_CONTACTS' => 'Importar Contactos', + 'LBL_PHONE_HOME' => 'Teléfono de casa', + 'LBL_PHONE_MOBILE' => 'Móvil', + 'LBL_PHONE_WORK' => 'Teléfono del trabajo', + 'LBL_PHONE_OTHER' => 'Otro teléfono', + 'LBL_PHONE_FAX' => 'Fax oficina', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_PHONE_HOME' => 'Tel. casa', + 'LBL_EXPORT_PHONE_MOBILE' => 'Móvil', + 'LBL_CONTACT_HISTORY_SUBPANEL_TITLE' => 'Emails de contactos relacionados', + 'LBL_USER_SYNC' => 'Sincronizar Usuario', +); \ No newline at end of file diff --git a/modules/Currencies/language/es_es.lang.php b/modules/Currencies/language/es_es.lang.php new file mode 100644 index 00000000000..e0bbc0b3f61 --- /dev/null +++ b/modules/Currencies/language/es_es.lang.php @@ -0,0 +1,83 @@ + 'Monedas', + 'LBL_LIST_FORM_TITLE' => 'Monedas', + 'LBL_CURRENCY' => 'Moneda', + 'LBL_ADD' => 'Agregar', + 'LBL_MERGE' => 'Unificar', + 'LBL_MERGE_TXT' => 'Por favor, seleccione las monedas que desee asociar a la moneda seleccionada. Esto eliminará todas las monedas marcadas y reasignará cualquier valor asociado con ellas a la moneda seleccionada.', + 'LBL_US_DOLLAR' => 'Dólar EEUU', + 'LBL_DELETE' => 'Eliminar', + 'LBL_LIST_SYMBOL' => 'Símbolo', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_ISO4217' => 'Código ISO 4217', + 'LBL_LIST_ISO4217_HELP' => 'Introduzca el código de tres letras ISO 4217 que define el nombre y el símbolo de la moneda.', + 'LBL_UPDATE' => 'Actualizar', + 'LBL_LIST_RATE' => 'Cambio', + 'LBL_LIST_RATE_HELP' => 'Un cambio de 0,5 para el Euro significa que 10 dólares EEUU = 5 Euros.', + 'LBL_LIST_STATUS' => 'Estado', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'LNK_NEW_NOTE' => 'Nueva Nota', + 'LNK_NEW_CALL' => 'Nueva Llamada', + 'LNK_NEW_EMAIL' => 'Nuevo Email', + 'LNK_NEW_MEETING' => 'Nueva Reunión', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar esta moneda? Todo registro que use esta moneda será convertido a la moneda por defecto del sistema cuando sea accedido. Sería mejor dejarla inactiva.', + 'LBL_BELOW_MIN' => 'El ratio de conversión debe ser mayor que 0', + 'currency_status_dom' => + array ( + 'Active' => 'Activa', + 'Inactive' => 'Inactiva', + ), + 'LBL_CREATED_BY' => 'Creado por', + 'LBL_EDIT_LAYOUT' => 'Editar diseño', +); \ No newline at end of file diff --git a/modules/DocumentRevisions/language/es_es.lang.php b/modules/DocumentRevisions/language/es_es.lang.php new file mode 100644 index 00000000000..ab919e3a9a0 --- /dev/null +++ b/modules/DocumentRevisions/language/es_es.lang.php @@ -0,0 +1,82 @@ + 'Versión del Documento', + 'LNK_NEW_DOCUMENT' => 'Nuevo Documento', + 'LNK_DOCUMENT_LIST' => 'Ver Documentos', + 'LBL_REVISION_NAME' => 'Número de Versión', + 'LBL_FILENAME' => 'Nombre de Archivo', + 'LBL_MIME' => 'Tipo MIME', + 'LBL_REVISION' => 'Versión', + 'LBL_DOCUMENT' => 'Documento Relacionado', + 'LBL_LATEST_REVISION' => 'Última Versión', + 'LBL_CHANGE_LOG' => 'Registro de Cambios:', + 'LBL_ACTIVE_DATE' => 'Fecha de Publicación', + 'LBL_EXPIRATION_DATE' => 'Fecha de Caducidad', + 'LBL_FILE_EXTENSION' => 'Extensión de Archivo', + 'LBL_DET_CREATED_BY' => 'Creado Por:', + 'LBL_DET_DATE_CREATED' => 'Fecha de Creación:', + 'LBL_DOC_NAME' => 'Nombre de Documento:', + 'LBL_DOC_VERSION' => 'Versión:', + 'LBL_REV_LIST_REVISION' => 'Versión', + 'LBL_REV_LIST_ENTERED' => 'Fecha de Creación', + 'LBL_REV_LIST_CREATED' => 'Creado por', + 'LBL_REV_LIST_LOG' => 'Registro de Cambios', + 'LBL_REV_LIST_FILENAME' => 'Nombre de archivo', + 'LBL_CURRENT_DOC_VERSION' => 'Última Versión:', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Documentos', + 'LBL_REVISIONS' => 'Revisiones', + 'ERR_FILENAME' => 'Nombre de Archivo', + 'ERR_DOC_VERSION' => 'Versión de Documento', + 'ERR_DELETE_CONFIRM' => '¿Desea eliminar esta versión del documento?', + 'ERR_DELETE_LATEST_VERSION' => 'No tiene permisos para eliminar la última versión de un documento.', + 'LNK_NEW_MAIL_MERGE' => 'Combinar Correspondencia', + 'LBL_DOC_ID' => 'ID del documento', + 'LBL_DOC_TYPE' => 'Fuente', + 'LBL_DOC_URL' => 'URL del documento', +); \ No newline at end of file diff --git a/modules/Documents/language/es_es.lang.php b/modules/Documents/language/es_es.lang.php new file mode 100644 index 00000000000..9b39d411215 --- /dev/null +++ b/modules/Documents/language/es_es.lang.php @@ -0,0 +1,181 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha Creación', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación', + 'LBL_MODIFIED' => 'Modificado por ID', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre de Documento', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Modificado por', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a:', + 'LBL_MODULE_NAME' => 'Documentos', + 'LBL_MODULE_TITLE' => 'Documentos: Inicio', + 'LNK_NEW_DOCUMENT' => 'Crear Documento', + 'LNK_DOCUMENT_LIST' => 'Ver Documentos', + 'LBL_DOC_REV_HEADER' => 'Versiones', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Documentos', + 'LBL_DOCUMENT_ID' => 'ID de Documento', + 'LBL_CATEGORY' => 'Categoría', + 'LBL_SUBCATEGORY' => 'Subcategoría', + 'LBL_STATUS' => 'Estado', + 'LBL_CREATED_BY' => 'Creado por', + 'LBL_REVISIONS' => 'Versiones', + 'LBL_RELATED_DOCUMENT_ID' => 'ID de Documento Relacionado', + 'LBL_RELATED_DOCUMENT_REVISION_ID' => 'ID de Versión de Documento Relacionado', + 'LBL_IS_TEMPLATE' => 'Es una Plantilla', + 'LBL_TEMPLATE_TYPE' => 'Tipo de Documento', + 'LBL_REVISION_NAME' => 'Número de Versión', + 'LBL_MIME' => 'Tipo MIME', + 'LBL_REVISION' => 'Versión', + 'LBL_DOCUMENT' => 'Documento Relacionado', + 'LBL_LATEST_REVISION' => 'Última Versión', + 'LBL_CHANGE_LOG' => 'Historial de Cambios:', + 'LBL_ACTIVE_DATE' => 'Fecha de Publicación', + 'LBL_EXPIRATION_DATE' => 'Fecha de Caducidad', + 'LBL_FILE_EXTENSION' => 'Extensión de Archivo', + 'LBL_LAST_REV_MIME_TYPE' => 'Tipo MIME de la última versión', + 'LBL_CAT_OR_SUBCAT_UNSPEC' => 'Sin especificar', + 'LBL_HOMEPAGE_TITLE' => 'Mis documentos', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Documento', + 'LBL_DOC_NAME' => 'Nombre de Documento:', + 'LBL_FILENAME' => 'Nombre de Archivo:', + 'LBL_LIST_FILENAME' => 'Archivo:', + 'LBL_DOC_VERSION' => 'Versión:', + 'LBL_FILE_UPLOAD' => 'Archivo:', + 'LBL_CATEGORY_VALUE' => 'Categoría:', + 'LBL_LIST_CATEGORY' => 'Categoría', + 'LBL_SUBCATEGORY_VALUE' => 'Subcategoría:', + 'LBL_DOC_STATUS' => 'Estado:', + 'LBL_LAST_REV_CREATOR' => 'Versión Creada Por:', + 'LBL_LASTEST_REVISION_NAME' => 'Nombre de la última versión:', + 'LBL_SELECTED_REVISION_NAME' => 'Nombre de la versión seleccionada:', + 'LBL_CONTRACT_STATUS' => 'Estado del contrato:', + 'LBL_CONTRACT_NAME' => 'Nombre de Contrato:', + 'LBL_LAST_REV_DATE' => 'Fecha de Versión:', + 'LBL_DOWNNLOAD_FILE' => 'Archivo de Descarga:', + 'LBL_DET_RELATED_DOCUMENT' => 'Documento Relacionado:', + 'LBL_DET_RELATED_DOCUMENT_VERSION' => 'Versión de Documento Relacionado:', + 'LBL_DET_IS_TEMPLATE' => '¿Plantilla? :', + 'LBL_DET_TEMPLATE_TYPE' => 'Tipo de Documento:', + 'LBL_DOC_DESCRIPTION' => 'Descripción:', + 'LBL_DOC_ACTIVE_DATE' => 'Fecha de Publicación:', + 'LBL_DOC_EXP_DATE' => 'Fecha de Caducidad:', + 'LBL_LIST_FORM_TITLE' => 'Lista de Documentos', + 'LBL_LIST_DOCUMENT' => 'Documento', + 'LBL_LIST_SUBCATEGORY' => 'Subcategoría', + 'LBL_LIST_REVISION' => 'Versión', + 'LBL_LIST_LAST_REV_CREATOR' => 'Publicado Por', + 'LBL_LIST_LAST_REV_DATE' => 'Fecha de Versión', + 'LBL_LIST_VIEW_DOCUMENT' => 'Ver', + 'LBL_LIST_DOWNLOAD' => 'Descargar', + 'LBL_LIST_ACTIVE_DATE' => 'Fecha de Publicación', + 'LBL_LIST_EXP_DATE' => 'Fecha de Caducidad', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LINKED_ID' => 'Id enlace', + 'LBL_SELECTED_REVISION_ID' => 'Id de versión seleccionada', + 'LBL_LATEST_REVISION_ID' => 'Id de última versión', + 'LBL_SELECTED_REVISION_FILENAME' => 'Nombre de archivo de versión seleccionada', + 'LBL_FILE_URL' => 'URL del archivo', + 'LBL_REVISIONS_PANEL' => 'Detalles de la Versión', + 'LBL_REVISIONS_SUBPANEL' => 'Versiones', + 'LBL_SF_DOCUMENT' => 'Nombre de Documento:', + 'LBL_SF_CATEGORY' => 'Categoría:', + 'LBL_SF_SUBCATEGORY' => 'Subcategoría:', + 'LBL_SF_ACTIVE_DATE' => 'Fecha de Publicación:', + 'LBL_SF_EXP_DATE' => 'Fecha de Caducidad:', + 'DEF_CREATE_LOG' => 'Documento Creado', + 'ERR_DOC_NAME' => 'Nombre de Documento', + 'ERR_DOC_ACTIVE_DATE' => 'Fecha de Publicación', + 'ERR_DOC_EXP_DATE' => 'Fecha de Caducidad', + 'ERR_FILENAME' => 'Nombre de Archivo', + 'ERR_DOC_VERSION' => 'Versión de Documento', + 'ERR_DELETE_CONFIRM' => '¿Desea eliminar esta versión del documento?', + 'ERR_DELETE_LATEST_VERSION' => 'No tiene permisos para eliminar la última versión de un documento.', + 'LNK_NEW_MAIL_MERGE' => 'Combinar Correspondencia', + 'LBL_MAIL_MERGE_DOCUMENT' => 'Plantilla para Combinar Correspondencia:', + 'ERR_MISSING_FILE' => 'Este documento no se encuentra un archivo, es muy probable que el error se haya generado durante la carga. Por favor vuelva a intentar cargar el archivo o póngase en contacto con su administrador.', + 'LBL_TREE_TITLE' => 'Documentos', + 'LBL_LIST_DOCUMENT_NAME' => 'Nombre de Documento', + 'LBL_LIST_IS_TEMPLATE' => '¿Plantilla?', + 'LBL_LIST_TEMPLATE_TYPE' => 'Tipo de Documento', + 'LBL_LIST_SELECTED_REVISION' => 'Versión Seleccionada', + 'LBL_LIST_LATEST_REVISION' => 'Última Versión', + 'LBL_CONTRACTS_SUBPANEL_TITLE' => 'Contratos Relacionados', + 'LBL_LAST_REV_CREATE_DATE' => 'Fecha de Creación de Última Versión', + 'LBL_CONTRACTS' => 'Contratos', + 'LBL_THEREVISIONS_SUBPANEL_TITLE' => 'Versiones', + 'LBL_DOCUMENT_INFORMATION' => 'Visión General', + 'LBL_DOC_ID' => 'ID del documento', + 'LBL_DOC_TYPE' => 'Fuente', + 'LBL_LIST_DOC_TYPE' => 'Fuente', + 'LBL_DOC_TYPE_POPUP' => 'Seleccione un origen para que este documento sea cargado
y del cual estará disponible.', + 'LBL_DOC_URL' => 'URL del documento', + 'LBL_SEARCH_EXTERNAL_DOCUMENT' => 'Nombre de archivo', + 'LBL_EXTERNAL_DOCUMENT_NOTE' => 'Los primeros 20 archivos modificados más recientemente se muestran en orden descendente en la lista a continuación. Use la búsqueda para encontrar otros archivos.', + 'LBL_LIST_EXT_DOCUMENT_NAME' => 'Nombre de archivo', + 'ERR_INVALID_EXTERNAL_API_ACCESS' => 'El usuario ha intentado acceder a una API externa no válida ({0})', + 'ERR_INVALID_EXTERNAL_API_LOGIN' => 'La comprobación de inicio de sesión ha sido errónea para la API externa ({0})', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_OPPORTUNITIES_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_CASES_SUBPANEL_TITLE' => 'Casos', + 'LBL_BUGS_SUBPANEL_TITLE' => 'Incidencias', + 'LBL_QUOTES_SUBPANEL_TITLE' => 'Presupuestos', + 'LBL_PRODUCTS_SUBPANEL_TITLE' => 'Productos', +); \ No newline at end of file diff --git a/modules/DynamicFields/language/es_es.lang.php b/modules/DynamicFields/language/es_es.lang.php new file mode 100644 index 00000000000..e5d932b2483 --- /dev/null +++ b/modules/DynamicFields/language/es_es.lang.php @@ -0,0 +1,130 @@ + 'Registrar Llamada', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_TASK' => 'Crear Tarea', + 'LNK_NEW_NOTE' => 'Crear Nota o Archivo Adjunto', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_CALL_LIST' => 'Llamadas', + 'LNK_MEETING_LIST' => 'Reuniones', + 'LNK_TASK_LIST' => 'Tareas', + 'LNK_NOTE_LIST' => 'Notas', + 'LNK_EMAIL_LIST' => 'Emails', + 'LBL_ADD_FIELD' => 'Agregar Campo:', + 'LBL_MODULE_SELECT' => 'Módulo a Editar', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Módulo', + 'COLUMN_TITLE_NAME' => 'Nombre de Campo', + 'COLUMN_TITLE_DISPLAY_LABEL' => 'Etiqueta Visible', + 'COLUMN_TITLE_LABEL_VALUE' => 'Valor de Etiqueta', + 'COLUMN_TITLE_LABEL' => 'Etiqueta del Sistema', + 'COLUMN_TITLE_DATA_TYPE' => 'Tipo de Dato', + 'COLUMN_TITLE_MAX_SIZE' => 'Tamaño Máximo', + 'COLUMN_TITLE_HELP_TEXT' => 'Texto de Ayuda', + 'COLUMN_TITLE_COMMENT_TEXT' => 'Texto de Comentario', + 'COLUMN_TITLE_REQUIRED_OPTION' => 'Campo Requerido', + 'COLUMN_TITLE_DEFAULT_VALUE' => 'Valor Por Defecto', + 'COLUMN_TITLE_DEFAULT_EMAIL' => 'Valor Por Defecto', + 'COLUMN_TITLE_EXT1' => 'Metacampo Extra 1', + 'COLUMN_TITLE_EXT2' => 'Metacampo Extra 2', + 'COLUMN_TITLE_EXT3' => 'Metacampo Extra 3', + 'COLUMN_TITLE_FRAME_HEIGHT' => 'Altura de IFrame', + 'COLUMN_TITLE_HTML_CONTENT' => 'HTML', + 'COLUMN_TITLE_URL' => 'URL por Defecto', + 'COLUMN_TITLE_AUDIT' => 'Auditar', + 'COLUMN_TITLE_FTS' => 'Texto completo búsquedas', + 'COLUMN_TITLE_REPORTABLE' => 'Informable', + 'COLUMN_TITLE_MIN_VALUE' => 'Valor Mínimo', + 'COLUMN_TITLE_MAX_VALUE' => 'Valor Máximo', + 'COLUMN_TITLE_LABEL_ROWS' => 'Filas', + 'COLUMN_TITLE_LABEL_COLS' => 'Columnas', + 'COLUMN_TITLE_DISPLAYED_ITEM_COUNT' => 'Nº Elementos mostrados', + 'COLUMN_TITLE_AUTOINC_NEXT' => 'Autoincrementar Siguiente Valor', + 'COLUMN_DISABLE_NUMBER_FORMAT' => 'Deshabilitar Formato', + 'COLUMN_TITLE_ENABLE_RANGE_SEARCH' => 'Habilitar la Búsqueda por Rango', + 'COLUMN_TITLE_GLOBAL_SEARCH' => 'Búsqueda global', + 'LBL_DROP_DOWN_LIST' => 'Lista Desplegable', + 'LBL_RADIO_FIELDS' => 'Opción', + 'LBL_MULTI_SELECT_LIST' => 'Selección Múltiple', + 'COLUMN_TITLE_PRECISION' => 'Precisión', + 'MSG_DELETE_CONFIRM' => '¿Está seguro de que desea eliminar este elemento?', + 'POPUP_INSERT_HEADER_TITLE' => 'Agregar Campo Personalizado', + 'POPUP_EDIT_HEADER_TITLE' => 'Editar Campo Personalizado', + 'LNK_SELECT_CUSTOM_FIELD' => 'Seleccionar Campo Personalizado', + 'LNK_REPAIR_CUSTOM_FIELD' => 'Reparar Campos Personalizados', + 'LBL_MODULE' => 'Módulo', + 'COLUMN_TITLE_MASS_UPDATE' => 'Actualización Masiva', + 'COLUMN_TITLE_IMPORTABLE' => 'Importable', + 'COLUMN_TITLE_DUPLICATE_MERGE' => 'Combinación de Duplicados', + 'LBL_LABEL' => 'Etiqueta', + 'LBL_DATA_TYPE' => 'Tipo de Dato', + 'LBL_DEFAULT_VALUE' => 'Valor por Defecto', + 'LBL_AUDITED' => 'Auditado', + 'LBL_REPORTABLE' => 'Informable', + 'ERR_RESERVED_FIELD_NAME' => 'Palabra Reservada', + 'ERR_SELECT_FIELD_TYPE' => 'Por Favor Seleccione un Tipo de Campo', + 'ERR_FIELD_NAME_ALREADY_EXISTS' => 'El Nombre del Campo ya existe', + 'LBL_BTN_ADD' => 'Agregar', + 'LBL_BTN_EDIT' => 'Editar', + 'LBL_GENERATE_URL' => 'Generar URL', + 'LBL_DEPENDENT_CHECKBOX' => 'Dependiente', + 'LBL_DEPENDENT_TRIGGER' => 'Disparador', + 'LBL_CALCULATED' => 'Valor Calculado', + 'LBL_FORMULA' => 'Fórmula', + 'LBL_DYNAMIC_VALUES_CHECKBOX' => 'Dependiente', + 'LBL_BTN_EDIT_VISIBILITY' => 'Editar Visibilidad', + 'LBL_LINK_TARGET' => 'Abrir Enlace En', + 'LBL_IMAGE_WIDTH' => 'Anchura', + 'LBL_IMAGE_HEIGHT' => 'Altura', + 'LBL_IMAGE_BORDER' => 'Borde', + 'COLUMN_TITLE_VALIDATE_US_FORMAT' => 'Formato U.S.', + 'LBL_DEPENDENT' => 'Dependiente', + 'LBL_VISIBLE_IF' => 'Visible si', + 'LBL_ENFORCED' => 'Cumplimiento', + 'LBL_HELP' => 'Ayuda', +); \ No newline at end of file diff --git a/modules/EAPM/language/es_es.lang.php b/modules/EAPM/language/es_es.lang.php new file mode 100644 index 00000000000..f936ffd002b --- /dev/null +++ b/modules/EAPM/language/es_es.lang.php @@ -0,0 +1,122 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de creación', + 'LBL_DATE_MODIFIED' => 'Fecha de modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por Id', + 'LBL_MODIFIED_NAME' => 'Modificada por usuario', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por Id', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre del usuario de la App', + 'LBL_CREATED_USER' => 'Creada por usuario', + 'LBL_MODIFIED_USER' => 'Modificado por usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'ID usuario asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario de Sugar', + 'LBL_TEAM' => 'Equipo', + 'LBL_TEAMS' => 'Equipos', + 'LBL_TEAM_ID' => 'ID Equipo', + 'LBL_LIST_FORM_TITLE' => 'Lista de cuentas externas', + 'LBL_MODULE_NAME' => 'Cuenta externa', + 'LBL_MODULE_TITLE' => 'Cuentas externas', + 'LBL_HOMEPAGE_TITLE' => 'Mis cuentas externas', + 'LNK_NEW_RECORD' => 'Crear cuenta externa', + 'LNK_LIST' => 'Ver cuentas externas', + 'LNK_IMPORT_SUGAR_EAPM' => 'Importar cuentas externas', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar fuentes externas', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_SUGAR_EAPM_SUBPANEL_TITLE' => 'Cuentas externas', + 'LBL_NEW_FORM_TITLE' => 'Nueva cuenta externa', + 'LBL_PASSWORD' => 'Contraseña App', + 'LBL_USER_NAME' => 'Usuario App', + 'LBL_URL' => 'URL', + 'LBL_APPLICATION' => 'Aplicación', + 'LBL_API_DATA' => 'Datos API', + 'LBL_API_TYPE' => 'Tipo de registro', + 'LBL_API_CONSKEY' => 'Clave del Consumidor', + 'LBL_API_CONSSECRET' => 'Secreto del Consumidor', + 'LBL_API_OAUTHTOKEN' => 'OAuth Token', + 'LBL_AUTH_UNSUPPORTED' => 'Este método de registro no es compatible con la aplicación', + 'LBL_AUTH_ERROR' => 'El intento de conectarse con la cuenta fallo.', + 'LBL_VALIDATED' => 'Conectado', + 'LBL_ACTIVE' => 'Activa', + 'LBL_OAUTH_NAME' => '%s', + 'LBL_SUGAR_USER_NAME' => 'Usuario Sugar', + 'LBL_DISPLAY_PROPERTIES' => 'Ver propiedades', + 'LBL_CONNECT_BUTTON_TITLE' => 'Conecta', + 'LBL_NOTE' => 'Tenga en cuenta', + 'LBL_CONNECTED' => 'Conectado', + 'LBL_DISCONNECTED' => 'No conectado', + 'LBL_ERR_NO_AUTHINFO' => 'No hay información de autenticación para esta cuenta.', + 'LBL_ERR_NO_TOKEN' => 'No hay token válido para registrar esta cuenta.', + 'LBL_ERR_FAILED_QUICKCHECK' => 'Usted no está conectado a su cuenta {0}. Haga clic en Aceptar para acceder a su cuenta y volver a activar la conexión.', + 'LBL_MEET_NOW_BUTTON' => 'Reunirse ahora', + 'LBL_VIEW_LOTUS_LIVE_MEETINGS' => 'Ver próximas reuniones de LotusLive™', + 'LBL_TITLE_LOTUS_LIVE_MEETINGS' => 'Próximas reuniones LotusLive™', + 'LBL_VIEW_LOTUS_LIVE_DOCUMENTS' => 'Ver archivos de LotusLive™', + 'LBL_TITLE_LOTUS_LIVE_DOCUMENTS' => 'Archivos de LotusLive™', + 'LBL_REAUTHENTICATE_LABEL' => 'Volver a registrarse', + 'LBL_REAUTHENTICATE_KEY' => 'a', + 'LBL_APPLICATION_FOUND_NOTICE' => 'Una cuenta para esta aplicación ya existe. Se ha restituido la cuenta existente.', + 'LBL_OMIT_URL' => '(Omitir http:// o https://)', + 'LBL_OAUTH_SAVE_NOTICE' => 'Haga clic en conectar para dirigirse a una página para proporcionar información de su cuenta y para autorizar el acceso a la cuenta por Sugar. Después de conectar, se le redirige de vuelta Sugar.', + 'LBL_BASIC_SAVE_NOTICE' => 'Haga clic en conectar para conectar la cuenta en Sugar.', + 'LBL_ERR_FACEBOOK' => 'Facebook ha devuelto un error, y la información no se puede mostrar.', + 'LBL_ERR_OAUTH_FACEBOOK_1' => 'Sesión de facebook caducada. Para transferirse, por favor', + 'LBL_ERR_OAUTH_FACEBOOK_2' => 'vuelva a iniciar sesión de Facebook', + 'LBL_ERR_NO_RESPONSE' => 'Se produjo un error al intentar conectarse a esta cuenta.', + 'LBL_ERR_TWITTER' => 'Twitter ha devuelto un error, y la información no se puede mostrar.', + 'LBL_ERR_POPUPS_DISABLED' => 'Por favor, activa las ventanas emergente del navegador o agregar una excepción para el sitio web "{0}" a la lista de excepciones con el fin de conectar.', +); \ No newline at end of file diff --git a/modules/EmailAddresses/language/es_es.lang.php b/modules/EmailAddresses/language/es_es.lang.php new file mode 100644 index 00000000000..c24bd64b4ca --- /dev/null +++ b/modules/EmailAddresses/language/es_es.lang.php @@ -0,0 +1,57 @@ + 'ID', + 'LBL_EMAIL_ADDRESS' => 'Dirección de Email', + 'LBL_EMAIL_ADDRESS_CAPS' => 'Mayúsculas en Dirección de Email', + 'LBL_INVALID_EMAIL' => 'Email No Válido', + 'LBL_OPT_OUT' => 'Rehusado', + 'LBL_DATE_CREATE' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_DELETED' => 'Eliminar', +); \ No newline at end of file diff --git a/modules/EmailMan/language/es_es.lang.php b/modules/EmailMan/language/es_es.lang.php new file mode 100644 index 00000000000..a766a52ddc2 --- /dev/null +++ b/modules/EmailMan/language/es_es.lang.php @@ -0,0 +1,158 @@ + 'Fecha de Envío', + 'LBL_IN_QUEUE' => 'En Proceso', + 'LBL_IN_QUEUE_DATE' => 'Fecha de Encolamiento', + 'ERR_INT_ONLY_EMAIL_PER_RUN' => 'Utilice únicamente valores enteros para especificar el número de emails enviados por lote', + 'LBL_ATTACHMENT_AUDIT' => 'ha sido enviado. No se ha duplicado en local para minimizar la utilización de espacio en el disco duro.', + 'LBL_CONFIGURE_SETTINGS' => 'Configurar Opciones de Correo', + 'LBL_CUSTOM_LOCATION' => 'Definido por el Usuario', + 'LBL_DEFAULT_LOCATION' => 'Por Defecto', + 'LBL_DISCLOSURE_TITLE' => 'Añadir Mensaje sobre Confidencialidad de Contenido a Cada Correo', + 'LBL_DISCLOSURE_TEXT_TITLE' => 'Confidencialidad de Contenido', + 'LBL_DISCLOSURE_TEXT_SAMPLE' => 'AVISO: Este mensaje de correo es para uso único de su(s) destinatario(s) y puede contener información privada y confidencial. Queda prohibido cualquier tipo de revisión, uso, revelación o distribución no autorizada. Si usted no es el destinatario previsto, por favor, destruya todas las copias del mensaje original y notifique al remitente de forma que podamos corregir la dirección de correo en nuestro registro. Gracias.', + 'LBL_EMAIL_DEFAULT_CHARSET' => 'Redactar mensajes de email en este juego de caracteres', + 'LBL_EMAIL_DEFAULT_EDITOR' => 'Redactar correo usando este cliente', + 'LBL_EMAIL_DEFAULT_DELETE_ATTACHMENTS' => 'Eliminar archivos adjuntos y notas relacionadas junto a los Emails borrados', + 'LBL_EMAIL_GMAIL_DEFAULTS' => 'Rellenar previamente valores por defecto para Gmail™', + 'LBL_EMAIL_PER_RUN_REQ' => 'Número de emails enviados por lote', + 'LBL_EMAIL_SMTP_SSL' => '¿Habilitar SMTP sobre SSL?', + 'LBL_EMAIL_USER_TITLE' => 'Configuración por Defecto de Email para el Usuario', + 'LBL_EMAIL_OUTBOUND_CONFIGURATION' => 'Configuración de Correo Saliente', + 'LBL_EMAILS_PER_RUN' => 'Número de emails enviados por lote', + 'LBL_ID' => 'Id', + 'LBL_LIST_CAMPAIGN' => 'Campaña', + 'LBL_LIST_FORM_PROCESSED_TITLE' => 'Procesados', + 'LBL_LIST_FORM_TITLE' => 'Cola', + 'LBL_LIST_FROM_EMAIL' => 'Email del Remitente', + 'LBL_LIST_FROM_NAME' => 'Nombre del Remitente', + 'LBL_LIST_IN_QUEUE' => 'En Proceso', + 'LBL_LIST_MESSAGE_NAME' => 'Mensaje de Marketing', + 'LBL_LIST_RECIPIENT_EMAIL' => 'Email del Destinatario', + 'LBL_LIST_RECIPIENT_NAME' => 'Nombre del Destinatario', + 'LBL_LIST_SEND_ATTEMPTS' => 'Intentos de Envío', + 'LBL_LIST_SEND_DATE_TIME' => 'Enviar el', + 'LBL_LIST_USER_NAME' => 'Nombre de Usuario', + 'LBL_LOCATION_ONLY' => 'Ubicación', + 'LBL_LOCATION_TRACK' => 'Ubicación de los archivos de seguimiento de campaña (como campaign_tracker.php)', + 'LBL_CAMP_MESSAGE_COPY' => 'Guardar copias de los mensajes de la campaña:', + 'LBL_CAMP_MESSAGE_COPY_DESC' => '¿Desea guardar copias completas de CADA mensaje de email enviado durante todas las campañas? Se recomienda el valor por defecto de no hacerlo. Si elige no, sólo se guardará la plantilla enviada y las variables para recrear el mensaje individual.', + 'LBL_MAIL_SENDTYPE' => 'Agente de Transferencia de Correo (MTA):', + 'LBL_MAIL_SMTPAUTH_REQ' => 'Usar Autenticación SMTP:', + 'LBL_MAIL_SMTPPASS' => 'Contraseña:', + 'LBL_MAIL_SMTPPORT' => 'Puerto SMTP:', + 'LBL_MAIL_SMTPSERVER' => 'Servidor de Correo SMTP:', + 'LBL_MAIL_SMTPUSER' => 'Usuario:', + 'LBL_CHOOSE_EMAIL_PROVIDER' => 'Elija su proveedor de Email:', + 'LBL_YAHOOMAIL_SMTPPASS' => 'Contraseña de Yahoo! Mail:', + 'LBL_YAHOOMAIL_SMTPUSER' => 'ID de Yahoo! Mail:', + 'LBL_GMAIL_SMTPPASS' => 'Contraseña de Gmail:', + 'LBL_GMAIL_SMTPUSER' => 'Dirección de Email de Gmail:', + 'LBL_EXCHANGE_SMTPPASS' => 'Contraseña de Exchange:', + 'LBL_EXCHANGE_SMTPUSER' => 'Nombre de usuario de Exchange:', + 'LBL_EXCHANGE_SMTPPORT' => 'Puerto de Servidor Exchange:', + 'LBL_EXCHANGE_SMTPSERVER' => 'Servidor Exchange:', + 'LBL_EMAIL_LINK_TYPE' => 'Cliente de Correo', + 'LBL_EMAIL_LINK_TYPE_HELP' => 'Cliente de Correo Sugar: Enviar correo utilizando el cliente de correo de la aplicación Sugar.
Cliente de Correo Externo: Enviar correo utilizando un cliente de correo fuera de la aplicación Sugar, como Microsoft Outlook.', + 'LBL_MARKETING_ID' => 'Id de Marketing', + 'LBL_MODULE_ID' => 'EmailMan', + 'LBL_MODULE_NAME' => 'Configuración de Correo', + 'LBL_CONFIGURE_CAMPAIGN_EMAIL_SETTINGS' => 'Configurar Opciones de Correo de la Campaña', + 'LBL_MODULE_TITLE' => 'Administración de Cola de Email Saliente', + 'LBL_NOTIFICATION_ON_DESC' => 'Cuando está habilitado, se enviarán emails a los usuarios cuando se les asignen registros.', + 'LBL_NOTIFY_FROMADDRESS' => 'Dirección remitente:', + 'LBL_NOTIFY_FROMNAME' => 'Nombre remitente:', + 'LBL_NOTIFY_ON' => 'Notificaciones de Asignación', + 'LBL_NOTIFY_SEND_BY_DEFAULT' => '¿Enviar notificaciones a usuarios nuevos?', + 'LBL_NOTIFY_TITLE' => 'Opciones de Correo', + 'LBL_OLD_ID' => 'Id Antiguo', + 'LBL_OUTBOUND_EMAIL_TITLE' => 'Opciones de Correo Saliente', + 'LBL_RELATED_ID' => 'Id Relacionado', + 'LBL_RELATED_TYPE' => 'Tipo Relacionado', + 'LBL_SAVE_OUTBOUND_RAW' => 'Guardar los Emails Salientes en formato original', + 'LBL_SEARCH_FORM_PROCESSED_TITLE' => 'Búsqueda de Procesados', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Colas', + 'LBL_VIEW_PROCESSED_EMAILS' => 'Ver Emails Procesados', + 'LBL_VIEW_QUEUED_EMAILS' => 'Ver Emails Encolados', + 'TRACKING_ENTRIES_LOCATION_DEFAULT_VALUE' => 'Valor en Config.php para site_url', + 'TXT_REMOVE_ME_ALT' => 'Para borrar su suscripción a esta lista de correo vaya a', + 'TXT_REMOVE_ME_CLICK' => 'haga clic aquí', + 'TXT_REMOVE_ME' => 'Para borrar su suscripción a esta lista de correo', + 'LBL_NOTIFY_SEND_FROM_ASSIGNING_USER' => 'Enviar notificación usando como remitente la dirección de email del usuario asignador', + 'LBL_SECURITY_TITLE' => 'Configuración de Seguridad de Email', + 'LBL_SECURITY_DESC' => 'Marque aquello que NO debería ser permitido en Email entrante o mostradas en el módulo de Emails.', + 'LBL_SECURITY_APPLET' => 'Etiqueta Applet', + 'LBL_SECURITY_BASE' => 'Etiqueta Base', + 'LBL_SECURITY_EMBED' => 'Etiqueta Embed', + 'LBL_SECURITY_FORM' => 'Etiqueta Form', + 'LBL_SECURITY_FRAME' => 'Etiqueta Frame', + 'LBL_SECURITY_FRAMESET' => 'Etiqueta Frameset', + 'LBL_SECURITY_IFRAME' => 'Etiqueta iFrame', + 'LBL_SECURITY_IMPORT' => 'Etiqueta Import', + 'LBL_SECURITY_LAYER' => 'Etiqueta Layer', + 'LBL_SECURITY_LINK' => 'Etiqueta Link', + 'LBL_SECURITY_OBJECT' => 'Etiqueta Object', + 'LBL_SECURITY_OUTLOOK_DEFAULTS' => 'Seleccionar la configuración mínima de seguridad por defecto en Outlook (errores en la visualización del contenido).', + 'LBL_SECURITY_SCRIPT' => 'Etiqueta Script', + 'LBL_SECURITY_STYLE' => 'Etiqueta Style', + 'LBL_SECURITY_TOGGLE_ALL' => 'Cambiar Todas las Opciones', + 'LBL_SECURITY_XMP' => 'Etiqueta Xmp', + 'LBL_YES' => 'Sí', + 'LBL_NO' => 'No', + 'LBL_PREPEND_TEST' => '[Prueba]:', + 'LBL_SEND_ATTEMPTS' => 'Intentos de Envío', + 'LBL_OUTGOING_SECTION_HELP' => 'Configurar el servidor de correo saliente por defecto para enviar notificaciones de correo, incluyendo alertas de workflow.', + 'LBL_ALLOW_DEFAULT_SELECTION' => 'Permite a los usuarios utilizar esta cuenta para correo saliente:', + 'LBL_ALLOW_DEFAULT_SELECTION_HELP' => 'Cuando esta opción está seleccionada, todos los usuarios podrán enviar correos utilizando la misma
cuenta de correo saliente para enviar notificaciones del sistema y alertas. Si la opción no está seleccionada,
los usuarios podrán utilizar el servidor de correo saliente una vez proporcionen la información sobre su propia cuenta.', + 'LBL_FROM_ADDRESS_HELP' => 'Cuando esta activado, el nombre del usuario e Email del usuario que asigna se inluirá en el campo 'De' del Email. Es posible que esta funcionalidad no funcione con servidores SMTP que no permiten el envío desde una dirección de Email diferente a la de la cuenta del servidor.', + 'LBL_GMAIL_LOGO' => 'Gmail', + 'LBL_YAHOO_MAIL_LOGO' => 'Yahoo Mail', + 'LBL_EXCHANGE_LOGO' => 'Exchange', + 'LBL_HELP' => 'Ayuda', +); \ No newline at end of file diff --git a/modules/EmailMarketing/language/es_es.lang.php b/modules/EmailMarketing/language/es_es.lang.php new file mode 100644 index 00000000000..2a683c31d28 --- /dev/null +++ b/modules/EmailMarketing/language/es_es.lang.php @@ -0,0 +1,102 @@ + 'Dirección de "Responder a":', + 'LBL_REPLY_NAME' => 'Nombre de "Responder a":', + 'LBL_MODULE_NAME' => 'Marketing por Email', + 'LBL_MODULE_TITLE' => 'Marketing por Email: Inicio', + 'LBL_LIST_FORM_TITLE' => 'Campañas de Marketing por Email', + 'LBL_NAME' => 'Nombre:', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_FROM_ADDR' => 'Email Remitente', + 'LBL_LIST_DATE_START' => 'Fecha Inicio', + 'LBL_LIST_TEMPLATE_NAME' => 'Plantilla de Email', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_STATUS' => 'Estado', + 'LBL_STATUS_TEXT' => 'Estado:', + 'LBL_TEMPLATE_NAME' => 'Nombre de Plantilla', + 'LBL_DATE_ENTERED' => 'Fecha Creación', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación', + 'LBL_MODIFIED' => 'Modificado por:', + 'LBL_CREATED' => 'Creado por:', + 'LBL_MESSAGE_FOR' => 'Enviar este mensaje a:', + 'LBL_MESSAGE_FOR_ID' => 'Mensaje para', + 'LBL_FROM_NAME' => 'Nombre Remitente:', + 'LBL_FROM_ADDR' => 'Dirección Email Remitente:', + 'LBL_DATE_START' => 'Fecha Inicio', + 'LBL_TIME_START' => 'Hora Inicio', + 'LBL_START_DATE_TIME' => 'Fecha y Hora de Inicio:', + 'LBL_TEMPLATE' => 'Plantilla de Email:', + 'LBL_MODIFIED_BY' => 'Modificado por:', + 'LBL_CREATED_BY' => 'Creado por:', + 'LBL_DATE_CREATED' => 'Fecha creación:', + 'LBL_DATE_LAST_MODIFIED' => 'Fecha modificación:', + 'LNK_NEW_CAMPAIGN' => 'Crear Campaña', + 'LNK_CAMPAIGN_LIST' => 'Campañas', + 'LNK_NEW_PROSPECT_LIST' => 'Crear Lista de Público Objetivo', + 'LNK_PROSPECT_LIST_LIST' => 'Lista de Público Objetivo', + 'LNK_NEW_PROSPECT' => 'Crear Público Objetivo', + 'LNK_PROSPECT_LIST' => 'Público Objetivo', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Marketing por Email', + 'LBL_CREATE_EMAIL_TEMPLATE' => 'Crear', + 'LBL_EDIT_EMAIL_TEMPLATE' => 'Editar', + 'LBL_FROM_MAILBOX' => 'De buzón', + 'LBL_FROM_MAILBOX_NAME' => 'Usar buzón:', + 'LBL_PROSPECT_LIST_SUBPANEL_TITLE' => 'Listas de Público Objetivo', + 'LBL_ALL_PROSPECT_LISTS' => 'Seleccionar Todas las listas de público objetivo de la campaña.', + 'LBL_RELATED_PROSPECT_LISTS' => 'Todas las listas de público objetivo relacionadas con este mensaje.', + 'LBL_PROSPECT_LIST_NAME' => 'Nombre:', + 'LBL_LIST_PROSPECT_LIST_NAME' => 'Lista de Público Objetivo', + 'LBL_MODULE_SEND_TEST' => 'Campaña: Enviar Prueba', + 'LBL_MODULE_SEND_EMAILS' => 'Campaña: Enviar Emails', + 'LBL_SCHEDULE_MESSAGE_TEST' => 'Por favor, seleccione los mensajes de campaña que desea probar:', + 'LBL_SCHEDULE_MESSAGE_EMAILS' => 'Por favor, seleccione los mensajes de campaña que desea planificar para su distribución en la fecha y hora especificada:', + 'LBL_SCHEDULE_BUTTON_TITLE' => 'Enviar', + 'LBL_SCHEDULE_BUTTON_LABEL' => 'Enviar', + 'LBL_SCHEDULE_BUTTON_KEY' => 'T', +); \ No newline at end of file diff --git a/modules/EmailTemplates/language/es_es.lang.php b/modules/EmailTemplates/language/es_es.lang.php new file mode 100644 index 00000000000..a052b4c9a1b --- /dev/null +++ b/modules/EmailTemplates/language/es_es.lang.php @@ -0,0 +1,118 @@ + 'Agregar Otro Archivo', + 'LBL_ADD_DOCUMENT' => 'Agregar un Documento Sugar', + 'LBL_ADD_FILE' => 'Agregar un archivo', + 'LBL_ATTACHMENTS' => 'Adjuntos', + 'LBL_BODY' => 'Cuerpo:', + 'LBL_CLOSE' => 'Cerrado:', + 'LBL_COLON' => ':', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_EDIT_ALT_TEXT' => 'Editar Texto Plano', + 'LBL_EMAIL_ATTACHMENT' => 'Adjunto de Email', + 'LBL_HIDE_ALT_TEXT' => 'Ocultar texto plano', + 'LBL_HTML_BODY' => 'Cuerpo HTML', + 'LBL_INSERT_VARIABLE' => 'Insertar Variable:', + 'LBL_INSERT_URL_REF' => 'Insertar Referencia a URL', + 'LBL_INSERT_TRACKER_URL' => 'Insertar URL de Seguimiento:', + 'LBL_INSERT' => 'Insertar', + 'LBL_LIST_DATE_MODIFIED' => 'Última Modificación', + 'LBL_LIST_DESCRIPTION' => 'Descripción', + 'LBL_LIST_FORM_TITLE' => 'Lista de Plantillas de Email', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_MODULE_NAME' => 'Plantillas de Email', + 'LBL_MODULE_TITLE' => 'Plantillas de Email: Inicio', + 'LBL_NAME' => 'Nombre:', + 'LBL_NEW_FORM_TITLE' => 'Crear Plantilla de Email', + 'LBL_PUBLISH' => 'Publicación:', + 'LBL_RELATED_TO' => 'Relacionado con:', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Plantillas de Email', + 'LBL_SHOW_ALT_TEXT' => 'Mostrar Texto Plano', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_SUGAR_DOCUMENT' => 'Documento Sugar', + 'LBL_TEAMS' => 'Equipos:', + 'LBL_TEAMS_LINK' => 'Equipos', + 'LBL_TEXT_BODY' => 'Cuerpo de Texto', + 'LBL_USERS' => 'Usuarios', + 'LNK_ALL_EMAIL_LIST' => 'Todos los Emails', + 'LNK_ARCHIVED_EMAIL_LIST' => 'Emails Archivados', + 'LNK_CHECK_EMAIL' => 'Comprobar Email', + 'LNK_DRAFTS_EMAIL_LIST' => 'Borrador', + 'LNK_EMAIL_TEMPLATE_LIST' => 'Ver Plantillas de Email', + 'LNK_IMPORT_NOTES' => 'Importar Notas', + 'LNK_NEW_ARCHIVE_EMAIL' => 'Crear Email Archivado', + 'LNK_NEW_EMAIL_TEMPLATE' => 'Crear Plantilla de Email', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_NEW_SEND_EMAIL' => 'Redactar Email', + 'LNK_SENT_EMAIL_LIST' => 'Emails Enviados', + 'LNK_VIEW_CALENDAR' => 'Hoy', + 'LBL_NEW' => 'Nuevo', + 'LNK_CHECK_MY_INBOX' => 'Comprobar mi correo', + 'LNK_GROUP_INBOX' => 'Bandeja de Entrada Compartida', + 'LNK_MY_ARCHIVED_LIST' => 'Mis Archivos', + 'LNK_MY_DRAFTS' => 'Borradores', + 'LNK_MY_INBOX' => 'Mis Emails', + 'LBL_LIST_BASE_MODULE' => 'Módulo Base:', + 'LBL_TEXT_ONLY' => 'Sólo Texto', + 'LBL_SEND_AS_TEXT' => 'Enviar Sólo Texto', + 'LBL_ACCOUNT' => 'Cuenta', + 'LBL_BASE_MODULE' => 'Módulo Base', + 'LBL_FROM_NAME' => 'Nombre del Remitente', + 'LBL_PLAIN_TEXT' => 'Texto Plano', + 'LBL_CREATED_BY' => 'Creado Por', + 'LBL_FROM_ADDRESS' => 'Dirección del Remitente', + 'LBL_PUBLISHED' => 'Publicado', + 'LBL_ACTIVITIES_REPORTS' => 'Informe de Actividad', + 'LNK_VIEW_MY_INBOX' => 'Ver Mis Emails', + 'LBL_ASSIGNED_TO_ID' => 'Asignado a', + 'LBL_EDIT_LAYOUT' => 'Editar diseño', + 'LBL_SELECT' => 'Seleccionar', + 'LBL_ID_FF_CLEAR' => 'Limpiar', + 'LBL_TYPE' => 'Tipo', +); \ No newline at end of file diff --git a/modules/Emails/language/es_es.lang.php b/modules/Emails/language/es_es.lang.php new file mode 100644 index 00000000000..88aa28db3a2 --- /dev/null +++ b/modules/Emails/language/es_es.lang.php @@ -0,0 +1,375 @@ + 'RV:', + 'LBL_RE' => 'RE:', + 'LBL_BUTTON_CREATE' => 'Crear', + 'LBL_BUTTON_EDIT' => 'Editar', + 'LBL_QS_DISABLED' => '(La Búsqueda Rápida no está disponible para este módulo. Por favor, use el botón de selección.)', + 'LBL_SIGNATURE_PREPEND' => 'Firma sobre la respuesta', + 'LBL_EMAIL_DEFAULT_DESCRIPTION' => 'Este es el presupuesto que solicitó (Puede cambiar el texto)', + 'LBL_EMAIL_QUOTE_FOR' => 'Presupuesto para:', + 'LBL_QUOTE_LAYOUT_DOES_NOT_EXIST_ERROR' => 'el archivo de diseño del presupuesto no existe: $layout', + 'LBL_QUOTE_LAYOUT_REGISTERED_ERROR' => 'el diseño del presupuesto no está registrado en modules/Quotes/Layouts.php', + 'LBL_CONFIRM_DELETE' => '¿Está seguro de que desea eliminar esta carpeta?', + 'LBL_ENTER_FOLDER_NAME' => 'Por favor, introduzca un nombre de carpeta', + 'LBL_ERROR_SELECT_MODULE' => 'Por favor, seleccione un módulo para el campo Relacionado con', + 'ERR_ARCHIVE_EMAIL' => 'Error: Seleccione los emails a archivar.', + 'ERR_DATE_START' => 'Fecha de inicio', + 'ERR_DELETE_RECORD' => 'Error: Debe especificar un número de registro para eliminar la cuenta.', + 'ERR_NOT_ADDRESSED' => 'Error: El Email debe tener una dirección Para, CC o CCO', + 'ERR_TIME_START' => 'Hora de inicio', + 'ERR_TIME_SENT' => 'Hora de envío', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_ADD_ANOTHER_FILE' => 'Añadir Otro Archivo', + 'LBL_ADD_DASHLETS' => 'Agregar Sugar Dashlets', + 'LBL_ADD_DOCUMENT' => 'Agregar Documentos', + 'LBL_ADD_ENTRIES' => 'Agregar Entradas', + 'LBL_ADD_FILE' => 'Agregar Archivos', + 'LBL_ARCHIVED_EMAIL' => 'Email Archivado', + 'LBL_ARCHIVED_MODULE_NAME' => 'Crear Emails Archivados', + 'LBL_ARCHIVED_EMAILS_CREATE' => 'Crear', + 'LBL_ATTACHMENTS' => 'Adjuntos:', + 'LBL_HAS_ATTACHMENT' => '¿Tiene Adjunto?:', + 'LBL_BCC' => 'CCO:', + 'LBL_BODY' => 'Cuerpo:', + 'LBL_BUGS_SUBPANEL_TITLE' => 'Incidencias', + 'LBL_CC' => 'CC:', + 'LBL_COLON' => ':', + 'LBL_COMPOSE_MODULE_NAME' => 'Redactar Email', + 'LBL_CONTACT_FIRST_NAME' => 'Nombre del Contacto', + 'LBL_CONTACT_LAST_NAME' => 'Apellido del Contacto', + 'LBL_CONTACT_NAME' => 'Contacto:', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_CREATED_BY' => 'Creado por', + 'LBL_DATE_AND_TIME' => 'Fecha y hora envío:', + 'LBL_DATE_SENT' => 'Fecha Envío:', + 'LBL_DATE' => 'Fecha envío:', + 'LBL_DELETE_FROM_SERVER' => 'Eliminar mensaje del servidor', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_EDIT_ALT_TEXT' => 'Editar Texto Plano', + 'LBL_SEND_IN_PLAIN_TEXT' => 'Enviar en Texto Plano', + 'LBL_EDIT_MY_SETTINGS' => 'Editar Mi Configuración', + 'LBL_EMAIL_ATTACHMENT' => 'Archivo Adjunto', + 'LBL_EMAIL_EDITOR_OPTION' => 'Enviar correo HTML', + 'LBL_EMAIL_SELECTOR_SELECT' => 'Seleccionar', + 'LBL_EMAIL_SELECTOR_CLEAR' => 'Limpiar', + 'LBL_EMAIL' => 'Correo electrónico:', + 'LBL_EMAILS_ACCOUNTS_REL' => 'Emails:Cuentas', + 'LBL_EMAILS_BUGS_REL' => 'Emails:Incidencias', + 'LBL_EMAILS_CASES_REL' => 'Emails:Casos', + 'LBL_EMAILS_CONTACTS_REL' => 'Emails:Contactos', + 'LBL_EMAILS_LEADS_REL' => 'Emails:Clientes Potenciales', + 'LBL_EMAILS_OPPORTUNITIES_REL' => 'Emails:Oportunidades', + 'LBL_EMAILS_NOTES_REL' => 'Emails:Notas', + 'LBL_EMAILS_PROJECT_REL' => 'Emails:Proyecto', + 'LBL_EMAILS_PROJECT_TASK_REL' => 'Emails:Tareas de proyecto', + 'LBL_EMAILS_PROSPECT_REL' => 'Emails:Público objetivo', + 'LBL_EMAILS_TASKS_REL' => 'Emails:Tareas', + 'LBL_EMAILS_USERS_REL' => 'Emails:Usuarios', + 'LBL_EMPTY_FOLDER' => 'No hay emails a mostrar', + 'LBL_ERROR_SENDING_EMAIL' => 'Error enviando email', + 'LBL_ERROR_SAVING_DRAFT' => 'Error Guardando Borrador', + 'LBL_FORWARD_HEADER' => 'Inicio de mensaje reenviado:', + 'LBL_FROM_NAME' => 'Nombre Remitente', + 'LBL_FROM' => 'De:', + 'LBL_REPLY_TO' => 'Responder A:', + 'LBL_HTML_BODY' => 'Cuerpo de HTML', + 'LBL_INVITEE' => 'Destinatarios', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_MESSAGE_SENT' => 'Mensaje Enviado', + 'LBL_MODIFIED_BY' => 'Modificado Por', + 'LBL_MODULE_NAME_NEW' => 'Archivar Email', + 'LBL_MODULE_NAME' => 'Todos los Emails', + 'LBL_MODULE_TITLE' => 'Emails: Inicio', + 'LBL_MY_EMAILS' => 'Mis Emails', + 'LBL_NEW_FORM_TITLE' => 'Guardar Email', + 'LBL_NONE' => 'Ninguno', + 'LBL_NOT_SENT' => 'Error de Envío', + 'LBL_NOTE_SEMICOLON' => 'Nota: Utilice una coma o un punto y coma como separadores de múltiples direcciones de email.', + 'LBL_NOTES_SUBPANEL_TITLE' => 'Datos Adjuntos', + 'LBL_OPPORTUNITY_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_PROJECT_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_PROJECT_TASK_SUBPANEL_TITLE' => 'Tareas de Proyecto', + 'LBL_RAW' => 'Código fuente del email', + 'LBL_SAVE_AS_DRAFT_BUTTON_KEY' => 'R', + 'LBL_SAVE_AS_DRAFT_BUTTON_LABEL' => 'Guardar Borrador', + 'LBL_SAVE_AS_DRAFT_BUTTON_TITLE' => 'Guardar Borrador [Alt+R]', + 'LBL_SEARCH_FORM_DRAFTS_TITLE' => 'Buscar Borradores', + 'LBL_SEARCH_FORM_SENT_TITLE' => 'Buscar Emails Enviados', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Emails', + 'LBL_SEND_ANYWAYS' => 'Este correo no tiene asunto. ¿Enviar/guardar de todas formas?', + 'LBL_SEND_BUTTON_KEY' => 'S', + 'LBL_SEND_BUTTON_LABEL' => 'Enviar', + 'LBL_SEND_BUTTON_TITLE' => 'Enviar [Alt+S]', + 'LBL_SEND' => 'ENVIAR', + 'LBL_SENT_MODULE_NAME' => 'Emails Enviados', + 'LBL_SHOW_ALT_TEXT' => 'Mostrar Texto Plano', + 'LBL_SIGNATURE' => 'Firma', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_TEXT_BODY' => 'Cuerpo de Texto', + 'LBL_TIME' => 'Hora envío:', + 'LBL_TO_ADDRS' => 'Para', + 'LBL_USE_TEMPLATE' => 'Usar Plantilla:', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LBL_USERS' => 'Usuarios', + 'LNK_ALL_EMAIL_LIST' => 'Todos los Emails', + 'LNK_ARCHIVED_EMAIL_LIST' => 'Emails Archivados', + 'LNK_CALL_LIST' => 'Llamadas', + 'LNK_DRAFTS_EMAIL_LIST' => 'Borradores', + 'LNK_EMAIL_LIST' => 'Emails', + 'LBL_EMAIL_RELATE' => 'Relacionado con', + 'LNK_EMAIL_TEMPLATE_LIST' => 'Ver Plantillas de Email', + 'LNK_MEETING_LIST' => 'Reuniones', + 'LNK_NEW_ARCHIVE_EMAIL' => 'Crear Email Archivado', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_EMAIL_TEMPLATE' => 'Crear Plantilla de Email', + 'LNK_NEW_EMAIL' => 'Enviar Email', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_NOTE' => 'Nueva Nota o Archivo Adjunto', + 'LNK_NEW_SEND_EMAIL' => 'Redactar', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'LNK_NOTE_LIST' => 'Notas', + 'LNK_SENT_EMAIL_LIST' => 'Emails Enviados', + 'LNK_TASK_LIST' => 'Tareas', + 'LNK_VIEW_CALENDAR' => 'Hoy', + 'LBL_LIST_ASSIGNED' => 'Asignado', + 'LBL_LIST_CONTACT_NAME' => 'Nombre Contacto', + 'LBL_LIST_CREATED' => 'Creado', + 'LBL_LIST_DATE_SENT' => 'Fecha Envío', + 'LBL_LIST_DATE' => 'Fecha Envío', + 'LBL_LIST_FORM_DRAFTS_TITLE' => 'Borrador', + 'LBL_LIST_FORM_SENT_TITLE' => 'Emails Enviados', + 'LBL_LIST_FORM_TITLE' => 'Lista de Emails', + 'LBL_LIST_FROM_ADDR' => 'De', + 'LBL_LIST_RELATED_TO' => 'Tipo de Destinatario', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_TIME' => 'Hora Envío', + 'LBL_LIST_TO_ADDR' => 'Para', + 'LBL_LIST_TYPE' => 'Tipo', + 'NTC_REMOVE_INVITEE' => '¿Está seguro de que desea eliminar este destinatario del email?', + 'WARNING_SETTINGS_NOT_CONF' => 'Advertencia: Su configuración de correo no está preparada para el envío de correo.', + 'WARNING_NO_UPLOAD_DIR' => 'Los adjuntos podrían no funcionar: No se ha dado un valor a la variable de configuración "upload_tmp_dir". Por favor, corrija esto en su archivo php.ini.', + 'WARNING_UPLOAD_DIR_NOT_WRITABLE' => 'Los adjuntos podrían no funcionar: Se ha dado un valor incorrecto o no utilizable a la variable de configuración "upload_tmp_dir". Por favor, corrija esto en su archivo php.ini.', + 'LBL_BUTTON_RAW_TITLE' => 'Mostrar Código Fuente del Mensaje [Alt+E]', + 'LBL_BUTTON_RAW_KEY' => 'e', + 'LBL_BUTTON_RAW_LABEL' => 'Mostrar Código Fuente', + 'LBL_BUTTON_RAW_LABEL_HIDE' => 'Ocultar Código Fuente', + 'LBL_BUTTON_CHECK' => 'Comprobar Correo', + 'LBL_BUTTON_CHECK_TITLE' => 'Comprobar Correo Nuevo [Alt+C]', + 'LBL_BUTTON_CHECK_KEY' => 'c', + 'LBL_BUTTON_FORWARD' => 'Reenviar', + 'LBL_BUTTON_FORWARD_TITLE' => 'Reenviar este Correo [Alt+F]', + 'LBL_BUTTON_FORWARD_KEY' => 'f', + 'LBL_BUTTON_REPLY_KEY' => 'r', + 'LBL_BUTTON_REPLY_TITLE' => 'Responder [Alt+R]', + 'LBL_BUTTON_REPLY' => 'Responder', + 'LBL_BUTTON_REPLY_ALL' => 'Responder a Todos', + 'LBL_CASES_SUBPANEL_TITLE' => 'Casos', + 'LBL_INBOUND_TITLE' => 'Correo Entrante', + 'LBL_INTENT' => 'Intento', + 'LBL_MESSAGE_ID' => 'ID Mensaje', + 'LBL_REPLY_HEADER_1' => 'El', + 'LBL_REPLY_HEADER_2' => 'escribió:', + 'LBL_REPLY_TO_ADDRESS' => 'Dirección de Responder A', + 'LBL_REPLY_TO_NAME' => 'Nombre de Responder A', + 'LBL_LIST_BUG' => 'Incidencias', + 'LBL_LIST_CASE' => 'Casos', + 'LBL_LIST_CONTACT' => 'Contactos', + 'LBL_LIST_LEAD' => 'Clientes Potenciales', + 'LBL_LIST_TASK' => 'Tareas', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_ALL' => 'Todo', + 'LBL_ASSIGN_WARN' => 'Asegúrese de que las dos opciones están seleccionadas.', + 'LBL_BACK_TO_GROUP' => 'Volver a Bandeja de Entrada de Grupo', + 'LBL_BUTTON_DISTRIBUTE_KEY' => 'a', + 'LBL_BUTTON_DISTRIBUTE_TITLE' => 'Asignar [Alt+A]', + 'LBL_BUTTON_DISTRIBUTE' => 'Asignar', + 'LBL_BUTTON_GRAB_KEY' => 't', + 'LBL_BUTTON_GRAB_TITLE' => 'Tomar del Grupo [Alt+T]', + 'LBL_BUTTON_GRAB' => 'Tomar del Grupo', + 'LBL_CREATE_BUG' => 'Nueva Incidencia', + 'LBL_CREATE_CASE' => 'Nuevo Caso', + 'LBL_CREATE_CONTACT' => 'Nuevo Contacto', + 'LBL_CREATE_LEAD' => 'Nuevo Cliente Potencial', + 'LBL_CREATE_TASK' => 'Nueva Tarea', + 'LBL_DIST_TITLE' => 'Asignación', + 'LBL_LOCK_FAIL_DESC' => 'El elemento elegido no está disponible actualmente.', + 'LBL_LOCK_FAIL_USER' => 'ha tomado posesión.', + 'LBL_MASS_DELETE_ERROR' => 'No se ha seleccionado ningún elemento para su borrado.', + 'LBL_NEW' => 'Nuevo', + 'LBL_NEXT_EMAIL' => 'Siguiente Elemento Libre', + 'LBL_NO_GRAB_DESC' => 'No hay elementos disponibles. Inténtelo más tarde.', + 'LBL_QUICK_REPLY' => 'Responder', + 'LBL_REPLIED' => 'Respondido', + 'LBL_SELECT_TEAM' => 'Seleccionar Equipos', + 'LBL_TAKE_ONE_TITLE' => 'Reps', + 'LBL_TITLE_SEARCH_RESULTS' => 'Resultados de la Búsqueda', + 'LBL_TO' => 'Para:', + 'LBL_TOGGLE_ALL' => 'Cambiar Todo', + 'LBL_UNKNOWN' => 'Desconocido', + 'LBL_UNREAD_HOME' => 'Emails no leídos', + 'LBL_UNREAD' => 'No leído', + 'LBL_USE_ALL' => 'Todos los Resultados de Búsqueda', + 'LBL_USE_CHECKED' => 'Sólo Marcados', + 'LBL_USE_MAILBOX_INFO' => 'Usar dirección De: del buzón', + 'LBL_USE' => 'Asignar:', + 'LBL_ASSIGN_SELECTED_RESULTS_TO' => 'Asignar Resultados Seleccionados a:', + 'LBL_USER_SELECT' => 'Seleccionar Usuarios', + 'LBL_USING_RULES' => 'Usando Reglas:', + 'LBL_WARN_NO_DIST' => 'No se ha seleccionado el método de distribución', + 'LBL_WARN_NO_USERS' => 'No se han seleccionado usuarios', + 'LBL_WARN_NO_USERS_OR_TEAM' => 'Por favor, seleccione un usuario o equipo para su asignación.', + 'LBL_IMPORT_STATUS_TITLE' => 'Estado', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_TITLE_GROUP_INBOX' => 'Bandeja de Entrada de Grupo', + 'LBL_LIST_TITLE_MY_DRAFTS' => 'Borradores', + 'LBL_LIST_TITLE_MY_INBOX' => 'Bandeja de Entrada', + 'LBL_LIST_TITLE_MY_SENT' => 'Elementos Enviados', + 'LBL_LIST_TITLE_MY_ARCHIVES' => 'Mis Emails Archivados', + 'LBL_ACTIVITIES_REPORTS' => 'Informe de Actividad', + 'LNK_CHECK_MY_INBOX' => 'Comprobar Mi Correo', + 'LNK_DATE_SENT' => 'Fecha de Envío', + 'LNK_GROUP_INBOX' => 'Bandeja de Entrada de Grupo', + 'LNK_MY_DRAFTS' => 'Borradores', + 'LNK_MY_INBOX' => 'Mi Correo', + 'LNK_VIEW_MY_INBOX' => 'Ver Mi Correo', + 'LNK_QUICK_REPLY' => 'Responder', + 'LNK_MY_ARCHIVED_LIST' => 'Mis Archivos', + 'LBL_EMAILS_NO_PRIMARY_TEAM_SPECIFIED' => 'No se ha especificado un Equipo Principal', + 'LBL_ASSIGNED_TO' => 'Asignado A:', + 'LBL_MEMBER_OF' => 'Padre', + 'LBL_QUICK_CREATE' => 'Creación Rápida', + 'LBL_STATUS' => 'Estado de Email:', + 'LBL_EMAIL_FLAGGED' => 'Etiquetado:', + 'LBL_EMAIL_REPLY_TO_STATUS' => 'Estado de Responder A:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_EMAILTEMPLATE_MESSAGE_SHOW_TITLE' => '¡Por favor, compruebe los siguiente!', + 'LBL_EMAILTEMPLATE_MESSAGE_SHOW_MSG' => 'Al seleccionar esta plantilla el cuerpo del correo ya introducido será reemplazado. ¿Desea continuar?', + 'LBL_EMAILTEMPLATE_MESSAGE_CLEAR_MSG' => 'Al seleccionar "--Ninguno--" se limpiará cualquier información ya introducida en el cuerpo del correo. ¿Desea continuar?', + 'LBL_EMAILTEMPLATE_MESSAGE_WARNING_TITLE' => 'Aviso', + 'LBL_EMAILTEMPLATE_MESSAGE_MULTIPLE_RECIPIENTS' => 'Utilizar una plantilla de correo electrónico que contiene las variables de contacto, como el nombre del contacto, para enviar mensajes de correo electrónico a varios destinatarios puede tener resultados inesperados. Se recomienda que se utilice una campaña de correo electrónico para envíos masivos.', + 'LBL_CHECK_ATTACHMENTS' => 'Por favor, compruebe los archivos adjuntos.', + 'LBL_HAS_ATTACHMENTS' => 'Este email ya tiene archivos adjuntos. ¿Desea preservarlos?', + 'ERR_MISSING_REQUIRED_FIELDS' => 'Falta campo requerido', + 'ERR_INVALID_REQUIRED_FIELDS' => 'Campo requerido no válido', + 'LBL_FILTER_BY_RELATED_BEAN' => 'Sólo mostrar destinatarios relacionados', + 'LBL_RECIPIENTS_HAVE_BEEN_ADDED' => 'Se han añadido los destinatarios.', + 'LBL_ADD_INBOUND_ACCOUNT' => 'Añadir', + 'LBL_ADD_OUTBOUND_ACCOUNT' => 'Añadir', + 'LBL_EMAIL_ACCOUNTS_INBOUND' => 'Propiedades de Cuenta de Correo', + 'LBL_EMAIL_SETTINGS_OUTBOUND_ACCOUNT' => 'Servidor de Correo Saliente SMTP', + 'LBL_EMAIL_SETTINGS_OUTBOUND_ACCOUNTS' => 'Servidores de Correo Saliente SMTP', + 'LBL_EMAIL_SETTINGS_INBOUND_ACCOUNTS' => 'Cuentas de Correo', + 'LBL_EMAIL_SETTINGS_INBOUND' => 'Correo Entrante', + 'LBL_EMAIL_SETTINGS_OUTBOUND' => 'Correo Saliente', + 'LBL_ADD_CC' => 'Añadir Cc', + 'LBL_ADD_BCC' => 'Añadir Cco', + 'LBL_MOVE_TO_BCC' => 'Mover a Bcc', + 'LBL_ADD_TO_ADDR' => 'Añadir Para', + 'LBL_SELECTED_ADDR' => 'Seleccionado', + 'LBL_ADD_CC_BCC_SEP' => '|', + 'LBL_SEND_EMAIL_FAIL_TITLE' => 'Error Enviando Correo', + 'LBL_EMAIL_DETAIL_VIEW_SHOW' => 'mostrar', + 'LBL_EMAIL_DETAIL_VIEW_MORE' => 'más', + 'LBL_MORE_OPTIONS' => 'Más', + 'LBL_LESS_OPTIONS' => 'Menos', + 'LBL_MAILBOX_TYPE_PERSONAL' => 'Personal', + 'LBL_MAILBOX_TYPE_GROUP' => 'Grupo', + 'LBL_MAILBOX_TYPE_GROUP_FOLDER' => 'Grupo - Auto-Importación', + 'LBL_SEARCH_FOR' => 'Buscar', + 'LBL_EMAIL_INBOUND_TYPE_HELP' => 'Personal: Cuenta de correo accesible por usted. Sólo usted puede administrar e importar correos desde esta cuenta.
Grupo: Cuenta de correo accesible por miembros de equipos específicos. Los miembros de equipos pueden administrar e importar correos de esta cuenta.
Grupo - auto-importación: Cuenta de correo accesible por miembros de equipos específicos. Los correos son importados como registros de forma automática.', + 'LBL_ADDRESS_BOOK_SEARCH_HELP' => 'Introduzca una dirección de correo, Nombre, Apellido o Nombre de Cuenta para encontrar destinatarios.', + 'LBL_TEST_SETTINGS' => 'Probar Configuración', + 'LBL_EMPTY_EMAIL_BODY' => '

Este Mensaje No Tiene Contenido

', + 'LBL_TEST_EMAIL_SUBJECT' => 'Correo de Prueba desde Sugar', + 'LBL_NO_SUBJECT' => '(sin asunto)', + 'LBL_CHECKING_ACCOUNT' => 'Comprobando Cuenta', + 'LBL_OF' => 'de', + 'LBL_TEST_EMAIL_BODY' => 'Este correo se ha enviado para comprobar la información sobre el servidor de correo saliente proporcionada en la aplicación Sugar. La recepción con éxito de este correo confirma que la información proporcionada acerca del servidor de correo saliente es válida.', + 'LBL_MAIL_SMTPUSER' => 'Nombre de usuario SMTP:', + 'LBL_MAIL_SMTPPASS' => 'Contraseña SMTP:', + 'LBL_MAIL_SMTPSERVER' => 'Servidor SMTP:', + 'LBL_SMTP_SERVER_HELP' => 'Este Servidor de Correo SMTP puede utilizarse para correo saliente. Proporcione el nombre de usuario y la contraseña de su cuenta de correo para usar el servidor de correo.', + 'LBL_MISSING_DEFAULT_OUTBOUND_SMTP_SETTINGS' => 'El administrador aún no ha configurado la cuenta saliente por defecto. No es posible enviar un correo de prueba.', + 'LBL_MAIL_SMTPAUTH_REQ' => '¿Usar autenticación SMTP?', + 'LBL_MAIL_SMTPPORT' => 'Puerto SMTP:', + 'LBL_MAIL_SMTPTYPE' => 'Tipo de Servidor SMTP:', + 'LBL_MAIL_SMTP_SETTINGS' => 'Especificación de Servidor SMTP', + 'LBL_CHOOSE_EMAIL_PROVIDER' => 'Elija su proveedor de Email:', + 'LBL_YAHOOMAIL_SMTPPASS' => 'Contraseña de Yahoo! Mail:', + 'LBL_YAHOOMAIL_SMTPUSER' => 'ID de Yahoo! Mail:', + 'LBL_GMAIL_SMTPPASS' => 'Contraseña de Gmail:', + 'LBL_GMAIL_SMTPUSER' => 'Dirección de Email de Gmail:', + 'LBL_EXCHANGE_SMTPPASS' => 'Contraseña de Exchange:', + 'LBL_EXCHANGE_SMTPUSER' => 'Nombre de usuario de Exchange:', + 'LBL_EXCHANGE_SMTPPORT' => 'Puerto de Servidor Exchange:', + 'LBL_EXCHANGE_SMTPSERVER' => 'Servidor Exchange:', + 'LBL_EDIT_LAYOUT' => 'Editar diseño', + 'LBL_ATTACHMENT' => 'Adjunto', + 'LBL_DELETE_INLINE' => 'Eliminar', + 'LBL_CREATE_CASES' => 'Crear caso', + 'LBL_CREATE_LEADS' => 'Crear cliente potencial', + 'LBL_CREATE_CONTACTS' => 'Crear contacto', + 'LBL_CREATE_BUGS' => 'Crear incidencia', + 'LBL_CREATE_TASKS' => 'Crear tarea', + 'LBL_CHECK_INLINE' => 'Correcto', + 'LBL_CLOSE' => 'Cerrar', + 'LBL_HELP' => 'Ayuda', + 'LBL_GMAIL_LOGO' => 'Gmail', + 'LBL_YAHOO_MAIL' => 'Yahoo', + 'LBL_EXCHANGE_LOGO' => 'Exchange', + 'LBL_WAIT' => 'Esperar', + 'LBL_CHECKEMAIL' => 'Revisar el correo electrónico', + 'LBL_COMPOSEEMAIL' => 'Redactar Email', + 'LBL_EMAILSETTINGS' => 'Configuración de Email', + 'LBL_CONTACTS_SUBPANEL_TITLE_SNIP' => 'Contactos de correo electrónico', + 'LBL_EMAILS_MEETINGS_REL' => 'Emails:Reuniones', + 'LBL_DATE_CREATED' => 'Fecha de creación', + 'LBL_DATE_MODIFIED' => 'Fecha de modificación', +); \ No newline at end of file diff --git a/modules/Employees/language/es_es.lang.php b/modules/Employees/language/es_es.lang.php new file mode 100644 index 00000000000..f2d9190e1aa --- /dev/null +++ b/modules/Employees/language/es_es.lang.php @@ -0,0 +1,162 @@ + 'Empleados', + 'LBL_MODULE_TITLE' => 'Empleados: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Empleados', + 'LBL_LIST_FORM_TITLE' => 'Empleados', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Empleado', + 'LBL_EMPLOYEE' => 'Empleado:', + 'LBL_LOGIN' => 'Nombre de Usuario', + 'LBL_RESET_PREFERENCES' => 'Restablecer Preferencias Por Defecto', + 'LBL_TIME_FORMAT' => 'Formato Hora:', + 'LBL_DATE_FORMAT' => 'Formato Fecha:', + 'LBL_TIMEZONE' => 'Zona Horaria:', + 'LBL_CURRENCY' => 'Moneda:', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_LAST_NAME' => 'Apellido', + 'LBL_LIST_EMPLOYEE_NAME' => 'Nombre del Empleado', + 'LBL_LIST_DEPARTMENT' => 'Departamento', + 'LBL_LIST_REPORTS_TO_NAME' => 'Informa a', + 'LBL_LIST_EMAIL' => 'Email', + 'LBL_LIST_PRIMARY_PHONE' => 'Teléfono Principal', + 'LBL_LIST_USER_NAME' => 'Nombre de Usuario', + 'LBL_LIST_ADMIN' => 'Admin', + 'LBL_NEW_EMPLOYEE_BUTTON_TITLE' => 'Nuevo Empleado [Alt+N]', + 'LBL_NEW_EMPLOYEE_BUTTON_LABEL' => 'Nuevo Empleado', + 'LBL_NEW_EMPLOYEE_BUTTON_KEY' => 'N', + 'LBL_ERROR' => 'Error:', + 'LBL_PASSWORD' => 'Contraseña:', + 'LBL_EMPLOYEE_NAME' => 'Nombre de Empleado:', + 'LBL_USER_NAME' => 'Nombre de Usuario:', + 'LBL_USER_TYPE' => 'Tipo de Usuario', + 'LBL_FIRST_NAME' => 'Nombre:', + 'LBL_LAST_NAME' => 'Apellido:', + 'LBL_EMPLOYEE_SETTINGS' => 'Preferencias del Empleado', + 'LBL_THEME' => 'Tema:', + 'LBL_LANGUAGE' => 'Idioma:', + 'LBL_ADMIN' => 'Administrador:', + 'LBL_EMPLOYEE_INFORMATION' => 'Información del Empleado', + 'LBL_OFFICE_PHONE' => 'Tel. Oficina:', + 'LBL_REPORTS_TO' => 'Informa a Id:', + 'LBL_REPORTS_TO_NAME' => 'Informa a:', + 'LBL_OTHER_PHONE' => 'Otro:', + 'LBL_OTHER_EMAIL' => 'Email Alternativo:', + 'LBL_NOTES' => 'Notas:', + 'LBL_DEPARTMENT' => 'Departamento:', + 'LBL_TITLE' => 'Título:', + 'LBL_ANY_ADDRESS' => 'Dirección Alternativa:', + 'LBL_ANY_PHONE' => 'Tel. Alternativo:', + 'LBL_ANY_EMAIL' => 'Email Alternativo:', + 'LBL_ADDRESS' => 'Dirección:', + 'LBL_CITY' => 'Ciudad:', + 'LBL_STATE' => 'Estado/Provincia:', + 'LBL_POSTAL_CODE' => 'Código Postal:', + 'LBL_COUNTRY' => 'País:', + 'LBL_NAME' => 'Nombre:', + 'LBL_MOBILE_PHONE' => 'Móvil:', + 'LBL_OTHER' => 'Otro:', + 'LBL_FAX' => 'Fax:', + 'LBL_EMAIL' => 'Correo electrónico:', + 'LBL_EMAIL_LINK_TYPE' => 'Cliente de Correo', + 'LBL_EMAIL_LINK_TYPE_HELP' => 'Cliente de Correo Sugar: Enviar correos usando el cliente de correo de la aplicación Sugar.
Cliente de Correo Externo: Enviar correo usando un cliente de correo externo a la aplicación Sugar, como Microsoft Outlook.', + 'LBL_HOME_PHONE' => 'Tel. Casa:', + 'LBL_WORK_PHONE' => 'Tel. Trabajo:', + 'LBL_ADDRESS_INFORMATION' => 'Información de Dirección', + 'LBL_EMPLOYEE_STATUS' => 'Estado del Empleado:', + 'LBL_PRIMARY_ADDRESS' => 'Dirección Principal:', + 'LBL_SAVED_SEARCH' => 'Opciones de Diseño', + 'LBL_CREATE_USER_BUTTON_TITLE' => 'Crear Usuario [Alt+N]', + 'LBL_CREATE_USER_BUTTON_LABEL' => 'Crear Usuario', + 'LBL_CREATE_USER_BUTTON_KEY' => 'N', + 'LBL_FAVORITE_COLOR' => 'Color Favorito:', + 'LBL_MESSENGER_ID' => 'Nombre MI:', + 'LBL_MESSENGER_TYPE' => 'Tipo MI:', + 'ERR_EMPLOYEE_NAME_EXISTS_1' => 'El nombre del empleado', + 'ERR_EMPLOYEE_NAME_EXISTS_2' => 'ya existe. No se permiten empleados duplicados. Cambie el nombre del empleado para que sea único.', + 'ERR_LAST_ADMIN_1' => 'El nombre del empleado "', + 'ERR_LAST_ADMIN_2' => '" es el último empleado con permisos de administrador. Al menos un empleado debe ser un administrador.', + 'LNK_NEW_EMPLOYEE' => 'Crear Empleado', + 'LNK_EMPLOYEE_LIST' => 'Ver Empleados', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar el empleado.', + 'LBL_LIST_EMPLOYEE_STATUS' => 'Estado del Empleado', + 'LBL_SUGAR_LOGIN' => 'Es Usuario de Sugar', + 'LBL_RECEIVE_NOTIFICATIONS' => 'Notificar al ser Asignado', + 'LBL_IS_ADMIN' => 'Es Administrador', + 'LBL_GROUP' => 'Usuario de Grupo', + 'LBL_PORTAL_ONLY' => 'Usuario Sólo de Portal', + 'LBL_PHOTO' => 'Foto', + 'LBL_DELETE_USER_CONFIRM' => 'Este Empleado es un Usuario. Eliminando este Empleado también se eliminara el Usuario y el Usuario no podrá seguir accediendo a la aplicación. ¿Desea continuar con la eliminación de este registro?', + 'LBL_DELETE_EMPLOYEE_CONFIRM' => '¿Está seguro que desea eliminar este Empleado?', + 'LBL_ONLY_ACTIVE' => 'Empleados Activos', + 'LBL_SELECT' => 'Seleccionar', + 'LBL_FF_CLEAR' => 'Borrar', + 'LBL_AUTHENTICATE_ID' => 'Id Autenticación', + 'LBL_EXT_AUTHENTICATE' => 'Autenticación Externa', + 'LBL_GROUP_USER' => 'Usuario del Grupo', + 'LBL_LIST_ACCEPT_STATUS' => 'Aceptar Estato', + 'LBL_MODIFIED_BY' => 'Modificado Por', + 'LBL_MODIFIED_BY_ID' => 'Modificado por Id', + 'LBL_CREATED_BY_NAME' => 'Creado por', + 'LBL_PORTAL_ONLY_USER' => 'Usuario de la API del Portal', + 'LBL_PSW_MODIFIED' => 'Último Cambio de la Contraseña', + 'LBL_SHOW_ON_EMPLOYEES' => 'Visualización del Registro de Empleados', + 'LBL_USER_HASH' => 'Contraseña:', + 'LBL_SYSTEM_GENERATED_PASSWORD' => 'Contraseña Generada por el Sistema', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_FAX_PHONE' => 'Fax:', + 'LBL_STATUS' => 'Estado', + 'LBL_ADDRESS_CITY' => 'Ciudad', + 'LBL_ADDRESS_COUNTRY' => 'País', + 'LBL_ADDRESS_POSTALCODE' => 'Código Postal', + 'LBL_ADDRESS_STATE' => 'Estado/Provincia', + 'LBL_ADDRESS_STREET' => 'Dirección', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DELETED' => 'Eliminado', +); \ No newline at end of file diff --git a/modules/Groups/language/es_es.lang.php b/modules/Groups/language/es_es.lang.php new file mode 100644 index 00000000000..348840f4a42 --- /dev/null +++ b/modules/Groups/language/es_es.lang.php @@ -0,0 +1,57 @@ + 'Grupos', + 'LBL_GROUP_NAME' => 'Nombre del Grupo:', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_TEAM' => 'Equipo:', + 'LBL_LIST_TITLE' => 'Grupos', + 'LNK_ALL_GROUPS' => 'Todos los Grupos', + 'LNK_NEW_GROUP' => 'Nuevo Grupo', + 'LNK_CONVERT_USER' => 'Convertir Usuario en Grupo', +); \ No newline at end of file diff --git a/modules/Help/language/es_es.lang.php b/modules/Help/language/es_es.lang.php new file mode 100644 index 00000000000..1eabcb881d5 --- /dev/null +++ b/modules/Help/language/es_es.lang.php @@ -0,0 +1,64 @@ + 'Cuentas', + 'LBL_MODULE_TITLE' => 'Cuentas: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Cuentas', + 'LBL_LIST_FORM_TITLE' => 'Lista de Cuentas', + 'LBL_NEW_FORM_TITLE' => 'Nueva Cuenta', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'LNK_NEW_NOTE' => 'Nueva Nota o Archivo Adjunto', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a eliminar.', +); \ No newline at end of file diff --git a/modules/History/language/es_es.lang.php b/modules/History/language/es_es.lang.php new file mode 100644 index 00000000000..13a3bacc87a --- /dev/null +++ b/modules/History/language/es_es.lang.php @@ -0,0 +1,126 @@ + 'Historial', + 'LBL_MODULE_TITLE' => 'Historial: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda en Historial', + 'LBL_LIST_FORM_TITLE' => 'Historial', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_CONTACT' => 'Contacto', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_DATE' => 'Fecha', + 'LBL_LIST_TIME' => 'Hora de Inicio', + 'LBL_LIST_CLOSE' => 'Cierre', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_STATUS' => 'Estado:', + 'LBL_LOCATION' => 'Lugar:', + 'LBL_DATE_TIME' => 'Fecha y Hora de Inicio:', + 'LBL_DATE' => 'Fecha de Inicio:', + 'LBL_TIME' => 'Hora de Inicio:', + 'LBL_DURATION' => 'Duración:', + 'LBL_HOURS_MINS' => '(horas/minutos)', + 'LBL_CONTACT_NAME' => 'Nombre del Contacto:', + 'LBL_MEETING' => 'Reunión:', + 'LBL_DESCRIPTION_INFORMATION' => 'Información de Descripción', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_COLON' => ':', + 'LBL_DEFAULT_STATUS' => 'Planificado', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_TASK' => 'Crear Tarea', + 'LNK_NEW_NOTE' => 'Crear Nota o Adjunto', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_CALL_LIST' => 'Llamadas', + 'LNK_MEETING_LIST' => 'Reuniones', + 'LNK_TASK_LIST' => 'Tareas', + 'LNK_NOTE_LIST' => 'Notas', + 'LNK_EMAIL_LIST' => 'Emails', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la cuenta.', + 'NTC_REMOVE_INVITEE' => '¿Está seguro de que desea quitar a este asistente de la reunión?', + 'LBL_INVITEE' => 'Asistentes', + 'LBL_LIST_DIRECTION' => 'Dirección', + 'LBL_DIRECTION' => 'Dirección', + 'LNK_NEW_APPOINTMENT' => 'Nueva Cita', + 'LNK_VIEW_CALENDAR' => 'Hoy', + 'LBL_OPEN_ACTIVITIES' => 'Actividades Abiertas', + 'LBL_HISTORY' => 'Historial', + 'LBL_UPCOMING' => 'Mis Próximas Citas', + 'LBL_TODAY' => 'hasta', + 'LBL_NEW_TASK_BUTTON_TITLE' => 'Crear Tarea [Alt+N]', + 'LBL_NEW_TASK_BUTTON_KEY' => 'N', + 'LBL_NEW_TASK_BUTTON_LABEL' => 'Crear Tarea', + 'LBL_SCHEDULE_MEETING_BUTTON_TITLE' => 'Programar Reunión [Alt+M]', + 'LBL_SCHEDULE_MEETING_BUTTON_KEY' => 'M', + 'LBL_SCHEDULE_MEETING_BUTTON_LABEL' => 'Programar Reunión', + 'LBL_SCHEDULE_CALL_BUTTON_TITLE' => 'Registrar Llamada [Alt+C]', + 'LBL_SCHEDULE_CALL_BUTTON_KEY' => 'C', + 'LBL_SCHEDULE_CALL_BUTTON_LABEL' => 'Registrar LLamada', + 'LBL_NEW_NOTE_BUTTON_TITLE' => 'Crear Nota o Archivo Adjunto [Alt+T]', + 'LBL_NEW_NOTE_BUTTON_KEY' => 'T', + 'LBL_NEW_NOTE_BUTTON_LABEL' => 'Crear Nota o Archivo Adjunto', + 'LBL_TRACK_EMAIL_BUTTON_TITLE' => 'Archivar Email [Alt+K]', + 'LBL_TRACK_EMAIL_BUTTON_KEY' => 'K', + 'LBL_TRACK_EMAIL_BUTTON_LABEL' => 'Archivar Email', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_DUE_DATE' => 'Fecha de Vencimiento', + 'LBL_LIST_LAST_MODIFIED' => 'Modificado', + 'NTC_NONE_SCHEDULED' => 'Nada programado.', + 'appointment_filter_dom' => + array ( + 'last next_month' => 'el mes que viene', + 'last this_month' => 'este mes', + 'next Saturday' => 'la semana que viene', + 'this Saturday' => 'esta semana', + 'today' => 'hoy', + 'tomorrow' => 'mañana', + ), + 'LNK_IMPORT_NOTES' => 'Importar Notas', + 'NTC_NONE' => 'Ninguno', + 'LBL_ACCEPT_THIS' => '¿Aceptar?', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Historial', +); \ No newline at end of file diff --git a/modules/Home/language/es_es.lang.php b/modules/Home/language/es_es.lang.php new file mode 100644 index 00000000000..1204ebb34cd --- /dev/null +++ b/modules/Home/language/es_es.lang.php @@ -0,0 +1,265 @@ + 'Inicio', + 'LBL_MODULES_TO_SEARCH' => 'Módulos en los que Buscar', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Contacto', + 'LBL_FIRST_NAME' => 'Nombre:', + 'LBL_LAST_NAME' => 'Apellidos:', + 'LBL_LIST_LAST_NAME' => 'Apellidos', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_EMAIL_ADDRESS' => 'Correo electrónico:', + 'LBL_MY_PIPELINE_FORM_TITLE' => 'Mi Pipeline', + 'LBL_PIPELINE_FORM_TITLE' => 'Pipeline por Etapa de Ventas', + 'LBL_CAMPAIGN_ROI_FORM_TITLE' => 'ROI Campaña', + 'LBL_MY_CLOSED_OPPORTUNITIES_GAUGE' => 'Mi Indicador de Oportunidades Ganadas', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_NEW_LEAD' => 'Nuevo Cliente Potencial', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'LNK_NEW_NOTE' => 'Nueva Nota o Archivo Adjunto', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_COMPOSE_EMAIL' => 'Redactar Email', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'LNK_NEW_BUG' => 'Informar de Incidencia', + 'LBL_ADD_BUSINESSCARD' => 'Nueva Tarjeta de Visita', + 'ERR_ONE_CHAR' => 'Por favor, indique al menos un número o letra para su búsqueda...', + 'LBL_OPEN_TASKS' => 'Mis Tareas Pendientes', + 'LBL_SEARCH_RESULTS' => 'Resultados de Búsqueda', + 'LBL_SEARCH_RESULTS_IN' => 'en', + 'LNK_NEW_SEND_EMAIL' => 'Redactar Email', + 'LBL_NO_ACCESS' => 'No tiene acceso a esta área. Contacte con el Administrador de su sitio para obtenerlo.', + 'LBL_NO_RESULTS_IN_MODULE' => '-- Sin Resultados --', + 'LBL_NO_RESULTS' => '

No se han encontrado resultados. Por favor, realice una nueva búsqueda.


', + 'LBL_NO_RESULTS_TIPS' => '

Trucos para la Búsqueda:

  • Asegúrese que ha seleccionado las categorías adecuadas más arriba.
  • Amplíe sus criterios de búsqueda.
  • Si aun así no obtiene resultados, pruebe con la opción de búsqueda avanzada.
', + 'LBL_RELOAD_PAGE' => 'Por favor, recargue la ventana para usar este Sugar Dashlet.', + 'LBL_ADD_DASHLETS' => 'Agregar Sugar Dashlets', + 'LBL_ADD_PAGE' => 'Agregar Página', + 'LBL_DEL_PAGE' => 'Eliminar Página', + 'LBL_WEBSITE_TITLE' => 'Sitio Web', + 'LBL_RSS_TITLE' => 'Fuente de Noticias', + 'LBL_DELETE_PAGE' => 'Eliminar Página', + 'LBL_CHANGE_LAYOUT' => 'Cambiar Diseño', + 'LBL_RENAME_PAGE' => 'Renombrar Página', + 'LBL_CLOSE_DASHLETS' => 'Cerrar', + 'LBL_CLOSE_SITEMAP' => 'Cerrar', + 'LBL_OPTIONS' => 'Opciones', + 'LBL_TODAY' => 'Hoy', + 'LBL_YESTERDAY' => 'Ayer', + 'LBL_TOMORROW' => 'Mañana', + 'LBL_LAST_WEEK' => 'La Semana Pasada', + 'LBL_NEXT_WEEK' => 'La Próxima Semana', + 'LBL_LAST_7_DAYS' => 'Últimos 7 Días', + 'LBL_NEXT_7_DAYS' => 'Siguientes 7 Días', + 'LBL_LAST_MONTH' => 'Último Mes', + 'LBL_NEXT_MONTH' => 'Siguiente Mes', + 'LBL_LAST_QUARTER' => 'Úlimo Trimestre', + 'LBL_THIS_QUARTER' => 'Este Trimestre', + 'LBL_LAST_YEAR' => 'Último Año', + 'LBL_NEXT_YEAR' => 'Próximo Año', + 'LBL_LAST_30_DAYS' => 'Últimos 30 Días', + 'LBL_NEXT_30_DAYS' => 'Próximos 30 días', + 'LBL_THIS_MONTH' => 'Este Mes', + 'LBL_THIS_YEAR' => 'Este Año', + 'LBL_MODULES' => 'Módulos', + 'LBL_CHARTS' => 'Gráficos', + 'LBL_TOOLS' => 'Herramientas', + 'LBL_WEB' => 'Web', + 'dashlet_categories_dom' => + array ( + 'Charts' => 'Gráficos', + 'Miscellaneous' => 'Varios', + 'Module Views' => 'Vistas del Módulo', + 'Portal' => 'Portal', + 'Tools' => 'Herramientas', + ), + 'LBL_MAX_DASHLETS_REACHED' => 'Ha alcanzado el número máximo de Sugar Dashlets que su administrador ha establecido. Por favor, quite un dashlet poder añadir más.', + 'LBL_ADDING_DASHLET' => 'Agregar Sugar Dashlet ...', + 'LBL_ADDED_DASHLET' => 'Sugar Dashlet Agregado', + 'LBL_REMOVE_DASHLET_CONFIRM' => '¿Está seguro de que desea quitar el Sugar Dashlet?', + 'LBL_REMOVING_DASHLET' => 'Quitando Sugar Dashlet ...', + 'LBL_REMOVED_DASHLET' => 'Sugar Dashlet Quitado', + 'LBL_DASHLET_CONFIGURE_GENERAL' => 'General', + 'LBL_DASHLET_CONFIGURE_FILTERS' => 'Filtros', + 'LBL_DASHLET_CONFIGURE_MY_ITEMS_ONLY' => 'Sólo Mis Elementos', + 'LBL_DASHLET_CONFIGURE_TITLE' => 'Título', + 'LBL_DASHLET_CONFIGURE_DISPLAY_ROWS' => 'Mostrar Filas', + 'LBL_DASHLET_DELETE' => 'Eliminar Sugar Dashlet', + 'LBL_DASHLET_REFRESH' => 'Actualizar Sugar Dashlet', + 'LBL_DASHLET_EDIT' => 'Editar Sugar Dashlet', + 'LBL_TRAINING_TITLE' => 'Formación', + 'LBL_CREATING_NEW_PAGE' => 'Creando Nueva Página...', + 'LBL_NEW_PAGE_FEEDBACK' => 'Ha creado una nueva página. Puede agregar nuevo contenido con la opción Agregar Sugar Dashlets.', + 'LBL_DELETE_PAGE_CONFIRM' => '¿Está seguro de que desea eliminar esta página?', + 'LBL_SAVING_PAGE_TITLE' => 'Guardando Título de Página...', + 'LBL_RETRIEVING_PAGE' => 'Recuperando Página...', + 'LBL_HOME_PAGE_1_NAME' => 'Mi Sugar', + 'LBL_HOME_PAGE_2_NAME' => 'Ventas', + 'LBL_HOME_PAGE_3_NAME' => 'Soporte', + 'LBL_HOME_PAGE_6_NAME' => 'Marketing', + 'LBL_HOME_PAGE_4_NAME' => 'Monitorización', + 'LBL_SEARCH' => 'Buscar', + 'LBL_CLEAR' => 'Limpiar', + 'LBL_BASIC_CHARTS' => 'Gráficos Básicos', + 'LBL_REPORT_CHARTS' => 'Gráficos de Informes', + 'LBL_MY_FAVORITE_REPORT_CHARTS' => 'Mis Informes Favoritos', + 'LBL_GLOBAL_REPORT_CHARTS' => 'Informes del Equipo Globlal', + 'LBL_MY_TEAM_REPORT_CHARTS' => 'Informes de Mi Equipo', + 'LBL_MY_SAVED_REPORT_CHARTS' => 'Mis Informes Guardados', + 'LBL_DASHLET_SEARCH' => 'Buscar Sugar Dashlet', + 'LBL_VERSION' => 'Versión', + 'LBL_BUILD' => 'Build', + 'LBL_VIEWLICENSE_COM' => '

This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation, including the additional permission set forth in the source code header.

', + 'LBL_ADD_TERM_COM' => '

The interactive user interfaces in modified source and object code versions of this program must display Appropriate Legal Notices, as required under Section 5 of the GNU Affero General Public License version 3. In accordance with Section 7(b) of the GNU General Public License version 3, these Appropriate Legal Notices must retain the display of the "Powered by SugarCRM" logo. If the display of the logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices must display the words "Powered by SugarCRM".

', + 'LBL_SUGAR_COMMUNITY_EDITION' => 'Sugar Community Edition', + 'LBL_SUGAR_PROFESSIONAL' => 'Sugar Professional', + 'LBL_SUGAR_ENTERPRISE' => 'Sugar Enterprise', + 'LBL_AND' => 'y', + 'LBL_ARE' => 'son', + 'LBL_TRADEMARKS' => 'marcas registradas', + 'LBL_OF' => 'de', + 'LBL_FOUNDERS' => 'Fundadores', + 'LBL_JOIN_SUGAR_COMMUNITY' => 'Únase a la Comunidad Sugar', + 'LBL_DETAILS_SUGARFORGE' => 'Colabore y desarolle extensiones de Sugar', + 'LBL_DETAILS_SUGAREXCHANGE' => 'Compre y venda extensiones certificadas de Sugar', + 'LBL_TRAINING' => 'Formación', + 'LBL_DETAILS_TRAINING' => 'Aprenda más de Sugar utilizando material formativo interactivo en línea', + 'LBL_FORUMS' => 'Foros', + 'LBL_DETAILS_FORUMS' => 'Discuta sobre Sugar con usuarios y desarrolladores expertos de la comunidad', + 'LBL_WIKI' => 'Wiki', + 'LBL_DETAILS_WIKI' => 'Busque en la Base de Conocimiento sobre temas de usuarios y desarrolladores', + 'LBL_DEVSITE' => 'Sitio del Desarrollador', + 'LBL_DETAILS_DEVSITE' => 'Descubra recursos, tutoriales, y útiles enlaces para acelerar sus desarrollos sobre Sugar', + 'LBL_GET_SUGARCRM_RSS' => 'Suscríbase a Canales sobre SugarCRM', + 'LBL_SUGARCRM_NEWS' => 'Noticias sobre SugarCRM', + 'LBL_SUGARCRM_TRAINING_NEWS' => 'Noticias sobre Formación SugarCRM', + 'LBL_SUGARCRM_FORUMS' => 'Foros SugarCRM', + 'LBL_SUGARFORGE_NEWS' => 'Noticias en SugarForge', + 'LBL_ALL_NEWS' => 'Todas las Noticias', + 'LBL_LINK_CURRENT_CONTRIBUTORS' => '¡Haga clic en este enlace para ver una lista actual de los contribuyentes de Sugar!', + 'LBL_SOURCE_CODE' => 'Código Fuente', + 'LBL_SOURCE_SUGAR' => 'Sugar - La aplicación más popular del mundo para la automatización de la fuerza de ventas, creada por SugarCRM Inc.', + 'LBL_SOURCE_XTEMPLATE' => 'XTemplate - Un motor de plantillas para PHP creado por Barnabás Debreceni', + 'LBL_SOURCE_NUSOAP' => 'NuSOAP - Un conjunto de clases PHP que permiten a los desarrolladores crear y consumir servicios web creado por NuSphere Corporation y Dietrich Ayala', + 'LBL_SOURCE_JSCALENDAR' => 'JS Calendar - Un calendario para introducir fechas creado por Mihai Bazon', + 'LBL_SOURCE_PHPPDF' => 'PHP PDF - Una librería para crear documentos PDF creado por Wayne Munro', + 'LBL_SOURCE_HTTP_WEBDAV_SERVER' => 'HTTP_WebDAV_Server - Una Implementación de Servidor WebDAV en PHP.', + 'LBL_SOURCE_PCLZIP' => 'PclZip - libería que ofrece funciones de compresión y extracción para archivos Zip, por Vincent Blavet', + 'LBL_SOURCE_SMARTY' => 'Smarty - Un motor de plantillas para PHP.', + 'LBL_SOURCE_YAHOO_UI_LIB' => 'Yahoo! User Interface Library - La Biblioteca de Utilidades de Interfaz Gráfica facilita la implementación de características para un cliente con un interfaz rico.', + 'LBL_SOURCE_PHPMAILER' => 'PHPMailer - Una clase para transferencia de correo para PHP con características completas.', + 'LBL_SOURCE_JSHRINK' => 'JShrink - Un Minifier Javascript escrito en PHP', + 'LBL_SOURCE_CRYPT_BLOWFISH' => 'Crypt_Blowfish - Permite una rápida encriptación blowfish en ambos sentidos sin requerir la extensión PHP MCrypt.', + 'LBL_SOURCE_XML_HTMLSAX3' => 'XML_HTMLSax3 - Un analizador SAX para HTML y otros documentos con XML mal formado', + 'LBL_SOURCE_YAHOO_UI_LIB_EXT' => 'Yahoo! UI Extensions Library - Extensiones para la Yahoo! User Interface Library, por Jack Slocum', + 'LBL_SOURCE_SWFOBJECT' => 'SWFObject - detección JavaScript y script de incrustación del reproductor de Flash.', + 'LBL_SOURCE_TINYMCE' => 'TinyMCE - Control de edición WYSIWYG para navegadores web que permite al usuario editar el contenido HTML', + 'LBL_SOURCE_EXT' => 'Ext - Framework JavaScript para clientes de aplicaciones web.', + 'LBL_SOURCE_RECAPTCHA' => 'reCAPTCHA - Un servicio CAPTCHA gratuito que ayuda a digitalizar libros, periódicos y los programas de radio de toda la vida.', + 'LBL_SOURCE_TCPDF' => 'TCPDF - Una clase PHP para generar documentos PDF.', + 'LBL_SOURCE_CSSMIN' => 'CssMin - Un analizador y minimizador de css.', + 'LBL_SOURCE_PHPSAML' => 'PHP-SAML - Un sencillo juego de herramientas SAML para PHP.', + 'LBL_SOURCE_ISCROLL' => 'iScroll - El desbordamiento:desplazamiento para móviles webkit. Desplazamiento nativo dentro de un ancho fijo/altura del elemento.', + 'LBL_SOURCE_FLASHCANVAS' => 'FlashCanvas - FlashCanvas es una librería JavaScript que se suma el apoyo a HTML5 para Internet Explorer. Se trata de hacer formas e imágenes a través de la API de dibujo de Flash. Es compatible con casi todas las API de Canvas y, en muchos casos corre más rápido que otras bibliotecas similares que utilizan VML o Silverlight.', + 'LBL_SOURCE_JIT' => 'JavaScript InfoVis Toolkit - El JavaScript InfoVis Toolkit proporciona herramientas para crear visualizaciones de datos interactivas para la Web.', + 'LBL_SOURCE_ZEND' => 'Zend Framework - Un código fuente abierto, orientado a objetos con un framework de aplicaciones web en PHP5.', + 'LBL_SOURCE_PARSECSV' => 'parseCSV - analizador de datos CSV para PHP', + 'LBL_SOURCE_PHPJS' => 'php.js - Usar funciones PHP en JavaScript', + 'LBL_SOURCE_PHPSQL' => 'PHP SQL Parser', + 'LBL_SOURCE_HTMLPURIFIER' => 'Purificador HTML - Una biblioteca compatible con los estándares HTML de filtrado.', + 'LBL_SOURCE_XHPROF' => 'XHProf - un analizador jerárquico a nivel funcional para PHP', + 'LBL_SOURCE_ELASTICA' => 'Elastica - PHP client for the distributed search engine elasticsearch ', + 'LBL_SOURCE_FACEBOOKSDK' => 'Facebook PHP SDK', + 'LBL_SOURCE_JQUERY' => 'jQuery - jQuery es una librería de JavaScript rápida y concisa que simplifica la manera de interactuar con los documentos HTML, el manejo de eventos, el desarrollo de animaciones y las interacciones Ajax, para el rápido desarrollo web.', + 'LBL_SOURCE_JQUERY_UI' => 'jQuery UI - jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.', + 'LBL_SOURCE_OVERLIB' => 'OverlibMWS - The overlibmws library uses javascript for DHTML popups that serve as informational and navigational aids for websites.', + 'LBL_DASHLET_TITLE' => 'Mis Sitios', + 'LBL_DASHLET_OPT_TITLE' => 'Título', + 'LBL_DASHLET_INCORRECT_URL' => 'Incorrect website location is specified', + 'LBL_DASHLET_OPT_URL' => 'Dirección de Sitio Web', + 'LBL_DASHLET_OPT_HEIGHT' => 'Altura de Dashlet (en píxeles)', + 'LBL_DASHLET_SUGAR_NEWS' => 'Noticias Sugar', + 'LBL_DASHLET_DISCOVER_SUGAR_PRO' => 'Descubra Sugar', + 'LBL_POWERED_BY_SUGAR' => 'Desarrollado por SugarCRM', + 'LBL_MORE_DETAIL' => 'Más detalles', + 'LBL_BASIC_SEARCH' => 'Búsqueda básica', + 'LBL_ADVANCED_SEARCH' => 'Búsqueda avanzada', + 'LBL_TOUR_HOME' => 'Home Icon', + 'LBL_TOUR_HOME_DESCRIPTION' => 'Quickly get back to your Home Page dashboard in one click.', + 'LBL_TOUR_MODULES' => 'Modules', + 'LBL_TOUR_MODULES_DESCRIPTION' => 'All your important modules are here.', + 'LBL_TOUR_MORE' => 'More Modules', + 'LBL_TOUR_MORE_DESCRIPTION' => 'The rest of your modules are here.', + 'LBL_TOUR_SEARCH' => 'Full Text Search', + 'LBL_TOUR_SEARCH_DESCRIPTION' => 'Search just got a whole lot better.', + 'LBL_TOUR_NOTIFICATIONS' => 'Notifications', + 'LBL_TOUR_NOTIFICATIONS_DESCRIPTION' => 'Sugar application notifications would go here.', + 'LBL_TOUR_PROFILE' => 'Profile', + 'LBL_TOUR_PROFILE_DESCRIPTION' => 'Access profile, settings and logout.', + 'LBL_TOUR_QUICKCREATE' => 'Quick Create', + 'LBL_TOUR_QUICKCREATE_DESCRIPTION' => 'Quickly create records without losing your place.', + 'LBL_TOUR_FOOTER' => 'Collapsible Footer', + 'LBL_TOUR_FOOTER_DESCRIPTION' => 'Easily expand and collapse the footer.', + 'LBL_TOUR_CUSTOM' => 'Custom Apps', + 'LBL_TOUR_CUSTOM_DESCRIPTION' => 'Custom integrations would go here.', + 'LBL_TOUR_BRAND' => 'Your Brand', + 'LBL_TOUR_BRAND_DESCRIPTION' => 'Your logo goes here. You can mouse over for more info.', + 'LBL_TOUR_WELCOME' => 'Welcome to Sugar', + 'LBL_TOUR_WATCH' => 'Watch What\'s New in Sugar', + 'LBL_TOUR_FEATURES' => '
  • New simplifed navigation bar
  • New collapsible footer
  • Improved Search
  • Updated actions menu

and much more!

', + 'LBL_TOUR_VISIT' => 'For more information please visit our application', + 'LBL_TOUR_DONE' => 'You\'re Done!', + 'LBL_TOUR_REFERENCE_1' => 'You can always reference our', + 'LBL_TOUR_REFERENCE_2' => 'through the "Support" link under the profile tab.', + 'LNK_TOUR_DOCUMENTATION' => 'documentation', + 'LBL_TOUR_CALENDAR_URL_1' => 'Do you share your SugarCRM calendar with 3rd party applications, such as Microsoft Outlook or Exchange? If so, you have a new URL. This new, more secure URL includes a personal key which will prevent unauthorized publishing of your calendar.', + 'LBL_TOUR_CALENDAR_URL_2' => 'Retrieve your new shared calendar URL.', +); \ No newline at end of file diff --git a/modules/Import/language/es_es.lang.php b/modules/Import/language/es_es.lang.php new file mode 100644 index 00000000000..4f692cc2729 --- /dev/null +++ b/modules/Import/language/es_es.lang.php @@ -0,0 +1,367 @@ + 'Archivo de Importación Leído con Éxito', + 'LBL_RECORDS_SKIPPED_DUE_TO_ERROR' => 'Registros saltados debido a error', + 'LBL_UPDATE_SUCCESSFULLY' => 'Registros actualizados con éxito', + 'LBL_SUCCESSFULLY_IMPORTED' => 'Registros creados con éxito', + 'LBL_STEP_4_TITLE' => 'Paso 4: Importar Archivo', + 'LBL_STEP_5_TITLE' => 'Paso 5: Ver Resultados', + 'LBL_CUSTOM_ENCLOSURE' => 'Archivos Calificados Por:', + 'LBL_ERROR_UNABLE_TO_PUBLISH' => 'No ha sido posible realizar la publicación. Ya hay otro mapa de Importación publicado con el mismo nombre.', + 'LBL_ERROR_UNABLE_TO_UNPUBLISH' => 'No ha sido posible quitar la publicación de un mapa cuyo propietario es otro usuario. Usted posee un mapa de Importación con el mismo nombre.', + 'LBL_ERROR_IMPORTS_NOT_SET_UP' => 'No se ha configurado la Importación para este tipo de módulo', + 'LBL_IMPORT_TYPE' => 'Acción de Importación', + 'LBL_IMPORT_BUTTON' => 'Crear Registros', + 'LBL_UPDATE_BUTTON' => 'Crear y Actualizar Registros', + 'LBL_CREATE_BUTTON_HELP' => 'Utilice esta opción para crear nuevos registros. Nota: Las filas en el archivo de importación contiene valores que coinciden con IDs de los registros existentes no se importará si los valores se asignan en el campo ID.', + 'LBL_UPDATE_BUTTON_HELP' => 'Utilice esta opción para actualizar los registros existentes. El dato en el archivo de importación que será comparado con los registros existentes sera el ID.', + 'LBL_ERROR_INVALID_BOOL' => 'Valor no válido (debería ser 1 o 0)', + 'LBL_NO_ID' => 'ID Requerido', + 'LBL_PRE_CHECK_SKIPPED' => 'Comprobaciones previas saltadas', + 'LBL_IMPORT_ERROR' => 'Han Ocurrido Errores de Importación', + 'LBL_ERROR' => 'Error:', + 'LBL_NOLOCALE_NEEDED' => 'No es necesaria ninguna conversión de localización', + 'LBL_FIELD_NAME' => 'Nombre de Campo', + 'LBL_VALUE' => 'Valor', + 'LBL_ROW_NUMBER' => 'Número de Fila', + 'LBL_NONE' => 'Ninguno', + 'LBL_REQUIRED_VALUE' => 'Falta un valor requerido', + 'LBL_ERROR_SYNC_USERS' => 'Valor no válido para sincronizar con Outlook:', + 'LBL_ID_EXISTS_ALREADY' => 'ID ya existente en esta tabla', + 'LBL_ASSIGNED_USER' => 'Si el usuario no existe, utilizar el usuario actual', + 'LBL_SHOW_HIDDEN' => 'Mostrar campos que no son normalmente importables', + 'LBL_UPDATE_RECORDS' => 'Actualizar registros actuales en lugar de importarlos (No se puede Deshacer)', + 'LBL_TEST' => 'Probar Importación (sin guardar ni cambiar datos)', + 'LBL_TRUNCATE_TABLE' => 'Tabla vacía antes de importación (borrar todos los registros)', + 'LBL_RELATED_ACCOUNTS' => 'No crear cuentas relacionadas', + 'LBL_NO_DATECHECK' => 'Saltar comprobación de fecha (más rápido pero fallará si la fecha es incorrecta)', + 'LBL_NO_EMAILS' => 'No enviar notificaciones de Email durante la importación', + 'LBL_NO_PRECHECK' => 'Modo de Formato Nativo', + 'LBL_STRICT_CHECKS' => 'Utilizar conjunto de reglas estricto (Comprobar también direcciones de Email y números de teléfono)', + 'LBL_ERROR_SELECTING_RECORD' => 'Error seleccionando registro:', + 'LBL_ERROR_DELETING_RECORD' => 'Error eliminando registro:', + 'LBL_NOT_SET_UP' => 'La importación no se ha configurado para este tipo de módulo', + 'LBL_ARE_YOU_SURE' => '¿Está seguro? Esto borrará todos los datos del módulo.', + 'LBL_NO_RECORD' => 'No existe ningún registro con este ID para actualizar', + 'LBL_NOT_SET_UP_FOR_IMPORTS' => 'La importación no se ha configurado para este tipo de módulo', + 'LBL_DEBUG_MODE' => 'Habilitar modo de depuración', + 'LBL_ERROR_INVALID_ID' => 'El ID proporcionado es demasiado largo para el campo (la longitud máxima es de 36 caracteres)', + 'LBL_ERROR_INVALID_PHONE' => 'Número de teléfono no válido', + 'LBL_ERROR_INVALID_NAME' => 'Cadena demasiado larga para el campo', + 'LBL_ERROR_INVALID_VARCHAR' => 'Cadena demasiado larga para el campo', + 'LBL_ERROR_INVALID_DATE' => 'Invalid date string', + 'LBL_ERROR_INVALID_DATETIME' => 'Fecha y hora no válida', + 'LBL_ERROR_INVALID_DATETIMECOMBO' => 'Fecha y hora no válida', + 'LBL_ERROR_INVALID_TIME' => 'Hora no válida', + 'LBL_ERROR_INVALID_INT' => 'Valor entero no válido', + 'LBL_ERROR_INVALID_NUM' => 'Valor numérico no válido', + 'LBL_ERROR_INVALID_EMAIL' => 'Dirección de Email no válida', + 'LBL_ERROR_INVALID_USER' => 'Nombre o ID de usuario no válido', + 'LBL_ERROR_INVALID_TEAM' => 'Nombre o ID de equipo no válido', + 'LBL_ERROR_INVALID_ACCOUNT' => 'Nombre o ID de cuenta no válido', + 'LBL_ERROR_INVALID_RELATE' => 'Campo relacional no válido', + 'LBL_ERROR_INVALID_CURRENCY' => 'Valor de moneda no válido', + 'LBL_ERROR_INVALID_FLOAT' => 'Número en coma flotante no válido', + 'LBL_ERROR_NOT_IN_ENUM' => 'Valor no perteneciente a la lista desplegable. Los valores permitidos son:', + 'LBL_NOT_MULTIENUM' => 'No es una Enumeración Múltiple (MultiEnum)', + 'LBL_IMPORT_MODULE_NO_TYPE' => 'La importación no se ha configurado para este tipo de módulo', + 'LBL_IMPORT_MODULE_NO_USERS' => 'AVISO: No ha definido usuarios en su sistema. Si realiza la importación sin antes añadir usuarios, todos los registros pertenecerán al Administrador.', + 'LBL_IMPORT_MODULE_MAP_ERROR' => 'No ha sido posible realizar la publicación. Ya hay otro mapa de Importación publicado con el mismo nombre.', + 'LBL_IMPORT_MODULE_MAP_ERROR2' => 'No ha sido posible quitar la publicación de un mapa cuyo propietario es otro usuario. Usted posee un mapa de Importación con el mismo nombre.', + 'LBL_IMPORT_MODULE_NO_DIRECTORY' => 'El directorio', + 'LBL_IMPORT_MODULE_NO_DIRECTORY_END' => 'no existe o no tiene permisos de escritura en el mismo', + 'LBL_IMPORT_MODULE_ERROR_NO_UPLOAD' => 'El archivo no pudo subirse con éxito. Puede que la opción 'upload_max_filesize' de su archivo php.ini esté establecida a un valor demasiado pequeño', + 'LBL_IMPORT_MODULE_ERROR_LARGE_FILE' => 'El archivo es demasiado grande. Máx:', + 'LBL_IMPORT_MODULE_ERROR_LARGE_FILE_END' => 'Bytes. Cambie $sugar_config['upload_maxsize'] en config.php', + 'LBL_MODULE_NAME' => 'Importar', + 'LBL_TRY_AGAIN' => 'Pruebe de nuevo', + 'LBL_START_OVER' => 'Comenzar de nuevo', + 'LBL_IMPORT_ERROR_MAX_REC_LIMIT_REACHED' => 'El archivo de importación contiene {0} filas. El número óptimo de filas es {1}. Más filas puede retardar el proceso de importación. Haga clic en Aceptar para continuar importando. Haga clic en Cancelar para revisar y volver a cargar el archivo de importación.', + 'ERR_IMPORT_SYSTEM_ADMININSTRATOR' => 'No puede importar un usuario administrador del sistema', + 'ERR_MULTIPLE' => 'Se han definido múltiples columnas con el mismo nombre de campo.', + 'ERR_MISSING_REQUIRED_FIELDS' => 'Faltan campos requeridos:', + 'ERR_MISSING_MAP_NAME' => 'Falta el nombre del mapeo personalizado', + 'ERR_SELECT_FULL_NAME' => 'No puede seleccionar Nombre Completo cuando Nombre y Apellido están seleccionados.', + 'ERR_SELECT_FILE' => 'Seleccione el archivo a subir.', + 'LBL_SELECT_FILE' => 'Seleccione un archivo:', + 'LBL_CUSTOM' => 'Personalizado', + 'LBL_CUSTOM_CSV' => 'Archivo personalizado delimitado por comas', + 'LBL_CSV' => 'Archivo delimitado por comas', + 'LBL_EXTERNAL_SOURCE' => 'Una aplicación o servicio externo', + 'LBL_TAB' => 'Archivo delimitado por tabulaciones', + 'LBL_CUSTOM_DELIMITED' => 'Archivo con delimitador personalizado', + 'LBL_CUSTOM_DELIMITER' => 'Delimitador personalizado:', + 'LBL_FILE_OPTIONS' => 'Opciones de archivo', + 'LBL_CUSTOM_TAB' => 'Archivo personalizado delimitado por tabuladores', + 'LBL_DONT_MAP' => '-- No asocie este campo --', + 'LBL_STEP_MODULE' => '¿En que módulo se desea importar los datos?', + 'LBL_STEP_1_TITLE' => 'Paso 1: Seleccione el Origen de Datos y la Acción de Importación', + 'LBL_CONFIRM_TITLE' => 'Paso {0}: Confirmar las propiedades de importación del archivo', + 'LBL_CONFIRM_EXT_TITLE' => 'Paso {0}: Confirma propiedades fuente externa', + 'LBL_WHAT_IS' => '¿Cuál es el Origen de Datos?', + 'LBL_MICROSOFT_OUTLOOK' => 'Microsoft Outlook', + 'LBL_MICROSOFT_OUTLOOK_HELP' => 'Las asignaciones personalizadas para Microsoft Outlook se basan en el archivo de importación delimitado por comas (.csv). Si el archivo de importación está delimitado por tabuladores, las asignaciones no se aplicará como se esperaba.', + 'LBL_ACT' => 'Act!', + 'LBL_SALESFORCE' => 'Salesforce.com', + 'LBL_MY_SAVED' => 'Mis Mapeos Guardados:', + 'LBL_PUBLISH' => 'Publicar', + 'LBL_DELETE' => 'Eliminar', + 'LBL_PUBLISHED_SOURCES' => 'Mapeos Publicados:', + 'LBL_UNPUBLISH' => 'Quitar Publicación', + 'LBL_NEXT' => 'Siguiente >', + 'LBL_BACK' => '< Anterior', + 'LBL_STEP_2_TITLE' => 'Paso 2: Subida de Archivo de Importación', + 'LBL_HAS_HEADER' => 'Tiene cabecera:', + 'LBL_NUM_1' => '1.', + 'LBL_NUM_2' => '2.', + 'LBL_NUM_3' => '3.', + 'LBL_NUM_4' => '4.', + 'LBL_NUM_5' => '5.', + 'LBL_NUM_6' => '6.', + 'LBL_NUM_7' => '7.', + 'LBL_NUM_8' => '8.', + 'LBL_NUM_9' => '9.', + 'LBL_NUM_10' => '10.', + 'LBL_NUM_11' => '11.', + 'LBL_NUM_12' => '12.', + 'LBL_NOTES' => 'Notas:', + 'LBL_NOW_CHOOSE' => 'Ahora elija el archivo a importar:', + 'LBL_IMPORT_OUTLOOK_TITLE' => 'Microsoft Outlook 98 y 2000 pueden exportar datos en el formato Valores Separados por Coma (CSV), que puede ser utilizado para importar datos en el sistema. Para exportar sus datos desde Outlook, siga los siguientes pasos:', + 'LBL_OUTLOOK_NUM_1' => 'Inicie Outlook', + 'LBL_OUTLOOK_NUM_2' => 'Seleccione el menú Archivo, y entonces la opción de menú Importar y Exportar ...', + 'LBL_OUTLOOK_NUM_3' => 'Seleccione Exportar a un archivo y haga clic en Siguiente', + 'LBL_OUTLOOK_NUM_4' => 'Seleccione Valores Separados por Coma (Windows) y haga clic en Siguiente.
Nota: Es posible que se le solicite la instalación del componente de exportación', + 'LBL_OUTLOOK_NUM_5' => 'Seleccione la carpeta Contactos y haga clic en Siguiente. Puede seleccionar distintas carpetas de contactos si sus contactos están almacenados en distintas carpetas', + 'LBL_OUTLOOK_NUM_6' => 'Escoja un nombre de archivo y haga clic en Siguiente', + 'LBL_OUTLOOK_NUM_7' => 'Haga clic en Finalizar', + 'LBL_IMPORT_SF_TITLE' => 'Salesforce.com puede exportar datos en el formato Valores Separados por Coma, que puede ser utilizado para importar datos en el sistema. Para exportar sus datos desde Salesforce.com, siga los siguientes pasos:', + 'LBL_SF_NUM_1' => 'Abra su navegador, vaya a http://www.salesforce.com, e inicie su sesión con su email y contraseña', + 'LBL_SF_NUM_2' => 'Haga clic en la pestaña Informes del menú superior', + 'LBL_SF_NUM_3' => 'Para exportar cuentas: Haga clic en el enlace Cuentas Activas
Para exportar contactos: Haga clic en el enlace Mailing List', + 'LBL_SF_NUM_4' => 'En Paso 1: Seleccione su tipo de informe, seleccione Informe Tabular y haga clic en Siguiente', + 'LBL_SF_NUM_5' => 'En Paso 2: Seleccione las columnas del informe, seleccione las columnas que desee exportar y haga clic en Siguiente', + 'LBL_SF_NUM_6' => 'En Paso 3: Seleccione la información a resumir, simplemente haga clic en Siguiente', + 'LBL_SF_NUM_7' => 'En Paso 4: Ordene las columnas del informe, simplemente haga clic en Siguiente', + 'LBL_SF_NUM_8' => 'En Paso 5: Seleccione los criterios del informe, con Fecha de Inicio, seleccione una fecha suficientemente pasada como para incluir todas sus cuentas. También puede exportar un subconjunto de cuentas utilizando criterios más avanzados. Cuando haya terminado, haga clic en Ejecutar Informe', + 'LBL_SF_NUM_9' => 'Se generará un informe, y la página mostrará Estado de la Generación del Informe: Completado. Ahora haga clic en Exportar a Excel', + 'LBL_SF_NUM_10' => 'En Exportar Informe:, para el Formato del Fichero de Exportación:, seleccione Delimitado por Comas .csv. Haga clic en Exportar.', + 'LBL_SF_NUM_11' => 'Aparecerá un cuadro de diálogo para que guarde el archivo exportado en su ordenador.', + 'LBL_IMPORT_ACT_TITLE' => 'Act! puede exportar datos en el formato Valores Separados por Comas, que puede ser utilizado para importar datos en el sistema. Para exportar datos desde Act!, siga los siguientes pasos:', + 'LBL_ACT_NUM_1' => 'Lance ACT!', + 'LBL_ACT_NUM_2' => 'Seleccione el menú File, la opción de menú Data Exchange, y a continuación la opción de menú Export...', + 'LBL_ACT_NUM_3' => 'Seleccione el tipo de archivo Text-Delimited', + 'LBL_ACT_NUM_4' => 'Seleccione un nombre de archivo y una ubicación para los datos exportados y haga clic en Siguiente', + 'LBL_ACT_NUM_5' => 'Seleccione Únicamente los registros de Contactos', + 'LBL_ACT_NUM_6' => 'Haga clic en el botón Opciones...', + 'LBL_ACT_NUM_7' => 'Seleccione Coma como carácter separador de campos', + 'LBL_ACT_NUM_8' => 'Marque la casilla Sí, exportar los nombres de los campos y haga clic en OK', + 'LBL_ACT_NUM_9' => 'Haga clic en Siguiente', + 'LBL_ACT_NUM_10' => 'Seleccione All Records y haga clic en Finish', + 'LBL_IMPORT_CUSTOM_TITLE' => 'Muchas aplicaciones le permiten exportar datos en el formato Archivo de texto separado por comas (.csv), siguiendo estos pasos genéricos:', + 'LBL_CUSTOM_NUM_1' => 'Lance la aplicación y abra el archivo de datos', + 'LBL_CUSTOM_NUM_2' => 'Seleccione la opción de menú Guardar como... o Exportar...', + 'LBL_CUSTOM_NUM_3' => 'Guarde el archivo en el formato CSV o Valores Separados por Comas', + 'LBL_IMPORT_TAB_TITLE' => 'Muchas aplicaciones le permiten exportar datos en el formato Archivo de texto separado por tabuladores (.tsv o .tab). Habitualmente, la mayoría de aplicaciones siguen estos pasos genéricos:', + 'LBL_TAB_NUM_1' => 'Lance la aplicación y Abra el archivo de datos', + 'LBL_TAB_NUM_2' => 'Seleccione la opción de menú Guardar como... o Exportar...', + 'LBL_TAB_NUM_3' => 'Guarde el archivo en el formato TSV o Valores Separados por Tabuladores', + 'LBL_STEP_3_TITLE' => 'Paso 3: Confirme los Campos e Importe', + 'LBL_STEP_DUP_TITLE' => 'Paso {0}: Compruebe si hay posibles duplicados', + 'LBL_SELECT_FIELDS_TO_MAP' => 'En la siguente lista, seleccione los campos del archivo de importación que deban de ser importados en cada campo del sistema. Cuando termine, haga clic en Importar Ahora:', + 'LBL_DATABASE_FIELD' => 'Campo de Base de Datos', + 'LBL_HEADER_ROW' => 'Fila de Cabecera', + 'LBL_HEADER_ROW_OPTION_HELP' => 'Seleccione si la primera fila del archivo de importación es una fila de encabezado que contiene las etiquetas de campo.', + 'LBL_ROW' => 'Fila', + 'LBL_SAVE_AS_CUSTOM' => 'Guardar como Asociación Personalizada:', + 'LBL_SAVE_AS_CUSTOM_NAME' => 'Nombre de Mapeo Personalizado:', + 'LBL_CONTACTS_NOTE_1' => 'Debe asociar o Apellido o Nombre Completo.', + 'LBL_CONTACTS_NOTE_2' => 'Si asocia Nombre Completo, Nombre y Apellido serán ignorados.', + 'LBL_CONTACTS_NOTE_3' => 'Si asocia Nombre Completo, los datos en Nombre Completo se dividirán en Nombre y Apellido cuando se inserten en la base de datos.', + 'LBL_CONTACTS_NOTE_4' => 'Los campos que contienen Calle Dirección 2 y Calle Dirección 3 se concatenarán en el campo Dirección Principal cuando se inserten en la base de datos.', + 'LBL_ACCOUNTS_NOTE_1' => 'Los campos que contienen Calle Dirección 2 y Calle Dirección 3 se concatenarán en el campo Dirección Principal cuando se inserten en la base de datos.', + 'LBL_REQUIRED_NOTE' => 'Campos Requeridos:', + 'LBL_IMPORT_NOW' => 'Importar Ahora', + 'LBL_' => '', + 'LBL_CANNOT_OPEN' => 'No puede abrirse el archivo de importación para lectura', + 'LBL_NOT_SAME_NUMBER' => 'No hay el mismo número de campos en cada línea de su archivo de importación', + 'LBL_NO_LINES' => 'No hay líneas en su archivo de importación', + 'LBL_FILE_ALREADY_BEEN_OR' => 'El archivo de importación no existe o ya ha sido procesado', + 'LBL_SUCCESS' => 'Éxito:', + 'LBL_FAILURE' => 'Fallo en la importación:', + 'LBL_SUCCESSFULLY' => 'Importado con éxito', + 'LBL_LAST_IMPORT_UNDONE' => 'Su última importación a sido deshecha', + 'LBL_NO_IMPORT_TO_UNDO' => 'No hay importación que deshacer.', + 'LBL_FAIL' => 'Fallo:', + 'LBL_RECORDS_SKIPPED' => 'Registros saltados por falta de alguno de los campos requeridos', + 'LBL_IDS_EXISTED_OR_LONGER' => 'Registros saltados porque sus id's o bien existían o tenían más de 36 caracteres', + 'LBL_RESULTS' => 'Resultados', + 'LBL_CREATED_TAB' => 'Registros creados', + 'LBL_DUPLICATE_TAB' => 'Duplicados', + 'LBL_ERROR_TAB' => 'Errores', + 'LBL_IMPORT_MORE' => 'Importar Más', + 'LBL_FINISHED' => 'Volver a', + 'LBL_UNDO_LAST_IMPORT' => 'Deshacer Última Importación', + 'LBL_LAST_IMPORTED' => 'Último Creado', + 'ERR_MULTIPLE_PARENTS' => 'Sólo puede haber definido un ID padre', + 'LBL_DUPLICATES' => 'Se han Encontrado Duplicados', + 'LNK_DUPLICATE_LIST' => 'Descargar Lista de Duplicados', + 'LNK_ERROR_LIST' => 'Descargar Lista de Errores', + 'LNK_RECORDS_SKIPPED_DUE_TO_ERROR' => 'Descargar registros que no han podido ser importados.', + 'LBL_UNIQUE_INDEX' => 'Elija el Índice para comparación de duplicados', + 'LBL_VERIFY_DUPS' => 'Verificar entradas duplicadas contra los índices seleccionados', + 'LBL_INDEX_USED' => 'Índices usados:', + 'LBL_INDEX_NOT_USED' => 'Índices no usados:', + 'LBL_IMPORT_MODULE_ERROR_NO_MOVE' => 'El archivo no ha sido subido con éxito. Compruebe los permisos de ficheros en el directorio de caché de su instalación de Sugar.', + 'LBL_IMPORT_FIELDDEF_ID' => 'Número de ID único', + 'LBL_IMPORT_FIELDDEF_RELATE' => 'Nombre o ID', + 'LBL_IMPORT_FIELDDEF_PHONE' => 'Número de Teléfono', + 'LBL_IMPORT_FIELDDEF_TEAM_LIST' => 'ID o Nombre de Equipo', + 'LBL_IMPORT_FIELDDEF_NAME' => 'Cualquier Texto', + 'LBL_IMPORT_FIELDDEF_VARCHAR' => 'Cualquier Texto', + 'LBL_IMPORT_FIELDDEF_TEXT' => 'Cualquier Texto', + 'LBL_IMPORT_FIELDDEF_TIME' => 'Hora', + 'LBL_IMPORT_FIELDDEF_DATE' => 'Fecha', + 'LBL_IMPORT_FIELDDEF_DATETIME' => 'Fecha y Hora', + 'LBL_IMPORT_FIELDDEF_ASSIGNED_USER_NAME' => 'Nombre de Usuario o ID', + 'LBL_IMPORT_FIELDDEF_BOOL' => ''0' o '1'', + 'LBL_IMPORT_FIELDDEF_ENUM' => 'Lista', + 'LBL_IMPORT_FIELDDEF_EMAIL' => 'Dirección de EMail', + 'LBL_IMPORT_FIELDDEF_INT' => 'Numérico (Sin Decimales)', + 'LBL_IMPORT_FIELDDEF_DOUBLE' => 'Numérico (Sin Decimales)', + 'LBL_IMPORT_FIELDDEF_NUM' => 'Numérico (Sin Decimales)', + 'LBL_IMPORT_FIELDDEF_CURRENCY' => 'Numérico (Decimales Permitidos)', + 'LBL_IMPORT_FIELDDEF_FLOAT' => 'Numérico (Decimales Permitidos)', + 'LBL_DATE_FORMAT' => 'Formato de Fecha:', + 'LBL_TIME_FORMAT' => 'Formato de Hora:', + 'LBL_TIMEZONE' => 'Zona Horaria:', + 'LBL_ADD_ROW' => 'Agregar Campo', + 'LBL_REMOVE_ROW' => 'Quitar Campo', + 'LBL_DEFAULT_VALUE' => 'Valor por Defecto', + 'LBL_SHOW_ADVANCED_OPTIONS' => 'Mostrar Opciones Avanzadas', + 'LBL_HIDE_ADVANCED_OPTIONS' => 'Ocultar Opciones Avanzadas', + 'LBL_SHOW_NOTES' => 'Ver notas', + 'LBL_HIDE_NOTES' => 'Ocultar notas', + 'LBL_SHOW_PREVIEW_COLUMNS' => 'Mostrar Columnas de Vista Preliminar', + 'LBL_HIDE_PREVIEW_COLUMNS' => 'Ocultar Columnas de Vista Preliminar', + 'LBL_SAVE_MAPPING_AS' => 'Guardar Mapeo Como', + 'LBL_OPTION_ENCLOSURE_QUOTE' => 'Comillas Simples (')', + 'LBL_OPTION_ENCLOSURE_DOUBLEQUOTE' => 'Comillas Dobles (")', + 'LBL_OPTION_ENCLOSURE_NONE' => 'Ninguno', + 'LBL_OPTION_ENCLOSURE_OTHER' => 'Otro:', + 'LBL_IMPORT_COMPLETE' => 'Importación Completada', + 'LBL_IMPORT_COMPLETED' => 'Importación completada', + 'LBL_IMPORT_RECORDS' => 'Importando Registros', + 'LBL_IMPORT_RECORDS_OF' => 'de', + 'LBL_IMPORT_RECORDS_TO' => 'a', + 'LBL_CURRENCY' => 'Moneda', + 'LBL_CURRENCY_SIG_DIGITS' => 'Dígitos Significativos de la Moneda', + 'LBL_LOCALE_EXAMPLE_NAME_FORMAT' => 'Ejemplo', + 'LBL_NUMBER_GROUPING_SEP' => 'Separador de miles', + 'LBL_DECIMAL_SEP' => 'Símbolo Decimal', + 'LBL_LOCALE_DEFAULT_NAME_FORMAT' => 'Nombre de Formato de Visualización', + 'LBL_LOCALE_NAME_FORMAT_DESC' => '"s" Saludo, "f" Nombre, "l" Apellido', + 'LBL_CHARSET' => 'Codificación de Archivo', + 'LBL_MY_SAVED_HELP' => 'Un mapeo guardado permite especificar una combinación utilizada anteriormente de un origen de datos específico y un conjunto de campos de base de datos para mapear los campos del archivo de importación.
Haga clic en Publicar para dejar disponible el mapeo a otros usuarios.
Haga clic en Quitar Publicación para que el mapeo deje de estar disponible para otros usuarios.', + 'LBL_MY_SAVED_ADMIN_HELP' => 'Utilice esta opción para aplicar los ajustes predefinidos de importación, incluyendo las propiedades de importación, las asignaciones, y la configuración de control de duplicado, a la importación.
Haga clic en Publicar para hacer disponible al resto de usuarios la plantilla.
Haga clic en Un-Publicar para desactivar la plantilla a otros usuarios.
Haga clic en Eliminar para eliminar la plantilla para todos los usuarios.', + 'LBL_MY_PUBLISHED_HELP' => 'Un mapeo guardado permite especificar una combinación utilizada anteriormente de un origen de datos específico y un conjunto de campos de base de datos para mapear los campos del archivo de importación.', + 'LBL_ENCLOSURE_HELP' => '

El carácter calificador se utiliza para encerrar el contenido de un campo, incluyendo cualquier carácter que se utilicen como delimitadores.

Ejemplo: Si el carácter delimitador es una coma (,) y el calificador es una comilla doble ("),
"Cupertino, California" se importará en un sólo campo de la aplicación y aparecerá como Cupertino, California.
Si no se establece ningún carácter calificador, o éste es un carácter distinto,
"Cupertino, California" será importado en dos campos adyacentes como "Cupertino y California".

Nota: El archivo de importación puede no contener caracteres calificadores.
El carácter calificador por defecto para archivos delimitados por coma o tabulador creados en Excel es la comilla doble.

', + 'LBL_DELIMITER_COMMA_HELP' => 'Seleccione esta opción si el carácter que separa los campos en el archivo de importación es una coma, o si la extensión del archivo es .csv.', + 'LBL_DELIMITER_TAB_HELP' => 'Seleccione esta opción si el carácter que separa los campos en el archivo de importación es un TAB, y la extensión del archivo es .txt.', + 'LBL_DELIMITER_CUSTOM_HELP' => 'Seleccione esta opción si el carácter que separa los campos en el archivo de importación no es ni una coma ni un TAB, y escriba el carácter en el campo adyacente.', + 'LBL_DATABASE_FIELD_HELP' => 'Seleccione un campo de la lista de todos los campos existentes en la base de datos para el módulo.', + 'LBL_HEADER_ROW_HELP' => 'Estos son los campos de título de la fila correspondiente a la cabecera del archivo de importación.', + 'LBL_DEFAULT_VALUE_HELP' => 'Indique un valor a usar para el campo en el registro creado o actualizado si el campo en el archivo de importación no contiene datos.', + 'LBL_ROW_HELP' => 'Estos son los datos de la primera fila del archivo de importación que no pertenece a la cabecera.', + 'LBL_SAVE_MAPPING_HELP' => 'Introduzca un nombre para el conjunto de campos de base de datos utilizados arriba para que sean mapeados a los campos del archivo de importación.
El conjunto de campos, incluyendo su orden y el origen de datos seleccionado en el Paso 1 de Importación, serán guardados durante el intento de importación.
El mapeo guardado podrá entonces ser seleccionado en el Paso 1 de Importación para una nueva importación.', + 'LBL_IMPORT_FILE_SETTINGS_HELP' => 'Especifique la configuración del archivo de importación para asegurarse de que los datos son importados
correctamente. Esta configuración no reemplazará a sus preferencias. Los registros
creados o actualizados contendrán la configuración especificada en la página Mi Cuenta.', + 'LBL_IMPORT_FILE_SETTINGS' => 'Configuración de Archivos para la Importación', + 'LBL_VERIFY_DUPLCATES_HELP' => 'Seleccione los campos del archivo de importación a usar para la comprobación de duplicados.
Si los datos para los campos seleccionados coinciden los datos en los campos de registros existentes, no se generarán nuevos registros para aquellas filas que contengan los datos duplicados.
Las filas que contengan datos duplicados serán identificadas en los Resultados de Importación.', + 'LBL_IMPORT_STARTED' => 'Importación Iniciada:', + 'LBL_RECORD_CANNOT_BE_UPDATED' => 'El registro no ha podido ser actualizado debido un problema de permisos', + 'LBL_DELETE_MAP_CONFIRMATION' => '¿Está seguro que desea eliminar este conjunto guardado de la configuración de importación?', + 'LBL_THIRD_PARTY_CSV_SOURCES' => 'Si los datos de importación de archivos se exporta desde una de las siguientes fuentes, seleccionar cual de ellas.', + 'LBL_THIRD_PARTY_CSV_SOURCES_HELP' => 'Seleccione la fuente para aplicar automáticamente las asignaciones personalizadas con el fin de simplificar el proceso de asignación (paso siguiente).', + 'LBL_EXTERNAL_SOURCE_HELP' => 'Utilice esta opción para importar datos directamente desde una aplicación externa o de servicios, como Gmail.', + 'LBL_EXAMPLE_FILE' => 'Descargar plantilla de importación de archivos', + 'LBL_CONFIRM_IMPORT' => 'Usted ha seleccionado para actualizar los registros durante el proceso de importación. Las actualizaciones realizadas en los registros existentes no se pueden deshacer. Sin embargo, los registros creados durante el proceso de importación se pueden deshacer (eliminando), si lo desea. Haga clic en Cancelar para seleccionar crear nuevos registros sólo, o haga clic en OK para continuar.', + 'LBL_CONFIRM_MAP_OVERRIDE' => 'Advertencia: Usted ya ha seleccionado una asignación personalizada para esta importación, ¿quiere que continúe?', + 'LBL_EXTERNAL_FIELD' => 'Campo externo', + 'LBL_SAMPLE_URL_HELP' => 'Descargue el ejemplo de archivo de importación el cual contiene una fila de cabecera con los campos del módulo. El archivo puede ser utilizado como una plantilla para crear el archivo de importación que contiene los datos que desea importar.', + 'LBL_AUTO_DETECT_ERROR' => 'El delimitador de campo y de clasificación en el archivo de importación no podía ser detectado. Por favor, verifique la configuración de las propiedades del archivo de importación.', + 'LBL_MIME_TYPE_ERROR_1' => 'El archivo seleccionado no parece contener una lista delimitada. Por favor, compruebe el tipo de archivo. Recomendamos archivos delimitados por comas (.csv).', + 'LBL_MIME_TYPE_ERROR_2' => 'Para proceder con la importación del archivo seleccionado, haga clic en Aceptar. Para cargar un nuevo archivo, haga clic en volver a cargar.', + 'LBL_FIELD_DELIMETED_HELP' => 'El delimitador de campo especifica el carácter utilizado para separar las columnas de campos.', + 'LBL_FILE_UPLOAD_WIDGET_HELP' => 'Seleccione un archivo que contenga datos separados por un delimitador, ya sea por comas o por tabulaciones. Se recomienda archivos .csv.', + 'LBL_EXTERNAL_ERROR_NO_SOURCE' => 'No se puede conectar a la fuente externa, por favor intente más tarde.', + 'LBL_EXTERNAL_ERROR_FEED_CORRUPTED' => 'No se puede recuperar datos externos, por favor intente más tarde.', + 'LBL_ERROR_IMPORT_CACHE_NOT_WRITABLE' => 'El directorio caché de importaciones no tiene permisos de escritura', + 'LBL_ADD_FIELD_HELP' => 'Utilice esta opción para agregar un valor a un campo en todos los registros creados y/o actualizados. Seleccione el campo y luego escriba o seleccione un valor para ese campo en la columna valor predeterminado.', + 'LBL_MISSING_HEADER_ROW' => 'No se ha encontrado cabecera', + 'LBL_CANCEL' => 'Cancelar', + 'LBL_SELECT_DS_INSTRUCTION' => '¿Listo para empezar a importar? Seleccione el origen de datos que desea importar.', + 'LBL_SELECT_UPLOAD_INSTRUCTION' => 'Seleccione un archivo de su ordenador que contenga los datos que desea importar, o descargue la plantilla para disponer de un ejemplo para la creación del archivo de importación.', + 'LBL_SELECT_PROPERTY_INSTRUCTION' => 'Así es como las primeras filas de los archivos de importación aparecen con las propiedades detectadas. Si se ha detectado la fila de cabecera, se muestra en la fila superior de la tabla. Ver las propiedades del archivo de importación para realizar cambios en las propiedades detectadas y para configurar propiedades adicionales. Al actualizar los valores se actualizarán los datos que aparecen en la tabla.', + 'LBL_SELECT_MAPPING_INSTRUCTION' => 'La siguiente tabla contiene todos los campos del módulo que se puede relacionar a los datos en el archivo de importación. Si el archivo contiene una fila de cabecera, las columnas en el archivo han sido asignadas a los campos de importación. Compruebe las asignaciones para asegurarse de que son lo que usted espera, y hacer los cambios, según sea necesario. Para ayudarte a comprobar las asignaciones, la fila 1 muestra los datos en el archivo. Asegúrese de asignar todos los campos obligatorios (señalados con un asterisco).', + 'LBL_SELECT_DUPLICATE_INSTRUCTION' => 'Para evitar la creación de registros duplicados, seleccionar cuál de los campos asignados que le gustaría utilizar para realizar una comprobación de duplicados mientras los datos se está importando. Los valores dentro de los registros existentes en los campos seleccionados se cotejará con los datos en el archivo de importación. Si en los datos se encuentra coincidencia, las filas en el archivo de importación se mostrarán junto con los resultados de importación (página siguiente). A continuación podrá seleccionar cuál de estas filas para seguir importando.', + 'LBL_EXT_SOURCE_SIGN_IN' => 'Registrarse', + 'LBL_DUP_HELP' => 'Aquí están las filas del archivo de importación que no han sido importados, ya que contienen datos que coinciden con los valores de los registros existentes sobre la base de la comprobación de duplicados. Los datos que se ponen de relieve son los implicados. Para volver a importar estas filas, descargar la lista, realice los cambios y haga clic en Importar de nuevo .', + 'LBL_DESELECT' => 'Anular la selección', + 'LBL_SUMMARY' => 'Resumen', + 'LBL_OK' => 'Aceptar', + 'LBL_ERROR_HELP' => 'Aquí están las filas del archivo de importación que no fueron importados debido a los errores. Para volver a importar estas filas, descargar la lista, realice los cambios y haga clic en Importar de nuevo .', + 'LBL_EXTERNAL_MAP_HELP' => 'La siguiente tabla contiene los campos de la fuente externa y los campos del módulo al que se asignan. Compruebe las asignaciones para asegurarse de que son lo que usted espera, y hacer los cambios, según sea necesario. Asegúrese de asignar a todos los campos obligatorios (señalados con un asterisco).', + 'LBL_EXTERNAL_MAP_NOTE' => 'La importación se trató de contactos dentro de todos los grupos de contactos de Google.', + 'LBL_EXTERNAL_MAP_NOTE_SUB' => 'Los Nombres de Usuarios de los nuevos usuarios por defecto serán Nombres Completos en Google Contacts. Los Nombres de Usuarios podrán ser modificados posteriormente.', + 'LBL_EXTERNAL_MAP_SUB_HELP' => 'Haga clic en Importar ahora para comenzar la importación. Registros sólo se creará para las entradas que incluyen los apellidos. Los registros no se creará para los datos identificados como duplicados basados ​​en nombres y / o direcciones de correo electrónico coincidentes con registros existentes.', + 'LBL_EXTERNAL_FIELD_TOOLTIP' => 'Esta columna muestra los campos de la fuente externa que contiene los datos que se utilizarán para crear nuevos registros.', + 'LBL_EXTERNAL_DEFAULT_TOOPLTIP' => 'Indicar un valor de uso para el campo en el registro creado si el campo de la fuente externa no contiene datos.', + 'LBL_EXTERNAL_ASSIGNED_TOOLTIP' => 'Para asignar los nuevos registros a un usuario que no sea usted mismo, utilice la columna Valor predeterminado para seleccionar un usuario diferente.', + 'LBL_EXTERNAL_TEAM_TOOLTIP' => 'Para asignar los nuevos registros a otros equipo(s) por defecto, utilice la columna Valor predeterminado para seleccionar los diferentes equipos.', + 'LBL_SIGN_IN_HELP' => 'Para activar este servicio, por favor ingrese en la pestaña Cuentas externas dentro de su página de configuración.', +); \ No newline at end of file diff --git a/modules/InboundEmail/language/es_es.lang.php b/modules/InboundEmail/language/es_es.lang.php new file mode 100644 index 00000000000..d2ad82c29af --- /dev/null +++ b/modules/InboundEmail/language/es_es.lang.php @@ -0,0 +1,194 @@ + 'RE:', + 'ERR_BAD_LOGIN_PASSWORD' => 'Usuario o contraseña incorrecta', + 'ERR_BODY_TOO_LONG' => '\\rEl texto del cuerpo es demasiado largo para capturar el email COMPLETO. Truncado.', + 'ERR_INI_ZLIB' => 'No pudo deshabilitarse la compresión Zlib temporalmente. Puede que "Comprobar Configuración" falle.', + 'ERR_MAILBOX_FAIL' => 'No se pudo recuperar ninguna cuenta de correo.', + 'ERR_NO_IMAP' => 'No se han encontrado las librerías de IMAP. Por favor, resuelva esto antes de continuar con la configuración de correo entrante', + 'ERR_NO_OPTS_SAVED' => 'No se han guardado valores óptimos con su cuenta de correo entrante. Por favor, revise la configuración', + 'ERR_TEST_MAILBOX' => 'Por favor, compruebe su configuración e inténtelo de nuevo.', + 'LBL_APPLY_OPTIMUMS' => 'Aplicar Valores Óptimos', + 'LBL_ASSIGN_TO_USER' => 'Asignar a Usuario', + 'LBL_AUTOREPLY_OPTIONS' => 'Opciones de Respuesta Automática', + 'LBL_AUTOREPLY' => 'Plantilla de Respuesta Automática', + 'LBL_AUTOREPLY_HELP' => 'Seleccione una respuesta automática para notificar a los remitentes de correo que su respuesta ha sido recibida.', + 'LBL_BASIC' => 'Información de la Cuenta de Correo', + 'LBL_CASE_MACRO' => 'Macro de Casos', + 'LBL_CASE_MACRO_DESC' => 'Establece la macro que será analizada y utilizada para vincular el email importado a un Caso.', + 'LBL_CASE_MACRO_DESC2' => 'Establezca ésto a cualquier valor que desee, pero preserve el "%1".', + 'LBL_CERT_DESC' => 'Fozar la validación del Certificado de Seguridad del servidor - no utilizar en certificados no firmados por una autoridad raíz reconocida.', + 'LBL_CERT' => 'Validar Certificado', + 'LBL_CLOSE_POPUP' => 'Cerrar Ventana', + 'LBL_CREATE_NEW_GROUP' => '--Crear Grupo al Guardar--', + 'LBL_CREATE_TEMPLATE' => 'Crear', + 'LBL_SUBSCRIBE_FOLDERS' => 'Suscribirse a Carpetas', + 'LBL_DEFAULT_FROM_ADDR' => 'Por defecto:', + 'LBL_DEFAULT_FROM_NAME' => 'Por defecto:', + 'LBL_DELETE_SEEN' => 'Eliminar Emails Leídos Tras Importación', + 'LBL_EDIT_TEMPLATE' => 'Editar', + 'LBL_EMAIL_OPTIONS' => 'Opciones de Gestión de Correo', + 'LBL_EMAIL_BOUNCE_OPTIONS' => 'Opciones de Gestión de Rebotes', + 'LBL_FILTER_DOMAIN_DESC' => 'Especificar un dominio al cual no se enviarán respuestas automáticas.', + 'LBL_ASSIGN_TO_GROUP_FOLDER_DESC' => 'Seleccione esta opción para se creen automáticamente registros de correo en Sugar para todos los correos entrantes.', + 'LBL_POSSIBLE_ACTION_DESC' => 'Para usar la opción Nuevo Caso, debe seleccionar una Carpeta de Grupo', + 'LBL_FILTER_DOMAIN' => 'No enviar Respuestas Automáticas a este Dominio', + 'LBL_FIND_OPTIMUM_KEY' => 'f', + 'LBL_FIND_OPTIMUM_MSG' => '
Buscando variables óptimas de conexión.', + 'LBL_FIND_OPTIMUM_TITLE' => 'Buscar Configuración Óptima', + 'LBL_FIND_SSL_WARN' => '
La comprobación de SSL puede durar bastante tiempo. Por favor, tenga paciencia.
', + 'LBL_FORCE_DESC' => 'Algunos servidores IMAP/POP3 requieren opciones especiales. Marque para forzar una opción negativa al conectar (ej., /notls)', + 'LBL_FORCE' => 'Forzar Negativo', + 'LBL_FOUND_MAILBOXES' => 'Se han encontrado las siguientes carpetas utilizables.
Haga clic en una para seleccionarla:', + 'LBL_FOUND_OPTIMUM_MSG' => '
Opciones óptimas encontradas. Presiones el siguiente botón para aplicarlas a su cuenta de correo.', + 'LBL_FROM_ADDR' => 'Dirección del remitente', + 'LBL_FROM_ADDR_DESC' => 'La dirección de correo electrónico puesta aquí no aparezca en el campo 'De' dirección del correo electrónico del remitente debido a las restricciones impuestas por el proveedor de servicios de correo electrónico. En estas circunstancias, la dirección de correo electrónico que se define es la del servidor de correo saliente que esta configurado.', + 'LBL_FROM_NAME_ADDR' => 'Nombre/Correo del Remitente', + 'LBL_FROM_NAME' => 'Nombre del remitente', + 'LBL_GROUP_QUEUE' => 'Asignar a Grupo', + 'LBL_HOME' => 'Inicio', + 'LBL_LIST_MAILBOX_TYPE' => 'Utilización de la Cuenta de Correo', + 'LBL_LIST_NAME' => 'Nombre:', + 'LBL_LIST_GLOBAL_PERSONAL' => 'Tipo', + 'LBL_LIST_SERVER_URL' => 'Servidor de Correo', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LOGIN' => 'Nombre de Usuario', + 'LBL_MAILBOX_DEFAULT' => 'INBOX', + 'LBL_MAILBOX_SSL_DESC' => 'Usar SSL en la conexión. Si no funciona, compruebe que su instalación de PHP incluye "--with-imap-ssl" en la configuración.', + 'LBL_MAILBOX_SSL' => 'Usar SSL', + 'LBL_MAILBOX_TYPE' => 'Acciones Posibles', + 'LBL_DISTRIBUTION_METHOD' => 'Método de Distribución', + 'LBL_CREATE_CASE_REPLY_TEMPLATE' => 'Nueva Plantilla de Respuesta Automática para Caso', + 'LBL_CREATE_CASE_REPLY_TEMPLATE_HELP' => 'Seleccione una respuesta automática para notificar a los remitentes de correo que se ha creado un nuevo caso. El correo contiene el número de caso en la línea de Asunto acorde con la configuración de la Macro de Caso. Esta respuesta sólo se enviará cuando se reciba el primer correo de un remitente.', + 'LBL_MAILBOX' => 'Carpetas Monitorizadas', + 'LBL_TRASH_FOLDER' => 'Papelera', + 'LBL_GET_TRASH_FOLDER' => 'Obtener Papelera', + 'LBL_SENT_FOLDER' => 'Elementos Enviados', + 'LBL_GET_SENT_FOLDER' => 'Obtener Elementos Eliminados', + 'LBL_SELECT' => 'Seleccionar', + 'LBL_MARK_READ_DESC' => 'Importar y marcar mensajes como leídos en el servidor de correo; no borrar.', + 'LBL_MARK_READ_NO' => 'Email marcado como borrado tras importación', + 'LBL_MARK_READ_YES' => 'Email dejado en el servidor tras importación', + 'LBL_MARK_READ' => 'Dejar mensajes en el servidor', + 'LBL_MAX_AUTO_REPLIES' => 'Número de respuestas automáticas', + 'LBL_MAX_AUTO_REPLIES_DESC' => 'Establece el máximo número de respuestas automáticas a enviar a una única dirección de correo durante un período de 24 horas.', + 'LBL_PERSONAL_MODULE_NAME' => 'Cuenta de Correo Personal', + 'LBL_CREATE_CASE' => 'Crear Caso desde Correo', + 'LBL_CREATE_CASE_HELP' => 'Seleccione esta opción para crear automáticamente registros de casos en Sugar a partir de correos entrantes.', + 'LBL_MODULE_NAME' => 'Cuenta de Correo de Grupo', + 'LBL_BOUNCE_MODULE_NAME' => 'Bandeja de Gestión de Correo Rebotado', + 'LBL_MODULE_TITLE' => 'Correo Entrante', + 'LBL_NAME' => 'Nombre', + 'LBL_NONE' => 'Ninguno', + 'LBL_NO_OPTIMUMS' => 'No se han encontrado valores óptimos. Por favor, compruebe su configuración e inténtelo de nuevo.', + 'LBL_ONLY_SINCE_DESC' => 'Al usar POP3, PHP no se pueden realizar filtros en mesajes Nuevos/No leídos. Esta opción permite que se soliciten mensajes desde la última vez que la bandeja fue consultada. Esto mejorará significativamente el rendimiento si su servidor de correo no soporta IMAP.', + 'LBL_ONLY_SINCE_NO' => 'No. Comprobar contra todos los correos en el servidor de correo.', + 'LBL_ONLY_SINCE_YES' => 'Sí.', + 'LBL_ONLY_SINCE' => 'Importar sólo desde la última comprobación', + 'LBL_OUTBOUND_SERVER' => 'Servidor de Correo Saliente', + 'LBL_PASSWORD_CHECK' => 'Comprobar Contraseña', + 'LBL_PASSWORD' => 'Contraseña', + 'LBL_POP3_SUCCESS' => 'Su prueba de conexión de POP3 tuvo éxito.', + 'LBL_POPUP_FAILURE' => 'Prueba de conexión fallida. El error es el siguiente:', + 'LBL_POPUP_SUCCESS' => 'Prueba de conexión exitosa. Su configuración funciona.', + 'LBL_POPUP_TITLE' => 'Comprobar Configuración', + 'LBL_GETTING_FOLDERS_LIST' => 'Obteniendo Lista de Carpetas', + 'LBL_SELECT_SUBSCRIBED_FOLDERS' => 'Seleccionar Carpetas Suscritas', + 'LBL_SELECT_TRASH_FOLDERS' => 'Seleccionar Papelera', + 'LBL_SELECT_SENT_FOLDERS' => 'Seleccionar Carpeta de Elementos Enviados', + 'LBL_DELETED_FOLDERS_LIST' => 'Las siguientes carpetas %s o no existen o han sido eliminadas del servidor', + 'LBL_PORT' => 'Puerto del Servidor de Correo', + 'LBL_QUEUE' => 'Cola de la Cuenta de Correo', + 'LBL_REPLY_NAME_ADDR' => 'Responder a Nombre/Correo', + 'LBL_REPLY_TO_NAME' => 'Nombre de "Responder A"', + 'LBL_REPLY_TO_ADDR' => 'Dirección de "Responder A"', + 'LBL_SAME_AS_ABOVE' => 'Usando el mismo Nombre/Dirección', + 'LBL_SAVE_RAW' => 'Guardar Código Fuente Original', + 'LBL_SAVE_RAW_DESC_1' => 'Seleccione "Sí" si quiere preservar el código fuente original para cada email importado.', + 'LBL_SAVE_RAW_DESC_2' => 'Los archivos adjuntos grandes pueden producir erroror en bases de datos configuradas de forma restringida o incorrecta.', + 'LBL_SERVER_OPTIONS' => 'Configuración Avanzada', + 'LBL_SERVER_TYPE' => 'Protocolo del Servidor de Correo', + 'LBL_SERVER_URL' => 'Dirección del Servidor de Correo', + 'LBL_SSL_DESC' => 'Si su servidor de correo soporta conexiones seguras de sockets (SSL), habilitar esta opción forzará conexiones SSL al importar el correo.', + 'LBL_ASSIGN_TO_TEAM_DESC' => 'El equipo seleccionado tiene acceso a la cuenta de correo.', + 'LBL_SSL' => 'Usar SSL', + 'LBL_STATUS' => 'Estado', + 'LBL_SYSTEM_DEFAULT' => 'Por Defecto en el Sistema', + 'LBL_TEST_BUTTON_KEY' => 't', + 'LBL_TEST_BUTTON_TITLE' => 'Probar [Alt+T]', + 'LBL_TEST_SETTINGS' => 'Probar Configuración', + 'LBL_TEST_SUCCESSFUL' => 'Conexión completada con éxito.', + 'LBL_TEST_WAIT_MESSAGE' => 'Un momento, por favor...', + 'LBL_TLS_DESC' => 'Usar Transport Layer Security para conectarse al servidor de correo - sólo use ésto si su servidor de correo soporta este protocolo.', + 'LBL_TLS' => 'Usar TLS', + 'LBL_WARN_IMAP_TITLE' => 'Correo Entrante Deshabilitado', + 'LBL_WARN_IMAP' => 'Avisos:', + 'LBL_WARN_NO_IMAP' => 'El Correo Entrante no puede funcionar sin las librerías de C del cliente de IMAP habilitadas/compiladas en el módulo de PHP. Por favor, contacte con su administrador para resolver este problema.', + 'LNK_CREATE_GROUP' => 'Crear Nuevo Grupo', + 'LNK_LIST_CREATE_NEW_GROUP' => 'Nueva Cuenta de Correo de Grupo', + 'LNK_LIST_CREATE_NEW_BOUNCE' => 'Nueva Cuenta de Gestión de Rebotes', + 'LNK_LIST_MAILBOXES' => 'Todas las Cuentas de Correo', + 'LNK_LIST_QUEUES' => 'Todas las Colas', + 'LNK_LIST_SCHEDULER' => 'Planificadores', + 'LNK_LIST_TEST_IMPORT' => 'Probar Importación de Correo', + 'LNK_NEW_QUEUES' => 'Crear Nueva Cola', + 'LNK_SEED_QUEUES' => 'Crear Cabeza de Serie para Colas de Equipos', + 'LBL_IS_PERSONAL' => 'personal', + 'LBL_GROUPFOLDER_ID' => 'Id de Carpeta de Grupo', + 'LBL_ASSIGN_TO_GROUP_FOLDER' => 'Asignar a Carpeta de Grupo', + 'LBL_ALLOW_OUTBOUND_GROUP_USAGE' => 'Permitir que los usuarios envíen correo usando el Nombre y la Dirección del campo "De" como dirección de respuesta', + 'LBL_ALLOW_OUTBOUND_GROUP_USAGE_DESC' => 'Cuando se selecciona esta opción, el Nombre y Dirección del remitente asociados a la cuenta de correo de este grupo aparecerán como una opción para el campo "De" al escribir un correo para los usuarios que tengan acceso a la cuenta de correo del grupo.', + 'LBL_STATUS_ACTIVE' => 'Activo', + 'LBL_STATUS_INACTIVE' => 'Inactivo', + 'LBL_IS_GROUP' => 'grupo', + 'LBL_ENABLE_AUTO_IMPORT' => 'Importar Correos Automáticamente', + 'LBL_WARNING_CHANGING_AUTO_IMPORT' => 'Aviso: Está modificando su configuración de importación automática lo cual puede provocar pérdida de datos.', + 'LBL_WARNING_CHANGING_AUTO_IMPORT_WITH_CREATE_CASE' => 'Aviso: La importación automática debe estar habilitada para la creación automática de casos.', + 'LBL_EDIT_LAYOUT' => 'Editar diseño', +); \ No newline at end of file diff --git a/modules/LabelEditor/language/es_es.lang.php b/modules/LabelEditor/language/es_es.lang.php new file mode 100644 index 00000000000..256cfb5b806 --- /dev/null +++ b/modules/LabelEditor/language/es_es.lang.php @@ -0,0 +1,52 @@ + 'Editor de Etiquetas', + 'LBL_KEY' => 'Clave:', + 'LBL_VALUE' => 'Valor:', +); \ No newline at end of file diff --git a/modules/Leads/language/es_es.lang.php b/modules/Leads/language/es_es.lang.php new file mode 100644 index 00000000000..b794f9cb484 --- /dev/null +++ b/modules/Leads/language/es_es.lang.php @@ -0,0 +1,280 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre:', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Usuario Modificado', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Usuario Asignado:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_SALUTATION' => 'Saludo', + 'LBL_FIRST_NAME' => 'Nombre:', + 'LBL_LAST_NAME' => 'Apellidos:', + 'LBL_TITLE' => 'Cargo:', + 'LBL_DEPARTMENT' => 'Departamento:', + 'LBL_DO_NOT_CALL' => 'No llamar:', + 'LBL_HOME_PHONE' => 'Tel. casa:', + 'LBL_MOBILE_PHONE' => 'Móvil:', + 'LBL_OFFICE_PHONE' => 'Tel. Oficina:', + 'LBL_OTHER_PHONE' => 'Tel. Alternativo:', + 'LBL_FAX_PHONE' => 'Fax:', + 'LBL_EMAIL_ADDRESS' => 'Correo electrónico:', + 'LBL_PRIMARY_ADDRESS' => 'Dirección principal:', + 'LBL_PRIMARY_ADDRESS_STREET' => 'Calle de dirección principal', + 'LBL_PRIMARY_ADDRESS_STREET_2' => 'Calle de dirección principal 2', + 'LBL_PRIMARY_ADDRESS_STREET_3' => 'Calle de dirección principal 3', + 'LBL_PRIMARY_ADDRESS_CITY' => 'Ciudad de dirección principal', + 'LBL_PRIMARY_ADDRESS_STATE' => 'Estado/Provincia de dirección principal', + 'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'CP de dirección principal', + 'LBL_PRIMARY_ADDRESS_COUNTRY' => 'País de dirección principal', + 'LBL_ALT_ADDRESS' => 'Otra dirección:', + 'LBL_ALT_ADDRESS_STREET' => 'Calle de dirección alternativa', + 'LBL_ALT_ADDRESS_STREET_2' => 'Calle de dirección alternativa 2', + 'LBL_ALT_ADDRESS_STREET_3' => 'Calle de dirección alternativa 3', + 'LBL_ALT_ADDRESS_CITY' => 'Ciudad de dirección alternativa', + 'LBL_ALT_ADDRESS_STATE' => 'Estado/Provincia de dirección alternativa', + 'LBL_ALT_ADDRESS_POSTALCODE' => 'CP de dirección alternativa', + 'LBL_ALT_ADDRESS_COUNTRY' => 'País de dirección alternativa', + 'LBL_COUNTRY' => 'País:', + 'LBL_STREET' => 'Calle', + 'LBL_PRIMARY_STREET' => 'Dirección', + 'LBL_ALT_STREET' => 'Otra dirección', + 'LBL_CITY' => 'Ciudad:', + 'LBL_STATE' => 'Estado/Provincia:', + 'LBL_POSTALCODE' => 'Código Postal', + 'LBL_POSTAL_CODE' => 'Código postal:', + 'LBL_CONTACT_INFORMATION' => 'Visión General', + 'LBL_ADDRESS_INFORMATION' => 'Direcciones', + 'LBL_OTHER_EMAIL_ADDRESS' => 'Email Alternativo:', + 'LBL_ASSISTANT' => 'Asistente', + 'LBL_ASSISTANT_PHONE' => 'Tel. Asistente', + 'LBL_WORK_PHONE' => 'Tel. Trabajo', + 'LNK_IMPORT_VCARD' => 'Nuevo Cliente Potencial desde vCard', + 'LBL_ANY_EMAIL' => 'Cualquier Email:', + 'LBL_EMAIL_NON_PRIMARY' => 'Correo Electrónico No Principal', + 'db_last_name' => 'LBL_LIST_LAST_NAME', + 'db_first_name' => 'LBL_LIST_FIRST_NAME', + 'db_title' => 'LBL_LIST_TITLE', + 'db_email1' => 'LBL_LIST_EMAIL_ADDRESS', + 'db_account_name' => 'LBL_LIST_ACCOUNT_NAME', + 'db_email2' => 'LBL_LIST_EMAIL_ADDRESS', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a eliminar.', + 'LBL_ACCOUNT_DESCRIPTION' => 'Descripción de la Cuenta', + 'LBL_ACCOUNT_ID' => 'ID Cuenta', + 'LBL_ACCOUNT_NAME' => 'Nombre de cuenta:', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_ADD_BUSINESSCARD' => 'Añadir Tarjeta de Visita', + 'LBL_ALTERNATE_ADDRESS' => 'Dirección alternativa:', + 'LBL_ANY_ADDRESS' => 'Cualquier dirección:', + 'LBL_ANY_PHONE' => 'Cualquier teléfono:', + 'LBL_BACKTOLEADS' => 'Volver a Cliente Potenciales', + 'LBL_BUSINESSCARD' => 'Convertir Cliente Potencial', + 'LBL_CONTACT_ID' => 'ID Contacto', + 'LBL_CONTACT_NAME' => 'Nombre del cliente potencial:', + 'LBL_CONTACT_OPP_FORM_TITLE' => 'Cliente Potencial-Oportunidad:', + 'LBL_CONTACT_ROLE' => 'Rol:', + 'LBL_CONTACT' => 'Cliente Potencial:', + 'LBL_CONVERTED_ACCOUNT' => 'Cuenta Convertida:', + 'LBL_CONVERTED_CONTACT' => 'Contacto Convertido:', + 'LBL_CONVERTED_OPP' => 'Oportunidad Convertida:', + 'LBL_CONVERTED' => 'Convertido', + 'LBL_CONVERTLEAD_BUTTON_KEY' => 'V', + 'LBL_CONVERTLEAD_TITLE' => 'Convertir Cliente Potencial [Alt+V]', + 'LBL_CONVERTLEAD' => 'Convertir Cliente Potencial', + 'LBL_CONVERTLEAD_WARNING' => 'Aviso: El estado del Cliente Potencial que está a punto de convertir es "Convertido". Es posible que ya se haya creado algún registros de tipo Contacto y/o Cuenta a partir de este Cliente Potencial. Si desea continuar con la conversión del Cliente Potencial, haga clic en Guardar. Para volver al Cliente Potencial sin realizar la conversión, haga clic en Cancelar.', + 'LBL_CONVERTLEAD_WARNING_INTO_RECORD' => 'Posible Contacto:', + 'LBL_CREATED_NEW' => 'Ha creado un nuevo', + 'LBL_CREATED_ACCOUNT' => 'Creada una nueva cuenta', + 'LBL_CREATED_CALL' => 'Creada una nueva llamada', + 'LBL_CREATED_CONTACT' => 'Creado un nuevo contacto', + 'LBL_CREATED_MEETING' => 'Creada una nueva reunión', + 'LBL_CREATED_OPPORTUNITY' => 'Creada una nueva oportunidad', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_DUPLICATE' => 'Clientes potenciales similares', + 'LBL_EMAIL_OPT_OUT' => 'Rehusar Email:', + 'LBL_EXISTING_ACCOUNT' => 'Usada una cuenta existente', + 'LBL_EXISTING_CONTACT' => 'Usado un contacto existente', + 'LBL_EXISTING_OPPORTUNITY' => 'Usada una oportunidad existente', + 'LBL_FULL_NAME' => 'Nombre Completo:', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_IMPORT_VCARD' => 'Importar vCard', + 'LBL_VCARD' => 'vCard', + 'LBL_IMPORT_VCARDTEXT' => 'Automaticamente crea un nuevo cliente potencial importando una vCard.', + 'LBL_INVALID_EMAIL' => 'Email No Váildo:', + 'LBL_INVITEE' => 'Informadores', + 'LBL_LEAD_SOURCE_DESCRIPTION' => 'Descripción de toma de contacto:', + 'LBL_LEAD_SOURCE' => 'Toma de contacto:', + 'LBL_LIST_ACCEPT_STATUS' => 'Aceptar Estato', + 'LBL_LIST_ACCOUNT_NAME' => 'Cuenta', + 'LBL_LIST_CONTACT_NAME' => 'Contacto', + 'LBL_LIST_CONTACT_ROLE' => 'Rol', + 'LBL_LIST_DATE_ENTERED' => 'Creado', + 'LBL_LIST_EMAIL_ADDRESS' => 'Email', + 'LBL_LIST_FIRST_NAME' => 'Nombre', + 'LBL_VIEW_FORM_TITLE' => 'Vista de Clientes Potenciales', + 'LBL_LIST_FORM_TITLE' => 'Lista de Clientes Potenciales', + 'LBL_LIST_LAST_NAME' => 'Apellidos', + 'LBL_LIST_LEAD_SOURCE_DESCRIPTION' => 'Descripción de Toma de Contacto', + 'LBL_LIST_LEAD_SOURCE' => 'Toma de Contacto', + 'LBL_LIST_MY_LEADS' => 'Mis Clientes Potenciales', + 'LBL_LIST_PHONE' => 'Teléfono', + 'LBL_LIST_REFERED_BY' => 'Referido por', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_TITLE' => 'Cargo', + 'LBL_MODULE_NAME' => 'Clientes Potenciales', + 'LBL_MODULE_TITLE' => 'Clientes Potenciales: Inicio', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Cliente Potencial', + 'LBL_NEW_PORTAL_PASSWORD' => 'Nueva Contraseña del Portal:', + 'LBL_OPP_NAME' => 'Nombre de la Oportunidad:', + 'LBL_OPPORTUNITY_AMOUNT' => 'Cantidad de la Oportunidad:', + 'LBL_OPPORTUNITY_ID' => 'ID Oportunidad', + 'LBL_OPPORTUNITY_NAME' => 'Nombre de la Oportunidad:', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_PORTAL_ACTIVE' => 'Portal Activo:', + 'LBL_PORTAL_APP' => 'Aplicación del Portal', + 'LBL_PORTAL_INFORMATION' => 'Información del Portal', + 'LBL_PORTAL_NAME' => 'Nombre del Portal:', + 'LBL_PORTAL_PASSWORD_ISSET' => 'Contraseña del Portal Establecida:', + 'LBL_REFERED_BY' => 'Referido por:', + 'LBL_REPORTS_TO_ID' => 'Informa a ID', + 'LBL_REPORTS_TO' => 'Informa a:', + 'LBL_REPORTS_FROM' => 'Informes de:', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Clientes Potenciales', + 'LBL_SELECT_CHECKED_BUTTON_LABEL' => 'Seleccionar Clientes Potenciales Marcados', + 'LBL_SELECT_CHECKED_BUTTON_TITLE' => 'Seleccionar Clientes Potenciales Marcados', + 'LBL_STATUS_DESCRIPTION' => 'Descripción estado:', + 'LBL_STATUS' => 'Estado:', + 'LNK_LEAD_LIST' => 'Ver Clientes Potenciales', + 'LNK_NEW_ACCOUNT' => 'Nueva Cuenta', + 'LNK_NEW_APPOINTMENT' => 'Nueva Cita', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LNK_NEW_LEAD' => 'Nuevo Cliente Potencial', + 'LNK_NEW_NOTE' => 'Nueva Nota', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'LNK_NEW_CASE' => 'Nuevo Caso', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_SELECT_ACCOUNTS' => 'O Seleccione una Cuenta', + 'LNK_SELECT_CONTACTS' => 'O Seleccione un Contacto', + 'NTC_COPY_ALTERNATE_ADDRESS' => 'Copiar dirección alternativa a dirección principal', + 'NTC_COPY_PRIMARY_ADDRESS' => 'Copiar dirección principal a dirección alternativa', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'NTC_OPPORTUNITY_REQUIRES_ACCOUNT' => 'La creación de una oportunidad requiere una cuenta.\\n Por favor, o bien cree una nueva o seleccione una existente.', + 'NTC_REMOVE_CONFIRMATION' => '¿Está seguro de que desea quitar este cliente potencial del caso?', + 'NTC_REMOVE_DIRECT_REPORT_CONFIRMATION' => '¿Está seguro que quiere quitar este registro como informador?', + 'LBL_CAMPAIGN_LIST_SUBPANEL_TITLE' => 'Campañas', + 'LBL_TARGET_OF_CAMPAIGNS' => 'Campaña Existosa:', + 'LBL_TARGET_BUTTON_LABEL' => 'Objetivo', + 'LBL_TARGET_BUTTON_TITLE' => 'Objetivo', + 'LBL_TARGET_BUTTON_KEY' => 'T', + 'LBL_CAMPAIGN_ID' => 'Id de Campaña', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_PROSPECT_LIST' => 'Público Objetivo', + 'LBL_CAMPAIGN_LEAD' => 'Campañas', + 'LBL_BIRTHDATE' => 'Cumpleaños:', + 'LBL_THANKS_FOR_SUBMITTING_LEAD' => 'Gracias por la información.', + 'LBL_SERVER_IS_CURRENTLY_UNAVAILABLE' => 'Disculpe, el servidor no está disponible en estos momentos. Por favor, inténtelo de nuevo más tarde.', + 'LBL_REGISTRATION' => 'Registro', + 'LBL_MESSAGE' => 'Por favor, introduzca sus datos a continuación. Se creará la información y/o cuenta para usted, pendiente de aprobación.', + 'LBL_SAVED' => 'Gracias por registrarse. Su cuenta será creada y se pondrán en contacto con usted en breve.', + 'LBL_CLICK_TO_RETURN' => 'Volver al Portal', + 'LBL_CAMPAIGNS' => 'Campañas', + 'LBL_CAMPAIGNS_SUBPANEL_TITLE' => 'Campañas', + 'LBL_CONVERT_MODULE_NAME' => 'Módulo', + 'LBL_CONVERT_REQUIRED' => 'Requerido', + 'LBL_CONVERT_SELECT' => 'Permitir Selección', + 'LBL_CONVERT_COPY' => 'Copiar Datos', + 'LBL_CONVERT_EDIT' => 'Editar', + 'LBL_CONVERT_DELETE' => 'Eliminar', + 'LBL_CONVERT_ADD_MODULE' => 'Agregar Módulo', + 'LBL_CREATE' => 'Crear', + 'LBL_SELECT' => 'O Seleccionar', + 'LBL_WEBSITE' => 'Sitio Web', + 'LNK_IMPORT_LEADS' => 'Importar Clientes Potenciales', + 'LBL_NOTICE_OLD_LEAD_CONVERT_OVERRIDE' => 'Aviso: La pantalla actual de Convertir Cliente Potencial contiene campos personalizados. Cuando personalice por primera vez la pantalla de Convertir Cliente Potencial en el Estudio, tendrá que añadir los campos personalizados al diseño, según sea necesario. Los campos personalizados no aparecerán automáticamente en el diseño como lo hacían antes.', + 'LBL_MODULE_TIP' => 'Módulo en el que crear un nuevo registro.', + 'LBL_REQUIRED_TIP' => 'Debe seleccionar o crear los módulos requeridos antes de que el cliente potencial pueda ser convertido.', + 'LBL_COPY_TIP' => 'Si está seleccionado, los campos del cliente potencial serán copiados a campos con el mismo nombre en los registros recién creados.', + 'LBL_SELECTION_TIP' => 'Los módulos con un campo relacionado en Contactos pueden ser seleccionados en lugar de creados durante el proceso de conversión del cliente potencial.', + 'LBL_EDIT_TIP' => 'Modificar el diseño de conversión para este módulo.', + 'LBL_DELETE_TIP' => 'Quitar este módulo del diseño de conversión.', + 'LBL_ACTIVITIES_MOVE' => 'Mover actividad a', + 'LBL_ACTIVITIES_COPY' => 'Copiar actividad a', + 'LBL_ACTIVITIES_MOVE_HELP' => 'Seleccione los registros de actividad que quiera mover de los clientes potenciales. Tareas, llamadas, reuniones, notas y correos electrónicos que serán trasladados al registro seleccionado.', + 'LBL_ACTIVITIES_COPY_HELP' => 'Selecciona el o los resgistros para cada copia creada de las actividades de los Clientes Potenciales. Las nuevas Tareas, Llamadas, Reuniones y Notas serán creadas para cada registro seleccionado. Los Emails se relacionarán con los registros seleccionados.', + 'LBL_PHONE_HOME' => 'Teléfono de casa', + 'LBL_PHONE_MOBILE' => 'Móvil', + 'LBL_PHONE_WORK' => 'Teléfono del trabajo', + 'LBL_PHONE_OTHER' => 'Otro teléfono', + 'LBL_PHONE_FAX' => 'Fax oficina', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID Usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_PHONE_MOBILE' => 'Móvil', + 'LBL_EXPORT_EMAIL2' => 'Otra Dirección de Email', + 'LBL_EDITLAYOUT' => 'Editar diseño', + 'LBL_ENTERDATE' => 'Introducir fecha', + 'LBL_LOADING' => 'Cargando ...', + 'LBL_EDIT_INLINE' => 'Editar', +); \ No newline at end of file diff --git a/modules/MailMerge/language/es_es.lang.php b/modules/MailMerge/language/es_es.lang.php new file mode 100644 index 00000000000..ca756663cfb --- /dev/null +++ b/modules/MailMerge/language/es_es.lang.php @@ -0,0 +1,86 @@ + 'Paso 1: Seleccione módulo y plantilla', + 'LBL_MAILMERGE_MODULE' => 'Seleccione Módulo:', + 'LBL_MAILMERGE_SELECTED_MODULE' => 'Módulo Seleccionado:', + 'LBL_MAILMERGE_TEMPLATES' => 'Seleccione plantilla:', + 'LBL_STEP_2' => 'Paso 2: Seleccione objetos a combinar', + 'LBL_MAILMERGE_OBJECTS' => 'Seleccione objetos:', + 'LBL_STEP_3' => 'Establezca asociación de contactos', + 'LBL_STEP_4' => 'Revise y complete', + 'LBL_SELECTED_MODULE' => 'Módulo Seleccionado:', + 'LBL_SELECTED_TEMPLATE' => 'Plantilla Seleccionada:', + 'LBL_SELECTED_ITEMS' => 'Elementos Seleccionados:', + 'LBL_STEP_5' => 'Combinación de correspondencia completada', + 'LBL_MERGED_FILE' => 'Archivo Combinado:', + 'LNK_NEW_MAILMERGE' => 'Iniciar combinación de correspondencia', + 'LNK_UPLOAD_TEMPLATE' => 'Subir plantilla', + 'LBL_DOC_NAME' => 'Nombre de Documento:', + 'LBL_FILENAME' => 'Nombre de Archivo:', + 'LBL_DOC_VERSION' => 'Revisión:', + 'LBL_DOC_DESCRIPTION' => 'Descripción:', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_RELATIONSHIP' => 'Establecer Relación de Contactos', + 'LBL_FINISH' => 'Iniciar Combinación', + 'LBL_NEXT' => 'Siguiente >', + 'LBL_BACK' => '< Anterior', + 'LBL_START' => 'Haga Clic Aquí para Continuar', + 'LBL_TEMPLATE_NOTICE' => 'Las plantillas son documentos de Microsoft Word que contienen campos de combinación de correspondencia que han sido subidos y almacenados en el módulo de Documentos.', + 'LBL_CONTAINS_CONTACT_INFO' => 'La plantilla seleccionada contiene la siguiente información relacionada', + 'LBL_ADDIN_NOTICE' => 'Requiere la instalación del complemento Sugar Mail Merge en Microsoft Word.', + 'LBL_BROWSER_NOTICE' => 'Debe utilizar IE 6.0 o superior para realizar la combinación actual.', + 'LBL_REMOVE' => 'Quitar registro(s)', + 'LBL_ADD' => 'Agregar registro(s)', + 'LBL_BROWSER_REQUIREMENT' => 'This requires IE 6.0 or greater for Windows.', + 'LBL_FORM_SELECT_TEMPLATE' => 'Please select a template.', + 'LBL_SELECT_ONE' => 'Please select at least one item.', + 'LBL_AVAILABLE' => 'Available', + 'LBL_SELECTED' => 'Selected', + 'LBL_RELATED_INFO_SELECTION' => 'Use the selections below to identify the related information you would like to display in your merged document. Skip this step if your template document contains no related information.', +); \ No newline at end of file diff --git a/modules/Meetings/language/es_es.lang.php b/modules/Meetings/language/es_es.lang.php new file mode 100644 index 00000000000..b9ecd8df463 --- /dev/null +++ b/modules/Meetings/language/es_es.lang.php @@ -0,0 +1,191 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Usuario Modificado', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'quit', + 'LBL_ASSIGNED_TO_ID' => 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a:', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a eliminar.', + 'LBL_ACCEPT_THIS' => '¿Aceptar?', + 'LBL_ADD_BUTTON' => 'Añadir', + 'LBL_ADD_INVITEE' => 'Añadir Asistentes', + 'LBL_COLON' => ':', + 'LBL_CONTACT_NAME' => 'Nombre Contacto:', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_CREATED_BY' => 'Creado por', + 'LBL_DATE_END' => 'Fecha Fin', + 'LBL_DATE_TIME' => 'Fecha y hora de inicio:', + 'LBL_DATE' => 'Fecha Inicio:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Reuniones', + 'LBL_DEL' => 'Eliminar', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_DIRECTION' => 'Dirección:', + 'LBL_DURATION_HOURS' => 'Horas Duración:', + 'LBL_DURATION_MINUTES' => 'Minutos Duración:', + 'LBL_DURATION' => 'Duración:', + 'LBL_EMAIL' => 'Email', + 'LBL_FIRST_NAME' => 'Nombre', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Notas', + 'LBL_HOURS_ABBREV' => 'h', + 'LBL_HOURS_MINS' => '(horas/minutos)', + 'LBL_INVITEE' => 'Asistentes', + 'LBL_LAST_NAME' => 'Apellidos', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_LIST_CLOSE' => 'Cerrado', + 'LBL_LIST_CONTACT' => 'Contacto', + 'LBL_LIST_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_LIST_DATE' => 'Fecha Inicio', + 'LBL_LIST_DIRECTION' => 'Dirección', + 'LBL_LIST_DUE_DATE' => 'Fecha de Vencimiento', + 'LBL_LIST_FORM_TITLE' => 'Lista de Reuniones', + 'LBL_LIST_MY_MEETINGS' => 'Mis Reuniones', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_TIME' => 'Hora Inicio', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_LOCATION' => 'Lugar:', + 'LBL_MEETING' => 'Reunión:', + 'LBL_MINSS_ABBREV' => 'm', + 'LBL_MODIFIED_BY' => 'Modificado por', + 'LBL_MODULE_NAME' => 'Reuniones', + 'LBL_MODULE_TITLE' => 'Reuniones: Inicio', + 'LBL_NEW_FORM_TITLE' => 'Crear Cita', + 'LBL_OUTLOOK_ID' => 'ID Outlook', + 'LBL_SEQUENCE' => 'Secuencia de actualización de la reunión', + 'LBL_PHONE' => 'Teléfono', + 'LBL_REMINDER_TIME' => 'Hora Aviso', + 'LBL_EMAIL_REMINDER_SENT' => 'Recordatorio por correo electrónico enviado', + 'LBL_REMINDER' => 'Aviso:', + 'LBL_REMINDER_POPUP' => 'Popup', + 'LBL_REMINDER_EMAIL' => 'Email', + 'LBL_REMINDER_EMAIL_ALL_INVITEES' => 'Enviar correo electrónico a todos los asistentes', + 'LBL_EMAIL_REMINDER' => 'Eecordatorio por correo electrónico', + 'LBL_EMAIL_REMINDER_TIME' => 'Tiempo de recordatorio por correo electrónico', + 'LBL_SCHEDULING_FORM_TITLE' => 'Planificación', + 'LBL_SEARCH_BUTTON' => 'Búsqueda', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Reuniones', + 'LBL_SEND_BUTTON_KEY' => 'I', + 'LBL_SEND_BUTTON_LABEL' => 'Guardar y Enviar Invitaciones', + 'LBL_SEND_BUTTON_TITLE' => 'Guardar y Enviar Invitaciones', + 'LBL_STATUS' => 'Estado:', + 'LBL_TYPE' => 'Tipo de reunión', + 'LBL_PASSWORD' => 'Contraseña de la reunión', + 'LBL_URL' => 'Iniciar/Unirse a la reunión', + 'LBL_HOST_URL' => 'Host URL', + 'LBL_DISPLAYED_URL' => 'Ver URL', + 'LBL_CREATOR' => 'Creador de reuniones', + 'LBL_EXTERNALID' => 'ID App Externa', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_TIME' => 'Hora Inicio:', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LBL_ACTIVITIES_REPORTS' => 'Informe de Actividad', + 'LBL_PARENT_TYPE' => 'Tipo de Padre', + 'LBL_PARENT_ID' => 'ID Padre', + 'LNK_MEETING_LIST' => 'Ver Reuniones', + 'LNK_NEW_APPOINTMENT' => 'Crear Cita', + 'LNK_NEW_MEETING' => 'Programar Reunión', + 'LNK_IMPORT_MEETINGS' => 'Importar Reuniones', + 'NTC_REMOVE_INVITEE' => '¿Está seguro que desea quitar a este asistente de la reunión?', + 'NOTICE_DURATION_TIME' => 'El tiempo de duración debe ser mayor que 0', + 'LBL_MEETING_INFORMATION' => 'Resumen de la Reunión', + 'LBL_LIST_JOIN_MEETING' => 'Unirser a la reunión', + 'LBL_JOIN_EXT_MEETING' => 'Unirser a la reunión', + 'LBL_HOST_EXT_MEETING' => 'Iniciar una reunión', + 'LBL_ACCEPT_STATUS' => 'Aceptar estato', + 'LBL_ACCEPT_LINK' => 'Aceptar Link', + 'LBL_EXTNOT_HEADER' => 'Error: No fue invitado', + 'LBL_EXTNOT_MAIN' => 'No es capaz de unirse a esta reunión, porque usted no es un asistente.', + 'LBL_EXTNOT_RECORD_LINK' => 'Ver reunión', + 'LBL_EXTNOT_GO_BACK' => 'Volver al registro anterior', + 'LBL_EXTNOSTART_HEADER' => 'Error: No se puede iniciar la reunión', + 'LBL_EXTNOSTART_MAIN' => 'No se puede iniciar esta reunión, ya que no es un administrador o el dueño de la reunión.', + 'LBL_EXPORT_JOIN_URL' => 'Indicar Url', + 'LBL_EXPORT_HOST_URL' => 'Host Url', + 'LBL_EXPORT_DISPLAYED_URL' => 'URL que se muestra', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID usuario asignado', + 'LBL_EXPORT_EXTERNAL_ID' => 'ID externo', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_DATE_START' => 'Fecha y hora de inicio', + 'LBL_EXPORT_DATE_END' => 'Fecha y hora de fin', + 'LBL_EXPORT_PARENT_TYPE' => 'Relacionado con', + 'LBL_EXPORT_PARENT_ID' => 'ID Padre', + 'LBL_EXPORT_REMINDER_TIME' => 'Tiempo de recordatorio (en minutos)', + 'LBL_CREATE_INVITEE' => 'Crear una invitación', + 'LBL_CREATE_CONTACT' => 'Nuevo Contacto', + 'LBL_CREATE_LEAD' => 'Nuevo Cliente Potencial', + 'LBL_CREATE_AND_ADD' => 'Crear y Añadir', + 'LBL_CANCEL_CREATE_INVITEE' => 'Cancelar', + 'LBL_EMPTY_SEARCH_RESULT' => 'Lo sentimos, no se encontraron resultados. Por favor cree un asistente abajo.', + 'LBL_NO_ACCESS' => 'No tiene permisos para crear registros en el módulo $module', + 'LBL_REPEAT_TYPE' => 'Repetición', + 'LBL_REPEAT_INTERVAL' => 'Intervalo de repetición', + 'LBL_REPEAT_DOW' => 'Repita el Dow', + 'LBL_REPEAT_UNTIL' => 'Repetir hasta', + 'LBL_REPEAT_COUNT' => 'Número de repeticiones', + 'LBL_REPEAT_PARENT_ID' => 'Repita el ID principal', + 'LBL_RECURRING_SOURCE' => 'Fuente periódica', + 'LBL_SYNCED_RECURRING_MSG' => 'Esta convocatoria se originó en otro sistema y se sincronizan con el Sugar. Para realizar cambios, vaya a la reunión original en el otro sistema. Los cambios realizados en el otro sistema se puede sincronizar con este registro.', + 'LBL_RELATED_TO' => 'Relacionado con:', +); \ No newline at end of file diff --git a/modules/MergeRecords/language/es_es.lang.php b/modules/MergeRecords/language/es_es.lang.php new file mode 100644 index 00000000000..47554ac86fa --- /dev/null +++ b/modules/MergeRecords/language/es_es.lang.php @@ -0,0 +1,79 @@ + 'Combinación de Registros', + 'LBL_MODULE_TITLE' => 'Combinación de Registros: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Combinaciones', + 'LBL_LIST_FORM_TITLE' => 'Lista de Combinaciones', + 'LBL_LBL_MERGE_RECORDS_STEP_1' => 'Búsqueda de Registros con los que Combinar', + 'LBL_AVAIL_FIELDS' => 'Campos Disponibles', + 'LBL_FILTER_COND' => 'Condición de Filtrado', + 'LBL_SELECTED_FIELDS' => 'Campos Seleccionados', + 'LBL_MERGE_RECORDS_WITH' => 'Combinar Registros Con', + 'LBL_MERGE_VALUE_OVER' => 'Combinar valores sobre', + 'LBL_NEXT_STEP_TITLE' => 'Pasar a Siguiente Paso[Ctrl+N]', + 'LBL_NEXT_STEP_BUTTON_KEY' => 'N', + 'LBL_NEXT_STEP_BUTTON_LABEL' => 'Siguiente Paso >', + 'LBL_PERFORM_MERGE_BUTTON_TITLE' => 'Realizar Combinación[Ctrl+P]', + 'LBL_PERFORM_MERGE_BUTTON_KEY' => 'P', + 'LBL_PERFORM_MERGE_BUTTON_LABEL' => 'Realizar Combinación', + 'LBL_SAVE_MERGED_RECORD_BUTTON_TITLE' => 'Guardar Combinación[Ctrl+S]', + 'LBL_SAVE_MERGED_RECORD_BUTTON_KEY' => 'S', + 'LBL_SAVE_MERGED_RECORD_BUTTON_LABEL' => 'Guardar Combinación', + 'LBL_STEP2_FORM_TITLE' => 'Registros Encontrados con los que Combinar', + 'LBL_SELECT_ERROR' => 'Debe realizar una selección antes de continuar.', + 'LBL_SELECT_PRIMARY' => 'Seleccione el registro principal para la combinación.', + 'LBL_CHANGE_PARENT' => 'Establecer como principal', + 'LBL_REMOVE_FROM_MERGE' => 'Quitar', + 'LBL_DIFF_COL_VALUES' => 'Columnas cuyo valor en la fila principal difiere del valor en las filas de combinación:', + 'LBL_SAME_COL_VALUES' => 'Columnas cuyo valor es similar en todas las filas:', + 'ERR_EXCEEDS_MAX' => 'Sólo le está permitido combinar un máximo de 5 registros. Los registros que excedan este límite serán ignorados.', + 'LBL_DELETE_MESSAGE' => 'Esta acción eliminará los siguientes registros:', + 'LBL_PROCEED' => '¿Continuar?', + 'LBL_STEP1_DIRECTIONS' => 'Se han encontrado registros con posibles duplicados. Cuando se encuentran posibles duplicados, puede seleccionar aquellos registros que desea combinar con el registro actual.', +); \ No newline at end of file diff --git a/modules/ModuleBuilder/language/es_es.lang.php b/modules/ModuleBuilder/language/es_es.lang.php new file mode 100644 index 00000000000..1a0c0a47863 --- /dev/null +++ b/modules/ModuleBuilder/language/es_es.lang.php @@ -0,0 +1,677 @@ + 'Cargando ...', + 'LBL_HIDEOPTIONS' => 'Ocultar Opciones', + 'LBL_DELETE' => 'Eliminar', + 'LBL_POWERED_BY_SUGAR' => 'Desarrollado por SugarCRM', + 'help' => + array ( + 'dropdowns' => + array ( + 'default' => '', + 'editdropdown' => '', + ), + 'exportcustom' => + array ( + 'author' => '', + 'description' => '', + 'exportCustomBtn' => '', + 'exportHelp' => '', + 'name' => '', + ), + 'fieldsEditor' => + array ( + 'addField' => '', + 'default' => '', + 'editField' => '', + 'mbDefault' => '', + 'mbeditField' => '', + ), + 'fieldsHelp' => + array ( + 'default' => '', + ), + 'labelsHelp' => + array ( + 'default' => '', + 'publishBtn' => '', + 'saveBtn' => '', + ), + 'layoutEditor' => + array ( + 'default' => '', + 'defaultdetailview' => '', + 'defaultquickcreate' => '', + 'delete' => '', + 'historyBtn' => '', + 'historyDefault' => '', + 'panels' => '', + 'property' => '', + 'publishBtn' => '', + 'saveBtn' => '', + 'toolbox' => '', + ), + 'listViewEditor' => + array ( + 'Available' => '', + 'Default' => '', + 'Hidden' => '', + 'historyBtn' => '', + 'historyDefault' => '', + 'modify' => '', + 'savebtn' => 'Haga clic en Guardar y Desplegar para guardar los cambios que ha realizado y para que estén aplicados en el módulo.', + ), + 'module' => + array ( + 'acl' => 'Al marcar esta casilla permitirá a los controles de acceso en este módulo, incluyendo la seguridad sobre el terreno.', + 'assignable' => 'Al marcar esta casilla permitirá asignar a un usuario seleccionado un registro del módulo.', + 'audit' => 'Marcando esta casilla Habilitar la auditoría de este módulo. Los cambios en ciertos campos se registrarán de modo que los administradores pueden revisar el historial de cambios.', + 'create' => 'Proporcionar un nombre para el módulo. La etiqueta que le proporcione aparecerá en la pestaña de navegación.

Elija si desea ver una pestaña de navegación para el módulo para eso seleccione la casilla de Pestaña de navegación .

Revise la casilla de equipo de seguridad para tener un campo de selección del equipo dentro de los registros del módulo.

A continuación, seleccione el tipo de módulo que desea crear.

Seleccione un tipo de plantilla. Cada plantilla contiene un conjunto específico de los campos, así como los diseños pre-definidos, para usar como base de su módulo.

Haga clic en Guardar para crear el módulo.', + 'deletebtn' => 'Haga clic en Eliminar para eliminar este módulo.', + 'duplicatebtn' => 'Haga clic en duplicados para copiar las propiedades del módulo en un nuevo módulo y para mostrar el nuevo módulo.

Para el nuevo módulo, un nuevo nombre se genera automáticamente añadiendo un número al final del nombre del módulo utilizado para crearlo.', + 'has_tab' => 'Comprobación de Pestaña de Navegación proporcionará una pestaña de navegación para el módulo.', + 'importable' => 'Compruebe la casilla de Importables la cual permitirá la importación de datos sobre este módulo.

Un enlace de Asistente de importación aparecerá en el panel de accesos directos en el módulo. El Asistente de importación facilita la importación de datos de fuentes externas en el módulo personalizado.', + 'label' => 'Esta es la etiqueta que aparecerá en la pestaña de navegación para el módulo.', + 'modify' => 'Puedes modificar las propiedades del módulo y adaptar los Campos, Relaciones y Vistas relacionadas con el módulo.', + 'name' => 'Este es el nombre del módulo actual.

El nombre debe ser alfanumérica y debe comenzar con una letra y sin espacios. (Ejemplo: HR_Management)', + 'reportable' => 'Al marcar esta casilla permitirá que ha este módulo se le puedan realizar reportes.', + 'savebtn' => 'Haga clic en Guardar para guardar todos los datos introducidos en relación con el módulo.', + 'studio' => 'Al marcar esta casilla permitirá a los administradores personalizar este módulo dentro de Studio.', + 'team_security' => 'Compruebe la casilla de equipo de seguridad que permitirá la seguridad por equipo para este módulo.

Si el equipo de seguridad está activado, el campo de selección del equipo aparecerá dentro de los registros en el módulo', + 'type_basic' => 'La plantilla básica cuenta con campos básicos, como el nombre, Asignado a, Equipo, Fecha de creación y los campos de Descripción.', + 'type_company' => 'El tipo de plantilla de la Empresa dispone de campos específicos a la organización, como por ejemplo Nombre de la Empresa, Sector, Dirección Fiscal.

Utilice esta plantilla para crear módulos que son similares a los módulos estándares de Cuentas.', + 'type_file' => 'El tipo de plantilla de Archivo dispone de campos específicos de Documentos, como por ejemplo, Nombre del Archivo, tipo de Documento, y Fecha de Publicación.

Utilice esta plantilla para crear módulos que son similares a los módules estándares de Documentos.', + 'type_issue' => 'El tipo de plantilla de Problemas disponde de campos específicos a incidencias y casos internos, como por ejemplo, Número, Estado, Prioridad, Descripción.

Utilice esta plantilla para crear módulos que son similares a los módulos estándares de Incidencias y Seguimiento de Casos Internos.', + 'type_person' => 'El tipo de plantilla de Persona disponde de campos específicos al contacto, como por ejemplo, Greeting, Título, Nombre, Dirección, Número de Teléfono.

Utilice esta plantilla para crear módulos que son similares a los módulos estándares de Contactos y Potenciales.', + 'type_sale' => 'El tipo de plantilla de Venta dispone de campos específicos a las oportunidades, como por ejemplo, Origen del Potencial, Fase, Cantidad, y Probabilidad.

Utilice esta plantilla para crear módulos que son similares a los módulos estándares de las Oportunidades.', + 'viewfieldsbtn' => 'Haga clic en Ver Campos para ver los campos asociados con el módulo y para crear y editar los campos personalizados.', + 'viewlayoutsbtn' => 'Haga clic en Ver Diseños para ver los diseños para el módulo y para personalizar la organización de campo dentro de los diseños.', + 'viewrelsbtn' => 'Haga clic en Ver Relaciones para ver las relaciones asociadas con este módulo y crear nuevas relaciones.', + ), + 'package' => + array ( + 'author' => 'Este es el Autor que se muestra durante la instalación como el nombre de la entidad que creó el paquete.

El autor podría ser un individuo o una empresa.', + 'create' => 'Proporcionar un nombre para el paquete. El nombre que introduzca debe ser alfanumérico y sin espacios. (Ejemplo: HR_Management)

Puedes proporcionar Autor y Descripción como información para el paquete.

Haga clic en Guardar para crear el paquete.', + 'deletebtn' => 'Haga clic en Eliminar para eliminar este paquete y todos los archivos relacionados con este paquete.', + 'deploybtn' => 'Haga clic en desplegar para guardar todos los datos introducidos y para instalar el paquete, incluyendo todos los módulos, en la instancia actual.', + 'description' => 'Esta es la Descripción que se muestra durante la instalación.', + 'duplicatebtn' => 'Haga clic en duplicar para copiar el contenido del paquete en un paquete nuevo y para mostrar el nuevo paquete.

Para el nuevo paquete, un nuevo nombre es generado automáticamente añadiendo un número al final del nombre del paquete utilizado para duplicarlo. Puede cambiar el nombre del nuevo paquete mediante la introducción de un nombre nuevo y después haciendo clic en Guardar.', + 'existing_module' => 'Haga clic en el icono del módulo para editar las propiedades y personalizar los campos, las relaciones y diseños asociados con el módulo.', + 'exportbtn' => 'Haga clic en Exportar para crear un archivo .zip que contiene las personalizaciones realizadas en el paquete.

El archivo generado no es una versión instalable del paquete.

Use el Cargador de módulos para importar el archivo .zip y tener el paquete, incluidas las personalizaciones, aparecen en el Generador de módulos.', + 'key' => 'Estas 5 letras, clave alfanuméricas se usa como prefijo para todos los directorios, los nombres de clases y las tablas de base de datos para todos los módulos en el paquete actual.

La clave se utiliza en un esfuerzo para lograr la singularidad de los nombres de las tablas.', + 'modify' => 'Las propiedades y posibles acciones para el paquete aparecerá aquí.

Puede modificar el nombre, Autor y Descripción del paquete, así como ver y personalizar todos los módulos contenidos en el paquete.

Haga clic en nuevo módulo para crear un módulo para el paquete.

Si el paquete contiene al menos un módulo, usted puede publicar y desplegar el paquete, así como exportar las personalizaciones realizadas en el paquete.', + 'name' => 'Este es el nombre del paquete actual.

El nombre que introduzca debe ser alfanuméricos, comenzar con una letra y sin espacios. (Ejemplo: HR_Management)', + 'new_module' => 'Haga clic en nuevo módulo para crear un nuevo módulo para este paquete.', + 'publishbtn' => 'Haga clic en Publicar para guardar todos los datos introducidos y crear un archivo .zip que es una versión instalable del paquete.

Use el Cargador de Módulos para cargar el archivo .zip e instalar el paquete.', + 'readme' => 'Haga clic para añadir Léame de texto para este paquete.

El léame estará disponible en el momento de la instalación.', + 'savebtn' => 'Haga clic en Guardar para guardar todos los datos relacionados con el paquete.', + ), + 'popupListViewEditor' => + array ( + 'Default' => '', + 'Hidden' => '', + 'historyBtn' => '', + 'historyDefault' => '', + 'modify' => '', + 'savebtn' => 'Haga clic en Guardar y Desplegar para guardar los cambios que ha realizado y para que estén aplicados en el módulo.', + ), + 'portalConfig' => + array ( + 'default' => '', + ), + 'portalStyle' => + array ( + 'default' => '', + ), + 'portalSync' => + array ( + 'default' => '', + ), + 'relationshipsHelp' => + array ( + 'addRelationship' => '', + 'addrelbtn' => '', + 'default' => '', + ), + 'searchViewEditor' => + array ( + 'Default' => '', + 'Hidden' => '', + 'historyBtn' => '', + 'historyDefault' => '', + 'modify' => '', + 'savebtn' => '', + ), + 'studioWizard' => + array ( + 'AdvancedSearchBtn' => '', + 'BasicSearchBtn' => '', + 'DashletListViewBtn' => '', + 'DashletSearchViewBtn' => '', + 'Layouts' => '', + 'PopupListViewBtn' => '', + 'PopupSearchViewBtn' => '', + 'SPSync' => '', + 'SPUploadCSS' => '', + 'addDropDownBtn' => '', + 'appBtn' => '', + 'backBtn' => '', + 'convertLeadHelp' => '', + 'dashletHelp' => '', + 'dropDownEditorBtn' => '', + 'editDropDownBtn' => '', + 'exportBtn' => 'Haga clic en Exportar personalizaciones para crear un paquete que contiene las personalizaciones realizadas en el Estudio de los módulos específicos.', + 'fieldsBtn' => '', + 'labelsBtn' => '', + 'layoutsBtn' => '', + 'layoutsHelp' => '', + 'mainHelp' => '', + 'mbBtn' => '', + 'mbHelp' => '', + 'moduleBtn' => '', + 'moduleHelp' => '', + 'newPackage' => '', + 'popupHelp' => '', + 'portalBtn' => '', + 'portalHelp' => '', + 'portalLayoutHelp' => '', + 'relationshipHelp' => '', + 'relationshipsBtn' => '', + 'relationshipsHelp' => '', + 'searchBtn' => '', + 'searchHelp' => '', + 'studioBtn' => '', + 'studioHelp' => '', + 'subpanelBtn' => '', + 'subpanelHelp' => '', + 'sugarPortalBtn' => '', + 'viewBtnDashlet' => '', + 'viewBtnDetailView' => '', + 'viewBtnEditView' => '', + 'viewBtnListView' => '', + 'viewBtnQuickCreate' => '', + ), + 'subPanelEditor' => + array ( + 'Default' => 'Por defecto los campos aparecen en el subpanel.', + 'Hidden' => 'Oculto los campos no aparecerán en el subpanel.', + 'historyBtn' => '', + 'historyDefault' => '', + 'modify' => '', + 'savebtn' => 'Haga clic en Guardar y Desplegar para guardar los cambios que ha realizado y para que estén aplicados en el módulo.', + ), + 'main' => + array ( + ), + ), + 'assistantHelp' => + array ( + 'dropdownEditor' => + array ( + 'default' => '', + 'dropdownaddbtn' => '', + ), + 'exportcustom' => + array ( + 'author' => '', + 'description' => '', + 'exportCustomBtn' => '', + 'exportHelp' => '', + 'name' => '', + ), + 'layoutEditor' => + array ( + 'default' => '', + 'panels' => '', + 'publishBtn' => '', + 'saveBtn' => '', + 'toolbox' => '', + ), + 'listViewEditor' => + array ( + 'Available' => '', + 'Default' => '', + 'Hidden' => '', + 'modify' => '', + 'savebtn' => '', + ), + 'main' => + array ( + 'studioWelcome' => '', + 'welcome' => '', + ), + 'module' => + array ( + 'afterSave' => '', + 'create' => '', + 'editView' => '', + 'existingModule' => '', + 'labels' => '', + 'somemodules' => '', + 'viewfields' => '', + 'viewlayouts' => '', + 'viewrelationships' => '', + ), + 'package' => + array ( + 'afterSave' => '', + 'create' => '', + 'nopackages' => '', + 'somepackages' => '', + ), + 'searchViewEditor' => + array ( + 'Default' => '', + 'Hidden' => '', + 'modify' => '', + 'savebtn' => '', + ), + 'studioWizard' => + array ( + 'appBtn' => 'Utilice el modo de aplicación para personalizar las propiedades incluidas en el programa, por ejemplo, cómo muchos de los informes TPS que se muestran en la página de inicio', + 'backBtn' => 'Volver a la etapa anterior.', + 'exportBtn' => 'Haga clic en Exportar personalizaciones para crear un paquete que contiene las personalizaciones realizadas en el Estudio de los módulos específicos.', + 'fieldsBtn' => 'Editar información que se almacena en el módulo mediante el control de los campos del módulo.

Puede editar y crear campos personalizados aquí.', + 'labelsBtn' => 'Editar las etiquetas para mostrar los valores de este módulo.', + 'layoutsBtn' => 'Personalizar las vistas del diseños de la edición, el detalle, el listado y la búsqueda.', + 'layoutsHelp' => '', + 'mainHelp' => '', + 'mbBtn' => 'Use el Contructor de módulos para crear nuevos módulos', + 'mbHelp' => '', + 'moduleBtn' => 'Haga clic para editar este módulo.', + 'moduleHelp' => 'Seleccione el componente del módulo que desea editar', + 'newPackage' => '', + 'searchHelp' => '', + 'studioBtn' => '', + 'studioHelp' => 'Use el Studio para personalizar los módulos instalados.', + 'subpanelBtn' => 'Editar la información que se muestra en los subpaneles de los módulos.', + 'subpanelHelp' => '', + ), + ), + 'LBL_HOME_EDIT_DROPDOWNS' => 'Editor de Listas Desplegables', + 'LBL_AS_SHOW' => 'Mostrar al Asistente en el futuro.', + 'LBL_AS_IGNORE' => 'Ignorar al Asistente en el futuro.', + 'LBL_AS_SAYS' => 'El Asistente Sugiere:', + 'LBL_MODULEBUILDER' => 'Constructor de Módulos', + 'LBL_STUDIO' => 'Estudio', + 'LBL_DROPDOWNEDITOR' => 'Editor de Listas Desplegables', + 'LBL_EDIT_DROPDOWN' => 'Editar Lista Desplegable', + 'LBL_DEVELOPER_TOOLS' => 'Herramientas de Desarrollo', + 'LBL_SUGARPORTAL' => 'Editor del Portal Sugar', + 'LBL_SYNCPORTAL' => 'Sincronizar Portal', + 'LBL_PACKAGE_LIST' => 'Lista de Paquetes', + 'LBL_HOME' => 'Inicio', + 'LBL_NONE' => '-Ninguno-', + 'LBL_DEPLOYE_COMPLETE' => 'Despliegue completado', + 'LBL_DEPLOY_FAILED' => 'Ha ocurrido un error durante el proceso de despliegue. Es posible que su paquete no haya sido instalado correctamente', + 'LBL_ADD_FIELDS' => 'Agregar Campos Personalizados', + 'LBL_AVAILABLE_SUBPANELS' => 'Subpaneles Disponibles', + 'LBL_ADVANCED' => 'Avanzada', + 'LBL_ADVANCED_SEARCH' => 'Búsqueda Avanzada', + 'LBL_BASIC' => 'Básica', + 'LBL_BASIC_SEARCH' => 'Búsqueda Básica', + 'LBL_CURRENT_LAYOUT' => 'Diseño', + 'LBL_CURRENCY' => 'Moneda', + 'LBL_CUSTOM' => 'Personalizado', + 'LBL_DASHLET' => 'Sugar Dashlet', + 'LBL_DASHLETLISTVIEW' => 'Vista de Lista de Sugar Dashlet', + 'LBL_DASHLETSEARCH' => 'Búsqueda de Sugar Dashlet', + 'LBL_POPUP' => 'Vista Emergente', + 'LBL_POPUPLIST' => 'Vista de Lista Emergente', + 'LBL_POPUPLISTVIEW' => 'Vista de Lista Emergente', + 'LBL_POPUPSEARCH' => 'Búsqueda Emergente', + 'LBL_DASHLETSEARCHVIEW' => 'Búsqueda de Sugar Dashlet', + 'LBL_DISPLAY_HTML' => 'Mostrar Código HTML', + 'LBL_DETAILVIEW' => 'Vista Detallada', + 'LBL_DROP_HERE' => '[Soltar Aquí]', + 'LBL_EDIT' => 'Editar', + 'LBL_EDIT_LAYOUT' => 'Editar Diseño', + 'LBL_EDIT_ROWS' => 'Editar Filas', + 'LBL_EDIT_COLUMNS' => 'Editar Columnas', + 'LBL_EDIT_LABELS' => 'Editar Etiquetas', + 'LBL_EDIT_FIELDS' => 'Editar Campos', + 'LBL_EDIT_PORTAL' => 'Editar Portal para', + 'LBL_EDITVIEW' => 'Vista de Edición', + 'LBL_FILLER' => '(relleno)', + 'LBL_FIELDS' => 'Campos', + 'LBL_FAILED_TO_SAVE' => 'Fallo Al Guardar', + 'LBL_FAILED_PUBLISHED' => 'Fallo Al Publicar', + 'LBL_HOMEPAGE_PREFIX' => 'Mi', + 'LBL_LAYOUT_PREVIEW' => 'Vista Preliminar del Diseño', + 'LBL_LAYOUTS' => 'Diseños', + 'LBL_LISTVIEW' => 'Vista de Lista', + 'LBL_MODULES' => 'Módulos:', + 'LBL_MODULE_TITLE' => 'Estudio', + 'LBL_NEW_PACKAGE' => 'Nuevo Paquete', + 'LBL_NEW_PANEL' => 'Nuevo Panel', + 'LBL_NEW_ROW' => 'Nueva Fila', + 'LBL_PACKAGE_DELETED' => 'Paquete Eliminado', + 'LBL_PUBLISHING' => 'Publicando ...', + 'LBL_PUBLISHED' => 'Publicado', + 'LBL_SELECT_FILE' => 'Seleccionar Archivo', + 'LBL_SAVE_LAYOUT' => 'Guardar Diseño', + 'LBL_SELECT_A_SUBPANEL' => 'Seleccione un Subpanel', + 'LBL_SELECT_SUBPANEL' => 'Seleccione Subpanel', + 'LBL_SUBPANELS' => 'Subpaneles', + 'LBL_SUBPANEL' => 'Subpanel', + 'LBL_SUBPANEL_TITLE' => 'Título:', + 'LBL_SEARCH_FORMS' => 'Búsqueda', + 'LBL_SEARCH' => 'Buscar', + 'LBL_STAGING_AREA' => 'Área de Diseño (arrastre y suelte elementos aquí)', + 'LBL_SUGAR_FIELDS_STAGE' => 'Campos Sugar (haga clic en los elementos para agregarlos al área de diseño)', + 'LBL_SUGAR_BIN_STAGE' => 'Papelera Sugar (haga clic en los elementos para agregarlos al área de diseño)', + 'LBL_TOOLBOX' => 'Caja de Herramientas', + 'LBL_VIEW_SUGAR_FIELDS' => 'Ver Campos Sugar', + 'LBL_VIEW_SUGAR_BIN' => 'Ver Papelera Sugar', + 'LBL_QUICKCREATE' => 'Creación Rápida', + 'LBL_EDIT_DROPDOWNS' => 'Editar una Lista Desplegable Global', + 'LBL_ADD_DROPDOWN' => 'Agregar una nueva Lista Desplegable Global', + 'LBL_BLANK' => '-vacío-', + 'LBL_TAB_ORDER' => 'Órden de Tabulación', + 'LBL_TAB_PANELS' => 'Mostrar paneles como pestañas', + 'LBL_TAB_PANELS_HELP' => 'Mostrar cada panel como su propia pestaña en lugar de hacer que aparezcan todos en una pantalla', + 'LBL_TABDEF_TYPE' => 'Tipo de Visualización:', + 'LBL_TABDEF_TYPE_HELP' => 'Seleccione la forma en la que se debe mostra esta sección. Esta opción únicamente tendrá efecto si ha habilitado el modo pestañas para esta vista.', + 'LBL_TABDEF_TYPE_OPTION_TAB' => 'Pestaña', + 'LBL_TABDEF_TYPE_OPTION_PANEL' => 'Panel', + 'LBL_TABDEF_TYPE_OPTION_HELP' => 'Seleccione Panel para que el panel se muestre en la vista inicial o en la vista del panel anterior que se haya seleccionado como Pestaña.
Seleccione Pestaña para mostrar el panel en una pestaña independiente. Cuando se ha seleccionado un panel como Pestaña, los siguientes paneles seleccionados como Panel se mostrarán en la vista de dicha pestaña.
Siempre que seleccione un panel como Pestaña será el primer panel a mostrar en dicha Pestaña.
Si se selecciona como Pestaña el segundo panel o posteriores, el primer panel se establecerá automáticamente como Pestaña si se hubiera seleccionado anteriormente como Panel.', + 'LBL_TABDEF_COLLAPSE' => 'Contraído', + 'LBL_TABDEF_COLLAPSE_HELP' => 'Seleccione para que por defecto el estado del panel sea contraído.', + 'LBL_DROPDOWN_TITLE_NAME' => 'Nombre', + 'LBL_DROPDOWN_LANGUAGE' => 'Idioma', + 'LBL_DROPDOWN_ITEMS' => 'Elementos de Lista', + 'LBL_DROPDOWN_ITEM_NAME' => 'Nombre del Elemento', + 'LBL_DROPDOWN_ITEM_LABEL' => 'Etiqueta de Visualización', + 'LBL_SYNC_TO_DETAILVIEW' => 'Sincroniza con Vista de Detalle', + 'LBL_SYNC_TO_DETAILVIEW_HELP' => 'Seleccione esta opción para sincronizar el diseño de la Vista de Edición con el correspondiente diseño de la Vista de Detalle. Los campos y su colocación en la Vista de Detalle serán sincronizados y guardados automáticamente en la Vista de Detalle al pulsar en Guardar or Guardar y Desplegar en la Vista de Edición. No se podrán realizar cambios en el diseño de la Vista de Detalle.', + 'LBL_SYNC_TO_DETAILVIEW_NOTICE' => 'Este DetailView es sincronizado con el EditView correspondiente.
Campos y colocación sobre el terreno en este DetailView reflejan los campos y colocación sobre el terreno en el EditView.
Cambios en DetailView no puede ser salvado o desplegados desde esta pagina. Realizar los cambios o quitar sincronización en la vista de EditView.', + 'LBL_COPY_FROM_EDITVIEW' => 'Copiar de la Vista de Edición', + 'LBL_DROPDOWN_BLANK_WARNING' => 'Los valores son necesarios tanto para el nombre del elemento y la etiqueta de visualización. Para agregar un elemento en blanco, haga clic en Agregar, sin entrar en ningún valor para el nombre del elemento y la etiqueta de visualización.', + 'LBL_DROPDOWN_KEY_EXISTS' => 'Clave ya existe en la lista', + 'LBL_NO_SAVE_ACTION' => 'No se ha podido encontrar la opción de guardar para esta vista.', + 'LBL_BADLY_FORMED_DOCUMENT' => 'Studio2:establishLocation: documento mal constituido', + 'LBL_MODULE' => 'Módulo', + 'LBL_LHS_MODULE' => 'Módulo Principal', + 'LBL_CUSTOM_RELATIONSHIPS' => '* relación creada en el Estudio', + 'LBL_RELATIONSHIPS' => 'Relaciones', + 'LBL_RELATIONSHIP_EDIT' => 'Editar Relación', + 'LBL_REL_NAME' => 'Nombre', + 'LBL_REL_LABEL' => 'Etiqueta', + 'LBL_REL_TYPE' => 'Tipo', + 'LBL_RHS_MODULE' => 'Módulo Relacionado', + 'LBL_NO_RELS' => 'Sin Relaciones', + 'LBL_RELATIONSHIP_ROLE_ENTRIES' => 'Condición Opcional', + 'LBL_RELATIONSHIP_ROLE_COLUMN' => 'Columna', + 'LBL_RELATIONSHIP_ROLE_VALUE' => 'Valor', + 'LBL_SUBPANEL_FROM' => 'Subpanel de', + 'LBL_RELATIONSHIP_ONLY' => 'No se creará ningún elemento visible para esta relación ya que existía anteriormente una relación visible entre estos dos módulos.', + 'LBL_ONETOONE' => 'Uno a Uno', + 'LBL_ONETOMANY' => 'Uno a Muchos', + 'LBL_MANYTOONE' => 'Muchos a Uno', + 'LBL_MANYTOMANY' => 'Muchos a Muchos', + 'LBL_QUESTION_FUNCTION' => 'Seleccione una función o componente.', + 'LBL_QUESTION_MODULE1' => 'Seleccione un módulo.', + 'LBL_QUESTION_EDIT' => 'Seleccione un módulo a editar.', + 'LBL_QUESTION_LAYOUT' => 'Seleccione un diseño a editar.', + 'LBL_QUESTION_SUBPANEL' => 'Seleccione un subpanel a editar.', + 'LBL_QUESTION_SEARCH' => 'Seleccione un diseño de búsqueda a editar.', + 'LBL_QUESTION_MODULE' => 'Seleccione un componente de módulo a editar.', + 'LBL_QUESTION_PACKAGE' => 'Seleccione un paquete a editar, o cree un nuevo paquete.', + 'LBL_QUESTION_EDITOR' => 'Seleccione una herramienta.', + 'LBL_QUESTION_DROPDOWN' => 'Seleccione una lista desplegable a editar, o cree una nueva lista desplegable.', + 'LBL_QUESTION_DASHLET' => 'Seleccione un diseño de dashlet a editar.', + 'LBL_QUESTION_POPUP' => 'Seleccione un diseño emergente a editar.', + 'LBL_RELATE_TO' => 'Relacionado Con', + 'LBL_NAME' => 'Nombre', + 'LBL_LABELS' => 'Etiquetas', + 'LBL_MASS_UPDATE' => 'Actualización Masiva', + 'LBL_AUDITED' => 'Auditado', + 'LBL_CUSTOM_MODULE' => 'Módulo', + 'LBL_DEFAULT_VALUE' => 'Valor Por Defecto', + 'LBL_REQUIRED' => 'Requerido', + 'LBL_DATA_TYPE' => 'Tipo', + 'LBL_HCUSTOM' => 'PERSONALIZADO', + 'LBL_HDEFAULT' => 'POR DEFECTO', + 'LBL_LANGUAGE' => 'Idioma:', + 'LBL_CUSTOM_FIELDS' => 'campo creado en Estudio', + 'LBL_SECTION_EDLABELS' => 'Editar Etiquetas', + 'LBL_SECTION_PACKAGES' => 'Paquetes', + 'LBL_SECTION_PACKAGE' => 'Paquete', + 'LBL_SECTION_MODULES' => 'Módulos', + 'LBL_SECTION_PORTAL' => 'Portal', + 'LBL_SECTION_DROPDOWNS' => 'Listas Desplegables', + 'LBL_SECTION_PROPERTIES' => 'Propiedades', + 'LBL_SECTION_DROPDOWNED' => 'Editar Lista Desplegable', + 'LBL_SECTION_HELP' => 'Ayuda', + 'LBL_SECTION_ACTION' => 'Acción', + 'LBL_SECTION_MAIN' => 'Principal', + 'LBL_SECTION_EDPANELLABEL' => 'Editar Etiqueta de Panel', + 'LBL_SECTION_FIELDEDITOR' => 'Editar Campo', + 'LBL_SECTION_DEPLOY' => 'Desplegar', + 'LBL_SECTION_MODULE' => 'Módulo', + 'LBL_SECTION_VISIBILITY_EDITOR' => 'Editar Visibilidad', + 'LBL_DEFAULT' => 'Por Defecto', + 'LBL_HIDDEN' => 'Oculto', + 'LBL_AVAILABLE' => 'Disponible', + 'LBL_LISTVIEW_DESCRIPTION' => 'A continuación se muestran tres columnas. La columna Por Defecto contiene los campos que se muestran en una lista por defecto. La columna Adicional contiene campos que un usuario puede elegir a la hora de crear una vista personalizada. La columna Disponible muestra columnas disponibles para usted como administrador para, o bien añadirlas a las columnas Por Defecto, o a las Adicionales para que sean usadas por usuarios.', + 'LBL_LISTVIEW_EDIT' => 'Editor de Listas', + 'LBL_MB_PREVIEW' => 'Vista Preliminar', + 'LBL_MB_RESTORE' => 'Restaurar', + 'LBL_MB_DELETE' => 'Eliminar', + 'LBL_MB_COMPARE' => 'Comparar', + 'LBL_MB_DEFAULT_LAYOUT' => 'Diseño por Defecto', + 'LBL_BTN_ADD' => 'Agregar', + 'LBL_BTN_SAVE' => 'Guardar', + 'LBL_BTN_SAVE_CHANGES' => 'Guardar Cambios', + 'LBL_BTN_DONT_SAVE' => 'Descartar Cambios', + 'LBL_BTN_CANCEL' => 'Cancelar', + 'LBL_BTN_CLOSE' => 'Cerrar', + 'LBL_BTN_SAVEPUBLISH' => 'Guardar y Desplegar', + 'LBL_BTN_NEXT' => 'Siguiente', + 'LBL_BTN_BACK' => 'Anterior', + 'LBL_BTN_CLONE' => 'Clonar', + 'LBL_BTN_ADDCOLS' => 'Agregar Columnas', + 'LBL_BTN_ADDROWS' => 'Agregar Filas', + 'LBL_BTN_ADDFIELD' => 'Agregar Campo', + 'LBL_BTN_ADDDROPDOWN' => 'Agregar Lista Desplegable', + 'LBL_BTN_SORT_ASCENDING' => 'Ordenar Ascendete', + 'LBL_BTN_SORT_DESCENDING' => 'Ordenar Descendente', + 'LBL_BTN_EDLABELS' => 'Editar Etiquetas', + 'LBL_BTN_UNDO' => 'Deshacer', + 'LBL_BTN_REDO' => 'Repetir', + 'LBL_BTN_ADDCUSTOMFIELD' => 'Agregar Campo Personalizado', + 'LBL_BTN_EXPORT' => 'Exportar Personalizaciones', + 'LBL_BTN_DUPLICATE' => 'Duplicar', + 'LBL_BTN_PUBLISH' => 'Publicar', + 'LBL_BTN_DEPLOY' => 'Desplegar', + 'LBL_BTN_EXP' => 'Exportar', + 'LBL_BTN_DELETE' => 'Eliminar', + 'LBL_BTN_VIEW_LAYOUTS' => 'Ver Diseños', + 'LBL_BTN_VIEW_FIELDS' => 'Ver Campos', + 'LBL_BTN_VIEW_RELATIONSHIPS' => 'Ver Relaciones', + 'LBL_BTN_ADD_RELATIONSHIP' => 'Agregar Relación', + 'LBL_BTN_RENAME_MODULE' => 'Cambiar el Nombre del Módulo', + 'LBL_BTN_INSERT' => 'Insertar', + 'ERROR_ALREADY_EXISTS' => 'Error: El Campo Ya Existe', + 'ERROR_INVALID_KEY_VALUE' => 'Error: Valor de Clave No Válido: [']', + 'ERROR_NO_HISTORY' => 'No se han encontrado archivos en el historial', + 'ERROR_MINIMUM_FIELDS' => 'El diseño debe contener al menos un campo', + 'ERROR_GENERIC_TITLE' => 'Ha ocurrido un error', + 'ERROR_REQUIRED_FIELDS' => '¿Está seguro de que desea continuar? Los siguientes campos requeridos no se encuentran en el diseño:', + 'ERROR_ARE_YOU_SURE' => '¿Está seguro de que desea continuar?', + 'LBL_PACKAGE_NAME' => 'Nombre del Paquete:', + 'LBL_MODULE_NAME' => 'Nombre del Módulo:', + 'LBL_AUTHOR' => 'Autor:', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_KEY' => 'Clave:', + 'LBL_ADD_README' => 'Léame', + 'LBL_LAST_MODIFIED' => 'Última Modificación:', + 'LBL_NEW_MODULE' => 'Nuevo Módulo', + 'LBL_LABEL' => 'Etiqueta:', + 'LBL_LABEL_TITLE' => 'Etiqueta', + 'LBL_WIDTH' => 'Anchura', + 'LBL_PACKAGE' => 'Paquete:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_TEAM_SECURITY' => 'Seguridad de Equipos', + 'LBL_ASSIGNABLE' => 'Assignable', + 'LBL_PERSON' => 'Persona', + 'LBL_COMPANY' => 'Compañía', + 'LBL_ISSUE' => 'Incidencia', + 'LBL_SALE' => 'Venta', + 'LBL_FILE' => 'Archivo', + 'LBL_NAV_TAB' => 'Pestaña de Navegación', + 'LBL_CREATE' => 'Crear', + 'LBL_LIST' => 'Lista', + 'LBL_VIEW' => 'Vista', + 'LBL_LIST_VIEW' => 'Vista de Lista', + 'LBL_HISTORY' => 'Ver Historial', + 'LBL_RESTORE_DEFAULT' => 'Restaurar Vista Por Defecto', + 'LBL_ACTIVITIES' => 'Actividades', + 'LBL_NEW' => 'Nuevo', + 'LBL_TYPE_BASIC' => 'básica', + 'LBL_TYPE_COMPANY' => 'compañía', + 'LBL_TYPE_PERSON' => 'persona', + 'LBL_TYPE_ISSUE' => 'incidencia', + 'LBL_TYPE_SALE' => 'venta', + 'LBL_TYPE_FILE' => 'archivo', + 'LBL_RSUB' => 'Este es el subpanel que se mostrará en su módulo', + 'LBL_MSUB' => 'Este es el subpanel que su módulo proporciona para que sea mostrado por el módulo relacionado', + 'LBL_MB_IMPORTABLE' => 'Importable', + 'LBL_VE_VISIBLE' => 'visible', + 'LBL_VE_HIDDEN' => 'oculto', + 'LBL_PACKAGE_WAS_DELETED' => '[[package]] ha sido eliminado', + 'LBL_EC_TITLE' => 'Exportar Personalizaciones', + 'LBL_EC_NAME' => 'Nombre del Paquete:', + 'LBL_EC_AUTHOR' => 'Autor:', + 'LBL_EC_DESCRIPTION' => 'Descripción:', + 'LBL_EC_KEY' => 'Clave:', + 'LBL_EC_CHECKERROR' => 'Por favor, seleccione un módulo.', + 'LBL_EC_CUSTOMFIELD' => 'campos personalizados', + 'LBL_EC_CUSTOMLAYOUT' => 'diseño personalizados', + 'LBL_EC_NOCUSTOM' => 'No se ha personalizado ningún módulo.', + 'LBL_EC_EMPTYCUSTOM' => 'tiene vacías las personalizaciones.', + 'LBL_EC_EXPORTBTN' => 'Exportar', + 'LBL_MODULE_DEPLOYED' => 'El módulo ha sido desplegado.', + 'LBL_UNDEFINED' => 'no definido', + 'LBL_AJAX_FAILED_DATA' => 'Error al recuperar datos', + 'LBL_AJAX_TIME_DEPENDENT' => 'Hay en progreso una acción dependiente del tiempo. Por favor, espere e inténtelo de nuevo en unos instantes.', + 'LBL_AJAX_LOADING' => 'Cargando...', + 'LBL_AJAX_DELETING' => 'Eliminando...', + 'LBL_AJAX_BUILDPROGRESS' => 'Construcción En Progreso...', + 'LBL_AJAX_DEPLOYPROGRESS' => 'Despliegue En Progreso...', + 'LBL_AJAX_FIELD_EXISTS' => 'El nombre del campo que ha introducido ya existe. Por favor, introduzca un nuevo nombre para el campo.', + 'LBL_JS_REMOVE_PACKAGE' => '¿Está seguro de que desea quitar este paquete? Esto eliminará permanentemente todos los archivos asociados con este paquete.', + 'LBL_JS_REMOVE_MODULE' => '¿Está seguro de que desea quitar este módulo? Esto eliminará permanentemente todos los archivos asociados con este módulo.', + 'LBL_JS_DEPLOY_PACKAGE' => 'Cualquier personalización que haya realizado en el Estudio será sobrescrita cuando este módulo sea desplegado de nuevo. ¿Está seguro de que desea proceder?', + 'LBL_DEPLOY_IN_PROGRESS' => 'Desplegando Paquete', + 'LBL_JS_VALIDATE_NAME' => 'Nombre - Debe ser alfanumérico, sin espacios y comenzando por letra', + 'LBL_JS_VALIDATE_PACKAGE_NAME' => 'El Nombre del Paquete ya existe', + 'LBL_JS_VALIDATE_KEY' => 'Clave - Debe ser alfanumérica', + 'LBL_JS_VALIDATE_LABEL' => 'Por favor, introduzca la etiqueta que se utilizará como Nombre Visible de este módulo', + 'LBL_JS_VALIDATE_TYPE' => 'Por favor, seleccione el tipo de módulo que quiere construir de la lista anterior', + 'LBL_JS_VALIDATE_REL_NAME' => 'Nombre - Debe ser alfanumérico y sin espacios', + 'LBL_JS_VALIDATE_REL_LABEL' => 'Etiqueta - por favor, agregue la etiqueta que será mostrada sobre el subpanel', + 'LBL_CONFIRM_FIELD_DELETE' => 'Al eliminar este campo personalizado, eliminará tanto el campo personalizado como todos los datos de la base de datos relacionados con el campo personalizado. El campo ya no aparecerá en ninguno de los diseños de módulos. ¿Desea continuar?

Al eliminar este campo personalizado, eliminará tanto el campo personalizado como todos los datos en la base de datos relacionados con el campo personalizado. El campo ya no aparecerá en ninguno de los diseños de módulos, y no estará disponible en los Informes.\\n\\nEl cambio en los Informes será visto tras cerrar la sesión y abrir una nueva, y todos los informes que contengan el campo tendrán que ser actualizados para poder ser ejecutados.\\n\\n¿Desea continuar?', + 'LBL_CONFIRM_RELATIONSHIP_DELETE' => '¿Está seguro de que desea eliminar esta relación?', + 'LBL_CONFIRM_RELATIONSHIP_DEPLOY' => 'Esto hará la relación permantente. ¿Está seguro de que desea desplegar esta relación?', + 'LBL_CONFIRM_DONT_SAVE' => 'Hay cambios pendientes de ser guardados, ¿desea guardarlos ahora?', + 'LBL_CONFIRM_DONT_SAVE_TITLE' => '¿Guardar Cambios?', + 'LBL_CONFIRM_LOWER_LENGTH' => 'Los datos pueden ser truncados y ésto no podrá deshacerse, ¿está seguro de que desea continuar?', + 'LBL_POPHELP_FIELD_DATA_TYPE' => 'Seleccione el tipo de datos apropiado acorde con el tipo de datos que será introducido en el campo.', + 'LBL_POPHELP_SEARCHABLE' => 'Usted tiene que realizar un índice de todo el sistema después de cambiar el nivel de elevación.', + 'LBL_POPHELP_IMPORTABLE' => ': El campo será incluido en una operación de importación.
No: El campo no será incluido en una importación.
Requerido: Debe de suministrarse un valor para el campo en toda importación.', + 'LBL_POPHELP_IMAGE_WIDTH' => 'Introduzca un número para la Anchura, como medida en píxeles.
La imagen subida será escalada a esta Anchura.', + 'LBL_POPHELP_IMAGE_HEIGHT' => 'Introduzca un número para la Altura, como medida en píxeles.
La imagen subida será escalada a esta Altura.', + 'LBL_POPHELP_DUPLICATE_MERGE' => 'Habilitado: El campo aparecerá en la característica de Combinar Duplicados, pero no estará disponible para ser utilizado en las condiciones de filtrado de la característica Búsqueda de Duplicados.
Deshabilitado: El campo no aparecerá en la característica Combinar Duplicados, y tampoco estará disponible para ser utilizado como condición de filtrado en la característica de Búsqueda de Duplicados.
En Filtro: El campo aparecerá en la característica de Combinar Duplicados, y también estará disponible en la característica de Búsqueda de Duplicados.
Sólo en Filtro: El campo no aparecerá en la característica Combinar Duplicados, pero estará disponible en la característica de Búsqueda de Duplicados.
Filtro Seleccionado por Defecto: El campo será utilizado en la condición de filtrado por defecto de la página de Búsqueda de Duplicados, y también aparecerá en la característica de Combinar Duplicados.', + 'LBL_POPHELP_GLOBAL_SEARCH' => 'Seleccione esta opción para utilizar este campo en la búsqueda de registros desde la Búsqueda Global en este módulo.', + 'LBL_RESET' => 'Restablecer', + 'LBL_RESET_MODULE' => 'Restablecer Módulo', + 'LBL_REMOVE_CUSTOM' => 'Quitar Personalizaciones', + 'LBL_CLEAR_RELATIONSHIPS' => 'Limpiar Relaciones', + 'LBL_RESET_LABELS' => 'Restablecer Eqiquetas', + 'LBL_RESET_LAYOUTS' => 'Restablecer Diseños"', + 'LBL_REMOVE_FIELDS' => 'Quitar Campos Personalizados', + 'LBL_CLEAR_EXTENSIONS' => 'Limpiar Extensiones', + 'LBL_HISTORY_TIMESTAMP' => 'Registro de Tiempo', + 'LBL_HISTORY_TITLE' => 'historial', + 'fieldTypes' => + array ( + 'address' => 'Dirección', + 'bool' => 'Casilla de Verificación', + 'currency' => 'Moneda', + 'date' => 'Fecha', + 'datetimecombo' => 'Fecha y hora', + 'decimal' => 'Decimal', + 'encrypt' => 'Encriptado', + 'enum' => 'Desplegable', + 'float' => 'Coma flotante', + 'html' => 'HTML', + 'iframe' => 'IFrame', + 'image' => 'Imagen', + 'int' => 'Entero', + 'multienum' => 'Selección Múltiple', + 'phone' => 'Teléfono', + 'radioenum' => 'Opción', + 'relate' => 'Relacionado', + 'text' => 'Área de Texto', + 'url' => 'URL', + 'varchar' => 'Campo de Texto', + ), + 'labelTypes' => + array ( + '' => 'Etiquetas de uso frecuente', + 'all' => 'Todas las etiquetas', + ), + 'parent' => 'Posiblemente Relacionado con', + 'LBL_ILLEGAL_FIELD_VALUE' => 'Las claves de un desplegable no pueden contener comillas.', + 'LBL_CONFIRM_SAVE_DROPDOWN' => 'Está seleccionando este elemento para su eliminación de la lista desplegable. Cualquier campo desplegable que use esta lista con este elemento como valor ya no mostrará dicho valor, y el valor ya no podrá ser seleccionado en los campos desplegables. ¿Está seguro de que desea continuar?', + 'LBL_POPHELP_VALIDATE_US_PHONE' => 'Seleccione para validar este campo para el ingreso de un número de teléfono de 10 dígitos
, con la concesión para el código de país 1, y
para aplicar un formato de EE.UU. para el número de teléfono cuando el
registro se guarda. El formato se aplicarán los siguientes: (xxx) xxx-xxxx.', + 'LBL_ALL_MODULES' => 'Todos los Módulos', + 'LBL_RELATED_FIELD_ID_NAME_LABEL' => '{0} (relacionado {1} ID)', +); \ No newline at end of file diff --git a/modules/Notes/language/es_es.lang.php b/modules/Notes/language/es_es.lang.php new file mode 100644 index 00000000000..d67d27da2c6 --- /dev/null +++ b/modules/Notes/language/es_es.lang.php @@ -0,0 +1,116 @@ + 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la cuenta.', + 'LBL_ACCOUNT_ID' => 'ID Cuenta:', + 'LBL_CASE_ID' => 'ID Caso:', + 'LBL_CLOSE' => 'Cerrar:', + 'LBL_COLON' => ':', + 'LBL_CONTACT_ID' => 'ID Contacto:', + 'LBL_CONTACT_NAME' => 'Contacto:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Notas', + 'LBL_DESCRIPTION' => 'Nota', + 'LBL_EMAIL_ADDRESS' => 'Dirección de Correo:', + 'LBL_EMAIL_ATTACHMENT' => 'Adjunto de Correo:', + 'LBL_FILE_MIME_TYPE' => 'Tipo MIME', + 'LBL_FILE_URL' => 'URL de Archivo', + 'LBL_FILENAME' => 'Adjunto:', + 'LBL_LEAD_ID' => 'ID Cliente Potencial:', + 'LBL_LIST_CONTACT_NAME' => 'Contacto', + 'LBL_LIST_DATE_MODIFIED' => 'Modificado', + 'LBL_LIST_FILENAME' => 'Adjunto', + 'LBL_LIST_FORM_TITLE' => 'Lista de Notas', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_CONTACT' => 'Contacto', + 'LBL_MODULE_NAME' => 'Notas', + 'LBL_MODULE_TITLE' => 'Notas: Inicio', + 'LBL_NEW_FORM_TITLE' => 'Nueva Nota o Adjunto', + 'LBL_NOTE_STATUS' => 'Nota', + 'LBL_NOTE_SUBJECT' => 'Asunto:', + 'LBL_NOTES_SUBPANEL_TITLE' => 'Adjuntos', + 'LBL_NOTE' => 'Nota:', + 'LBL_OPPORTUNITY_ID' => 'ID Oportunidad:', + 'LBL_PARENT_ID' => 'ID Padre:', + 'LBL_PARENT_TYPE' => 'Tipo de Padre', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_PORTAL_FLAG' => '¿Mostrar en el Portal?', + 'LBL_EMBED_FLAG' => '¿Incluir en Correo?', + 'LBL_PRODUCT_ID' => 'ID Producto:', + 'LBL_QUOTE_ID' => 'ID Presupuesto:', + 'LBL_RELATED_TO' => 'Relacionado con:', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Notas', + 'LBL_STATUS' => 'Estado', + 'LBL_SUBJECT' => 'Asunto:', + 'LNK_IMPORT_NOTES' => 'Importar Notas', + 'LNK_NEW_NOTE' => 'Nueva Nota o Adjunto', + 'LNK_NOTE_LIST' => 'Ver Notas', + 'LBL_MEMBER_OF' => 'Miembro de:', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_REMOVING_ATTACHMENT' => 'Quitando adjunto...', + 'ERR_REMOVING_ATTACHMENT' => 'Error al quitar adjunto...', + 'LBL_CREATED_BY' => 'Creado Por', + 'LBL_MODIFIED_BY' => 'Modificado Por', + 'LBL_SEND_ANYWAYS' => 'Este correo no tiene asunto. ¿Enviar/guardar de todas formas?', + 'LBL_LIST_EDIT_BUTTON' => 'Editar', + 'LBL_ACTIVITIES_REPORTS' => 'Informe de Actividad', + 'LBL_PANEL_DETAILS' => 'Detalles', + 'LBL_NOTE_INFORMATION' => 'Visión General', + 'LBL_MY_NOTES_DASHLETNAME' => 'Mis Notas', + 'LBL_EDITLAYOUT' => 'Editar Diseño', + 'LBL_FIRST_NAME' => 'Nombre', + 'LBL_LAST_NAME' => 'Apellidos', + 'LBL_EXPORT_PARENT_TYPE' => 'Relacionado con el Módulo', + 'LBL_EXPORT_PARENT_ID' => 'Relacionado con el ID', + 'LBL_DATE_ENTERED' => 'Fecha de creación', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación', + 'LBL_DELETED' => 'Eliminada', +); \ No newline at end of file diff --git a/modules/OAuthKeys/language/es_es.lang.php b/modules/OAuthKeys/language/es_es.lang.php new file mode 100644 index 00000000000..4772f288d13 --- /dev/null +++ b/modules/OAuthKeys/language/es_es.lang.php @@ -0,0 +1,75 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por ID', + 'LBL_MODIFIED_NAME' => 'Modificado Por Usuario', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminada', + 'LBL_NAME' => 'Clave de Cliente', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Clave', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Id Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', + 'LBL_CONSKEY' => 'Clave del Consumidor', + 'LBL_CONSSECRET' => 'Secreto del Consumidor', + 'LBL_LIST_FORM_TITLE' => 'Claves de OAuth', + 'LBL_MODULE_NAME' => 'Claves de OAuth', + 'LBL_MODULE_TITLE' => 'Claves de OAuth', + 'LNK_NEW_RECORD' => 'Crear Clave OAuth', + 'LNK_LIST' => 'Ver Claves OAuth', + 'LBL_TOKENS' => 'Tokens', +); \ No newline at end of file diff --git a/modules/OAuthTokens/language/es_es.lang.php b/modules/OAuthTokens/language/es_es.lang.php new file mode 100644 index 00000000000..d83b37ed21f --- /dev/null +++ b/modules/OAuthTokens/language/es_es.lang.php @@ -0,0 +1,61 @@ + 'Solicitud de Token', + 'LBL_OAUTH_AUTHORIZE' => 'Autorizar Token', + 'LBL_OAUTH_CONSUMERREQ' => '¿Autorizar token del consumidos %s?', + 'LBL_OAUTH_ROLE' => 'Token role', + 'LBL_OAUTH_VALIDATION' => 'Verificación de código', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', + 'LBL_ID' => 'ID', + 'LBL_STATUS' => 'Estado', + 'LBL_TS' => 'Fecha y hora', + 'LBL_LIST_DELETE' => 'Borrar Token', + 'LBL_CONSUMER' => 'Nombre consumidor', + 'LBL_OAUTH_DISABLED' => 'OAuth no está habilitado. La extensión PHP oauth pueden faltar. Por favor, contacte con su administrador.', +); \ No newline at end of file diff --git a/modules/Opportunities/language/es_es.lang.php b/modules/Opportunities/language/es_es.lang.php new file mode 100644 index 00000000000..5b77f32878f --- /dev/null +++ b/modules/Opportunities/language/es_es.lang.php @@ -0,0 +1,160 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificada por ID', + 'LBL_MODIFIED_NAME' => 'Modificada por Usuario', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creada por ID', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre Oportunidad', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Usuario Modificado', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Usuario Asignado:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a:', + 'LBL_MODULE_NAME' => 'Oportunidades', + 'LBL_MODULE_TITLE' => 'Oportunidades: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Oportunidades', + 'LBL_VIEW_FORM_TITLE' => 'Vista de Oportunidades', + 'LBL_LIST_FORM_TITLE' => 'Lista de Oportunidades', + 'LBL_OPPORTUNITY_NAME' => 'Nombre Oportunidad:', + 'LBL_OPPORTUNITY' => 'Oportunidad:', + 'LBL_INVITEE' => 'Contactos', + 'LBL_CURRENCIES' => 'Monedas', + 'LBL_LIST_OPPORTUNITY_NAME' => 'Nombre', + 'LBL_LIST_ACCOUNT_NAME' => 'Cuenta', + 'LBL_LIST_AMOUNT' => 'Cantidad de la Oportunidad', + 'LBL_LIST_AMOUNT_USDOLLAR' => 'Cantidad', + 'LBL_LIST_DATE_CLOSED' => 'Fecha Cierre', + 'LBL_LIST_SALES_STAGE' => 'Etapa de Ventas', + 'LBL_ACCOUNT_ID' => 'ID de Cuenta', + 'LBL_CURRENCY_ID' => 'ID de Moneda', + 'LBL_CURRENCY_NAME' => 'Nombre de Moneda', + 'LBL_CURRENCY_SYMBOL' => 'Símbolo de Moneda', + 'db_sales_stage' => 'LBL_LIST_SALES_STAGE', + 'db_name' => 'LBL_NAME', + 'db_amount' => 'LBL_LIST_AMOUNT', + 'db_date_closed' => 'LBL_LIST_DATE_CLOSED', + 'UPDATE' => 'Oportunidad - Actualizar Moneda', + 'UPDATE_DOLLARAMOUNTS' => 'Actualizar Cantidades en Dólares EEUU', + 'UPDATE_VERIFY' => 'Verificar Cantidades', + 'UPDATE_VERIFY_TXT' => 'Verifica que los valores de las cantidades en las oportunidades son números decimales válidos con sólo caracteres numéricos (0-9) y decimales(.)', + 'UPDATE_FIX' => 'Corregir Cantidades', + 'UPDATE_FIX_TXT' => 'Intenta corregir cualquier cantidad no válida creando un número decimal válido a partir de la cantidad actual. Antes realiza una copia de seguridad de todas las cantidades modificadas en el campo de base de datos amount_backup. Si tras la correción detecta problemas, no vuelva a realizar esta operación sin restaurar los valores previos desde la copia de seguridad ya que si no sobrescribirá la copia de seguridad con nuevos datos no válidos.', + 'UPDATE_DOLLARAMOUNTS_TXT' => 'Actualiza las cantidades en Dólares EEUU para las oportunidades basadas en el conjunto actual de cambios de moneda. Este valor se usa para calcular gráficas y vistas de listas de cantidades monetarias.', + 'UPDATE_CREATE_CURRENCY' => 'Creación de nueva moneda:', + 'UPDATE_VERIFY_FAIL' => 'Fallo de verificación de registro:', + 'UPDATE_VERIFY_CURAMOUNT' => 'Cantidad actual:', + 'UPDATE_VERIFY_FIX' => 'La corrección daría', + 'UPDATE_INCLUDE_CLOSE' => 'Registros cerrados incluidos', + 'UPDATE_VERIFY_NEWAMOUNT' => 'Nueva cantidad:', + 'UPDATE_VERIFY_NEWCURRENCY' => 'Nueva moneda:', + 'UPDATE_DONE' => 'Hecho', + 'UPDATE_BUG_COUNT' => 'Problemas detectados cuya resolución se ha intentado:', + 'UPDATE_BUGFOUND_COUNT' => 'Problemas detectados:', + 'UPDATE_COUNT' => 'Registros actualizados:', + 'UPDATE_RESTORE_COUNT' => 'Registros con cantidades restauradas:', + 'UPDATE_RESTORE' => 'Restaurar Cantidades', + 'UPDATE_RESTORE_TXT' => 'Restaura los valores de las cantidades desde la copia de seguridad creada durante la corrección.', + 'UPDATE_FAIL' => 'No ha podido actualizarse -', + 'UPDATE_NULL_VALUE' => 'La cantidad es NULL, estableciéndola a 0 -', + 'UPDATE_MERGE' => 'Unificar Monedas', + 'UPDATE_MERGE_TXT' => 'Unifica múltiples monedas en una única moneda. Si detecta que hay múltiples registros de tipo moneda para la misma moneda, puede unificarlas. Esto también unificará las monedas para el resto de módulos.', + 'LBL_ACCOUNT_NAME' => 'Cuenta:', + 'LBL_AMOUNT' => 'Cantidad de la Oportunidad:', + 'LBL_AMOUNT_USDOLLAR' => 'Cantidad:', + 'LBL_CURRENCY' => 'Moneda:', + 'LBL_DATE_CLOSED' => 'Fecha de cierre:', + 'LBL_TYPE' => 'Tipo:', + 'LBL_CAMPAIGN' => 'Campaña:', + 'LBL_NEXT_STEP' => 'Próximo paso:', + 'LBL_LEAD_SOURCE' => 'Toma de contacto:', + 'LBL_SALES_STAGE' => 'Etapa de ventas:', + 'LBL_PROBABILITY' => 'Probabilidad (%):', + 'LBL_DUPLICATE' => 'Posible oportunidad duplicada', + 'MSG_DUPLICATE' => 'El registro para la oportunidad que va a crear podría ser un duplicado de otro registro de oportunidad existente. Los registros de oportunidad con nombres similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de esta oportunidad, o en Cancelar para volver al módulo sin crear la oportunidad.', + 'LBL_NEW_FORM_TITLE' => 'Nueva Oportunidad', + 'LNK_NEW_OPPORTUNITY' => 'Nueva Oportunidad', + 'LNK_OPPORTUNITY_LIST' => 'Ver Oportunidades', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a eliminar.', + 'LBL_TOP_OPPORTUNITIES' => 'Mis Principales Oportunidades', + 'NTC_REMOVE_OPP_CONFIRMATION' => '¿Está seguro de que desea eliminar este contacto de la oportunidad?', + 'OPPORTUNITY_REMOVE_PROJECT_CONFIRM' => '¿Está seguro de que desea eliminar esta oportunidad del proyecto?', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_RAW_AMOUNT' => 'Importe Bruto', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_DOCUMENTS_SUBPANEL_TITLE' => 'Documentos', + 'LBL_PROJECTS_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_MY_CLOSED_OPPORTUNITIES' => 'Mis Oportunidades Cerradas', + 'LBL_TOTAL_OPPORTUNITIES' => 'Oportunidades Totales', + 'LBL_CLOSED_WON_OPPORTUNITIES' => 'Oportunidades Ganadas', + 'LBL_CAMPAIGN_OPPORTUNITY' => 'Campañas', + 'LBL_PROJECT_SUBPANEL_TITLE' => 'Proyectos', + 'LABEL_PANEL_ASSIGNMENT' => 'Asignación', + 'LNK_IMPORT_OPPORTUNITIES' => 'Importar Oportunidades', + 'LBL_EDITLAYOUT' => 'Editar diseño', + 'LBL_EXPORT_CAMPAIGN_ID' => 'Id de campaña', + 'LBL_OPPORTUNITY_TYPE' => 'Tipo de oportunidad', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID Usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificador por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_NAME' => 'Nombre', + 'LBL_CONTACT_HISTORY_SUBPANEL_TITLE' => 'Emails de contactos relacionados', +); \ No newline at end of file diff --git a/modules/OptimisticLock/language/es_es.lang.php b/modules/OptimisticLock/language/es_es.lang.php new file mode 100644 index 00000000000..4e8a44d432d --- /dev/null +++ b/modules/OptimisticLock/language/es_es.lang.php @@ -0,0 +1,56 @@ + 'Suyo', + 'LBL_IN_DATABASE' => 'En Base de datos', + 'LBL_CONFLICT_EXISTS' => 'Hay un Conflicto Para - ', + 'LBL_ACCEPT_DATABASE' => 'Aceptar Base de datos', + 'LBL_ACCEPT_YOURS' => 'Aceptar Suyo', + 'LBL_RECORDS_MATCH' => 'Los Registros Coinciden', + 'LBL_NO_LOCKED_OBJECTS' => 'No hay Objetos Bloqueados', +); \ No newline at end of file diff --git a/modules/Project/language/es_es.lang.php b/modules/Project/language/es_es.lang.php new file mode 100644 index 00000000000..929825019f9 --- /dev/null +++ b/modules/Project/language/es_es.lang.php @@ -0,0 +1,136 @@ + 'Proyecto', + 'LBL_MODULE_TITLE' => 'Proyectos: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Proyectos', + 'LBL_LIST_FORM_TITLE' => 'Lista de Proyectos', + 'LBL_HISTORY_TITLE' => 'Historial', + 'LBL_ID' => 'Id:', + 'LBL_DATE_ENTERED' => 'Fecha Creación:', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación:', + 'LBL_ASSIGNED_USER_ID' => 'Asignado a:', + 'LBL_ASSIGNED_USER_NAME' => 'Asignado a:', + 'LBL_MODIFIED_USER_ID' => 'Modificado por:', + 'LBL_CREATED_BY' => 'Creado por:', + 'LBL_TEAM_ID' => 'Equipo:', + 'LBL_NAME' => 'Nombre:', + 'LBL_PDF_PROJECT_NAME' => 'Nombre de Proyecto:', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado:', + 'LBL_DATE' => 'Fecha', + 'LBL_DATE_START' => 'Fecha Inicio:', + 'LBL_DATE_END' => 'Fecha Fin:', + 'LBL_PRIORITY' => 'Prioridad:', + 'LBL_STATUS' => 'Estado:', + 'LBL_MY_PROJECTS' => 'Mis Proyectos', + 'LBL_MY_PROJECT_TASKS' => 'Mis Tareas de Proyecto', + 'LBL_TOTAL_ESTIMATED_EFFORT' => 'Trabajo Total Estimado (h):', + 'LBL_TOTAL_ACTUAL_EFFORT' => 'Trabajo Total Real (h):', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_DAYS' => 'Días', + 'LBL_LIST_ASSIGNED_USER_ID' => 'Asignado a', + 'LBL_LIST_TOTAL_ESTIMATED_EFFORT' => 'Trabajo Total Estimado (h)', + 'LBL_LIST_TOTAL_ACTUAL_EFFORT' => 'Trabajo Total Real (h)', + 'LBL_LIST_UPCOMING_TASKS' => 'Tareas de Próximo Vencimiento (1 Semana)', + 'LBL_LIST_OVERDUE_TASKS' => 'Tareas Vencidas', + 'LBL_LIST_OPEN_CASES' => 'Casos Abiertos', + 'LBL_LIST_END_DATE' => 'Fecha Fin', + 'LBL_LIST_TEAM_ID' => 'Equipo', + 'LBL_PROJECT_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_PROJECT_TASK_SUBPANEL_TITLE' => 'Tareas de Proyecto', + 'LBL_CONTACT_SUBPANEL_TITLE' => 'Contactos', + 'LBL_ACCOUNT_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_OPPORTUNITY_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_QUOTE_SUBPANEL_TITLE' => 'Presupuestos', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Proyecto', + 'CONTACT_REMOVE_PROJECT_CONFIRM' => '¿Está seguro de que desea eliminar este contacto de este proyecto?', + 'LNK_NEW_PROJECT' => 'Crear Proyecto', + 'LNK_PROJECT_LIST' => 'Ver Lista de Proyectos', + 'LNK_NEW_PROJECT_TASK' => 'Crear Tarea de Proyecto', + 'LNK_PROJECT_TASK_LIST' => 'Ver Tareas de Proyecto', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Proyectos', + 'LBL_ACTIVITIES_TITLE' => 'Actividades', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_QUICK_NEW_PROJECT' => 'Nuevo Proyecto', + 'LBL_PROJECT_TASKS_SUBPANEL_TITLE' => 'Tareas de Proyecto', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_OPPORTUNITIES_SUBPANEL_TITLE' => 'Oportunidades', + 'LBL_CASES_SUBPANEL_TITLE' => 'Casos', + 'LBL_BUGS_SUBPANEL_TITLE' => 'Incidencias', + 'LBL_PRODUCTS_SUBPANEL_TITLE' => 'Productos', + 'LBL_TASK_ID' => 'ID', + 'LBL_TASK_NAME' => 'Nombre de Tarea', + 'LBL_DURATION' => 'Duración', + 'LBL_ACTUAL_DURATION' => 'Duración Real', + 'LBL_START' => 'Inicio', + 'LBL_FINISH' => 'Fin', + 'LBL_PREDECESSORS' => 'Predecesoras', + 'LBL_PERCENT_COMPLETE' => '% Completado', + 'LBL_MORE' => 'Más...', + 'LBL_PERCENT_BUSY' => '% Ocupado', + 'LBL_TASK_ID_WIDGET' => 'id', + 'LBL_TASK_NAME_WIDGET' => 'description', + 'LBL_DURATION_WIDGET' => 'duration', + 'LBL_START_WIDGET' => 'date_start', + 'LBL_FINISH_WIDGET' => 'date_finish', + 'LBL_PREDECESSORS_WIDGET' => 'predecessors_', + 'LBL_PERCENT_COMPLETE_WIDGET' => 'percent_complete', + 'LBL_EDIT_PROJECT_TASKS_TITLE' => 'Editar Tareas de Proyecto', + 'LBL_OPPORTUNITIES' => 'Oportunidades', + 'LBL_LAST_WEEK' => 'Anterior', + 'LBL_NEXT_WEEK' => 'Siguiente', + 'LBL_PROJECTRESOURCES_SUBPANEL_TITLE' => 'Recursos del Proyecto', + 'LBL_PROJECTTASK_SUBPANEL_TITLE' => 'Tarea de Proyecto', + 'LBL_HOLIDAYS_SUBPANEL_TITLE' => 'Festivos', + 'LBL_PROJECT_INFORMATION' => 'Visión General', + 'LBL_EDITLAYOUT' => 'Editar diseño', + 'LBL_INSERTROWS' => 'Insertar filas', +); \ No newline at end of file diff --git a/modules/ProjectTask/language/es_es.lang.php b/modules/ProjectTask/language/es_es.lang.php new file mode 100644 index 00000000000..cdd29f1d421 --- /dev/null +++ b/modules/ProjectTask/language/es_es.lang.php @@ -0,0 +1,121 @@ + 'Tareas de Proyecto', + 'LBL_MODULE_TITLE' => 'Tareas de Proyecto: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Tareas de Proyecto', + 'LBL_LIST_FORM_TITLE' => 'Lista de Tareas de Proyecto', + 'LBL_EDIT_TASK_IN_GRID_TITLE' => 'Editar Tarea en Rejilla', + 'LBL_ID' => 'Id:', + 'LBL_PROJECT_TASK_ID' => 'Id Tarea de Proyecto:', + 'LBL_PROJECT_ID' => 'Id Proyecto', + 'LBL_DATE_ENTERED' => 'Fecha Creación:', + 'LBL_DATE_MODIFIED' => 'Fecha Modificación:', + 'LBL_ASSIGNED_USER_ID' => 'Asignado a:', + 'LBL_MODIFIED_USER_ID' => 'Modificado por:', + 'LBL_CREATED_BY' => 'Creado por:', + 'LBL_TEAM_ID' => 'Equipo:', + 'LBL_NAME' => 'Nombre:', + 'LBL_STATUS' => 'Estado:', + 'LBL_DATE_DUE' => 'Fecha Vencimiento:', + 'LBL_TIME_DUE' => 'Hora Vencimiento:', + 'LBL_RESOURCE' => 'Recurso:', + 'LBL_PREDECESSORS' => 'Predecesores:', + 'LBL_DATE_START' => 'Fecha Inicio:', + 'LBL_DATE_FINISH' => 'Fecha Fin:', + 'LBL_TIME_START' => 'Hora Inicio:', + 'LBL_TIME_FINISH' => 'Hora Fin:', + 'LBL_DURATION' => 'Duración:', + 'LBL_DURATION_UNIT' => 'Unidad de Duración:', + 'LBL_ACTUAL_DURATION' => 'Duración Real:', + 'LBL_PARENT_ID' => 'Proyecto:', + 'LBL_PARENT_TASK_ID' => 'Id Tarea Padre:', + 'LBL_PERCENT_COMPLETE' => '% Completado:', + 'LBL_PRIORITY' => 'Prioridad:', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_ORDER_NUMBER' => 'Orden:', + 'LBL_TASK_NUMBER' => 'Número de Tarea:', + 'LBL_TASK_ID' => 'Id Tarea:', + 'LBL_DEPENDS_ON_ID' => 'Depende de:', + 'LBL_MILESTONE_FLAG' => 'Hito:', + 'LBL_ESTIMATED_EFFORT' => 'Trabajo Estimado (h):', + 'LBL_ACTUAL_EFFORT' => 'Trabajo Real (h):', + 'LBL_UTILIZATION' => 'Ocupación (%):', + 'LBL_DELETED' => 'Eliminada:', + 'LBL_LIST_ORDER_NUMBER' => 'Orden', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_DAYS' => 'días', + 'LBL_LIST_PARENT_NAME' => 'Proyecto', + 'LBL_LIST_PERCENT_COMPLETE' => '% Completado', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_DURATION' => 'Duración', + 'LBL_LIST_ACTUAL_DURATION' => 'Duración Real', + 'LBL_LIST_ASSIGNED_USER_ID' => 'Asignada a', + 'LBL_LIST_DATE_DUE' => 'Fecha Vencimiento', + 'LBL_LIST_DATE_START' => 'Fecha Inicio', + 'LBL_LIST_DATE_FINISH' => 'Fecha Fin', + 'LBL_LIST_PRIORITY' => 'Prioridad', + 'LBL_LIST_CLOSE' => 'Cerrar', + 'LBL_PROJECT_NAME' => 'Nombre Proyecto', + 'LNK_NEW_PROJECT' => 'Crear Proyecto', + 'LNK_PROJECT_LIST' => 'Lista de Proyectos', + 'LNK_NEW_PROJECT_TASK' => 'Crear Tarea de Proyecto', + 'LNK_PROJECT_TASK_LIST' => 'Tareas de Proyecto', + 'LBL_LIST_MY_PROJECT_TASKS' => 'Mis Tareas de Proyecto', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Tareas de Proyecto', + 'LBL_NEW_FORM_TITLE' => 'Nueva Tarea de Proyecto', + 'LBL_ACTIVITIES_TITLE' => 'Actividades', + 'LBL_HISTORY_TITLE' => 'Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'DATE_JS_ERROR' => 'Por favor, introduzca una fecha que corresponda a la hora introducida', + 'LBL_ASSIGNED_USER_NAME' => 'Asignado a', + 'LBL_PARENT_NAME' => 'Nombre de Proyecto', + 'LBL_LIST_PROJECT_NAME' => 'Proyectos', + 'LBL_EDITLAYOUT' => 'Editar diseño', +); \ No newline at end of file diff --git a/modules/ProspectLists/language/es_es.lang.php b/modules/ProspectLists/language/es_es.lang.php new file mode 100644 index 00000000000..3761837fbde --- /dev/null +++ b/modules/ProspectLists/language/es_es.lang.php @@ -0,0 +1,99 @@ + 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', + 'LBL_MODULE_NAME' => 'Listas de Público Objetivo', + 'LBL_MODULE_ID' => 'Listas de Público Objetivo', + 'LBL_MODULE_TITLE' => 'Listas de Público Objetivo: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Listas de Público Objetivo', + 'LBL_LIST_FORM_TITLE' => 'Listas de Público Objetivo', + 'LBL_PROSPECT_LIST_NAME' => 'Listas de Público Objetivo:', + 'LBL_NAME' => 'Nombre', + 'LBL_ENTRIES' => 'Total de Entradas', + 'LBL_LIST_PROSPECT_LIST_NAME' => 'Lista de Público Objetivo', + 'LBL_LIST_ENTRIES' => 'Público Objetivo en la Lista', + 'LBL_LIST_DESCRIPTION' => 'Descripción', + 'LBL_LIST_TYPE_NO' => 'Tipo', + 'LBL_LIST_END_DATE' => 'Fecha Fin', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_MARKETING_ID' => 'Id de Marketing', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificada por', + 'LBL_CREATED' => 'Creada por', + 'LBL_TEAM' => 'Equipo', + 'LBL_ASSIGNED_TO' => 'Asignada a', + 'LBL_DESCRIPTION' => 'Descripción', + 'LNK_NEW_CAMPAIGN' => 'Crear Campaña', + 'LNK_CAMPAIGN_LIST' => 'Campañas', + 'LNK_NEW_PROSPECT_LIST' => 'Crear Lista de Público Objetivo', + 'LNK_PROSPECT_LIST_LIST' => 'Lista de Público Objetivo', + 'LBL_MODIFIED_BY' => 'Modificada por', + 'LBL_CREATED_BY' => 'Creada por', + 'LBL_DATE_CREATED' => 'Fecha de Creación', + 'LBL_DATE_LAST_MODIFIED' => 'Fecha de Modificación', + 'LNK_NEW_PROSPECT' => 'Crear Público Objetivo', + 'LNK_PROSPECT_LIST' => 'Público Objetivo', + 'LBL_PROSPECT_LISTS_SUBPANEL_TITLE' => 'Listas de Público Objetivo', + 'LBL_CONTACTS_SUBPANEL_TITLE' => 'Contactos', + 'LBL_LEADS_SUBPANEL_TITLE' => 'Clientes Potenciales', + 'LBL_PROSPECTS_SUBPANEL_TITLE' => 'Público Objetivo', + 'LBL_ACCOUNTS_SUBPANEL_TITLE' => 'Cuentas', + 'LBL_COPY_PREFIX' => 'Copia de', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', + 'LBL_TYPE' => 'Tipo', + 'LBL_LIST_TYPE' => 'Tipo', + 'LBL_LIST_TYPE_LIST_NAME' => 'Tipo', + 'LBL_NEW_FORM_TITLE' => 'Nueva Lista de Público Objetivo', + 'LBL_MARKETING_NAME' => 'Nombre de Marketing', + 'LBL_MARKETING_MESSAGE' => 'Mensaje de Marketing por Email', + 'LBL_DOMAIN_NAME' => 'Nombre de Dominio', + 'LBL_DOMAIN' => 'No hay correos para este dominio', + 'LBL_LIST_PROSPECTLIST_NAME' => 'Nombre', + 'LBL_MORE_DETAIL' => 'Más Detalles', +); \ No newline at end of file diff --git a/modules/Prospects/language/es_es.lang.php b/modules/Prospects/language/es_es.lang.php new file mode 100644 index 00000000000..51ced8f5c38 --- /dev/null +++ b/modules/Prospects/language/es_es.lang.php @@ -0,0 +1,219 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre:', + 'LBL_CREATED_USER' => 'Usuario Creado', + 'LBL_MODIFIED_USER' => 'Usuario Modificado', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Asignado a:', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_SALUTATION' => 'Saludo', + 'LBL_FIRST_NAME' => 'Nombre:', + 'LBL_LAST_NAME' => 'Apellido:', + 'LBL_TITLE' => 'Título:', + 'LBL_DEPARTMENT' => 'Departamento:', + 'LBL_DO_NOT_CALL' => 'No Llamar:', + 'LBL_HOME_PHONE' => 'Casa:', + 'LBL_MOBILE_PHONE' => 'Móvil:', + 'LBL_OFFICE_PHONE' => 'Tel. Oficina:', + 'LBL_OTHER_PHONE' => 'Tel. Alternativo:', + 'LBL_FAX_PHONE' => 'Fax:', + 'LBL_EMAIL_ADDRESS' => 'Correo electrónico:', + 'LBL_PRIMARY_ADDRESS' => 'Dirección Principal:', + 'LBL_PRIMARY_ADDRESS_STREET' => 'Calle Dirección Principal:', + 'LBL_PRIMARY_ADDRESS_STREET_2' => 'Dirección Principal 2:', + 'LBL_PRIMARY_ADDRESS_STREET_3' => 'Dirección Principal 3:', + 'LBL_PRIMARY_ADDRESS_CITY' => 'Ciudad Dirección Principal:', + 'LBL_PRIMARY_ADDRESS_STATE' => 'Provincia/Estado Dirección Principal:', + 'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'CP Dirección Principal:', + 'LBL_PRIMARY_ADDRESS_COUNTRY' => 'País Dirección Principal:', + 'LBL_ALT_ADDRESS' => 'Dirección alternativa', + 'LBL_ALT_ADDRESS_STREET' => 'Calle Dirección Alternativa:', + 'LBL_ALT_ADDRESS_STREET_2' => 'Dirección Alternativa 2:', + 'LBL_ALT_ADDRESS_STREET_3' => 'Dirección Alternativa 3:', + 'LBL_ALT_ADDRESS_CITY' => 'Ciudad Dirección Alternativa:', + 'LBL_ALT_ADDRESS_STATE' => 'Provincia/Estado Dirección Alternativa:', + 'LBL_ALT_ADDRESS_POSTALCODE' => 'CP Dirección Alternativa:', + 'LBL_ALT_ADDRESS_COUNTRY' => 'País Dirección Alternativa:', + 'LBL_COUNTRY' => 'País:', + 'LBL_STREET' => 'Dirección Alternativa', + 'LBL_PRIMARY_STREET' => 'Dirección', + 'LBL_ALT_STREET' => 'Otra dirección', + 'LBL_CITY' => 'Ciudad:', + 'LBL_STATE' => 'Provincia/Estado:', + 'LBL_POSTALCODE' => 'Código Postal', + 'LBL_POSTAL_CODE' => 'CP:', + 'LBL_CONTACT_INFORMATION' => 'Información de Contacto', + 'LBL_ADDRESS_INFORMATION' => 'Información de Dirección', + 'LBL_OTHER_EMAIL_ADDRESS' => 'Email alternativo:', + 'LBL_ASSISTANT' => 'Asistente:', + 'LBL_ASSISTANT_PHONE' => 'Tel. Asistente:', + 'LBL_WORK_PHONE' => 'Tel. Trabajo', + 'LNK_IMPORT_VCARD' => 'Crear desde vCard', + 'LBL_ANY_EMAIL' => 'Email cualquiera:', + 'LBL_EMAIL_NON_PRIMARY' => 'Correo Electrónico No Principal', + 'LBL_MODULE_NAME' => 'Público Objetivo', + 'LBL_MODULE_ID' => 'Público Objetivo', + 'LBL_INVITEE' => 'Informa Directamente', + 'LBL_MODULE_TITLE' => 'Público Objetivo: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Público Objetivo', + 'LBL_LIST_FORM_TITLE' => 'Lista de Público Objetivo', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Público Objetivo', + 'LBL_PROSPECT' => 'Público Objetivo:', + 'LBL_BUSINESSCARD' => 'Tarjeta de Visita', + 'LBL_LIST_LAST_NAME' => 'Apellido', + 'LBL_LIST_PROSPECT_NAME' => 'Nombre de Público Objetivo', + 'LBL_LIST_TITLE' => 'Título', + 'LBL_LIST_EMAIL_ADDRESS' => 'Email', + 'LBL_LIST_OTHER_EMAIL_ADDRESS' => 'Email Alternativo', + 'LBL_LIST_PHONE' => 'Teléfono', + 'LBL_LIST_PROSPECT_ROLE' => 'Rol', + 'LBL_LIST_FIRST_NAME' => 'Nombre', + 'db_last_name' => 'LBL_LIST_LAST_NAME', + 'db_first_name' => 'LBL_LIST_FIRST_NAME', + 'db_title' => 'LBL_LIST_TITLE', + 'db_email1' => 'LBL_LIST_EMAIL_ADDRESS', + 'db_email2' => 'LBL_LIST_OTHER_EMAIL_ADDRESS', + 'LBL_CAMPAIGN_ID' => 'ID Campaña', + 'LBL_EXISTING_PROSPECT' => 'Usado un contacto existente', + 'LBL_CREATED_PROSPECT' => 'Nuevo contacto creado', + 'LBL_EXISTING_ACCOUNT' => 'Usada una cuenta existente', + 'LBL_CREATED_ACCOUNT' => 'Nueva cuenta creada', + 'LBL_CREATED_CALL' => 'Nueva llamada creada', + 'LBL_CREATED_MEETING' => 'Nueva reunión creada', + 'LBL_ADDMORE_BUSINESSCARD' => 'Añadir otra tarjeta de visita', + 'LBL_ADD_BUSINESSCARD' => 'Introducir Tarjeta de Visita', + 'LBL_FULL_NAME' => 'Nombre Completo:', + 'LBL_PROSPECT_NAME' => 'Nombre del Público Objetivo:', + 'LBL_PROSPECT_INFORMATION' => 'Visión General', + 'LBL_MORE_INFORMATION' => 'Más Información', + 'LBL_ANY_PHONE' => 'Tel. Cualquiera:', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_BIRTHDATE' => 'Fecha de nacimiento:', + 'LBL_EMAIL_OPT_OUT' => 'Rehusar Email:', + 'LBL_ALTERNATE_ADDRESS' => 'Dirección Alternativa:', + 'LBL_ANY_ADDRESS' => 'Dirección Alternativa:', + 'LBL_DESCRIPTION_INFORMATION' => 'Información de Descripción', + 'LBL_PROSPECT_ROLE' => 'Rol:', + 'LBL_OPP_NAME' => 'Nombre Oportunidad:', + 'LBL_IMPORT_VCARD' => 'Importar vCard', + 'LBL_IMPORT_VCARDTEXT' => 'Crear un nuevo contacto automáticamente importando una vCard su sistema de ficheros.', + 'LBL_DUPLICATE' => 'Posible Público Objetivo Duplicado', + 'MSG_SHOW_DUPLICATES' => 'El registro para el prospecto que va a crear podría ser un duplicado de otro registro de prospecto existente. Los registros de prospectos con nombres y/o direcciones de correo similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de este prospecto, o en Cancelar para volver al módulo sin crear el prospecto.', + 'MSG_DUPLICATE' => 'El registro para el prospecto que va a crear podría ser un duplicado de otro registro de prospecto existente. Los registros de prospectos con nombres y/o direcciones de correo similares se listan a continuación.
Haga clic en Guardar para continuar con la creación de este prospecto, o en Cancelar para volver al módulo sin crear el prospecto.', + 'LNK_NEW_ACCOUNT' => 'Crear Cuenta', + 'LNK_NEW_OPPORTUNITY' => 'Crear Oportunidad', + 'LNK_NEW_CASE' => 'Crear Caso', + 'LNK_NEW_NOTE' => 'Crear Nota or Adjunto', + 'LNK_NEW_CALL' => 'Registrar Llamada', + 'LNK_NEW_EMAIL' => 'Archivar Email', + 'LNK_NEW_MEETING' => 'Planificar Reunión', + 'LNK_NEW_TASK' => 'Crear Tarea', + 'LNK_NEW_APPOINTMENT' => 'Crear Cita', + 'LNK_IMPORT_PROSPECTS' => 'Importar Prospectos', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'NTC_REMOVE_CONFIRMATION' => '¿Está seguro de que desea quitar este contacto del caso?', + 'NTC_REMOVE_DIRECT_REPORT_CONFIRMATION' => '¿Está seguro de que desea quitar este registro como un informador directo?', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar el contacto.', + 'NTC_COPY_PRIMARY_ADDRESS' => 'Copiar dirección principal a dirección alternativa', + 'NTC_COPY_ALTERNATE_ADDRESS' => 'Copiar dirección alternativa a dirección principal', + 'LBL_SAVE_PROSPECT' => 'Guardar Público Objetivo', + 'LBL_CREATED_OPPORTUNITY' => 'Crear una nueva oportunidad', + 'NTC_OPPORTUNITY_REQUIRES_ACCOUNT' => 'La creación de una oportunidad requiere una cuenta.\\n Por favor, cree una cuenta nueva o seleccione una existente.', + 'LNK_SELECT_ACCOUNT' => 'Seleccionar Cuenta', + 'LNK_NEW_PROSPECT' => 'Crear Público Objetivo', + 'LNK_PROSPECT_LIST' => 'Ver Público Objetivo', + 'LNK_NEW_CAMPAIGN' => 'Crear Campaña', + 'LNK_CAMPAIGN_LIST' => 'Campañas', + 'LNK_NEW_PROSPECT_LIST' => 'Crear Lista de Público Objetivo', + 'LNK_PROSPECT_LIST_LIST' => 'Listas de Público Objetivo', + 'LNK_IMPORT_PROSPECT' => 'Importar Público Objetivo', + 'LBL_SELECT_CHECKED_BUTTON_LABEL' => 'Seleccione Público Objetivo Marcado', + 'LBL_SELECT_CHECKED_BUTTON_TITLE' => 'Seleccione Público Objetivo Marcado', + 'LBL_INVALID_EMAIL' => 'Email No Válido:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Público Objetivo', + 'LBL_PROSPECT_LIST' => 'Público Objetivo', + 'LBL_CONVERT_BUTTON_KEY' => 'V', + 'LBL_CONVERT_BUTTON_TITLE' => 'Convertir Público Objetivo', + 'LBL_CONVERT_BUTTON_LABEL' => 'Convertir Público Objetivo', + 'LBL_CONVERTPROSPECT' => 'Convertir Público Objetivo', + 'LNK_NEW_CONTACT' => 'Nuevo Contacto', + 'LBL_CREATED_CONTACT' => 'Se ha creado un nuevo contacto', + 'LBL_BACKTO_PROSPECTS' => 'Volver a Público Objetivo', + 'LBL_CAMPAIGNS' => 'Campañas', + 'LBL_CAMPAIGN_LIST_SUBPANEL_TITLE' => 'Registro de Campañas', + 'LBL_TRACKER_KEY' => 'Clave de Seguimiento', + 'LBL_LEAD_ID' => 'Id Cliente Potencial', + 'LBL_CONVERTED_LEAD' => 'Cliente Potencial Convertido', + 'LBL_ACCOUNT_NAME' => 'Nombre de Cuenta', + 'LBL_EDIT_ACCOUNT_NAME' => 'Nombre de Cuenta:', + 'LBL_CAMPAIGNS_SUBPANEL_TITLE' => 'Campañas', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Historial', + 'LBL_PHONE_HOME' => 'Teléfono de casa', + 'LBL_PHONE_MOBILE' => 'Móvil', + 'LBL_PHONE_WORK' => 'Teléfono del trabajo', + 'LBL_PHONE_OTHER' => 'Otro teléfono', + 'LBL_PHONE_FAX' => 'Fax oficina', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID Usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_EMAIL2' => 'Otra dirección de Email', +); \ No newline at end of file diff --git a/modules/Relationships/language/es_es.lang.php b/modules/Relationships/language/es_es.lang.php new file mode 100644 index 00000000000..ce402850f50 --- /dev/null +++ b/modules/Relationships/language/es_es.lang.php @@ -0,0 +1,65 @@ + 'Id de Relación', + 'LBL_RELATIONSHIP_NAME' => 'Nombre de Relación', + 'LBL_LHS_MODULE' => 'Nombre de Módulo LHS', + 'LBL_LHS_TABLE' => 'Nombre de Tabla LHS', + 'LBL_LHS_KEY' => 'Nombre de Clave LHS', + 'LBL_RHS_MODULE' => 'Nombre de Módulo RHS', + 'LBL_RHS_TABLE' => 'Nombre de Tabla RHS', + 'LBL_RHS_KEY' => 'Nombre de Clave RHS', + 'LBL_JOIN_TABLE' => 'Nombre de Tabla de Join', + 'LBL_JOIN_KEY_LHS' => 'Clave de Join LHS', + 'LBL_JOIN_KEY_RHS' => 'Clave de Join RHS', + 'LBL_RELATIONSHIP_TYPE' => 'Tipo de Relación', + 'LBL_RELATIONSHIP_ROLE_COLUMN' => 'Nombre de Columna de Rol de Relación', + 'LBL_RELATIONSHIP_ROLE_COLUMN_VALUE' => 'Valor de Columna de Rol de Relación', + 'LBL_REVERSE' => 'Invertir', + 'LBL_DELETED' => 'Eliminado', +); \ No newline at end of file diff --git a/modules/Releases/language/es_es.lang.php b/modules/Releases/language/es_es.lang.php new file mode 100644 index 00000000000..c9d669dc169 --- /dev/null +++ b/modules/Releases/language/es_es.lang.php @@ -0,0 +1,72 @@ + 'Publicaciones', + 'LBL_MODULE_TITLE' => 'Publicaciones: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Publicaciones', + 'LBL_LIST_FORM_TITLE' => 'Lista de Publicaciones', + 'LBL_NEW_FORM_TITLE' => 'Nueva Publicación', + 'LBL_RELEASE' => 'Publicación:', + 'LBL_LIST_NAME' => 'Publicación', + 'LBL_NAME' => 'Versión de la Publicación:', + 'LBL_LIST_LIST_ORDER' => 'Orden', + 'LBL_LIST_ORDER' => 'Orden:', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_STATUS' => 'Estado:', + 'LNK_NEW_RELEASE' => 'Lista de Publicaciones', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la publicación.', + 'NTC_STATUS' => 'Establece el estado a Inactiva para eliminar esta publicación de las listas desplegables de Publicaciones', + 'NTC_LIST_ORDER' => 'Establece el orden en que esta publicación aparecerá en las listas desplegables de Publicaciones', + 'release_status_dom' => + array ( + 'Active' => 'Activa', + 'Inactive' => 'Inactiva', + ), + 'LBL_EDITLAYOUT' => 'Editar Diseño', +); \ No newline at end of file diff --git a/modules/Roles/language/es_es.lang.php b/modules/Roles/language/es_es.lang.php new file mode 100644 index 00000000000..92335c3a2d7 --- /dev/null +++ b/modules/Roles/language/es_es.lang.php @@ -0,0 +1,65 @@ + 'Rol:', + 'LBL_LANGUAGE' => 'Idioma:', + 'LBL_MODULE_NAME' => 'Roles', + 'LBL_MODULE_TITLE' => 'Roles: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Roles', + 'LBL_LIST_FORM_TITLE' => 'Lista de Roles', + 'LNK_NEW_ROLE' => 'Crear Rol', + 'LNK_ROLES' => 'Roles', + 'LBL_NAME' => 'Nombre:', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_ALLOWED_MODULES' => 'Módulos Permitidos:', + 'LBL_DISALLOWED_MODULES' => 'Módulos No Permitidos:', + 'LBL_ASSIGN_MODULES' => 'Editar Módulos:', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Roles', + 'LBL_USERS' => 'Usuarios', + 'LBL_USERS_SUBPANEL_TITLE' => 'Usuarios', +); \ No newline at end of file diff --git a/modules/SavedSearch/language/es_es.lang.php b/modules/SavedSearch/language/es_es.lang.php new file mode 100644 index 00000000000..3d3dd64c6ac --- /dev/null +++ b/modules/SavedSearch/language/es_es.lang.php @@ -0,0 +1,67 @@ + 'Mis Búsquedas Guardadas', + 'LBL_SEARCH_FORM_TITLE' => 'Mis Búsquedas Guardadas: Búsqueda', + 'LBL_LIST_FORM_TITLE' => 'Lista de Mis Búsquedas Guardadas', + 'LBL_DELETE_CONFIRM' => '¿Está seguro de que desea eliminar la Búsqueda Guardada Seleccionada?', + 'LBL_UPDATE_BUTTON_TITLE' => 'Actualizar esta Búsqueda Guardada', + 'LBL_DELETE_BUTTON_TITLE' => 'Eliminar esta Búsqueda Guardada', + 'LBL_SAVE_BUTTON_TITLE' => 'Guardar la búsqueda actual', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_MODULE' => 'Módulo', + 'LBL_ORDER_BY_COLUMNS' => 'Ordenar por columna:', + 'LBL_DIRECTION' => 'Dirección:', + 'LBL_SAVE_SEARCH_AS' => 'Guardar búsqueda como:', + 'LBL_SAVE_SEARCH_AS_HELP' => 'Esto guarda su configuración de vista y cualquier filtro en la pestaña de Búsqueda Avanzada.', + 'LBL_PREVIOUS_SAVED_SEARCH' => 'Búsquedas Guardadas Previas:', + 'LBL_PREVIOUS_SAVED_SEARCH_HELP' => 'Editar o Eliminar una Búsqueda Guardada.', + 'LBL_ASCENDING' => 'Ascendente', + 'LBL_DESCENDING' => 'Descendente', + 'LBL_MODIFY_CURRENT_SEARCH' => 'Modificar búsqueda actual', +); \ No newline at end of file diff --git a/modules/Schedulers/language/es_es.lang.php b/modules/Schedulers/language/es_es.lang.php new file mode 100644 index 00000000000..eaf98edd37b --- /dev/null +++ b/modules/Schedulers/language/es_es.lang.php @@ -0,0 +1,152 @@ + 'Procesar Tareas de Workflow', + 'LBL_OOTB_REPORTS' => 'Ejecutar Tareas Programadas de Generación de Informes', + 'LBL_OOTB_IE' => 'Comprobar Bandejas de Entrada', + 'LBL_OOTB_BOUNCE' => 'Ejecutar Proceso Nocturno de Emails de Campaña Rebotados', + 'LBL_OOTB_CAMPAIGN' => 'Ejecutar Proceso Nocturno de Campañas de Email Masivo', + 'LBL_OOTB_PRUNE' => 'Truncar Base de datos al Inicio del Mes', + 'LBL_OOTB_TRACKER' => 'Truncar Tablas de Monitorización', + 'LBL_UPDATE_TRACKER_SESSIONS' => 'Actualizar Tabla tracker_sessions', + 'LBL_OOTB_SEND_EMAIL_REMINDERS' => 'Ejecutar Envío de Emails de Recordatorios', + 'LBL_OOTB_CLEANUP_QUEUE' => 'Limpiar Cola de Trabajos', + 'LBL_OOTB_REMOVE_DOCUMENTS_FROM_FS' => 'Extracción de documentos del sistema de archivos', + 'LBL_LIST_JOB_INTERVAL' => 'Intervalo:', + 'LBL_LIST_LIST_ORDER' => 'Planificadores:', + 'LBL_LIST_NAME' => 'Planificador:', + 'LBL_LIST_RANGE' => 'Rango:', + 'LBL_LIST_REMOVE' => 'Quitar:', + 'LBL_LIST_STATUS' => 'Estado:', + 'LBL_LIST_TITLE' => 'Lista de Planificación:', + 'LBL_LIST_EXECUTE_TIME' => 'Será ejecutado en:', + 'LBL_SUN' => 'Domingo', + 'LBL_MON' => 'Lunes', + 'LBL_TUE' => 'Martes', + 'LBL_WED' => 'Miércoles', + 'LBL_THU' => 'Jueves', + 'LBL_FRI' => 'Viernes', + 'LBL_SAT' => 'Sábado', + 'LBL_ALL' => 'Todos los días', + 'LBL_EVERY_DAY' => 'Todos los días', + 'LBL_AT_THE' => 'El', + 'LBL_EVERY' => 'Cada', + 'LBL_FROM' => 'Desde', + 'LBL_ON_THE' => 'En el', + 'LBL_RANGE' => 'a', + 'LBL_AT' => 'en', + 'LBL_IN' => 'en', + 'LBL_AND' => 'y', + 'LBL_MINUTES' => 'minutos', + 'LBL_HOUR' => 'horas', + 'LBL_HOUR_SING' => 'hora', + 'LBL_MONTH' => 'mes', + 'LBL_OFTEN' => 'Tan a menudo como sea posible.', + 'LBL_MIN_MARK' => 'marca por minuto', + 'LBL_MINS' => 'min', + 'LBL_HOURS' => 'hrs', + 'LBL_DAY_OF_MONTH' => 'fecha', + 'LBL_MONTHS' => 'me', + 'LBL_DAY_OF_WEEK' => 'día', + 'LBL_CRONTAB_EXAMPLES' => 'Lo arriba mostrado utiliza notación estándar de crontab.', + 'LBL_CRONTAB_SERVER_TIME_PRE' => 'Las especificaciones del cron para que se ejecute es sobre la base de la zona horaria del servidor (', + 'LBL_CRONTAB_SERVER_TIME_POST' => '). Por favor, especifique el tiempo de ejecución del planificador en consecuencia.', + 'LBL_ALWAYS' => 'Siempre', + 'LBL_CATCH_UP' => 'Ejecutar Si Falla', + 'LBL_CATCH_UP_WARNING' => 'Desmarque si la ejecución de esta tarea puede durar más de un momento.', + 'LBL_DATE_TIME_END' => 'Fecha y Hora de Fin', + 'LBL_DATE_TIME_START' => 'Fecha y Hora de Inicio', + 'LBL_INTERVAL' => 'Intervalo', + 'LBL_JOB' => 'Tarea', + 'LBL_JOB_URL' => 'URL de la tarea', + 'LBL_LAST_RUN' => 'Última Ejecución Exitosa', + 'LBL_MODULE_NAME' => 'Planificador Sugar', + 'LBL_MODULE_TITLE' => 'Planificadores', + 'LBL_NAME' => 'Nombre de Tarea', + 'LBL_NEVER' => 'Nunca', + 'LBL_NEW_FORM_TITLE' => 'Nueva Planificación', + 'LBL_PERENNIAL' => 'continuo', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Planificación', + 'LBL_SCHEDULER' => 'Planificador:', + 'LBL_STATUS' => 'Estado', + 'LBL_TIME_FROM' => 'Activo Desde', + 'LBL_TIME_TO' => 'Activo Hasta', + 'LBL_WARN_CURL_TITLE' => 'Aviso cURL:', + 'LBL_WARN_CURL' => 'Aviso:', + 'LBL_WARN_NO_CURL' => 'Este sistema no tiene las librerías cURL habilitadas/compiladas en el módulo de PHP (--with-curl=/ruta/a/libreria_curl). Por favor, contacte con su administrador para resolver el problema. Sin la funcionalidad que provee cURL, el Planificador no puede utilizar hilos con sus tareas.', + 'LBL_BASIC_OPTIONS' => 'Configuración Básica', + 'LBL_ADV_OPTIONS' => 'Opciones Avanzadas', + 'LBL_TOGGLE_ADV' => 'Mostrar Opciones Avanzadas', + 'LBL_TOGGLE_BASIC' => 'Mostrar Opciones Básicas', + 'LNK_LIST_SCHEDULER' => 'Planificadores', + 'LNK_NEW_SCHEDULER' => 'Nuevo Planificador', + 'LNK_LIST_SCHEDULED' => 'Tareas Planificadas', + 'SOCK_GREETING' => 'Este es el interfaz de usuario para el Servicio de Planificación de SugarCRM.
[ Comandos de demonio disponibles: start|restart|shutdown|status ]
Para salir, teclee 'quit'. Para detener el servicio 'shutdown'.', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar la planificación.', + 'ERR_CRON_SYNTAX' => 'Sintaxis de Cron inválida', + 'NTC_DELETE_CONFIRMATION' => '¿Está seguro de que desea eliminar este registro?', + 'NTC_STATUS' => 'Establezca el estado a Inactivo para quitar esta planificación de las listas desplegables de selección de Planificador', + 'NTC_LIST_ORDER' => 'Establezca el orden en que esta planificación aparecerá en las listas desplegables de selección de Planificador', + 'LBL_CRON_INSTRUCTIONS_WINDOWS' => 'Para configurar el Planificador de Windows', + 'LBL_CRON_INSTRUCTIONS_LINUX' => 'Para configurar Crontab', + 'LBL_CRON_LINUX_DESC' => 'Nota: Para ejecutar los Planificadores de Sugar, añada la siguiente línea a su archivo crontab:', + 'LBL_CRON_WINDOWS_DESC' => 'Nota: Para ejecutar los planificadores de Sugar, cree un archivo de proceso por lotes a ejecutar utilizando las Tareas Programadas de Windows. El archivo de proceso por lotes debería contener los siguientes comandos:', + 'LBL_NO_PHP_CLI' => 'Si su servidor no tiene disponibles los binarios PHP, puede utilizar wget o curl para lanzar sus Tareas.
para wget: *    *    *    *    *    wget --quiet --non-verbose http://translate.sugarcrm.com/soon/latest/cron.php > /dev/null 2>&1
para curl: *    *    *    *    *    curl --silent http://translate.sugarcrm.com/soon/latest/cron.php > /dev/null 2>&1', + 'LBL_JOBS_SUBPANEL_TITLE' => 'Registro de Tareas', + 'LBL_EXECUTE_TIME' => 'Tiempo de Ejecución', + 'LBL_REFRESHJOBS' => 'Actualizar Trabajos', + 'LBL_POLLMONITOREDINBOXES' => 'Comprobar Cuentas de Correo Entrante', + 'LBL_PERFORMFULLFTSINDEX' => 'Búsqueda de texto completo Sistema de Índice', + 'LBL_RUNMASSEMAILCAMPAIGN' => 'Ejecutar Campañas de Correo Masivo Nocturnas', + 'LBL_POLLMONITOREDINBOXESFORBOUNCEDCAMPAIGNEMAILS' => 'Ejecutar Proceso Nocturno de Correos Rebotados en Campañas', + 'LBL_PRUNEDATABASE' => 'Truncar Base de Datos el 1º de cada Mes', + 'LBL_TRIMTRACKER' => 'Truncar Tablas de Monitorización', + 'LBL_SENDEMAILREMINDERS' => 'Ejecutar recordatorios por correo electrónico', + 'LBL_CLEANJOBQUEUE' => 'Liberador de la Cola de Trabajos', + 'LBL_REMOVEDOCUMENTSFROMFS' => 'Extracción de documentos del sistema de archivos', +); \ No newline at end of file diff --git a/modules/SchedulersJobs/language/es_es.lang.php b/modules/SchedulersJobs/language/es_es.lang.php new file mode 100644 index 00000000000..71e7b0227c6 --- /dev/null +++ b/modules/SchedulersJobs/language/es_es.lang.php @@ -0,0 +1,73 @@ + 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Usuario', + 'LBL_NAME' => 'Nombre de tarea', + 'LBL_EXECUTE_TIME' => 'Hora de Ejecución', + 'LBL_SCHEDULER_ID' => 'Planificador', + 'LBL_STATUS' => 'Estado de tarea', + 'LBL_RESOLUTION' => 'Resolución', + 'LBL_MESSAGE' => 'Mensajes', + 'LBL_DATA' => 'Fecha de tarea', + 'LBL_REQUEUE' => 'Vuelver a intentar en caso de fallo', + 'LBL_RETRY_COUNT' => 'Intentos máximos', + 'LBL_FAIL_COUNT' => 'Fallos', + 'LBL_INTERVAL' => 'Intervalo mínimo entre intentos', + 'LBL_CLIENT' => 'Ser propietario de cliente', + 'LBL_PERCENT' => 'Porcentaje completado', + 'ERR_CALL' => 'No se puede llamar a la función: %s', + 'ERR_CURL' => 'No CURL - no se puede ejecutar trabajos de URL', + 'ERR_FAILED' => 'Error inesperado, por favor, consulte los registros de PHP y sugarcrm.log', + 'ERR_PHP' => '%s [%d]: %s en %s on line %d', + 'ERR_NOUSER' => 'No ID de usuario especificado para el trabajo', + 'ERR_NOSUCHUSER' => 'ID %s de usuario no encontrado', + 'ERR_JOBTYPE' => 'Tipo de tarea desconocido: %s', + 'ERR_TIMEOUT' => 'Fracaso forzoso por tiempo de espera', + 'ERR_JOB_FAILED_VERBOSE' => 'Tarea %1$s (%2$s) fallo en la ejecución del CRON', +); \ No newline at end of file diff --git a/modules/Studio/language/es_es.lang.php b/modules/Studio/language/es_es.lang.php new file mode 100644 index 00000000000..7cd47a7a1f6 --- /dev/null +++ b/modules/Studio/language/es_es.lang.php @@ -0,0 +1,174 @@ + 'Editar Diseño', + 'LBL_EDIT_ROWS' => 'Editar Filas', + 'LBL_EDIT_COLUMNS' => 'Editar Columnas', + 'LBL_EDIT_LABELS' => 'Editar Etiquetas', + 'LBL_EDIT_FIELDS' => 'Editar Campos Personalizados', + 'LBL_ADD_FIELDS' => 'Agregar Campos Personalizados', + 'LBL_DISPLAY_HTML' => 'Mostrar Código HTML', + 'LBL_SELECT_FILE' => 'Seleccionar Archivo', + 'LBL_SAVE_LAYOUT' => 'Guardar Diseño', + 'LBL_SELECT_A_SUBPANEL' => 'Seleccionar un Subpanel', + 'LBL_SELECT_SUBPANEL' => 'Seleccionar Subpanel', + 'LBL_MODULE_TITLE' => 'Estudio', + 'LBL_TOOLBOX' => 'Caja de Herramientas', + 'LBL_STAGING_AREA' => 'Área de Diseño (arrastre y suelte elementos aquí)', + 'LBL_SUGAR_FIELDS_STAGE' => 'Campos Sugar (haga clic en los elementos para agregarlos al área de diseño)', + 'LBL_SUGAR_BIN_STAGE' => 'Papelera Sugar (haga clic en los elementos para agregarlos al área de diseño)', + 'LBL_VIEW_SUGAR_FIELDS' => 'Ver Campos Sugar', + 'LBL_VIEW_SUGAR_BIN' => 'Ver Papelera Sugar', + 'LBL_FAILED_TO_SAVE' => 'Error al Guardar', + 'LBL_CONFIRM_UNSAVE' => 'Los cambios no se han guardado y se perderán. ¿Está seguro de que desea continuar?', + 'LBL_PUBLISHING' => 'Publicando ...', + 'LBL_PUBLISHED' => 'Publicado', + 'LBL_FAILED_PUBLISHED' => 'Error al Publicar', + 'LBL_DROP_HERE' => '[Soltar Aquí]', + 'LBL_NAME' => 'Nombre', + 'LBL_LABEL' => 'Etiqueta', + 'LBL_MASS_UPDATE' => 'Actualización Masiva', + 'LBL_AUDITED' => 'Auditado', + 'LBL_CUSTOM_MODULE' => 'Módulo', + 'LBL_DEFAULT_VALUE' => 'Valor por Defecto', + 'LBL_REQUIRED' => 'Requerido', + 'LBL_DATA_TYPE' => 'Tipo', + 'LBL_HISTORY' => 'Historial', + 'LBL_SW_WELCOME' => '

¡Bienvenido al Estudio!


¿Qué desea hacer hoy?
Por favor, seleccione una de las siguientes opciones.', + 'LBL_SW_EDIT_MODULE' => 'Editar un Módulo', + 'LBL_SW_EDIT_DROPDOWNS' => 'Editar Listas Desplegables', + 'LBL_SW_EDIT_TABS' => 'Configurar Pestañas', + 'LBL_SW_RENAME_TABS' => 'Renombrar Pestañas', + 'LBL_SW_EDIT_GROUPTABS' => 'Configurar Grupos de Pestañas', + 'LBL_SW_EDIT_PORTAL' => 'Editar Portal', + 'LBL_SW_EDIT_WORKFLOW' => 'Editar Workflow', + 'LBL_SW_REPAIR_CUSTOMFIELDS' => 'Reparar Campos Personalizados', + 'LBL_SW_MIGRATE_CUSTOMFIELDS' => 'Migrar Campos Personalizados', + 'LBL_SMW_WELCOME' => '

¡Bienvenido al Estudio!


Por favor, seleccione uno de los siguientes módulos.', + 'LBL_SMA_WELCOME' => '

Editar un Módulo

¿Qué desea hacer con ese módulo?
Por favor, seleccione la acción que desea realizar.', + 'LBL_SMA_EDIT_CUSTOMFIELDS' => 'Editar Campos Personalizados', + 'LBL_SMA_EDIT_LAYOUT' => 'Editar Diseño', + 'LBL_SMA_EDIT_LABELS' => 'Editar Etiquetas', + 'LBL_MB_PREVIEW' => 'Vista Preliminar', + 'LBL_MB_RESTORE' => 'Restaurar', + 'LBL_MB_DELETE' => 'Eliminar', + 'LBL_MB_COMPARE' => 'Comparar', + 'LBL_MB_WELCOME' => '

Historial


El Historial le permite ver ediciones publicadas anteriormente del fichero con el que actualmente está trabajando. Puede comparar con y restaurar versiones previas. Si restaura un archivo, éste se convertirá en su archivo de trabajo. Debe publicarlo antes de que sea visible para cualquier otra persona.
¿Qué desea hacer hoy?
Por favor, seleccione una de las siguientes opciones.', + 'LBL_ED_CREATE_DROPDOWN' => 'Crea una Lista Desplegable', + 'LBL_ED_WELCOME' => '

Editor de Listas Desplegables


Puede editar una lista desplegable existente, o crear una nueva.', + 'LBL_DROPDOWN_NAME' => 'Nombre de Lista Desplegable:', + 'LBL_DROPDOWN_LANGUAGE' => 'Idioma de Lista Desplegable:', + 'LBL_TABGROUP_LANGUAGE' => 'Idioma:', + 'LBL_EC_WELCOME' => '

Editor de Campos Personalizados


Puede ver o editar un campo personalizado existente, crear un nuevo campo personalizado, o limpiar la caché de campos personalizados.', + 'LBL_EC_VIEW_CUSTOMFIELDS' => 'Ver Campos Personalizados', + 'LBL_EC_CREATE_CUSTOMFIELD' => 'Crear Campo Personalizado', + 'LBL_EC_CLEAR_CACHE' => 'Limpiar Caché', + 'LBL_SM_WELCOME' => '

Historial


Por favor, seleccione el archivo que desea visualizar.', + 'LBL_DD_DISPALYVALUE' => 'Valor de Visualización', + 'LBL_DD_DATABASEVALUE' => 'Valor de Base de datos', + 'LBL_DD_ALL' => 'Todo', + 'LBL_BTN_SAVE' => 'Guardar', + 'LBL_BTN_CANCEL' => 'Cancelar', + 'LBL_BTN_SAVEPUBLISH' => 'Guardar y Publicar', + 'LBL_BTN_HISTORY' => 'Historial', + 'LBL_BTN_NEXT' => 'Siguiente', + 'LBL_BTN_BACK' => 'Atrás', + 'LBL_BTN_ADDCOLS' => 'Agregar Columnas', + 'LBL_BTN_ADDROWS' => 'Agregar Filas', + 'LBL_BTN_UNDO' => 'Deshacer', + 'LBL_BTN_REDO' => 'Repetir', + 'LBL_BTN_ADDCUSTOMFIELD' => 'Agregar Campo Personalizado', + 'LBL_BTN_TABINDEX' => 'Editar Orden de Pestañas', + 'LBL_TAB_SUBTABS' => 'Subpestañas', + 'LBL_MODULES' => 'Módulos', + 'LBL_MODULE_NAME' => 'Administración', + 'LBL_CONFIGURE_GROUP_TABS' => 'Configurar Agrupación de Módulos', + 'LBL_GROUP_TAB_WELCOME' => 'Los siguientes grupos se mostrarán en la barra de navegación a los usuarios que elijan ver Módulos Agrupados. Arrastre y suele módulos a y desde los Grupos para configurar qué módulos aparecen bajo los grupos. Nota: Los grupos vacíos no serán mostrados en la barra de navegación.', + 'LBL_RENAME_TAB_WELCOME' => 'Haga clic en el Valor de Visualización de cualquier pestaña de la siguiente tabla para renombrar la pestaña.', + 'LBL_DELETE_MODULE' => 'Quitar Módulo
Del Grupo', + 'LBL_DISPLAY_OTHER_TAB_HELP' => 'Seleccione mostrar la pestaña "Otros" en la barra de navegación. Por defecto, la pestaña "Otros" muestra aquellos módulos que aún no se han incluido en otros grupos.', + 'LBL_TAB_GROUP_LANGUAGE_HELP' => 'Seleccione uno de los idiomas disponibles, edite las etiquetas del Grupo y haga clic en Guardar y Desplegar para aplicar las etiquetas en el idioma deseado.', + 'LBL_ADD_GROUP' => 'Agregar Grupo', + 'LBL_NEW_GROUP' => 'Nuevo Grupo', + 'LBL_RENAME_TABS' => 'Renombrar Pestañas', + 'LBL_DISPLAY_OTHER_TAB' => 'Mostrar Pestaña 'Otros'', + 'LBL_DEFAULT' => 'Por defecto', + 'LBL_ADDITIONAL' => 'Adicional', + 'LBL_AVAILABLE' => 'Disponible', + 'LBL_LISTVIEW_DESCRIPTION' => 'A continuación se muestran tres columnas. La columna "Por defecto" contiene los campos que se muestran en una lista por defecto, la columna "Adicional" contiene campos que un usuario puede elegir a la hora de crear una vista personalizada, y la columna "Disponible" muestra columnas disponibles para usted como administrador para, o bien añadirlas a las columnas por defecto, o a las adicionales para que sean usadas por usuarios ya que actualmente no están siendo utilizadas.', + 'LBL_LISTVIEW_EDIT' => 'Editor de Listas', + 'ERROR_ALREADY_EXISTS' => 'Error: Campo Ya Existente', + 'ERROR_INVALID_KEY_VALUE' => 'Error: Valor de Clave No válido: [']', + 'LBL_SW_SUGARPORTAL' => 'Portal de Sugar', + 'LBL_SMP_WELCOME' => 'Por favor, seleccione el módulo que desea editar de la siguiente lista', + 'LBL_SP_WELCOME' => 'Bienvenido al Estudio para el Portal de Sugar. Puede elegir editar módulos aquí, o realizar una sincronización con una instancia de portal.
Por favor, selecciónelo de la siguiente lista.', + 'LBL_SP_SYNC' => 'Sincronización de Portal', + 'LBL_SYNCP_WELCOME' => 'Por favor, introduzca el URL de la instancia de portal que desea actualizar y haga clic en el botón Ir.
Tras esto, se le pedirá su nombre y contraseña.
Por favor, introduzca su nombre y contraseña de Sugar y haga clic en el botón Iniciar Sincronización.', + 'LBL_LISTVIEWP_DESCRIPTION' => 'Tiene dos columnas a continuación: Por defecto, que incluye los campos que se mostrarán, y Disponible, que incluye los campos que no se mostrarán, pero que están disponibles para ser mostrados. Simplemente tiene que arrastrar los campos entre ambas columnas. También puede cambiar el orden de los elementos en una columna arrastrándolos y soltándolos.', + 'LBL_SP_STYLESHEET' => 'Subir una Hoja de Estilo', + 'LBL_SP_UPLOADSTYLE' => 'Haga clic en el botón de exploración y seleccione la hoja de estilo que desea subir de su ordenador.
La próxima vez que realice una sincronización al portal, se incluirá la hoja de estilos.', + 'LBL_SP_UPLOADED' => 'Subido', + 'ERROR_SP_UPLOADED' => 'Por favor, asegúrese de que está subiendo una hoja de estilos CSS.', + 'LBL_SP_PREVIEW' => 'Aquí tiene una presentación preliminar de la apariencia que tendrá su hoja de estilos', + 'LBL_SAVE' => 'Guardar', + 'LBL_UNDO' => 'Deshacer', + 'LBL_REDO' => 'Repetir', + 'LBL_INLINE' => 'Inline', + 'LBL_DELETE' => 'Eliminar', + 'LBL_ADD_FIELD' => 'Agregar Campo:', + 'LBL_MAXIMIZE' => 'Maximizar', + 'LBL_MINIMIZE' => 'Minimizar', + 'LBL_PUBLISH' => 'Publicar', + 'LBL_ADDROWS' => 'Agregar Filas', + 'LBL_ADDFIELD' => 'Agregar Campo:', + 'LBL_EDIT' => 'Editar', + 'LBL_LANGUAGE_TOOLTIP' => 'Seleccione el idioma que desea editar.', + 'LBL_SINGULAR' => 'Etiqueta en Singular', + 'LBL_PLURAL' => 'Etiqueta en Plural', + 'LBL_RENAME_MOD_SAVE_HELP' => 'Pulse en Guardar para aplicar los cambios.', +); \ No newline at end of file diff --git a/modules/SugarFeed/language/es_es.lang.php b/modules/SugarFeed/language/es_es.lang.php new file mode 100644 index 00000000000..528bfea00e0 --- /dev/null +++ b/modules/SugarFeed/language/es_es.lang.php @@ -0,0 +1,135 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por ID', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Id Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_TEAM' => 'Equipo', + 'LBL_TEAM_ID' => 'Id de Equipo', + 'LBL_SAVING' => 'Guardando...', + 'LBL_SAVED' => 'Guardado', + 'LBL_LIST_FORM_TITLE' => 'Lista Feed', + 'LBL_MODULE_NAME' => 'Flujos de Actividad', + 'LBL_MODULE_TITLE' => 'Flujos de Actividad', + 'LBL_DASHLET_DISABLED' => 'Aviso: El sistema Sugar Feed está deshabilitado, no se enviarán nuevas entradas de feeds hasta que sea activado', + 'LBL_ADMIN_SETTINGS' => 'Configuración de Sugar Feed', + 'LBL_RECORDS_DELETED' => 'Todas las entradas anteriores de Sugar Feed han sido eliminadas, si el sistema Sugar Feed está habilitado, se generarán nuevas entradas automáticamente.', + 'LBL_CONFIRM_DELETE_RECORDS' => '¿Está seguro de que desea eliminar todas las entradas de Sugar Feed?', + 'LBL_FLUSH_RECORDS' => 'Eliminar Entradas de Feed', + 'LBL_ENABLE_FEED' => 'Habilitar Dashlet Mi Flujo de Actividad', + 'LBL_ENABLE_MODULE_LIST' => 'Activar Feeds Para', + 'LBL_HOMEPAGE_TITLE' => 'Mi Flujo de Actividad', + 'LNK_NEW_RECORD' => 'Crear Sugar Feed', + 'LNK_LIST' => 'Sugar Feed', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Sugar Feed', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_SUGAR_FEED_SUBPANEL_TITLE' => 'Sugar Feed', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Sugar Feed', + 'LBL_ALL' => 'Todo', + 'LBL_USER_FEED' => 'Feed de Usuario', + 'LBL_ENABLE_USER_FEED' => 'Activar Feed de Usuario', + 'LBL_TO' => 'Enviar A Equipo', + 'LBL_IS' => 'es', + 'LBL_DONE' => 'Hecho', + 'LBL_TITLE' => 'Título', + 'LBL_ROWS' => 'Filas', + 'LBL_CATEGORIES' => 'Módulos', + 'LBL_TIME_LAST_WEEK' => 'Última Semana', + 'LBL_TIME_WEEKS' => 'Semanas', + 'LBL_TIME_DAYS' => 'Días', + 'LBL_TIME_YESTERDAY' => 'Ayer', + 'LBL_TIME_HOURS' => 'Horas', + 'LBL_TIME_HOUR' => 'Horas', + 'LBL_TIME_MINUTES' => 'Minutos', + 'LBL_TIME_MINUTE' => 'Minuto', + 'LBL_TIME_SECONDS' => 'Segundos', + 'LBL_TIME_SECOND' => 'Segundo', + 'LBL_TIME_AGO' => 'hace', + 'CREATED_CONTACT' => 'creado un NUEVO contacto', + 'CREATED_OPPORTUNITY' => 'creada una NUEVA oportunidad', + 'CREATED_CASE' => 'creado un NUEVO caso', + 'CREATED_LEAD' => 'creado un NUEVO cliente potencial', + 'FOR' => 'para', + 'CLOSED_CASE' => 'CERRADO un caso', + 'CONVERTED_LEAD' => 'CONVERTIDO un cliente potencial', + 'WON_OPPORTUNITY' => 'ha GANADO una oportunidad', + 'WITH' => 'con', + 'LBL_LINK_TYPE_Link' => 'Enlace', + 'LBL_LINK_TYPE_Image' => 'Imagen', + 'LBL_LINK_TYPE_YouTube' => 'YouTube™', + 'LBL_SELECT' => 'Seleccionar', + 'LBL_POST' => 'Enviar', + 'LBL_EXTERNAL_PREFIX' => 'Externo:', + 'LBL_EXTERNAL_WARNING' => 'Productos etiquetados como "externos" requieren una cuenta externa.', + 'LBL_AUTHENTICATE' => 'Conectar a', + 'LBL_AUTHENTICATION_PENDING' => 'No todas las cuentas externas que ha seleccionado han sido autenticadas. Haga click en 'Cancelar' para regresar a la ventana de Opciones para autenticar las cuentas externas, o haga click en 'Ok' para no autenticar las cuentas.', + 'LBL_ADVANCED_SEARCH' => 'Búsqueda Avanzada', + 'LBL_BASICSEARCH' => 'Búsqueda Básica', + 'LBL_SHOW_MORE_OPTIONS' => 'Mostrar Más Opciones', + 'LBL_HIDE_OPTIONS' => 'Ocultar Opciones', + 'LBL_VIEW' => 'Ver', + 'LBL_POST_TITLE' => 'Publicar Estado Actualizado para', + 'LBL_URL_LINK_TITLE' => 'Link URL a utilizar', + 'LBL_TEAM_VISIBILITY_TITLE' => 'equipo que puede visualizar esta entrada', +); \ No newline at end of file diff --git a/modules/Tasks/language/es_es.lang.php b/modules/Tasks/language/es_es.lang.php new file mode 100644 index 00000000000..d3a39eacc07 --- /dev/null +++ b/modules/Tasks/language/es_es.lang.php @@ -0,0 +1,135 @@ + 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Última Modificación', + 'LBL_MODIFIED' => 'Modificado Por', + 'LBL_MODIFIED_ID' => 'Modificado Por Id', + 'LBL_MODIFIED_NAME' => 'Modificado Por Nombre', + 'LBL_CREATED' => 'Creado Por', + 'LBL_CREATED_ID' => 'Creado Por Id', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre:', + 'LBL_CREATED_USER' => 'Creado Por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado Por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Quitar', + 'LBL_ASSIGNED_TO_ID' => 'Asignado a Usuario con Id', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a:', + 'LBL_MODULE_NAME' => 'Tareas', + 'LBL_TASK' => 'Tareas:', + 'LBL_MODULE_TITLE' => 'Tareas: Inicio', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Tareas', + 'LBL_LIST_FORM_TITLE' => 'Lista de Tareas', + 'LBL_NEW_FORM_TITLE' => 'Nueva Tarea', + 'LBL_NEW_FORM_SUBJECT' => 'Asunto:', + 'LBL_NEW_FORM_DUE_DATE' => 'Fecha Vencimiento:', + 'LBL_NEW_FORM_DUE_TIME' => 'Hora Vencimiento:', + 'LBL_NEW_TIME_FORMAT' => '(24:00)', + 'LBL_LIST_CLOSE' => 'Cerrar', + 'LBL_LIST_SUBJECT' => 'Asunto', + 'LBL_LIST_CONTACT' => 'Contacto', + 'LBL_LIST_PRIORITY' => 'Prioridad', + 'LBL_LIST_RELATED_TO' => 'Relacionado con', + 'LBL_LIST_DUE_DATE' => 'Fecha Vencimiento', + 'LBL_LIST_DUE_TIME' => 'Hora Vencimiento', + 'LBL_SUBJECT' => 'Asunto:', + 'LBL_STATUS' => 'Estado:', + 'LBL_DUE_DATE' => 'Fecha vencimiento:', + 'LBL_DUE_TIME' => 'Hora vencimiento:', + 'LBL_PRIORITY' => 'Prioridad:', + 'LBL_COLON' => ':', + 'LBL_DUE_DATE_AND_TIME' => 'Fecha y hora de vencimiento:', + 'LBL_START_DATE_AND_TIME' => 'Fecha y hora de inicio:', + 'LBL_START_DATE' => 'Fecha de inicio:', + 'LBL_LIST_START_DATE' => 'Fecha de inicio', + 'LBL_START_TIME' => 'Hora de inicio:', + 'LBL_LIST_START_TIME' => 'Hora de inicio', + 'DATE_FORMAT' => '(yyyy-mm-dd)', + 'LBL_NONE' => 'Ninguno', + 'LBL_CONTACT' => 'Contacto:', + 'LBL_EMAIL_ADDRESS' => 'Dirección de Correo:', + 'LBL_PHONE' => 'Teléfono:', + 'LBL_EMAIL' => 'Correo electrónico:', + 'LBL_DESCRIPTION_INFORMATION' => 'Información adicional', + 'LBL_CONTACT_NAME' => 'Contacto', + 'LBL_LIST_COMPLETE' => 'Completo:', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_DATE_DUE_FLAG' => 'Sin fecha de vencimiento', + 'LBL_DATE_START_FLAG' => 'Sin fecha de inicio', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro para eliminar el contacto.', + 'ERR_INVALID_HOUR' => 'Por favor, introduzca una hora entre 0 y 24', + 'LBL_DEFAULT_PRIORITY' => 'Media', + 'LBL_LIST_MY_TASKS' => 'Mis Tareas Abiertas', + 'LNK_NEW_TASK' => 'Nueva Tarea', + 'LNK_TASK_LIST' => 'Ver Tareas', + 'LNK_IMPORT_TASKS' => 'Importar Tareas', + 'LBL_CONTACT_FIRST_NAME' => 'Nombre del Contacto', + 'LBL_CONTACT_LAST_NAME' => 'Apellido del Contacto', + 'LBL_LIST_ASSIGNED_TO_NAME' => 'Usuario Asignado', + 'LBL_LIST_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_CONTACT_ID' => 'ID de Contacto:', + 'LBL_PARENT_ID' => 'ID de Padre:', + 'LBL_CONTACT_PHONE' => 'Teléfono de Contacto:', + 'LBL_PARENT_NAME' => 'Tipo de Padre:', + 'LBL_ACTIVITIES_REPORTS' => 'Informe de Actividad', + 'LBL_TASK_INFORMATION' => 'Visión General', + 'LBL_EDITLAYOUT' => 'Editar diseño', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Notas', + 'LBL_DATE_DUE' => 'Fecha vencimiento', + 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Usuario asignado', + 'LBL_EXPORT_ASSIGNED_USER_ID' => 'ID usuario asignado', + 'LBL_EXPORT_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_EXPORT_PARENT_TYPE' => 'Relacionado con el módulo', + 'LBL_EXPORT_PARENT_ID' => 'Relacionado con el ID', + 'LBL_RELATED_TO' => 'Relacionado con:', +); \ No newline at end of file diff --git a/modules/Trackers/language/es_es.lang.php b/modules/Trackers/language/es_es.lang.php new file mode 100644 index 00000000000..5c480357b03 --- /dev/null +++ b/modules/Trackers/language/es_es.lang.php @@ -0,0 +1,88 @@ + 'Mostrar Usuarios Activos', + 'ShowLastModifiedRecords' => 'Últimos 10 Registros Modificados', + 'ShowTopUser' => 'Usuario Más Activo', + 'ShowMyModuleUsage' => 'Mi Uso de Módulos', + 'ShowMyWeeklyActivities' => 'Mi Actividad Semanal', + 'ShowTop3ModulesUsed' => 'Mis 3 Módulos Más Usados', + 'ShowLoggedInUserCount' => 'Número de Usuarios Activos', + 'ShowMyCumulativeLoggedInTime' => 'Mi Tiempo de Sesión Acumulado (Esta Semana)', + 'ShowUsersCumulativeLoggedInTime' => 'Tiempo de Sesión Acumulado de Todos los Usuarios (Esta Semana)', + 'action' => 'Acción', + 'active_users' => 'Número de Usuarios Activos', + 'date_modified' => 'Fecha de Última Acción', + 'different_modules_accessed' => 'Número de Módulos Accedidos', + 'first_name' => 'Nombre', + 'item_id' => 'ID', + 'item_summary' => 'Nombre', + 'last_action' => 'Fecha/Hora de Última Acción', + 'last_name' => 'Apellido', + 'module_name' => 'Nombre de Módulo', + 'records_modified' => 'Total de Registros Modificados', + 'top_module' => 'Módulos Más Accedidos', + 'total_count' => 'Total de Visitas a Páginas', + 'total_login_time' => 'Hora (hh:mm:ss)', + 'user_name' => 'Nombre de usuario', + 'users' => 'Usuarios', + 'LBL_ENABLE' => 'Habilitado', + 'LBL_MODULE_NAME_TITLE' => 'Monitorizaciones', + 'LBL_MODULE_NAME' => 'Monitorizaciones', + 'LBL_TRACKER_SETTINGS' => 'Configuración de Monitorización', + 'LBL_TRACKER_QUERIES_DESC' => 'Consultas de Monitorización', + 'LBL_TRACKER_QUERIES_HELP' => 'Monitorizar sentencias SQL cuando "Registrar consultas lentas" esté habilitado y el tiempo de ejecución de la consulta exceda el valor del "Tiempo umbral para consultas lentas"', + 'LBL_TRACKER_PERF_DESC' => 'Rendimiento de Monitorización', + 'LBL_TRACKER_PERF_HELP' => 'Monitorizar accesos a base de datos, archivos accedidos y utilización de memoria', + 'LBL_TRACKER_SESSIONS_DESC' => 'Sesiones de Monitorización', + 'LBL_TRACKER_SESSIONS_HELP' => 'Monitorizar usuarios activos e información de la sesión de los usuarios', + 'LBL_TRACKER_DESC' => 'Acciones de Monitorización', + 'LBL_TRACKER_HELP' => 'Monitorizar visitas de los usuarios a páginas (módulos y registros accedidos) y registros guardados', + 'LBL_TRACKER_PRUNE_INTERVAL' => 'Número de días de datos de Monitorización a guardar cuando el Planificador compacte las tablas', + 'LBL_TRACKER_PRUNE_RANGE' => 'Número de días', +); \ No newline at end of file diff --git a/modules/UpgradeWizard/language/es_es.lang.php b/modules/UpgradeWizard/language/es_es.lang.php new file mode 100644 index 00000000000..4f6e50408f6 --- /dev/null +++ b/modules/UpgradeWizard/language/es_es.lang.php @@ -0,0 +1,297 @@ + 'Los siguientes módulos han sido instalados:', + 'DESC_MODULES_QUEUED' => 'Los siguientes módulos están listos para ser instalados:', + 'ERR_UW_CANNOT_DETERMINE_GROUP' => 'No se ha podido determinar el Grupo', + 'ERR_UW_CANNOT_DETERMINE_USER' => 'No se ha podido determinar el Propietario', + 'ERR_UW_CONFIG_WRITE' => 'Error al actualizar config.php con la información de la nueva versión.', + 'ERR_UW_CONFIG' => 'Por favor, habilite los permisos de escritura para su archivo config.php, y recargue esta página.', + 'ERR_UW_DIR_NOT_WRITABLE' => 'Directorio no escribible/editable', + 'ERR_UW_FILE_NOT_COPIED' => 'Archivo no copiado', + 'ERR_UW_FILE_NOT_DELETED' => 'Problema al quitar el paquete', + 'ERR_UW_FILE_NOT_READABLE' => 'El archivo no ha podido ser leído.', + 'ERR_UW_FILE_NOT_WRITABLE' => 'El archivo no ha podido ser movido o escrito/editado', + 'ERR_UW_FLAVOR_2' => 'Edición de la Actualización:', + 'ERR_UW_FLAVOR' => 'Edición del Sistema SugarCRM:', + 'ERR_UW_LOG_FILE_UNWRITABLE' => './upgradeWizard.log no ha podido ser creado/escrito. Por favor, corrija los permisos en su directorio de SugarCRM.', + 'ERR_UW_MBSTRING_FUNC_OVERLOAD' => 'mbstring.func_overload está establecido a un valor mayor que 1. Por favor, cambie esto en su archivo php.ini y reinicie su servidor web.', + 'ERR_UW_MYSQL_VERSION' => 'SugarCRM requiere MySQL versión 4.1.2 o mayor. Encontrada:', + 'ERR_UW_OCI8_VERSION' => 'La versión de Oracle no está soportada por Sugar. Necesitará instalar una versión que sea compatible con el sistema Sugar. Por favor consulte la Matriz de Compatibilidad en las Notas sobre la Versión para Versiones soportadas de Oracle. Actual versión:', + 'ERR_UW_NO_FILE_UPLOADED' => '¡Por favor, especifique un archivo e inténtelo de nuevo!', + 'ERR_UW_NO_FILES' => 'Ha ocurrido un error, no se han encontrado archivos para comprobar.', + 'ERR_UW_NO_MANIFEST' => 'El archivo zip no contiene un archivo manifest.php. No se puede continuar.', + 'ERR_UW_NO_VIEW' => 'La vista especificada no es válida.', + 'ERR_UW_NO_VIEW2' => 'La vista no ha sido definida. Por favor, vaya al inicio de Administración para navegar a esta página.', + 'ERR_UW_NOT_VALID_UPLOAD' => 'No es una subida de fichero válida.', + 'ERR_UW_NO_CREATE_TMP_DIR' => 'No ha podido crearse el directorio temporal. Compruebe los permisos de ficheros.', + 'ERR_UW_ONLY_PATCHES' => 'Sólo puede subir parches en esta página.', + 'ERR_UW_PREFLIGHT_ERRORS' => 'Se han encontrado errores durante la comprobación previa', + 'ERR_UW_UPLOAD_ERR' => '¡Ha ocurrido un error al subir el archivo, por favor inténtelo de nuevo!
\\n', + 'ERR_UW_VERSION' => 'Versión del Sistema SugarCRM:', + 'ERR_UW_WRONG_TYPE' => 'Esta página no es para ejecutar', + 'ERR_UW_PHP_FILE_ERRORS' => + array ( + 1 => 'El archivo subido excede el límite definido por la directiva upload_max_filesize en php.ini.', + 2 => 'El archivo subido excede el límite definido por la directiva MAX_FILE_SIZE especificada en el formulario HTML.', + 3 => 'El archivo ha sido sólo parcialmente subido.', + 4 => 'No se ha subido ningún archivo.', + 5 => 'Error desconocido.', + 6 => 'Falta una carpeta temporal.', + 7 => 'Error al escribir el archivo.', + 8 => 'El archivo subido ha sido bloqueado por su extensión.', + ), + 'LBL_BUTTON_BACK' => '< Atrás', + 'LBL_BUTTON_CANCEL' => 'Cancelar', + 'LBL_BUTTON_DELETE' => 'Eliminar Paquete', + 'LBL_BUTTON_DONE' => 'Hecho', + 'LBL_BUTTON_EXIT' => 'Salir', + 'LBL_BUTTON_INSTALL' => 'Inspección para Actualización', + 'LBL_BUTTON_NEXT' => 'Siguiente>', + 'LBL_BUTTON_RECHECK' => 'Comprobar de nuevo', + 'LBL_BUTTON_RESTART' => 'Reiniciar', + 'LBL_UPLOAD_UPGRADE' => 'Subir un Paquete de Actualización', + 'LBL_UPLOAD_FILE_NOT_FOUND' => 'Archivo de subida no encontrado', + 'LBL_UW_BACKUP_FILES_EXIST_TITLE' => 'Copia de seguridad', + 'LBL_UW_BACKUP_FILES_EXIST' => 'La copia de seguridad de los archivos de esta actualización pueden encontrarse en', + 'LBL_UW_BACKUP' => 'Copia de seguridad', + 'LBL_UW_CANCEL_DESC' => 'La actualización ha sido cancelada. Los archivos temporales copiados y los archivos de actualización subidos han sido eliminados.', + 'LBL_UW_CHARSET_SCHEMA_CHANGE' => 'Cambios de Juego de Caracteres en el Esquema', + 'LBL_UW_CHECK_ALL' => 'Comprobar Todo', + 'LBL_UW_CHECKLIST' => 'Pasos de la Actualización', + 'LBL_UW_COMMIT_ADD_TASK_DESC_1' => 'Las copias de seguridad de todos los archivos sobrescritos están en el siguiente directorio:', + 'LBL_UW_COMMIT_ADD_TASK_DESC_2' => 'Combinar manualmente los siguientes archivos:', + 'LBL_UW_COMMIT_ADD_TASK_NAME' => 'Proceso de Actualización: Combinar Manualmente Archivos', + 'LBL_UW_COMMIT_ADD_TASK_OVERVIEW' => 'Por favor, utilice cualquier el método diff que le sea más familiar para combinar estos archivos. Hasta que no haya completado este proceso, su instalación de SugarCRM estará en un estado incierto, y la actualización incompleta.', + 'LBL_UW_COMPLETE' => 'Completado', + 'LBL_UW_CONTINUE_CONFIRMATION' => 'Esta versión de Sugar contiene un nuevo acuerdo de licencia. ¿Desea continuar?', + 'LBL_UW_COMPLIANCE_ALL_OK' => 'Todos los Requerimientos del Sistema han sido Satisfechos', + 'LBL_UW_COMPLIANCE_CALLTIME' => 'Configuración de PHP: Paso por Referencia en Tiempo de LLamada', + 'LBL_UW_COMPLIANCE_CURL' => 'Módulo cURL', + 'LBL_UW_COMPLIANCE_IMAP' => 'Módulo IMAP', + 'LBL_UW_COMPLIANCE_MBSTRING' => 'Módulo MBStrings', + 'LBL_UW_COMPLIANCE_MBSTRING_FUNC_OVERLOAD' => 'Parámetro mbstring.func_overload de MBStrings', + 'LBL_UW_COMPLIANCE_MEMORY' => 'Configuración de PHP: Límite de Memoria', + 'LBL_UW_COMPLIANCE_STREAM' => 'Configuración PHP: Stream', + 'LBL_UW_COMPLIANCE_MSSQL_MAGIC_QUOTES' => 'MS SQL Server y PHP Magic Quotes GPC', + 'LBL_UW_COMPLIANCE_MYSQL' => 'Versión Mínima de MySQL', + 'LBL_UW_COMPLIANCE_DB' => 'Versión minima de Base de Datos', + 'LBL_UW_COMPLIANCE_PHP_INI' => 'Ruta de php.ini', + 'LBL_UW_COMPLIANCE_PHP_VERSION' => 'Versión Mínima de PHP', + 'LBL_UW_COMPLIANCE_SAFEMODE' => 'Configuración de PHP: Modo Seguro', + 'LBL_UW_COMPLIANCE_TITLE' => 'Comprobación de Configuración del Servidor', + 'LBL_UW_COMPLIANCE_TITLE2' => 'Configuración Detectada', + 'LBL_UW_COMPLIANCE_XML' => 'Análisis XML', + 'LBL_UW_COMPLIANCE_ZIPARCHIVE' => 'Soporte Zip', + 'LBL_UW_COMPLIANCE_PCRE_VERSION' => 'PCRE Version', + 'LBL_UW_COPIED_FILES_TITLE' => 'Archivos Copiados con Éxito', + 'LBL_UW_CUSTOM_TABLE_SCHEMA_CHANGE' => 'Cambios al Esquema en Tablas Personalizadas', + 'LBL_UW_DB_CHOICE1' => 'El Asistente de Actualizaciones ejecutará el SQL', + 'LBL_UW_DB_CHOICE2' => 'Consultas de SQL Lanzadas Manualmente', + 'LBL_UW_DB_INSERT_FAILED' => 'Fallo en INSERT - los resultados comparados difieren', + 'LBL_UW_DB_ISSUES_PERMS' => 'Privilegios de Base de datos', + 'LBL_UW_DB_ISSUES' => 'Problemas de Base de datos', + 'LBL_UW_DB_METHOD' => 'Método de Actualización en Base de Datos', + 'LBL_UW_DB_NO_ADD_COLUMN' => 'ALTER TABLE [table] ADD COLUMN [column]', + 'LBL_UW_DB_NO_CHANGE_COLUMN' => 'ALTER TABLE [table] CHANGE COLUMN [column]', + 'LBL_UW_DB_NO_CREATE' => 'CREATE TABLE [table]', + 'LBL_UW_DB_NO_DELETE' => 'DELETE FROM [table]', + 'LBL_UW_DB_NO_DROP_COLUMN' => 'ALTER TABLE [table] DROP COLUMN [column]', + 'LBL_UW_DB_NO_DROP_TABLE' => 'DROP TABLE [table]', + 'LBL_UW_DB_NO_ERRORS' => 'Todos los Privilegios Disponibles', + 'LBL_UW_DB_NO_INSERT' => 'INSERT INTO [table]', + 'LBL_UW_DB_NO_SELECT' => 'SELECT [x] FROM [table]', + 'LBL_UW_DB_NO_UPDATE' => 'UPDATE [table]', + 'LBL_UW_DB_PERMS' => 'Privilegio Necesario', + 'LBL_UW_DESC_MODULES_INSTALLED' => 'Los siguientes paquetes de actualización han sido instalados:', + 'LBL_UW_END_DESC' => 'El sistema ha sido actualizado.', + 'LBL_UW_END_DESC2' => 'Si ha escogido ejecutar manualmente cualquier paso como las combinaciones de archivos o las consultas SQL, por favor hágalo ahora. Su sistema estará en un estado inestable hasta que estos pasos se hayan completado.', + 'LBL_UW_END_LOGOUT_PRE' => 'La actualización se ha completado.', + 'LBL_UW_END_LOGOUT_PRE2' => 'Haga clic en Hecho para salir del Asistente de Actualizaciones.', + 'LBL_UW_END_LOGOUT' => 'Si tiene previsto aplicar cualquier otro paquete de actualización utilizando el Asistente de Actualizaciones, cierre antes la sesión e iníciela de nuevo.', + 'LBL_UW_END_LOGOUT2' => 'Cerrar sesión', + 'LBL_UW_REPAIR_INDEX' => 'Para mejoras en el rendimiento de base de datos, por favor ejecute el script de Reparación de Índices.', + 'LBL_UW_FILE_DELETED' => 'ha sido eliminado.
', + 'LBL_UW_FILE_GROUP' => 'Grupo', + 'LBL_UW_FILE_ISSUES_PERMS' => 'Permisos de Archivo', + 'LBL_UW_FILE_ISSUES' => 'Problemas con Archivos', + 'LBL_UW_FILE_NEEDS_DIFF' => 'El Archivo Requiere un Diff Manual', + 'LBL_UW_FILE_NO_ERRORS' => 'Todos los Archivos son Escribibles', + 'LBL_UW_FILE_OWNER' => 'Propietario', + 'LBL_UW_FILE_PERMS' => 'Permisos', + 'LBL_UW_FILE_UPLOADED' => 'ha sido subido', + 'LBL_UW_FILE' => 'Nombre de Archivo', + 'LBL_UW_FILES_QUEUED' => 'Los siguientes paquetes de actualización están listos para ser instalados:', + 'LBL_UW_FILES_REMOVED' => 'Los siguientes archivos serán quitados del sistema:
', + 'LBL_UW_NEXT_TO_UPLOAD' => 'Haga clic en Siguiente para subir los paquetes de actualización.', + 'LBL_UW_FROZEN' => 'Suba un paquete antes de continuar.', + 'LBL_UW_HIDE_DETAILS' => 'Ocultar Detalles', + 'LBL_UW_IN_PROGRESS' => 'En Progreso', + 'LBL_UW_INCLUDING' => 'Incluyendo', + 'LBL_UW_INCOMPLETE' => 'Incompleto', + 'LBL_UW_INSTALL' => 'INSTALACIÓN de Archivo', + 'LBL_UW_MANUAL_MERGE' => 'Combinación de Archivos', + 'LBL_UW_MODULE_READY_UNINSTALL' => 'El módulo está listo para ser desinstalado. Haga clic en "Proceder" para proceder con la desinstalación.
', + 'LBL_UW_MODULE_READY' => 'El módulo está listo para ser instalado. Haga clic en "Proceder" para proceder con la instalación.', + 'LBL_UW_NO_INSTALLED_UPGRADES' => 'No se han detectado Actualizaciones registradas.', + 'LBL_UW_NONE' => 'Ninguno', + 'LBL_UW_NOT_AVAILABLE' => 'No disponible', + 'LBL_UW_OVERWRITE_DESC' => 'Todos los archivos cambiados serán sobrescritos, incluyendo cualquier personalización al código fuente y cambios las plantillas que haya podido realizar. ¿Está seguro de que desea proceder?', + 'LBL_UW_OVERWRITE_FILES_CHOICE1' => 'Sobrescribir Todos los Archivos', + 'LBL_UW_OVERWRITE_FILES_CHOICE2' => 'Combinación Manual - Preservar Todo', + 'LBL_UW_OVERWRITE_FILES' => 'Método de Combinación', + 'LBL_UW_PATCH_READY' => 'El parche está preparado para ser procesado. Haga clic en el botón "Proceder" para completar el proceso de actualización.', + 'LBL_UW_PATCH_READY2' => '

Aviso: Se han Encontrado Diseños Personalizados


Los siguientes archivos tienen campos nuevos o diseños de pantalla modificados aplicados vía el Estudio. El parche que va a instalar también contiene cambios a los archivos. Para cada archivo puede:
  • [Por defecto] Mantener su versión dejando en blanco la casilla. Las modificaciones contenidas en el parche serán ignoradas.
  • o
  • Aceptar los archivos actualizados marcando la casilla. Sus diseños necesitarán ser aplicados de nuevo vía el Estudio.
', + 'LBL_UW_PREFLIGHT_ADD_TASK' => '¿Crear Tarea para Combinación Manual?', + 'LBL_UW_PREFLIGHT_COMPLETE' => 'Comprobaciones Previas', + 'LBL_UW_PREFLIGHT_DIFF' => 'Diferenciados', + 'LBL_UW_PREFLIGHT_EMAIL_REMINDER' => 'Enviarse a si mismo un Email Recordatorio para la Combinación Manual?', + 'LBL_UW_PREFLIGHT_FILES_DESC' => 'Los siguientes archivos han sido modificados. Desmarque los elementos que requieren una combinación manual. Los cambios de diseño detectados son desmarcados automáticamente; marque los que deberían ser sobrescritos.', + 'LBL_UW_PREFLIGHT_NO_DIFFS' => 'No se Requiere Combinación Manual de Archivos.', + 'LBL_UW_PREFLIGHT_NOT_NEEDED' => 'No es necesario.', + 'LBL_UW_PREFLIGHT_PRESERVE_FILES' => 'Archivos Auto-preservados:', + 'LBL_UW_PREFLIGHT_TESTS_PASSED' => 'Todos los tests de inspección previa han sido satisfactorios.', + 'LBL_UW_PREFLIGHT_TESTS_PASSED2' => 'Haga clic en Siguiente para copiar los archivos actualizados al sistema.', + 'LBL_UW_PREFLIGHT_TESTS_PASSED3' => 'Nota: El resto del proceso de actualización es obligatorio, y si pulsar Siguiente tendrá que completar el proceso. Si no desea continuar, haga clic en el botón Cancelar.', + 'LBL_UW_PREFLIGHT_TOGGLE_ALL' => 'Cambiar Todos los Archivos', + 'LBL_UW_REBUILD_TITLE' => 'Reconstruir Resultado', + 'LBL_UW_SCHEMA_CHANGE' => 'Cambios en el Esquema', + 'LBL_UW_SHOW_COMPLIANCE' => 'Mostrar Configuración Detectada', + 'LBL_UW_SHOW_DB_PERMS' => 'Mostrar Permisos de Base de datos que Faltan', + 'LBL_UW_SHOW_DETAILS' => 'Mostrar Detalles', + 'LBL_UW_SHOW_DIFFS' => 'Mostrar Archivos que Requieren Combinanción Manual', + 'LBL_UW_SHOW_NW_FILES' => 'Mostrar Archivos con Permisos Incorrectos', + 'LBL_UW_SHOW_SCHEMA' => 'Mostrar Script de Cambios al Esquema', + 'LBL_UW_SHOW_SQL_ERRORS' => 'Mostrar Consultas Erróneas', + 'LBL_UW_SHOW' => 'Mostrar', + 'LBL_UW_SKIPPED_FILES_TITLE' => 'Archivos Omitidos', + 'LBL_UW_SKIPPING_FILE_OVERWRITE' => 'Omitiendo Sobrescritura de Archivos - Seleccionada Combinación Manual.', + 'LBL_UW_SQL_RUN' => 'Comprobar cuando se haya ejecutado el SQL manualmente', + 'LBL_UW_START_DESC' => 'Este asistente le ayudará a actualizar esta instancia de Sugar.', + 'LBL_UW_START_DESC2' => 'Nota: Le recomendamos que haga una copia de seguridad de la base de datos de Sugar y de los archivos del sistema (todos los archivos en la carpeta SugarCRM) antes de actualizar su sistema de producción. Le recomendamos encarecidamente que antes realice una prueba de actualización en una instancia clonada de su sistema de producción.', + 'LBL_UW_START_DESC3' => 'Haga clic en Siguiente para realizar una comprobación de su sistema y asegurar que está listo para la actualización. Las comprobaciones incluyen permisos de archivos, privilegios de base de datos, y configuración del servidor.', + 'LBL_UW_START_UPGRADED_UW_DESC' => 'El nuevo Asistente de Actualizaciones continuará con el proceso de instalación. Por favor, continue con su actualización.', + 'LBL_UW_START_UPGRADED_UW_TITLE' => 'Bienvenido al nuevo Asistente de Actualizaciones', + 'LBL_UW_SYSTEM_CHECK_CHECKING' => 'Realizando comprobaciones. Espere, por favor. Esto podría tardar unos 30 segundos.', + 'LBL_UW_SYSTEM_CHECK_FILE_CHECK_START' => 'Buscando todos los archivos a comprobar.', + 'LBL_UW_SYSTEM_CHECK_FILES' => 'Archivos', + 'LBL_UW_SYSTEM_CHECK_FOUND' => 'Encontrados', + 'LBL_UW_TITLE_CANCEL' => 'Cancelar', + 'LBL_UW_TITLE_COMMIT' => 'Realizar Actualización', + 'LBL_UW_TITLE_END' => 'Informe', + 'LBL_UW_TITLE_PREFLIGHT' => 'Comprobaciones Previas', + 'LBL_UW_TITLE_START' => 'Bienvenido', + 'LBL_UW_TITLE_SYSTEM_CHECK' => 'Comprobación del Sistema', + 'LBL_UW_TITLE_UPLOAD' => 'Subir Paquete', + 'LBL_UW_TITLE' => 'Asistente de Actualizaciones', + 'LBL_UW_UNINSTALL' => 'Desinstalar', + 'LBL_UW_ACCEPT_THE_LICENSE' => 'Aceptar Licencia', + 'LBL_UW_CONVERT_THE_LICENSE' => 'Convertir Licencia', + 'LBL_UW_CUSTOMIZED_OR_UPGRADED_MODULES' => 'Módulos Actualizados/Personalizados', + 'LBL_UW_FOLLOWING_MODULES_CUSTOMIZED' => 'Se han detectado los siguientes módulos personalizados que serán preservados', + 'LBL_UW_FOLLOWING_MODULES_UPGRADED' => 'Se han detectado los siguientes módulos como personalizados usando el Estudio y serán actualizados', + 'LBL_UW_SUGAR_COMMUNITY_EDITION_LICENSE' => 'The Sugar Community Edition 5.0 uses GNU Affero General Public License version 3. This upgrade will convert your existing license to the new license displayed below.', + 'LBL_START_UPGRADE_IN_PROGRESS' => 'Inicio en progreso', + 'LBL_SYSTEM_CHECKS_IN_PROGRESS' => 'Comprobación del Sistema en Progreso', + 'LBL_LICENSE_CHECK_IN_PROGRESS' => 'Comprobación de Licencia en progreso', + 'LBL_PREFLIGHT_CHECK_IN_PROGRESS' => 'Comprobaciones Previas en Progreso', + 'LBL_PREFLIGHT_FILE_COPYING_PROGRESS' => 'Copia de Archivos en Proceso', + 'LBL_COMMIT_UPGRADE_IN_PROGRESS' => 'Realización de la Actualización en Progreso', + 'LBL_UW_COMMIT_DESC' => 'Pulse Siguiente para ejecutar "scripts" o comandos de actualización.', + 'LBL_UPGRADE_SCRIPTS_IN_PROGRESS' => 'Scripts de Actualización en Progreso', + 'LBL_UPGRADE_SUMMARY_IN_PROGRESS' => 'Resumen de la Actualización en Progreso', + 'LBL_UPGRADE_IN_PROGRESS' => 'en progreso', + 'LBL_UPGRADE_TIME_ELAPSED' => 'Tiempo transcurrido', + 'LBL_UPGRADE_CANCEL_IN_PROGRESS' => 'Cancelación de Actualización y Limpieza en Progreso', + 'LBL_UPGRADE_TAKES_TIME_HAVE_PATIENCE' => 'La actualización puede durar un rato', + 'LBL_UPLOADE_UPGRADE_IN_PROGRESS' => 'Comprobaciones de Subida en Progreso', + 'LBL_UPLOADING_UPGRADE_PACKAGE' => 'Subiendo Paquete de Actualización', + 'LBL_UW_DORP_THE_OLD_SCHMEA' => '¿Desea que Sugar elimine el esquema obsoleto de la versión 4.5.1?', + 'LBL_UW_DROP_SCHEMA_UPGRADE_WIZARD' => 'El Asistente de Actualizaciones Eliminará el antiguo esquema 4.5.1', + 'LBL_UW_DROP_SCHEMA_MANUAL' => 'Eliminación Manual del Esquema Post-instalación', + 'LBL_UW_DROP_SCHEMA_METHOD' => 'Método de Eliminación de Antiguo Esquema', + 'LBL_UW_SHOW_OLD_SCHEMA_TO_DROP' => 'Mostrar el Antiguo Esquema que sería eliminado', + 'LBL_UW_SKIPPED_QUERIES_ALREADY_EXIST' => 'Consultas Saltadas', + 'LBL_INCOMPATIBLE_PHP_VERSION' => 'Se requiere la versión de PHP 5 o superior.', + 'ERR_CHECKSYS_PHP_INVALID_VER' => 'Su versión de PHP no está soportada por Sugar. Necesitará instalar una versión que sea compatible con la aplicación Sugar. Por favor, consulte la Matriz de Compatibilidad en las Notas de Lanzamiento para información sobre las Versiones de PHP soportadas. Su versión es la', + 'LBL_BACKWARD_COMPATIBILITY_ON' => 'El modo de compatibilidad hacia atrás de PHP está habilitado. Establezca zend.ze1_compatibility_mode a Off antes de continuar', + 'LBL_ML_ACTION' => 'Acción', + 'LBL_ML_CANCEL' => 'Cancelar', + 'LBL_ML_COMMIT' => 'Proceder', + 'LBL_ML_DESCRIPTION' => 'Descripción', + 'LBL_ML_INSTALLED' => 'Fecha de Instalación', + 'LBL_ML_NAME' => 'Nombre', + 'LBL_ML_PUBLISHED' => 'Fecha de Publicación', + 'LBL_ML_TYPE' => 'Tipo', + 'LBL_ML_UNINSTALLABLE' => 'Desinstalable', + 'LBL_ML_VERSION' => 'Versión', + 'LBL_ML_INSTALL' => 'Instalar', + 'LBL_HOME_PAGE_4_NAME' => 'Monitorización', + 'LBL_CURRENT_PHP_VERSION' => '(Su versión actual de PHP es', + 'LBL_RECOMMENDED_PHP_VERSION' => '. La versión recomendada de PHP es 5.2.1 o superior)', + 'LBL_MODULE_NAME' => 'Asistente de Actualizaciones', + 'LBL_UPLOAD_SUCCESS' => 'Paquete de actualización subido con éxito. Haga clic en Siguiente para realizar una comprobación final.', + 'LBL_UW_TITLE_LAYOUTS' => 'Confirmar Diseño', + 'LBL_LAYOUT_MODULE_TITLE' => 'Diseños', + 'LBL_LAYOUT_MERGE_DESC' => 'Hay disponibles campos nuevos que se han añadido como parte de esta actualización y que pueden ser automáticamente añadidos a sus diseños de módulo actuales. Para saber más sobre los nuevos campos, consulte las Notas de Lanzamiento de esta versión a la que se está actualizando.

Si no desea añadir los nuevos campos, por favor desmarque la casilla del módulo, y sus diseños personalizados se mantendrán sin cambios. Los campos estarán disponibles en el Estudio tras la actualización.', + 'LBL_LAYOUT_MERGE_TITLE' => 'Haga clic en Siguiente para confirmar los cambios y finalizar la actualización.', + 'LBL_LAYOUT_MERGE_TITLE2' => 'Haga clic en Siguiente para completar la actualización.', + 'LBL_UW_CONFIRM_LAYOUTS' => 'Confirmar Diseños', + 'LBL_UW_CONFIRM_LAYOUT_RESULTS' => 'Resultados de la Confirmación de Diseños', + 'LBL_UW_CONFIRM_LAYOUT_RESULTS_DESC' => 'Los siguientes diseños se han combinado con éxito:', + 'LBL_SELECT_FILE' => 'Seleccionar Archivo:', + 'ERROR_VERSION_INCOMPATIBLE' => 'El archivo subido no es compatible con esta versión de Sugar:', + 'ERROR_FLAVOR_INCOMPATIBLE' => 'El archivo subido no es compatible con esta edición (Community Edition, Professional, o Enterprise) de Sugar:', + 'LBL_LANGPACKS' => 'Paquetes de Lenguaje', + 'LBL_MODULELOADER' => 'Cargador de Módulos', + 'LBL_PATCHUPGRADES' => 'Patch Upgrades', + 'LBL_THEMES' => 'Temas', + 'LBL_WORKFLOW' => 'Workflow', + 'LBL_UPGRADE' => 'Actualización:', + 'LBL_PROCESSING' => 'Procesando', +); \ No newline at end of file diff --git a/modules/Users/language/es_es.lang.php b/modules/Users/language/es_es.lang.php new file mode 100644 index 00000000000..c55aab15986 --- /dev/null +++ b/modules/Users/language/es_es.lang.php @@ -0,0 +1,532 @@ + 'Al eliminar el registro de Usuario, el registroo correspondiente de Empreado también será eliminado. Una vez el usuario ha sido eliminado, es posible que las definiciones de workflow e informes que involucren al usuario tengan que ser actualizados.

Haga clic en Aceptar para eliminar el registro de Usuario. Tras hacer clic en Aceptar, le será otorgada la capacidad de reasignar los registros asignados al usuario a otro usuario.', + 'LBL_DELETE_GROUP_CONFIRM' => '¿Está seguro de que desea eliminar este Usuario de Grupo? Haga clic en Aceptar para eliminar el registro de Usuario.
Tras Aceptar, le será otorgada la capacidad de reasignar los registros asignados del Usuario de Grupo a otro usuario.', + 'LBL_DELETE_PORTAL_CONFIRM' => '¿Está seguro de que desea eliminar este Usuario del API del Portal? Haga clic en Aceptar para eliminar el registro de Usuario.', + 'LNK_IMPORT_USERS' => 'Importar Usuarios', + 'ERR_DELETE_RECORD' => 'Debe especificar un número de registro a borrar.', + 'ERR_EMAIL_INCORRECT' => 'Proporcione una dirección de email válida para crear y enviar la contraseña.', + 'ERR_EMAIL_NO_OPTS' => 'No se ha encontrado una configuración óptima para el Correo Entrante.', + 'ERR_ENTER_CONFIRMATION_PASSWORD' => 'Por favor, introduzca su confirmación de contraseña.', + 'ERR_ENTER_NEW_PASSWORD' => 'Por favor, introduzca su nueva contraseña.', + 'ERR_ENTER_OLD_PASSWORD' => 'Por favor, introduzca su actual contraseña.', + 'ERR_IE_FAILURE1' => '[Clic aquí para volver]', + 'ERR_IE_FAILURE2' => 'Hubo un problema conectando a la Cuenta de Correo. Por favor, compruebe su configuración e inténtelo de nuevo.', + 'ERR_IE_MISSING_REQUIRED' => 'La configuración del Correo Entrante no contiene toda la información requerida.
Por favor, compruebe su configuración e inténtenlo de nuevo.

Si no ha configurado el Correo Entrante, por favor, borre los valores de todos los campos de esa sección.', + 'ERR_INVALID_PASSWORD' => 'Debe indicar un usuario y contraseña válidos.', + 'ERR_NO_LOGIN_MOBILE' => 'Su primer inicio de sesión en esta aplicación debe ser completado con un navegador que no sea móvil, o en modo normal. Por favor, vuelva a intentarlo con un navegador completo o haga clic en el enlace para el modo normal más abajo. Rogamos disculpe las molestias.', + 'ERR_LAST_ADMIN_1' => 'el nombre de usuario "', + 'ERR_LAST_ADMIN_2' => '" es el último usuario Administrador. Al menos un usuario debe ser Administrador. Revise la configuración del usuario Administrador.', + 'ERR_PASSWORD_CHANGE_FAILED_1' => 'Cambio de contraseña fallido por', + 'ERR_PASSWORD_CHANGE_FAILED_2' => 'fallido. La nueva contraseña debe ser establecida.', + 'ERR_PASSWORD_CHANGE_FAILED_3' => '. La nueva contraseña no es válida.', + 'ERR_PASSWORD_INCORRECT_OLD_1' => 'La constraseña actual es incorrecta para el usuario', + 'ERR_PASSWORD_INCORRECT_OLD_2' => '. Introdúzcala de nuevo.', + 'ERR_PASSWORD_MISMATCH' => 'Las contraseñas no coinciden.', + 'ERR_PASSWORD_USERNAME_MISSMATCH' => 'Debe especificar un Nombre de Usuario y Correo electrónico válidos.', + 'ERR_PASSWORD_LINK_EXPIRED' => 'Su enlace ha caducado, por favor genere uno nuevo', + 'ERR_REENTER_PASSWORDS' => 'Los valores de Nueva Contraseña y Confirmar Contraseña no coinciden.', + 'ERR_REPORT_LOOP' => 'El sistema ha detectado dependencias cíclicas en la jerarquía de informadores. Un usuario no puede informarse a si mismo, ni puede ninguno de sus responsables informarle a él.', + 'ERR_RULES_NOT_MET' => 'La contraseña que ha introducido no cumple con los requisitos de contraseñas. Por favor, inténtelo de nuevo.', + 'ERR_USER_INFO_NOT_FOUND' => 'Información de Usuario no encontrada', + 'ERR_USER_NAME_EXISTS_1' => 'El nombre de usuario', + 'ERR_USER_NAME_EXISTS_2' => 'ya existe. No se permiten nombres de usuario duplicados. Cambie el nombre de usuario.', + 'ERR_USER_IS_LOCKED_OUT' => 'Este usuario ha sido bloqueado en la aplicación Sugar y no puede iniciar la sesión utilizando su contraseña actual.', + 'LBL_PASSWORD_SENT' => 'Contraseña Actualizada', + 'LBL_CANNOT_SEND_PASSWORD' => 'No ha podido enviarse la contraseña', + 'ERR_EMAIL_NOT_SENT_ADMIN' => 'El sistema no puede procesar su petición. Por favor, compruebe lo siguiente:', + 'ERR_SMTP_URL_SMTP_PORT' => 'URL y Puerto del Servidor STMP', + 'ERR_SMTP_USERNAME_SMTP_PASSWORD' => 'Nombre de usuario y contraseña SMTP', + 'ERR_RECIPIENT_EMAIL' => 'Correo electrónico del Destinatario', + 'ERR_SERVER_STATUS' => 'El estado de su servidor', + 'ERR_SERVER_SMTP_EMPTY' => 'El sistema no puede enviar correo al usuario. Por favor, compruebe la Configuración de Correo Saliente en la Configuración de Correo.', + 'LBL_ADDRESS_CITY' => 'Ciudad de dirección', + 'LBL_ADDRESS_COUNTRY' => 'País de dirección', + 'LBL_ADDRESS_INFORMATION' => 'Direcciones', + 'LBL_ADDRESS_POSTALCODE' => 'CP de dirección', + 'LBL_ADDRESS_STATE' => 'Estado/Provincia de dirección', + 'LBL_ADDRESS_STREET' => 'Calle de dirección', + 'LBL_ADDRESS' => 'Dirección', + 'LBL_ADMIN_USER' => 'Usuario Administrador del Sistema', + 'LBL_ADMIN_DESC' => 'El usuario puede acceder a la página de Administración y a todos los registros, independientemente de la seguridad de equipos.', + 'LBL_REGULAR_DESC' => 'El usuario puede acceder a módulos y registros en base a la seguridad de equipos y roles.', + 'LBL_ADMIN' => 'Administrador del Sistema', + 'LBL_ADVANCED' => 'Avanzado', + 'LBL_ANY_ADDRESS' => 'Otra Dirección:', + 'LBL_ANY_EMAIL' => 'Cualquier Correo', + 'LBL_ANY_PHONE' => 'Otro teléfono', + 'LBL_BUTTON_CREATE' => 'Crear', + 'LBL_BUTTON_EDIT' => 'Editar', + 'LBL_CALENDAR_OPTIONS' => 'Opciones del Calendario', + 'LBL_CHANGE_PASSWORD' => 'Cambiar Contraseña Generada', + 'LBL_CHANGE_SYSTEM_PASSWORD' => 'Por favor, proporcione una nueva contraseña.', + 'LBL_CHANGE_PASSWORD_TITLE' => 'Contraseña', + 'LBL_CHOOSE_A_KEY' => 'Establezca una clave para evitar la publicación no autorizada de su calendario', + 'LBL_NO_KEY' => 'La clave no está establecida. Por favor introduzca la clave para habilitar la publicación.', + 'LBL_CHOOSE_WHICH' => 'Seleccionar las pestañas a mostrar', + 'LBL_CITY' => 'Ciudad', + 'LBL_CLEAR_BUTTON_TITLE' => 'Limpiar', + 'LBL_CONFIRM_PASSWORD' => 'Confirmar contraseña', + 'LBL_CONFIRM_REGULAR_USER' => 'Ha cambiado el tipo de usuario de Usuario Administrador del Sistema a Usuario Normal. Tras guardar este cambio, el usuario ya no tendrá privilegios de administrador del sistema.\\n\\nHaga clic en Aceptar para proceder.\\nHaga clic en Cancelar para volver al registro.', + 'LBL_COUNTRY' => 'País', + 'LBL_CURRENCY_TEXT' => 'Seleccione la moneda que será mostrada por defecto cuando cree nuevos registros. Esta será también la moneda mostrada en las columnas de Cantidad en las Vistas de Lista de las Oportunidades.', + 'LBL_CURRENCY' => 'Moneda', + 'LBL_CURRENCY_EXAMPLE' => 'Ejemplo de Visualización de Moneda', + 'LBL_CURRENCY_SIG_DIGITS' => 'Dígitos Significativos en Moneda', + 'LBL_CURRENCY_SIG_DIGITS_DESC' => 'Número de decimales a visualizar para la moneda', + 'LBL_NUMBER_GROUPING_SEP' => 'Separador de miles', + 'LBL_NUMBER_GROUPING_SEP_TEXT' => 'Carácter utilizado para separar las unidades de millar', + 'LBL_DECIMAL_SEP' => 'Símbolo Decimal', + 'LBL_DECIMAL_SEP_TEXT' => 'Carácter utilizado como separador de decimales', + 'LBL_FDOW' => 'Primer Día de la Semana', + 'LBL_FDOW_TEXT' => 'Primer Día a mostrar en las vistas de Semana, Mes y Año.', + 'LBL_DATE_FORMAT_TEXT' => 'Establece el formato de texto para la fecha', + 'LBL_DATE_FORMAT' => 'Formato de Fecha', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Usuarios', + 'LBL_DEPARTMENT' => 'Departamento', + 'LBL_DESCRIPTION' => 'Descripción:', + 'LBL_DISPLAY_TABS' => 'Mostrar Pestañas', + 'LBL_DOWNLOADS' => 'Descargas', + 'LBL_DST_INSTRUCTIONS' => '(+DST) indica que se está aplicando el Horario de Verano', + 'LBL_EDIT_TABS' => 'Editar Pestañas', + 'LBL_EDIT' => 'Editar', + 'LBL_USER_HASH' => 'Contraseña', + 'LBL_AUTHENTICATE_ID' => 'Id Autenticación', + 'LBL_ACCOUNT_NAME' => 'Nombre de Cuenta', + 'LBL_USER_PREFERENCES' => 'Preferencias del Usuario', + 'LBL_EXT_AUTHENTICATE' => 'Autenticación Externa', + 'LBL_EMAIL_OTHER' => 'Correo 2', + 'LBL_EMAIL' => 'Correo electrónico:', + 'LBL_EMAIL_CHARSET' => 'Juego de Caracteres para el Correo Saliente', + 'LBL_EMAIL_EDITOR_OPTION' => 'Formato de correo', + 'LBL_EMAIL_GMAIL_DEFAULTS' => 'Rellenar previamente valores por defecto para Gmail™', + 'LBL_EMAIL_LINK_TYPE' => 'Cliente de correo', + 'LBL_EMAIL_LINK_TYPE_HELP' => 'Cliente de Correo Sugar: Enviar correos usando el cliente de correo de la aplicación Sugar.
Cliente de Correo Externo: Enviar correo usando un cliente de correo externo a la aplicación Sugar, como Microsoft Outlook.', + 'LBL_EMAIL_NOT_SENT' => 'El sistema no puede procesar su petición. Por favor, contacte con el administrador del sistema.', + 'LBL_EMAIL_PROVIDER' => 'Proveedor de Correo', + 'LBL_EMAIL_SHOW_COUNTS' => '¿Mostrar contador de correos?', + 'LBL_EMAIL_SIGNATURE_ERROR1' => 'Esta firma requiere un nombre.', + 'LBL_EMAIL_SMTP_SSL' => 'Habilitar SMTP sobre SSL', + 'LBL_EMAIL_TEMPLATE_MISSING' => 'No ha seleccionado ninguna plantilla de email para el correo que contiene la contraseña que será enviada al usuario. Por favor, seleccione una plantilla de correo en la página de Administración de Contraseñas.', + 'LBL_EMPLOYEE_STATUS' => 'Estado del Empleado', + 'LBL_EMPLOYEE_INFORMATION' => 'Información sobre el Empleado', + 'LBL_ERROR' => 'Error', + 'LBL_EXPORT_CHARSET' => 'Juego de Caracteres de Importación/Exportación', + 'LBL_EXPORT_CHARSET_DESC' => 'Elija el juego de caracteres utilizado en su configuración regional. Esta propiedad se utilizará para importación de datos, exportación .csv y generación de vCard.', + 'LBL_EXPORT_DELIMITER' => 'Delimitador para Exportación', + 'LBL_EXPORT_DELIMITER_DESC' => 'Especifique el/los caracter(es) para delimitar los datos exportados.', + 'LBL_FAX_PHONE' => 'Fax', + 'LBL_FAX' => 'Fax', + 'LBL_FIRST_NAME' => 'Nombre', + 'LBL_GENERATE_PASSWORD_BUTTON_KEY' => 'G', + 'LBL_SYSTEM_GENERATED_PASSWORD' => 'Contraseña Generada por el Sistema', + 'LBL_GENERATE_PASSWORD_BUTTON_LABEL' => 'Restablecer Contraseña', + 'LBL_GENERATE_PASSWORD_BUTTON_TITLE' => 'Restablecer Contraseña [Alt+G]', + 'LBL_GENERATE_PASSWORD' => 'Restablecer Contraseña', + 'LBL_GROUP_DESC' => 'Utilizado para asignar elementos a un grupo (ejemplo: para Correo Entrante). Este tipo de usuario no puede iniciar la sesión a través del interfaz web de Sugar.', + 'LBL_GROUP_USER_STATUS' => 'Usuario de Grupo', + 'LBL_GROUP_USER' => 'Usuario del Grupo', + 'LBL_HIDE_TABS' => 'Ocultar Pestañas', + 'LBL_HOME_PHONE' => 'Teléfono de casa', + 'LBL_INBOUND_TITLE' => 'Información de Cuenta', + 'LBL_IS_ADMIN' => 'Es Administrador', + 'LBL_LANGUAGE' => 'Idioma', + 'LBL_LAST_NAME' => 'Apellidos', + 'LBL_LAST_NAME_SLASH_NAME' => 'Apellido/Nombre', + 'LBL_LAYOUT_OPTIONS' => 'Opciones de Diseño', + 'LBL_LDAP' => 'LDAP', + 'LBL_LDAP_AUTHENTICATION' => 'Autenticación LDAP', + 'LBL_LIST_ACCEPT_STATUS' => 'Estado de Aceptación', + 'LBL_LIST_ADMIN' => 'Administrador', + 'LBL_LIST_DEPARTMENT' => 'Departamento', + 'LBL_LIST_EMAIL' => 'Correo', + 'LBL_LIST_FORM_TITLE' => 'Lista de Usuarios', + 'LBL_LIST_GROUP' => 'Grupo', + 'LBL_LIST_LAST_NAME' => 'Apellidos', + 'LBL_LIST_MEMBERSHIP' => 'Membresía', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_LIST_PRIMARY_PHONE' => 'Teléfono', + 'LBL_LIST_PASSWORD' => 'Contraseña', + 'LBL_LIST_STATUS' => 'Estado', + 'LBL_LIST_TITLE' => 'Título', + 'LBL_LIST_USER_NAME' => 'Identificador', + 'LBL_LOCALE_DEFAULT_NAME_FORMAT' => 'Formato de Visualización de Nombre', + 'LBL_LOCALE_DESC_FIRST' => '[Nombre]', + 'LBL_LOCALE_DESC_LAST' => '[Apellido]', + 'LBL_LOCALE_DESC_SALUTATION' => '[Título]', + 'LBL_LOCALE_DESC_TITLE' => '[Cargo]', + 'LBL_LOCALE_EXAMPLE_NAME_FORMAT' => 'Ejemplo', + 'LBL_LOCALE_NAME_FORMAT_DESC' => 'Establezca cómo desea que se muestren los nombres.', + 'LBL_LOCALE_NAME_FORMAT_DESC_2' => '"s" Título
"f" Nombre
"l" Apellido
', + 'LBL_SAVED_SEARCH' => 'Búsquedas y Diseños Guardados', + 'LBL_LOGIN_BUTTON_KEY' => 'L', + 'LBL_LOGIN_BUTTON_LABEL' => 'Iniciar Sesión', + 'LBL_LOGIN_BUTTON_TITLE' => 'Iniciar Sesión [Alt+L]', + 'LBL_LOGIN_WELCOME_TO' => 'Bienvenido a', + 'LBL_LOGIN_OPTIONS' => 'Opciones', + 'LBL_LOGIN_FORGOT_PASSWORD' => '¿Ha olvidado su contraseña?', + 'LBL_LOGIN_SUBMIT' => 'Enviar', + 'LBL_LOGIN_ATTEMPTS_OVERRUN' => 'Demasiados intentos fallidos de inicio de sesión.', + 'LBL_LOGIN_LOGIN_TIME_ALLOWED' => 'Puede intentar iniciar la sesión de nuevo en', + 'LBL_LOGIN_LOGIN_TIME_DAYS' => 'días.', + 'LBL_LOGIN_LOGIN_TIME_HOURS' => 'h.', + 'LBL_LOGIN_LOGIN_TIME_MINUTES' => 'min.', + 'LBL_LOGIN_LOGIN_TIME_SECONDS' => 'seg.', + 'LBL_LOGIN_ADMIN_CALL' => 'Por favor, póngase en contacto con el administrador del sistema.', + 'LBL_LOGGED_OUT_1' => 'Su sesión se ha cerrado. Para autenticarse de nuevo por favor haga click', + 'LBL_LOGGED_OUT_2' => 'aquí', + 'LBL_LOGGED_OUT_3' => '.', + 'LBL_MAIL_FROMADDRESS' => 'Dirección remitente', + 'LBL_MAIL_FROMNAME' => 'Nombre remitente', + 'LBL_MAIL_OPTIONS_TITLE' => 'Configuración de Correo', + 'LBL_MAIL_SENDTYPE' => 'Agente de Transferencia de Correo (MTA)', + 'LBL_MAIL_SMTPAUTH_REQ' => '¿Usar Autenticación SMTP?', + 'LBL_MAIL_SMTPPORT' => 'Puerto SMTP:', + 'LBL_MAILMERGE_TEXT' => 'Habilitar la Combinación de Correspondencia (debe estar habilitada también por el administrador del sistema en la Configuración)', + 'LBL_MAILMERGE' => 'Combinar Correspondencia', + 'LBL_MAX_TAB' => 'Número de Pestañas', + 'LBL_MAX_TAB_DESCRIPTION' => 'Número de pestañas mostradas en la parte superior de la página antes de aparecer el menú flotante', + 'LBL_MAX_SUBTAB' => 'Número de subpestañas', + 'LBL_MAX_SUBTAB_DESCRIPTION' => 'Número de subpestañas mostradas por cada pestaña antes de que aparezca el menú flotante', + 'LBL_MESSENGER_ID' => 'Cuenta de Mensajería Instantánea', + 'LBL_MESSENGER_TYPE' => 'Tipo de Mensajería Instantánea', + 'LBL_MOBILE_PHONE' => 'Móvil', + 'LBL_MODIFIED_BY' => 'Modificado Por', + 'LBL_CREATED_BY_NAME' => 'Creado por', + 'LBL_MODIFIED_BY_ID' => 'Modificado Por ID', + 'LBL_MODULE_NAME' => 'Usuarios', + 'LBL_MODULE_TITLE' => 'Usuarios: Inicio', + 'LBL_NAME' => 'Nombre y Apellidos', + 'LBL_SIGNATURE_NAME' => 'Nombre', + 'LBL_NAVIGATION_PARADIGM' => 'Navegación', + 'LBL_NAVIGATION_PARADIGM_DESCRIPTION' => 'Seleccionar para ver pestañas de módulos en la barra de navegación basadas en grupos predefinidos. Si esta característica no está seleccionada, todos los módulos aparecerán en la barra de navegación.', + 'LBL_USE_GROUP_TABS' => 'Módulos Agrupados', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Usuario', + 'LBL_NEW_PASSWORD' => 'Nueva contraseña', + 'LBL_NEW_PASSWORD1' => 'Contraseña', + 'LBL_NEW_PASSWORD2' => 'Confirmar contraseña', + 'LBL_NEW_USER_PASSWORD_1' => 'La contraseña ha sido cambiada con éxito.', + 'LBL_NEW_USER_PASSWORD_2' => 'Se ha enviado un email al usuario con una contraseña generada por el sistema.', + 'LBL_NEW_USER_PASSWORD_3' => 'La contraseña ha sido creada con éxito.', + 'LBL_NEW_USER_BUTTON_KEY' => 'N', + 'LBL_NEW_USER_BUTTON_LABEL' => 'Nuevo Usuario', + 'LBL_NEW_USER_BUTTON_TITLE' => 'Nuevo Usuario [Alt+N]', + 'LBL_NORMAL_LOGIN' => 'Cambiar a Vista Normal', + 'LBL_NOTES' => 'Notas', + 'LBL_OFFICE_PHONE' => 'Teléfono de oficina', + 'LBL_OLD_PASSWORD' => 'Contraseña antigua', + 'LBL_OTHER_EMAIL' => 'Correo alternativo', + 'LBL_OTHER_PHONE' => 'Otro teléfono', + 'LBL_OTHER' => 'Otro', + 'LBL_PASSWORD' => 'Contraseña', + 'LBL_PASSWORD_GENERATED' => 'Nueva contraseña generada', + 'LBL_PASSWORD_EXPIRATION_LOGIN' => 'Su contraseña ha caducado. Por favor, proporcione una nueva contraseña.', + 'LBL_PASSWORD_EXPIRATION_GENERATED' => 'Su contraseña es generada por el sistema', + 'LBL_PASSWORD_EXPIRATION_TIME' => 'Su contraseña ha caducado. Por favor, proporcione una nueva contraseña.', + 'LBL_PSW_MODIFIED' => 'contraseña cambiada por última vez', + 'LBL_PHONE' => 'Cualquier teléfono', + 'LBL_PICK_TZ_WELCOME' => 'Bienvenido a Sugar.', + 'LBL_PICK_TZ_DESCRIPTION' => 'Antes de continuar, por favor, confirme su zona horaria. Seleccione la zona horaria apropiada de la siguiente lista, y haga clic en Guardar para continuar. La zona horaria puede ser cambiada en cualquier momento en su configuración de usuario.', + 'LBL_PORTAL_ONLY_DESC' => 'Utilícelo para el API de Portal. Este tipo de usuario no puede iniciar la sesión a través del interfaz web de Sugar.', + 'LBL_PORTAL_ONLY_USER' => 'Usuario del API de Portal', + 'LBL_POSTAL_CODE' => 'Código postal', + 'LBL_PRIMARY_ADDRESS' => 'Dirección principal', + 'LBL_PROMPT_TIMEZONE_TEXT' => 'Seleccionar para que los nuevos usuarios pasen por el Asistente de Nuevo Usuario en su primer inicio de sesión.', + 'LBL_PROMPT_TIMEZONE' => 'Solicitud del Asistente de Usuario', + 'LBL_PROVIDE_USERNAME_AND_EMAIL' => 'Proporcione tanto un Nombre de Usuario como un Correo Electrónico.', + 'LBL_PUBLISH_KEY' => 'Clave de Publicación', + 'LBL_RECAPTCHA_NEW_CAPTCHA' => 'Obtener otro CAPTCHA', + 'LBL_RECAPTCHA_SOUND' => 'Cambiar a Sonido', + 'LBL_RECAPTCHA_IMAGE' => 'Cambiar a Imagen', + 'LBL_RECAPTCHA_INSTRUCTION' => 'Introduzca las Dos Siguientes Palabras', + 'LBL_RECAPTCHA_INSTRUCTION_OPPOSITE' => 'Introduzca las Dos Palabras a la Derecha', + 'LBL_RECAPTCHA_FILL_FIELD' => 'Introduzca el texto que aparece en la imagen.', + 'LBL_RECAPTCHA_INVALID_PRIVATE_KEY' => 'Clave Privada de Recaptcha No válida', + 'LBL_RECAPTCHA_INVALID_REQUEST_COOKIE' => 'The challenge parameter of the verify Recaptcha script was incorrect.', + 'LBL_RECAPTCHA_UNKNOWN' => 'Error Desconocido de Recaptcha', + 'LBL_RECEIVE_NOTIFICATIONS_TEXT' => 'Recibir un correo de notificación cuando se le ha asignado un registro.', + 'LBL_RECEIVE_NOTIFICATIONS' => 'Notificación de asignación', + 'LBL_REGISTER' => '¿Es un usuario nuevo? Por favor, regístrese', + 'LBL_REGULAR_USER' => 'Usuario Normal', + 'LBL_REMINDER_TEXT' => 'Establezca un valor predeterminado para los recordatorios de reuniones y llamadas.
Las notificaciones por ventanas emergentes aparecen para todos los asistentes que utilizan Sugar.
Los recordatorios por correo electrónico se envían a todos los asistentes.', + 'LBL_REMINDER' => 'Recordatorios', + 'LBL_REMINDER_POPUP' => 'Popup', + 'LBL_REMINDER_EMAIL' => 'Email', + 'LBL_REMINDER_EMAIL_ALL_INVITEES' => 'Enviar correo electrónico a todos los asistentes', + 'LBL_REMOVED_TABS' => 'Administrar Pestañas Eliminadas', + 'LBL_REPORTS_TO_NAME' => 'Informa a', + 'LBL_REPORTS_TO' => 'Informa a', + 'LBL_REPORTS_TO_ID' => 'Informa a ID:', + 'LBL_REQUEST_SUBMIT' => 'Su petición ha sido enviada.', + 'LBL_RESET_TO_DEFAULT' => 'Reiniciar a preferencias por defecto', + 'LBL_RESET_PREFERENCES' => 'Restablecer Preferencias de Usuario', + 'LBL_RESET_PREFERENCES_WARNING' => '¿Está seguro de que desea restablecer todas sus preferencias? Advertencia: Su sesión actual será finalizada.', + 'LBL_RESET_PREFERENCES_WARNING_USER' => '¿Está seguro de que desea restablecer todas las preferencias de este usuario?', + 'LBL_RESET_HOMEPAGE' => 'Restablecer Página de Inicio', + 'LBL_RESET_DASHBOARD' => 'Restablecer Cuadro de Mando', + 'LBL_RESET_HOMEPAGE_WARNING' => '¿Está seguro de que desea reiniciar su Página de Inicio?', + 'LBL_RESET_HOMEPAGE_WARNING_USER' => '¿Está seguro de que desea restablecer la Página de Inicio de este usuario?', + 'LBL_SALUTATION' => 'Saludo', + 'LBL_ROLES_SUBPANEL_TITLE' => 'Roles', + 'LBL_SEARCH_FORM_TITLE' => 'Búsqueda de Usuarios', + 'LBL_SEARCH_URL' => 'Dirección de Búsqueda', + 'LBL_SELECT_CHECKED_BUTTON_LABEL' => 'Seleccionar Usuarios Marcados', + 'LBL_SELECT_CHECKED_BUTTON_TITLE' => 'Seleccionar Usuarios Marcados', + 'LBL_SETTINGS_URL_DESC' => 'Usar este URL para establecer la configuración de inicio de sesión del complemento de Sugar para Microsoft® Outlook® y del complemento Sugar para Microsoft® Word®.', + 'LBL_SETTINGS_URL' => 'URL', + 'LBL_SIGNATURE' => 'Firma', + 'LBL_SIGNATURE_HTML' => 'Firma HTML', + 'LBL_SIGNATURE_DEFAULT' => '¿Usar firma?', + 'LBL_SIGNATURE_PREPEND' => '¿Firma sobre la respuesta?', + 'LBL_SIGNATURES' => 'Firmas', + 'LBL_STATE' => 'Estado/Provincia', + 'LBL_STATUS' => 'Estado', + 'LBL_SUBPANEL_LINKS' => 'Enlaces de Subpanel', + 'LBL_SUBPANEL_LINKS_DESCRIPTION' => 'En las Vistas de Detalle, muestra una fila con enlaces a atajos del Subpanel.', + 'LBL_SUBPANEL_TABS' => 'Pestañas de Subpanel', + 'LBL_SUBPANEL_TABS_DESCRIPTION' => 'En las Vistas de Detalle, agrupa los Subpaneles en pestañas y muestra sólo una pestaña a la vez.', + 'LBL_SUGAR_LOGIN' => 'Es Usuario de Sugar', + 'LBL_SUPPORTED_THEME_ONLY' => 'Sólo afecta a temas que soportan esta opción.', + 'LBL_SWAP_LAST_VIEWED_DESCRIPTION' => 'Muestra la barra de Recientes en el lateral, si está marcado. En otro caso, la barra se muestra en la parte superior.', + 'LBL_SWAP_SHORTCUT_DESCRIPTION' => 'Muestra la barra de Atajos en la parte superior, si está marcado. En otro caso, la barra se muestra en el lateral.', + 'LBL_SWAP_LAST_VIEWED_POSITION' => 'Barra de Recientes en un lateral', + 'LBL_SWAP_SHORTCUT_POSITION' => 'Atajos en la parte superior', + 'LBL_TAB_TITLE_EMAIL' => 'Opciones de correo', + 'LBL_TAB_TITLE_USER' => 'Opciones de usuario', + 'LBL_THEME' => 'Temas', + 'LBL_THEME_COLOR' => 'Color', + 'LBL_THEME_FONT' => 'Fuente', + 'LBL_TIME_FORMAT_TEXT' => 'Establece el formato de texto para la hora', + 'LBL_TIME_FORMAT' => 'Formato de hora', + 'LBL_TIMEZONE_DST_TEXT' => 'Aplicar Horario de Verano', + 'LBL_TIMEZONE_DST' => 'Horario de Verano', + 'LBL_TIMEZONE_TEXT' => 'Establece la zona horaria', + 'LBL_TIMEZONE' => 'Zona Horaria', + 'LBL_TITLE' => 'Título', + 'LBL_USE_REAL_NAMES' => 'Mostrar Nombres Completos', + 'LBL_USE_REAL_NAMES_DESC' => 'Muestra el nombre completo de un usuario en lugar de su Nombre de Usuario en los campos de asignación.', + 'LBL_USER_INFORMATION' => 'Perfil de usuario', + 'LBL_USER_LOCALE' => 'Configuración Regional', + 'LBL_USER_NAME' => 'Identificador', + 'LBL_USER_SETTINGS' => 'Configuración del usuario', + 'LBL_USER_TYPE' => 'Tipo de Usuario', + 'LBL_USER_ACCESS' => 'Acceso', + 'LBL_USER' => 'Usuario', + 'LBL_WORK_PHONE' => 'Teléfono de trabajo', + 'LBL_YOUR_PUBLISH_URL' => 'Dirección de publicación', + 'LBL_ICAL_PUB_URL' => 'iCal enlace integración', + 'LBL_ICAL_PUB_URL_HELP' => 'Por favor, use este enlace para completar la integración con iCal. Usted debe agregar el enlace en el iCal - Calendario - Suscribirse', + 'LBL_YOUR_QUERY_URL' => 'Dirección de consulta', + 'LNK_NEW_USER' => 'Crear Nuevo Usuario', + 'LNK_NEW_PORTAL_USER' => 'Crear Usuario del API de Portal', + 'LNK_NEW_GROUP_USER' => 'Crear Usuario de Grupo', + 'LNK_USER_LIST' => 'Ver Usuarios', + 'LNK_REASSIGN_RECORDS' => 'Reasignar Registros', + 'LBL_PROSPECT_LIST' => 'Público Objetivo', + 'LBL_EMAILS' => 'Emails', + 'LBL_PROCESSING' => 'Procesando', + 'LBL_UPDATE_FINISH' => 'Actualización completa', + 'LBL_AFFECTED' => 'afectados', + 'LBL_USER_NAME_FOR_ROLE' => 'Usuarios/Equipos/Roles', + 'LBL_SESSION_EXPIRED' => 'Ha salido de Sugar porque su sesión ha caducado.', + 'LBL_APPLY_OPTIMUMS' => 'Aplicar Valores Óptimos', + 'LBL_ASSIGN_TO_USER' => 'Asignar a Usuario', + 'LBL_BASIC' => 'Configuración entrante', + 'LBL_CERT_DESC' => 'Forzar validación del Certificado de Seguridad del servidor de correo - no usar si es de firma propia.', + 'LBL_CERT' => 'Validar Certificado', + 'LBL_FIND_OPTIMUM_KEY' => 'f', + 'LBL_FIND_OPTIMUM_MSG' => '
Buscando variables óptimas de conexión.', + 'LBL_FIND_OPTIMUM_TITLE' => 'Buscar Configuración Óptima', + 'LBL_FORCE' => 'Forzar Negativo', + 'LBL_FORCE_DESC' => 'Algunos servidores IMAP/POP3 requieren opciones especiales. Marque para forzar una opción negativa al conectar (ej., /notls)', + 'LBL_FOUND_OPTIMUM_MSG' => '
Opciones óptimas encontradas. Presiones el siguiente botón para aplicarlas a su bandeja de correo.', + 'LBL_EMAIL_INBOUND_TITLE' => 'Opciones del Correo Entrante', + 'LBL_EMAIL_OUTBOUND_TITLE' => 'Opciones del Correo Saliente', + 'LBL_LOGIN' => 'Nombre de Usuario', + 'LBL_MAILBOX_DEFAULT' => 'INBOX', + 'LBL_MAILBOX_SSL_DESC' => 'Usar SSL en la conexión. Si no funciona, compruebe que su instalación de PHP incluye "--with-imap-ssl" en la configuración.', + 'LBL_MAILBOX' => 'Carpeta Monitorizada', + 'LBL_MAILBOX_TYPE' => 'Acciones Posibles', + 'LBL_MARK_READ_NO' => 'Correo marcado como borrado tras importación', + 'LBL_MARK_READ_YES' => 'Correo dejado en el servidor tras importación', + 'LBL_MARK_READ_DESC' => 'Importar y marcar mensajes como leídos en el servidor de correo; no borrar.', + 'LBL_MARK_READ' => 'Dejar mensajes en el servidor', + 'LBL_ONLY_SINCE_NO' => 'No. Comprobar contra todos los correos en el servidor de correo.', + 'LBL_ONLY_SINCE_YES' => 'Sí.', + 'LBL_ONLY_SINCE_DESC' => 'PHP no puede distinguir entre mensajes Nuevos y No leídos cuando se usa POP3. Marque esta opción para buscar mensajes desde la última vez que la bandeja fue comprobada. Esto mejorará significativamente el rendimiento si su servidor de correo no soporta IMAP.', + 'LBL_ONLY_SINCE' => 'Importar sólo desde la última comprobación', + 'LBL_PORT' => 'Puerto del servidor de correo', + 'LBL_SERVER_OPTIONS' => 'Configuración Avanzada', + 'LBL_SERVER_TYPE' => 'Protocolo del servidor de correo', + 'LBL_SERVER_URL' => 'Dirección del servidor de correo', + 'LBL_SSL' => 'Usar SSL', + 'LBL_SSL_DESC' => 'Usar Secure Socket Layer para conectarse a su servidor de correo.', + 'LBL_TEST_BUTTON_KEY' => 't', + 'LBL_TEST_BUTTON_TITLE' => 'Comprobar [Alt+T]', + 'LBL_TEST_SETTINGS' => 'Comprobar Configuración', + 'LBL_TEST_SUCCESSFUL' => 'Conexión completada con éxito.', + 'LBL_TLS_DESC' => 'Usar Transport Layer Security para conectar al servidor de correo - solo use esto si su servidor de correo soporta este protocolo.', + 'LBL_TLS' => 'Usar TLS', + 'LBL_TOGGLE_ADV' => 'Mostrar Avanzado', + 'LBL_OWN_OPPS' => 'No hay Oportunidades', + 'LBL_EXTERNAL_AUTH_ONLY' => 'Autenticar a este usuario sólo mediante', + 'LBL_ONLY' => 'Sólo', + 'LBL_OWN_OPPS_DESC' => 'Marque esta opción si a este usuario no se le asignarán oportunidades. Utilice esta opción para usuarios que sean gerentes y no estén involucrados en actividades comerciales. Esta opción se utiliza en el módulo de forecasting.', + 'LBL_LDAP_ERROR' => 'Error de LDAP: Por favor, contacte con un administrador', + 'LBL_LDAP_EXTENSION_ERROR' => 'Error de LDAP: Las extensiones no han sido cargadas', + 'LBL_USER_HOLIDAY_SUBPANEL_TITLE' => 'Festivos del Usuario', + 'LBL_RESOURCE_NAME' => 'Nombre', + 'LBL_RESOURCE_TYPE' => 'Tipo', + 'LBL_PDF_SETTINGS' => 'Configuración para PDFs', + 'LBL_PDF_PAGE_FORMAT' => 'Formato de Página', + 'LBL_PDF_PAGE_FORMAT_TEXT' => 'El formato utilizado en las páginas', + 'LBL_PDF_PAGE_ORIENTATION' => 'Orientación de Página', + 'LBL_PDF_PAGE_ORIENTATION_TEXT' => '', + 'LBL_PDF_PAGE_ORIENTATION_P' => 'Vertical', + 'LBL_PDF_PAGE_ORIENTATION_L' => 'Horizontal', + 'LBL_PDF_MARGIN_HEADER' => 'Margen de la Cabecera', + 'LBL_PDF_MARGIN_HEADER_TEXT' => '', + 'LBL_PDF_MARGIN_FOOTER' => 'Margen del Pie', + 'LBL_PDF_MARGIN_FOOTER_TEXT' => '', + 'LBL_PDF_MARGIN_TOP' => 'Margen Superior', + 'LBL_PDF_MARGIN_TOP_TEXT' => '', + 'LBL_PDF_MARGIN_BOTTOM' => 'Margen Inferior', + 'LBL_PDF_MARGIN_BOTTOM_TEXT' => '', + 'LBL_PDF_MARGIN_LEFT' => 'Margen Izquierdo', + 'LBL_PDF_MARGIN_LEFT_TEXT' => '', + 'LBL_PDF_MARGIN_RIGHT' => 'Margen Derecho', + 'LBL_PDF_MARGIN_RIGHT_TEXT' => '', + 'LBL_PDF_FONT_NAME_MAIN' => 'Fuente para la Cabecera y el Cuerpo', + 'LBL_PDF_FONT_NAME_MAIN_TEXT' => 'La fuente seleccionada será aplicada al texto en la cabecera y el cuerpo del Documento PDF', + 'LBL_PDF_FONT_SIZE_MAIN' => 'Tamaño de Fuente Principal', + 'LBL_PDF_FONT_SIZE_MAIN_TEXT' => '', + 'LBL_PDF_FONT_NAME_DATA' => 'Fuente para el Pie', + 'LBL_PDF_FONT_NAME_DATA_TEXT' => 'La fuente seleccionada será aplicada al texto en el pie del Documento PDF', + 'LBL_PDF_FONT_SIZE_DATA' => 'Tamaño de la Fuente de Datos', + 'LBL_PDF_FONT_SIZE_DATA_TEXT' => '', + 'LBL_LAST_ADMIN_NOTICE' => 'Se ha seleccionado a usted mismo. No puede cambiar su propio Tipo de Usuario o Estado.', + 'LBL_MAIL_SMTPUSER' => 'Usuario SMTP:', + 'LBL_MAIL_SMTPPASS' => 'Contraseña SMTP:', + 'LBL_MAIL_SMTPSERVER' => 'Servidor SMTP:', + 'LBL_SMTP_SERVER_HELP' => 'Este Servidor de Correo SMTP puede utilizarse para correo saliente. Proporcione el nombre de usuario y la contraseña de su cuenta de correo para usar el servidor de correo.', + 'LBL_MISSING_DEFAULT_OUTBOUND_SMTP_SETTINGS' => 'El administrador aún no ha configurado la cuenta saliente por defecto. No es posible enviar un correo de prueba.', + 'LBL_MAIL_SMTPTYPE' => 'Tipo de Servidor SMTP:', + 'LBL_MAIL_SMTP_SETTINGS' => 'Especificación de Servidor SMTP', + 'LBL_CHOOSE_EMAIL_PROVIDER' => 'Elija su proveedor de Email:', + 'LBL_YAHOOMAIL_SMTPPASS' => 'Contraseña de Yahoo! Mail:', + 'LBL_YAHOOMAIL_SMTPUSER' => 'ID de Yahoo! Mail:', + 'LBL_GMAIL_SMTPPASS' => 'Contraseña de Gmail:', + 'LBL_GMAIL_SMTPUSER' => 'Dirección de Email de Gmail:', + 'LBL_EXCHANGE_SMTPPASS' => 'Contraseña de Exchange:', + 'LBL_EXCHANGE_SMTPUSER' => 'Nombre de usuario de Exchange:', + 'LBL_EXCHANGE_SMTPPORT' => 'Puerto de Servidor Exchange:', + 'LBL_EXCHANGE_SMTPSERVER' => 'Servidor Exchange:', + 'LBL_OK' => 'Aceptar', + 'LBL_CANCEL' => 'Cancelar', + 'LBL_DELETE_USER' => 'Eliminar Usuario', + 'LBL_WIZARD_TITLE' => 'Asistente de Usuario', + 'LBL_WIZARD_WELCOME_TAB' => 'Bienvenido', + 'LBL_WIZARD_WELCOME_TITLE' => '¡Bienvenido a Sugar!', + 'LBL_WIZARD_WELCOME' => 'Haga clic en Siguiente para configurar algunas opciones básicas de Sugar.', + 'LBL_WIZARD_WELCOME_NOSMTP' => 'Haga clic en Siguiente para configurar algunas opciones básicas de Sugar.', + 'LBL_WIZARD_NEXT_BUTTON' => 'Siguiente >', + 'LBL_WIZARD_BACK_BUTTON' => '< Anterior', + 'LBL_WIZARD_SKIP_BUTTON' => 'Saltar', + 'LBL_WIZARD_FINISH_BUTTON' => 'Finalizar', + 'LBL_WIZARD_FINISH_TAB' => 'Finalizar', + 'LBL_WIZARD_FINISH_TITLE' => '¡Ya está listo para usar Sugar!', + 'LBL_WIZARD_FINISH' => 'Haga clic en Continuar para configurar sus opciones de usuario.


Para configurar opciones adicionales del sistema, haga clic aquí.', + 'LBL_WIZARD_FINISH1' => '¿Qué te gustaría hacer a continuación?', + 'LBL_WIZARD_FINISH2' => 'Comenzar a usar Sugar', + 'LBL_WIZARD_FINISH3' => 'Importar datos', + 'LBL_WIZARD_FINISH4' => 'Importar datos desde fuentes externas en la aplicación.', + 'LBL_WIZARD_FINISH5' => 'Crear usuarios', + 'LBL_WIZARD_FINISH6' => 'Crear nuevas cuentas de usuario para que la gente pueda acceder a la aplicación.', + 'LBL_WIZARD_FINISH7' => 'Ver y administrar la configuración de la aplicación', + 'LBL_WIZARD_FINISH8' => 'Administrar la configuración avanzada, incluida la configuración de la aplicación por defecto.', + 'LBL_WIZARD_FINISH9' => 'Configurar la aplicación', + 'LBL_WIZARD_FINISH10' => 'Utilizar el estudio para crear y administrar los campos y vistas de la aplicación.', + 'LBL_WIZARD_FINISH11' => 'Visitar Sugar University', + 'LBL_WIZARD_FINISH12' => 'Encontrar materiales de formación y clases que le ayudarán a comenzar como administrador del sistema o usuario final de la aplicación.', + 'LBL_WIZARD_FINISH14' => 'Documentación', + 'LBL_WIZARD_FINISH15' => 'Guías de producto y notas de la versión', + 'LBL_WIZARD_FINISH16' => 'Base de conocimientos', + 'LBL_WIZARD_FINISH17' => 'Consejos de soporte de SugarCRM para la realización de tareas y procesos comunes en Sugar', + 'LBL_WIZARD_FINISH18' => 'Foros', + 'LBL_WIZARD_FINISH19' => 'Foros dedicados a la Comunidad de Sugar para discutir temas de interés entre sí y con los desarrolladores de SugarCRM', + 'LBL_WIZARD_FINISH2DESC' => 'Vaya directamente a la página principal de la aplicación.', + 'LBL_WIZARD_PERSONALINFO' => 'Su Información', + 'LBL_WIZARD_LOCALE' => 'Su Configuración Regional', + 'LBL_WIZARD_SMTP' => 'Su Cuenta de Correo', + 'LBL_WIZARD_PERSONALINFO_DESC' => 'Proporcione información sobre si mismo. La información que proporcione sobre si mismo será visible para otros usuarios de Sugar.
Los campos marcados con * son requeridos.', + 'LBL_WIZARD_LOCALE_DESC' => 'Especifique su zona horaria y cómo desea que aparezcan en Sugar las fechas, monedas y nombres.', + 'LBL_WIZARD_SMTP_DESC' => 'Proporcione el nombre de usuario y la contraseña de su cuenta de correo para el servidor de correo saliente por defecto.', + 'LBL_EAPM_SUBPANEL_TITLE' => 'Cuentas externas', + 'LBL_EDITLAYOUT' => 'Editar Diseño', + 'LBL_HELP' => 'Ayuda', + 'LBL_CHECKMARK' => 'Marca de Verificación', + 'LBL_THEMEPREVIEW' => 'Vista Preliminar', + 'LBL_OAUTH_TOKENS' => 'OAuth Tokens', + 'LBL_OAUTH_TOKENS_SUBPANEL_TITLE' => 'OAuth Access Tokens', + 'LBL_MODIFIED_USER_ID' => 'Modificado por ID', + 'LBL_PHONE_HOME' => 'Teléfono de casa', + 'LBL_PHONE_MOBILE' => 'Móvil', + 'LBL_PHONE_WORK' => 'Teléfono del trabajo', + 'LBL_PHONE_OTHER' => 'Otro teléfono', + 'LBL_PHONE_FAX' => 'Fax oficina', + 'LBL_PORTAL_ONLY' => 'Usuario sólo de Portal', + 'LBL_SHOW_ON_EMPLOYEES' => 'Visualización del Registro de Empleados', + 'LBL_IS_GROUP' => 'Grupo', + 'LBL_EXPORT_CREATED_BY' => 'Creado por ID', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DELETED' => 'Eliminado', + 'LBL_HIDEOPTIONS' => 'Ocultar Opciones', + 'LBL_SHOWOPTIONS' => 'Mostrar Opciones', +); \ No newline at end of file From 6265169c5738f151d8c2d91470f61274b757b02e Mon Sep 17 00:00:00 2001 From: Jorge Obeaga Date: Thu, 21 Nov 2013 16:19:20 -0300 Subject: [PATCH 003/223] Installation process translated. --- include/language/es_es.lang.php | 20 ++ install/lang.config.php | 8 + install/language/es_es.lang.php | 586 ++++++++++++++++++++++++++++++++ 3 files changed, 614 insertions(+) create mode 100644 install/lang.config.php create mode 100644 install/language/es_es.lang.php diff --git a/include/language/es_es.lang.php b/include/language/es_es.lang.php index 26a14da88a4..b994a5e3b06 100644 --- a/include/language/es_es.lang.php +++ b/include/language/es_es.lang.php @@ -2919,3 +2919,23 @@ ), ); +// DISYTEL: Additional Translations +$app_list_strings['product_category_dom']['Bugs'] = 'Incidencias'; +$app_strings['LBL_EMAIL_ADDRESS_BOOK_TITLE_ICON'] = 'Libreta de Direcciones Libreta de Direcciones'; +$app_strings['LBL_EMAIL_ADDRESS_BOOK_TITLE_ICON_SHORT'] = ''; +$app_strings['LBL_EMAIL_FOLDERS'] = 'Carpetas'; +$app_strings['LBL_EMAIL_FOLDERS_SHORT'] = ''; +$app_strings['LBL_EMAIL_SEARCH'] = ''; +$app_strings['LBL_EMAIL_SEARCH_SHORT'] = ''; +$app_strings['ERR_EXTERNAL_API_NO_OAUTH_TOKEN'] = 'No se encuentra el Token de Acceso OAuth.'; +$app_strings['LBL_EMPTY_REQUIRED_VCARD'] = 'La vCard no tiene todos los campos requeridos para este módulo. Por favor consulte sugarcrm.log para más detalles.'; +$app_strings['LBL_VCARD_ERROR_FILESIZE'] = 'El archivo subido excede el límite de tamaño, el cual se especificó en el formulario HTML.'; +$app_strings['LBL_VCARD_ERROR_DEFAULT'] = 'Hubo un error subiendo el archivo vCard. Por favor consulte sugarcrm.log para más detalles.'; +$app_strings['ERROR_LICENSE_FULLY_EXPIRED'] = 'La Suscripción de su Companía al Producto SugarCRM ha expirado y necesita ser renovada. Sólo los administradores pueden ingresar cuando expiró una Suscripción. Si tiene alguna inquietud, por favor contacte con su administrador.'; +$app_strings['WARN_BROWSER_IE_COMPATIBILITY_MODE_WARNING'] = 'Advertencia: Su navegador está en modo compatibilidad IE el cual no es soportado.'; +$app_strings['MSG_JS_ALERT_MTG_REMINDER_STATUS'] = 'Estado: '; +$app_strings['MSG_JS_ALERT_MTG_REMINDER_RELATED_TO'] = 'Relacionado A: '; +$app_strings['LBL_CHOOSE_START_AND_END_DATES'] = 'Por favor seleccione un rango de fecha inicial y un rango de fecha final'; +$app_strings['LBL_CHOOSE_START_AND_END_ENTRIES'] = 'Por favor seleccione un rango de entrada de inicio y de finalización'; +$app_strings['UPLOAD_REQUEST_ERROR'] = 'Ocurrió un error. Por favor actualice su página y vuelva a intentarlo.'; +$app_strings['ERR_BAD_RESPONSE_FROM_SERVER'] = 'Respuesta incorrecta del servidor'; diff --git a/install/lang.config.php b/install/lang.config.php new file mode 100644 index 00000000000..a145bf479eb --- /dev/null +++ b/install/lang.config.php @@ -0,0 +1,8 @@ + 'Español (ES)', +); + +?> \ No newline at end of file diff --git a/install/language/es_es.lang.php b/install/language/es_es.lang.php new file mode 100644 index 00000000000..8a6132b3b1c --- /dev/null +++ b/install/language/es_es.lang.php @@ -0,0 +1,586 @@ + 'Búsqueda Básica', + 'LBL_ADVANCED_SEARCH' => 'Búsqueda Avanzada', + 'LBL_BASIC_TYPE' => 'Tipo Básico', + 'LBL_ADVANCED_TYPE' => 'Tipo Avanzado', + 'LBL_SYSOPTS_1' => 'Seleccione de las siguientes opciones de configuración del sistema.', + 'LBL_SYSOPTS_2' => '¿Qué tipo de base de datos será utilizada para la instancia de SuiteCRM que está a punto de instalar?', + 'LBL_SYSOPTS_CONFIG' => 'Configuración del Sistema', + 'LBL_SYSOPTS_DB_TYPE' => '', + 'LBL_SYSOPTS_DB' => 'Especifique Tipo de Base de Datos', + 'LBL_SYSOPTS_DB_TITLE' => 'Tipo de Base de Datos', + 'LBL_SYSOPTS_ERRS_TITLE' => 'Por favor corrija los siguientes errores antes de continuar:', + 'LBL_MAKE_DIRECTORY_WRITABLE' => 'Por favor modifique los permisos de los siguientes directorios para permitir la escritura:', + + + 'ERR_DB_VERSION_FAILURE' => 'No se puede verificar la versión de la base de datos.', + + + 'DEFAULT_CHARSET' => 'UTF-8', + 'ERR_ADMIN_USER_NAME_BLANK' => 'Provea el nombre de usuario para el usuario administrador de SuiteCRM. ', + 'ERR_ADMIN_PASS_BLANK' => 'Provea una contraseña para el usuario administrador de SuiteCRM. ', + + //'ERR_CHECKSYS_CALL_TIME' => 'Allow Call Time Pass Reference is Off (please enable in php.ini)', + 'ERR_CHECKSYS' => 'Se detectaron errores durante la verificación de compatibilidad. Para que su instalación de SuiteCRM funcione correctamente, por favor realice los pasos necesarios para corregir los inconvenientes listados más abajo, y vuelva a presionar el botón volver a verificar, o vuelva a intentar realizar la instalación nuevamente.', + 'ERR_CHECKSYS_CALL_TIME' => 'Allow Call Time Pass Reference está Activado (debería estar en Off en el archivo php.ini)', + 'ERR_CHECKSYS_CURL' => 'No encontrado: el planificador de tareas de SuiteCRM se ejecutará con funcionalidad limitada.', + 'ERR_CHECKSYS_FASTCGI_LOGGING' => 'Para una mejor experiencia use IIS/FastCGI sapi, asigne fastcgi.logging en 0 en su archivo php.ini.', + 'ERR_CHECKSYS_IMAP' => 'No encontrado: Correo Entrante y Campañas (Email) requieren la librería IMAP. No estarán funcionales.', + //'ERR_CHECKSYS_MSSQL_MQGPC' => 'Magic Quotes GPC cannot be turned "On" when using MS SQL Server.', + 'ERR_CHECKSYS_MSSQL_MQGPC' => 'Magic Quotes GPC no pueden estar activadas cuando se utiliza MS SQL Server.', + 'ERR_CHECKSYS_MEM_LIMIT_0' => 'Advertencia: ', + 'ERR_CHECKSYS_MEM_LIMIT_1' => ' (Cambie este valor a ', + 'ERR_CHECKSYS_MEM_LIMIT_2' => 'M o más en su archivo php.ini)', + 'ERR_CHECKSYS_MYSQL_VERSION' => 'Versión mínima requerida 4.1.2 - Se encontró: ', + 'ERR_CHECKSYS_NO_SESSIONS' => 'Falló la escritura y lectura de variables de sesión. No se puede avanzar con la instalación.', + 'ERR_CHECKSYS_NOT_VALID_DIR' => 'No es un directorio válido', + 'ERR_CHECKSYS_NOT_WRITABLE' => 'Advertencia: No se puede escribir', + 'ERR_CHECKSYS_PHP_INVALID_VER' => 'Su versión de PHP no es soportada por SuiteCRM. Deberá instalar una versión que sea compatible con la aplicación SuiteCRM. Por favor consulte la Matriz de Compatibilidad en las Notas de la Versión para conocer las versiones de PHP soportadas. Su versión es ', + 'ERR_CHECKSYS_IIS_INVALID_VER' => 'Su versión de IIS no es soportada por SuiteCRM. Deberá instalar una versión que sea compatible con la aplicación SuiteCRM. Por favor consulte la Matriz de Compatibilidad en las Notas de la Versión para conocer las versiones de IIS soportadas. Su versión es ', + 'ERR_CHECKSYS_FASTCGI' => 'Detectamos que no está utilizando un FastCGI handler mapping para PHP. Deberá instalar/configurar una versión que sea compatible con SuiteCRM. Por favor consulte la Matriz de Compatibilidad en las Notas de la Versión para conocer las versiones soportadas. Vea http://www.iis.net/php/ para más detalles ', + 'ERR_CHECKSYS_FASTCGI_LOGGING' => 'Para una mejor experiencia usando IIS/FastCGI sapi, asigne fastcgi.logging en 0 en su archivo php.ini.', + 'ERR_CHECKSYS_PHP_UNSUPPORTED' => 'Versión de PHP no soportada: ( ver', + 'LBL_DB_UNAVAILABLE' => 'Base de datos no disponible', + 'LBL_CHECKSYS_DB_SUPPORT_NOT_AVAILABLE' => 'No se encontró Soporte de Base de Datos. Por favor asegúrese de tener los drivers necesarios para alguna de las siguientes Base de Datos soportadas: MySQL o MS SqlServer. Puede que sea necesario descomentar la extensión correspondiente en el archivo php.ini, o recompilar con el binario correspondiente, dependiendo de su versión de PHP. Por favor consulte el manual de PHP para más información sobre cómo habilitar el Soporte de Base de Datos.', + 'LBL_CHECKSYS_XML_NOT_AVAILABLE' => 'No se encontraron las funciones de las librerías de XML Parsing necesarias para ejecutar SuiteCRM. Puede que sea necesario descomentar la extensión correspondiente en el archivo php.ini, o recompilar con el binario correspondiente, dependiendo de su versión de PHP. Por favor consulte el manual de PHP para más información.', + 'ERR_CHECKSYS_MBSTRING' => 'No se encontraron las funciones asociadas con la extensión Multibyte Strings (mbstring) necesaria para ejecutar SuiteCRM.

Generalmente el módulo mbstring no está habilitado por defecto en PHP y debe ser activado con --enable-mbstring al momento de compilar PHP. Por favor consulte el manual de PHP para más información sobre cómo habilitar mbstring.', + 'ERR_CHECKSYS_SESSION_SAVE_PATH_NOT_SET' => 'El parámetro session.save_path de su archivo de configuración (php.ini) no está correctamente asignado, o está establecido un directorio que no existe. Puede que sea necesario asignar el parámetro save_path en el archivo php.ini o verificar que la carpeta establecida en save_path existe.', + 'ERR_CHECKSYS_SESSION_SAVE_PATH_NOT_WRITABLE' => 'El parámetro de configuración session.save_path en su archivo de configuración (php.ini) está asignado a un directorio que no tiene permisos de escritura. Por favor realice los pasos necesarios para dar permisos de escritura.
Dependiendo de su Sistema Operativo puede llegar a neccesitar cambiar los permisos ejecutando chmod 766, o con click derecho sobre el archivo para acceder al menú propiedades y desactivar la opción "sólo lectura".', + 'ERR_CHECKSYS_CONFIG_NOT_WRITABLE' => 'The config file exists but is not writeable. Please take the necessary steps to make the file writeable. Depending on your Operating system, this might require you to change the permissions by running chmod 766, or to right click on the filename to access the properties and uncheck the read only option.', + 'ERR_CHECKSYS_CONFIG_NOT_WRITABLE' => 'El archivo de configuración existe pero no se puede escribir. Por favor realice los pasos necesarios para dar permisos de escritura.
Dependiendo de su Sistema Operativo puede llegar a neccesitar cambiar los permisos ejecutando chmod 766, o con click derecho sobre el archivo para acceder al menú propiedades y desactivar la opción "sólo lectura".', + 'ERR_CHECKSYS_CONFIG_OVERRIDE_NOT_WRITABLE' => 'El archivo config override existe pero no se puede escribir. Por favor realice los pasos necesarios para dar permisos de escritura.
Dependiendo de su Sistema Operativo puede llegar a neccesitar cambiar los permisos ejecutando chmod 766, o con click derecho sobre el archivo para acceder al menú propiedades y desactivar la opción "sólo lectura".', + 'ERR_CHECKSYS_CUSTOM_NOT_WRITABLE' => 'El directorio Custom existe pero no se puede escribir. Por favor realice los pasos necesarios para dar permisos de escritura.
Dependiendo de su Sistema Operativo puede llegar a neccesitar cambiar los permisos ejecutando chmod 766, o con click derecho sobre el archivo para acceder al menú propiedades y desactivar la opción "sólo lectura".', + // The files or directories listed below are not writeable or are missing and cannot be created. Depending on your Operating System, correcting this may require you to change permissions on the files or parent directory (chmod 755), or to right click on the parent directory and uncheck the 'read only' option and apply it to all subfolders.", + 'ERR_CHECKSYS_FILES_NOT_WRITABLE' => 'Los archivos o directorios listados más abajo no se pueden escribir. Dependiendo de su Sistema Operativo, corregir esto puede requerir que cambie los permisos de los archivos o directorio padre (chmod 755), o click derecho en la carpeta padre, desactivar la opción "sólo lectura" y aplicarla a todas las subcarpetas. ', + //'ERR_CHECKSYS_SAFE_MODE' => 'Safe Mode is On (please disable in php.ini)', + 'ERR_CHECKSYS_SAFE_MODE' => 'Safe Mode está activado (puede ser conveniente deshabilitarlo en php.ini)', + 'ERR_CHECKSYS_ZLIB' => 'ZLib no se encontró: SuiteCRM alcanza grandes beneficios de performance con la compresión zlib.', + 'ERR_CHECKSYS_ZIP' => 'ZIP no se encontró: SuiteCRM necesita soporte ZIP para procesar archivos comprimidos.', + 'ERR_CHECKSYS_PCRE' => 'PCRE no se encontró: SuiteCRM necesita la librería PCRE para procesar expresiones regulares en el estilo Perl.', + 'ERR_CHECKSYS_PCRE_VER' => 'PCRE versión de librería: SuiteCRM necesita la versión 7.0 o superior de la librería PCRE para procesar expresiones regulares en el estilo Perl.', + 'ERR_DB_ADMIN' => 'El nombre de usuario o contraseña del administrador de base de datos es inválido, y no se puede establecer la conexión con la base de datos. Por favor ingrese un nombre de usuario y contraseña correctos. (Error: ', + 'ERR_DB_ADMIN_MSSQL' => 'El nombre de usuario o contraseña del administrador de base de datos es inválido, y no se puede establecer la conexión con la base de datos. Por favor ingrese un nombre de usuario y contraseña correctos.', + + 'ERR_DB_EXISTS_NOT' => 'La base de datos especificada no existe.', + 'ERR_DB_EXISTS_WITH_CONFIG' => 'La base de datos ya existe con información de configuración. Para ejecutar una instalación con la base de datos seleccionada vuelva a ejecutar la instalación y seleccione "Eliminar las tablas existentes y volver a crearlas?". Para actualizar utilice el Asistente de Actualizaciones en la Consola de Administración. Por favor lea la documentación de actualización aquí', + 'ERR_DB_EXISTS' => 'Ya existe una Base de Datos con el nombre provisto -- no se puede crear otra con el mismo nombre.', + // hit the back button and choose a new database name
2. click next and continue but all existing tables on this database will be dropped. This means your tables and data will be blown away.', + 'ERR_DB_EXISTS_PROCEED' => 'Ya existe una Base de Datos con el nombre provisto. Usted puede
1. presionar el botón Atrás y seleccionar un nuevo nombre de base de datos
2. hacer click en Siguiente y continuar, aunque todas las tablas existentes en esta base de datos serán descartadas. Esto significa que sus tablas e información serán eliminadas ', + 'ERR_DB_HOSTNAME' => 'El nombre de Host no puede ser vacío.', + 'ERR_DB_INVALID' => 'Tipo de base de datos seleccionado no válido.', + 'ERR_DB_LOGIN_FAILURE' => 'El host, nombre de usuario y/o contraseña provistos no es válido, y no se puede establecer una conexión a la base de datos. Por favor ingrese un host, nombre de usuario y contraseña válidos.', + 'ERR_DB_LOGIN_FAILURE_MYSQL' => 'El host, nombre de usuario y/o contraseña provistos no es válido, y no se puede establecer una conexión a la base de datos. Por favor ingrese un host, nombre de usuario y contraseña válidos.', + 'ERR_DB_LOGIN_FAILURE_MSSQL' => 'El host, nombre de usuario y/o contraseña provistos no es válido, y no se puede establecer una conexión a la base de datos. Por favor ingrese un host, nombre de usuario y contraseña válidos.', + 'ERR_DB_MYSQL_VERSION' => 'Su versión de MySQL (%s) no es soportada por SuiteCRM. Deberá instalar una versión que sea compatible con SuiteCRM. Por favor consulte la Matriz de Compatibilidad en las Notas de Versión para conocer las versiones soportadas.', + 'ERR_DB_NAME' => 'El nombre de base de datos no puede estar vacío.', + 'ERR_DB_NAME2' => "El nombre de base de datos no puede contener '\\', '/', o '.'", + 'ERR_DB_MYSQL_DB_NAME_INVALID' => "El nombre de base de datos no puede contener '\\', '/', o '.'", + 'ERR_DB_MSSQL_DB_NAME_INVALID' => "El nombre de base de datos no puede comenzar con un número, '#', o '@' y no puede contener espacios, '\"', \"'\", '*', '/', '\', '?', ':', '<', '>', '&', '!', o '-'", + 'ERR_DB_OCI8_DB_NAME_INVALID' => "El nombre de base de datos sólo puede estar formado por caracteres alfanuméricos y los símbolos '#', '_' o '$'", + 'ERR_DB_PASSWORD' => 'Las contraseñas provistas para el administrador de base de datos no coinciden. Por favor vuelva a ingresar las mismas contraseñas en los campos.', + 'ERR_DB_PRIV_USER' => 'Provea un nombre de usuario administrador de base de datos. El usuario es requerido para la conexión inicial a la base de datos.', + 'ERR_DB_USER_EXISTS' => 'El nombre de usuario para la base de datos ya existe -- no se puede crear otro con el mismo nombre. Por favor ingrese un nuevo nombre de usuario.', + 'ERR_DB_USER' => 'Ingrese un nombre de usuario para el administrador de base de datos.', + 'ERR_DBCONF_VALIDATION' => 'Por favor corrija los siguientes errores antes de continuar:', + 'ERR_DBCONF_PASSWORD_MISMATCH' => 'Las contraseñas provistas para el administrador de base de datos no coinciden. Por favor vuelva a ingresar las mismas contraseñas en los campos.', + 'ERR_ERROR_GENERAL' => 'Se encontraron los siguientes errores:', + 'ERR_LANG_CANNOT_DELETE_FILE' => 'No se puede eliminar el archivo: ', + 'ERR_LANG_MISSING_FILE' => 'No se encuentra el archivo: ', + 'ERR_LANG_NO_LANG_FILE' => 'No se encontró archivo de traducción en include/language dentro de: ', + 'ERR_LANG_UPLOAD_1' => 'Hubo un problema con su upload. Por favor vuelva a intentarlo.', + 'ERR_LANG_UPLOAD_2' => 'Los paquetes de idioma deben ser archivos ZIP.', + 'ERR_LANG_UPLOAD_3' => 'PHP no pudo mover el archivo temporal a la carpeta upgrade.', + 'ERR_LICENSE_MISSING' => 'Faltan Campos Obligatorios', + 'ERR_LICENSE_NOT_FOUND' => 'No se encontró la licencia!', + 'ERR_LOG_DIRECTORY_NOT_EXISTS' => 'El directorio de Log provisto no es un directorio válido.', + 'ERR_LOG_DIRECTORY_NOT_WRITABLE' => 'El directorio de Log provisto no tiene permisos de escritura.', + 'ERR_LOG_DIRECTORY_REQUIRED' => 'Se requiere un directorio de Log si usted desea especificar uno.', + 'ERR_NO_DIRECT_SCRIPT' => 'No se puede procesar el script de forma directa.', + 'ERR_NO_SINGLE_QUOTE' => 'No se puede usar comillas simples para ', + 'ERR_PASSWORD_MISMATCH' => 'Las contraseñas provistas para el usuario admin de SuiteCRM no coinciden. Por favor vuelva a ingresar las mismas contraseñas en los campos.', + 'ERR_PERFORM_CONFIG_PHP_1' => 'No se puede escribir el archivo config.php.', + 'ERR_PERFORM_CONFIG_PHP_2' => 'Puedecontinuar con esta instalación creando manualmente el archivo config.php y pegando la siguiente información de configuración dentro del archivo. De todos modos, usted debería crear el archivo config.php antes de continuar con el siguiente paso.', + 'ERR_PERFORM_CONFIG_PHP_3' => 'Se acordó de crear el archivo config.php?', + 'ERR_PERFORM_CONFIG_PHP_4' => 'Advertencia: No se pudo escribir el archivo config.php. Asegúrese de que existe.', + 'ERR_PERFORM_HTACCESS_1' => 'No es puede escribir el archivo ', + 'ERR_PERFORM_HTACCESS_2' => ' .', + 'ERR_PERFORM_HTACCESS_3' => 'Si desea proteger su archivo de log de ser accedido via navegador, cree un archivo .htaccess en su carpeta log con la línea:', + 'ERR_PERFORM_NO_TCPIP' => 'No hemos podido detectar una conexión a Internet. Cuando tenga una conexión, por favor visite http://www.suitecrm.com/ para registrarse con SuiteCRM. Si nos cuenta un poco cómo su compañía planea utilizar SuiteCRM podremos asegurarnos de entregarle la aplicación correcta para las necesidades de su negocio.', + 'ERR_SESSION_DIRECTORY_NOT_EXISTS' => 'El directorio de Sesión provisto no es un directorio válido.', + 'ERR_SESSION_DIRECTORY' => 'El directorio de Sesión provisto no tiene permisos de escritura.', + 'ERR_SESSION_PATH' => 'Se requiere una ruta de Sesión, si es que desea especificar una.', + 'ERR_SI_NO_CONFIG' => 'No incluyó el archivo config_si.php en el directorio raíz, o no definió la variable $sugar_config_si en config.php', + 'ERR_SITE_GUID' => 'Se requiere un ID de Aplicación si es que desea especificar uno.', + 'ERROR_SPRITE_SUPPORT' => "No hemos podido encontrar la librería GD, como resultado no podrá utilizar la funcionalidad CSS Sprite.", + 'ERR_UPLOAD_MAX_FILESIZE' => 'Advertencia: Debe cambiar su configuración de PHP para permitir la subida de archivos de al menos 6MB.', + 'LBL_UPLOAD_MAX_FILESIZE_TITLE' => 'Tamaño de Subida de Archivos', + 'ERR_URL_BLANK' => 'Provea la URL base para su instancia de SuiteCRM.', + 'ERR_UW_NO_UPDATE_RECORD' => 'No se pudo encontrar el registro de instalación de ', + 'ERROR_FLAVOR_INCOMPATIBLE' => 'El archivo subido no es compatible con esta edición (Community Edition, Professional, o Enterprise) de SuiteCRM: ', + 'ERROR_LICENSE_EXPIRED' => "Error: Su licencia expiró hace ", + // If you do not enter a new license key within 30 days of your license key expiration, you will no longer be able to log in to this application.", + 'ERROR_LICENSE_EXPIRED2' => " día(s). Por favor visite el '\"Administrador de Licencias\" en la pantalla de administrador para ingresar la nueva Clave. Si no ingresa una nueva clave de licencia dentro de los 30 días de expirada, ya no se le permitirá ingresar en la aplicación. ", + 'ERROR_MANIFEST_TYPE' => 'El archivo Manifest debe especificar el tipo de paquete.', + 'ERROR_PACKAGE_TYPE' => 'El archivo Manifest especifica un tipo de paquete no reconocido', + 'ERROR_VALIDATION_EXPIRED' => "Error: Su licencia expiró hace ", + 'ERROR_VALIDATION_EXPIRED2' => " día(s). Por favor visite el '\"Administrador de Licencias\" en la pantalla de administrador para ingresar la nueva Clave. Si no ingresa una nueva clave de licencia dentro de los 30 días de expirada, ya no se le permitirá ingresar en la aplicación. ", + 'ERROR_VERSION_INCOMPATIBLE' => 'El archivo subido no es compatible con esta versión de SuiteCRM: ', + + 'LBL_BACK' => 'Atrás', + 'LBL_CANCEL' => 'Cancelar', + 'LBL_ACCEPT' => 'Acepto', + 'LBL_CHECKSYS_1' => 'Para que su instalación de SuiteCRM funcione correctamente, por favor asegúrese de que todos los items por verificar listados más abajo estén en verde. Si encuentra alguno en rojo, por favor realice los pasos necesarios para solucionarlos.

Para obtener ayuda por estos items, visite SuiteCRM.', + 'LBL_CHECKSYS_CACHE' => 'Sub-Directories de Cache Editables', + //'LBL_CHECKSYS_CALL_TIME' => 'PHP Allow Call Time Pass Reference Turned On', + 'LBL_DROP_DB_CONFIRM' => 'El nombre de Base de Datos provisto ya existe.
Usted puede
1. presionar el botón Atrás y seleccionar un nuevo nombre de base de datos
2. hacer click en Siguiente y continuar, aunque todas las tablas existentes en esta base de datos serán descartadas. Esto significa que sus tablas e información serán eliminadas ', + 'LBL_CHECKSYS_CALL_TIME' => 'PHP Allow Call Time Pass Reference desactivado', + 'LBL_CHECKSYS_COMPONENT' => 'Componente', + 'LBL_CHECKSYS_COMPONENT_OPTIONAL' => 'Componentes Opcionales', + 'LBL_CHECKSYS_CONFIG' => 'Archivo de Configuración editable (config.php)', + 'LBL_CHECKSYS_CONFIG_OVERRIDE' => 'Archivo de Configuración editable (config_override.php)', + 'LBL_CHECKSYS_CURL' => 'Módulo cURL', + 'LBL_CHECKSYS_SESSION_SAVE_PATH' => 'Ruta del Directorio de Sesión', + 'LBL_CHECKSYS_CUSTOM' => 'Directorio Custom editable', + 'LBL_CHECKSYS_DATA' => 'Subdirectorios de Data editables', + 'LBL_CHECKSYS_IMAP' => 'Módulo IMAP', + 'LBL_CHECKSYS_FASTCGI' => 'FastCGI', + 'LBL_CHECKSYS_MQGPC' => 'Magic Quotes GPC', + 'LBL_CHECKSYS_MBSTRING' => 'Módulo MB Strings', + 'LBL_CHECKSYS_MEM_OK' => 'OK (Sin Límite)', + 'LBL_CHECKSYS_MEM_UNLIMITED' => 'OK (Ilimitado)', + 'LBL_CHECKSYS_MEM' => 'Límite de Memoria PHP', + 'LBL_CHECKSYS_MODULE' => 'Subdirectorios y Archivos de módulos editables', + 'LBL_CHECKSYS_MYSQL_VERSION' => 'Versión MySQL', + 'LBL_CHECKSYS_NOT_AVAILABLE' => 'No disponible', + 'LBL_CHECKSYS_OK' => 'OK', + 'LBL_CHECKSYS_PHP_INI' => 'Ubicación de su archivo de configuración PHP (php.ini):', + 'LBL_CHECKSYS_PHP_OK' => 'OK (ver ', + 'LBL_CHECKSYS_PHPVER' => 'Versión de PHP', + 'LBL_CHECKSYS_IISVER' => 'Versión de IIS', + 'LBL_CHECKSYS_FASTCGI' => 'FastCGI', + 'LBL_CHECKSYS_RECHECK' => 'Volver a Verificar', + 'LBL_CHECKSYS_SAFE_MODE' => 'PHP Safe Mode desactivado', + 'LBL_CHECKSYS_SESSION' => 'Directorio de Sesión Editable (', + 'LBL_CHECKSYS_STATUS' => 'Estado', + 'LBL_CHECKSYS_TITLE' => 'Aceptación de Verificación del Sistema', + 'LBL_CHECKSYS_VER' => 'Encontrado: ( ver ', + 'LBL_CHECKSYS_XML' => 'XML Parsing', + 'LBL_CHECKSYS_ZLIB' => 'Módulo de Compresión ZLIB', + 'LBL_CHECKSYS_ZIP' => 'Módulo de manejo de ZIP', + 'LBL_CHECKSYS_PCRE' => 'Librería PCRE', + 'LBL_CHECKSYS_FIX_FILES' => 'Por favor corrija los siguientes archivos o directorios antes de continuar:', + 'LBL_CHECKSYS_FIX_MODULE_FILES' => 'Por favor corrija los siguientes directorios de módulos y archivos dentro de ellos antes de continuar:', + 'LBL_CHECKSYS_UPLOAD' => 'Directorio Upload Editable', + 'LBL_CLOSE' => 'Cerrar', + 'LBL_THREE' => '3', + 'LBL_CONFIRM_BE_CREATED' => 'creada', + 'LBL_CONFIRM_DB_TYPE' => 'Tipo de Base de Datos', + 'LBL_CONFIRM_DIRECTIONS' => 'Por favor confirme la siguiente configuración. Se desea cambiar alguno de los valores, haga click en "Atrás" para editar. De lo contrario haga click en "Siguiente" para comenzar la instalación.', + 'LBL_CONFIRM_LICENSE_TITLE' => 'Información de la Licencia', + 'LBL_CONFIRM_NOT' => 'no', + 'LBL_CONFIRM_TITLE' => 'Confirmar configuración', + 'LBL_CONFIRM_WILL' => 'será', + 'LBL_DBCONF_CREATE_DB' => 'Crear Base de Datos', + 'LBL_DBCONF_CREATE_USER' => 'Crear Usuario', + 'LBL_DBCONF_DB_DROP_CREATE_WARN' => 'Atención: Toda la información de SuiteCRM será eliminada
si se marca esta casilla.', + 'LBL_DBCONF_DB_DROP_CREATE' => 'Eliminar las tablas existentes y volver a crearlas?', + 'LBL_DBCONF_DB_DROP' => 'Eliminar Tablas', + 'LBL_DBCONF_DB_NAME' => 'Nombre de Base de Datos', + + + + + + 'LBL_DBCONF_DB_PASSWORD' => 'Contraseña del Usuario de Base de Datos', + 'LBL_DBCONF_DB_PASSWORD2' => 'Vuelva a Ingresar Contraseña del Usuario de Base de Datos', + 'LBL_DBCONF_DB_USER' => 'Nombre de Usuario de Base de Datos', + 'LBL_DBCONF_SUGAR_DB_USER' => 'Nombre de Usuario de Base de Datos', + 'LBL_DBCONF_DB_ADMIN_USER' => 'Nombre de Usuario del Administrador de Base de Datos', + 'LBL_DBCONF_DB_ADMIN_PASSWORD' => 'Contraseña del Administrador de Base de Datos', + 'LBL_DBCONF_DEMO_DATA' => 'Llenar la Base de Datos con Información de Prueba?', + 'LBL_DBCONF_DEMO_DATA_TITLE' => 'Seleccionar Información de Prueba', + 'LBL_DBCONF_HOST_NAME' => 'Nombre del Host', + 'LBL_DBCONF_HOST_INSTANCE' => 'Instancia del Host', + 'LBL_DBCONF_HOST_PORT' => 'Puerto', + 'LBL_DBCONF_INSTRUCTIONS' => 'Por favor ingrese la información de su configuración a continuación. Si no está seguro de lo que debe completar, le sugerimos que use los valores por defecto.', + 'LBL_DBCONF_MB_DEMO_DATA' => 'Usar texto multi-byte en la información de prueba?', + 'LBL_DBCONFIG_MSG2' => 'Nombre del Servidor Web o Equipo (Host) en la cual se encuentra la base de datos ( por ejemplo localhost o www.mydomain.com ):', + 'LBL_DBCONFIG_MSG3' => 'Nombre de la base de datos que contendrá la información de la instancia de SuiteCRM que está a punto de instalar:', + 'LBL_DBCONFIG_B_MSG1' => 'The username and password of a database administrator who can create database tables and users and who can write to the database is necessary in order to set up the SuiteCRM database.', + 'LBL_DBCONFIG_B_MSG1' => 'Para configurar la base de datos de SuiteCRM es necesario el nombre de usuario y contraseña de un administrador de base de datos que pueda crear las tablas, usuarios y escribir en ella.', + 'LBL_DBCONFIG_SECURITY' => 'Por razones de seguridad, se puede especificar un usuario exclusivo para conectar a la base de datos de SuiteCRM. Este usuario debe ener permisos para escribir, modificar y recuperar información de la base de datos de SuiteCRM que será creada para esta instancia. Este usuario puede ser el administrador de base de datos que se especificó más arriba, usted puede proveer uno nuevo o uno existente.', + 'LBL_DBCONFIG_AUTO_DD' => 'Hazlo por mi', + 'LBL_DBCONFIG_PROVIDE_DD' => 'Proveer usuario existente', + 'LBL_DBCONFIG_CREATE_DD' => 'Definir un usuario que se creará', + 'LBL_DBCONFIG_SAME_DD' => 'El mismo que el Administrador', + //'LBL_DBCONF_I18NFIX' => 'Apply database column expansion for varchar and char types (up to 255) for multi-byte data?', + 'LBL_FTS' => 'Búsqueda Full-Text', + 'LBL_FTS_INSTALLED' => 'Instalado', + 'LBL_FTS_INSTALLED_ERR1' => 'La característica de Búsqueda Full-Text no está instalada.', + 'LBL_FTS_INSTALLED_ERR2' => 'Usted puede realizar la instalación, pero no podrá utilizar la funcionalidad de Búsqueda Full-Text. Por favor consulte la guía de instalación de su servidor de base de datos para saber cómo hacer esto, o contacte a su Administrador.', + 'LBL_DBCONF_PRIV_PASS' => 'Contraseña del usuario privilegiado de la Base de Datos', + + 'LBL_DBCONF_PRIV_USER_2' => '¿La cuenta de base de datos de arriba es de un Usuario Privilegiado?', + 'LBL_DBCONF_PRIV_USER_DIRECTIONS' => 'Este usuario privilegiado de base de datos debe tener los permisos adecuados para crear una base de datos, eliminar/crear tablas, y crear un usuario. Este usuario privilegiado de base de datos sólo será utilizado para realizar las tareas necesarias durante el proceso de instalación. Si este usuario tiene permisos suficientes, también puede utilizarlo como usuario de base de datos.', + 'LBL_DBCONF_PRIV_USER' => 'Nombre del Usuario Privilegiado de Base de Datos', + 'LBL_DBCONF_TITLE' => 'Configuración de la Base de Datos', + 'LBL_DBCONF_TITLE_NAME' => 'Provea un Nombre de Base de Datos', + 'LBL_DBCONF_TITLE_USER_INFO' => 'Provea la información del usuario de la base de datos', + 'LBL_DISABLED_DESCRIPTION_2' => 'Después de realizado este cambio, podrá hacer click en el botón "Comenzar" de abajo para comenzar la instalación. Una vez finalizada la instalación, puede cambiar el valor de \'installer_locked\' a \'true\'.', + 'LBL_DISABLED_DESCRIPTION' => 'La instalación ya se ejecutó una vez. Como medida de seguridad se ha deshabilitado una segunda ejecución. Si está absolutamente seguro de que quiere volver a ejecutarla, por favor vaya a su archivo config.php y encuentre (o agregue) una variable llamada \'installer_locked\' y colóquela en \'false\'. La línea debería quedar así:', + + 'LBL_DISABLED_HELP_1' => 'Para ayuda con la instalación, por favor visite ', + 'LBL_DISABLED_HELP_LNK' => 'http://www.suitecrm.com/forums/', + 'LBL_DISABLED_HELP_2' => 'foro de soporte de SuiteCRM', + + 'LBL_DISABLED_TITLE_2' => 'La instalación de SuiteCRM ha sido deshabilitada', + 'LBL_DISABLED_TITLE' => 'Instalación de SuiteCRM Deshabilitada', + 'LBL_EMAIL_CHARSET_DESC' => 'Juego de Caracteres comunmente usado en su zona', + 'LBL_EMAIL_CHARSET_TITLE' => 'Configuración de Email Saliente', + 'LBL_EMAIL_CHARSET_CONF' => 'Juego de Caracteres para el Email Saliente ', + 'LBL_HELP' => 'Ayuda', + 'LBL_INSTALL' => 'Instalar', + 'LBL_INSTALL_TYPE_TITLE' => 'Opciones de Instalación', + 'LBL_INSTALL_TYPE_SUBTITLE' => 'Seleccione el Tipo de Instalación', + 'LBL_INSTALL_TYPE_TYPICAL' => ' Instalación Típica', + 'LBL_INSTALL_TYPE_CUSTOM' => ' Instalación Personalizada', + 'LBL_INSTALL_TYPE_MSG1' => 'La clave es necesaria para la funcionalidad general de la aplicación, pero no es necesaria para la instalación. No es necesario que ingrese la clave ahora, pero deberá proveerla después de haber instalado la aplicación.', + 'LBL_INSTALL_TYPE_MSG2' => 'Requiere información mínima para la instalación. Recomendada para usuarios nuevos.', + 'LBL_INSTALL_TYPE_MSG3' => 'Provee opciones adicionales a establecer durante la instalación. La mayor parte de estas opciones también están disponibles después de la instalación en la pantalla de administración. Recomendada para usuarios avanzados.', + 'LBL_LANG_1' => 'Para usar otro idioma diferente al idioma por defecto (US-English), puede subir e instalar un paquete de idioma en este momento. También podrá subir e instalar paquetes de idioma desde adentro de la aplicación. Si quiere omitir este paso, haga click en Siguiente.', + 'LBL_LANG_BUTTON_COMMIT' => 'Instalar', + 'LBL_LANG_BUTTON_REMOVE' => 'Quitar', + 'LBL_LANG_BUTTON_UNINSTALL' => 'Desinstalar', + 'LBL_LANG_BUTTON_UPLOAD' => 'Subir', + 'LBL_LANG_NO_PACKS' => 'ninguno', + + + + 'LBL_LANG_PACK_INSTALLED' => 'Se instalaron los siguientes paquetes de idioma: ', + 'LBL_LANG_PACK_READY' => 'Los siguientes paquetes de idioma están listos para ser instalados: ', + 'LBL_LANG_SUCCESS' => 'Se subió correctamente el paquete de idioma.', + 'LBL_LANG_TITLE' => 'Paquete de Idioma', + 'LBL_LAUNCHING_SILENT_INSTALL' => 'Instalando SuiteCRM. Este proceso puede tomar unos minutos.', + 'LBL_LANG_UPLOAD' => 'Subir un Paquete de Idioma', + 'LBL_LICENSE_ACCEPTANCE' => 'Aceptación de Licencia', + 'LBL_LICENSE_CHECKING' => 'Verificando la compatibilidad del sistema.', + 'LBL_LICENSE_CHKENV_HEADER' => 'Verificando el entorno', + 'LBL_LICENSE_CHKDB_HEADER' => 'Verificando las credenciales de BD.', + 'LBL_LICENSE_CHECK_PASSED' => 'El sistema cumplió los requisitos.', + 'LBL_LICENSE_REDIRECT' => 'Redireccionando en ', + 'LBL_LICENSE_DIRECTIONS' => 'Si tiene la información de su licencia, por favor ingrésela en los siguientes campos.', + 'LBL_LICENSE_DOWNLOAD_KEY' => 'Ingresar Clave de Descarga', + 'LBL_LICENSE_EXPIRY' => 'Fecha de Vencimiento', + 'LBL_LICENSE_I_ACCEPT' => 'Acepto', + 'LBL_LICENSE_NUM_USERS' => 'Cantidad de Usuarios', + 'LBL_LICENSE_OC_DIRECTIONS' => 'Por favor ingrese la cantidad de clientes offline adquiridos.', + 'LBL_LICENSE_OC_NUM' => 'Cantidad de Licencias de Clientes Offline', + 'LBL_LICENSE_OC' => 'Licencias de Clientes Offline', + 'LBL_LICENSE_PRINTABLE' => ' Versión Imprimible ', + 'LBL_PRINT_SUMM' => 'Imprimir Resumen', + 'LBL_LICENSE_TITLE_2' => 'Licencia SuiteCRM', + 'LBL_LICENSE_TITLE' => 'Información de Licencia', + 'LBL_LICENSE_USERS' => 'Licencias de Usuario', + + 'LBL_LOCALE_CURRENCY' => 'Opciones de Moneda', + 'LBL_LOCALE_CURR_DEFAULT' => 'Moneda por Defecto', + 'LBL_LOCALE_CURR_SYMBOL' => 'Símbolo de Moneda', + 'LBL_LOCALE_CURR_ISO' => 'Código de Moneda(ISO 4217)', + 'LBL_LOCALE_CURR_1000S' => 'Separador de Miles', + 'LBL_LOCALE_CURR_DECIMAL' => 'Separador Decimal', + 'LBL_LOCALE_CURR_EXAMPLE' => 'Ejemplo', + 'LBL_LOCALE_CURR_SIG_DIGITS' => 'Dígitos Significativos', + 'LBL_LOCALE_DATEF' => 'Formato de Fecha por Defecto', + 'LBL_LOCALE_DESC' => 'La configuración regional se verá reflejada globalmente en la instancia de SuiteCRM.', + 'LBL_LOCALE_EXPORT' => 'Juego de Caracteres para Importar/Exportar
(Email, .csv, vCard, PDF, importación de datos)', + 'LBL_LOCALE_EXPORT_DELIMITER' => 'Delimitador para Exportación (.csv)', + 'LBL_LOCALE_EXPORT_TITLE' => 'Opciones de Importación/Exportación', + 'LBL_LOCALE_LANG' => 'Idioma por Defecto', + 'LBL_LOCALE_NAMEF' => 'Formato de Nombre por Defecto', + 'LBL_LOCALE_NAMEF_DESC' => 's = saludo
f = nombre de pila
l = apellido', + 'LBL_LOCALE_NAME_FIRST' => 'David', + 'LBL_LOCALE_NAME_LAST' => 'Livingstone', + 'LBL_LOCALE_NAME_SALUTATION' => 'Dr.', + 'LBL_LOCALE_TIMEF' => 'Formato de Hora por Defecto', + 'LBL_LOCALE_TITLE' => 'Configuración Regional', + 'LBL_CUSTOMIZE_LOCALE' => 'Personalizar Configuración Regional', + 'LBL_LOCALE_UI' => 'Interfaz de Usuario', + + 'LBL_ML_ACTION' => 'Acción', + 'LBL_ML_DESCRIPTION' => 'Descripción', + 'LBL_ML_INSTALLED' => 'Fecha de Instalación', + 'LBL_ML_NAME' => 'Nombre', + 'LBL_ML_PUBLISHED' => 'Fecha de Publicación', + 'LBL_ML_TYPE' => 'Tipo', + 'LBL_ML_UNINSTALLABLE' => 'Desinstalable', + 'LBL_ML_VERSION' => 'Version', + 'LBL_MSSQL' => 'SQL Server', + 'LBL_MSSQL2' => 'SQL Server (FreeTDS)', + 'LBL_MSSQL_SQLSRV' => 'SQL Server (Microsoft SQL Server Driver para PHP)', + 'LBL_MYSQL' => 'MySQL', + 'LBL_MYSQLI' => 'MySQL (extensión mysqli)', + 'LBL_IBM_DB2' => 'IBM DB2', + 'LBL_NEXT' => 'Siguiente', + 'LBL_NO' => 'No', + 'LBL_ORACLE' => 'Oracle', + 'LBL_PERFORM_ADMIN_PASSWORD' => 'Estableciendo password de admin', + 'LBL_PERFORM_AUDIT_TABLE' => 'tabla de auditoría / ', + 'LBL_PERFORM_CONFIG_PHP' => 'Creando el archivo de configuración de SuiteCRM', + 'LBL_PERFORM_CREATE_DB_1' => 'Creando la base de datos ', + 'LBL_PERFORM_CREATE_DB_2' => ' en ', + 'LBL_PERFORM_CREATE_DB_USER' => 'Creando nombre de usuario y password de la Base de datos...', + 'LBL_PERFORM_CREATE_DEFAULT' => 'Creando información por defecto de SuiteCRM', + 'LBL_PERFORM_CREATE_LOCALHOST' => 'Creando nombre de usuario y password de base de datos para localhost...', + 'LBL_PERFORM_CREATE_RELATIONSHIPS' => 'Creando tablas de relación para suiteCRM', + 'LBL_PERFORM_CREATING' => 'creando / ', + 'LBL_PERFORM_DEFAULT_REPORTS' => 'Creando reportes por defecto', + 'LBL_PERFORM_DEFAULT_SCHEDULER' => 'Creando tareas planificadas por defecto', + 'LBL_PERFORM_DEFAULT_SETTINGS' => 'Insertando configuración por defecto', + 'LBL_PERFORM_DEFAULT_USERS' => 'Creando usuarios por defecto', + 'LBL_PERFORM_DEMO_DATA' => 'Llenando las tablas de la base de datos con Información de Prueba (esto puede tomar varios minutos)', + 'LBL_PERFORM_DONE' => 'listo
', + 'LBL_PERFORM_DROPPING' => 'eliminando / ', + 'LBL_PERFORM_FINISH' => 'Finalizar', + 'LBL_PERFORM_LICENSE_SETTINGS' => 'Actualizando la información de la licencia', + 'LBL_PERFORM_OUTRO_1' => 'La configuración de SuiteCRM ', + 'LBL_PERFORM_OUTRO_2' => ' ha finalizado!', + 'LBL_PERFORM_OUTRO_3' => 'Tiempo total: ', + 'LBL_PERFORM_OUTRO_4' => ' segundos.', + 'LBL_PERFORM_OUTRO_5' => 'Memoria utilizada (aprox): ', + 'LBL_PERFORM_OUTRO_6' => ' bytes.', + 'LBL_PERFORM_OUTRO_7' => 'Su sistema ya está instalado y configurado para ser utilizado.', + 'LBL_PERFORM_REL_META' => 'metadatos de relaciones ... ', + 'LBL_PERFORM_SUCCESS' => 'Éxito!', + 'LBL_PERFORM_TABLES' => 'Creando las tablas de la aplicación, tablas de auditoría y metadatos de relaciones', + 'LBL_PERFORM_TITLE' => 'Configurar', + 'LBL_PRINT' => 'Imprimir', + 'LBL_REG_CONF_1' => 'Por favor complete el breve formulario a continuación para recibir anuncios de productos, novedades de capacitaciones, ofertas especiales e invitaciones epeciales a eventos de SuiteCRM. No vendemos, alquilamos, compartimos ni distribuimos de ninguna forma la información recolectada aquí.', + 'LBL_REG_CONF_2' => 'Su nombre y dirección de email son los únicos campos requeridos para la registración. El resto de los campos son opcionales, pero de mucha ayuda. No vendemos, alquilamos, compartimos ni distribuimos de ninguna forma la información recolectada aquí.', + 'LBL_REG_CONF_3' => 'Gracias por registrarse. Haga click en el botón Finalizar para ingresar a SuiteCRM. Necesitará ingresar por primera vez utilizando el nombre de usuario "admin" y la contraseña que ingresó en el paso 2.', + 'LBL_REG_TITLE' => 'Registración', + 'LBL_REG_NO_THANKS' => 'No Gracias', + 'LBL_REG_SKIP_THIS_STEP' => 'Omitir este Paso', + 'LBL_REQUIRED' => '* Campo Requerido', + + 'LBL_SITECFG_ADMIN_Name' => 'Nombre del Administrador de SuiteCRM', + 'LBL_SITECFG_ADMIN_PASS_2' => 'Vuelva a Ingresar la Contraseña del Usuario Administrador', + 'LBL_SITECFG_ADMIN_PASS_WARN' => 'Atención: Esto sobreescribirá la contraseña del administrador de cualquier instalación anterior.', + 'LBL_SITECFG_ADMIN_PASS' => 'Contraseña del Usuario Administrador', + 'LBL_SITECFG_APP_ID' => 'ID de la Aplicación', + 'LBL_SITECFG_CUSTOM_ID_DIRECTIONS' => 'Si se selecciona, deberá proveer un ID de Aplicación para sobreescribir el ID autogenerado. El ID asegura que las sesiones de una instancia de SuiteCRM no sean usadas por otras instancia. Si tiene un cluster de instalaciones de SuiteCRM, todas deberían compartir el mismo ID de aplicación.', + 'LBL_SITECFG_CUSTOM_ID' => 'Provea su propio ID de Aplicación', + 'LBL_SITECFG_CUSTOM_LOG_DIRECTIONS' => 'Si se selecciona, deberá especificar un directorio de logs para sobreescribir el directorio por defecto del log de SuiteCRM. Sin importar dónde esté ubicado el archivo de log, el acceso a través de navegador se deberá restringir utilizando una redirección .htacces.', + 'LBL_SITECFG_CUSTOM_LOG' => 'Utilizar un Directorio Personalizado para Logs', + 'LBL_SITECFG_CUSTOM_SESSION_DIRECTIONS' => 'Si se selecciona, deberá proveer un directorio seguro para almacenar la información de sesiones de SuiteCRM. Esto se puede hacer para evitar que la información de la sesión sea vulnerada en servidores compartidos.', + 'LBL_SITECFG_CUSTOM_SESSION' => 'Utilizar un Directorio Personalizado para las Sesiones de SuiteCRM', + 'LBL_SITECFG_DIRECTIONS' => 'Por favor ingrese la configuración de su sitio a continuación. Si no está seguro de los campos, le sugerimos utilizar los valores por defecto.', + 'LBL_SITECFG_FIX_ERRORS' => 'Por favor corrija los siguientes errores antes de continuar:', + 'LBL_SITECFG_LOG_DIR' => 'Directorio de Log', + 'LBL_SITECFG_SESSION_PATH' => 'Ruta del Directorio de Sesiones
(debe ser editable)', + 'LBL_SITECFG_SITE_SECURITY' => 'Seleccionar Opciones de Seguridad', + 'LBL_SITECFG_SUGAR_UP_DIRECTIONS' => 'Si se selecciona, el sistema periódicamente verificará por actualizaciones de la aplicación.', + 'LBL_SITECFG_SUGAR_UP' => '¿Verificar Automáticamente nuevas Actualizaciones?', + 'LBL_SITECFG_SUGAR_UPDATES' => 'Configuración de Actualizaciones de SuiteCRM', + 'LBL_SITECFG_TITLE' => 'Configuración del Sitio', + 'LBL_SITECFG_TITLE2' => 'Identificar el Usuario Administrador', + 'LBL_SITECFG_SECURITY_TITLE' => 'Seguridad del Sitio', + 'LBL_SITECFG_URL' => 'URL de la Instancia de SuiteCRM', + 'LBL_SITECFG_USE_DEFAULTS' => '¿Utilizar valores por defecto?', + 'LBL_SITECFG_ANONSTATS' => '¿Enviar estadísticas anónimas de uso?', + 'LBL_SITECFG_ANONSTATS_DIRECTIONS' => 'Si se selecciona, SuiteCRM enviará estadísticas anónimas acerca de su instalación a SuiteCRM Inc. cada vez que su sistema verifique nuevas versiones. Esta información nos ayudará a mejorar nuestra comprensión de cómo la aplicación es utilizada, y guiará las mejoras del producto.', + 'LBL_SITECFG_URL_MSG' => 'Ingrese la URL que será utilizada para acceder a la instancia de SuiteCRM después de la instalación. La URL también va a ser utilizada como base para para las URL en las páginas de la aplicación. La URL puede incluir el nombre del servidor web, nombre del equipo o dirección IP.', + 'LBL_SITECFG_SYS_NAME_MSG' => 'Ingrese un nombre para su sistema. El nombre se mostrará en la barra de título del navegador cuando los usuarios visiten la aplicación SuiteCRM.', + 'LBL_SITECFG_PASSWORD_MSG' => 'Después de la instalación, necesitará utilizar el usuario administrador de SuiteCRM (nombre por defecto = admin) para ingresar a la instancia de SuiteCRM. Ingrese una contraseña para este usuario administrador. Esta contraseña puede ser cambiada después de ingresar por primera vez. También puede ingresar otro nombre de usuario diferente al valor por defecto provisto.', + 'LBL_SITECFG_COLLATION_MSG' => 'Seleccione la configuración de collation (ordenamiento de los datos) para su sistema. Esta configuración creará las tablas con el idioma específico que usted usa. En caso de que su idioma no requiera una configuración especial, utilice el valor por defecto.', + 'LBL_SPRITE_SUPPORT' => 'Soporte de Sprite', + 'LBL_SYSTEM_CREDS' => 'Credenciales del Sistema', + 'LBL_SYSTEM_ENV' => 'Entorno del Sistema', + 'LBL_START' => 'Comenzar', + 'LBL_SHOW_PASS' => 'Mostrar Contraseñas', + 'LBL_HIDE_PASS' => 'Ocultar Contraseñas', + 'LBL_HIDDEN' => '(oculto)', +// 'LBL_NO_THANKS' => 'Continue to installer', + 'LBL_CHOOSE_LANG' => 'Seleccione su idioma', + 'LBL_STEP' => 'Paso', + 'LBL_TITLE_WELCOME' => 'Bienvenido a SuiteCRM ', + 'LBL_WELCOME_1' => 'Este instalador crea las tablas de la base de datos de SuiteCRM y establece los valores de configuración que ustede necesita para comenzar. El proceso completo debería tomar aproximadamente diez minutos.', + 'LBL_WELCOME_2' => 'Para obtener documentación de la instalación, por favor visite SuiteCRM.

También podrá encontrar ayuda de la Comunidad de SuiteCRM en los Foros de SuiteCRM.', + //welcome page variables + 'LBL_TITLE_ARE_YOU_READY' => 'Está listo para instalar?', + 'REQUIRED_SYS_COMP' => 'Componentes de Sistema Requeridos', + 'REQUIRED_SYS_COMP_MSG' => + 'Antes de comenzar, por favor asegúrese de que tiene las versiones soportadas de los siguientes componentes del sistema:
+
    +
  • Base de Datos/Sistema Manejador de Base de Datos (Ejemplos: MariaDB, MySQL or SQL Server)
  • +
  • Servidor Web (Apache, IIS)
  • +
+ Consulte la Matriz de Compatibilidad en las Notas de la Versión para encontrar + componentes de sistema compatibles para la versión de SuiteCRM que está instalando
', + 'REQUIRED_SYS_CHK' => 'Chequeo Inicial del Sistema', + 'REQUIRED_SYS_CHK_MSG' => + 'Al comenzar el proceso de instalacion, se realizará un chequeo de sistema en el servidor web en el cual están ubicados los archivos de SuiteCRM con el objetivo de asegurar que el sistema está correctamente configurado y que tiene todos los componentes necesarios para completar la instalación exitosamente.

+ El sistema chequea todo lo siguiente:
+
    +
  • Versión de PHP – debe ser compatible con la aplicación
  • +
  • Variables de Sesión – deben funcionar correctamente
  • +
  • MB Strings – debe estar instalada y habilitada en php.ini
  • + +
  • Soporte de Base de Datos – debe existir para MariaDB, MySQL o SQL Server
  • + +
  • Config.php – debe existir y debe tener los permisos apropiados para ser editable
  • +
  • Los siguientes archivos de SuiteCRM deben ser editables:
    • /custom
    • +
    • /cache
    • +
    • /modules
    • +
    • /upload
+ Si la verificación falla, no podrá continuar con la instalación. Se le mostrará un mensaje de error, explicando por qué su sistema no pasó la verificación. + Después de hacer los cambios necesarios, podrá realizar nuevamente la verificación del sistema para continuar con la instalación.
', + 'REQUIRED_INSTALLTYPE' => 'Instalación Típica o Personalizada', + 'REQUIRED_INSTALLTYPE_MSG' => + 'Después de realizado el chequeo del sistema, puede seleccionar entre instalación Típica o Personalizada..

+ Para ambas Típica y Personalizada, necesitará saber lo siguiente:
+
    +
  • Tipo de Base de Datos que albergará la información de SuiteCRM
    • Tipos de Base de Datos Compatibles: MariaDB, MySQL o SQL Server.

  • +
  • Nombre del servidor web o equipo (host) en el cual se encuentra la base de datos +
    • Puede ser localhost si la base de datos se encuentra en su equipo local, o en el mismo servidor web o equipo que los archivos de SuiteCRM.

  • +
  • Nombre de la base de datos que desea utilizar para albergar la información de SuiteCRM
  • +
      +
    • Quizás usted ya tenga una base de datos existente que desearía utilizar. Si usted provee el nombre de una base de datos existente, se eliminarán las tablas existentes de la base de datos durante la instalación cuando se defina el nuevo esquema para la base de datos de SuiteCRM.
    • +
    • Si todavía no posee una base de datos, el nombre que usted provea será utilizado durante la instalación para la nueva base de datos que sea creada para la instancia..

    • +
    +
  • Nombre y contraseña del administrador de la base de datos
    • El administrador de baes de datos debería tener permisos para crear tablas, usuarios y escribir en la base de datos.
    • Puede que sea necesario contactar a su administrador de base de datos para que le provea esta información si la base de datos no se encuentra en su equipo local y/o si usted no es el administrador de base de datos.

  • +
  • Nombre de usuario de base de datos y contraseña +
  • +
      +
    • El usuario puede ser el administrador de la base de datos, o puede proveer el nombre de otro usuario existente de la base de datos.
    • +
    • Si desea crear un nuevo usuario de base de datos para este propósito, deberá proveer un nuevo nombre de usuario y contraseña, y el usuario será creado durante la instalación.
    • +

+ + Para la configuración Personalizada, también deberá saber lo siguiente:
+

    +
  • URL que será utilizada para acceder a la instancia de SugarCRM después de ser instalada. + Esta URL puede incluir el nombre o dirección IP del servidor o equipo.

  • +
  • [Opcional] Ruta del directorio de sesión si desea utilizar un directorio personalizado para la información de SuiteCRM con el objetivo de evitar vulnerabilidad en servidores compartidos.

  • +
  • [Opcional] Ruta personalizada del directorio de log si desea sobreescribir el directorio por defecto utilizado para los archivos de log de SuiteCRM.

  • +
  • [Opcional] ID de Aplicación si desea sobreescribir el ID autogenerado para garantizar que las sesiones de una instancia de SuiteCRM no son utilizadas por otras instancias.

  • +
  • Set de Caracteres comunmente utilizado según su zona.

+ Para obtener información más detallada, por favor consulte la Guía de Instalación. + ', + + 'LBL_WELCOME_PLEASE_READ_BELOW' => 'Por favor lea la siguiente información importante antes de continuar con la instalación . La información le ayudará a determinar si está listo o no para instalar la aplicación en este momento.', + + 'LBL_WELCOME_CHOOSE_LANGUAGE' => 'Seleccione su idioma', + 'LBL_WELCOME_SETUP_WIZARD' => 'Asistente de Configuración', + 'LBL_WELCOME_TITLE_WELCOME' => 'Bienvenido a SuiteCRM ', + 'LBL_WELCOME_TITLE' => 'Asistente de Configuración de SuiteCRM', + 'LBL_WIZARD_TITLE' => 'Asistente de Configuración de SuiteCRM: ', + 'LBL_YES' => 'Sí', + 'LBL_YES_MULTI' => 'Sí - Multibyte', + // OOTB Scheduler Job Names: + 'LBL_OOTB_WORKFLOW' => 'Procesar Tareas de Workflow', + 'LBL_OOTB_REPORTS' => 'Ejecutar Generación de Reportes Planificados', + 'LBL_OOTB_IE' => 'Verificar el Correo Entrante', + 'LBL_OOTB_BOUNCE' => 'Procesar Rebotes de Emails de Campañas', + 'LBL_OOTB_CAMPAIGN' => 'Procesar Emails de Campañas', + 'LBL_OOTB_PRUNE' => 'Limpiar la Base de Datos el 1er día del Mes', + 'LBL_OOTB_TRACKER' => 'Limpiar las Tablas de Seguimiento', + 'LBL_OOTB_SUGARFEEDS' => 'Limpiar las Tablas de SugarFeed', + 'LBL_OOTB_SEND_EMAIL_REMINDERS' => 'Ejecutar Notificaciones de Recordatorios por Email', + 'LBL_UPDATE_TRACKER_SESSIONS' => 'Actualizar la Tabla tracker_sessions', + 'LBL_OOTB_CLEANUP_QUEUE' => 'Limpiar Cola de Tareas', + 'LBL_OOTB_REMOVE_DOCUMENTS_FROM_FS' => 'Quitar Documentos del Filesystem', + + + 'LBL_PATCHES_TITLE' => 'Instalar los Ultimos Parches', + 'LBL_MODULE_TITLE' => 'Instalar Paquetes de Idioma', + 'LBL_PATCH_1' => 'Si desea omitir este paso, haga click en Siguiente.', + 'LBL_PATCH_TITLE' => 'Parche del Sistema', + 'LBL_PATCH_READY' => 'Los siguientes parches están listos para ser instalados:', + 'LBL_SESSION_ERR_DESCRIPTION' => "SuiteCRM depende de las Sesiones de PHP para almacenar información importante mientras se conecta al servidor web. Su instalación de PHP no tiene la información de Sesiones correctamente configurada. +

Un problema común de configuración es que la directiva 'session.save_path' no está señalando un directorio válido.
+
Por favor corrija su configuración PHP en el archivo php.ini ubicado a continuación.", + 'LBL_SESSION_ERR_TITLE' => 'Error de Configuración de Sesiones PHP', + 'LBL_SYSTEM_NAME'=>'Nombre del Sistema', + 'LBL_COLLATION' => 'Configuración de Collation', + 'LBL_REQUIRED_SYSTEM_NAME'=>'Provea un Nombre de Sistema para su instancia SuiteCRM.', + 'LBL_PATCH_UPLOAD' => 'Seleccione un archivo de parche de su equipo local', + 'LBL_INCOMPATIBLE_PHP_VERSION' => 'Se requiere Php versión 5 o superior.', + 'LBL_MINIMUM_PHP_VERSION' => 'La versión mínima de PHP requerida es 5.1.0. La versión recomendada es 5.2.x.', + 'LBL_YOUR_PHP_VERSION' => '(Su versión actual es ', + 'LBL_RECOMMENDED_PHP_VERSION' =>' La versión recomendada es 5.2.x)', + 'LBL_BACKWARD_COMPATIBILITY_ON' => 'El modo Compatibilidad con versiones anteriores de PHP está activado. Establezca zend.ze1_compatibility_mode en Off para poder continuar.', + + 'advanced_password_new_account_email' => array( + 'subject' => 'Información de la Nueva Cuenta de Usuario', + 'description' => 'Esta plantilla es utilizada cuando un Administrador de Sistema envía una nueva contraseña a un usuario.', + 'body' => '

Aquí está su nuevo nombre de usuario y contraseña temporal:

Nombre de Usuario : $contact_user_user_name

Contraseña : $contact_user_user_hash


$config_site_url


Después de ingresar utilizando la contraseña de arriba, puede que se le pida cambiar la contraseña por una de su propia elección.

', + 'txt_body' => +' +Aquí está su nuevo nombre de usuario y contraseña temporal: +Nombre de Usuario : $contact_user_user_name +Contraseña : $contact_user_user_hash + +$config_site_url + +Después de ingresar utilizando la contraseña de arriba, puede que se le pida cambiar la contraseña por una de su propia elección.', + 'name' => 'Email de contraseña generada por el sistema', + ), + 'advanced_password_forgot_password_email' => array( + 'subject' => 'Reestablecer su contraseña', + 'description' => "Esta plantilla es utilizada para enviarle un enlace al usuario que al cliquearse reestablece la contraseña de la cuenta del usuario.", + 'body' => '

Recientemente ($contact_user_pwd_last_changed) ha requerido reestablecer la contraseña de su cuenta.

Haga click en el siguiente enlace para reestablecer su contraseña:

$contact_user_link_guid

', + 'txt_body' => +' +Recientemente ($contact_user_pwd_last_changed) ha requerido reestablecer la contraseña de su cuenta. + +Haga click en el siguiente enlace para reestablecer su contraseña: + +$contact_user_link_guid', + 'name' => 'Email de Contraseña Olvidada', + ), +); + +?> From c0b5e8c5eb0a6ab06d7187a4d6476b102586eb90 Mon Sep 17 00:00:00 2001 From: Jorge Obeaga Date: Fri, 22 Nov 2013 18:01:12 -0300 Subject: [PATCH 004/223] Translations on AOP, AOR, AOS, AOW and other modules --- .../language/application/es_es.lang.php | 8 +- .../AOP_Case_Events/language/es_es.lang.php | 59 ++++++++++ .../AOP_Case_Updates/language/es_es.lang.php | 62 ++++++++++ modules/AOR_Charts/language/es_es.lang.php | 57 ++++++++++ .../AOR_Conditions/language/es_es.lang.php | 65 +++++++++++ modules/AOR_Fields/language/es_es.lang.php | 68 +++++++++++ modules/AOR_Reports/language/es_es.lang.php | 64 +++++++++++ modules/AOS_Contracts/language/es_es.lang.php | 37 +++++- modules/AOS_Invoices/language/es_es.lang.php | 30 +++-- .../AOS_PDF_Templates/language/es_es.lang.php | 31 +++-- .../language/es_es.lang.php | 74 ++++++++++++ modules/AOS_Products/language/es_es.lang.php | 7 +- .../language/es_es.lang.php | 4 + modules/AOS_Quotes/language/es_es.lang.php | 27 +++-- modules/AOW_Actions/language/es_es.lang.php | 60 ++++++++++ .../AOW_Conditions/language/es_es.lang.php | 49 ++++++++ modules/AOW_Processed/language/es_es.lang.php | 69 +++++++++++ modules/AOW_WorkFlow/language/es_es.lang.php | 67 +++++++++++ .../Administration/language/es_es.lang.php | 12 +- modules/Cases/language/es_es.lang.php | 3 + modules/FP_events/language/es_es.lang.php | 107 ++++++++++++++++++ 21 files changed, 917 insertions(+), 43 deletions(-) create mode 100644 modules/AOP_Case_Events/language/es_es.lang.php create mode 100644 modules/AOP_Case_Updates/language/es_es.lang.php create mode 100644 modules/AOR_Charts/language/es_es.lang.php create mode 100644 modules/AOR_Conditions/language/es_es.lang.php create mode 100644 modules/AOR_Fields/language/es_es.lang.php create mode 100644 modules/AOR_Reports/language/es_es.lang.php create mode 100644 modules/AOS_Product_Categories/language/es_es.lang.php create mode 100644 modules/AOW_Actions/language/es_es.lang.php create mode 100644 modules/AOW_Conditions/language/es_es.lang.php create mode 100644 modules/AOW_Processed/language/es_es.lang.php create mode 100644 modules/AOW_WorkFlow/language/es_es.lang.php create mode 100644 modules/FP_events/language/es_es.lang.php diff --git a/include/SugarObjects/templates/company/language/application/es_es.lang.php b/include/SugarObjects/templates/company/language/application/es_es.lang.php index 3e03a4c1b2c..342d142fcde 100644 --- a/include/SugarObjects/templates/company/language/application/es_es.lang.php +++ b/include/SugarObjects/templates/company/language/application/es_es.lang.php @@ -47,10 +47,10 @@ $app_list_strings['_type_dom'] = array ( '' => '', - 'Analyst' => NULL, - 'Competitor' => NULL, - 'Customer' => NULL, - 'Integrator' => NULL, + 'Analyst' => 'Analista', + 'Competitor' => 'Competidor', + 'Customer' => 'Cliente', + 'Integrator' => 'Integrador', 'Investor' => 'Inversor', 'Partner' => 'Partner', 'Press' => 'Prensa', diff --git a/modules/AOP_Case_Events/language/es_es.lang.php b/modules/AOP_Case_Events/language/es_es.lang.php new file mode 100644 index 00000000000..e7def1f9978 --- /dev/null +++ b/modules/AOP_Case_Events/language/es_es.lang.php @@ -0,0 +1,59 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + 'LBL_LIST_FORM_TITLE' => 'Lista de Eventos de Casos', + 'LBL_MODULE_NAME' => 'Eventos de Casos', + 'LBL_MODULE_TITLE' => 'Eventos de Casos', + 'LBL_HOMEPAGE_TITLE' => 'Mis Eventos de Casos', + 'LNK_NEW_RECORD' => 'Crear Eventos de Casos', + 'LNK_LIST' => 'Ver Eventos de Casos', + 'LNK_IMPORT_AOP_AOP_CASE_EVENTS' => 'Importer Eventos de Casos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Eventos de Casos', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOP_AOP_CASE_EVENTS_SUBPANEL_TITLE' => 'Eventos de Casos', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Evento de Casos', + 'LNK_IMPORT_AOP_CASE_EVENTS' => 'Importar Eventos de Casos', + 'LBL_AOP_CASE_EVENTS_SUBPANEL_TITLE' => 'Eventos de Casos', + 'LBL_CASE_NAME' => 'Caso', +); \ No newline at end of file diff --git a/modules/AOP_Case_Updates/language/es_es.lang.php b/modules/AOP_Case_Updates/language/es_es.lang.php new file mode 100644 index 00000000000..39d9e8e5833 --- /dev/null +++ b/modules/AOP_Case_Updates/language/es_es.lang.php @@ -0,0 +1,62 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Actualiazciones de Casos', + 'LBL_MODULE_NAME' => 'Actualiazciones de Casos', + 'LBL_MODULE_TITLE' => 'Actualiazciones de Casos', + 'LBL_HOMEPAGE_TITLE' => 'Mis Actualiazciones de Casos', + 'LNK_NEW_RECORD' => 'Crear Actualiazciones de Casos', + 'LNK_LIST' => 'Ver Actualiazciones de Casos', + 'LNK_IMPORT_AOP_AOP_CASE_UPDATES' => 'Importar Actualiazciones de Casos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Actualiazciones de Casos', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOP_AOP_CASE_UPDATES_SUBPANEL_TITLE' => 'Actualiazciones de Casos', + 'LBL_NEW_FORM_TITLE' => 'Nueva Actualiazción de Caso', + 'LNK_IMPORT_AOP_CASE_UPDATES' => 'Importar Actualiazciones de Casos', + 'LBL_AOP_CASE_UPDATES_SUBPANEL_TITLE' => 'Actualiazciones de Casos', + 'LBL_CASE_NAME' => 'Caso', + 'LBL_CONTACT_NAME' => 'Contacto', + 'LBL_INTERNAL' => 'Actualización Interna', +); \ No newline at end of file diff --git a/modules/AOR_Charts/language/es_es.lang.php b/modules/AOR_Charts/language/es_es.lang.php new file mode 100644 index 00000000000..3023b113aa2 --- /dev/null +++ b/modules/AOR_Charts/language/es_es.lang.php @@ -0,0 +1,57 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Gráficos', + 'LBL_MODULE_NAME' => 'Gráficos', + 'LBL_MODULE_TITLE' => 'Gráficos', + 'LBL_HOMEPAGE_TITLE' => 'Mis Gráficos', + 'LNK_NEW_RECORD' => 'Crear Gráficos', + 'LNK_LIST' => 'Ver Gráficos', + 'LNK_IMPORT_AOR_CHARTS' => 'Importar Gráficos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Gráficos', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Gráficos', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOR_CHARTS_SUBPANEL_TITLE' => 'Gráficos', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Gráfico', +); diff --git a/modules/AOR_Conditions/language/es_es.lang.php b/modules/AOR_Conditions/language/es_es.lang.php new file mode 100644 index 00000000000..f9adf61fd95 --- /dev/null +++ b/modules/AOR_Conditions/language/es_es.lang.php @@ -0,0 +1,65 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Condiciones List', + 'LBL_MODULE_NAME' => 'Condiciones', + 'LBL_MODULE_TITLE' => 'Condiciones', + 'LBL_HOMEPAGE_TITLE' => 'Mis Condiciones', + 'LNK_NEW_RECORD' => 'Crear Condiciones', + 'LNK_LIST' => 'Ver Condiciones', + 'LNK_IMPORT_AOR_Condiciones' => 'Importar Condiciones', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Condiciones', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOR_Condiciones_SUBPANEL_TITLE' => 'Condiciones', + 'LBL_NEW_FORM_TITLE' => 'Nueva Condición', + 'LBL_MODULE_PATH' => 'Módulo', + 'LBL_FIELD' => 'Campo', + 'LBL_OPERATOR' => 'Operador', + 'LBL_VALUE_TYPE' => 'Tipo', + 'LBL_VALUE' => 'Valor', + 'LBL_ORDER' => 'Orden', + 'LBL_CONDITION_OPERATOR' => 'Operador de Condición', + 'LBL_AOR_REPORT_ID' => 'ID de Reporte', +); diff --git a/modules/AOR_Fields/language/es_es.lang.php b/modules/AOR_Fields/language/es_es.lang.php new file mode 100644 index 00000000000..4a4a75030c2 --- /dev/null +++ b/modules/AOR_Fields/language/es_es.lang.php @@ -0,0 +1,68 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + 'LBL_LIST_FORM_TITLE' => 'Lista de Campos', + 'LBL_MODULE_NAME' => 'Campos', + 'LBL_MODULE_TITLE' => 'Campos', + 'LBL_HOMEPAGE_TITLE' => 'Mis Campos', + 'LNK_NEW_RECORD' => 'Crear Campos', + 'LNK_LIST' => 'Ver Campos', + 'LNK_IMPORT_AOR_Campos' => 'Importar Campos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Campos', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOR_Campos_SUBPANEL_TITLE' => 'Campos', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Campo', + 'LBL_ORDER' => 'Orden', + 'LBL_MODULE_PATH' => 'Módulo', + 'LBL_FIELD' => 'Campo', + 'LBL_DISPLAY' => 'Mostrar', + 'LBL_LINK' => 'Enlace', + 'LBL_LABEL' => 'Etiqueta', + 'LBL_FUNCTION' => 'Función', + 'LBL_SORT' => 'Orden', + 'LBL_SORT_ORDER' => 'Criterio de Orden', + 'LBL_GROUP' => 'Grupo', + 'LBL_GROUP_ORDER' => 'Orden de Grupo', + 'LBL_AUDIT_TABLE' => 'Tabla de Auditoría', +); diff --git a/modules/AOR_Reports/language/es_es.lang.php b/modules/AOR_Reports/language/es_es.lang.php new file mode 100644 index 00000000000..c3bf0990830 --- /dev/null +++ b/modules/AOR_Reports/language/es_es.lang.php @@ -0,0 +1,64 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + 'LBL_LIST_FORM_TITLE' => 'Lista de Reportes', + 'LBL_MODULE_NAME' => 'Reportes', + 'LBL_MODULE_TITLE' => 'Reportes', + 'LBL_HOMEPAGE_TITLE' => 'Mis Reportes', + 'LNK_NEW_RECORD' => 'Crear Reporte', + 'LNK_LIST' => 'Ver Reportes', + 'LNK_IMPORT_AOR_Reportes' => 'Importar Reportes', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Reportes', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOR_Reportes_SUBPANEL_TITLE' => 'Reportes', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Reporte', + 'LBL_REPORT_MODULE' => 'Módulo Reporteado', + 'LBL_FIELD_LINES' => 'Campos Visualizados', + 'LBL_ADD_FIELD' => 'Agregar Campo', + 'LBL_CONDITION_LINES' => 'Condiciones', + 'LBL_ADD_CONDITION' => 'Agregar Condición', + 'LBL_EXPORT' => 'Exportar', + 'LBL_DOWNLOAD_PDF' => 'Descargar PDF', + 'LBL_ADD_TO_PROSPECT_LIST' => 'Agregar a Lista de Público Objetivo', +); diff --git a/modules/AOS_Contracts/language/es_es.lang.php b/modules/AOS_Contracts/language/es_es.lang.php index 6ba4ed6ac3c..90c084d419a 100755 --- a/modules/AOS_Contracts/language/es_es.lang.php +++ b/modules/AOS_Contracts/language/es_es.lang.php @@ -65,6 +65,41 @@ 'LBL_RENEWAL_REMINDER_DATE' => 'Fecha de Recordatorio de Renovación', 'LBL_CONTRACT_TYPE' => 'Tipo de Contrato', - 'LBL_CONTACT' => 'Contact', + 'LBL_CONTACT' => 'Contacto', ); + +// DISYTEL: Additional translations +$mod_strings['LBL_ADD_GROUP'] = 'Agregar Grupo'; +$mod_strings['LBL_DELETE_GROUP'] = 'Eliminar Grupo'; +$mod_strings['LBL_GROUP_NAME'] = 'Nombre del Grupo'; +$mod_strings['LBL_GROUP_TOTAL'] = 'Total del Grupo'; +$mod_strings['LBL_PRODUCT_QUANITY'] = 'Cantidad'; +$mod_strings['LBL_PRODUCT_NAME'] = 'Producto'; +$mod_strings['LBL_PART_NUMBER'] = 'Nro de Parte'; +$mod_strings['LBL_PRODUCT_NOTE'] = 'Nota'; +$mod_strings['LBL_PRODUCT_DESCRIPTION'] = 'Descripción'; +$mod_strings['LBL_LIST_PRICE'] = 'Lista'; +$mod_strings['LBL_DISCOUNT_TYPE'] = 'Tipo'; +$mod_strings['LBL_DISCOUNT_AMT'] = 'Descuento'; +$mod_strings['LBL_UNIT_PRICE'] = 'Precio de Venta'; +$mod_strings['LBL_TOTAL_PRICE'] = 'Total'; +$mod_strings['LBL_VAT'] = 'Impuesto'; +$mod_strings['LBL_VAT_AMT'] = 'Monto Impuesto'; +$mod_strings['LBL_SERVICE_NAME'] = 'Servicio'; +$mod_strings['LBL_SERVICE_LIST_PRICE'] = 'Lista'; +$mod_strings['LBL_SERVICE_PRICE'] = 'Precio de Venta'; +$mod_strings['LBL_SERVICE_DISCOUNT'] = 'Descuento'; +$mod_strings['LBL_LINE_ITEMS'] = 'Items'; +$mod_strings['LBL_SUBTOTAL_AMOUNT'] = 'Subtotal'; +$mod_strings['LBL_DISCOUNT_AMOUNT'] = 'Descuento'; +$mod_strings['LBL_TAX_AMOUNT'] = 'Impuesto'; +$mod_strings['LBL_SHIPPING_AMOUNT'] = 'Envío'; +$mod_strings['LBL_TOTAL_AMT'] = 'Total'; +$mod_strings['LBL_GRAND_TOTAL'] = 'Gran Total'; +$mod_strings['LBL_SHIPPING_TAX'] = 'Impuestos de Envío'; +$mod_strings['LBL_SHIPPING_TAX_AMT'] = 'Impuesto de Envío'; +$mod_strings['LBL_ADD_PRODUCT_LINE'] = 'Agregar Línea de Producto'; +$mod_strings['LBL_ADD_SERVICE_LINE'] = 'Agregar Línea de Servicio'; + + ?> diff --git a/modules/AOS_Invoices/language/es_es.lang.php b/modules/AOS_Invoices/language/es_es.lang.php index 57692a8bb89..75abd9f6fbc 100755 --- a/modules/AOS_Invoices/language/es_es.lang.php +++ b/modules/AOS_Invoices/language/es_es.lang.php @@ -103,7 +103,7 @@ 'LBL_SHIPPING_ADDRESS' => 'Calle de Envío:', 'LBL_STATE' => 'Estado:', 'LBL_TEAMS_LINK' => 'Equipos', - 'LBL_TICKER_SYMBOL' => 'Símbolo Grueso:', + 'LBL_TICKER_SYMBOL' => 'Símbolo Ticker:', 'LBL_TYPE' => 'Type:', 'LBL_USERS_ASSIGNED_LINK' => 'Usuarios Asignados', 'LBL_USERS_CREATED_LINK' => 'Creado Por Usuarios', @@ -133,7 +133,7 @@ 'LBL_NEW_FORM_TITLE' => 'Nueva Factura', 'LBL_TERMS_C' => 'Terminos', 'LBL_APPROVAL_ISSUE' => 'Incidencias de Aprobación', - 'LBL_APPROVAL_STATUS' => 'Estatus de Aprobación', + 'LBL_APPROVAL_STATUS' => 'Estado de Aprobación', 'LBL_BILLING_ACCOUNT' => 'Cuenta', 'LBL_BILLING_CONTACT' => 'Contacto', 'LBL_EXPIRATION' => 'Válida Hasta', @@ -157,8 +157,8 @@ 'LBL_QUOTE_DATE' => 'Fecha de Cotización', 'LBL_INVOICE_DATE' => 'Fecha de Facturación', 'LBL_DUE_DATE' => 'Fecha de Vencimiento', - 'LBL_STATUS' => 'Estatus', - 'LBL_INVOICE_STATUS' => 'Estatus de la Factura', + 'LBL_STATUS' => 'Estado', + 'LBL_INVOICE_STATUS' => 'Estado de la Factura', 'LBL_PRODUCT_QUANITY' => 'Cantidad', 'LBL_PRODUCT_NAME' => 'Producto', 'LBL_PRODUCT_NOTE' => 'Nota', @@ -183,16 +183,22 @@ 'LBL_EMAIL_NAME' => 'Factura para', 'LBL_NO_TEMPLATE' => 'ERROR\nPor favor seleccione un formato editando la Factura y seleccionando un formato de Factura\nSi usted no ha creado un formato de Factura, vaya al módulo de Formatos PDF y cree uno', - 'LBL_SUBTOTAL_TAX_AMOUNT' => 'Subtotal + Tax',//pre shipping - 'LBL_EMAIL_PDF' => 'Email PDF', + 'LBL_SUBTOTAL_TAX_AMOUNT' => 'Subtotal + Impuestos',//pre shipping + 'LBL_EMAIL_PDF' => 'Enviar PDF por Email', - 'LBL_ADD_GROUP' => 'Add Group', - 'LBL_DELETE_GROUP' => 'Delete Group', - 'LBL_GROUP_NAME' => 'Group Name', - 'LBL_GROUP_TOTAL' => 'Group Total', + 'LBL_ADD_GROUP' => 'Agregar Grupo', + 'LBL_DELETE_GROUP' => 'Eliminar Grupo', + 'LBL_GROUP_NAME' => 'Nombre de Grupo', + 'LBL_GROUP_TOTAL' => 'Total de Grupo', - 'LBL_SHIPPING_TAX' => 'Shipping VAT', - 'LBL_SHIPPING_TAX_AMT' => 'Shipping Tax', + 'LBL_SHIPPING_TAX' => 'Impuesto Valor Agregado de Envío', + 'LBL_SHIPPING_TAX_AMT' => 'Impuesto de Envío', 'LBL_IMPORT_LINE_ITEMS' => 'Import Line Items', ); +// DISYTEL: Additional translations +$mod_strings['LBL_PART_NUMBER'] = 'Nro de Parte'; +$mod_strings['LBL_PRODUCT_DESCRIPTION'] = 'Descripción'; +$mod_strings['LBL_SERVICE_LIST_PRICE'] = 'Lista'; +$mod_strings['LBL_SERVICE_DISCOUNT'] = 'Descuento'; + ?> diff --git a/modules/AOS_PDF_Templates/language/es_es.lang.php b/modules/AOS_PDF_Templates/language/es_es.lang.php index 89c2d65e950..e06a2202226 100755 --- a/modules/AOS_PDF_Templates/language/es_es.lang.php +++ b/modules/AOS_PDF_Templates/language/es_es.lang.php @@ -62,15 +62,26 @@ 'LBL_PREPARED_FOR' => 'Preparado Para', 'LBL_PREPARED_BY' => 'Preparado Por', - 'LBL_QUOTE_GROUP_SAMPLE' => 'Quote Group Sample', - 'LBL_INVOICE_GROUP_SAMPLE' => 'Invoice Group Sample', - 'LBL_MARGIN_LEFT' => 'Margin Left', - 'LBL_MARGIN_RIGHT' => 'Margin Right', - 'LBL_MARGIN_TOP' => 'Margin Top', - 'LBL_MARGIN_BOTTOM' => 'Margin Bottom', - 'LBL_MARGIN_HEADER' => 'Margin Header', - 'LBL_MARGIN_FOOTER' => 'Margin Footer', - 'LBL_EDITVIEW_PANEL1' => 'Margins', - 'LBL_DETAILVIEW_PANEL1' => 'Margins', + 'LBL_QUOTE_GROUP_SAMPLE' => 'Ejemplo de Grupo de Cotización', + 'LBL_INVOICE_GROUP_SAMPLE' => 'Ejemplo de Grupo de Factura', + 'LBL_MARGIN_LEFT' => 'Margen Izquierdo', + 'LBL_MARGIN_RIGHT' => 'Margen Derecho', + 'LBL_MARGIN_TOP' => 'Margen Superior', + 'LBL_MARGIN_BOTTOM' => 'Margen Inferior', + 'LBL_MARGIN_HEADER' => 'Margen de Encabezado', + 'LBL_MARGIN_FOOTER' => 'Margen de Pie', + 'LBL_EDITVIEW_PANEL1' => 'Márgenes', + 'LBL_DETAILVIEW_PANEL1' => 'Márgenes', ); +// DISYTEL: Additional translations +$mod_strings['LBL_ACTIVE'] = 'Activa'; +$mod_strings['LBL_QUOTE_SAMPLE'] = 'Ejemplo de Cotización'; +$mod_strings['LBL_INVOICE_SAMPLE'] = 'Ejemplo de Factura'; +$mod_strings['LBL_ACCOUNT_SAMPLE'] = 'Ejemplo de Cuenta'; +$mod_strings['LBL_CONTACT_SAMPLE'] = 'Ejemplo de Contacto'; +$mod_strings['LBL_LEAD_SAMPLE'] = 'Ejemplo de Cliente Potencial'; +$mod_strings['LBL_ANY_STREET'] = 'Cualquier Calle'; +$mod_strings['LBL_ANY_TOWN'] = 'Cualquier Ciudad'; +$mod_strings['LBL_ANY_WHERE'] = 'Cualquier Lugar'; + ?> diff --git a/modules/AOS_Product_Categories/language/es_es.lang.php b/modules/AOS_Product_Categories/language/es_es.lang.php new file mode 100644 index 00000000000..956199ee8a8 --- /dev/null +++ b/modules/AOS_Product_Categories/language/es_es.lang.php @@ -0,0 +1,74 @@ + 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Categorías de Producto', + 'LBL_MODULE_NAME' => 'Categorías de Producto', + 'LBL_MODULE_TITLE' => 'Categorías de Producto', + 'LBL_HOMEPAGE_TITLE' => 'Mis Categorías de Producto', + 'LNK_NEW_RECORD' => 'Crear Categorías de Producto', + 'LNK_LIST' => 'Ver Categorías de Producto', + 'LNK_IMPORT_AOS_PRODUCT_CATEGORIES' => 'Importar Categorías de Producto', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Categorías de Producto', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOS_PRODUCT_CATEGORIES_SUBPANEL_TITLE' => 'Categorías de Producto', + 'LBL_NEW_FORM_TITLE' => 'Nueva Categoría de Producto', + 'LBL_PARENT_CATEGORY' => 'Categoría Padre', + 'LBL_IS_PARENT' => "Es una categoría padre", + 'LBL_SUB_CATEGORIES' => "Sub categorías", + 'LBL_PRODUCT_CATEGORIES' => "Categoría Padre", + 'LBL_PRODUCT_CATEGORYS_NAME' => "Categoría Padre", +); \ No newline at end of file diff --git a/modules/AOS_Products/language/es_es.lang.php b/modules/AOS_Products/language/es_es.lang.php index b5a637c87c5..c3f2e26cee1 100755 --- a/modules/AOS_Products/language/es_es.lang.php +++ b/modules/AOS_Products/language/es_es.lang.php @@ -61,7 +61,10 @@ 'LBL_URL' => 'URL', 'LBL_CONTACT' => 'Contacto', - 'LBL_PRODUCT_IMAGE' => 'Product Image', - 'LBL_IMAGE_UPLOAD_FAIL' => 'ERROR: uploaded file exceeded the max filesize: max filesize: ', + 'LBL_PRODUCT_IMAGE' => 'Imagen del Producto', + 'LBL_IMAGE_UPLOAD_FAIL' => 'ERROR: el archivo subido excede el tamaño máximo: max filesize: ', ); + +$mod_strings['LBL_AOS_PRODUCT_CATEGORYS_NAME'] = 'Categoría de Producto'; + ?> diff --git a/modules/AOS_Products_Quotes/language/es_es.lang.php b/modules/AOS_Products_Quotes/language/es_es.lang.php index fe629f4ad87..27c61b9a59d 100755 --- a/modules/AOS_Products_Quotes/language/es_es.lang.php +++ b/modules/AOS_Products_Quotes/language/es_es.lang.php @@ -71,4 +71,8 @@ 'LBL_SERVICE_MODULE_NAME' => 'Servicios', 'LBL_LIST_NUM' => 'No.', ); + +$mod_strings['LBL_PART_NUMBER'] = 'Nro de Parte'; +$mod_strings['LBL_PRODUCT_DESCRIPTION'] = 'Descripción'; + ?> diff --git a/modules/AOS_Quotes/language/es_es.lang.php b/modules/AOS_Quotes/language/es_es.lang.php index cd36fef1751..b18e4b9ac55 100755 --- a/modules/AOS_Quotes/language/es_es.lang.php +++ b/modules/AOS_Quotes/language/es_es.lang.php @@ -180,16 +180,25 @@ 'LBL_QUOTE_DATE' => 'Fecha de Cotización', 'LBL_NO_TEMPLATE' => 'ERROR\nPor favor seleccione un formato editando la Cotización y seleccionando un formato de Cotización\nSi usted no ha creado un formato de Cotización, vaya al módulo de Formatos PDF y cree uno', - 'LBL_SUBTOTAL_TAX_AMOUNT' => 'Subtotal + Tax',//pre shipping - 'LBL_EMAIL_PDF' => 'Email PDF', + 'LBL_SUBTOTAL_TAX_AMOUNT' => 'Subtotal + Impuestos',//pre shipping + 'LBL_EMAIL_PDF' => 'Enviar PDF por Email', - 'LBL_ADD_GROUP' => 'Add Group', - 'LBL_DELETE_GROUP' => 'Delete Group', - 'LBL_GROUP_NAME' => 'Group Name', - 'LBL_GROUP_TOTAL' => 'Group Total', + 'LBL_ADD_GROUP' => 'Agregar Grupo', + 'LBL_DELETE_GROUP' => 'Eliminar Grupo', + 'LBL_GROUP_NAME' => 'Nombre de Grupo', + 'LBL_GROUP_TOTAL' => 'Total de Grupo', - 'LBL_SHIPPING_TAX' => 'Shipping VAT', - 'LBL_SHIPPING_TAX_AMT' => 'Shipping Tax', - 'LBL_IMPORT_LINE_ITEMS' => 'Import Line Items', + 'LBL_SHIPPING_TAX' => 'Impuesto de Valor Agregado de Envío', + 'LBL_SHIPPING_TAX_AMT' => 'Impuesto de Envío', + 'LBL_IMPORT_LINE_ITEMS' => 'Importar Líneas de Items', ); + +$mod_strings['LBL_AOS_QUOTES_SUBPANEL_TITLE'] = 'Presupuestos'; +$mod_strings['LBL_QUOTE_NUMBER'] = 'Número de Presupuesto'; +$mod_strings['LBL_PART_NUMBER'] = 'Nro de Parte'; +$mod_strings['LBL_PRODUCT_DESCRIPTION'] = 'Descripción'; +$mod_strings['LBL_SERVICE_LIST_PRICE'] = 'Lista'; +$mod_strings['LBL_SERVICE_DISCOUNT'] = 'Descuento'; +$mod_strings['LBL_CREATE_OPPORTUNITY'] = 'Crear Oportunidad'; + ?> diff --git a/modules/AOW_Actions/language/es_es.lang.php b/modules/AOW_Actions/language/es_es.lang.php new file mode 100644 index 00000000000..87f830e5242 --- /dev/null +++ b/modules/AOW_Actions/language/es_es.lang.php @@ -0,0 +1,60 @@ + + */ + + +$mod_strings = array ( + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + + 'LBL_MODULE_NAME' => 'Acciones de WorkFlow', + 'LBL_MODULE_TITLE' => 'Acciones de WorkFlow', + 'LBL_AOW_WORKFLOW_ID' => 'ID de WorkFlow', + 'LBL_ACTION' => 'Acción', + 'LBL_PARAMETERS' => 'Parámetros', + 'LBL_SENDEMAIL' => 'Enviar Email', + 'LBL_CREATERECORD' => 'Crear Registro', + 'LBL_MODIFYRECORD' => 'Modificar Registro', + 'LBL_SELECT_ACTION' => 'Seleccionar Acción', + 'LBL_CREATE_EMAIL_TEMPLATE' => 'Crear', + 'LBL_RECORD_TYPE' => 'Tipo de Registro', + 'LBL_ADD_FIELD' => 'Agregar Campo', + 'LBL_ADD_RELATIONSHIP' => 'Agregar Relación', + 'LBL_EDIT_EMAIL_TEMPLATE' => 'Editar', + 'LBL_EMAIL' => 'Email', + 'LBL_EMAIL_TEMPLATE' => 'Plantilla de Email', + 'LBL_SETAPPROVAL' => 'Establecer Aprobación', + 'LBL_RELATE_WORKFLOW' => 'Relacionar con el Módulo de Workflow', + +); diff --git a/modules/AOW_Conditions/language/es_es.lang.php b/modules/AOW_Conditions/language/es_es.lang.php new file mode 100644 index 00000000000..97e7b9e9881 --- /dev/null +++ b/modules/AOW_Conditions/language/es_es.lang.php @@ -0,0 +1,49 @@ + + */ + +$mod_strings = array ( + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + + 'LBL_MODULE_NAME' => 'Condiciones de WorkFlow', + 'LBL_MODULE_TITLE' => 'Condiciones de WorkFlow', + 'LBL_FIELD' => 'Campo', + 'LBL_OPERATOR' => 'Operador', + 'LBL_VALUE_TYPE' => 'Tipo', + 'LBL_VALUE' => 'Valor', + 'LBL_ORDER' => 'Orden', + 'LBL_CONDITION_OPERATOR' => 'Operador de la Condición', + 'LBL_AOW_WORKFLOW_ID' => 'ID de WorkFlow', +); diff --git a/modules/AOW_Processed/language/es_es.lang.php b/modules/AOW_Processed/language/es_es.lang.php new file mode 100644 index 00000000000..fa5e30a0290 --- /dev/null +++ b/modules/AOW_Processed/language/es_es.lang.php @@ -0,0 +1,69 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Auditoría de Procesos', + 'LBL_MODULE_NAME' => 'Auditoría de Procesos', + 'LBL_MODULE_TITLE' => 'Auditoría de Procesos', + 'LBL_HOMEPAGE_TITLE' => 'Mi Auditoría de Procesos', + 'LNK_NEW_RECORD' => 'Crear Auditoría de Procesos', + 'LNK_LIST' => 'Ver Auditoría de Procesos', + 'LNK_IMPORT_FF_AOW_PROCESSED' => 'Importar Auditoría de Procesos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Auditoría de Procesos', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_FF_AOW_PROCESSED_SUBPANEL_TITLE' => 'Auditoría de Procesos', + 'LBL_NEW_FORM_TITLE' => 'Nueva Auditoría de Procesos', + 'LBL_AOW__WORKFLOW_ID' => 'ID de WorkFlow', + 'LBL_AOW__WORKFLOW' => 'WorkFlow', + 'LBL_AOW_ACTION_ID' => 'ID de Acción', + 'LBL_AOW_ACTION' => 'Acción', + 'LBL_MODULE' => 'Módulo', + 'LBL_BEAN' => 'Registro', + 'LBL_STATUS' => 'Estado', + 'LNK_IMPORT_AOW_AOW_PROCESSED' => 'Importar Auditoría de Procesos', + 'LBL_AOW_AOW_PROCESSED_SUBPANEL_TITLE' => 'Auditoría de Procesos', + 'LNK_IMPORT_AOW_PROCESSED' => 'Importar Auditoría de Procesos', + 'LBL_AOW_PROCESSED_SUBPANEL_TITLE' => 'Auditoría de Procesos', + 'LBL_AOW_WORKFLOW' => 'Workflow', + 'LNK_NEW_WORKFLOW' => 'Crear WorkFlow', + 'LNK_WORKFLOW_LIST' => 'Ver WorkFlow', +); \ No newline at end of file diff --git a/modules/AOW_WorkFlow/language/es_es.lang.php b/modules/AOW_WorkFlow/language/es_es.lang.php new file mode 100644 index 00000000000..968fdf0c78e --- /dev/null +++ b/modules/AOW_WorkFlow/language/es_es.lang.php @@ -0,0 +1,67 @@ + + */ + +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + + + 'LBL_LIST_FORM_TITLE' => 'Lista de WorkFlow', + 'LBL_MODULE_NAME' => 'WorkFlow', + 'LBL_MODULE_TITLE' => 'WorkFlow', + 'LBL_HOMEPAGE_TITLE' => 'Mi Work Flow', + 'LNK_NEW_RECORD' => 'Crear WorkFlow', + 'LNK_LIST' => 'Ver WorkFlow', + 'LNK_PROCESSED_LIST' => 'Ver Process Audit', + 'LNK_IMPORT_AOW_WORKFLOW' => 'Importar WorkFlow', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar WorkFlow', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', + 'LBL_NEW_FORM_TITLE' => 'Nuevo WorkFlow', + 'LBL_FLOW_MODULE' => 'Módulo del WorkFlow', + 'LBL_STATUS' => 'Estado', + 'LBL_RUN_WHEN' => 'Momento de Ejecución', + 'LNK_IMPORT_AOW_WORKFLOW' => 'Importar WorkFlow', + 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', + 'LBL_CONDITION_LINES' => 'Condiciones', + 'LBL_ADD_CONDITION' => 'Agregar Condición', + 'LBL_ACTION_LINES' => 'Acciones', + 'LBL_ADD_ACTION' => 'Agregar Acción', + 'LBL_MULTIPLE_RUNS' => 'Ejecuciones Repetitivas', +); diff --git a/modules/Administration/language/es_es.lang.php b/modules/Administration/language/es_es.lang.php index 62ea3b11415..4868f68531d 100644 --- a/modules/Administration/language/es_es.lang.php +++ b/modules/Administration/language/es_es.lang.php @@ -1120,8 +1120,10 @@ 'LBL_FTS_DISABLED' => 'La búsqueda de texto completo ha sido desactivada debido a que el sistema no ha sido capaz de conectarse al motor de búsqueda.', 'LBL_FTS_CONNECTION_INVALID' => 'Los parámetros del texto completo de la búsqueda que ha introducido no son válidos y pueden ralentizar el rendimiento del sistema. Por favor, actualice la configuración.', 'MSG_RECONNECT_LOTUSLIVE' => 'Actualmente no se encuentra conectado a IBM SmartCloud. Conéctese al IBM SmartCloud mediante su perfil para poder tener acceso a las reuniones y ficheros de IBM SmartCloud.', - 'LBL_REPAIR_UPLOAD_FOLDER' => 'Remove missed files from upload directory', - 'LBL_REPAIR_UPLOAD_FOLDER_DESC' => 'Please note that removal can take a lot of time', - 'LBL_TOTAL_FILES' => 'Total files', - 'LBL_REMOVED_FILES' => 'Removed files', -); \ No newline at end of file + 'LBL_REPAIR_UPLOAD_FOLDER' => 'Eliminar archivos perdidos del directorio upload', + 'LBL_REPAIR_UPLOAD_FOLDER_DESC' => 'Note que la eliminación puede tomar mucho tiempo', + 'LBL_TOTAL_FILES' => 'Archivos Totales', + 'LBL_REMOVED_FILES' => 'Archivos Eliminados', +); + +$mod_strings['LBL_OOTB_SUGARFEEDS'] = 'Limpiar Tablas de SugarFeed'; \ No newline at end of file diff --git a/modules/Cases/language/es_es.lang.php b/modules/Cases/language/es_es.lang.php index 32e92b4cca3..93937867057 100644 --- a/modules/Cases/language/es_es.lang.php +++ b/modules/Cases/language/es_es.lang.php @@ -144,4 +144,7 @@ 'LBL_EXPORT_ASSIGNED_USER_NAME' => 'Asignado al usuario', 'LBL_EXPORT_TEAM_COUNT' => 'Número de equipos', 'LBL_CONTACT_HISTORY_SUBPANEL_TITLE' => 'Relación de contactos en Emails', + 'LBL_UPDATE_TEXT' => 'Actualizado', + 'LBL_INTERNAL' => 'Interno', + 'LBL_AOP_CASE_UPDATES' => 'Actualizaciones del Caso', ); \ No newline at end of file diff --git a/modules/FP_events/language/es_es.lang.php b/modules/FP_events/language/es_es.lang.php new file mode 100644 index 00000000000..882bab24006 --- /dev/null +++ b/modules/FP_events/language/es_es.lang.php @@ -0,0 +1,107 @@ + 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + 'LBL_LIST_FORM_TITLE' => 'Lista de Eventos', + 'LBL_MODULE_NAME' => 'Evento', + 'LBL_MODULE_TITLE' => 'Evento', + 'LBL_HOMEPAGE_TITLE' => 'Mi Evento', + 'LNK_NEW_RECORD' => 'Crear Evento', + 'LNK_LIST' => 'Ver Eventos', + 'LNK_IMPORT_FP_EVENTS' => 'Importar Eventos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Evento', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_FP_EVENTS_SUBPANEL_TITLE' => 'Evento', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Evento', + 'LBL_LOCATION' => 'Ubicacion', + 'LBL_START_DATE' => 'Fecha de Inicio', + 'LBL_END_DATE' => 'Fecha/Hora de Fin', + 'LBL_BUDGET' => 'Presupuesto', + 'LBL_FP_EVENTS_FP_EXPENSES_1_FROM_FP_EXPENSES_TITLE' => 'Gastos', + 'LBL_DATE' => 'Fecha Inicial', + 'LBL_DATE_END' => 'Fecha Final', + 'LBL_DURATION' => 'Duración', + 'LBL_INVITE_TEMPLATES' => 'Plantilla de Email de Invitación', + 'LBL_INVITE_PDF' => 'Enviar Invitaciones', + 'LBL_EDITVIEW_PANEL1' => 'Detalles del Evento', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Delegados', + + 'LBL_ACCEPT_REDIRECT' => 'Redirección URL de Aceptación', + 'LBL_DECLINE_REDIRECT' => 'Redirección URL de Rechazo', + 'LBL_SELECT_DELEGATES' => 'Seleccionar Delegados', + 'LBL_SELECT_DELEGATES_TITLE' => 'Seleccionar Delegados:-', + 'LBL_SELECT_DELEGATES_TARGET_LIST' => 'Lista de Público Objetivo', + 'LBL_SELECT_DELEGATES_TARGETS' => 'Público Objetivo', + 'LBL_SELECT_DELEGATES_CONTACTS' => 'Contactos', + 'LBL_SELECT_DELEGATES_LEADS' => 'Clientes Potenciales', + 'LBL_MANAGE_DELEGATES' => 'Manejar Delegados', + 'LBL_MANAGE_DELEGATES_TITLE' => 'Manejar Delegados:-', + 'LBL_MANAGE_ACCEPTANCES' => 'Manejar Aceptaciones', + 'LBL_MANAGE_ACCEPTANCES_TITLE' => 'Manejar Aceptaciones:-', + 'LBL_MANAGE_ACCEPTANCES_ACCEPTED' => 'Aceptado', + 'LBL_MANAGE_ACCEPTANCES_DECLINED' => 'Rechazado', + 'LBL_MANAGE_POPUP_ERROR' => 'No se seleccionaron delegados.', + 'LBL_MANAGE_DELEGATES_INVITED' => 'Invitados', + 'LBL_MANAGE_DELEGATES_NOT_INVITED' => 'No Invitados', + 'LBL_MANAGE_DELEGATES_ATTENDED' => 'Asistentes', + 'LBL_MANAGE_DELEGATES_NOT_ATTENDED' => 'No Asistentes', + 'LBL_SUCCESS_MSG' => 'Todas las invitaciones fueron enviadas exitosamente.', + 'LBL_ERROR_MSG_1' => 'Todos los contactos relacionados ya fueron invitados.', + 'LBL_ERROR_MSG_2' => 'El envío de emails de invitación falló! Por favor verifique su configuración de email.', + 'LBL_ERROR_MSG_3' => 'Falló el envío de más de 10 emails. Por favor verifique que todos los contactos que está invitando tienen dirección de email correcta (vea el log de errores)', + 'LBL_ERROR_MSG_4' => ' emails fallaron al intentar enviarlos. Por favor verifique que todos los contactos que está invitando tienen dirección de email correcta (vea el log de errores)', + 'LBL_FP_EVENT_LOCATIONS_FP_EVENTS_1_FROM_FP_EVENT_LOCATIONS_TITLE' => 'Ubicación', +); +//LBL_ERROR_MSG_4 Begins with a number(controller.php line 581) for example 10 emails have failed to send. From f60dbf5502392b8b9d90e5110cc1302bf9c5f8ee Mon Sep 17 00:00:00 2001 From: SalesAgility Date: Mon, 25 Nov 2013 12:38:24 +0000 Subject: [PATCH 005/223] Update README.md Adding details to SuiteCRM readme.md --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index e69de29bb2d..4e6876571bc 100755 --- a/README.md +++ b/README.md @@ -0,0 +1,31 @@ +##SuiteCRM 7.0.1 + +### What's in this repository ### + +This is the git repository for the SuiteCRM project, the fully open source & supercharged fork of SugarCRM Community Edition. + +This repository has been created to allow community members to collaborate and contribute to the project, helping to develop the SuiteCRM ecosystem. + +### Helpful links for the community### + +The following links offer various ways to view, contribute and collaborate to the SuiteCRM project: + + ++ [SuiteCRM Demo - A fully working SuiteCRM demo available for people to try before downloading the full SuiteCRM package][suitecrm_demo] ++ [SuiteCRM Forums - Forums dedicated to discussions about SuiteCRM with various topics and subjects about SuiteCRM][suitecrm_forums] ++ [SuiteCRM Documentation - A wiki containing relevant documentation to SuiteCRM, constantly being added to][suitecrm_docs] ++ [SuiteCRM Partners - Our partner section where partners of SuiteCRM can be viewed][suitecrm_partners] ++ [SuiteCRM Extensions Directory - An extensions directory where community members can submit extensions built for SuiteCRM][suitecrm_ext] + +[suitecrm_demo]: http://suitecrm.com/index.php/advanced-stuff +[suitecrm_forums]: http://suitecrm.com/index.php/forum +[suitecrm_docs]: http://suitecrm.com/index.php/suitecrm-the-sugarcrm-fork +[suitecrm_partners]: http://suitecrm.com/index.php/suitecrm-partners +[suitecrm_ext]: http://suitecrm.com/index.php/suitecrm-extensions + +### Support & Licensing ### + +SuiteCRM is an open source project. As such please do not contact us directly via email or phone for SuiteCRM support. Instead please use our support forum. By using the forum the knowledge is shared with everyone in the community. Our developers answer questions on the forum daily but it also gives the other members of the community the opportunity to contribute. If you would like customisations to specifically fit your SuiteCRM needs then please use our contact form. + +SuiteCRM is published under the GNU Affero GPLv3 license. + From 329d6b3cfcce85a8ecc9a1861d0ac5e11eea30ca Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 25 Nov 2013 14:52:13 +0000 Subject: [PATCH 006/223] Fixed PDF Query for MSSQL --- modules/AOS_Invoices/views/view.detail.php | 4 ++-- modules/AOS_PDF_Templates/formLetter.php | 4 ++-- modules/AOS_Quotes/views/view.detail.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/AOS_Invoices/views/view.detail.php b/modules/AOS_Invoices/views/view.detail.php index cf36571faa3..e8771fc92ee 100755 --- a/modules/AOS_Invoices/views/view.detail.php +++ b/modules/AOS_Invoices/views/view.detail.php @@ -4,7 +4,7 @@ require_once('include/MVC/View/views/view.detail.php'); class AOS_InvoicesViewDetail extends ViewDetail { - var $currSymbol; + function AOS_InvoicesViewDetail(){ parent::ViewDetail(); } @@ -18,7 +18,7 @@ function display(){ function populateInvoiceTemplates(){ global $app_list_strings; - $sql = "SELECT id, name FROM aos_pdf_templates WHERE deleted='0' AND type='AOS_Invoices' AND active"; + $sql = "SELECT id, name FROM aos_pdf_templates WHERE deleted = 0 AND type='AOS_Invoices' AND active = 1"; $res = $this->bean->db->query($sql); $app_list_strings['template_ddown_c_list'] = array(); diff --git a/modules/AOS_PDF_Templates/formLetter.php b/modules/AOS_PDF_Templates/formLetter.php index 2e6c6670be7..9b44079145d 100755 --- a/modules/AOS_PDF_Templates/formLetter.php +++ b/modules/AOS_PDF_Templates/formLetter.php @@ -41,7 +41,7 @@ function LVSmarty(){ function LVPopupHtml($module){ global $app_list_strings,$app_strings; - $sql = "SELECT * FROM aos_pdf_templates WHERE type = '".$module."' AND deleted = 0"; + $sql = "SELECT * FROM aos_pdf_templates WHERE type = '".$module."' AND deleted = 0 AND active = 1"; $result = $this->bean->db->query($sql); $countLine = $this->bean->db->getRowCount($result); @@ -99,7 +99,7 @@ function showPopup(){ function DVPopupHtml($module){ global $app_list_strings,$app_strings; - $sql = "SELECT * FROM aos_pdf_templates WHERE type = '".$module."' AND deleted = 0"; + $sql = "SELECT * FROM aos_pdf_templates WHERE type = '".$module."' AND deleted = 0 AND active = 1"; $result = $this->bean->db->query($sql); $countLine = $this->bean->db->getRowCount($result); diff --git a/modules/AOS_Quotes/views/view.detail.php b/modules/AOS_Quotes/views/view.detail.php index fe753f4412a..f3bd6c06853 100755 --- a/modules/AOS_Quotes/views/view.detail.php +++ b/modules/AOS_Quotes/views/view.detail.php @@ -26,7 +26,7 @@ require_once('include/MVC/View/views/view.detail.php'); class AOS_QuotesViewDetail extends ViewDetail { - var $currSymbol; + function AOS_QuotesViewDetail(){ parent::ViewDetail(); } @@ -40,7 +40,7 @@ function display(){ function populateQuoteTemplates(){ global $app_list_strings, $current_user; - $sql = "SELECT id, name FROM aos_pdf_templates WHERE deleted='0' AND type='AOS_Quotes' AND active"; + $sql = "SELECT id, name FROM aos_pdf_templates WHERE deleted=0 AND type='AOS_Quotes' AND active = 1"; $res = $this->bean->db->query($sql); From 9476a0f24a522bfebd72886633e16ea081cc02cb Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 25 Nov 2013 14:52:59 +0000 Subject: [PATCH 007/223] Fixed Install AOP Query for MSSQL --- install/suite_install/AdvancedOpenPortal.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/suite_install/AdvancedOpenPortal.php b/install/suite_install/AdvancedOpenPortal.php index b54c6ef2f51..c2f85d81746 100755 --- a/install/suite_install/AdvancedOpenPortal.php +++ b/install/suite_install/AdvancedOpenPortal.php @@ -27,7 +27,7 @@ function install_aop() { function updateScheduler(){ require_once('modules/Schedulers/Scheduler.php'); $scheduler = new Scheduler(); - if(count($scheduler->get_full_list('','job = "function::pollMonitoredInboxesCustomAOP"'))){ + if(count($scheduler->get_full_list('',"job = 'function::pollMonitoredInboxesCustomAOP'"))){ return; } $scheduler->name = "AOP Check Inbound Mailboxes"; @@ -38,7 +38,7 @@ function updateScheduler(){ $scheduler->status = "Active"; $scheduler->catch_up = 0; $scheduler->save(); - $oldSchedules = $scheduler->get_full_list('','job = "function::pollMonitoredInboxes"'); + $oldSchedules = $scheduler->get_full_list('',"job = 'function::pollMonitoredInboxes'"); foreach($oldSchedules as $oldSchedule){ $oldSchedule->status = "Inactive"; From 861a33e005a2b65fa26127cae57258298bdbb664 Mon Sep 17 00:00:00 2001 From: SalesAgility Date: Tue, 26 Nov 2013 12:00:05 +0000 Subject: [PATCH 008/223] Update README.md Added roadmap details --- README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.md b/README.md index 4e6876571bc..75d78a1c09f 100755 --- a/README.md +++ b/README.md @@ -23,6 +23,31 @@ The following links offer various ways to view, contribute and collaborate to th [suitecrm_partners]: http://suitecrm.com/index.php/suitecrm-partners [suitecrm_ext]: http://suitecrm.com/index.php/suitecrm-extensions +### Development Roadmap ### + +#### Advanced OpenWorkflow #### ++ Work with related modules(SalesAgility) ++ New modified only(SalesAgility) ++ Approvals(Unassigned)* ++ Field change triggers(Unassigned)* + +#### Advanced OpenReports #### ++ Charts(SalesAgility) ++ Dashlet Integration(SalesAgility) ++ Related modules(Unassigned)* + +#### Advanced OpenPortal #### ++ Quotes(Assigned) ++ Events(SalesAgility) ++ E-Commerce integration(Unassigned)* ++ Integration with WordPress & Drupal(Unassigned)* + +#### Advanced OpenDiscovery #### ++ Zend only(SalesAgility) ++ Solr integration(Unassigned)* + +(*) Unassigned - Available for collaborators to be assigned to this requirement and develop it for future releases. + ### Support & Licensing ### SuiteCRM is an open source project. As such please do not contact us directly via email or phone for SuiteCRM support. Instead please use our support forum. By using the forum the knowledge is shared with everyone in the community. Our developers answer questions on the forum daily but it also gives the other members of the community the opportunity to contribute. If you would like customisations to specifically fit your SuiteCRM needs then please use our contact form. From b57042e3cd8a8e5ab770dd5d4460633374f303f7 Mon Sep 17 00:00:00 2001 From: Jorge Obeaga Date: Wed, 27 Nov 2013 16:36:26 -0300 Subject: [PATCH 009/223] First COMPLETE version of Spanish Translation --- .../Language/es_es.Advanced OpenEvents.php | 51 ++++++++++++ .../Ext/Language/es_es.AdvancedOpenPortal.php | 47 +++++++++++ .../Language/es_es.AdvancedOpenReports.php | 68 +++++++++++++++ .../Ext/Language/es_es.AdvancedOpenSales.php | 11 ++- .../Language/es_es.AdvancedOpenWorkflow.php | 83 +++++++++++++++++++ .../Ext/Language/es_es.Reschedule.php | 41 +++++++++ .../Ext/Language/es_es.AOPAdmin.php | 50 +++++++++++ .../Ext/Language/es_es.AdvancedOpenSales.php | 13 +++ .../Language/es_es.Google_Maps_20130815.php | 16 ++++ .../Ext/Language/es_es.QuickCRM_Mobile_CE.php | 11 +++ .../Ext/Language/es_es.Reschedule.php | 9 ++ .../Calls/Ext/Language/en_us.Reschedule.php | 1 + .../Calls/Ext/Language/es_es.Reschedule.php | 12 +++ .../Ext/Language/es_es.AdvancedOpenPortal.php | 24 ++++++ .../es_es.customcases_aop_case_events.php | 24 ++++++ .../es_es.customcases_aop_case_updates.php | 30 +++++++ .../Language/es_es.Advanced OpenEvents.php | 4 + .../es_es.customaop_case_updates_contacts.php | 34 ++++++++ .../Ext/Language/es_es.AdvancedOpenPortal.php | 8 ++ .../Language/es_es.Advanced OpenEvents.php | 4 + .../Language/es_es.Advanced OpenEvents.php | 10 +++ .../Language/es_es.Advanced OpenEvents.php | 8 ++ .../Ext/Language/es_es.AdvancedOpenPortal.php | 8 ++ .../Language/es_es.Advanced OpenEvents.php | 8 ++ .../Ext/Language/es_es.AdvancedOpenPortal.php | 24 ++++++ .../Language/es_es.AdvancedOpenWorkflow.php | 27 ++++++ .../ScheduledTasks/language/es_es.lang.php | 27 ++++++ .../Language/es_es.Google_Maps_20130815.php | 3 + .../modules/Calls/metadata/detailviewdefs.php | 2 +- custom/modules/Home/language/es_es.lang.php | 21 +++++ include/language/es_es.lang.php | 4 +- modules/AOR_Fields/language/es_es.lang.php | 4 +- modules/AOR_Reports/language/es_es.lang.php | 4 +- .../CalendarDashlet.es_es.lang.php | 51 ++++++++++++ modules/Calendar/language/es_es.lang.php | 44 +++++++++- modules/Calls_Reschedule/Reschedule_popup.php | 2 +- .../Calls_Reschedule/language/es_es.lang.php | 73 ++++++++++++++++ .../CampaignROIChartDashlet.es_es.lang.php | 45 ++++++++++ ...PipelineBySalesStageDashlet.es_es.lang.php | 45 ++++++++++ ...yLeadSourceByOutcomeDashlet.es_es.lang.php | 45 ++++++++++ ...tunitiesByLeadSourceDashlet.es_es.lang.php | 45 ++++++++++ .../OutcomeByMonthDashlet.es_es.lang.php | 45 ++++++++++ ...PipelineBySalesStageDashlet.es_es.lang.php | 45 ++++++++++ .../rest/insideview/language/es_es.lang.php | 53 ++++++++++++ .../ext/rest/linkedin/language/es_es.lang.php | 58 +++++++++++++ modules/Delegates/language/es_es.lang.php | 80 ++++++++++++++++++ .../language/es_es.lang.php | 76 +++++++++++++++++ .../ChartsDashlet.es_es.lang.php | 45 ++++++++++ .../InvadersDashlet.es_es.lang.php | 50 +++++++++++ .../JotPadDashlet.es_es.lang.php | 51 ++++++++++++ .../RSSDashlet/RSSDashlet.es_es.lang.php | 54 ++++++++++++ modules/MySettings/language/es_es.lang.php | 40 +++++++++ modules/Opportunities/language/es_es.lang.php | 20 ++--- modules/Schedulers/language/es_es.lang.php | 5 +- .../SecurityGroups/language/es_es.lang.php | 3 + modules/Studio/language/es_es.Portal.html | 75 +++++++++++++++++ modules/Versions/language/es_es.lang.php | 0 57 files changed, 1719 insertions(+), 22 deletions(-) create mode 100644 custom/Extension/application/Ext/Language/es_es.Advanced OpenEvents.php create mode 100644 custom/Extension/application/Ext/Language/es_es.AdvancedOpenPortal.php create mode 100644 custom/Extension/application/Ext/Language/es_es.AdvancedOpenReports.php create mode 100644 custom/Extension/application/Ext/Language/es_es.AdvancedOpenWorkflow.php create mode 100755 custom/Extension/application/Ext/Language/es_es.Reschedule.php create mode 100644 custom/Extension/modules/Administration/Ext/Language/es_es.AOPAdmin.php create mode 100644 custom/Extension/modules/Administration/Ext/Language/es_es.AdvancedOpenSales.php create mode 100644 custom/Extension/modules/Administration/Ext/Language/es_es.Google_Maps_20130815.php create mode 100644 custom/Extension/modules/Administration/Ext/Language/es_es.QuickCRM_Mobile_CE.php create mode 100644 custom/Extension/modules/Administration/Ext/Language/es_es.Reschedule.php create mode 100755 custom/Extension/modules/Calls/Ext/Language/es_es.Reschedule.php create mode 100644 custom/Extension/modules/Cases/Ext/Language/es_es.AdvancedOpenPortal.php create mode 100644 custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_events.php create mode 100644 custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_updates.php create mode 100644 custom/Extension/modules/Contacts/Ext/Language/es_es.Advanced OpenEvents.php create mode 100644 custom/Extension/modules/Contacts/Ext/Language/es_es.customaop_case_updates_contacts.php create mode 100644 custom/Extension/modules/DynamicFields/Ext/Language/es_es.AdvancedOpenPortal.php create mode 100644 custom/Extension/modules/FP_Event_Locations/Ext/Language/es_es.Advanced OpenEvents.php create mode 100644 custom/Extension/modules/FP_events/Ext/Language/es_es.Advanced OpenEvents.php create mode 100644 custom/Extension/modules/Leads/Ext/Language/es_es.Advanced OpenEvents.php create mode 100644 custom/Extension/modules/ModuleBuilder/Ext/Language/es_es.AdvancedOpenPortal.php create mode 100644 custom/Extension/modules/Prospects/Ext/Language/es_es.Advanced OpenEvents.php create mode 100644 custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenPortal.php create mode 100644 custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenWorkflow.php create mode 100644 custom/Extension/modules/Schedulers/Ext/ScheduledTasks/language/es_es.lang.php create mode 100644 custom/Extension/modules/jjwg_Areas/Ext/Language/es_es.Google_Maps_20130815.php create mode 100644 custom/modules/Home/language/es_es.lang.php create mode 100644 modules/Calendar/Dashlets/CalendarDashlet/CalendarDashlet.es_es.lang.php create mode 100644 modules/Calls_Reschedule/language/es_es.lang.php create mode 100644 modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.es_es.lang.php create mode 100644 modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.es_es.lang.php create mode 100644 modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.es_es.lang.php create mode 100644 modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.es_es.lang.php create mode 100644 modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.es_es.lang.php create mode 100644 modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.es_es.lang.php create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/language/es_es.lang.php create mode 100644 modules/Connectors/connectors/sources/ext/rest/linkedin/language/es_es.lang.php create mode 100644 modules/Delegates/language/es_es.lang.php create mode 100644 modules/FP_Event_Locations/language/es_es.lang.php create mode 100644 modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.es_es.lang.php create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.es_es.lang.php create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.es_es.lang.php create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashlet.es_es.lang.php create mode 100644 modules/MySettings/language/es_es.lang.php create mode 100644 modules/Studio/language/es_es.Portal.html create mode 100644 modules/Versions/language/es_es.lang.php diff --git a/custom/Extension/application/Ext/Language/es_es.Advanced OpenEvents.php b/custom/Extension/application/Ext/Language/es_es.Advanced OpenEvents.php new file mode 100644 index 00000000000..825caa6ffbb --- /dev/null +++ b/custom/Extension/application/Ext/Language/es_es.Advanced OpenEvents.php @@ -0,0 +1,51 @@ + + */ + + +$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Eventos de Casos'; +$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Actualizaciones de Casos'; +$app_list_strings['moduleList']['AOP_Case_Events'] = 'Eventos de Casos'; +$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Actualizaciones de Casos'; +$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Por favor responda por encima de esta linea =========='; + +$app_list_strings['case_state_dom'] = + array ( + 'Open' => 'Abierto', + 'Closed' => 'Cerrado', + ); +$app_list_strings['case_state_default_key'] = 'Open'; +$app_list_strings['case_status_default_key'] = 'Open_New'; +$app_list_strings['case_status_dom'] = + array ( + 'Open_New' => 'Nuevo', + 'Open_Assigned' => 'Asignado', + 'Closed_Closed' => 'Cerrado', + 'Open_Pending Input' => 'Pendiente de Información', + 'Closed_Rejected' => 'Rechazado', + 'Closed_Duplicate' => 'Duplicado', + ); \ No newline at end of file diff --git a/custom/Extension/application/Ext/Language/es_es.AdvancedOpenReports.php b/custom/Extension/application/Ext/Language/es_es.AdvancedOpenReports.php new file mode 100644 index 00000000000..07715329c98 --- /dev/null +++ b/custom/Extension/application/Ext/Language/es_es.AdvancedOpenReports.php @@ -0,0 +1,68 @@ + + */ + + +$app_list_strings['moduleList']['AOR_Reports'] = 'Reportes'; +$app_list_strings['moduleList']['AOR_Conditions'] = 'Condiciones de Reportes'; +$app_list_strings['moduleList']['AOR_Charts'] = 'Gráficos de Reportes'; +$app_list_strings['moduleList']['AOR_Fields'] = 'Campos de Reportes'; +$app_list_strings['aor_operator_list']['Equal_To'] = 'Igual a'; +$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'No igual a'; +$app_list_strings['aor_operator_list']['Greater_Than'] = 'Mayor que'; +$app_list_strings['aor_operator_list']['Less_Than'] = 'Menor que'; +$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Mayor o igual a'; +$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Menor o igual a'; +$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aor_condition_operator_list']['And'] = 'Y'; +$app_list_strings['aor_condition_operator_list']['OR'] = 'O'; +$app_list_strings['aor_condition_type_list']['Value'] = 'Valor'; +$app_list_strings['aor_condition_type_list']['Field'] = 'Campo'; +$app_list_strings['aor_condition_type_list']['Date'] = 'Fecha'; +$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aor_date_type_list'][''] = ''; +$app_list_strings['aor_date_type_list']['minute'] = 'Minutos'; +$app_list_strings['aor_date_type_list']['hour'] = 'Horas'; +$app_list_strings['aor_date_type_list']['day'] = 'Dias'; +$app_list_strings['aor_date_type_list']['week'] = 'Semanas'; +$app_list_strings['aor_date_type_list']['month'] = 'Meses'; +$app_list_strings['aor_date_type_list']['business_hours'] = 'Horas Laborales'; +$app_list_strings['aor_date_options']['now'] = 'Ahora'; +$app_list_strings['aor_date_options']['field'] = 'Este Campo'; +$app_list_strings['aor_date_operator']['now'] = ''; +$app_list_strings['aor_date_operator']['plus'] = '+'; +$app_list_strings['aor_date_operator']['minus'] = '-'; +$app_list_strings['aor_sort_operator'][''] = ''; +$app_list_strings['aor_sort_operator']['ASC'] = 'Ascendente'; +$app_list_strings['aor_sort_operator']['DESC'] = 'Descendente'; +$app_list_strings['aor_function_list'][''] = ''; +$app_list_strings['aor_function_list']['COUNT'] = 'Cantidad'; +$app_list_strings['aor_function_list']['MIN'] = 'Minimo'; +$app_list_strings['aor_function_list']['MAX'] = 'Maximo'; +$app_list_strings['aor_function_list']['SUM'] = 'Suma'; +$app_list_strings['aor_function_list']['AVG'] = 'Promedio'; \ No newline at end of file diff --git a/custom/Extension/application/Ext/Language/es_es.AdvancedOpenSales.php b/custom/Extension/application/Ext/Language/es_es.AdvancedOpenSales.php index 2edb7c49e2c..c1ad9600f37 100755 --- a/custom/Extension/application/Ext/Language/es_es.AdvancedOpenSales.php +++ b/custom/Extension/application/Ext/Language/es_es.AdvancedOpenSales.php @@ -27,10 +27,10 @@ $app_list_strings['moduleList']['AOS_Contracts'] = 'Contratos'; $app_list_strings['moduleList']['AOS_Invoices'] = 'Facturas'; $app_list_strings['moduleList']['AOS_PDF_Templates'] = 'Formatos PDF'; -$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Product Categories'; +$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Categorías de Productos'; $app_list_strings['moduleList']['AOS_Products'] = 'Productos'; $app_list_strings['moduleList']['AOS_Products_Quotes'] = 'Cotizaciones de Productos'; -$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Line Item Groups'; +$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Grupos de Lineas de Items'; $app_list_strings['moduleList']['AOS_Quotes'] = 'Cotizaciones'; $app_list_strings['aos_quotes_type_dom'][''] = ''; $app_list_strings['aos_quotes_type_dom']['Analyst'] = 'Analista'; @@ -103,3 +103,10 @@ $app_strings['LBL_SELECT_TEMPLATE'] = 'Por favor seleccione un formato'; $app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo se encontraron formatos.\nPor favor vaya al módulo de Formatos PDF y cree uno'; +$app_list_strings['vat_list']['0.0'] = '0%'; +$app_list_strings['vat_list']['5.0'] = '5%'; +$app_list_strings['vat_list']['7.5'] = '7.5%'; +$app_list_strings['vat_list']['17.5'] = '17.5%'; +$app_list_strings['vat_list']['20.0'] = '20%'; +$app_list_strings['pdf_template_sample_dom'][''] = ''; + diff --git a/custom/Extension/application/Ext/Language/es_es.AdvancedOpenWorkflow.php b/custom/Extension/application/Ext/Language/es_es.AdvancedOpenWorkflow.php new file mode 100644 index 00000000000..56fdc0739f3 --- /dev/null +++ b/custom/Extension/application/Ext/Language/es_es.AdvancedOpenWorkflow.php @@ -0,0 +1,83 @@ + + */ + + +$app_list_strings['moduleList']['AOW_WorkFlow'] = 'WorkFlow'; +$app_list_strings['moduleList']['AOW_Conditions'] = 'Condiciones de WorkFlow'; +$app_list_strings['moduleList']['AOW_Processed'] = 'Auditoría del Proceso'; +$app_list_strings['moduleList']['AOW_Actions'] = 'Acciones del WorkFlow'; +$app_list_strings['aow_status_list']['Active'] = 'Activo'; +$app_list_strings['aow_status_list']['Inactive'] = 'Inactivo'; +$app_list_strings['aow_operator_list']['Equal_To'] = 'Igual a'; +$app_list_strings['aow_operator_list']['Not_Equal_To'] = 'No igual a'; +$app_list_strings['aow_operator_list']['Greater_Than'] = 'Mayor que'; +$app_list_strings['aow_operator_list']['Less_Than'] = 'Menor que'; +$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = 'Mayor que o igual a'; +$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = 'Menor que o igual a'; +$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aow_process_status_list']['Complete'] = 'Completado'; +$app_list_strings['aow_process_status_list']['Running'] = 'Ejecutando'; +$app_list_strings['aow_process_status_list']['Pending'] = 'Pendiente'; +$app_list_strings['aow_process_status_list']['Failed'] = 'Fallido'; +$app_list_strings['aow_condition_operator_list']['And'] = 'Y'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'O'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'O'; +$app_list_strings['aow_condition_type_list']['Value'] = 'Valor'; +$app_list_strings['aow_condition_type_list']['Field'] = 'Campo'; +$app_list_strings['aow_condition_type_list']['Date'] = 'Fecha'; +$app_list_strings['aow_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aow_action_type_list']['Value'] = 'Valor'; +$app_list_strings['aow_action_type_list']['Field'] = 'Campo'; +$app_list_strings['aow_action_type_list']['Date'] = 'Fecha'; +$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Round Robin'; +$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Menos Ocupado'; +$app_list_strings['aow_action_type_list']['Random'] = 'Al azar'; +$app_list_strings['aow_rel_action_type_list']['Value'] = 'Valor'; +$app_list_strings['aow_rel_action_type_list']['Field'] = 'Campo'; +$app_list_strings['aow_date_type_list'][''] = ''; +$app_list_strings['aow_date_type_list']['minute'] = 'Minutos'; +$app_list_strings['aow_date_type_list']['hour'] = 'Horas'; +$app_list_strings['aow_date_type_list']['day'] = 'Dias'; +$app_list_strings['aow_date_type_list']['week'] = 'Semanas'; +$app_list_strings['aow_date_type_list']['month'] = 'Meses'; +$app_list_strings['aow_date_type_list']['business_hours'] = 'Horas Laborales'; +$app_list_strings['aow_date_options']['now'] = 'Ahora'; +$app_list_strings['aow_date_options']['field'] = 'Este Campo'; +$app_list_strings['aow_date_operator']['now'] = ''; +$app_list_strings['aow_date_operator']['plus'] = '+'; +$app_list_strings['aow_date_operator']['minus'] = '-'; +$app_list_strings['aow_assign_options']['all'] = 'TODOS los Usuarios'; +$app_list_strings['aow_assign_options']['role'] = 'TODOS los Usuarios de un Rol'; +$app_list_strings['aow_assign_options']['security_group'] = 'TODOS los Usuarios de un Equipo'; +$app_list_strings['aow_email_type_list']['Email Address'] = 'Email'; +$app_list_strings['aow_email_type_list']['Record Email'] = 'Email del Registro'; +$app_list_strings['aow_email_type_list']['Specify User'] = 'Usuario'; +$app_list_strings['aow_email_type_list']['Related Field'] = 'Campo Relacionado'; + + diff --git a/custom/Extension/application/Ext/Language/es_es.Reschedule.php b/custom/Extension/application/Ext/Language/es_es.Reschedule.php new file mode 100755 index 00000000000..f167c2d6b55 --- /dev/null +++ b/custom/Extension/application/Ext/Language/es_es.Reschedule.php @@ -0,0 +1,41 @@ + + */ + +$app_list_strings['call_reschedule_dom'][''] = ''; +$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Fuera de la Oficina'; +$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'En una reunion'; + +$app_strings['LBL_RESCHEDULE_LABEL'] = 'Replanificar'; +$app_strings['LBL_RESCHEDULE_TITLE'] = 'Por favor ingrese los datos de la Replanificación'; +$app_strings['LBL_RESCHEDULE_DATE'] = 'Fecha:'; +$app_strings['LBL_RESCHEDULE_REASON'] = 'Razón:'; +$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Por favor seleccione una fecha válida'; +$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Por favor seleccione una razón'; + +$app_strings['LBL_RESCHEDULE_PANEL'] = 'Replanificar'; +$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Historial de Intentos de Llamada'; +$app_strings['LBL_RESCHEDULE_COUNT'] = 'Intentos de Llamada'; + + diff --git a/custom/Extension/modules/Administration/Ext/Language/es_es.AOPAdmin.php b/custom/Extension/modules/Administration/Ext/Language/es_es.AOPAdmin.php new file mode 100644 index 00000000000..12824d8e7b2 --- /dev/null +++ b/custom/Extension/modules/Administration/Ext/Language/es_es.AOPAdmin.php @@ -0,0 +1,50 @@ + + */ +$mod_strings['LBL_SALESAGILITY_ADMIN'] = 'Advanced OpenAdmin'; +$mod_strings['LBL_AOP_ADMIN_MANAGE_AOP'] = 'Configuración de Advanced OpenPortal'; +$mod_strings['LBL_AOP_ENABLE_PORTAL'] = 'Habilitar Portal'; +$mod_strings['LBL_AOP_JOOMLA_SETTINGS'] = 'Configuración del Portal'; +$mod_strings['LBL_AOP_JOOMLA_URL'] = 'URL de Joomla'; +$mod_strings['LBL_AOP_JOOMLA_ACCESS_KEY'] = 'Joomla Access Key'; +$mod_strings['LBL_AOP_CASE_ASSIGNMENT'] = 'Distribución de Casos'; +$mod_strings['LBL_AOP_DISTRIBUTION_METHOD'] = 'Método de Distribución'; +$mod_strings['LBL_AOP_ASSIGNMENT_USER'] = 'Usuario de Distribución'; + +$mod_strings['LBL_AOP_EMAIL_SETTINGS'] = 'Configuración de Email'; +$mod_strings['LBL_AOP_CONTACT_EMAIL_TEMPLATE'] = 'Plantilla de Email de Contacto'; +$mod_strings['LBL_AOP_USER_EMAIL_TEMPLATE'] = 'Plantilla de Email de Usuario'; +$mod_strings['LBL_AOP_CASE_CREATION_EMAIL_TEMPLATE'] = 'Plantilla de Caso Creado'; +$mod_strings['LBL_AOP_CASE_CLOSURE_EMAIL_TEMPLATE'] = 'Plantilla de Caso Cerrado'; +$mod_strings['LBL_AOP_CASE_REMINDER_EMAIL_TEMPLATE'] = 'Plantilla de Recordatorio de Caso'; +$mod_strings['LBL_AOP_JOOMLA_ACCOUNT_CREATION_EMAIL_TEMPLATE'] = 'Plantilla de Creación de Cuenta del Portal de Soporte de Joomla'; + +$mod_strings['LBL_AOP_BUSINESS_HOURS_SETTINGS'] = 'Horas Laborales'; + +$mod_strings['LBL_AOP_OPENING_DAYS'] = 'Días Apertura'; +$mod_strings['LBL_AOP_OPENING_HOURS'] = 'Horas Apertura'; +$mod_strings['LBL_AOP_CLOSING_HOURS'] = 'Horas Cierre'; +$mod_strings['LBL_SUPPORT_FROM_ADDRESS'] = 'Dirección Remitente de Soporte'; +$mod_strings['LBL_SUPPORT_FROM_NAME'] = 'Nombre Remitente de Soporte'; +$mod_strings['LBL_CREATE_EMAIL_TEMPLATE'] = 'Crear'; +$mod_strings['LBL_EDIT_EMAIL_TEMPLATE'] = 'Editar'; diff --git a/custom/Extension/modules/Administration/Ext/Language/es_es.AdvancedOpenSales.php b/custom/Extension/modules/Administration/Ext/Language/es_es.AdvancedOpenSales.php new file mode 100644 index 00000000000..9749b1b37d5 --- /dev/null +++ b/custom/Extension/modules/Administration/Ext/Language/es_es.AdvancedOpenSales.php @@ -0,0 +1,13 @@ +Aplicación actualizada para QuickCRM en mobile

Puede acceder a la versión mobile en:'; +$mod_strings['LBL_ERR_DIR_MSG'] = 'Algunos archivos no pudieron ser creados. Por favor verifique los permisos de escritura de: '; + + diff --git a/custom/Extension/modules/Administration/Ext/Language/es_es.Reschedule.php b/custom/Extension/modules/Administration/Ext/Language/es_es.Reschedule.php new file mode 100644 index 00000000000..9c320726f6f --- /dev/null +++ b/custom/Extension/modules/Administration/Ext/Language/es_es.Reschedule.php @@ -0,0 +1,9 @@ + 'Reschedule', 'LBL_RESCHEDULE_COUNT' => 'Call Attempts', 'LBL_RESCHEDULE_DATE' => 'Date', 'LBL_RESCHEDULE_REASON' => 'Reason', diff --git a/custom/Extension/modules/Calls/Ext/Language/es_es.Reschedule.php b/custom/Extension/modules/Calls/Ext/Language/es_es.Reschedule.php new file mode 100755 index 00000000000..8fc7b351453 --- /dev/null +++ b/custom/Extension/modules/Calls/Ext/Language/es_es.Reschedule.php @@ -0,0 +1,12 @@ + 'Replanificar', + 'LBL_RESCHEDULE_COUNT' => 'Intentos de llamar', + 'LBL_RESCHEDULE_DATE' => 'Fecha', + 'LBL_RESCHEDULE_REASON' => 'Razón', + 'LBL_RESCHEDULE_ERROR1' => 'Por favor, seleccione una fecha válida', + 'LBL_RESCHEDULE_ERROR2' => 'Por favor seleccione una razón', + 'LBL_RESCHEDULE_PANEL' => 'Replanificación', + 'LBL_RESCHEDULE_HISTORY' => 'Historial de Intentos de Llamada' + +); diff --git a/custom/Extension/modules/Cases/Ext/Language/es_es.AdvancedOpenPortal.php b/custom/Extension/modules/Cases/Ext/Language/es_es.AdvancedOpenPortal.php new file mode 100644 index 00000000000..9622085d29a --- /dev/null +++ b/custom/Extension/modules/Cases/Ext/Language/es_es.AdvancedOpenPortal.php @@ -0,0 +1,24 @@ + + */ +$mod_strings['LBL_AOP_CASE_EVENTS'] = 'Eventos de Casos'; diff --git a/custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_events.php b/custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_events.php new file mode 100644 index 00000000000..9622085d29a --- /dev/null +++ b/custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_events.php @@ -0,0 +1,24 @@ + + */ +$mod_strings['LBL_AOP_CASE_EVENTS'] = 'Eventos de Casos'; diff --git a/custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_updates.php b/custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_updates.php new file mode 100644 index 00000000000..9a74998462e --- /dev/null +++ b/custom/Extension/modules/Cases/Ext/Language/es_es.customcases_aop_case_updates.php @@ -0,0 +1,30 @@ + + */ +$mod_strings['LBL_UPDATE_TEXT'] = 'Actualizar Texto'; +$mod_strings['LBL_INTERNAL'] = 'Actualización Interna'; +$mod_strings['LBL_AOP_CASE_UPDATES'] = 'Actualizaciones de Casos'; +$mod_strings['LBL_AOP_CASE_UPDATES_THREADED'] = 'Actualizaciones de Casos Encadenados'; +$mod_strings['LBL_CASE_UPDATES_COLLAPSE_ALL'] = 'Colapsar Todos'; +$mod_strings['LBL_CASE_UPDATES_EXPAND_ALL'] = 'Expandir Todos'; +$mod_strings['LBL_NO_CASE_UPDATES'] = "No ha habido actualizaciones de este caso"; diff --git a/custom/Extension/modules/Contacts/Ext/Language/es_es.Advanced OpenEvents.php b/custom/Extension/modules/Contacts/Ext/Language/es_es.Advanced OpenEvents.php new file mode 100644 index 00000000000..f5cda7fd33e --- /dev/null +++ b/custom/Extension/modules/Contacts/Ext/Language/es_es.Advanced OpenEvents.php @@ -0,0 +1,4 @@ + + */ +$mod_strings['LBL_AOP_CASE_UPDATES'] = 'Actualizaciones de Casos'; +$mod_strings['LBL_CREATE_PORTAL_USER'] = "Crear Usuario del Portal"; +$mod_strings['LBL_ENABLE_PORTAL_USER'] = "Habilitar Usuario del Portal"; +$mod_strings['LBL_DISABLE_PORTAL_USER'] = "Deshabilitar el Usuario del Portal"; +$mod_strings['LBL_CREATE_PORTAL_USER_FAILED'] = "Error al crear el usuario del portal"; +$mod_strings['LBL_ENABLE_PORTAL_USER_FAILED'] = "Error al habilitar el usuario del portal"; +$mod_strings['LBL_DISABLE_PORTAL_USER_FAILED'] = "Error al deshabilitar el usuario del portal"; +$mod_strings['LBL_CREATE_PORTAL_USER_SUCCESS'] = "Usuario del portal creado"; +$mod_strings['LBL_ENABLE_PORTAL_USER_SUCCESS'] = "Usuario del portal habilitado"; +$mod_strings['LBL_DISABLE_PORTAL_USER_SUCCESS'] = "Usuario del portal deshabilitado"; +$mod_strings['LBL_NO_JOOMLA_URL'] = "No se especificó URL del portal"; \ No newline at end of file diff --git a/custom/Extension/modules/DynamicFields/Ext/Language/es_es.AdvancedOpenPortal.php b/custom/Extension/modules/DynamicFields/Ext/Language/es_es.AdvancedOpenPortal.php new file mode 100644 index 00000000000..10128112148 --- /dev/null +++ b/custom/Extension/modules/DynamicFields/Ext/Language/es_es.AdvancedOpenPortal.php @@ -0,0 +1,8 @@ + + * Date: 11/07/13 + */ + +$mod_strings['COLUMN_TITLE_PARENT_ENUM'] = 'Lista Desplegable Padre'; diff --git a/custom/Extension/modules/FP_Event_Locations/Ext/Language/es_es.Advanced OpenEvents.php b/custom/Extension/modules/FP_Event_Locations/Ext/Language/es_es.Advanced OpenEvents.php new file mode 100644 index 00000000000..258e616f346 --- /dev/null +++ b/custom/Extension/modules/FP_Event_Locations/Ext/Language/es_es.Advanced OpenEvents.php @@ -0,0 +1,4 @@ + diff --git a/custom/Extension/modules/ModuleBuilder/Ext/Language/es_es.AdvancedOpenPortal.php b/custom/Extension/modules/ModuleBuilder/Ext/Language/es_es.AdvancedOpenPortal.php new file mode 100644 index 00000000000..101d7dd10d7 --- /dev/null +++ b/custom/Extension/modules/ModuleBuilder/Ext/Language/es_es.AdvancedOpenPortal.php @@ -0,0 +1,8 @@ + + * Date: 11/07/13 + */ + +$mod_strings['fieldTypes']['dynamicenum'] = 'Lista Desplegable Dinámica'; \ No newline at end of file diff --git a/custom/Extension/modules/Prospects/Ext/Language/es_es.Advanced OpenEvents.php b/custom/Extension/modules/Prospects/Ext/Language/es_es.Advanced OpenEvents.php new file mode 100644 index 00000000000..7b66127f9b1 --- /dev/null +++ b/custom/Extension/modules/Prospects/Ext/Language/es_es.Advanced OpenEvents.php @@ -0,0 +1,8 @@ + diff --git a/custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenPortal.php b/custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenPortal.php new file mode 100644 index 00000000000..09bc63a0fb6 --- /dev/null +++ b/custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenPortal.php @@ -0,0 +1,24 @@ + + */ +$mod_strings['LBL_POLLMONITOREDINBOXESCUSTOMAOP'] = 'AOP Procesar Casillas de Correo Monitorizadas';?> \ No newline at end of file diff --git a/custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenWorkflow.php b/custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenWorkflow.php new file mode 100644 index 00000000000..1e1f49cca22 --- /dev/null +++ b/custom/Extension/modules/Schedulers/Ext/Language/es_es.AdvancedOpenWorkflow.php @@ -0,0 +1,27 @@ + + */ + +$mod_strings['LBL_PROCESSAOW_WORKFLOW']='Procesar AOW Workflow'; + +?> diff --git a/custom/Extension/modules/Schedulers/Ext/ScheduledTasks/language/es_es.lang.php b/custom/Extension/modules/Schedulers/Ext/ScheduledTasks/language/es_es.lang.php new file mode 100644 index 00000000000..1e1f49cca22 --- /dev/null +++ b/custom/Extension/modules/Schedulers/Ext/ScheduledTasks/language/es_es.lang.php @@ -0,0 +1,27 @@ + + */ + +$mod_strings['LBL_PROCESSAOW_WORKFLOW']='Procesar AOW Workflow'; + +?> diff --git a/custom/Extension/modules/jjwg_Areas/Ext/Language/es_es.Google_Maps_20130815.php b/custom/Extension/modules/jjwg_Areas/Ext/Language/es_es.Google_Maps_20130815.php new file mode 100644 index 00000000000..c0091153f9b --- /dev/null +++ b/custom/Extension/modules/jjwg_Areas/Ext/Language/es_es.Google_Maps_20130815.php @@ -0,0 +1,3 @@ + array ( - 'customCode' => '{if $fields.status.value != "Held"} {/if}', + 'customCode' => '{if $fields.status.value != "Held"} {/if}', ), ), 'hidden' => diff --git a/custom/modules/Home/language/es_es.lang.php b/custom/modules/Home/language/es_es.lang.php new file mode 100644 index 00000000000..be0b0e2df34 --- /dev/null +++ b/custom/modules/Home/language/es_es.lang.php @@ -0,0 +1,21 @@ + 'Inicio', + // 'Home' => 'Inicio', // DO NOT TRANSLATE! 'Contacts' => 'Contactos', 'Accounts' => 'Cuentas', 'Opportunities' => 'Oportunidades', @@ -2260,7 +2260,7 @@ 'LBL_CLOSE_AND_CREATE_BUTTON_LABEL' => 'Cerrar y Crear Nuevo', 'LBL_CLOSE_AND_CREATE_BUTTON_TITLE' => 'Cerrar y Crear Nuevo', 'LBL_CLOSE_AND_CREATE_BUTTON_KEY' => 'C', - 'LBL_OPEN_ITEMS' => 'Abrir elementos:', + 'LBL_OPEN_ITEMS' => 'Elementos Abiertos:', 'LBL_COMPOSE_EMAIL_BUTTON_KEY' => 'L', 'LBL_COMPOSE_EMAIL_BUTTON_LABEL' => 'Redactar Correo', 'LBL_COMPOSE_EMAIL_BUTTON_TITLE' => 'Redactar Correo [Alt+L]', diff --git a/modules/AOR_Fields/language/es_es.lang.php b/modules/AOR_Fields/language/es_es.lang.php index 4a4a75030c2..004bf62e309 100644 --- a/modules/AOR_Fields/language/es_es.lang.php +++ b/modules/AOR_Fields/language/es_es.lang.php @@ -47,11 +47,11 @@ 'LBL_HOMEPAGE_TITLE' => 'Mis Campos', 'LNK_NEW_RECORD' => 'Crear Campos', 'LNK_LIST' => 'Ver Campos', - 'LNK_IMPORT_AOR_Campos' => 'Importar Campos', + 'LNK_IMPORT_AOR_FIELDS' => 'Importar Campos', 'LBL_SEARCH_FORM_TITLE' => 'Buscar Campos', 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', - 'LBL_AOR_Campos_SUBPANEL_TITLE' => 'Campos', + 'LBL_AOR_FIELDS_SUBPANEL_TITLE' => 'Campos', 'LBL_NEW_FORM_TITLE' => 'Nuevo Campo', 'LBL_ORDER' => 'Orden', 'LBL_MODULE_PATH' => 'Módulo', diff --git a/modules/AOR_Reports/language/es_es.lang.php b/modules/AOR_Reports/language/es_es.lang.php index c3bf0990830..0c98474fcfe 100644 --- a/modules/AOR_Reports/language/es_es.lang.php +++ b/modules/AOR_Reports/language/es_es.lang.php @@ -47,11 +47,11 @@ 'LBL_HOMEPAGE_TITLE' => 'Mis Reportes', 'LNK_NEW_RECORD' => 'Crear Reporte', 'LNK_LIST' => 'Ver Reportes', - 'LNK_IMPORT_AOR_Reportes' => 'Importar Reportes', + 'LNK_IMPORT_AOR_REPORTS' => 'Importar Reportes', 'LBL_SEARCH_FORM_TITLE' => 'Buscar Reportes', 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', - 'LBL_AOR_Reportes_SUBPANEL_TITLE' => 'Reportes', + 'LBL_AOR_REPORTS_SUBPANEL_TITLE' => 'Reportes', 'LBL_NEW_FORM_TITLE' => 'Nuevo Reporte', 'LBL_REPORT_MODULE' => 'Módulo Reporteado', 'LBL_FIELD_LINES' => 'Campos Visualizados', diff --git a/modules/Calendar/Dashlets/CalendarDashlet/CalendarDashlet.es_es.lang.php b/modules/Calendar/Dashlets/CalendarDashlet/CalendarDashlet.es_es.lang.php new file mode 100644 index 00000000000..92fbc796819 --- /dev/null +++ b/modules/Calendar/Dashlets/CalendarDashlet/CalendarDashlet.es_es.lang.php @@ -0,0 +1,51 @@ + 'Mi Calendario', + 'LBL_DESCRIPTION' => 'Dashlet de Calendario', + 'LBL_CONFIGURE_TITLE' => 'Titulo', + 'LBL_CONFIGURE_VIEW' => 'Ver', + 'LBL_SAVE_BUTTON_LABEL' => 'Guardar', + + 'LBL_VIEW_DAY' => 'Dia', + 'LBL_VIEW_WEEK' => 'Semana', + 'LBL_VIEW_MONTH' => 'Mes', + +); +?> diff --git a/modules/Calendar/language/es_es.lang.php b/modules/Calendar/language/es_es.lang.php index f1188559447..8c77812240f 100644 --- a/modules/Calendar/language/es_es.lang.php +++ b/modules/Calendar/language/es_es.lang.php @@ -151,4 +151,46 @@ 'LBL_DATE_END_ERROR' => 'La fecha de finalización es antes que la fecha de inicio', 'ERR_YEAR_BETWEEN' => 'Lo siento, el calendario no dispone del año solicitado
Es necesario que el año sea entre 1970 y 2037', 'ERR_NEIGHBOR_DATE' => 'get_neighbor_date_str: no definido para esta vista', -); \ No newline at end of file +); + +// DISYTEL: Additional Tanslation +$mod_list_strings['dom_cal_weekdays'][0] = 'Dom'; +$mod_list_strings['dom_cal_weekdays'][1] = 'Lun'; +$mod_list_strings['dom_cal_weekdays'][2] = 'Mar'; +$mod_list_strings['dom_cal_weekdays'][3] = 'Mie'; +$mod_list_strings['dom_cal_weekdays'][4] = 'Jue'; +$mod_list_strings['dom_cal_weekdays'][5] = 'Vie'; +$mod_list_strings['dom_cal_weekdays'][6] = 'Sab'; +$mod_list_strings['dom_cal_weekdays_long'][0] = 'Domingo'; +$mod_list_strings['dom_cal_weekdays_long'][1] = 'Lunes'; +$mod_list_strings['dom_cal_weekdays_long'][2] = 'Martes'; +$mod_list_strings['dom_cal_weekdays_long'][3] = 'Miércoles'; +$mod_list_strings['dom_cal_weekdays_long'][4] = 'Jueves'; +$mod_list_strings['dom_cal_weekdays_long'][5] = 'Viernes'; +$mod_list_strings['dom_cal_weekdays_long'][6] = 'Sábado'; +$mod_list_strings['dom_cal_month'][0] = ''; +$mod_list_strings['dom_cal_month'][1] = 'Ene'; +$mod_list_strings['dom_cal_month'][2] = 'Feb'; +$mod_list_strings['dom_cal_month'][3] = 'Mar'; +$mod_list_strings['dom_cal_month'][4] = 'Abr'; +$mod_list_strings['dom_cal_month'][5] = 'May'; +$mod_list_strings['dom_cal_month'][6] = 'Jun'; +$mod_list_strings['dom_cal_month'][7] = 'Jul'; +$mod_list_strings['dom_cal_month'][8] = 'Ago'; +$mod_list_strings['dom_cal_month'][9] = 'Sep'; +$mod_list_strings['dom_cal_month'][10] = 'Oct'; +$mod_list_strings['dom_cal_month'][11] = 'Nov'; +$mod_list_strings['dom_cal_month'][12] = 'Dic'; +$mod_list_strings['dom_cal_month_long'][0] = ''; +$mod_list_strings['dom_cal_month_long'][1] = 'Enero'; +$mod_list_strings['dom_cal_month_long'][2] = 'Febrero'; +$mod_list_strings['dom_cal_month_long'][3] = 'Marzo'; +$mod_list_strings['dom_cal_month_long'][4] = 'Abril'; +$mod_list_strings['dom_cal_month_long'][5] = 'Mayo'; +$mod_list_strings['dom_cal_month_long'][6] = 'Junio'; +$mod_list_strings['dom_cal_month_long'][7] = 'Julio'; +$mod_list_strings['dom_cal_month_long'][8] = 'Agosto'; +$mod_list_strings['dom_cal_month_long'][9] = 'Septiembre'; +$mod_list_strings['dom_cal_month_long'][10] = 'Octubre'; +$mod_list_strings['dom_cal_month_long'][11] = 'Noviembre'; +$mod_list_strings['dom_cal_month_long'][12] = 'Diciembre'; \ No newline at end of file diff --git a/modules/Calls_Reschedule/Reschedule_popup.php b/modules/Calls_Reschedule/Reschedule_popup.php index 8571e3392c1..c648f472b14 100755 --- a/modules/Calls_Reschedule/Reschedule_popup.php +++ b/modules/Calls_Reschedule/Reschedule_popup.php @@ -146,7 +146,7 @@
- Enter Date + Enter Date '; diff --git a/modules/Calls_Reschedule/language/es_es.lang.php b/modules/Calls_Reschedule/language/es_es.lang.php new file mode 100644 index 00000000000..495a3d49fbd --- /dev/null +++ b/modules/Calls_Reschedule/language/es_es.lang.php @@ -0,0 +1,73 @@ + 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Replanificaciones', + 'LBL_MODULE_NAME' => 'Replanificaciones', + 'LBL_MODULE_TITLE' => 'Replanificaciones', + 'LBL_HOMEPAGE_TITLE' => 'Mis Replanificaciones', + 'LNK_NEW_RECORD' => 'Crear Replanificación', + 'LNK_LIST' => 'Ver Replanificaciones', + 'LNK_IMPORT_CALLS_RESCHEDUAL' => 'Importar Replanificaciones', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Replanificaciones', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver Historial', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_CALLS_RESCHEDUAL_SUBPANEL_TITLE' => 'Replanificaciones', + 'LBL_NEW_FORM_TITLE' => 'Nuevas Replanificaciones', + 'LBL_REASON' => 'Razón', + 'LBL_CALLS' => 'Llamada', + 'LNK_IMPORT_CALLS_RESCHEDULE' => 'Importar Replanificaciones', + 'LBL_CALLS_RESCHEDULE_SUBPANEL_TITLE' => 'Replanificaciones', +); \ No newline at end of file diff --git a/modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.es_es.lang.php b/modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.es_es.lang.php new file mode 100644 index 00000000000..d1e71ecc52f --- /dev/null +++ b/modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'ROI de Campaña', + 'LBL_DESCRIPTION' => 'Gráfico de ROI', + 'LBL_REFRESH' => 'Actualizar Gráfico'); +?> \ No newline at end of file diff --git a/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.es_es.lang.php b/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.es_es.lang.php new file mode 100644 index 00000000000..5ccf4b96074 --- /dev/null +++ b/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'Mi Pipeline por Etapa de Ventas', + 'LBL_DESCRIPTION' => 'Gráfico de Barras Verticales de Mi Pipeline por Etapa de Ventas', + 'LBL_REFRESH' => 'Actualizar Gráfico'); +?> \ No newline at end of file diff --git a/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.es_es.lang.php b/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.es_es.lang.php new file mode 100644 index 00000000000..cd2be44d460 --- /dev/null +++ b/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'Todas las Oportunidades por Origen y Resultado', + 'LBL_DESCRIPTION' => 'Gráfico de barras horizontales de Oportunidades por Origen y Resultado', + 'LBL_REFRESH' => 'Actualizar Gráfico'); +?> \ No newline at end of file diff --git a/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.es_es.lang.php b/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.es_es.lang.php new file mode 100644 index 00000000000..538aa0ec375 --- /dev/null +++ b/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'Todas las Oportunidades por Origen', + 'LBL_DESCRIPTION' => 'Gráfico de Torta de Oportunidades por Origen', + 'LBL_REFRESH' => 'Actualizar Gráfico'); +?> \ No newline at end of file diff --git a/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.es_es.lang.php b/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.es_es.lang.php new file mode 100644 index 00000000000..4bbcfff4c83 --- /dev/null +++ b/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'Resultado por Mes', + 'LBL_DESCRIPTION' => 'Gráfico del Resultado Mensual', + 'LBL_REFRESH' => 'Actualizar Gráfico'); +?> \ No newline at end of file diff --git a/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.es_es.lang.php b/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.es_es.lang.php new file mode 100644 index 00000000000..a420d71168b --- /dev/null +++ b/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'Pipeline por Etapa de Ventas', + 'LBL_DESCRIPTION' => 'Gráfico de Barras Verticales de Pipeline por Etapa de Ventas', + 'LBL_REFRESH' => 'Actualizar Gráfico'); +?> \ No newline at end of file diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/language/es_es.lang.php b/modules/Connectors/connectors/sources/ext/rest/insideview/language/es_es.lang.php new file mode 100644 index 00000000000..7776d4fe67e --- /dev/null +++ b/modules/Connectors/connectors/sources/ext/rest/insideview/language/es_es.lang.php @@ -0,0 +1,53 @@ + 'Comenzar!', + 'LBL_TOS0' => 'Estoy de acuerdo con InsideView\'s ', + 'LBL_TOS1' => 'Terminos of Use', + 'LBL_TOS3' => 'Política de Privacidad', + 'iv_description0' => 'Al hacer click en "Comenzar!" usted está de acuerdo con InsideView\'s', + 'LBL_OPP' => 'Encontrar Oportunidades', + 'LBL_OPP_SUB' => 'para alcanzar a los clientes', + 'LBL_REFERRAL' => 'Obtener Referencias', + 'LBL_REFERRAL_SUB' => 'para decisores clave', + 'LBL_ENGAGE' => 'Captar Clientes', + 'LBL_ENGAGE_SUB' => 'con iniciadores de conversaciones', +); + +?> \ No newline at end of file diff --git a/modules/Connectors/connectors/sources/ext/rest/linkedin/language/es_es.lang.php b/modules/Connectors/connectors/sources/ext/rest/linkedin/language/es_es.lang.php new file mode 100644 index 00000000000..e04377b7ee9 --- /dev/null +++ b/modules/Connectors/connectors/sources/ext/rest/linkedin/language/es_es.lang.php @@ -0,0 +1,58 @@ + '
Esta es la URL para el plug-in Interno de la Companía utilizado para mostrar información de la compañía de LinkedIn©. No debería ser necesario cambiar la URL a menos que LinkedIn© cambie su URL para el plugin.
', + + 'LBL_NAME' => 'Nombre de Compañía', + + //Configuration labels + 'company_url' => 'URL', + 'oauth_consumer_key' => 'API Key', + 'oauth_consumer_secret' => 'Secret Key' +); + +?> \ No newline at end of file diff --git a/modules/Delegates/language/es_es.lang.php b/modules/Delegates/language/es_es.lang.php new file mode 100644 index 00000000000..854af853908 --- /dev/null +++ b/modules/Delegates/language/es_es.lang.php @@ -0,0 +1,80 @@ + 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Eventos', + 'LBL_MODULE_NAME' => 'Eventos', + 'LBL_MODULE_TITLE' => 'Eventos', + 'LBL_HOMEPAGE_TITLE' => 'Mis Eventos', + 'LNK_NEW_RECORD' => 'Crear Evento', + 'LNK_LIST' => 'Ver Eventos', + 'LNK_IMPORT_FP_EVENTS' => 'Importar Eventos', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Eventos', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_FP_EVENTS_SUBPANEL_TITLE' => 'Eventos', + 'LBL_NEW_FORM_TITLE' => 'Nuevo Evento', + 'LBL_LOCATION' => 'Ubicacion', + 'LBL_START_DATE' => 'Fecha de Inicio', + 'LBL_END_DATE' => 'Fecha y Hora de Fin', + 'LBL_BUDGET' => 'Presupuesto', + 'LBL_FP_EVENTS_FP_EXPENSES_1_FROM_FP_EXPENSES_TITLE' => 'Gastos', + 'LBL_INVITE_PDF' => 'Enviar Invitaciones', + 'LBL_INVITE_EMAIL' => 'Enviar Invitaciones por Email', + 'LBL_PDF_TEMPLATE' => 'Plantilla PDF de Invitación', + 'LBL_EMAIL_TEMPLATE' => 'Plantilla de Email de Invitación', + 'LBL_EDITVIEW_PANEL1' => 'Nuevo Panel 1', + 'LBL_DEFAULT_SUBPANEL_TITLE' => 'Delegados', +); diff --git a/modules/FP_Event_Locations/language/es_es.lang.php b/modules/FP_Event_Locations/language/es_es.lang.php new file mode 100644 index 00000000000..cc398f9d6b1 --- /dev/null +++ b/modules/FP_Event_Locations/language/es_es.lang.php @@ -0,0 +1,76 @@ + 'ID Usuario Asignado', + 'LBL_ASSIGNED_TO_NAME' => 'Asignado a', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Fecha de Creación', + 'LBL_DATE_MODIFIED' => 'Fecha de Modificación', + 'LBL_MODIFIED' => 'Modificado por', + 'LBL_MODIFIED_ID' => 'Modificado por ID', + 'LBL_MODIFIED_NAME' => 'Modificado por Nombre', + 'LBL_CREATED' => 'Creado por', + 'LBL_CREATED_ID' => 'Creado por ID', + 'LBL_DESCRIPTION' => 'Descripción', + 'LBL_DELETED' => 'Eliminado', + 'LBL_NAME' => 'Nombre', + 'LBL_CREATED_USER' => 'Creado por Usuario', + 'LBL_MODIFIED_USER' => 'Modificado por Usuario', + 'LBL_LIST_NAME' => 'Nombre', + 'LBL_EDIT_BUTTON' => 'Editar', + 'LBL_REMOVE' => 'Eliminar', + + 'LBL_LIST_FORM_TITLE' => 'Lista de Ubicaciones', + 'LBL_MODULE_NAME' => 'Ubicaciones', + 'LBL_MODULE_TITLE' => 'Ubicaciones', + 'LBL_HOMEPAGE_TITLE' => 'Mis Ubicaciones', + 'LNK_NEW_RECORD' => 'Crear Ubicaciones', + 'LNK_LIST' => 'Ver Ubicaciones', + 'LNK_IMPORT_FP_EVENT_LOCATIONS' => 'Importar Ubicaciones', + 'LBL_SEARCH_FORM_TITLE' => 'Buscar Ubicaciones', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'Ver History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Actividades', + 'LBL_FP_EVENT_LOCATIONS_SUBPANEL_TITLE' => 'Ubicaciones', + 'LBL_NEW_FORM_TITLE' => 'Nueva Ubicación', + 'LBL_ADDRESS' => 'Dirección', + 'LBL_ADDRESS_CITY' => 'Ciudad', + 'LBL_ADDRESS_COUNTRY' => 'País', + 'LBL_ADDRESS_POSTALCODE' => 'Código Postal', + 'LBL_ADDRESS_STATE' => 'País', + 'LBL_CAPACITY' => 'Capacidad', + 'LBL_EDITVIEW_PANEL1' => 'Dirección', +); diff --git a/modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.es_es.lang.php b/modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.es_es.lang.php new file mode 100644 index 00000000000..8dbc98c3eff --- /dev/null +++ b/modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.es_es.lang.php @@ -0,0 +1,45 @@ + 'Gráficos', + 'LBL_DESCRIPTION' => 'Un Dashlet para visualizar gráficos', + 'LBL_CONFIGURE_TITLE' => 'Título', ); +?> \ No newline at end of file diff --git a/modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.es_es.lang.php b/modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.es_es.lang.php new file mode 100644 index 00000000000..5545d54653e --- /dev/null +++ b/modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.es_es.lang.php @@ -0,0 +1,50 @@ + 'Invaders!', + 'LBL_DESCRIPTION' => 'Una pequeña forma de pasar el tiempo', + 'LBL_DBLCLICK_HELP' => 'Use las teclas A y D para moverse, S para disparar.', + 'LBL_START' => 'Haga Click para Comenzar', + 'LBL_GAME_OVER' => 'Game Over
(Haga click para volver a comenzar)', + +); +?> \ No newline at end of file diff --git a/modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.es_es.lang.php b/modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.es_es.lang.php new file mode 100644 index 00000000000..62041183d29 --- /dev/null +++ b/modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.es_es.lang.php @@ -0,0 +1,51 @@ + 'Notas Rápidas', + 'LBL_DESCRIPTION' => 'Un dashlet para tomar notas', + 'LBL_SAVING' => 'Guardando Nota ...', + 'LBL_SAVED' => 'Guardado', + 'LBL_CONFIGURE_TITLE' => 'Título', + 'LBL_CONFIGURE_HEIGHT' => 'Alto (1 - 300)', + 'LBL_DBLCLICK_HELP' => 'Doble click abajo para editar.', + 'LBL_DEFAULT_TEXT' => $defaultText, +); +?> \ No newline at end of file diff --git a/modules/Home/Dashlets/RSSDashlet/RSSDashlet.es_es.lang.php b/modules/Home/Dashlets/RSSDashlet/RSSDashlet.es_es.lang.php new file mode 100644 index 00000000000..9749d5cdfc3 --- /dev/null +++ b/modules/Home/Dashlets/RSSDashlet/RSSDashlet.es_es.lang.php @@ -0,0 +1,54 @@ + 'Fuentes de Noticias', + 'LBL_DESCRIPTION' => 'Fuentes de Noticias', + 'LBL_SAVING' => 'Parseando ...', + 'LBL_SAVED' => 'Completado', + 'LBL_AUTO_SCROLL' => 'Auto Desplazar', + 'LBL_SCROLL_SPEED' => 'Velocidad de Desplazamiento (%)', + 'LBL_CONFIGURE_TITLE' => 'Título', + 'LBL_CONFIGURE_HEIGHT' => 'Altura (1 - 300)', + 'LBL_CONFIGURE_RSSURL' => 'RSS Url', + 'LBL_DBLCLICK_HELP' => '', + 'ERR_LOADING_FEED' => 'Falló la carga la fuente RSS', + ); +?> \ No newline at end of file diff --git a/modules/MySettings/language/es_es.lang.php b/modules/MySettings/language/es_es.lang.php new file mode 100644 index 00000000000..24a95af051a --- /dev/null +++ b/modules/MySettings/language/es_es.lang.php @@ -0,0 +1,40 @@ + \ No newline at end of file diff --git a/modules/Opportunities/language/es_es.lang.php b/modules/Opportunities/language/es_es.lang.php index 5b77f32878f..93648118028 100644 --- a/modules/Opportunities/language/es_es.lang.php +++ b/modules/Opportunities/language/es_es.lang.php @@ -75,8 +75,8 @@ 'LBL_CURRENCIES' => 'Monedas', 'LBL_LIST_OPPORTUNITY_NAME' => 'Nombre', 'LBL_LIST_ACCOUNT_NAME' => 'Cuenta', - 'LBL_LIST_AMOUNT' => 'Cantidad de la Oportunidad', - 'LBL_LIST_AMOUNT_USDOLLAR' => 'Cantidad', + 'LBL_LIST_AMOUNT' => 'Monto de la Oportunidad', + 'LBL_LIST_AMOUNT_USDOLLAR' => 'Monto', 'LBL_LIST_DATE_CLOSED' => 'Fecha Cierre', 'LBL_LIST_SALES_STAGE' => 'Etapa de Ventas', 'LBL_ACCOUNT_ID' => 'ID de Cuenta', @@ -88,33 +88,33 @@ 'db_amount' => 'LBL_LIST_AMOUNT', 'db_date_closed' => 'LBL_LIST_DATE_CLOSED', 'UPDATE' => 'Oportunidad - Actualizar Moneda', - 'UPDATE_DOLLARAMOUNTS' => 'Actualizar Cantidades en Dólares EEUU', - 'UPDATE_VERIFY' => 'Verificar Cantidades', + 'UPDATE_DOLLARAMOUNTS' => 'Actualizar Montos en Dólares EEUU', + 'UPDATE_VERIFY' => 'Verificar Montos', 'UPDATE_VERIFY_TXT' => 'Verifica que los valores de las cantidades en las oportunidades son números decimales válidos con sólo caracteres numéricos (0-9) y decimales(.)', - 'UPDATE_FIX' => 'Corregir Cantidades', + 'UPDATE_FIX' => 'Corregir Montos', 'UPDATE_FIX_TXT' => 'Intenta corregir cualquier cantidad no válida creando un número decimal válido a partir de la cantidad actual. Antes realiza una copia de seguridad de todas las cantidades modificadas en el campo de base de datos amount_backup. Si tras la correción detecta problemas, no vuelva a realizar esta operación sin restaurar los valores previos desde la copia de seguridad ya que si no sobrescribirá la copia de seguridad con nuevos datos no válidos.', 'UPDATE_DOLLARAMOUNTS_TXT' => 'Actualiza las cantidades en Dólares EEUU para las oportunidades basadas en el conjunto actual de cambios de moneda. Este valor se usa para calcular gráficas y vistas de listas de cantidades monetarias.', 'UPDATE_CREATE_CURRENCY' => 'Creación de nueva moneda:', 'UPDATE_VERIFY_FAIL' => 'Fallo de verificación de registro:', - 'UPDATE_VERIFY_CURAMOUNT' => 'Cantidad actual:', + 'UPDATE_VERIFY_CURAMOUNT' => 'Monto actual:', 'UPDATE_VERIFY_FIX' => 'La corrección daría', 'UPDATE_INCLUDE_CLOSE' => 'Registros cerrados incluidos', - 'UPDATE_VERIFY_NEWAMOUNT' => 'Nueva cantidad:', + 'UPDATE_VERIFY_NEWAMOUNT' => 'Nuevo monto:', 'UPDATE_VERIFY_NEWCURRENCY' => 'Nueva moneda:', 'UPDATE_DONE' => 'Hecho', 'UPDATE_BUG_COUNT' => 'Problemas detectados cuya resolución se ha intentado:', 'UPDATE_BUGFOUND_COUNT' => 'Problemas detectados:', 'UPDATE_COUNT' => 'Registros actualizados:', 'UPDATE_RESTORE_COUNT' => 'Registros con cantidades restauradas:', - 'UPDATE_RESTORE' => 'Restaurar Cantidades', + 'UPDATE_RESTORE' => 'Restaurar Montos', 'UPDATE_RESTORE_TXT' => 'Restaura los valores de las cantidades desde la copia de seguridad creada durante la corrección.', 'UPDATE_FAIL' => 'No ha podido actualizarse -', 'UPDATE_NULL_VALUE' => 'La cantidad es NULL, estableciéndola a 0 -', 'UPDATE_MERGE' => 'Unificar Monedas', 'UPDATE_MERGE_TXT' => 'Unifica múltiples monedas en una única moneda. Si detecta que hay múltiples registros de tipo moneda para la misma moneda, puede unificarlas. Esto también unificará las monedas para el resto de módulos.', 'LBL_ACCOUNT_NAME' => 'Cuenta:', - 'LBL_AMOUNT' => 'Cantidad de la Oportunidad:', - 'LBL_AMOUNT_USDOLLAR' => 'Cantidad:', + 'LBL_AMOUNT' => 'Monto de la Oportunidad:', + 'LBL_AMOUNT_USDOLLAR' => 'Monto:', 'LBL_CURRENCY' => 'Moneda:', 'LBL_DATE_CLOSED' => 'Fecha de cierre:', 'LBL_TYPE' => 'Tipo:', diff --git a/modules/Schedulers/language/es_es.lang.php b/modules/Schedulers/language/es_es.lang.php index eaf98edd37b..84810e89d3e 100644 --- a/modules/Schedulers/language/es_es.lang.php +++ b/modules/Schedulers/language/es_es.lang.php @@ -149,4 +149,7 @@ 'LBL_SENDEMAILREMINDERS' => 'Ejecutar recordatorios por correo electrónico', 'LBL_CLEANJOBQUEUE' => 'Liberador de la Cola de Trabajos', 'LBL_REMOVEDOCUMENTSFROMFS' => 'Extracción de documentos del sistema de archivos', -); \ No newline at end of file +); + +$mod_strings['LBL_OOTB_SUGARFEEDS'] = 'Limpiar Tablas de SugarFeed'; +$mod_strings['LBL_TRIMSUGARFEEDS'] = 'Limpiar Tablas de SugarFeed'; \ No newline at end of file diff --git a/modules/SecurityGroups/language/es_es.lang.php b/modules/SecurityGroups/language/es_es.lang.php index 156d54ee5cf..6600e101d8e 100755 --- a/modules/SecurityGroups/language/es_es.lang.php +++ b/modules/SecurityGroups/language/es_es.lang.php @@ -86,4 +86,7 @@ 'LBL_INBOUND_EMAIL_DESC' => 'Sólo permitir el acceso a una cuenta de correo electrónico si el usuario pertenece a un grupo que se asigna a la cuenta de correo.', 'LBL_PRIMARY_GROUP' => 'Grupo Principal', ); + +$mod_strings['LBL_ALL_MODULES'] = 'Todos'; + ?> \ No newline at end of file diff --git a/modules/Studio/language/es_es.Portal.html b/modules/Studio/language/es_es.Portal.html new file mode 100644 index 00000000000..ced642905da --- /dev/null +++ b/modules/Studio/language/es_es.Portal.html @@ -0,0 +1,75 @@ + + + + + + +

Estudio

+ +

Puede seleccionar una de las siguientes opciones para editar el SugarPortal:

+
    +
  • Editar un Módulo. Seleccione esta opción para editar el módulo de Gestor de Incidencias, Casos o Clientes Potenciales. +
  • Subir una Hoja de Estilos. Seleccione esta opción para editar la hoja de estilos por defecto de SugarPortal. +
  • Sincronizar con el Portal. Seleccione esta opción para sincronizar el SugarPortal con el servidor de Sugar. +
+

Para editar un módulo, haga lo siguiente:

+
    +
  1. Seleccione el módulo que desea reconfigurar en SugarPortal. +
  2. Seleccione la vista que desea editar. +
    El editor del Portal muestra una barra de herramientas a la izquierda y los campos de la vista de detalle en la derecha. Para cambiar la Vista de Edición o Vista de Lista, seleccione el link correspondiente arriba. La barra de herramientas muestra los campos disponibles que actualmente no están en la vista de detalle. También muestra un campo vacío y un campo en blanco. Use el campo en blanco para crear espacios vacíos en una vista. Por ejemplo, use un campo en blanco junto a la Descripción para crear un espacio adecuado para ingresar una descripción detallada. Use un campo vacío como reemplazo de un campo que podrá remplazar a futuro con un nuevo campo. +
  3. Para agregar un campo de la barra de Herramientas a la vista de detalle, haga click en Agregar Fila. Seleccione el campo de la barra de herramientas y arrástrelo hasta un campo vacío. +
  4. Para quitar un campo de la vista, selecciónelo, y arrástrelo hasta la barra de Herramientas. +
  5. Haga click en Guardar para guardar sus cambios. +
+

Para subir una hoja de estilos, haga lo siguiente:

+
    +
  1. Seleccione la pestaña apropiada para Casos, Incidencias o Newsletters. +
  2. Haga click en Examinar, navegue hacia la ubicación de la hoja de estilos en su equipo, y selecciónela. +
  3. Haga click en Subir para visualizar la nueva hoja de estilos. +
+

Para sincronizar el SugarPortal con el Servidor de Suagr, haga lo siguiente: +

    +
  1. Ingrese la URL de la instancia de portal que desea actualizar y haga click en Ir. +
  2. Ingrese su nombre de usuario y password y haga click en Iniciar Sincronizacion. \ No newline at end of file diff --git a/modules/Versions/language/es_es.lang.php b/modules/Versions/language/es_es.lang.php new file mode 100644 index 00000000000..e69de29bb2d From 5a2a9cbfd70bcb30bc341472069c3799030dfcec Mon Sep 17 00:00:00 2001 From: Jorge Obeaga Date: Tue, 3 Dec 2013 13:39:18 -0300 Subject: [PATCH 010/223] Demo data translated and minor fixes. --- .../Ext/Language/es_es.SecurityGroups.php | 1 + install/demoData.es_es.php | 21721 ++++++++++++++++ 2 files changed, 21722 insertions(+) create mode 100755 install/demoData.es_es.php diff --git a/custom/Extension/modules/Users/Ext/Language/es_es.SecurityGroups.php b/custom/Extension/modules/Users/Ext/Language/es_es.SecurityGroups.php index f85b387af23..bc8c16079b0 100755 --- a/custom/Extension/modules/Users/Ext/Language/es_es.SecurityGroups.php +++ b/custom/Extension/modules/Users/Ext/Language/es_es.SecurityGroups.php @@ -4,6 +4,7 @@ array( 'LBL_SECURITYGROUPS_SUBPANEL_TITLE' => "Grupos de Seguridad", 'LBL_PRIMARY_GROUP' => "Grupo Principal", + 'LBL_SECURITYGROUP_NONINHERITABLE' => 'Grupo No-Heredable', ) ); ?> \ No newline at end of file diff --git a/install/demoData.es_es.php b/install/demoData.es_es.php new file mode 100755 index 00000000000..701a8b7370f --- /dev/null +++ b/install/demoData.es_es.php @@ -0,0 +1,21721 @@ + 'seed_jim_id', + 'last_name' => 'Brennan', + 'first_name' => 'Jim', + 'user_name' => 'jim', + 'title' => 'Director Comercial', + 'is_admin' => false, + 'reports_to' => null, + 'reports_to_name' => null, + 'email' => 'jim@ejemplo.com' +); + +//west team +$sugar_demodata['users'][] = array( + 'id' => 'seed_sarah_id', + 'last_name' => 'Smith', + 'first_name' => 'Sarah', + 'user_name' => 'sarah', + 'title' => 'Gerente de Ventas Oeste', + 'is_admin' => false, + 'reports_to' => 'seed_jim_id', + 'reports_to_name' => 'Brennan, Jim', + 'email' => 'sarah@ejemplo.com' +); + +$sugar_demodata['users'][] = array( + 'id' => 'seed_sally_id', + 'last_name' => 'Bronsen', + 'first_name' => 'Sally', + 'user_name' => 'sally', + 'title' => 'Ejecutivo de Cuentas Senior', + 'is_admin' => false, + 'reports_to' => 'seed_sarah_id', + 'reports_to_name' => 'Smith, Sarah', + 'email' => 'sally@ejemplo.com' +); + +$sugar_demodata['users'][] = array( + 'id' => 'seed_max_id', + 'last_name' => 'Jensen', + 'first_name' => 'Max', + 'user_name' => 'max', + 'title' => 'Ejecutivo de Cuentas', + 'is_admin' => false, + 'reports_to' => 'seed_sarah_id', + 'reports_to_name' => 'Smith, Sarah', + 'email' => 'tom@ejemplo.com' +); + +//east team +$sugar_demodata['users'][] = array( + 'id' => 'seed_will_id', + 'last_name' => 'Oestein', + 'first_name' => 'Will', + 'user_name' => 'will', + 'title' => 'Gerente de Ventas Este', + 'is_admin' => false, + 'reports_to' => 'seed_jim_id', + 'reports_to_name' => 'Brennan, Jim', + 'email' => 'will@ejemplo.com' +); + +$sugar_demodata['users'][] = array( + 'id' => 'seed_chris_id', + 'last_name' => 'Olliver', + 'first_name' => 'Chris', + 'user_name' => 'chris', + 'title' => 'Ejecutivo de Cuentas Senior', + 'is_admin' => false, + 'reports_to' => 'seed_will_id', + 'reports_to_name' => 'Oestein, Will', + 'email' => 'chris@ejemplo.com' +); + +//teams demodata +$sugar_demodata['teams'][] = array( + 'name' => 'Este', + 'description' => 'Este es el equipo para Este', + 'team_id' => 'Este', +); + +$sugar_demodata['teams'][] = array( + 'name' => 'Oeste', + 'description' => 'Este es el equipo para Oeste', + 'team_id' => 'Oeste', +); + +//contacts accounts +$sugar_demodata['last_name_array'] = array( + "Smith", + "Johnson", + "Williams", + "Jones", + "Brown", + "Davis", + "Miller", + "Wilson", + "Moore", + "Taylor", + "Anderson", + "Thomas", + "Jackson", + "White", + "Harris", + "Martin", + "Thompson", + "Garcia", + "Martinez", + "Robinson", + "Clark", + "Rodriguez", + "Lewis", + "Lee", + "Walker", + "Hall", + "Allen", + "Young", + "Hernandez", + "King", + "Wright", + "Lopez", + "Hill", + "Scott", + "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", + "James", + "Watson", + "Brooks", + "Kelly", + "Sanders", + "Price", + "Bennett", + "Wood", + "Barnes", + "Ross", + "Henderson", + "Coleman", + "Jenkins", + "Perry", + "Powell", + "Long", + "Patterson", + "Hughes", + "Flores", + "Washington", + "Butler", + "Simmons", + "Foster", + "Gonzales", + "Bryant", + "Alexander", + "Russell", + "Griffin", + "Diaz", + "Hayes", + "Myers", + "Ford", + "Hamilton", + "Graham", + "Sullivan", + "Wallace", + "Woods", + "Cole", + "Oeste", + "Jordan", + "Owens", + "Reynolds", + "Fisher", + "Ellis", + "Harrison", + "Gibson", + "Mcdonald", + "Cruz", + "Marshall", + "Ortiz", + "Gomez", + "Murray", + "Freeman", + "Wells", + "Webb", + "Simpson", + "Stevens", + "Tucker", + "Porter", + "Hunter", + "Hicks", + "Crawford", + "Henry", + "Boyd", + "Mason", + "Morales", + "Kennedy", + "Warren", + "Dixon", + "Ramos", + "Reyes", + "Burns", + "Gordon", + "Shaw", + "Holmes", + "Rice", + "Robertson", + "Hunt", + "Black", + "Daniels", + "Palmer", + "Mills", + "Nichols", + "Grant", + "Knight", + "Ferguson", + "Rose", + "Stone", + "Hawkins", + "Dunn", + "Perkins", + "Hudson", + "Spencer", + "Gardner", + "Stephens", + "Payne", + "Pierce", + "Berry", + "Matthews", + "Arnold", + "Wagner", + "Willis", + "Ray", + "Watkins", + "Olson", + "Carroll", + "Duncan", + "Snyder", + "Hart", + "Cunningham", + "Bradley", + "Lane", + "Andrews", + "Ruiz", + "Harper", + "Fox", + "Riley", + "Armstrong", + "Carpenter", + "Weaver", + "Greene", + "Lawrence", + "Elliott", + "Chavez", + "Sims", + "Austin", + "Peters", + "Kelley", + "Franklin", + "Lawson", + "Fields", + "Gutierrez", + "Ryan", + "Schmidt", + "Carr", + "Vasquez", + "Castillo", + "Wheeler", + "Chapman", + "Oliver", + "Montgomery", + "Richards", + "Williamson", + "Johnston", + "Banks", + "Meyer", + "Bishop", + "Mccoy", + "Howell", + "Alvarez", + "Morrison", + "Hansen", + "Fernandez", + "Garza", + "Harvey", + "Little", + "Burton", + "Stanley", + "Nguyen", + "George", + "Jacobs", + "Reid", + "Kim", + "Fuller", + "Lynch", + "Dean", + "Gilbert", + "Garrett", + "Romero", + "Welch", + "Larson", + "Frazier", + "Burke", + "Hanson", + "Day", + "Mendoza", + "Moreno", + "Bowman", + "Medina", + "Fowler", + "Brewer", + "Hoffman", + "Carlson", + "Silva", + "Pearson", + "Holland", + "Douglas", + "Fleming", + "Jensen", + "Vargas", + "Byrd", + "Davidson", + "Hopkins", + "May", + "Terry", + "Herrera", + "Wade", + "Soto", + "Walters", + "Curtis", + "Neal", + "Caldwell", + "Lowe", + "Jennings", + "Barnett", + "Graves", + "Jimenez", + "Horton", + "Shelton", + "Barrett", + "Obrien", + "Castro", + "Sutton", + "Gregory", + "Mckinney", + "Lucas", + "Miles", + "Craig", + "Rodriquez", + "Chambers", + "Holt", + "Lambert", + "Fletcher", + "Watts", + "Bates", + "Hale", + "Rhodes", + "Pena", + "Beck", + "Newman", + "Haynes", + "Mcdaniel", + "Mendez", + "Bush", + "Vaughn", + "Parks", + "Dawson", + "Santiago", + "Norris", + "Hardy", + "Love", + "Steele", + "Curry", + "Powers", + "Schultz", + "Barker", + "Guzman", + "Page", + "Munoz", + "Ball", + "Keller", + "Chandler", + "Weber", + "Leonard", + "Walsh", + "Lyons", + "Ramsey", + "Wolfe", + "Schneider", + "Mullins", + "Benson", + "Sharp", + "Bowen", + "Daniel", + "Barber", + "Cummings", + "Hines", + "Baldwin", + "Griffith", + "Valdez", + "Hubbard", + "Salazar", + "Reeves", + "Warner", + "Stevenson", + "Burgess", + "Santos", + "Tate", + "Cross", + "Garner", + "Mann", + "Mack", + "Moss", + "Thornton", + "Dennis", + "Mcgee", + "Farmer", + "Delgado", + "Aguilar", + "Vega", + "Glover", + "Manning", + "Cohen", + "Harmon", + "Rodgers", + "Robbins", + "Newton", + "Todd", + "Blair", + "Higgins", + "Ingram", + "Reese", + "Cannon", + "Strickland", + "Townsend", + "Potter", + "Goodwin", + "Walton", + "Rowe", + "Hampton", + "Ortega", + "Patton", + "Swanson", + "Joseph", + "Francis", + "Goodman", + "Maldonado", + "Yates", + "Becker", + "Erickson", + "Hodges", + "Rios", + "Conner", + "Adkins", + "Webster", + "Norman", + "Malone", + "Hammond", + "Flowers", + "Cobb", + "Moody", + "Quinn", + "Blake", + "Maxwell", + "Pope", + "Floyd", + "Osborne", + "Paul", + "Mccarthy", + "Guerrero", + "Lindsey", + "Estrada", + "Sandoval", + "Gibbs", + "Tyler", + "Gross", + "Fitzgerald", + "Stokes", + "Doyle", + "Sherman", + "Saunders", + "Wise", + "Colon", + "Gill", + "Alvarado", + "Greer", + "Padilla", + "Simon", + "Waters", + "Nunez", + "Ballard", + "Schwartz", + "Mcbride", + "Houston", + "Christensen", + "Klein", + "Pratt", + "Briggs", + "Parsons", + "Mclaughlin", + "Zimmerman", + "French", + "Buchanan", + "Moran", + "Copeland", + "Roy", + "Pittman", + "Brady", + "Mccormick", + "Holloway", + "Brock", + "Poole", + "Frank", + "Logan", + "Owen", + "Bass", + "Marsh", + "Drake", + "Wong", + "Jefferson", + "Park", + "Morton", + "Abbott", + "Sparks", + "Patrick", + "Norton", + "Huff", + "Clayton", + "Massey", + "Lloyd", + "Figueroa", + "Carson", + "Bowers", + "Roberson", + "Barton", + "Tran", + "Lamb", + "Harrington", + "Casey", + "Boone", + "Cortez", + "Clarke", + "Mathis", + "Singleton", + "Wilkins", + "Cain", + "Bryan", + "Underwood", + "Hogan", + "Mckenzie", + "Collier", + "Luna", + "Phelps", + "Mcguire", + "Allison", + "Bridges", + "Wilkerson", + "Nash", + "Summers", + "Atkins", + "Wilcox", + "Pitts", + "Conley", + "Marquez", + "Burnett", + "Richard", + "Cochran", + "Chase", + "Davenport", + "Hood", + "Gates", + "Clay", + "Ayala", + "Sawyer", + "Roman", + "Vazquez", + "Dickerson", + "Hodge", + "Acosta", + "Flynn", + "Espinoza", + "Nicholson", + "Monroe", + "Wolf", + "Morrow", + "Kirk", + "Randall", + "Anthony", + "Whitaker", + "Oconnor", + "Skinner", + "Ware", + "Molina", + "Kirby", + "Huffman", + "Bradford", + "Charles", + "Gilmore", + "Dominguez", + "Oneal", + "Bruce", + "Lang", + "Combs", + "Kramer", + "Heath", + "Hancock", + "Gallagher", + "Gaines", + "Shaffer", + "Short", + "Wiggins", + "Mathews", + "Mcclain", + "Fischer", + "Wall", + "Small", + "Melton", + "Hensley", + "Bond", + "Dyer", + "Cameron", + "Grimes", + "Contreras", + "Christian", + "Wyatt", + "Baxter", + "Snow", + "Mosley", + "Shepherd", + "Larsen", + "Hoover", + "Beasley", + "Glenn", + "Petersen", + "Whitehead", + "Meyers", + "Keith", + "Garrison", + "Vincent", + "Shields", + "Horn", + "Savage", + "Olsen", + "Schroeder", + "Hartman", + "Woodard", + "Mueller", + "Kemp", + "Deleon", + "Booth", + "Patel", + "Calhoun", + "Wiley", + "Eaton", + "Cline", + "Navarro", + "Harrell", + "Lester", + "Humphrey", + "Parrish", + "Duran", + "Hutchinson", + "Hess", + "Dorsey", + "Bullock", + "Robles", + "Beard", + "Dalton", + "Avila", + "Vance", + "Rich", + "Blackwell", + "York", + "Johns", + "Blankenship", + "Trevino", + "Salinas", + "Campos", + "Pruitt", + "Moses", + "Callahan", + "Golden", + "Montoya", + "Hardin", + "Guerra", + "Mcdowell", + "Carey", + "Stafford", + "Gallegos", + "Henson", + "Wilkinson", + "Booker", + "Merritt", + "Miranda", + "Atkinson", + "Orr", + "Decker", + "Hobbs", + "Preston", + "Tanner", + "Knox", + "Pacheco", + "Stephenson", + "Glass", + "Rojas", + "Serrano", + "Marks", + "Hickman", + "English", + "Sweeney", + "Strong", + "Prince", + "Mcclure", + "Conway", + "Walter", + "Roth", + "Maynard", + "Farrell", + "Lowery", + "Hurst", + "Nixon", + "Weiss", + "Trujillo", + "Ellison", + "Sloan", + "Juarez", + "Winters", + "Mclean", + "Randolph", + "Leon", + "Boyer", + "Villarreal", + "Mccall", + "Gentry", + "Carrillo", + "Kent", + "Ayers", + "Lara", + "Shannon", + "Sexton", + "Pace", + "Hull", + "Leblanc", + "Browning", + "Velasquez", + "Leach", + "Chang", + "House", + "Sellers", + "Herring", + "Noble", + "Foley", + "Bartlett", + "Mercado", + "Landry", + "Durham", + "Walls", + "Barr", + "Mckee", + "Bauer", + "Rivers", + "Everett", + "Bradshaw", + "Pugh", + "Velez", + "Rush", + "Estes", + "Dodson", + "Morse", + "Sheppard", + "Weeks", + "Camacho", + "Bean", + "Barron", + "Livingston", + "Middleton", + "Spears", + "Branch", + "Blevins", + "Chen", + "Kerr", + "Mcconnell", + "Hatfield", + "Harding", + "Ashley", + "Solis", + "Herman", + "Frost", + "Giles", + "Blackburn", + "William", + "Pennington", + "Woodward", + "Finley", + "Mcintosh", + "Koch", + "Best", + "Solomon", + "Mccullough", + "Dudley", + "Nolan", + "Blanchard", + "Rivas", + "Brennan", + "Mejia", + "Kane", + "Benton", + "Joyce", + "Buckley", + "Haley", + "Valentine", + "Maddox", + "Russo", + "Mcknight", + "Buck", + "Moon", + "Mcmillan", + "Crosby", + "Berg", + "Dotson", + "Mays", + "Roach", + "Church", + "Chan", + "Richmond", + "Meadows", + "Faulkner", + "Oneill", + "Knapp", + "Kline", + "Barry", + "Ochoa", + "Jacobson", + "Gay", + "Avery", + "Hendricks", + "Horne", + "Shepard", + "Hebert", + "Cherry", + "Cardenas", + "Mcintyre", + "Whitney", + "Waller", + "Holman", + "Donaldson", + "Cantu", + "Terrell", + "Morin", + "Gillespie", + "Fuentes", + "Tillman", + "Sanford", + "Bentley", + "Peck", + "Key", + "Salas", + "Rollins", + "Gamble", + "Dickson", + "Battle", + "Santana", + "Cabrera", + "Cervantes", + "Howe", + "Hinton", + "Hurley", + "Spence", + "Zamora", + "Yang", + "Mcneil", + "Suarez", + "Case", + "Petty", + "Gould", + "Mcfarland", + "Sampson", + "Carver", + "Bray", + "Rosario", + "Macdonald", + "Stout", + "Hester", + "Melendez", + "Dillon", + "Farley", + "Hopper", + "Galloway", + "Potts", + "Bernard", + "Joyner", + "Stein", + "Aguirre", + "Osborn", + "Mercer", + "Bender", + "Franco", + "Rowland", + "Sykes", + "Benjamin", + "Travis", + "Pickett", + "Crane", + "Sears", + "Mayo", + "Dunlap", + "Hayden", + "Wilder", + "Mckay", + "Coffey", + "Mccarty", + "Ewing", + "Cooley", + "Vaughan", + "Bonner", + "Cotton", + "Holder", + "Stark", + "Ferrell", + "Cantrell", + "Fulton", + "Lynn", + "Lott", + "Calderon", + "Rosa", + "Pollard", + "Hooper", + "Burch", + "Mullen", + "Fry", + "Riddle", + "Levy", + "David", + "Duke", + "Odonnell", + "Guy", + "Michael", + "Britt", + "Frederick", + "Daugherty", + "Berger", + "Dillard", + "Alston", + "Jarvis", + "Frye", + "Riggs", + "Chaney", + "Odom", + "Duffy", + "Fitzpatrick", + "Valenzuela", + "Merrill", + "Mayer", + "Alford", + "Mcpherson", + "Acevedo", + "Donovan", + "Barrera", + "Albert", + "Cote", + "Reilly", + "Compton", + "Raymond", + "Mooney", + "Mcgowan", + "Craft", + "Cleveland", + "Clemons", + "Wynn", + "Nielsen", + "Baird", + "Stanton", + "Snider", + "Rosales", + "Bright", + "Witt", + "Stuart", + "Hays", + "Holden", + "Rutledge", + "Kinney", + "Clements", + "Castaneda", + "Slater", + "Hahn", + "Emerson", + "Conrad", + "Burks", + "Delaney", + "Pate", + "Lancaster", + "Sweet", + "Justice", + "Tyson", + "Sharpe", + "Whitfield", + "Talley", + "Macias", + "Irwin", + "Burris", + "Ratliff", + "Mccray", + "Madden", + "Kaufman", + "Beach", + "Goff", + "Cash", + "Bolton", + "Mcfadden", + "Levine", + "Good", + "Byers", + "Kirkland", + "Kidd", + "Workman", + "Carney", + "Dale", + "Mcleod", + "Holcomb", + "England", + "Finch", + "Head", + "Burt", + "Hendrix", + "Sosa", + "Haney", + "Franks", + "Sargent", + "Nieves", + "Downs", + "Rasmussen", + "Bird", + "Hewitt", + "Lindsay", + "Le", + "Foreman", + "Valencia", + "Oneil", + "Delacruz", + "Vinson", + "Dejesus", + "Hyde", + "Forbes", + "Gilliam", + "Guthrie", + "Wooten", + "Huber", + "Barlow", + "Boyle", + "Mcmahon", + "Buckner", + "Rocha", + "Puckett", + "Langley", + "Knowles", + "Cooke", + "Velazquez", + "Whitley", + "Noel", + "Vang", + "Shea", + "Rouse", + "Hartley", + "Mayfield", + "Elder", + "Rankin", + "Hanna", + "Cowan", + "Lucero", + "Arroyo", + "Slaughter", + "Haas", + "Oconnell", + "Minor", + "Kendrick", + "Shirley", + "Kendall", + "Boucher", + "Archer", + "Boggs", + "Odell", + "Dougherty", + "Andersen", + "Newell", + "Crowe", + "Wang", + "Friedman", + "Bland", + "Swain", + "Holley", + "Felix", + "Pearce", + "Childs", + "Yarbrough", + "Galvan", + "Proctor", + "Meeks", + "Lozano", + "Mora", + "Rangel", + "Bacon", + "Villanueva", + "Schaefer", + "Rosado", + "Helms", + "Boyce", + "Goss", + "Stinson", + "Smart", + "Lake", + "Ibarra", + "Hutchins", + "Covington", + "Reyna", + "Gregg", + "Werner", + "Crowley", + "Hatcher", + "Mackey", + "Bunch", + "Womack", + "Polk", + "Jamison", + "Dodd", + "Childress", + "Childers", + "Camp", + "Villa", + "Dye", + "Springer", + "Mahoney", + "Dailey", + "Belcher", + "Lockhart", + "Griggs", + "Costa", + "Connor", + "Brandt", + "Winter", + "Walden", + "Moser", + "Tracy", + "Tatum", + "Mccann", + "Akers", + "Lutz", + "Pryor", + "Law", + "Orozco", + "Mcallister", + "Lugo", + "Davies", + "Shoemaker", + "Madison", + "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", + "Hollis", + "Brandon", + "Arrington", + "Ervin", + "Clifton", + "Ritter", + "Mcghee", + "Bolden", + "Maloney", + "Gagnon", + "Dunbar", + "Ponce", + "Pike", + "Mayes", + "Heard", + "Beatty", + "Mobley", + "Kimball", + "Butts", + "Montes", + "Herbert", + "Grady", + "Eldridge", + "Braun", + "Hamm", + "Gibbons", + "Seymour", + "Moyer", + "Manley", + "Herron", + "Plummer", + "Elmore", + "Cramer", + "Gary", + "Rucker", + "Hilton", + "Blue", + "Pierson", + "Fontenot", + "Field", + "Rubio", + "Grace", + "Goldstein", + "Elkins", + "Wills", + "Novak", + "John", + "Hickey", + "Worley", + "Gorman", + "Katz", + "Dickinson", + "Broussard", + "Fritz", + "Woodruff", + "Crow", + "Christopher", + "Britton", + "Forrest", + "Nance", + "Lehman", + "Bingham", + "Zuniga", + "Whaley", + "Shafer", + "Coffman", + "Steward", + "Delarosa", + "Nix", + "Neely", + "Numbers", + "Mata", + "Manuel", + "Davila", + "Mccabe", + "Kessler", + "Emery", + "Bowling", + "Hinkle", + "Welsh", + "Pagan", + "Goldberg", + "Goins", + "Crouch", + "Cuevas", + "Quinones", + "Mcdermott", + "Hendrickson", + "Samuels", + "Denton", + "Bergeron", + "Lam", + "Ivey", + "Locke", + "Haines", + "Thurman", + "Snell", + "Hoskins", + "Byrne", + "Milton", + "Winston", + "Arthur", + "Arias", + "Stanford", + "Roe", + "Corbin", + "Beltran", + "Chappell", + "Hurt", + "Downey", + "Dooley", + "Tuttle", + "Couch", + "Payton", + "Mcelroy", + "Crockett", + "Groves", + "Clement", + "Leslie", + "Cartwright", + "Dickey", + "Mcgill", + "Dubois", + "Muniz", + "Erwin", + "Self", + "Tolbert", + "Dempsey", + "Cisneros", + "Sewell", + "Latham", + "Garland", + "Vigil", + "Tapia", + "Sterling", + "Rainey", + "Norwood", + "Lacy", + "Stroud", + "Meade", + "Amos", + "Tipton", + "Lord", + "Kuhn", + "Hilliard", + "Bonilla", + "Teague", + "Courtney", + "Gunn", + "Ho", + "Greenwood", + "Correa", + "Reece", + "Oesteon", + "Poe", + "Trent", + "Pineda", + "Phipps", + "Frey", + "Kaiser", + "Ames", + "Paige", + "Gunter", + "Schmitt", + "Milligan", + "Espinosa", + "Carlton", + "Bowden", + "Vickers", + "Lowry", + "Pritchard", + "Costello", + "Piper", + "Mcclellan", + "Lovell", + "Drew", + "Sheehan", + "Quick", + "Hatch", + "Dobson", + "Singh", + "Jeffries", + "Hollingsworth", + "Sorensen", + "Meza", + "Fink", + "Donnelly", + "Burrell", + "Bruno", + "Tomlinson", + "Colbert", + "Billings", + "Ritchie", + "Helton", + "Sutherland", + "Peoples", + "Mcqueen", + "Gaston", + "Thomason", + "Mckinley", + "Givens", + "Crocker", + "Vogel", + "Robison", + "Dunham", + "Coker", + "Swartz", + "Keys", + "Lilly", + "Ladner", + "Hannah", + "Willard", + "Richter", + "Hargrove", + "Edmonds", + "Brantley", + "Albright", + "Murdock", + "Boswell", + "Muller", + "Quintero", + "Padgett", + "Kenney", + "Daly", + "Connolly", + "Pierre", + "Inman", + "Quintana", + "Lund", + "Barnard", + "Villegas", + "Simons", + "Land", + "Huggins", + "Tidwell", + "Sanderson", + "Bullard", + "Mcclendon", + "Duarte", + "Draper", + "Meredith", + "Marrero", + "Dwyer", + "Abrams", + "Stover", + "Goode", + "Fraser", + "Crews", + "Bernal", + "Smiley", + "Godwin", + "Fish", + "Conklin", + "Mcneal", + "Baca", + "Esparza", + "Crowder", + "Bower", + "Nicholas", + "Chung", + "Brewster", + "Mcneill", + "Dick", + "Rodrigues", + "Leal", + "Coates", + "Raines", + "Mccain", + "Mccord", + "Miner", + "Holbrook", + "Swift", + "Dukes", + "Carlisle", + "Aldridge", + "Ackerman", + "Starks", + "Ricks", + "Holliday", + "Ferris", + "Hairston", + "Sheffield", + "Lange", + "Fountain", + "Marino", + "Doss", + "Betts", + "Kaplan", + "Carmichael", + "Bloom", + "Ruffin", + "Penn", + "Kern", + "Bowles", + "Sizemore", + "Larkin", + "Dupree", + "Jewell", + "Silver", + "Seals", + "Metcalf", + "Hutchison", + "Henley", + "Farr", + "Castle", + "Mccauley", + "Hankins", + "Gustafson", + "Deal", + "Curran", + "Ash", + "Waddell", + "Ramey", + "Cates", + "Pollock", + "Major", + "Irvin", + "Cummins", + "Messer", + "Heller", + "Dewitt", + "Lin", + "Funk", + "Cornett", + "Palacios", + "Galindo", + "Cano", + "Hathaway", + "Singer", + "Pham", + "Enriquez", + "Aaron", + "Salgado", + "Pelletier", + "Painter", + "Wiseman", + "Blount", + "Hand", + "Feliciano", + "Temple", + "Houser", + "Doherty", + "Mead", + "Mcgraw", + "Toney", + "Swan", + "Melvin", + "Capps", + "Blanco", + "Blackmon", + "Wesley", + "Thomson", + "Mcmanus", + "Fair", + "Burkett", + "Post", + "Gleason", + "Rudolph", + "Ott", + "Dickens", + "Cormier", + "Voss", + "Rushing", + "Rosenberg", + "Hurd", + "Dumas", + "Benitez", + "Arellano", + "Story", + "Marin", + "Caudill", + "Bragg", + "Jaramillo", + "Huerta", + "Gipson", + "Colvin", + "Biggs", + "Vela", + "Platt", + "Cassidy", + "Tompkins", + "Mccollum", + "Kay", + "Gabriel", + "Dolan", + "Daley", + "Crump", + "Street", + "Sneed", + "Kilgore", + "Grove", + "Grimm", + "Davison", + "Brunson", + "Prater", + "Marcum", + "Devine", + "Kyle", + "Dodge", + "Stratton", + "Rosas", + "Choi", + "Tripp", + "Ledbetter", + "Lay", + "Hightower", + "Haywood", + "Feldman", + "Epps", + "Yeager", + "Posey", + "Sylvester", + "Scruggs", + "Cope", + "Stubbs", + "Richey", + "Overton", + "Trotter", + "Sprague", + "Cordero", + "Butcher", + "Burger", + "Stiles", + "Burgos", + "Woodson", + "Horner", + "Bassett", + "Purcell", + "Haskins", + "Gee", + "Akins", + "Abraham", + "Hoyt", + "Ziegler", + "Spaulding", + "Hadley", + "Grubbs", + "Sumner", + "Murillo", + "Zavala", + "Shook", + "Lockwood", + "Jarrett", + "Driscoll", + "Dahl", + "Thorpe", + "Sheridan", + "Redmond", + "Putnam", + "Mcwilliams", + "Mcrae", + "Cornell", + "Felton", + "Romano", + "Joiner", + "Sadler", + "Hedrick", + "Hager", + "Hagen", + "Fitch", + "Coulter", + "Thacker", + "Mansfield", + "Langston", + "Guidry", + "Ferreira", + "Corley", + "Conn", + "Rossi", + "Lackey", + "Cody", + "Baez", + "Saenz", + "Mcnamara", + "Darnell", + "Michel", + "Mcmullen", + "Mckenna", + "Mcdonough", + "Link", + "Engel", + "Browne", + "Roper", + "Peacock", + "Eubanks", + "Drummond", + "Stringer", + "Pritchett", + "Parham", + "Mims", + "Landers", + "Ham", + "Grayson", + "Stacy", + "Schafer", + "Egan", + "Timmons", + "Ohara", + "Keen", + "Hamlin", + "Finn", + "Cortes", + "Mcnair", + "Louis", + "Clifford", + "Nadeau", + "Moseley", + "Michaud", + "Rosen", + "Oakes", + "Kurtz", + "Jeffers", + "Calloway", + "Beal", + "Bautista", + "Winn", + "Suggs", + "Stern", + "Stapleton", + "Lyles", + "Laird", + "Montano", + "Diamond", + "Dawkins", + "Roland", + "Hagan", + "Goldman", + "Bryson", + "Barajas", + "Lovett", + "Segura", + "Metz", + "Lockett", + "Langford", + "Hinson", + "Esteman", + "Rock", + "Hooks", + "Woody", + "Smallwood", + "Shapiro", + "Crowell", + "Whalen", + "Triplett", + "Hooker", + "Chatman", + "Aldrich", + "Cahill", + "Youngblood", + "Ybarra", + "Stallings", + "Sheets", + "Samuel", + "Reeder", + "Person", + "Pack", + "Lacey", + "Connelly", + "Bateman", + "Abernathy", + "Winkler", + "Wilkes", + "Masters", + "Hackett", + "Granger", + "Gillis", + "Schmitz", + "Sapp", + "Napier", + "Souza", + "Lanier", + "Gomes", + "Weir", + "Otero", + "Ledford", + "Burroughs", + "Babcock", + "Ventura", + "Siegel", + "Dugan", + "Clinton", + "Christie", + "Bledsoe", + "Atwood", + "Wray", + "Varner", + "Spangler", + "Otto", + "Anaya", + "Staley", + "Kraft", + "Fournier", + "Eddy", + "Belanger", + "Wolff", + "Thorne", + "Bynum", + "Burnette", + "Boykin", + "Swenson", + "Purvis", + "Pina", + "Khan", + "Duvall", + "Darby", + "Xiong", + "Kauffman", + "Ali", + "Yu", + "Healy", + "Engle", + "Corona", + "Benoit", + "Valle", + "Steiner", + "Spicer", + "Shaver", + "Randle", + "Lundy", + "Dow", + "Chin", + "Calvert", + "Staton", + "Neff", + "Kearney", + "Darden", + "Oakley", + "Medeiros", + "Mccracken", + "Crenshaw", + "Block", + "Beaver", + "Perdue", + "Dill", + "Whittaker", + "Tobin", + "Cornelius", + "Washburn", + "Hogue", + "Goodrich", + "Easley", + "Bravo", + "Dennison", + "Vera", + "Shipley", + "Kerns", + "Jorgensen", + "Crain", + "Abel", + "Villalobos", + "Maurer", + "Longoria", + "Keene", + "Coon", + "Sierra", + "Witherspoon", + "Staples", + "Pettit", + "Kincaid", + "Eason", + "Madrid", + "Echols", + "Lusk", + "Wu", + "Stahl", + "Currie", + "Thayer", + "Shultz", + "Sherwood", + "Mcnally", + "Seay", + "North", + "Maher", + "Kenny", + "Hope", + "Gagne", + "Barrow", + "Nava", + "Myles", + "Moreland", + "Honeycutt", + "Hearn", + "Diggs", + "Caron", + "Whitten", + "Oestebrook", + "Stovall", + "Ragland", + "Queen", + "Munson", + "Meier", + "Looney", + "Kimble", + "Jolly", + "Hobson", + "London", + "Goddard", + "Culver", + "Burr", + "Presley", + "Negron", + "Connell", + "Tovar", + "Marcus", + "Huddleston", + "Hammer", + "Ashby", + "Salter", + "Root", + "Pendleton", + "Oleary", + "Nickerson", + "Myrick", + "Judd", + "Jacobsen", + "Elliot", + "Bain", + "Adair", + "Starnes", + "Sheldon", + "Matos", + "Light", + "Busby", + "Herndon", + "Hanley", + "Bellamy", + "Jack", + "Doty", + "Bartley", + "Yazzie", + "Rowell", + "Parson", + "Gifford", + "Cullen", + "Christiansen", + "Benavides", + "Barnhart", + "Talbot", + "Mock", + "Crandall", + "Connors", + "Bonds", + "Whitt", + "Gage", + "Bergman", + "Arredondo", + "Addison", + "Marion", + "Lujan", + "Dowdy", + "Jernigan", + "Huynh", + "Bouchard", + "Dutton", + "Rhoades", + "Ouellette", + "Kiser", + "Rubin", + "Herrington", + "Hare", + "Denny", + "Blackman", + "Babb", + "Allred", + "Rudd", + "Paulson", + "Ogden", + "Koenig", + "Jacob", + "Irving", + "Geiger", + "Begay", + "Parra", + "Champion", + "Lassiter", + "Hawk", + "Esposito", + "Cho", + "Waldron", + "Vernon", + "Ransom", + "Prather", + "Keenan", + "Jean", + "Grover", + "Chacon", + "Vick", + "Sands", + "Roark", + "Parr", + "Mayberry", + "Greenberg", + "Coley", + "Bruner", + "Whitman", + "Skaggs", + "Shipman", + "Means", + "Leary", + "Hutton", + "Romo", + "Medrano", + "Ladd", + "Kruse", + "Friend", + "Darling", + "Askew", + "Valentin", + "Schulz", + "Alfaro", + "Tabor", + "Mohr", + "Gallo", + "Bermudez", + "Pereira", + "Isaac", + "Bliss", + "Reaves", + "Flint", + "Comer", + "Boston", + "Woodall", + "Naquin", + "Guevara", + "Earl", + "Delong", + "Carrier", + "Pickens", + "Brand", + "Tilley", + "Schaffer", + "Read", + "Lim", + "Knutson", + "Fenton", + "Doran", + "Chu", + "Vogt", + "Vann", + "Prescott", + "Mclain", + "Landis", + "Corcoran", + "Ambrose", + "Zapata", + "Hyatt", + "Hemphill", + "Faulk", + "Call", + "Dove", + "Boudreaux", + "Aragon", + "Whitlock", + "Trejo", + "Tackett", + "Shearer", + "Saldana", + "Hanks", + "Gold", + "Driver", + "Mckinnon", + "Koehler", + "Champagne", + "Bourgeois", + "Pool", + "Keyes", + "Goodson", + "Foote", + "Early", + "Lunsford", + "Goldsmith", + "Flood", + "Winslow", + "Sams", + "Reagan", + "Mccloud", + "Hough", + "Esquivel", + "Naylor", + "Loomis", + "Coronado", + "Ludwig", + "Braswell", + "Bearden", + "Sherrill", + "Huang", + "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", + "Hong", + "Hills", + "Ernst", + "Dozier", + "Burkhart", + "Bowser", + "Peralta", + "Daigle", + "Whittington", + "Sorenson", + "Saucedo", + "Roche", + "Redding", + "Loyd", + "Fugate", + "Avalos", + "Waite", + "Lind", + "Huston", + "Hay", + "Benedict", + "Hawthorne", + "Hamby", + "Boyles", + "Boles", + "Regan", + "Faust", + "Crook", + "Beam", + "Barger", + "Hinds", + "Gallardo", + "Elias", + "Willoughby", + "Willingham", + "Wilburn", + "Eckert", + "Busch", + "Zepeda", + "Worthington", + "Tinsley", + "Russ", + "Li", + "Hoff", + "Hawley", + "Carmona", + "Varela", + "Rector", + "Newcomb", + "Mallory", + "Kinsey", + "Dube", + "Whatley", + "Strange", + "Ragsdale", + "Ivy", + "Bernstein", + "Becerra", + "Yost", + "Mattson", + "Ly", + "Felder", + "Cheek", + "Luke", + "Handy", + "Grossman", + "Gauthier", + "Escobedo", + "Braden", + "Beckman", + "Mott", + "Hillman", + "Gil", + "Flaherty", + "Dykes", + "Doe", + "Stockton", + "Stearns", + "Lofton", + "Kitchen", + "Coats", + "Cavazos", + "Beavers", + "Barrios", + "Tang", + "Parish", + "Mosher", + "Lincoln", + "Cardwell", + "Coles", + "Burnham", + "Weller", + "Lemons", + "Beebe", + "Aguilera", + "Ring", + "Parnell", + "Harman", + "Couture", + "Alley", + "Schumacher", + "Redd", + "Dobbs", + "Blum", + "Blalock", + "Merchant", + "Ennis", + "Denson", + "Cottrell", + "Chester", + "Brannon", + "Bagley", + "Aviles", + "Watt", + "Sousa", + "Rosenthal", + "Rooney", + "Dietz", + "Blank", + "Paquette", + "Mcclelland", + "Duff", + "Velasco", + "Lentz", + "Grubb", + "Burrows", + "Barbour", + "Ulrich", + "Shockley", + "Rader", + "German", + "Beyer", + "Mixon", + "Layton", + "Altman", + "Alonzo", + "Weathers", + "Titus", + "Stoner", + "Squires", + "Shipp", + "Priest", + "Lipscomb", + "Cutler", + "Caballero", + "Zimmer", + "Willett", + "Thurston", + "Storey", + "Medley", + "Lyle", + "Epperson", + "Shah", + "Mcmillian", + "Baggett", + "Torrez", + "Laws", + "Hirsch", + "Dent", + "Corey", + "Poirier", + "Peachey", + "Jacques", + "Farrar", + "Creech", + "Barth", + "Trimble", + "France", + "Dupre", + "Albrecht", + "Sample", + "Lawler", + "Crisp", + "Conroy", + "Chadwick", + "Wetzel", + "Nesbitt", + "Murry", + "Jameson", + "Wilhelm", + "Patten", + "Minton", + "Matson", + "Kimbrough", + "Iverson", + "Guinn", + "Gale", + "Fortune", + "Croft", + "Toth", + "Pulliam", + "Nugent", + "Newby", + "Littlejohn", + "Dias", + "Canales", + "Bernier", + "Baron", + "Barney", + "Singletary", + "Renteria", + "Pruett", + "Mchugh", + "Mabry", + "Landrum", + "Brower", + "Weldon", + "Stoddard", + "Ruth", + "Cagle", + "Stjohn", + "Scales", + "Kohler", + "Kellogg", + "Hopson", + "Gant", + "Tharp", + "Gann", + "Zeigler", + "Pringle", + "Hammons", + "Fairchild", + "Deaton", + "Chavis", + "Carnes", + "Rowley", + "Matlock", + "Libby", + "Kearns", + "Irizarry", + "Carrington", + "Starkey", + "Pepper", + "Lopes", + "Jarrell", + "Fay", + "Craven", + "Beverly", + "Baum", + "Spain", + "Littlefield", + "Linn", + "Humphreys", + "Hook", + "High", + "Etheridge", + "Cuellar", + "Chastain", + "Chance", + "Bundy", + "Speer", + "Skelton", + "Quiroz", + "Pyle", + "Portillo", + "Ponder", + "Moulton", + "Machado", + "Liu", + "Killian", + "Hutson", + "Hitchcock", + "Ellsworth", + "Dowling", + "Cloud", + "Burdick", + "Spann", + "Pedersen", + "Levin", + "Leggett", + "Hayward", + "Hacker", + "Dietrich", + "Beaulieu", + "Barksdale", + "Wakefield", + "Snowden", + "Paris", + "Briscoe", + "Bowie", + "Berman", + "Ogle", + "Mcgregor", + "Laughlin", + "Helm", + "Burden", + "Wheatley", + "Schreiber", + "Pressley", + "Parris", + "Ng", + "Alaniz", + "Agee", + "Urban", + "Swann", + "Snodgrass", + "Schuster", + "Radford", + "Monk", + "Mattingly", + "Main", + "Lamar", + "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", + "Angel", + "Upton", + "Reardon", + "Michaels", + "Kelsey", + "Goetz", + "Eller", + "Bauman", + "Baer", + "Augustine", + "Layne", + "Hummel", + "Brenner", + "Amaya", + "Adamson", + "Ornelas", + "Dowell", + "Cloutier", + "Christy", + "Castellanos", + "Wing", + "Wellman", + "Saylor", + "Orourke", + "Moya", + "Montalvo", + "Kilpatrick", + "Harley", + "Durbin", + "Shell", + "Oldham", + "Kang", + "Garvin", + "Foss", + "Branham", + "Bartholomew", + "Templeton", + "Maguire", + "Holton", + "Alonso", + "Rider", + "Monahan", + "Mccormack", + "Beaty", + "Anders", + "Streeter", + "Nieto", + "Nielson", + "Moffett", + "Lankford", + "Keating", + "Heck", + "Gatlin", + "Delatorre", + "Callaway", + "Adcock", + "Worrell", + "Unger", + "Robinette", + "Nowak", + "Jeter", + "Brunner", + "Ashton", + "Steen", + "Parrott", + "Overstreet", + "Nobles", + "Montanez", + "Luther", + "Clevenger", + "Brinkley", + "Trahan", + "Quarles", + "Pickering", + "Pederson", + "Jansen", + "Grantham", + "Gilchrist", + "Crespo", + "Aiken", + "Schell", + "Schaeffer", + "Lorenz", + "Leyva", + "Harms", + "Dyson", + "Wallis", + "Pease", + "Leavitt", + "Hyman", + "Cheng", + "Cavanaugh", + "Batts", + "Warden", + "Seaman", + "Rockwell", + "Quezada", + "Paxton", + "Linder", + "Houck", + "Fontaine", + "Durant", + "Caruso", + "Adler", + "Pimentel", + "Mize", + "Lytle", + "Donald", + "Cleary", + "Cason", + "Acker", + "Switzer", + "Salmon", + "Isaacs", + "Higginbotham", + "Han", + "Waterman", + "Vandyke", + "Stamper", + "Sisk", + "Shuler", + "Riddick", + "Redman", + "Mcmahan", + "Levesque", + "Hatton", + "Bronson", + "Bollinger", + "Arnett", + "Okeefe", + "Gerber", + "Gannon", + "Farnsworth", + "Baughman", + "Silverman", + "Satterfield", + "Royal", + "Mccrary", + "Kowalski", + "Joy", + "Grigsby", + "Greco", + "Cabral", + "Trout", + "Rinehart", + "Mahon", + "Linton", + "Gooden", + "Curley", + "Baugh", + "Wyman", + "Weiner", + "Schwab", + "Schuler", + "Morrissey", + "Mahan", + "Coy", + "Bunn", + "Andrew", + "Thrasher", + "Spear", + "Waggoner", + "Shelley", + "Robert", + "Qualls", + "Purdy", + "Mcwhorter", + "Mauldin", + "Mark", + "Jordon", + "Gilman", + "Perryman", + "Newsom", + "Menard", + "Martino", + "Graf", + "Billingsley", + "Artis", + "Simpkins", + "Salisbury", + "Quintanilla", + "Gilliland", + "Fraley", + "Foust", + "Crouse", + "Scarborough", + "Ngo", + "Grissom", + "Fultz", + "Rico", + "Marlow", + "Markham", + "Madrigal", + "Lawton", + "Barfield", + "Whiting", + "Varney", + "Schwarz", + "Huey", + "Gooch", + "Arce", + "Wheat", + "Truong", + "Poulin", + "Mackenzie", + "Leone", + "Hurtado", + "Selby", + "Gaither", + "Fortner", + "Culpepper", + "Coughlin", + "Brinson", + "Boudreau", + "Barkley", + "Bales", + "Stepp", + "Holm", + "Tan", + "Schilling", + "Morrell", + "Kahn", + "Heaton", + "Gamez", + "Douglass", + "Causey", + "Brothers", + "Turpin", + "Shanks", + "Schrader", + "Meek", + "Isom", + "Hardison", + "Carranza", + "Yanez", + "Way", + "Scroggins", + "Schofield", + "Runyon", + "Ratcliff", + "Murrell", + "Moeller", + "Irby", + "Currier", + "Butterfield", + "Yee", + "Ralston", + "Pullen", + "Pinson", + "Estep", + "Este", + "Carbone", + "Lance", + "Hawks", + "Ellington", + "Casillas", + "Spurlock", + "Sikes", + "Motley", + "Mccartney", + "Kruger", + "Isbell", + "Houle", + "Francisco", + "Burk", + "Bone", + "Tomlin", + "Shelby", + "Quigley", + "Neumann", + "Lovelace", + "Fennell", + "Colby", + "Cheatham", + "Bustamante", + "Skidmore", + "Hidalgo", + "Forman", + "Culp", + "Bowens", + "Betancourt", + "Aquino", + "Robb", + "Rea", + "Milner", + "Martel", + "Gresham", + "Wiles", + "Ricketts", + "Gavin", + "Dowd", + "Collazo", + "Bostic", + "Blakely", + "Sherrod", + "Power", + "Kenyon", + "Gandy", + "Ebert", + "Deloach", + "Cary", + "Bull", + "Allard", + "Sauer", + "Robins", + "Olivares", + "Gillette", + "Chestnut", + "Bourque", + "Paine", + "Lyman", + "Hite", + "Hauser", + "Devore", + "Crawley", + "Chapa", + "Vu", + "Tobias", + "Talbert", + "Poindexter", + "Millard", + "Meador", + "Mcduffie", + "Mattox", + "Kraus", + "Harkins", + "Choate", + "Bess", + "Wren", + "Sledge", + "Sanborn", + "Outlaw", + "Kinder", + "Geary", + "Cornwell", + "Barclay", + "Adam", + "Abney", + "Seward", + "Rhoads", + "Howland", + "Fortier", + "Esteer", + "Benner", + "Vines", + "Tubbs", + "Troutman", + "Rapp", + "Noe", + "Mccurdy", + "Harder", + "Deluca", + "Oestemoreland", + "South", + "Havens", + "Guajardo", + "Ely", + "Clary", + "Seal", + "Meehan", + "Herzog", + "Guillen", + "Ashcraft", + "Waugh", + "Renner", + "Milam", + "Jung", + "Elrod", + "Churchill", + "Buford", + "Breaux", + "Bolin", + "Asher", + "Windham", + "Tirado", + "Pemberton", + "Nolen", + "Noland", + "Knott", + "Emmons", + "Cornish", + "Christenson", + "Brownlee", + "Barbee", + "Waldrop", + "Pitt", + "Olvera", + "Lombardi", + "Gruber", + "Gaffney", + "Eggleston", + "Banda", + "Archuleta", + "Still", + "Slone", + "Prewitt", + "Pfeiffer", + "Nettles", + "Mena", + "Mcadams", + "Henning", + "Gardiner", + "Cromwell", + "Chisholm", + "Burleson", + "Box", + "Vest", + "Oglesby", + "Mccarter", + "Malcolm", + "Lumpkin", + "Larue", + "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", + "Harry", + "Guyton", + "Giordano", + "Alderman", + "Valdes", + "Polanco", + "Pappas", + "Lively", + "Grogan", + "Griffiths", + "Bobo", + "Arevalo", + "Whitson", + "Sowell", + "Rendon", + "Matthew", + "Julian", + "Fernandes", + "Farrow", + "Edmond", + "Benavidez", + "Ayres", + "Alicea", + "Stump", + "Smalley", + "Seitz", + "Schulte", + "Gilley", + "Gallant", + "Dewey", + "Casper", + "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", + "Parent", + "Jude", + "Younger", + "Trammell", + "Partridge", + "Marvin", + "Mace", + "Lomax", + "Lemieux", + "Gossett", + "Frantz", + "Fogle", + "Cooney", + "Broughton", + "Pence", + "Paulsen", + "Neil", + "Muncy", + "Mcarthur", + "Hollins", + "Edward", + "Beauchamp", + "Withers", + "Osorio", + "Mulligan", + "Hoyle", + "Foy", + "Dockery", + "Cockrell", + "Begley", + "Amador", + "Roby", + "Rains", + "Lindquist", + "Gentile", + "Everhart", + "Bohannon", + "Wylie", + "Thao", + "Sommers", + "Purnell", + "Palma", + "Fortin", + "Dunning", + "Breeden", + "Vail", + "Phelan", + "Phan", + "Marx", + "Cosby", + "Colburn", + "Chong", + "Boling", + "Biddle", + "Ledesma", + "Gaddis", + "Denney", + "Chow", + "Bueno", + "Berrios", + "Wicker", + "Tolliver", + "Thibodeaux", + "Nagle", + "Lavoie", + "Fisk", + "Do", + "Crist", + "Barbosa", + "Reedy", + "March", + "Locklear", + "Kolb", + "Himes", + "Behrens", + "Beckwith", + "Beckham", + "Weems", + "Wahl", + "Shorter", + "Shackelford", + "Rees", + "Muse", + "Free", + "Cerda", + "Valadez", + "Thibodeau", + "Saavedra", + "Ridgeway", + "Reiter", + "Mchenry", + "Majors", + "Lachance", + "Keaton", + "Israel", + "Ferrara", + "Falcon", + "Clemens", + "Blocker", + "Applegate", + "Paz", + "Needham", + "Mojica", + "Kuykendall", + "Hamel", + "Escamilla", + "Doughty", + "Burchett", + "Ainsworth", + "Wilbur", + "Vidal", + "Upchurch", + "Thigpen", + "Strauss", + "Spruill", + "Sowers", + "Riggins", + "Ricker", + "Mccombs", + "Harlow", + "Garnett", + "Buffington", + "Yi", + "Sotelo", + "Olivas", + "Negrete", + "Morey", + "Macon", + "Logsdon", + "Lapointe", + "Florence", + "Cathey", + "Bigelow", + "Bello", + "Oestefall", + "Stubblefield", + "Peak", + "Lindley", + "Jeffrey", + "Hein", + "Hawes", + "Farrington", + "Edge", + "Breen", + "Birch", + "Wilde", + "Steed", + "Sepulveda", + "Reinhardt", + "Proffitt", + "Minter", + "Messina", + "Mcnabb", + "Maier", + "Keeler", + "Gamboa", + "Donohue", + "Dexter", + "Basham", + "Shinn", + "Orlando", + "Crooks", + "Cota", + "Borders", + "Bills", + "Bachman", + "Tisdale", + "Tavares", + "Schmid", + "Pickard", + "Jasper", + "Gulley", + "Fonseca", + "Delossantos", + "Condon", + "Clancy", + "Batista", + "Wicks", + "Wadsworth", + "New", + "Martell", + "Lo", + "Littleton", + "Ison", + "Haag", + "Folsom", + "Brumfield", + "Broyles", + "Brito", + "Mireles", + "Mcdonnell", + "Leclair", + "Hamblin", + "Gough", + "Fanning", + "Binder", + "Winfield", + "Whitworth", + "Soriano", + "Palumbo", + "Newkirk", + "Mangum", + "Hutcherson", + "Comstock", + "Cecil", + "Carlin", + "Beall", + "Bair", + "Wendt", + "Watters", + "Walling", + "Putman", + "Otoole", + "Oliva", + "Morley", + "Mares", + "Lemus", + "Keener", + "Jeffery", + "Hundley", + "Dial", + "Damico", + "Billups", + "Strother", + "Mcfarlane", + "Lamm", + "Eaves", + "Crutcher", + "Caraballo", + "Canty", + "Atwell", + "Taft", + "Siler", + "Rust", + "Rawls", + "Rawlings", + "Prieto", + "Niles", + "Mcneely", + "Mcafee", + "Hulsey", + "Harlan", + "Hackney", + "Galvez", + "Escalante", + "Delagarza", + "Crider", + "Charlton", + "Bandy", + "Wilbanks", + "Stowe", + "Steinberg", + "Samson", + "Renfro", + "Masterson", + "Massie", + "Lanham", + "Haskell", + "Hamrick", + "Fort", + "Dehart", + "Card", + "Burdette", + "Branson", + "Bourne", + "Babin", + "Aleman", + "Worthy", + "Tibbs", + "Sweat", + "Smoot", + "Slack", + "Paradis", + "Packard", + "Mull", + "Luce", + "Houghton", + "Gantt", + "Furman", + "Danner", + "Christianson", + "Burge", + "Broderick", + "Ashford", + "Arndt", + "Almeida", + "Stallworth", + "Shade", + "Searcy", + "Sager", + "Noonan", + "Mclemore", + "Mcintire", + "Maxey", + "Lavigne", + "Jobe", + "Ireland", + "Ferrer", + "Falk", + "Edgar", + "Coffin", + "Byrnes", + "Aranda", + "Apodaca", + "Stamps", + "Rounds", + "Peek", + "Olmstead", + "Lewandowski", + "Kaminski", + "Her", + "Dunaway", + "Bruns", + "Brackett", + "Amato", + "Reich", + "Mcclung", + "Lacroix", + "Koontz", + "Herrick", + "Hardesty", + "Flanders", + "Cousins", + "Close", + "Cato", + "Cade", + "Vickery", + "Shank", + "Nagel", + "Dupuis", + "Croteau", + "Cotter", + "Cable", + "Stuckey", + "Stine", + "Porterfield", + "Pauley", + "Nye", + "Moffitt", + "Lu", + "Knudsen", + "Hardwick", + "Goforth", + "Dupont", + "Blunt", + "Barrows", + "Barnhill", + "Shull", + "Rash", + "Ralph", + "Penny", + "Lorenzo", + "Loftis", + "Lemay", + "Kitchens", + "Horvath", + "Grenier", + "Fuchs", + "Fairbanks", + "Culbertson", + "Calkins", + "Burnside", + "Beattie", + "Ashworth", + "Albertson", + "Wertz", + "Vo", + "Vaught", + "Vallejo", + "Tyree", + "Turk", + "Tuck", + "Tijerina", + "Sage", + "Picard", + "Peterman", + "Otis", + "Marroquin", + "Marr", + "Lantz", + "Hoang", + "Demarco", + "Daily", + "Cone", + "Berube", + "Barnette", + "Wharton", + "Stinnett", + "Slocum", + "Scanlon", + "Sander", + "Pinto", + "Mancuso", + "Lima", + "Judge", + "Headley", + "Epstein", + "Counts", + "Clarkson", + "Carnahan", + "Brice", + "Boren", + "Arteaga", + "Adame", + "Zook", + "Whittle", + "Whitehurst", + "Wenzel", + "Saxton", + "Rhea", + "Reddick", + "Puente", + "Hazel", + "Handley", + "Haggerty", + "Earley", + "Devlin", + "Dallas", + "Chaffin", + "Cady", + "Ahmed", + "Acuna", + "Solano", + "Sigler", + "Pollack", + "Pendergrass", + "Ostrander", + "Janes", + "Francois", + "Fine", + "Crutchfield", + "Cordell", + "Chamberlin", + "Brubaker", + "Baptiste", + "Willson", + "Reis", + "Neeley", + "Mullin", + "Mercier", + "Lira", + "Layman", + "Keeling", + "Higdon", + "Guest", + "Forrester", + "Espinal", + "Dion", + "Chapin", + "Carl", + "Warfield", + "Toledo", + "Pulido", + "Peebles", + "Nagy", + "Montague", + "Mello", + "Lear", + "Jaeger", + "Hogg", + "Graff", + "Furr", + "Derrick", + "Cave", + "Canada", + "Soliz", + "Poore", + "Mendenhall", + "Mclaurin", + "Maestas", + "Low", + "Gable", + "Belt", + "Barraza", + "Tillery", + "Snead", + "Pond", + "Neill", + "Mcculloch", + "Mccorkle", + "Lightfoot", + "Hutchings", + "Holloman", + "Harness", + "Dorn", + "Council", + "Bock", + "Zielinski", + "Turley", + "Treadwell", + "Stpierre", + "Starling", + "Somers", + "Oswald", + "Merrick", + "Marquis", + "Ivory", + "Esteerling", + "Bivens", + "Truitt", + "Poston", + "Parry", + "Ontiveros", + "Olivarez", + "Neville", + "Moreau", + "Medlin", + "Ma", + "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", + "Stacey", + "Shin", + "Ragan", + "Pridgen", + "Mcvey", + "Matheny", + "Leigh", + "Lafleur", + "Franz", + "Ferraro", + "Dugger", + "Whiteside", + "Rigsby", + "Mcmurray", + "Lehmann", + "Large", + "Jacoby", + "Hildebrand", + "Hendrick", + "Headrick", + "Goad", + "Fincher", + "Drury", + "Borges", + "Archibald", + "Albers", + "Woodcock", + "Trapp", + "Soares", + "Seaton", + "Richie", + "Monson", + "Luckett", + "Lindberg", + "Kopp", + "Keeton", + "Hsu", + "Healey", + "Garvey", + "Gaddy", + "Fain", + "Burchfield", + "Badger", + "Wentworth", + "Strand", + "Stack", + "Spooner", + "Saucier", + "Sales", + "Ruby", + "Ricci", + "Plunkett", + "Pannell", + "Ness", + "Leger", + "Hoy", + "Freitas", + "Fong", + "Elizondo", + "Duval", + "Chun", + "Calvin", + "Beaudoin", + "Urbina", + "Stock", + "Rickard", + "Partin", + "Moe", + "Mcgrew", + "Mcclintock", + "Ledoux", + "Forsyth", + "Faison", + "Devries", + "Bertrand", + "Wasson", + "Tilton", + "Scarbrough", + "Pride", + "Oh", + "Leung", + "Larry", + "Irvine", + "Garber", + "Denning", + "Corral", + "Colley", + "Castleberry", + "Bowlin", + "Bogan", + "Beale", + "Baines", + "True", + "Trice", + "Rayburn", + "Parkinson", + "Pak", + "Nunes", + "Mcmillen", + "Leahy", + "Lea", + "Kimmel", + "Higgs", + "Fulmer", + "Carden", + "Bedford", + "Taggart", + "Spearman", + "Register", + "Prichard", + "Morrill", + "Koonce", + "Heinz", + "Hedges", + "Guenther", + "Grice", + "Findley", + "Earle", + "Dover", + "Creighton", + "Boothe", + "Bayer", + "Arreola", + "Vitale", + "Valles", + "See", + "Raney", + "Peter", + "Osgood", + "Lowell", + "Hanlon", + "Burley", + "Bounds", + "Worden", + "Weatherly", + "Vetter", + "Tanaka", + "Stiltner", + "Sell", + "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", + "Tam", + "Paterson", + "Oates", + "Menendez", + "Longo", + "Hargis", + "Greenlee", + "Gillen", + "Desantis", + "Conover", + "Breedlove", + "Wayne", + "Sumpter", + "Scherer", + "Rupp", + "Reichert", + "Heredia", + "Fallon", + "Creel", + "Cohn", + "Clemmons", + "Casas", + "Bickford", + "Belton", + "Bach", + "Williford", + "Whitcomb", + "Tennant", + "Sutter", + "Stull", + "Sessions", + "Mccallum", + "Manson", + "Langlois", + "Keel", + "Keegan", + "Emanuel", + "Dangelo", + "Dancy", + "Damron", + "Clapp", + "Clanton", + "Bankston", + "Trinidad", + "Oliveira", + "Mintz", + "Mcinnis", + "Martens", + "Mabe", + "Laster", + "Jolley", + "Irish", + "Hildreth", + "Hefner", + "Glaser", + "Duckett", + "Demers", + "Brockman", + "Blais", + "Back", + "Alcorn", + "Agnew", + "Toliver", + "Tice", + "Song", + "Seeley", + "Najera", + "Musser", + "Mcfall", + "Laplante", + "Galvin", + "Fajardo", + "Doan", + "Coyne", + "Copley", + "Clawson", + "Cheung", + "Barone", + "Wynne", + "Woodley", + "Tremblay", + "Stoll", + "Sparrow", + "Sparkman", + "Schweitzer", + "Sasser", + "Samples", + "Roney", + "Ramon", + "Legg", + "Lai", + "Joe", + "Heim", + "Farias", + "Concepcion", + "Colwell", + "Christman", + "Bratcher", + "Alba", + "Winchester", + "Upshaw", + "Southerland", + "Sorrell", + "Shay", + "Sells", + "Mount", + "Mccloskey", + "Martindale", + "Luttrell", + "Loveless", + "Lovejoy", + "Linares", + "Latimer", + "Holly", + "Embry", + "Coombs", + "Bratton", + "Bostick", + "Boss", + "Venable", + "Tuggle", + "Toro", + "Staggs", + "Sandlin", + "Jefferies", + "Heckman", + "Griffis", + "Crayton", + "Clem", + "Button", + "Browder", + "Allan", + "Thorton", + "Sturgill", + "Sprouse", + "Royer", + "Rousseau", + "Ridenour", + "Pogue", + "Perales", + "Peeples", + "Metzler", + "Mesa", + "Mccutcheon", + "Mcbee", + "Jay", + "Hornsby", + "Heffner", + "Corrigan", + "Armijo", + "Vue", + "Romeo", + "Plante", + "Peyton", + "Paredes", + "Macklin", + "Hussey", + "Hodgson", + "Granados", + "Frias", + "Carman", + "Brent", + "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", + "Carlos", + "Brinkman", + "Baumgartner", + "Zhang", + "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", + "Southern", + "Snipes", + "Rickman", + "Pipkin", + "Peace", + "Pantoja", + "Orosco", + "Moniz", + "Lawless", + "Kunkel", + "Hibbard", + "Galarza", + "Enos", + "Bussey", + "Settle", + "Schott", + "Salcido", + "Perreault", + "Mcdougal", + "Mccool", + "Haight", + "Garris", + "Ferry", + "Esteon", + "Conyers", + "Atherton", + "Wimberly", + "Utley", + "Stephen", + "Spellman", + "Smithson", + "Slagle", + "Skipper", + "Ritchey", + "Rand", + "Petit", + "Osullivan", + "Oaks", + "Nutt", + "Mcvay", + "Mccreary", + "Mayhew", + "Knoll", + "Jewett", + "Harwood", + "Hailey", + "Cardoza", + "Ashe", + "Arriaga", + "Andres", + "Zeller", + "Wirth", + "Whitmire", + "Stauffer", + "Spring", + "Rountree", + "Redden", + "Mccaffrey", + "Martz", + "Loving", + "Larose", + "Langdon", + "Humes", + "Gaskin", + "Faber", + "Doll", + "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", + "Weed", + "Trask", + "Rosser", + "Regalado", + "Mcewen", + "Keefe", + "Fuqua", + "Echevarria", + "Domingo", + "Dang", + "Caro", + "Boynton", + "Andrus", + "Wild", + "Viera", + "Vanmeter", + "Taber", + "Spradlin", + "Seibert", + "Provost", + "Prentice", + "Oliphant", + "Laporte", + "Hwang", + "Hatchett", + "Hass", + "Greiner", + "Freedman", + "Covert", + "Chilton", + "Byars", + "Wiese", + "Venegas", + "Swank", + "Shrader", + "Roderick", + "Roberge", + "Mullis", + "Mortensen", + "Mccune", + "Marlowe", + "Kirchner", + "Keck", + "Isaacson", + "Hostetler", + "Halverson", + "Gunther", + "Griswold", + "Gerard", + "Fenner", + "Durden", + "Blackwood", + "Bertram", + "Ahrens", + "Sawyers", + "Savoy", + "Nabors", + "Mcswain", + "Mackay", + "Loy", + "Lavender", + "Lash", + "Labbe", + "Jessup", + "Hubert", + "Fullerton", + "Donnell", + "Cruse", + "Crittenden", + "Correia", + "Centeno", + "Caudle", + "Canady", + "Callender", + "Alarcon", + "Ahern", + "Winfrey", + "Tribble", + "Tom", + "Styles", + "Salley", + "Roden", + "Musgrove", + "Minnick", + "Fortenberry", + "Carrion", + "Bunting", + "Bethel", + "Batiste", + "Woo", + "Whited", + "Underhill", + "Stillwell", + "Silvia", + "Rauch", + "Pippin", + "Perrin", + "Messenger", + "Mancini", + "Lister", + "Kinard", + "Hartmann", + "Fleck", + "Broadway", + "Wilt", + "Treadway", + "Thornhill", + "Speed", + "Spalding", + "Sam", + "Rafferty", + "Pitre", + "Patino", + "Ordonez", + "Linkous", + "Kelleher", + "Homan", + "Holiday", + "Galbraith", + "Feeney", + "Dorris", + "Curtin", + "Coward", + "Camarillo", + "Buss", + "Bunnell", + "Bolt", + "Beeler", + "Autry", + "Alcala", + "Witte", + "Wentz", + "Stidham", + "Shively", + "Nunley", + "Meacham", + "Martins", + "Lemke", + "Lefebvre", + "Kaye", + "Hynes", + "Horowitz", + "Hoppe", + "Holcombe", + "Estrella", + "Dunne", + "Derr", + "Cochrane", + "Brittain", + "Bedard", + "Beauregard", + "Torrence", + "Strunk", + "Soria", + "Simonson", + "Shumaker", + "Scoggins", + "Packer", + "Oconner", + "Moriarty", + "Leroy", + "Kuntz", + "Ives", + "Hutcheson", + "Horan", + "Hales", + "Garmon", + "Fitts", + "Dell", + "Bohn", + "Atchison", + "Worth", + "Wisniewski", + "Will", + "Vanwinkle", + "Sturm", + "Sallee", + "Prosser", + "Moen", + "Lundberg", + "Kunz", + "Kohl", + "Keane", + "Jorgenson", + "Jaynes", + "Funderburk", + "Freed", + "Frame", + "Durr", + "Creamer", + "Cosgrove", + "Candelaria", + "Berlin", + "Batson", + "Vanhoose", + "Thomsen", + "Teeter", + "Sommer", + "Smyth", + "Sena", + "Redmon", + "Orellana", + "Maness", + "Lennon", + "Heflin", + "Goulet", + "Frick", + "Forney", + "Dollar", + "Bunker", + "Asbury", + "Aguiar", + "Talbott", + "Southard", + "Pleasant", + "Mowery", + "Mears", + "Lemmon", + "Krieger", + "Hickson", + "Gracia", + "Elston", + "Duong", + "Delgadillo", + "Dayton", + "Dasilva", + "Conaway", + "Catron", + "Bruton", + "Bradbury", + "Bordelon", + "Bivins", + "Bittner", + "Bergstrom", + "Beals", + "Abell", + "Whelan", + "Travers", + "Tejada", + "Pulley", + "Pino", + "Norfleet", + "Nealy", + "Maes", + "Loper", + "Held", + "Gerald", + "Gatewood", + "Frierson", + "Freund", + "Finnegan", + "Cupp", + "Covey", + "Catalano", + "Boehm", + "Bader", + "Yoon", + "Walston", + "Tenney", + "Sipes", + "Roller", + "Rawlins", + "Medlock", + "Mccaskill", + "Mccallister", + "Marcotte", + "Maclean", + "Hughey", + "Henke", + "Harwell", + "Gladney", + "Gilson", + "Dew", + "Chism", + "Caskey", + "Brandenburg", + "Baylor", + "Villasenor", + "Veal", + "Van", + "Thatcher", + "Stegall", + "Shore", + "Petrie", + "Nowlin", + "Navarrete", + "Muhammad", + "Lombard", + "Loftin", + "Lemaster", + "Kroll", + "Kovach", + "Kimbrell", + "Kidwell", + "Hershberger", + "Fulcher", + "Eng", + "Cantwell", + "Bustos", + "Boland", + "Bobbitt", + "Binkley", + "Oesteer", + "Weis", + "Verdin", + "Tong", + "Tiller", + "Sisco", + "Sharkey", + "Seymore", + "Rosenbaum", + "Rohr", + "Quinonez", + "Pinkston", + "Nation", + "Malley", + "Logue", + "Lessard", + "Lerner", + "Lebron", + "Krauss", + "Klinger", + "Halstead", + "Haller", + "Getz", + "Burrow", + "Brant", + "Alger", + "Victor", + "Shores", + "Scully", + "Pounds", + "Pfeifer", + "Perron", + "Nelms", + "Munn", + "Mcmaster", + "Mckenney", + "Manns", + "Knudson", + "Hutchens", + "Huskey", + "Goebel", + "Flagg", + "Cushman", + "Click", + "Castellano", + "Carder", + "Bumgarner", + "Blaine", + "Bible", + "Wampler", + "Spinks", + "Robson", + "Neel", + "Mcreynolds", + "Mathias", + "Maas", + "Loera", + "Kasper", + "Jose", + "Jenson", + "Florez", + "Coons", + "Buckingham", + "Brogan", + "Berryman", + "Wilmoth", + "Wilhite", + "Thrash", + "Shephard", + "Seidel", + "Schulze", + "Roldan", + "Pettis", + "Obryan", + "Maki", + "Mackie", + "Hatley", + "Frazer", + "Fiore", + "Falls", + "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", + "Archie", + "Antonio", + "Angulo", + "Wallen", + "Tapp", + "Silvers", + "Ramsay", + "Oshea", + "Orta", + "Moll", + "Mckeever", + "Mcgehee", + "Luciano", + "Linville", + "Kiefer", + "Ketchum", + "Howerton", + "Groce", + "Gaylord", + "Gass", + "Fusco", + "Corbitt", + "Blythe", + "Betz", + "Bartels", + "Amaral", + "Aiello", + "Yoo", + "Weddle", + "Troy", + "Sun", + "Sperry", + "Seiler", + "Runyan", + "Raley", + "Overby", + "Osteen", + "Olds", + "Mckeown", + "Mauro", + "Matney", + "Lauer", + "Lattimore", + "Hindman", + "Hartwell", + "Fredrickson", + "Fredericks", + "Espino", + "Clegg", + "Carswell", + "Cambell", + "Burkholder", + "August", + "Woodbury", + "Welker", + "Totten", + "Thornburg", + "Theriault", + "Stitt", + "Stamm", + "Stackhouse", + "Simone", + "Scholl", + "Saxon", + "Rife", + "Razo", + "Quinlan", + "Pinkerton", + "Olivo", + "Nesmith", + "Nall", + "Mattos", + "Leak", + "Lafferty", + "Justus", + "Giron", + "Geer", + "Fielder", + "Eagle", + "Drayton", + "Dortch", + "Conners", + "Conger", + "Chau", + "Boatwright", + "Billiot", + "Barden", + "Armenta", + "Antoine", + "Tibbetts", + "Steadman", + "Slattery", + "Sides", + "Rinaldi", + "Raynor", + "Rayford", + "Pinckney", + "Pettigrew", + "Nickel", + "Milne", + "Matteson", + "Halsey", + "Gonsalves", + "Fellows", + "Durand", + "Desimone", + "Cowley", + "Cowles", + "Brill", + "Barham", + "Barela", + "Barba", + "Ashmore", + "Withrow", + "Valenti", + "Tejeda", + "Spriggs", + "Sayre", + "Salerno", + "Place", + "Peltier", + "Peel", + "Merriman", + "Matheson", + "Lowman", + "Lindstrom", + "Hyland", + "Homer", + "Ha", + "Giroux", + "Fries", + "Frasier", + "Earls", + "Dugas", + "Damon", + "Dabney", + "Collado", + "Briseno", + "Baxley", + "Andre", + "Word", + "Whyte", + "Wenger", + "Vanover", + "Vanburen", + "Thiel", + "Schindler", + "Schiller", + "Rigby", + "Pomeroy", + "Passmore", + "Marble", + "Manzo", + "Mahaffey", + "Lindgren", + "Laflamme", + "Greathouse", + "Fite", + "Ferrari", + "Calabrese", + "Bayne", + "Yamamoto", + "Wick", + "Townes", + "Thames", + "Steel", + "Reinhart", + "Peeler", + "Naranjo", + "Montez", + "Mcdade", + "Mast", + "Markley", + "Marchand", + "Leeper", + "Kong", + "Kellum", + "Hudgens", + "Hennessey", + "Hadden", + "Guess", + "Gainey", + "Coppola", + "Borrego", + "Bolling", + "Beane", + "Ault", + "Slaton", + "Poland", + "Pape", + "Null", + "Mulkey", + "Lightner", + "Langer", + "Hillard", + "Glasgow", + "Fabian", + "Ethridge", + "Enright", + "Derosa", + "Baskin", + "Alfred", + "Weinberg", + "Turman", + "Tinker", + "Somerville", + "Pardo", + "Noll", + "Lashley", + "Ingraham", + "Hiller", + "Hendon", + "Glaze", + "Flora", + "Cothran", + "Cooksey", + "Conte", + "Carrico", + "Apple", + "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", + "Rupert", + "Poling", + "Nathan", + "Loya", + "Lieberman", + "Levi", + "Laroche", + "Labelle", + "Howes", + "Harr", + "Garay", + "Fogarty", + "Everson", + "Durkin", + "Dominquez", + "Chaves", + "Chambliss", + "Alfonso", + "Witcher", + "Wilber", + "Vieira", + "Vandiver", + "Terrill", + "Stoker", + "Schreiner", + "Nestor", + "Moorman", + "Liddell", + "Lew", + "Lawhorn", + "Krug", + "Irons", + "Hylton", + "Hollenbeck", + "Herrin", + "Hembree", + "Hair", + "Goolsby", + "Goodin", + "Gilmer", + "Foltz", + "Dinkins", + "Daughtry", + "Caban", + "Brim", + "Briley", + "Bilodeau", + "Bear", + "Wyant", + "Vergara", + "Tallent", + "Swearingen", + "Stroup", + "Sherry", + "Scribner", + "Roger", + "Quillen", + "Pitman", + "Monaco", + "Mccants", + "Maxfield", + "Martinson", + "Landon", + "Holtz", + "Flournoy", + "Brookins", + "Brody", + "Baumgardner", + "Angelo", + "Straub", + "Sills", + "Roybal", + "Roundtree", + "Oswalt", + "Money", + "Mcgriff", + "Mcdougall", + "Mccleary", + "Maggard", + "Gragg", + "Gooding", + "Godinez", + "Doolittle", + "Donato", + "Cowell", + "Cassell", + "Bracken", + "Appel", + "Ahmad", + "Zambrano", + "Reuter", + "Perea", + "Olive", + "Nakamura", + "Monaghan", + "Mickens", + "Mcclinton", + "Mcclary", + "Marler", + "Kish", + "Judkins", + "Gilbreath", + "Freese", + "Flanigan", + "Felts", + "Erdmann", + "Dodds", + "Chew", + "Brownell", + "Brazil", + "Boatright", + "Barreto", + "Slayton", + "Sandberg", + "Saldivar", + "Pettway", + "Odum", + "Narvaez", + "Moultrie", + "Montemayor", + "Merrell", + "Lees", + "Keyser", + "Hoke", + "Hardaway", + "Hannan", + "Gilbertson", + "Fogg", + "Dumont", + "Deberry", + "Coggins", + "Carrera", + "Buxton", + "Bucher", + "Broadnax", + "Beeson", + "Araujo", + "Appleton", + "Amundson", + "Aguayo", + "Ackley", + "Yocum", + "Worsham", + "Shivers", + "Shelly", + "Sanches", + "Sacco", + "Robey", + "Rhoden", + "Pender", + "Ochs", + "Mccurry", + "Madera", + "Luong", + "Luis", + "Knotts", + "Jackman", + "Heinrich", + "Hargrave", + "Gault", + "Forest", + "Comeaux", + "Chitwood", + "Child", + "Caraway", + "Boettcher", + "Bernhardt", + "Barrientos", + "Zink", + "Wickham", + "Whiteman", + "Thorp", + "Stillman", + "Settles", + "Schoonover", + "Roque", + "Riddell", + "Rey", + "Pilcher", + "Phifer", + "Novotny", + "Maple", + "Macleod", + "Hardee", + "Haase", + "Grider", + "Fredrick", + "Earnest", + "Doucette", + "Clausen", + "Christmas", + "Bevins", + "Beamon", + "Badillo", + "Tolley", + "Tindall", + "Soule", + "Snook", + "Sebastian", + "Seale", + "Pitcher", + "Pinkney", + "Pellegrino", + "Nowell", + "Nemeth", + "Nail", + "Mondragon", + "Mclane", + "Lundgren", + "Ingalls", + "Hudspeth", + "Hixson", + "Gearhart", + "Furlong", + "Downes", + "Dionne", + "Dibble", + "Deyoung", + "Cornejo", + "Camara", + "Brookshire", + "Boyette", + "Wolcott", + "Tracey", + "Surratt", + "Sellars", + "Segal", + "Salyer", + "Reeve", + "Rausch", + "Philips", + "Labonte", + "Haro", + "Gower", + "Freeland", + "Fawcett", + "Eads", + "Driggers", + "Donley", + "Collett", + "Cage", + "Bromley", + "Boatman", + "Ballinger", + "Baldridge", + "Volz", + "Trombley", + "Stonge", + "Silas", + "Shanahan", + "Rivard", + "Rhyne", + "Pedroza", + "Matias", + "Mallard", + "Jamieson", + "Hedgepeth", + "Hartnett", + "Estevez", + "Eskridge", + "Denman", + "Chiu", + "Chinn", + "Catlett", + "Carmack", + "Buie", + "Book", + "Bechtel", + "Beardsley", + "Bard", + "Ballou", + "Windsor", + "Ulmer", + "Storm", + "Skeen", + "Robledo", + "Rincon", + "Reitz", + "Piazza", + "Pearl", + "Munger", + "Moten", + "Mcmichael", + "Loftus", + "Ledet", + "Kersey", + "Groff", + "Fowlkes", + "Folk", + "Crumpton", + "Collette", + "Clouse", + "Bettis", + "Villagomez", + "Timmerman", + "Strom", + "Saul", + "Santoro", + "Roddy", + "Phillip", + "Penrod", + "Musselman", + "Macpherson", + "Leboeuf", + "Harless", + "Haddad", + "Guido", + "Golding", + "Fulkerson", + "Fannin", + "Dulaney", + "Dowdell", + "Deane", + "Cottle", + "Ceja", + "Cate", + "Bosley", + "Benge", + "Albritton", + "Voigt", + "Trowbridge", + "Soileau", + "Seely", + "Rome", + "Rohde", + "Pearsall", + "Paulk", + "Orth", + "Nason", + "Mota", + "Mcmullin", + "Marquardt", + "Madigan", + "Hoag", + "Gillum", + "Gayle", + "Gabbard", + "Fenwick", + "Fender", + "Eck", + "Danforth", + "Cushing", + "Cress", + "Creed", + "Cazares", + "Casanova", + "Bey", + "Bettencourt", + "Barringer", + "Baber", + "Stansberry", + "Schramm", + "Rutter", + "Rivero", + "Race", + "Oquendo", + "Necaise", + "Mouton", + "Montenegro", + "Miley", + "Mcgough", + "Marra", + "Macmillan", + "Lock", + "Lamontagne", + "Jasso", + "Jaime", + "Horst", + "Hetrick", + "Heilman", + "Gaytan", + "Gall", + "Fried", + "Fortney", + "Eden", + "Dingle", + "Desjardins", + "Dabbs", + "Burbank", + "Brigham", + "Breland", + "Beaman", + "Banner", + "Arriola", + "Yarborough", + "Wallin", + "Treat", + "Toscano", + "Stowers", + "Reiss", + "Pichardo", + "Orton", + "Mitchel", + "Michels", + "Mcnamee", + "Mccrory", + "Leatherman", + "Kell", + "Keister", + "Jerome", + "Horning", + "Hargett", + "Guay", + "Friday", + "Ferro", + "Deboer", + "Dagostino", + "Clemente", + "Christ", + "Carper", + "Bowler", + "Blanks", + "Beaudry", + "Willie", + "Towle", + "Tafoya", + "Stricklin", + "Strader", + "Soper", + "Sonnier", + "Sigmon", + "Schenk", + "Saddler", + "Rodman", + "Pedigo", + "Mendes", + "Lunn", + "Lohr", + "Lahr", + "Kingsbury", + "Jarman", + "Hume", + "Holliman", + "Hofmann", + "Haworth", + "Harrelson", + "Hambrick", + "Flick", + "Edmunds", + "Dacosta", + "Crossman", + "Colston", + "Chaplin", + "Carrell", + "Budd", + "Weiler", + "Waits", + "Viola", + "Valentino", + "Trantham", + "Tarr", + "Straight", + "Solorio", + "Roebuck", + "Powe", + "Plank", + "Pettus", + "Palm", + "Pagano", + "Mink", + "Luker", + "Leathers", + "Joslin", + "Hartzell", + "Gambrell", + "Fears", + "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", + "Kingston", + "Kehoe", + "Hochstetler", + "Harriman", + "Gregoire", + "Grabowski", + "Gosselin", + "Gammon", + "Fancher", + "Edens", + "Desai", + "Butt", + "Brannan", + "Armendariz", + "Woolsey", + "Whitehouse", + "Whetstone", + "Ussery", + "Towne", + "Tower", + "Testa", + "Tallman", + "Studer", + "Strait", + "Steinmetz", + "Sorrells", + "Sauceda", + "Rolfe", + "Rae", + "Paddock", + "Mitchem", + "Mcginn", + "Mccrea", + "Luck", + "Lovato", + "Ling", + "Hazen", + "Gilpin", + "Gaynor", + "Fike", + "Devoe", + "Delrio", + "Curiel", + "Burkhardt", + "Bristol", + "Bode", + "Backus", + "Alton", + "Zinn", + "Watanabe", + "Wachter", + "Vanpelt", + "Turnage", + "Shaner", + "Schroder", + "Sato", + "Riordan", + "Quimby", + "Portis", + "Natale", + "Mckoy", + "Mccown", + "Marker", + "Lucio", + "Kilmer", + "Karl", + "Hotchkiss", + "Hesse", + "Halbert", + "Gwinn", + "Godsey", + "Desmond", + "Delisle", + "Chrisman", + "Canter", + "Brook", + "Arbogast", + "Angell", + "Acree", + "Yancy", + "Woolley", + "Wesson", + "Weatherspoon", + "Trainor", + "Stockman", + "Spiller", + "Sipe", + "Rooks", + "Reavis", + "Propst", + "Porras", + "Neilson", + "Mullens", + "Loucks", + "Llewellyn", + "Lamont", + "Kumar", + "Koester", + "Klingensmith", + "Kirsch", + "Kester", + "Honaker", + "Hodson", + "Hennessy", + "Helmick", + "Garrity", + "Garibay", + "Fee", + "Drain", + "Casarez", + "Callis", + "Botello", + "Bay", + "Aycock", + "Avant", + "Angle", + "Wingard", + "Wayman", + "Tully", + "Theisen", + "Szymanski", + "Stansbury", + "Segovia", + "Rudy", + "Rainwater", + "Preece", + "Pirtle", + "Padron", + "Mincey", + "Mckelvey", + "Mathes", + "Marty", + "Larrabee", + "Kornegay", + "Klug", + "Judy", + "Ingersoll", + "Hecht", + "Germain", + "Eggers", + "Dykstra", + "Denis", + "Deering", + "Decoteau", + "Deason", + "Dearing", + "Cofield", + "Carrigan", + "Brush", + "Bonham", + "Bahr", + "Aucoin", + "Appleby", + "Almonte", + "Yager", + "Womble", + "Wimmer", + "Weimer", + "Vanderpool", + "Stancil", + "Sprinkle", + "Romine", + "Remington", + "Pfaff", + "Peckham", + "Olivera", + "Meraz", + "Maze", + "Lathrop", + "Koehn", + "Jonas", + "Hazelton", + "Halvorson", + "Hallock", + "Haddock", + "Ducharme", + "Dehaven", + "Colton", + "Caruthers", + "Brehm", + "Bosworth", + "Bost", + "Blow", + "Bias", + "Beeman", + "Basile", + "Bane", + "Aikens", + "Zachary", + "Wold", + "Walther", + "Tabb", + "Suber", + "Strawn", + "Stocks", + "Stocker", + "Shirey", + "Schlosser", + "Salvador", + "Riedel", + "Rembert", + "Reimer", + "Pyles", + "Pickle", + "Peele", + "Merriweather", + "Letourneau", + "Latta", + "Kidder", + "Hixon", + "Hillis", + "Hight", + "Herbst", + "Henriquez", + "Haygood", + "Hamill", + "Gabel", + "Fritts", + "Eubank", + "Duty", + "Dawes", + "Correll", + "Coffee", + "Cha", + "Bushey", + "Buchholz", + "Brotherton", + "Bridge", + "Botts", + "Barnwell", + "Auger", + "Atchley", + "Oestephal", + "Veilleux", + "Ulloa", + "Truman", + "Stutzman", + "Shriver", + "Ryals", + "Prior", + "Pilkington", + "Newport", + "Moyers", + "Miracle", + "Marrs", + "Mangrum", + "Maddux", + "Lockard", + "Laing", + "Kuhl", + "Harney", + "Hammock", + "Hamlett", + "Felker", + "Doerr", + "Depriest", + "Carrasquillo", + "Carothers", + "Bogle", + "Blood", + "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", + "Milan", + "Mcginty", + "Mcevoy", + "Landreth", + "Kuhns", + "Koon", + "Hewett", + "Giddens", + "Everette", + "Emerick", + "Eades", + "Deangelis", + "Cosme", + "Ceballos", + "Birdsong", + "Benham", + "Bemis", + "Armour", + "Anguiano", + "Angeles", + "Welborn", + "Tsosie", + "Storms", + "Shoup", + "Sessoms", + "Samaniego", + "Rood", + "Rojo", + "Rhinehart", + "Raby", + "Northcutt", + "Myer", + "Munguia", + "Morehouse", + "More", + "Mcdevitt", + "Mateo", + "Mallett", + "Lozada", + "Lemoine", + "Kuehn", + "Hallett", + "Grim", + "Gillard", + "Gaylor", + "Garman", + "Gallaher", + "Feaster", + "Faris", + "Darrow", + "Dardar", + "Coney", + "Carreon", + "Byron", + "Braithwaite", + "Boylan", + "Boyett", + "Born", + "Bixler", + "Bigham", + "Benford", + "Barragan", + "Barnum", + "Zuber", + "Wyche", + "Oestecott", + "Vining", + "Stoltzfus", + "Simonds", + "Shupe", + "Sabin", + "Ruble", + "Rittenhouse", + "Richman", + "Perrone", + "Mulholland", + "Millan", + "Meister", + "Mathew", + "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", + "Shine", + "Searle", + "Schenck", + "Satterwhite", + "Sandy", + "Ruelas", + "Royce", + "Rankins", + "Partida", + "Nesbit", + "Morel", + "Menchaca", + "Levasseur", + "Kaylor", + "Johnstone", + "Hulse", + "Hollar", + "Hersey", + "Harrigan", + "Harbison", + "Guyer", + "Gish", + "Giese", + "Gerlach", + "Geller", + "Geisler", + "Falcone", + "Ernest", + "Elwell", + "Doucet", + "Deese", + "Darr", + "Corder", + "Chafin", + "Byler", + "Bussell", + "Burdett", + "Brasher", + "Bowe", + "Bellinger", + "Bastian", + "Barner", + "Alleyne", + "Wilborn", + "Weil", + "Wegner", + "Wales", + "Tatro", + "Spitzer", + "Smithers", + "Schoen", + "Resendez", + "Pete", + "Parisi", + "Overman", + "Obrian", + "Mudd", + "Moy", + "Mclaren", + "Mahler", + "Maggio", + "Lindner", + "Lalonde", + "Lacasse", + "Laboy", + "Killion", + "Kahl", + "Jessen", + "Jamerson", + "Houk", + "Henshaw", + "Gustin", + "Groom", + "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", + "Rambo", + "Ramage", + "Nez", + "Moua", + "Marlin", + "Malik", + "Langham", + "Kyles", + "Holston", + "Hoagland", + "Herd", + "Hector", + "Feller", + "Emory", + "Denison", + "Corliss", + "Carraway", + "Burford", + "Bickel", + "Ambriz", + "Abercrombie", + "Yamada", + "Winner", + "Weidner", + "Waddle", + "Verduzco", + "Thurmond", + "Swindle", + "Schrock", + "Sanabria", + "Rosenberger", + "Probst", + "Peabody", + "Olinger", + "Neighbors", + "Nazario", + "Mccafferty", + "Mcbroom", + "Mcabee", + "Mazur", + "Matherne", + "Mapes", + "Leverett", + "Killingsworth", + "Heisler", + "Griego", + "Grande", + "Gosnell", + "Frankel", + "Franke", + "Ferrante", + "Fenn", + "Elmer", + "Ehrlich", + "Christopherso", + "Chick", + "Chasse", + "Chancellor", + "Caton", + "Brunelle", + "Bly", + "Bloomfield", + "Babbitt", + "Azevedo", + "Abramson", + "Ables", + "Abeyta", + "Youmans", + "Wozniak", + "Wainwright", + "Summer", + "Stowell", + "Smitherman", + "Sites", + "Samuelson", + "Runge", + "Rule", + "Rothman", + "Rosenfeld", + "Quan", + "Peake", + "Oxford", + "Owings", + "Olmos", + "Munro", + "Moreira", + "Leatherwood", + "Larkins", + "Krantz", + "Kovacs", + "Kizer", + "Kindred", + "Karnes", + "Jaffe", + "Hubbell", + "Hosey", + "Hauck", + "Harold", + "Goodell", + "Favors", + "Erdman", + "Dvorak", + "Doane", + "Cureton", + "Cofer", + "Buehler", + "Bierman", + "Berndt", + "Banta", + "Annis", + "Abram", + "Abdullah", + "Warwick", + "Waltz", + "Turcotte", + "Trinh", + "Torrey", + "Stith", + "Seger", + "Sachs", + "Quesada", + "Pinder", + "Peppers", + "Pascual", + "Paschall", + "Parkhurst", + "Ozuna", + "Oster", + "Nicholls", + "Mortimer", + "Lheureux", + "Lavalley", + "Kimura", + "Jablonski", + "Haun", + "Gourley", + "Gilligan", + "Fix", + "Derby", + "Croy", + "Cotto", + "Cargill", + "Burwell", + "Burgett", + "Buckman", + "Brett", + "Booher", + "Adorno", + "Wrenn", + "Whittemore", + "Urias", + "Szabo", + "Sayles", + "Saiz", + "Rutland", + "Rael", + "Plant", + "Pharr", + "Penney", + "Pelkey", + "Ogrady", + "Nickell", + "Musick", + "Moats", + "Mather", + "Massa", + "Laurent", + "Kirschner", + "Kieffer", + "Kellar", + "Hendershot", + "Gott", + "Godoy", + "Gadson", + "Furtado", + "Fiedler", + "Erskine", + "Edison", + "Dutcher", + "Dever", + "Daggett", + "Chevalier", + "Chao", + "Brake", + "Ballesteros", + "Amerson", + "Alejandro", + "Wingo", + "Waldon", + "Trott", + "Spikes", + "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", + "Cory", + "Burrus", + "Bracy", + "Ardoin", + "Thompkins", + "Suzuki", + "Standley", + "Russel", + "Radcliffe", + "Pohl", + "Persaud", + "Percy", + "Parenteau", + "Pabon", + "Newson", + "Newhouse", + "Napolitano", + "Mulcahy", + "Maya", + "Malave", + "Keim", + "Hooten", + "Hernandes", + "Heffernan", + "Hearne", + "Greenleaf", + "Glick", + "Fuhrman", + "Fetter", + "Faria", + "Dishman", + "Dickenson", + "Crites", + "Criss", + "Clapper", + "Chenault", + "Castor", + "Casto", + "Bugg", + "Bove", + "Bonney", + "Blessing", + "Ard", + "Anderton", + "Allgood", + "Alderson", + "Woodman", + "Wisdom", + "Warrick", + "Toomey", + "Tooley", + "Tarrant", + "Summerville", + "Stebbins", + "Sokol", + "Sink", + "Searles", + "Schutz", + "Schumann", + "Scheer", + "Remillard", + "Raper", + "Proulx", + "Palmore", + "Monroy", + "Miguel", + "Messier", + "Melo", + "Melanson", + "Mashburn", + "Manzano", + "Lussier", + "Lovely", + "Lien", + "Jenks", + "Huneycutt", + "Hartwig", + "Grimsley", + "Fulk", + "Fielding", + "Fidler", + "Engstrom", + "Eldred", + "Dantzler", + "Crandell", + "Ching", + "Calder", + "Brumley", + "Breton", + "Brann", + "Bramlett", + "Boykins", + "Bianco", + "Bancroft", + "Almaraz", + "Alcantar", + "Whitmer", + "Whitener", + "Welton", + "Vineyard", + "Su", + "Rahn", + "Paquin", + "Mizell", + "Mix", + "Mcmillin", + "Mckean", + "Marston", + "Maciel", + "Lundquist", + "Louie", + "Liggins", + "Lampkin", + "Kranz", + "Koski", + "Kirkham", + "Jiminez", + "Hazzard", + "Harrod", + "Graziano", + "Grammer", + "Gendron", + "Garrido", + "Fordham", + "Englert", + "Elwood", + "Dryden", + "Demoss", + "Deluna", + "Crabb", + "Comeau", + "Claudio", + "Brummett", + "Blume", + "Benally", + "Wessel", + "Vanbuskirk", + "Thorson", + "Stumpf", + "Stockwell", + "Rocco", + "Reams", + "Radtke", + "Rackley", + "Pelton", + "Niemi", + "Newland", + "Nelsen", + "Morrissette", + "Miramontes", + "Mcginley", + "Mccluskey", + "Marley", + "Marchant", + "Luevano", + "Lampe", + "Lail", + "Jeffcoat", + "Infante", + "Hu", + "Hinman", + "Gaona", + "Erb", + "Eady", + "Desmarais", + "Decosta", + "Dansby", + "Cisco", + "Choe", + "Breckenridge", + "Bostwick", + "Borg", + "Bianchi", + "Beer", + "Alberts", + "Adrian", + "Wilkie", + "Whorton", + "Vargo", + "Tait", + "Sylvia", + "Soucy", + "Schuman", + "Ousley", + "Mumford", + "Lum", + "Lippert", + "Leath", + "Lavergne", + "Laliberte", + "Kirksey", + "Kenner", + "Johnsen", + "Izzo", + "Hiles", + "Gullett", + "Greenwell", + "Gaspar", + "Galbreath", + "Gaitan", + "Ericson", + "Duck", + "Delapaz", + "Croom", + "Cottingham", + "Clift", + "Bushnell", + "Boozer", + "Bice", + "Bernardo", + "Beason", + "Arrowood", + "Waring", + "Voorhees", + "Truax", + "Shreve", + "Shockey", + "Schatz", + "Sandifer", + "Rubino", + "Rozier", + "Roseberry", + "Roll", + "Player", + "Pieper", + "Peden", + "Nester", + "Nave", + "Murphey", + "Malinowski", + "Macgregor", + "Liang", + "Lafrance", + "Kunkle", + "Kirkman", + "Jorge", + "Hipp", + "Hasty", + "Haddix", + "Gervais", + "Gerdes", + "Garfield", + "Gamache", + "Fouts", + "Fitzwater", + "Dillingham", + "Deming", + "Deanda", + "Cedeno", + "Cannady", + "Burson", + "Bouldin", + "Arceneaux", + "Woodhouse", + "Whitford", + "Wescott", + "Welty", + "Weigel", + "Torgerson", + "Toms", + "Surber", + "Sunderland", + "Sterner", + "Setzer", + "Salvatore", + "Riojas", + "Pumphrey", + "Puga", + "Pedro", + "Patch", + "Metts", + "Mcgarry", + "Mccandless", + "Magill", + "Lupo", + "Loveland", + "Llamas", + "Leclerc", + "Koons", + "Kahler", + "Huss", + "Holbert", + "Heintz", + "Haupt", + "Grimmett", + "Gaskill", + "Flower", + "Ellingson", + "Dorr", + "Dingess", + "Deweese", + "Desilva", + "Crossley", + "Cordeiro", + "Converse", + "Conde", + "Cheeks", + "Caldera", + "Cairns", + "Burmeister", + "Burkhalter", + "Brawner", + "Bott", + "Youngs", + "Vierra", + "Valladares", + "Tiffany", + "Shrum", + "Shropshire", + "Sevilla", + "Rusk", + "Roof", + "Rodarte", + "Pedraza", + "Nino", + "Montana", + "Merino", + "Mcminn", + "Markle", + "Mapp", + "Lucia", + "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", + "Rick", + "Rex", + "Rascon", + "Priddy", + "Pine", + "Paulino", + "Nolte", + "Munroe", + "Molloy", + "Mellon", + "Mciver", + "Lykins", + "Loggins", + "Lillie", + "Lenoir", + "Klotz", + "Kempf", + "Jone", + "Hupp", + "Hollowell", + "Hollander", + "Haynie", + "Hassan", + "Harkness", + "Harker", + "Gottlieb", + "Frith", + "Eddins", + "Driskell", + "Doggett", + "Densmore", + "Charette", + "Cassady", + "Carrol", + "Byrum", + "Burcham", + "Buggs", + "Benn", + "Whitted", + "Warrington", + "Vandusen", + "Vaillancourt", + "Steger", + "Spell", + "Siebert", + "Scofield", + "Quirk", + "Purser", + "Plumb", + "Orcutt", + "Northern", + "Nordstrom", + "Mosely", + "Michalski", + "Mcphail", + "Mcdavid", + "Mccraw", + "Martini", + "Marchese", + "Mannino", + "Leo", + "Lefevre", + "Largent", + "Lanza", + "Kress", + "Isham", + "Hunsaker", + "Hoch", + "Hildebrandt", + "Guarino", + "Grijalva", + "Graybill", + "Fick", + "Ewell", + "Ewald", + "Deangelo", + "Cusick", + "Crumley", + "Coston", + "Cathcart", + "Carruthers", + "Bullington", + "Brian", + "Bowes", + "Blain", + "Blackford", + "Barboza", + "Yingling", + "Woodland", + "Wert", + "Weiland", + "Varga", + "Silverstein", + "Sievers", + "Shuster", + "Shumway", + "Scudder", + "Runnels", + "Rumsey", + "Renfroe", + "Provencher", + "Polley", + "Mohler", + "Middlebrooks", + "Kutz", + "Koster", + "Korn", + "Grow", + "Groth", + "Glidden", + "Fazio", + "Deen", + "Corn", + "Copper", + "Chipman", + "Chenoweth", + "Champlin", + "Cedillo", + "Carrero", + "Carmody", + "Buckles", + "Brien", + "Boutin", + "Bosch", + "Bill", + "Berkowitz", + "Altamirano", + "Wilfong", + "Wiegand", + "Waites", + "Truesdale", + "Toussaint", + "Tobey", + "Tedder", + "Steelman", + "Sirois", + "Schnell", + "Robichaud", + "Ridge", + "Richburg", + "Pray", + "Plumley", + "Pizarro", + "Piercy", + "Ortego", + "Oberg", + "Neace", + "Music", + "Mickey", + "Mertz", + "Mcnew", + "Matta", + "Lawyer", + "Lapp", + "Lair", + "Kibler", + "Jessie", + "Howlett", + "Hollister", + "Hofer", + "Hatten", + "Hagler", + "Germany", + "Falgoust", + "Engelhardt", + "Eberle", + "Estewood", + "Dombrowski", + "Dinsmore", + "Daye", + "Cool", + "Casares", + "Capone", + "Braud", + "Balch", + "Autrey", + "Wendel", + "Tyndall", + "Toy", + "Strobel", + "Stoltz", + "Spinelli", + "Serrato", + "Rochester", + "Reber", + "Real", + "Rathbone", + "Palomino", + "Noah", + "Nickels", + "Mayle", + "Mathers", + "Mach", + "Loeffler", + "Littrell", + "Levinson", + "Leong", + "Lemire", + "Lejeune", + "Lazo", + "Lasley", + "Koller", + "Kennard", + "Jester", + "Hoelscher", + "Hintz", + "Hagerman", + "Greaves", + "Fore", + "Eudy", + "Engler", + "Corrales", + "Cordes", + "Brunet", + "Bidwell", + "Bennet", + "Bare", + "Tyrrell", + "Tharpe", + "Swinton", + "Stribling", + "Steven", + "Southworth", + "Sisneros", + "Shane", + "Savoie", + "Samons", + "Ruvalcaba", + "Roscoe", + "Ries", + "Ramer", + "Omara", + "Mosqueda", + "Millar", + "Mcpeak", + "Macomber", + "Luckey", + "Litton", + "Lehr", + "Lavin", + "Hubbs", + "Hoard", + "Hibbs", + "Hagans", + "Futrell", + "Exum", + "Evenson", + "Dicks", + "Culler", + "Chou", + "Carbaugh", + "Callen", + "Brashear", + "Bloomer", + "Blakeney", + "Bigler", + "Addington", + "Woodford", + "Witter", + "Unruh", + "Tolentino", + "Sumrall", + "Stgermain", + "Smock", + "Sherer", + "Salem", + "Rochelle", + "Rayner", + "Pooler", + "Oquinn", + "Nero", + "Milano", + "Mcglothlin", + "Mars", + "Linden", + "Kowal", + "Kerrigan", + "Ibrahim", + "Harvell", + "Hanrahan", + "Goodall", + "Geist", + "Fussell", + "Fung", + "Ferebee", + "Federico", + "Eley", + "Eggert", + "Dorsett", + "Dingman", + "Destefano", + "Colucci", + "Clemmer", + "Caesar", + "Burnell", + "Brumbaugh", + "Boddie", + "Berryhill", + "Avelar", + "Alcantara", + "Abbey", + "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", + "Kimber", + "Hovis", + "Holifield", + "Henninger", + "Hawkes", + "Hartfield", + "Hann", + "Hague", + "Genovese", + "Garrick", + "Fudge", + "Frink", + "Eddings", + "Dinh", + "Dear", + "Cutter", + "Cribbs", + "Constant", + "Calvillo", + "Bunton", + "Brodeur", + "Bolding", + "Blanding", + "Agosto", + "Zahn", + "Wiener", + "Trussell", + "Tew", + "Tello", + "Teixeira", + "Stephan", + "Speck", + "Sharma", + "Shanklin", + "Sealy", + "Scanlan", + "Santamaria", + "Roundy", + "Robichaux", + "Ringer", + "Rigney", + "Prevost", + "Polson", + "Philip", + "Pass", + "Nord", + "Moxley", + "Mohammed", + "Medford", + "Mccaslin", + "Mcardle", + "Macarthur", + "Lewin", + "Lasher", + "Ketcham", + "Keiser", + "Heine", + "Hackworth", + "Grose", + "Grizzle", + "Grass", + "Gillman", + "Gartner", + "Garth", + "Frazee", + "Fleury", + "Fast", + "Edson", + "Edmonson", + "Derry", + "Deck", + "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", + "Robin", + "Rego", + "Preciado", + "Pinkham", + "Monday", + "Mickle", + "Luu", + "Lomas", + "Lizotte", + "Lent", + "Lenard", + "Kellerman", + "Keil", + "Juan", + "Johanson", + "Hernadez", + "Hartsfield", + "Hang", + "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", + "Nicolas", + "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", + "Bogart", + "Berard", + "Barrington", + "Arena", + "Anton", + "Yoshida", + "Velarde", + "Veach", + "Vanhouten", + "Vachon", + "Tolson", + "Tolman", + "Tennyson", + "Stites", + "Soler", + "Shutt", + "Ruggles", + "Rhone", + "Pegues", + "Ong", + "Neese", + "Muro", + "Moncrief", + "Mefford", + "Mcphee", + "Mcmorris", + "Mceachern", + "Mcclurg", + "Mansour", + "Mai", + "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", + "Sand", + "Safford", + "Prendergast", + "Pilgrim", + "Pellerin", + "Osuna", + "Nissen", + "Nalley", + "Moritz", + "Moller", + "Messner", + "Messick", + "Merry", + "Merrifield", + "Mcguinness", + "Matherly", + "Marcano", + "Mahone", + "Lemos", + "Lebrun", + "Jara", + "Hoffer", + "Hewlett", + "Herren", + "Hecker", + "Haws", + "Haug", + "Hack", + "Gwin", + "Gober", + "Gilliard", + "Fredette", + "Favela", + "Echeverria", + "Downer", + "Donofrio", + "Desrochers", + "Dee", + "Crozier", + "Corson", + "Clyde", + "Bechtold", + "Argueta", + "Aparicio", + "Zamudio", + "Willette", + "Oesteover", + "Oesteerman", + "Utter", + "Troyer", + "Thies", + "Tapley", + "Slavin", + "Shirk", + "Sandler", + "Roop", + "Rimmer", + "Raymer", + "Range", + "Radcliff", + "Otten", + "Moorer", + "Millet", + "Mckibben", + "Mccutchen", + "Mcavoy", + "Mcadoo", + "Mayorga", + "Mastin", + "Martineau", + "Marek", + "Madore", + "Leflore", + "Kroeger", + "Kennon", + "Jimerson", + "Javier", + "Hostetter", + "Hornback", + "Hendley", + "Hance", + "Guardado", + "Granado", + "Gowen", + "Goodale", + "Flinn", + "Fleetwood", + "Fitz", + "Durkee", + "Duprey", + "Dipietro", + "Dilley", + "Clyburn", + "Brawley", + "Beckley", + "Arana", + "Weatherby", + "Vollmer", + "Victoria", + "Vestal", + "Tunnell", + "Trigg", + "Tingle", + "Takahashi", + "Sweatt", + "Storer", + "Snapp", + "Shiver", + "Rooker", + "Red", + "Rathbun", + "Poisson", + "Perrine", + "Perri", + "Pastor", + "Parmer", + "Parke", + "Pare", + "Papa", + "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", + "Waldo", + "Spiegel", + "Shoffner", + "Scholz", + "Ruch", + "Rossman", + "Ready", + "Petry", + "Palacio", + "Paez", + "Neary", + "Mortenson", + "Millsap", + "Miele", + "Mick", + "Menke", + "Mckim", + "Mcanally", + "Martines", + "Manor", + "Malcom", + "Lemley", + "Larochelle", + "Klaus", + "Klatt", + "Kaufmann", + "Kapp", + "Helmer", + "Hedge", + "Halloran", + "Glisson", + "Frechette", + "Fontana", + "Enoch", + "Eagan", + "Drum", + "Distefano", + "Danley", + "Creekmore", + "Chartier", + "Chaffee", + "Carillo", + "Burg", + "Bolinger", + "Berkley", + "Benz", + "Basso", + "Bash", + "Barrier", + "Zelaya", + "Woodring", + "Witkowski", + "Wilmot", + "Wilkens", + "Wieland", + "Virgil", + "Verdugo", + "Urquhart", + "Tsai", + "Timms", + "Swiger", + "Swaim", + "Sussman", + "Scarlett", + "Pires", + "Molnar", + "Mcatee", + "Maurice", + "Lowder", + "Loos", + "Linker", + "Landes", + "Kingery", + "Keeley", + "Hufford", + "Higa", + "Hendren", + "Hammack", + "Hamann", + "Gillam", + "Gerhardt", + "Fell", + "Eugene", + "Edelman", + "Eby", + "Delk", + "Deans", + "Curl", + "Constantine", + "Cleaver", + "Claar", + "Casiano", + "Carruth", + "Carlyle", + "Bump", + "Brophy", + "Bolanos", + "Bibbs", + "Bessette", + "Beggs", + "Baugher", + "Bartel", + "Averill", + "Andresen", + "Amin", + "Alden", + "Adames", + "Wildman", + "Via", + "Valente", + "Turnbow", + "Tse", + "Swink", + "Sublett", + "Stroh", + "Stringfellow", + "Ridgway", + "Pugliese", + "Poteat", + "Pang", + "Ohare", + "Neubauer", + "Murchison", + "Mohamed", + "Mingo", + "Lucky", + "Lemmons", + "Kwon", + "Kellam", + "Kean", + "Jarmon", + "Hyden", + "Hudak", + "Hollinger", + "Henkel", + "Hemingway", + "Hasson", + "Hansel", + "Halter", + "Haire", + "Goodnight", + "Ginsberg", + "Gillispie", + "Fogel", + "Flory", + "Etter", + "Elledge", + "Eckman", + "Deas", + "Currin", + "Crafton", + "Coomer", + "Colter", + "Claxton", + "Bulter", + "Braddock", + "Bowyer", + "Blizzard", + "Binns", + "Bing", + "Bellows", + "Baskerville", + "Barros", + "Ansley", + "Woolf", + "Wight", + "Waldman", + "Wadley", + "Tull", + "Trull", + "Tesch", + "Struck", + "Stouffer", + "Stadler", + "Slay", + "Shubert", + "Sedillo", + "Santacruz", + "Reinke", + "Raleigh", + "Poynter", + "Neri", + "Neale", + "Natividad", + "Mowry", + "Moralez", + "Monger", + "Mitchum", + "Merryman", + "Manion", + "Macdougall", + "Lux", + "Litchfield", + "Ley", + "Levitt", + "Lepage", + "Lasalle", + "Laine", + "Khoury", + "Kavanagh", + "Karns", + "Ivie", + "Huebner", + "Hodgkins", + "Halpin", + "Garica", + "Eversole", + "Dutra", + "Dunagan", + "Duffey", + "Dillman", + "Dillion", + "Deville", + "Dearborn", + "Damato", + "Courson", + "Coulson", + "Burdine", + "Bryce", + "Bousquet", + "Bonin", + "Bish", + "Atencio", + "Oestebrooks", + "Wages", + "Vaca", + "Tye", + "Toner", + "Tomas", + "Tillis", + "Swett", + "Surface", + "Struble", + "Stanfill", + "Son", + "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", + "Gregor", + "Gilkey", + "Farnham", + "Durfee", + "Dunton", + "Dunston", + "Duda", + "Dews", + "Dana", + "Craver", + "Corriveau", + "Conwell", + "Colella", + "Chambless", + "Bremer", + "Boutte", + "Bourassa", + "Blaisdell", + "Backman", + "Babineaux", + "Audette", + "Alleman", + "Towner", + "Taveras", + "Tarango", + "Sullins", + "Suiter", + "Stallard", + "Solberg", + "Schlueter", + "Poulos", + "Pimental", + "Owsley", + "Olivier", + "Okelley", + "Nations", + "Moffatt", + "Metcalfe", + "Meekins", + "Medellin", + "Mcglynn", + "Mccowan", + "Marriott", + "Marable", + "Lennox", + "Lamoureux", + "Koss", + "Kerby", + "Karp", + "Jason", + "Isenberg", + "Howze", + "Hockenberry", + "Highsmith", + "Harbour", + "Hallmark", + "Gusman", + "Greeley", + "Giddings", + "Gaudet", + "Gallup", + "Fleenor", + "Eicher", + "Edington", + "Dimaggio", + "Dement", + "Demello", + "Decastro", + "Cruise", + "Bushman", + "Brundage", + "Brooker", + "Brooke", + "Bourg", + "Board", + "Blackstock", + "Bergmann", + "Beaton", + "Banister", + "Argo", + "Appling", + "Wortman", + "Watterson", + "Villalpando", + "Tillotson", + "Tighe", + "Sundberg", + "Sternberg", + "Stamey", + "Speaks", + "Shipe", + "Seeger", + "Scarberry", + "Sattler", + "Sain", + "Rothstein", + "Poteet", + "Plowman", + "Pettiford", + "Penland", + "Peach", + "Partain", + "Pankey", + "Oyler", + "Ogletree", + "Ogburn", + "Moton", + "Million", + "Merkel", + "Mask", + "Markus", + "Lucier", + "Lazarus", + "Lavelle", + "Lakey", + "Kratz", + "Kinser", + "Kershaw", + "Josephson", + "Jesse", + "Imhoff", + "Ibanez", + "Hendry", + "Hammon", + "Frisbie", + "Friedrich", + "Frawley", + "Fraga", + "Forester", + "Eskew", + "Emmert", + "Drennan", + "Doyon", + "Dominick", + "Dandridge", + "Cumming", + "Cawley", + "Carvajal", + "Bracey", + "Belisle", + "Batey", + "Ahner", + "Wysocki", + "Weiser", + "Veliz", + "Tincher", + "Sherlock", + "Santo", + "Sansone", + "Sankey", + "Sandstrom", + "Sale", + "Rohrer", + "Risner", + "Pridemore", + "Pfeffer", + "Persinger", + "Peery", + "Oubre", + "Orange", + "Nowicki", + "Musgrave", + "Murdoch", + "Mullinax", + "Mccary", + "Mathieu", + "Livengood", + "Leonardo", + "Kyser", + "Klink", + "Kimes", + "Kellner", + "Kavanaugh", + "Kasten", + "Imes", + "Hoey", + "Hinshaw", + "Halley", + "Hake", + "Gurule", + "Grube", + "Grillo", + "Geter", + "Gatto", + "Garver", + "Garretson", + "Farwell", + "Eiland", + "Dunford", + "Decarlo", + "Corso", + "Core", + "Colman", + "Collard", + "Cleghorn", + "Chasteen", + "Cavender", + "Carlile", + "Calvo", + "Byerly", + "Brogdon", + "Broadwater", + "Breault", + "Bono", + "Bergin", + "Behr", + "Ballenger", + "Amick", + "Yan", + "Vice", + "Tamez", + "Stiffler", + "Steinke", + "Simmon", + "Shankle", + "Schaller", + "Salmons", + "Sackett", + "Saad", + "Rideout", + "Reader", + "Ratcliffe", + "Rao", + "Ranson", + "Randell", + "Plascencia", + "Petterson", + "Olszewski", + "Olney", + "Olguin", + "Nilsson", + "Nevels", + "Morelli", + "Montiel", + "Monge", + "Michell", + "Michaelson", + "Mertens", + "Mcchesney", + "Mcalpin", + "Mathewson", + "Lower", + "Loudermilk", + "Lineberry", + "Liggett", + "Lamp", + "Kinlaw", + "Kight", + "Just", + "Jost", + "Hereford", + "Hardeman", + "Halpern", + "Halliday", + "Hafer", + "Gaul", + "Friel", + "Freitag", + "Frances", + "Forsberg", + "Evangelista", + "Doering", + "Dicarlo", + "Dendy", + "Delp", + "Deguzman", + "Dameron", + "Curtiss", + "Cousin", + "Cosper", + "Charley", + "Cauthen", + "Cao", + "Camper", + "Bradberry", + "Bouton", + "Bonnell", + "Bixby", + "Bieber", + "Beveridge", + "Belle", + "Bedwell", + "Barhorst", + "Bannon", + "Baltazar", + "Baier", + "Ayotte", + "Attaway", + "Arenas", + "Alex", + "Abrego", + "Watford", + "Valley", + "Turgeon", + "Tunstall", + "Thaxton", + "Thai", + "Tenorio", + "Stotts", + "Sthilaire", + "Spiker", + "Shedd", + "Seng", + "Seabolt", + "Scalf", + "Salyers", + "Ruhl", + "Rowlett", + "Robinett", + "Pfister", + "Perlman", + "Pepe", + "Parkman", + "Paradise", + "Olin", + "Nunnally", + "Norvell", + "Napper", + "Modlin", + "Mckellar", + "Mcclean", + "Mascarenas", + "Manchester", + "Leibowitz", + "Ledezma", + "Kuhlman", + "Kobayashi", + "Hunley", + "Holmquist", + "Hinkley", + "Hazard", + "Hartsell", + "Gribble", + "Gravely", + "Fifield", + "Eliason", + "Doctor", + "Doak", + "Crossland", + "Cover", + "Clair", + "Carleton", + "Butters", + "Bridgeman", + "Bojorquez", + "Boggess", + "Banker", + "Auten", + "Woosley", + "Wine", + "Whiteley", + "Wexler", + "Twomey", + "Tullis", + "Townley", + "To", + "Standridge", + "Stamp", + "Springs", + "Santoyo", + "Rueda", + "Riendeau", + "Revell", + "Pless", + "Ottinger", + "Nigro", + "Nickles", + "Mulvey", + "Menefee", + "Mcshane", + "Mcloughlin", + "Mckinzie", + "Marrow", + "Markey", + "Mariano", + "Lockridge", + "Lipsey", + "Knisley", + "Knepper", + "Kitts", + "Kiel", + "Jinks", + "Hathcock", + "Godin", + "Gallego", + "Fikes", + "Fecteau", + "Estabrook", + "Ellinger", + "Dustin", + "Dunlop", + "Dudek", + "Diego", + "Countryman", + "Chauvin", + "Chatham", + "Bullins", + "Brownfield", + "Boughton", + "Bloodworth", + "Bibb", + "Baucom", + "Barbieri", + "Aubin", + "Armitage", + "Alessi", + "Absher", + "Abbate", + "Zito", + "Woolery", + "Wiggs", + "Wacker", + "Violette", + "Tynes", + "Tolle", + "Telles", + "Tarter", + "Swarey", + "Strode", + "Stockdale", + "Stella", + "Stalnaker", + "Spina", + "Schiff", + "Saari", + "Risley", + "Reading", + "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", + "Hung", + "Housley", + "Hackman", + "Gulick", + "Gordy", + "Gilstrap", + "Gehrke", + "Gebhart", + "Gaudette", + "Foxworth", + "Finger", + "Essex", + "Endres", + "Dunkle", + "Clare", + "Cimino", + "Cardinal", + "Caddell", + "Brauer", + "Braley", + "Bodine", + "Blackmore", + "Belden", + "Backer", + "Ayer", + "Andress", + "Alva", + "Wisner", + "Walk", + "Vuong", + "Valliere", + "Twigg", + "Tso", + "Tavarez", + "Strahan", + "Steib", + "Staub", + "Sowder", + "Shoulders", + "Seiber", + "Schutt", + "Scharf", + "Schade", + "Rodriques", + "Risinger", + "Renshaw", + "Rath", + "Rahman", + "Presnell", + "Pillow", + "Piatt", + "Pasquale", + "Nieman", + "Nicol", + "Nevins", + "Milford", + "Mcilwain", + "Mcgaha", + "Mccully", + "Mccomb", + "Maye", + "Massengale", + "Macedo", + "Lines", + "Lesher", + "Leland", + "Kearse", + "Jauregui", + "Husted", + "Hudnall", + "Holmberg", + "Hertel", + "Hershey", + "Hardie", + "Glidewell", + "Frausto", + "Fassett", + "Dash", + "Dalessandro", + "Dahlgren", + "Corum", + "Constantino", + "Conlin", + "Colquitt", + "Colombo", + "Claycomb", + "Carley", + "Cardin", + "Cancel", + "Buller", + "Boring", + "Boney", + "Bocanegra", + "Blazer", + "Biggers", + "Benedetto", + "Araiza", + "Andino", + "Albin", + "Zorn", + "Werth", + "Weisman", + "Walley", + "Vanegas", + "Ulibarri", + "Towers", + "Towe", + "Tedford", + "Teasley", + "Suttle", + "Steffens", + "Stcyr", + "Squire", + "Smythe", + "Singley", + "Sifuentes", + "Shuck", + "Session", + "Schram", + "Sass", + "Rieger", + "Ridenhour", + "Rickert", + "Richerson", + "Rayborn", + "Rabe", + "Raab", + "Pendley", + "Pastore", + "Ordway", + "Moynihan", + "Mellott", + "Mckissick", + "Mcgann", + "Mccready", + "Mauney", + "Marrufo", + "List", + "Lenhart", + "Lazar", + "Lafave", + "Keele", + "Kautz", + "Jardine", + "Jahnke", + "Jacobo", + "Hord", + "Hardcastle", + "Hageman", + "Griffey", + "Giglio", + "Gehring", + "Fortson", + "Duque", + "Duplessis", + "Donner", + "Dicken", + "Derosier", + "Deitz", + "Dalessio", + "Cyrus", + "Cram", + "Chi", + "Center", + "Castleman", + "Candelario", + "Callison", + "Caceres", + "Bozarth", + "Biles", + "Bejarano", + "Beech", + "Bashaw", + "Avina", + "Armentrout", + "Angus", + "Alverez", + "Acord", + "Zack", + "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", + "Monte", + "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", + "Arms", + "Archambault", + "Alvey", + "Alsup", + "Yon", + "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", + "Macy", + "Liston", + "Letendre", + "Kain", + "Huntsman", + "Hirst", + "Hagerty", + "Gulledge", + "Greenway", + "Grajeda", + "Gorton", + "Goines", + "Gittens", + "Frederickson", + "Fanelli", + "Embree", + "Eichelberger", + "Dunkin", + "Dull", + "Dixson", + "Dillow", + "Defelice", + "Chumley", + "Burleigh", + "Borkowski", + "Binette", + "Biggerstaff", + "Berglund", + "Beller", + "Audet", + "Arbuckle", + "Allain", + "Alfano", + "Zander", + "Youngman", + "Wittman", + "Weintraub", + "Vanzant", + "Vaden", + "Twitty", + "Trader", + "Toon", + "Till", + "Stollings", + "Standifer", + "Spinner", + "Sines", + "Shope", + "Scalise", + "Saville", + "Romans", + "Posada", + "Pisano", + "Otte", + "Nolasco", + "Napoli", + "Mier", + "Merkle", + "Mendiola", + "Melcher", + "Mejias", + "Mcmurry", + "Mccalla", + "Markowitz", + "Marine", + "Manis", + "Mallette", + "Macfarlane", + "Lough", + "Looper", + "Landin", + "Kittle", + "Kinsella", + "Kinnard", + "Hobart", + "Herald", + "Helman", + "Hellman", + "Hartsock", + "Halford", + "Hage", + "Gordan", + "Glasser", + "Gayton", + "Gattis", + "Gastelum", + "Gaspard", + "Frisch", + "Force", + "Fitzhugh", + "Eckstein", + "Eberly", + "Dowden", + "Despain", + "Crumpler", + "Crotty", + "Cornelison", + "Collin", + "Colin", + "Chouinard", + "Chamness", + "Catlin", + "Cann", + "Bumgardner", + "Budde", + "Branum", + "Bradfield", + "Braddy", + "Borst", + "Birdwell", + "Bent", + "Bazan", + "Bank", + "Banas", + "Bade", + "Aubrey", + "Arango", + "Ahearn", + "Addis", + "Zumwalt", + "Wurth", + "Wilk", + "Widener", + "Wagstaff", + "Vella", + "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", + "Hans", + "Guillot", + "Gard", + "Froehlich", + "Felipe", + "Feinberg", + "Falco", + "Dufour", + "Drees", + "Doney", + "Diep", + "Delao", + "Daves", + "Dail", + "Cutting", + "Crowson", + "Coss", + "Congdon", + "Carner", + "Camarena", + "Butterworth", + "Burlingame", + "Bouffard", + "Bloch", + "Bilyeu", + "Barta", + "Bakke", + "Baillargeon", + "Avent", + "Aquilar", + "Ake", + "Aho", + "Zeringue", + "Yeh", + "Yarber", + "Wolfson", + "Wendell", + "Vogler", + "Voelker", + "Truss", + "Troxell", + "Thrift", + "Strouse", + "Spielman", + "Sistrunk", + "Shows", + "Sevigny", + "Schuller", + "Schaaf", + "Ruffner", + "Routh", + "Roseman", + "Ricciardi", + "Peraza", + "Pegram", + "Overturf", + "Olander", + "Odaniel", + "Neu", + "Millner", + "Melchor", + "Maxie", + "Marvel", + "Maroney", + "Machuca", + "Macaluso", + "Livesay", + "Layfield", + "Laskowski", + "Kwiatkowski", + "Ko", + "Kiley", + "Kilby", + "Julien", + "Hovey", + "Heywood", + "Hayman", + "Havard", + "Harville", + "Haigh", + "Hagood", + "Grieco", + "Glassman", + "Gebhardt", + "Garry", + "Freeze", + "Fleischer", + "Fann", + "Elson", + "Eccles", + "Cunha", + "Crumb", + "Crew", + "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", + "Persons", + "Normand", + "Nardi", + "Mulvaney", + "Middaugh", + "Manners", + "Malek", + "Lodge", + "Leos", + "Lathan", + "Kujawa", + "Kimbro", + "Killebrew", + "Joshua", + "Houlihan", + "Hobby", + "Hinckley", + "Herod", + "Hepler", + "Hamner", + "Hammel", + "Hallowell", + "Gonsalez", + "Gingerich", + "Gambill", + "Funkhouser", + "Fricke", + "Fewell", + "Falkner", + "Endsley", + "Dulin", + "Drennen", + "Deaver", + "Dambrosio", + "Clover", + "Chadwell", + "Ceasar", + "Castanon", + "Canon", + "Burkes", + "Brune", + "Brisco", + "Brinker", + "Bowker", + "Boldt", + "Berner", + "Bee", + "Beaumont", + "Beaird", + "Bazemore", + "Barrick", + "Arnette", + "Albano", + "Younts", + "Wunderlich", + "Weidman", + "Vanness", + "Tu", + "Toland", + "Theobald", + "Stickler", + "Steiger", + "Stanger", + "Spies", + "Spector", + "Sollars", + "Smedley", + "Seibel", + "Scoville", + "Saito", + "Rye", + "Rummel", + "Rude", + "Rowles", + "Rouleau", + "Roos", + "Rogan", + "Roemer", + "Ream", + "Raya", + "Purkey", + "Priester", + "Perreira", + "Penick", + "Paulin", + "Parkins", + "Overcash", + "Oleson", + "Nicely", + "Neves", + "Muldrow", + "Minard", + "Midgett", + "Michalak", + "Melgar", + "Mcentire", + "Mcauliffe", + "Marti", + "Marte", + "Lydon", + "Lindholm", + "Leyba", + "Leader", + "Langevin", + "Lagasse", + "Lafayette", + "Kesler", + "Kelton", + "Kao", + "Kaminsky", + "Jump", + "Jaggers", + "Humbert", + "Huck", + "Howarth", + "Hinrichs", + "Higley", + "Gupton", + "Guimond", + "Gravois", + "Giguere", + "Fretwell", + "Fontes", + "Feeley", + "Faucher", + "Fall", + "Evan", + "Eichhorn", + "Ecker", + "Earp", + "Dole", + "Dinger", + "Derryberry", + "Demars", + "Deel", + "Copenhaver", + "Collinsworth", + "Colangelo", + "Cloyd", + "Claiborne", + "Caulfield", + "Carlsen", + "Calzada", + "Caffey", + "Broadus", + "Brenneman", + "Bouie", + "Bodnar", + "Blaney", + "Blanc", + "Blades", + "Beltz", + "Behling", + "Begin", + "Barahona", + "Yun", + "Yockey", + "Winkle", + "Windom", + "Wimer", + "Wilford", + "Wash", + "Villatoro", + "Trexler", + "Teran", + "Taliaferro", + "Sydnor", + "Swinson", + "Snelling", + "Smtih", + "Siu", + "Simonton", + "Simoneaux", + "Simoneau", + "Sherrer", + "Seavey", + "Scheel", + "Rushton", + "Rupe", + "Ruano", + "Rodney", + "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", + "Hatter", + "Hartzog", + "Harkey", + "Grimaldo", + "Goshorn", + "Gormley", + "Gluck", + "Gilroy", + "Gillenwater", + "Giffin", + "Folks", + "Fluker", + "Feder", + "Eyre", + "Eshelman", + "Eakins", + "Dryer", + "Disney", + "Detwiler", + "Delrosario", + "Davisson", + "Celestine", + "Catalan", + "Canning", + "Calton", + "Buster", + "Brammer", + "Botelho", + "Blakney", + "Bartell", + "Averett", + "Askins", + "Aker", + "Zak", + "Worcester", + "Witmer", + "Wiser", + "Winkelman", + "Widmer", + "Whittier", + "Oesteern", + "Weitzel", + "Wardell", + "Wagers", + "Ullman", + "Tupper", + "Tingley", + "Tilghman", + "Talton", + "Simard", + "Seda", + "Scheller", + "Sala", + "Rundell", + "Rost", + "Roa", + "Ribeiro", + "Rabideau", + "Primm", + "Porch", + "Polite", + "Pinon", + "Peart", + "Ostrom", + "Ober", + "Nystrom", + "Nussbaum", + "Nurse", + "Naughton", + "Murr", + "Moorhead", + "Monti", + "Monteiro", + "Melson", + "Meissner", + "Mclin", + "Mcgruder", + "Marotta", + "Makowski", + "Majewski", + "Madewell", + "Lunt", + "Lukens", + "Leininger", + "Lebel", + "Lakin", + "Laguna", + "Kepler", + "Jaques", + "Hunnicutt", + "Hungerford", + "Hoopes", + "Hertz", + "Heins", + "Hammers", + "Halliburton", + "Grosso", + "Gravitt", + "Glasper", + "Gideon", + "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", + "Yale", + "Woolfolk", + "Witten", + "Windle", + "Wayland", + "Tramel", + "Tittle", + "Talavera", + "Suter", + "Straley", + "Stetson", + "Specht", + "Sommerville", + "Soloman", + "So", + "Skeens", + "Sigman", + "Sibert", + "Shavers", + "Schuck", + "Schmit", + "Sartain", + "Sabol", + "Rosenblatt", + "Rollo", + "Rashid", + "Rabb", + "Province", + "Polston", + "Nyberg", + "Northrop", + "Navarra", + "Muldoon", + "Mulder", + "Mikesell", + "Mcdougald", + "Mcburney", + "Mauricio", + "Mariscal", + "Lui", + "Lozier", + "Lingerfelt", + "Legere", + "Latour", + "Lagunas", + "Lacour", + "Kurth", + "Ku", + "Killen", + "Kiely", + "Kayser", + "Kahle", + "Julius", + "Isley", + "Huertas", + "Hower", + "Hinz", + "Haugh", + "Gumm", + "Given", + "Galicia", + "Fortunato", + "Flake", + "Dunleavy", + "Duggins", + "Doby", + "Digiovanni", + "Devaney", + "Deltoro", + "Cribb", + "Crank", + "Corpuz", + "Coronel", + "Comfort", + "Coen", + "Charbonneau", + "Caine", + "Burchette", + "Blakey", + "Blakemore", + "Bergquist", + "Beene", + "Beaudette", + "Bayles", + "Ballance", + "Bakker", + "Bailes", + "Asberry", + "Arwood", + "Zucker", + "Willman", + "Whitesell", + "Wald", + "Walcott", + "Vancleave", + "Trump", + "Trail", + "Strasser", + "Simas", + "Shorts", + "Shick", + "Schleicher", + "Schaal", + "Saleh", + "Rotz", + "Resnick", + "Raphael", + "Rainer", + "Partee", + "Ollis", + "Oller", + "Oday", + "Noles", + "Munday", + "Mountain", + "Mong", + "Millican", + "Merwin", + "Mazzola", + "Mansell", + "Magallanes", + "Llanes", + "Lewellen", + "Lepore", + "Kisner", + "Keesee", + "Jim", + "Jeanlouis", + "Ingham", + "Hornbeck", + "Hermes", + "Hawn", + "Hartz", + "Harber", + "Haffner", + "Gutshall", + "Guth", + "Grays", + "Grams", + "Gowan", + "Finlay", + "Finkelstein", + "Eyler", + "Enloe", + "Dungan", + "Diez", + "Dearman", + "Dann", + "Cull", + "Crosson", + "Creek", + "Chronister", + "Cassity", + "Campion", + "Callihan", + "Butz", + "Breazeale", + "Blumenthal", + "Billy", + "Berkey", + "Batty", + "Batton", + "Barge", + "Arvizu", + "Alexis", + "Alderete", + "Aldana", + "Albaugh", + "Abernethy", + "Work", + "Wolter", + "Wille", + "Tweed", + "Tollefson", + "Thomasson", + "Teter", + "Testerman", + "Sproul", + "Spates", + "Southwick", + "Soukup", + "Skelly", + "Senter", + "Sealey", + "Sawicki", + "Sargeant", + "Rossiter", + "Rosemond", + "Repp", + "Pound", + "Pink", + "Pifer", + "Ormsby", + "Nickelson", + "Naumann", + "Morabito", + "Monzon", + "Millsaps", + "Millen", + "Mcelrath", + "Marcoux", + "Mantooth", + "Madson", + "Macneil", + "Mackinnon", + "Louque", + "Leister", + "Lampley", + "Kushner", + "Krouse", + "Kirwan", + "June", + "Jessee", + "Janson", + "Jahn", + "Jacquez", + "Islas", + "Hutt", + "Holladay", + "Hillyer", + "Hepburn", + "Hensel", + "Harrold", + "Guadalupe", + "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", + "Carlo", + "Bluhm", + "Bingaman", + "Bewley", + "Belew", + "Beckner", + "Beamer", + "Barefoot", + "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", + "Poor", + "Placencia", + "Pinkard", + "Phinney", + "Perrotta", + "Pernell", + "Parrett", + "Oxendine", + "Owensby", + "Orman", + "Nuno", + "Mori", + "Mcroberts", + "Mcneese", + "Mckamey", + "Mccullum", + "Markel", + "Mardis", + "Maines", + "Lueck", + "Lubin", + "Lefler", + "Leffler", + "Lavery", + "Larios", + "Labarbera", + "Kershner", + "Josey", + "Jeanbaptiste", + "Izaguirre", + "Hermosillo", + "Haviland", + "Hartshorn", + "Hamlet", + "Hafner", + "Ginter", + "Getty", + "Franck", + "Fiske", + "Emmett", + "Dufrene", + "Doody", + "Davie", + "Dangerfield", + "Dahlberg", + "Cuthbertson", + "Crone", + "Coffelt", + "Claus", + "Chidester", + "Chesson", + "Cauley", + "Caudell", + "Cantara", + "Campo", + "Caines", + "Bullis", + "Bucci", + "Brochu", + "Bosco", + "Bogard", + "Bickerstaff", + "Benning", + "Arzola", + "Antonelli", + "Adkinson", + "Zellers", + "Wulf", + "Worsley", + "Woolridge", + "Whitton", + "Oesteerfield", + "Walczak", + "Vassar", + "Truett", + "Trueblood", + "Trawick", + "Townsley", + "Topping", + "Tobar", + "Telford", + "Sung", + "Steverson", + "Stagg", + "Sitton", + "Sill", + "Sherrell", + "Sergent", + "Schoenfeld", + "Sarabia", + "Rutkowski", + "Rubenstein", + "Rigdon", + "Prentiss", + "Pomerleau", + "Plumlee", + "Phoenix", + "Philbrick", + "Peer", + "Patty", + "Patnode", + "Oloughlin", + "Obregon", + "Nuss", + "Napoleon", + "Morell", + "Moose", + "Mikell", + "Mele", + "Mcinerney", + "Mcguigan", + "Mcbrayer", + "Lore", + "Lor", + "Look", + "Lollar", + "Lakes", + "Kuehl", + "Kinzer", + "Kamp", + "Joplin", + "Jacobi", + "Howells", + "Holstein", + "Hedden", + "Hassler", + "Harty", + "Halle", + "Greig", + "Granville", + "Gouge", + "Goodrum", + "Gerhart", + "Geier", + "Geddes", + "Gast", + "Forehand", + "Ferree", + "Fendley", + "Feltner", + "Fang", + "Esqueda", + "Encarnacion", + "Eichler", + "Egger", + "Edmundson", + "Eatmon", + "Dragon", + "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", + "Reason", + "Ratchford", + "Popovich", + "Parkin", + "Nichol", + "Natal", + "Melville", + "Mcbryde", + "Magdaleno", + "Loehr", + "Lockman", + "Lingo", + "Leduc", + "Larocca", + "Lao", + "Lamere", + "Laclair", + "Krall", + "Korte", + "Koger", + "Jumper", + "Jalbert", + "Hughs", + "Higbee", + "Henton", + "Heaney", + "Haith", + "Gump", + "Greeson", + "Goodloe", + "Gholston", + "Gasper", + "Gagliardi", + "Fregoso", + "Farthing", + "Fabrizio", + "Ensor", + "Elswick", + "Elgin", + "Eklund", + "Eaddy", + "Drouin", + "Dorton", + "Dizon", + "Derouen", + "Delia", + "Deherrera", + "Davy", + "Dark", + "Dampier", + "Cullum", + "Culley", + "Cowgill", + "Cardoso", + "Cardinale", + "Brodsky", + "Broadbent", + "Brimmer", + "Briceno", + "Branscum", + "Bolyard", + "Boley", + "Bennington", + "Beadle", + "Baur", + "Ballentine", + "Azure", + "Aultman", + "Augustus", + "Asuncion", + "Arciniega", + "Aguila", + "Aceves", + "Yepez", + "Yap", + "Woodrum", + "Wethington", + "Weissman", + "Veloz", + "Trusty", + "Troup", + "Trammel", + "Theodore", + "Tarpley", + "Stivers", + "Steck", + "Sprayberry", + "Spraggins", + "Spitler", + "Spiers", + "Sohn", + "Seagraves", + "Schiffman", + "Rudnick", + "Rizo", + "Riccio", + "Rennie", + "Quinton", + "Quackenbush", + "Puma", + "Plott", + "Pearcy", + "Parada", + "Paiz", + "Munford", + "Moskowitz", + "Mease", + "Mcnary", + "Mccusker", + "Matt", + "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", + "Gilles", + "Garton", + "Gagliano", + "Fruge", + "Follett", + "Fiscus", + "Ferretti", + "Ebner", + "Esteerday", + "Eanes", + "Dirks", + "Dimarco", + "Depalma", + "Deforest", + "Dance", + "Cruce", + "Craighead", + "Christner", + "Candler", + "Cadwell", + "Burchell", + "Buettner", + "Brinton", + "Breed", + "Brazier", + "Brannen", + "Brame", + "Bova", + "Bomar", + "Blakeslee", + "Belknap", + "Bangs", + "Balzer", + "Athey", + "Armes", + "Alvis", + "Alverson", + "Alvardo", + "Alter", + "Zhao", + "Yeung", + "Yen", + "Wheelock", + "Oestelund", + "Wessels", + "Volkman", + "Threadgill", + "Thelen", + "Tandy", + "Tague", + "Ta", + "Symons", + "Swinford", + "Sturtevant", + "Straka", + "Stier", + "Stagner", + "Segarra", + "Seawright", + "Sack", + "Rutan", + "Roux", + "Ringler", + "Riker", + "Ramsdell", + "Quattlebaum", + "Purifoy", + "Poulson", + "Permenter", + "Peloquin", + "Pasley", + "Pagel", + "Osman", + "Obannon", + "Nygaard", + "Nipper", + "Newcomer", + "Munos", + "Motta", + "Meadors", + "Mcquiston", + "Mcniel", + "Mcmann", + "Mccrae", + "Mayne", + "Matte", + "Martine", + "Lucy", + "Legault", + "Lechner", + "Lack", + "Kucera", + "Krohn", + "Kratzer", + "Koopman", + "Judson", + "Jeske", + "Horrocks", + "Homes", + "Hock", + "Hibbler", + "Hesson", + "Hersh", + "Harvin", + "Halvorsen", + "Griner", + "Grindle", + "Glen", + "Gladstone", + "Garofalo", + "Frampton", + "Forbis", + "Fernando", + "Eddington", + "Diorio", + "Dingus", + "Dewar", + "Desalvo", + "Curcio", + "Creasy", + "Cortese", + "Cordoba", + "Connally", + "Cluff", + "Cascio", + "Capuano", + "Canaday", + "Calabro", + "Bussard", + "Brayton", + "Borja", + "Bigley", + "Arnone", + "Arguelles", + "Acuff", + "Zamarripa", + "Wooton", + "Wolfgang", + "Widner", + "Wideman", + "Threatt", + "Thiele", + "Templin", + "Teeters", + "Synder", + "Swint", + "Swick", + "Sturges", + "Stogner", + "Stedman", + "Spratt", + "Six", + "Siegfried", + "Shetler", + "Scull", + "Savino", + "Sather", + "Rothwell", + "Rook", + "Rone", + "Rolf", + "Rhee", + "Quevedo", + "Privett", + "Pouliot", + "Poche", + "Pickel", + "Petrillo", + "Pellegrini", + "Peaslee", + "Partlow", + "Otey", + "Nunnery", + "Morelock", + "Morello", + "Meunier", + "Messinger", + "Mckie", + "Mccubbin", + "Mccarron", + "Maria", + "Lerch", + "Lavine", + "Laverty", + "Lariviere", + "Lamkin", + "Kugler", + "Krol", + "Kissel", + "Keeter", + "Hummer", + "Hubble", + "Hickox", + "Hetzel", + "Hayner", + "Hagy", + "Hadlock", + "Groh", + "Gregorio", + "Gottschalk", + "Goodsell", + "Gloria", + "Gerry", + "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", + "Yung", + "Yim", + "Wooster", + "Woodrow", + "Wimbush", + "Willhite", + "Willams", + "Wigley", + "Weisberg", + "Wardlaw", + "Vigue", + "Vanhook", + "Unknow", + "Torre", + "Tasker", + "Tarbox", + "Strachan", + "Standard", + "Slover", + "Shamblin", + "Semple", + "Schuyler", + "Schrimsher", + "Sayer", + "Salzman", + "Salomon", + "Rubalcava", + "Riles", + "Rickey", + "Reneau", + "Reichel", + "Rayfield", + "Rabon", + "Pyatt", + "Prindle", + "Poss", + "Polito", + "Plemmons", + "Pesce", + "Perrault", + "Pereyra", + "Ostrowski", + "Nilsen", + "Niemeyer", + "Nick", + "Munsey", + "Mundell", + "Moncada", + "Miceli", + "Meader", + "Mcmasters", + "Mckeehan", + "Matsumoto", + "Marron", + "Marden", + "Lizarraga", + "Lingenfelter", + "Lewallen", + "Laurence", + "Langan", + "Lamanna", + "Kovac", + "Kinsler", + "Kephart", + "Keown", + "Kass", + "Kammerer", + "Jeffreys", + "Hysell", + "Householder", + "Hosmer", + "Hardnett", + "Hanner", + "Guyette", + "Greening", + "Glazer", + "Ginder", + "Fromm", + "Fortuna", + "Fluellen", + "Finkle", + "Fey", + "Fessler", + "Essary", + "Eisele", + "Duren", + "Dittmer", + "Crochet", + "Cosentino", + "Cogan", + "Coelho", + "Cavin", + "Carrizales", + "Campuzano", + "Brough", + "Bow", + "Bopp", + "Bookman", + "Bobb", + "Blouin", + "Beesley", + "Battista", + "Bascom", + "Bakken", + "Badgett", + "Arneson", + "Anselmo", + "Albino", + "Ahumada", + "Agustin", + "Woodyard", + "Wolters", + "Wireman", + "Wilton", + "Willison", + "Warman", + "Wan", + "Waldrup", + "Vowell", + "Vantassel", + "Vale", + "Twombly", + "Toomer", + "Tennison", + "Teets", + "Tedeschi", + "Swanner", + "Swallow", + "Stutz", + "Stelly", + "Sheehy", + "Schermerhorn", + "Scala", + "Sandidge", + "Salters", + "Salo", + "Saechao", + "Roseboro", + "Rolle", + "Ressler", + "Renz", + "Renn", + "Redford", + "Raposa", + "Rainbolt", + "Pompey", + "Pelfrey", + "Orndorff", + "Oney", + "Nolin", + "Nimmons", + "Ney", + "Nardone", + "Myhre", + "Morman", + "Mines", + "Menjivar", + "Mcglone", + "Mccammon", + "Maxon", + "Maris", + "Marciano", + "Manus", + "Maiden", + "Lowrance", + "Lorenzen", + "Lonergan", + "Lollis", + "Littles", + "Lindahl", + "Lansing", + "Lamas", + "Lach", + "Kuster", + "Krawczyk", + "Knuth", + "Knecht", + "Kirkendall", + "Keitt", + "Keever", + "Kantor", + "Jarboe", + "Hoye", + "Houchens", + "Holter", + "Holsinger", + "Hickok", + "Herb", + "Helwig", + "Helgeson", + "Heater", + "Hassett", + "Harner", + "Hamman", + "Hames", + "Hadfield", + "Goree", + "Goldfarb", + "Gaughan", + "Gaudreau", + "Gantz", + "Gallion", + "Frady", + "Foti", + "Flesher", + "Ferrin", + "Faught", + "Engram", + "Elbert", + "Donegan", + "Desouza", + "Degroot", + "Cutright", + "Crowl", + "Criner", + "Coke", + "Coan", + "Clinkscales", + "Chewning", + "Chavira", + "Catchings", + "Carlock", + "Bye", + "Bulger", + "Buenrostro", + "Bramblett", + "Brack", + "Boulware", + "Bordeaux", + "Bookout", + "Bitner", + "Birt", + "Baranowski", + "Baisden", + "Augustin", + "Allmon", + "Alberto", + "Acklin", + "Yoakum", + "Wilbourn", + "Whisler", + "Weinberger", + "Washer", + "Vasques", + "Vanzandt", + "Vanatta", + "Troxler", + "Tomes", + "Tindle", + "Tims", + "Throckmorton", + "Thach", + "Stpeter", + "Stlaurent", + "Stenson", + "Spry", + "Spitz", + "Songer", + "Snavely", + "Sly", + "Sleeper", + "Shroyer", + "Shortridge", + "Shenk", + "Sevier", + "Seabrook", + "Scrivner", + "Saltzman", + "Rosenberry", + "Rockwood", + "Robeson", + "Roan", + "Reiser", + "Redwine", + "Ramires", + "Raber", + "Profit", + "Posner", + "Popham", + "Pipes", + "Piotrowski", + "Pinard", + "Peterkin", + "Pelham", + "Peiffer", + "Peay", + "Peavey", + "Nadler", + "Musso", + "Milo", + "Millett", + "Mestas", + "Mcgowen", + "Marques", + "Marasco", + "Manriquez", + "Manos", + "Mair", + "Lipps", + "Lesser", + "Leiker", + "Leeds", + "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", + "Fleischman", + "Finke", + "Fasano", + "Fan", + "Faith", + "Ezzell", + "Ewers", + "Eveland", + "Eckenrode", + "Duclos", + "Drumm", + "Dimmick", + "Delancey", + "Defazio", + "Deacon", + "Dashiell", + "Damian", + "Cusack", + "Crowther", + "Crigger", + "Cray", + "Coolidge", + "Coldiron", + "Cleland", + "Chalfant", + "Cassel", + "Cape", + "Camire", + "Cabrales", + "Broomfield", + "Brittingham", + "Brisson", + "Brickey", + "Braziel", + "Brazell", + "Bragdon", + "Boulanger", + "Bos", + "Boman", + "Bohannan", + "Beem", + "Barto", + "Barre", + "Barley", + "Baptist", + "Azar", + "Ashbaugh", + "Armistead", + "Almazan", + "Adamski", + "Zendejas", + "Winburn", + "Willaims", + "Wilhoit", + "Oesteberry", + "Wentzel", + "Wendling", + "Wager", + "Visser", + "Vanscoy", + "Vankirk", + "Vallee", + "Tweedy", + "Thornberry", + "Sweeny", + "Stalker", + "Spradling", + "Spano", + "Smelser", + "Shim", + "Sechrist", + "Schall", + "Scaife", + "Rugg", + "Ruben", + "Rothrock", + "Roesler", + "Riehl", + "Ridings", + "Render", + "Ransdell", + "Radke", + "Pinero", + "Petree", + "Pendergast", + "Peluso", + "Pecoraro", + "Pascoe", + "Panek", + "Oshiro", + "Noon", + "Navarrette", + "Murguia", + "Moores", + "Moberg", + "Mike", + "Michaelis", + "Mcwhirter", + "Mcsweeney", + "Mcquade", + "Mccay", + "Mauk", + "Mariani", + "Marceau", + "Mandeville", + "Maeda", + "Lunde", + "Ludlow", + "Loeb", + "Lindo", + "Linderman", + "Leveille", + "Leith", + "Larock", + "Lambrecht", + "Kulp", + "Kinsley", + "Kimberlin", + "Kesterson", + "Jacinto", + "Ice", + "Hui", + "Hoyos", + "Helfrich", + "Hanke", + "Hail", + "Guillermo", + "Grisby", + "Goyette", + "Gouveia", + "Glazier", + "Gile", + "Gerena", + "Gelinas", + "Gasaway", + "Garden", + "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", + "Yuan", + "Winegar", + "Wickman", + "Wear", + "Warr", + "Warnke", + "Villeneuve", + "Veasey", + "Vassallo", + "Vannatta", + "Vadnais", + "Twilley", + "Truelove", + "Towery", + "Tomblin", + "Tippett", + "Theiss", + "Talkington", + "Talamantes", + "Swart", + "Swanger", + "Streit", + "Straw", + "Stines", + "Stabler", + "Spurling", + "Sobel", + "Sine", + "Simmers", + "Shippy", + "Shiflett", + "Shearin", + "Sauter", + "Sanderlin", + "Rusch", + "Runkle", + "Ruckman", + "Rorie", + "Roesch", + "Roberto", + "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", + "Jennette", + "Housman", + "Honey", + "Hiers", + "Hibbert", + "Herrod", + "Hegarty", + "Hathorn", + "Harsh", + "Greenhaw", + "Grafton", + "Govea", + "Gardener", + "Futch", + "Furst", + "Frisbee", + "Fred", + "Franko", + "Forcier", + "Foran", + "Flickinger", + "Fairfield", + "Eure", + "Emrich", + "Embrey", + "Edgington", + "Ecklund", + "Eckard", + "Durante", + "Deyo", + "Delvecchio", + "Deeds", + "Dade", + "Currey", + "Cuff", + "Creswell", + "Cottrill", + "Casavant", + "Cartier", + "Cargile", + "Capel", + "Cammack", + "Calfee", + "Buzzard", + "Burse", + "Burruss", + "Brust", + "Brousseau", + "Bridwell", + "Braaten", + "Borkholder", + "Bloomquist", + "Bjork", + "Bartelt", + "Arp", + "Amburgey", + "Yeary", + "Yao", + "Whitefield", + "Vinyard", + "Vicente", + "Vanvalkenburg", + "Twitchell", + "Timmins", + "Tester", + "Tapper", + "Stringham", + "Starcher", + "Spotts", + "Slaugh", + "Simonsen", + "Sheffer", + "Sequeira", + "Rosati", + "Rode", + "Rhymes", + "Reza", + "Record", + "Quint", + "Pollak", + "Peirce", + "Patillo", + "Parkerson", + "Paiva", + "Nilson", + "Nice", + "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", + "Halls", + "Guiterrez", + "Grote", + "Granillo", + "Grainger", + "Glasco", + "Gilder", + "Garren", + "Garlock", + "Garey", + "Fu", + "Fryar", + "Fredricks", + "Fraizer", + "Foxx", + "Foshee", + "Ferrel", + "Felty", + "Feathers", + "Everitt", + "Evens", + "Esser", + "Elkin", + "Eberhart", + "Durso", + "Duguay", + "Driskill", + "Doster", + "Dewall", + "Deveau", + "Demps", + "Demaio", + "Delreal", + "Deleo", + "Delay", + "Deem", + "Darrah", + "Cumberbatch", + "Culberson", + "Cranmer", + "Cordle", + "Colgan", + "Chesley", + "Cavallo", + "Castellon", + "Castelli", + "Carreras", + "Carnell", + "Carmon", + "Carmen", + "Carlucci", + "Bottom", + "Bontrager", + "Blumberg", + "Blasingame", + "Becton", + "Ayon", + "Artrip", + "Arline", + "Andujar", + "Alkire", + "Alder", + "Agan", + "Zukowski", + "Zuckerman", + "Zehr", + "Wroblewski", + "Wrigley", + "Woodside", + "Wigginton", + "Oesteman", + "Oestegate", + "Werts", + "Washam", + "Wardlow", + "Walser", + "Waiters", + "Teller", + "Tadlock", + "Stuck", + "Stringfield", + "Stimpson", + "Stickley", + "Starbuck", + "Standish", + "Spurlin", + "Spindler", + "Speller", + "Spaeth", + "Sotomayor", + "Sok", + "Sluder", + "Shryock", + "Shepardson", + "Shatley", + "Scannell", + "Santistevan", + "Rosner", + "Rolland", + "Rhode", + "Resto", + "Reinhard", + "Rathburn", + "Prisco", + "Poulsen", + "Pinney", + "Phares", + "Pennock", + "Pastrana", + "Oviedo", + "Ostler", + "Noto", + "Nauman", + "Mulford", + "Moise", + "Moberly", + "Mirabal", + "Ming", + "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", + "Im", + "Huot", + "Hsieh", + "Hoyer", + "Horwitz", + "Hopp", + "Hoeft", + "Hennig", + "Haskin", + "Grill", + "Gourdine", + "Golightly", + "Girouard", + "Fulgham", + "Fritsch", + "Freer", + "Frasher", + "Foulk", + "Firestone", + "Fiorentino", + "Fedor", + "Feather", + "Ensley", + "Englehart", + "Eells", + "Ebel", + "Dunphy", + "Donahoe", + "Dimas", + "Dileo", + "Dibenedetto", + "Dabrowski", + "Crick", + "Coonrod", + "Conder", + "Coddington", + "Chunn", + "Choy", + "Chaput", + "Cerna", + "Carreiro", + "Calahan", + "Braggs", + "Bourdon", + "Boner", + "Bollman", + "Bittle", + "Ben", + "Behm", + "Bauder", + "Batt", + "Barreras", + "Aubuchon", + "Anzalone", + "Adamo", + "Zhou", + "Zerbe", + "Zachery", + "Witty", + "Wirt", + "Willcox", + "Oesteberg", + "Weikel", + "Waymire", + "Vroman", + "Vinci", + "Vallejos", + "Tutor", + "Truesdell", + "Troutt", + "Trotta", + "Tollison", + "Toles", + "Tichenor", + "Tai", + "Symonds", + "Surles", + "Sunday", + "Strayer", + "Stgeorge", + "Sroka", + "Sorrentino", + "Solares", + "Snelson", + "Silvestri", + "Sikorski", + "Shawver", + "Schumaker", + "Schorr", + "Schooley", + "Scates", + "Satterlee", + "Satchell", + "Sacks", + "Rymer", + "Roselli", + "Robitaille", + "Riegel", + "Richer", + "Regis", + "Reames", + "Provenzano", + "Proper", + "Priestley", + "Plaisance", + "Pettey", + "Palomares", + "Oman", + "Nowakowski", + "Nace", + "Monette", + "Minyard", + "Mclamb", + "Mchone", + "Mccarroll", + "Masson", + "Marco", + "Magoon", + "Maddy", + "Lundin", + "Loza", + "Licata", + "Lesley", + "Leonhardt", + "Lema", + "Landwehr", + "Kircher", + "Kinch", + "Karpinski", + "Johannsen", + "Hussain", + "Houghtaling", + "Hoskinson", + "Hollaway", + "Holeman", + "Hobgood", + "Hilt", + "Hiebert", + "Gros", + "Gram", + "Goggin", + "Gentle", + "Geissler", + "Gadbois", + "Gabaldon", + "Fleshman", + "Flannigan", + "Files", + "Fairman", + "Epp", + "Eilers", + "Dycus", + "Dunmire", + "Duffield", + "Dowler", + "Ditto", + "Deloatch", + "Dehaan", + "Deemer", + "Corner", + "Clayborn", + "Christofferso", + "Chilson", + "Chesney", + "Chatfield", + "Charlie", + "Caster", + "Carron", + "Canale", + "Camden", + "Buff", + "Brigman", + "Branstetter", + "Bosse", + "Borton", + "Bonar", + "Blau", + "Biron", + "Beagle", + "Barroso", + "Arvin", + "Arispe", + "Zacharias", + "Zabel", + "Yaeger", + "Works", + "Woolford", + "Whetzel", + "Weakley", + "Veatch", + "Vandeusen", + "Tufts", + "Troxel", + "Troche", + "Traver", + "Townsel", + "Tosh", + "Talarico", + "Swilley", + "Sterrett", + "Stenger", + "Springfield", + "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", + "Pascal", + "Overbey", + "Orear", + "Oliveri", + "Oldenburg", + "Nutting", + "Naugle", + "Mote", + "Mossman", + "Moor", + "Misner", + "Milazzo", + "Michelson", + "Mei", + "Mcentee", + "Mccullar", + "Mccree", + "Mcaleer", + "Mazzone", + "Maxim", + "Marshal", + "Mandell", + "Manahan", + "Malott", + "Maisonet", + "Mailloux", + "Lumley", + "Lowrie", + "Louviere", + "Lipinski", + "Lindemann", + "Leppert", + "Leopold", + "Leasure", + "Leaf", + "Labarge", + "Kubik", + "Knisely", + "Knepp", + "Kenworthy", + "Kennelly", + "Kelch", + "Karg", + "Kanter", + "Ignacio", + "Hyer", + "Houchin", + "Hosley", + "Hosler", + "Hollon", + "Holleman", + "Heitman", + "Hebb", + "Haggins", + "Gwaltney", + "Guin", + "Greenman", + "Goulding", + "Gorden", + "Goodyear", + "Geraci", + "Georges", + "Gathers", + "Frison", + "Feagin", + "Falconer", + "Espada", + "Erving", + "Erikson", + "Eisenhauer", + "Eder", + "Ebeling", + "Durgin", + "Drown", + "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", + "Xu", + "Wolverton", + "Winebrenner", + "Wetherell", + "Oestelake", + "Wegener", + "Weddington", + "Vong", + "Tuten", + "Trosclair", + "Trim", + "Tressler", + "Theroux", + "Teske", + "Sword", + "Swinehart", + "Swensen", + "Sundquist", + "Southall", + "Socha", + "Sizer", + "Silverberg", + "Shortt", + "Shimizu", + "Sherrard", + "Shen", + "Shaeffer", + "Seth", + "Scheid", + "Scheetz", + "Saravia", + "Sanner", + "Rubinstein", + "Rozell", + "Romer", + "Ringo", + "Rheaume", + "Reisinger", + "Raven", + "Randles", + "Pullum", + "Petrella", + "Payan", + "Papp", + "Pablo", + "Nordin", + "Norcross", + "Nicoletti", + "Nicholes", + "Newbold", + "Nakagawa", + "Mraz", + "Monteith", + "Milstead", + "Milliner", + "Mellen", + "Mccardle", + "Matthias", + "Marcy", + "Luft", + "Loo", + "Locker", + "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", + "Felt", + "Feldmann", + "Everly", + "Dyess", + "Dyal", + "Dunnigan", + "Downie", + "Dolby", + "Divine", + "Deatherage", + "Dates", + "Danna", + "Cosey", + "Corrado", + "Cheever", + "Celaya", + "Caver", + "Cashion", + "Caplinger", + "Cansler", + "Byrge", + "Bruder", + "Brew", + "Breuer", + "Breslin", + "Brazelton", + "Botkin", + "Bonneau", + "Bones", + "Bondurant", + "Bohanan", + "Bogue", + "Boes", + "Bodner", + "Boatner", + "Blatt", + "Bickley", + "Belliveau", + "Beiler", + "Beier", + "Beckstead", + "Bart", + "Bang", + "Bachmann", + "Atkin", + "Aron", + "Andreas", + "Altizer", + "Alloway", + "Allaire", + "Albro", + "Abron", + "Zellmer", + "Yetter", + "Yelverton", + "Wiltshire", + "Wiens", + "Whidden", + "Wait", + "Viramontes", + "Vanwormer", + "Topper", + "Tarantino", + "Tanksley", + "Sumlin", + "Strauch", + "Strang", + "Stice", + "Spahn", + "Sosebee", + "Sigala", + "Shrout", + "Seamon", + "Schrum", + "Schneck", + "Schantz", + "Said", + "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", + "Lora", + "Liberatore", + "Leek", + "Lease", + "Lazaro", + "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", + "Esteban", + "Ehrhardt", + "Eggen", + "Dusek", + "Durrant", + "Dubay", + "Dones", + "Dey", + "Depasquale", + "Delucia", + "Degraff", + "Deer", + "Decamp", + "Davalos", + "Darwin", + "Dan", + "Cullins", + "Conard", + "Clouser", + "Clontz", + "Cifuentes", + "Chico", + "Chappel", + "Chaffins", + "Celis", + "Carwile", + "Byram", + "Bruggeman", + "Brick", + "Bressler", + "Brathwaite", + "Brasfield", + "Bradburn", + "Boose", + "Boon", + "Bodie", + "Blosser", + "Blas", + "Bise", + "Bertsch", + "Bernardi", + "Bernabe", + "Bengtson", + "Barrette", + "Astorga", + "Armand", + "Antone", + "Alday", + "Albee", + "Abrahamson", + "Yarnell", + "Wiltse", + "Wile", + "Wiebe", + "Waguespack", + "Vasser", + "Upham", + "Tyre", + "Turek", + "Tune", + "Traxler", + "Torain", + "Tomaszewski", + "Tinnin", + "Tiner", + "Tindell", + "Teed", + "Styron", + "Stahlman", + "Staab", + "Spoon", + "Spells", + "Skiba", + "Shih", + "Sheperd", + "Seidl", + "Secor", + "Schutte", + "Sanfilippo", + "Ruder", + "Rondon", + "Reina", + "Rearick", + "Rank", + "Procter", + "Prochaska", + "Pettengill", + "Pauly", + "Neilsen", + "Nally", + "Mutter", + "Mullenax", + "Morano", + "Meads", + "Mcnaughton", + "Mcmurtry", + "Mcmath", + "Mckinsey", + "Matthes", + "Massenburg", + "Marlar", + "Margolis", + "Marcos", + "Malin", + "Magallon", + "Mackin", + "Lovette", + "Loughran", + "Loring", + "Longstreet", + "Loiselle", + "Lenihan", + "Laub", + "Kunze", + "Kull", + "Koepke", + "Knights", + "Kerwin", + "Kalinowski", + "Kagan", + "Innis", + "Innes", + "Husband", + "Holtzman", + "Heinemann", + "Harshman", + "Haider", + "Haack", + "Guss", + "Grondin", + "Grissett", + "Greenawalt", + "Gravel", + "Goudy", + "Goodlett", + "Goldston", + "Gokey", + "Goin", + "Gardea", + "Galaviz", + "Gafford", + "Gabrielson", + "Furlow", + "Fritch", + "Fordyce", + "Folger", + "Elizalde", + "Ehlert", + "Eckhoff", + "Eccleston", + "Ealey", + "Dubin", + "Dolphin", + "Dieter", + "Diemer", + "Deschamps", + "Delapena", + "Decicco", + "Debolt", + "Daum", + "Cullinan", + "Crittendon", + "Crase", + "Cossey", + "Coppock", + "Coots", + "Colyer", + "Columbus", + "Cluck", + "Chamberland", + "Cane", + "Burkhead", + "Bumpus", + "Buchan", + "Borman", + "Bork", + "Boe", + "Birkholz", + "Berardi", + "Benda", + "Behnke", + "Barter", + "Auer", + "Amezquita", + "Wotring", + "Wirtz", + "Wingert", + "Wiesner", + "Whitesides", + "Weyant", + "Wainscott", + "Vivian", + "Venezia", + "Varnell", + "Tussey", + "Trainer", + "Toll", + "Thurlow", + "Tack", + "Tabares", + "Stiver", + "Stell", + "Starke", + "Stanhope", + "Stanek", + "Sisler", + "Sinnott", + "Sidney", + "Siciliano", + "Shehan", + "Selph", + "Seager", + "Scurlock", + "Scranton", + "Santucci", + "Santangelo", + "Saltsman", + "Ruel", + "Ropp", + "Rolling", + "Rogge", + "Rettig", + "Renwick", + "Reidy", + "Reider", + "Redfield", + "Quam", + "Premo", + "Port", + "Pier", + "Peet", + "Parente", + "Paolucci", + "Pan", + "Palmquist", + "Orme", + "Ohler", + "Ogg", + "Netherton", + "Mutchler", + "Morita", + "Mistretta", + "Minnis", + "Middendorf", + "Menzel", + "Mendosa", + "Mendelson", + "Meaux", + "Mcspadden", + "Mcquaid", + "Mcnatt", + "Manigault", + "Maney", + "Mager", + "Lung", + "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", + "Isabell", + "Huskins", + "Holzman", + "Hollie", + "Hinojos", + "Highland", + "Hefley", + "He", + "Hatmaker", + "Harte", + "Halloway", + "Hallenbeck", + "Goodwyn", + "Glaspie", + "Gillian", + "Geise", + "Fullwood", + "Fryman", + "Frew", + "Frakes", + "Fraire", + "Farrer", + "Enlow", + "Engen", + "Ellzey", + "Eckles", + "Earles", + "Ealy", + "Dunkley", + "Drinkard", + "Dreiling", + "Draeger", + "Dinardo", + "Dills", + "Desroches", + "Desantiago", + "Current", + "Curlee", + "Crumbley", + "Critchlow", + "Coury", + "Courtright", + "Coffield", + "Cleek", + "Christen", + "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", + "Oestefield", + "Weibel", + "Wanner", + "Waldrep", + "Vital", + "Villani", + "Vanarsdale", + "Utterback", + "Updike", + "Triggs", + "Topete", + "Tolar", + "Tigner", + "Thoms", + "Tauber", + "Tarvin", + "Tally", + "Swiney", + "Sweatman", + "Studebaker", + "Streets", + "Stennett", + "States", + "Starrett", + "Stannard", + "Stalvey", + "Sonnenberg", + "Smithey", + "Sieber", + "Sickles", + "Shinault", + "Segars", + "Sanger", + "Salmeron", + "Rothe", + "Rizzi", + "Rine", + "Ricard", + "Restrepo", + "Ralls", + "Ragusa", + "Quiroga", + "Ping", + "Phung", + "Pero", + "Pegg", + "Pavlik", + "Papenfuss", + "Oropeza", + "Omar", + "Okane", + "Neer", + "Nee", + "Nathaniel", + "Mudge", + "Mozingo", + "Molinaro", + "Mikel", + "Mcvicker", + "Mcgarvey", + "Mcfalls", + "Mccraney", + "Matus", + "Magers", + "Llanos", + "Livermore", + "Liss", + "Linehan", + "Leto", + "Leitner", + "Laymon", + "Lawing", + "Lawerence", + "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", + "Esteerwood", + "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", + "Belmont", + "Baynes", + "Barstow", + "Zeman", + "Zackery", + "Yardley", + "Yamashita", + "Wulff", + "Wilken", + "Wiliams", + "Wickersham", + "Wible", + "Whipkey", + "Wedgeworth", + "Walmsley", + "Walkup", + "Vreeland", + "Verrill", + "Valera", + "Umana", + "Traub", + "Timothy", + "Swingle", + "Swing", + "Summey", + "Stroupe", + "Stockstill", + "Steffey", + "Stefanski", + "Statler", + "Stapp", + "Speights", + "Sons", + "Solari", + "Soderberg", + "Slick", + "Shunk", + "Shorey", + "Shewmaker", + "Sheilds", + "Schiffer", + "Schank", + "Schaff", + "Sagers", + "Rodger", + "Rochon", + "Riser", + "Rickett", + "Reale", + "Raglin", + "Poon", + "Polly", + "Polen", + "Plata", + "Pitcock", + "Percival", + "Palen", + "Pahl", + "Orona", + "Oberle", + "Nocera", + "Navas", + "Nault", + "Mullings", + "Mouser", + "Moos", + "Montejano", + "Monreal", + "Minick", + "Middlebrook", + "Meece", + "Mcmillion", + "Mccullen", + "Mauck", + "Marshburn", + "Maillet", + "Mahaney", + "Magner", + "Maclin", + "Lucey", + "Litteral", + "Lippincott", + "Leite", + "Leis", + "Leaks", + "Laurie", + "Lamarre", + "Kost", + "Jurgens", + "Jesus", + "Jerkins", + "Jager", + "Hurwitz", + "Hughley", + "Hotaling", + "Horstman", + "Hohman", + "Hocker", + "Hively", + "Hipps", + "Hile", + "Hessler", + "Hermanson", + "Hepworth", + "Henn", + "Helland", + "Hedlund", + "Harkless", + "Haigler", + "Gutierez", + "Gum", + "Grindstaff", + "Glantz", + "Giardina", + "Gerken", + "Gadsden", + "Freda", + "Finnerty", + "Feld", + "Farnum", + "Encinas", + "Elton", + "Eager", + "Drakes", + "Dennie", + "Cutlip", + "Curtsinger", + "Couto", + "Cortinas", + "Corby", + "Choice", + "Chiasson", + "Carle", + "Carballo", + "Brindle", + "Borum", + "Bober", + "Blagg", + "Birk", + "Berthiaume", + "Beahm", + "Batres", + "Basnight", + "Barbara", + "Backes", + "Axtell", + "Aust", + "Au", + "Atterberry", + "Alvares", + "Alt", + "Alegria", + "Abe", + "Yow", + "Yip", + "Woodell", + "Wojciechowski", + "Winfree", + "Winbush", + "Wiest", + "Wesner", + "Wax", + "Wamsley", + "Wakeman", + "Verner", + "Truex", + "Trafton", + "Toman", + "Thorsen", + "Thor", + "Theus", + "Tellier", + "Tallant", + "Szeto", + "Strope", + "Stills", + "Stage", + "Sorg", + "Simkins", + "Shuey", + "Shaul", + "Servin", + "Serio", + "Serafin", + "Senior", + "Sebring", + "Salguero", + "Saba", + "Ryerson", + "Rudder", + "Ruark", + "Rother", + "Rohrbaugh", + "Rohrbach", + "Rohan", + "Rogerson", + "Risher", + "Rigg", + "Reeser", + "Pryce", + "Prokop", + "Prins", + "Priebe", + "Prejean", + "Pinheiro", + "Petrone", + "Petri", + "Penson", + "Pearlman", + "Parikh", + "Pal", + "Pair", + "Natoli", + "Murakami", + "Mullikin", + "Mullane", + "Motes", + "Morningstar", + "Monks", + "Mcveigh", + "Mcgrady", + "Mcgaughey", + "Mccurley", + "Masi", + "Marchan", + "Manske", + "Maine", + "Maez", + "Lusby", + "Linde", + "Lile", + "Likens", + "Licon", + "Leroux", + "Lemaire", + "Legette", + "Lax", + "Laskey", + "Laprade", + "Laplant", + "Lady", + "Kolar", + "Kittredge", + "Kinley", + "Kerber", + "Kanagy", + "Johannes", + "Jetton", + "Jayne", + "January", + "Janik", + "Ippolito", + "Inouye", + "Hunsinger", + "Howley", + "Howery", + "Horrell", + "Hoosier", + "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", + "Fern", + "Eisenman", + "Earhart", + "Dupuy", + "Dunkelberger", + "Drummer", + "Drexler", + "Dillinger", + "Dilbeck", + "Diana", + "Dewald", + "Demby", + "Deford", + "Daniell", + "Dake", + "Craine", + "Como", + "Clever", + "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", + "Tyrell", + "Troiano", + "Tickle", + "Thibodaux", + "Straus", + "Stoneking", + "Stjean", + "Stillings", + "Stiff", + "Stange", + "Square", + "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", + "Lust", + "Losey", + "Loop", + "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", + "Fergus", + "Felice", + "Eye", + "Dyar", + "Drucker", + "Donoghue", + "Dildy", + "Devers", + "Detweiler", + "Despres", + "Denby", + "Degeorge", + "Cueto", + "Cranston", + "Courville", + "Clukey", + "Cirillo", + "Chon", + "Chivers", + "Caudillo", + "Catt", + "Butera", + "Bulluck", + "Buckmaster", + "Braunstein", + "Bracamonte", + "Bourdeau", + "Border", + "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", + "Schillinger", + "Ritch", + "Reif", + "Raybon", + "Ratzlaff", + "Radley", + "Putt", + "Putney", + "Prime", + "Press", + "Pinette", + "Piner", + "Petrin", + "Parise", + "Osbourne", + "Nyman", + "Northington", + "Noblitt", + "Nishimura", + "Nell", + "Neher", + "Nalls", + "Naccarato", + "Mucha", + "Mounce", + "Miron", + "Millis", + "Meaney", + "Mcnichols", + "Mckinnis", + "Mcjunkin", + "Mcduffy", + "Max", + "Marcello", + "Manrique", + "Mannion", + "Mangual", + "Malveaux", + "Mains", + "Lumsden", + "Lucien", + "Lohmann", + "Lipe", + "Lightsey", + "Lemasters", + "Leist", + "Laxton", + "Laverriere", + "Latorre", + "Lamons", + "Kral", + "Kopf", + "Knauer", + "Kitt", + "Kaul", + "Karas", + "Kamps", + "Jusino", + "Janis", + "Islam", + "Hullinger", + "Huges", + "Hornung", + "Hiser", + "Hempel", + "Helsel", + "Hassinger", + "Hargraves", + "Hammes", + "Hallberg", + "Gutman", + "Gumbs", + "Gruver", + "Graddy", + "Gonsales", + "Goncalves", + "Glennon", + "Gilford", + "Geno", + "Freshour", + "Flippo", + "Fifer", + "Few", + "Fermin", + "Fason", + "Farrish", + "Fallin", + "Ewert", + "Estepp", + "Escudero", + "Ensminger", + "Emmanuel", + "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", + "Boris", + "Booze", + "Bolte", + "Body", + "Berens", + "Bellman", + "Bellard", + "Baril", + "Arden", + "Antonucci", + "Amado", + "Allie", + "Wolfgram", + "Winsor", + "Wimbish", + "Wilbert", + "Wier", + "Wallach", + "Viveros", + "Vento", + "Varley", + "Vanslyke", + "Vangorder", + "Touchstone", + "Tomko", + "Tiemann", + "Throop", + "Tamura", + "Talmadge", + "Swayze", + "Sturdevant", + "Strauser", + "Stolz", + "Stenberg", + "Stayton", + "Spohn", + "Spillers", + "Spillane", + "Sluss", + "Sloane", + "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", + "Pippen", + "Pilon", + "Piccirillo", + "Pewitt", + "Pesina", + "Pecora", + "Otani", + "Orsini", + "Ollie", + "Oestreich", + "Odea", + "Ocallaghan", + "Northup", + "Niehaus", + "Newberg", + "Nasser", + "Narron", + "Monarrez", + "Mishler", + "Mcsherry", + "Mcelfresh", + "Mayon", + "Mauer", + "Mattice", + "Mash", + "Marrone", + "Marmolejo", + "Marini", + "Marie", + "Mara", + "Malm", + "Machen", + "Lunceford", + "Loewen", + "Liverman", + "Litwin", + "Linscott", + "Levins", + "Lenox", + "Legaspi", + "Leeman", + "Leavy", + "Lannon", + "Lamson", + "Lambdin", + "Labarre", + "Knouse", + "Klemm", + "Kleinschmidt", + "Kirklin", + "Keels", + "Juliano", + "Howser", + "Hott", + "Hosier", + "Hosea", + "Hopwood", + "Holyfield", + "Hodnett", + "Hirsh", + "Heimann", + "Height", + "Heckel", + "Harger", + "Hamil", + "Hajek", + "Gurganus", + "Gunning", + "Grange", + "Gonzalas", + "Goggins", + "Gerow", + "Gaydos", + "Garduno", + "Ganley", + "Galey", + "Farner", + "Ester", + "Engles", + "Emond", + "Emert", + "Ellenburg", + "Edick", + "Duell", + "Dublin", + "Dorazio", + "Dong", + "Dimond", + "Diederich", + "Dewalt", + "Depuy", + "Dempster", + "Demaria", + "Dehoyos", + "Dearth", + "Dealba", + "Dane", + "Czech", + "Crose", + "Crespin", + "Cogdill", + "Clinard", + "Cipriano", + "Chretien", + "Chalk", + "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", + "Able", + "Zielke", + "Yunker", + "Yeates", + "Wrobel", + "Wike", + "Whisnant", + "Wherry", + "Wagnon", + "Vogan", + "Vansant", + "Vannest", + "Vallo", + "Ullery", + "Towles", + "Towell", + "Tiger", + "Thill", + "Taormina", + "Tannehill", + "Taing", + "Storrs", + "Stickles", + "Stetler", + "Sparling", + "Solt", + "Silcox", + "Sheard", + "Shadle", + "Seman", + "Selleck", + "Schlemmer", + "Scher", + "Sapien", + "Sainz", + "Rumble", + "Roye", + "Rosamond", + "Romain", + "Rizzuto", + "Resch", + "Rentz", + "Rather", + "Rasch", + "Ranieri", + "Purtell", + "Primmer", + "Portwood", + "Pontius", + "Pons", + "Pletcher", + "Pledger", + "Pirkle", + "Pillsbury", + "Pentecost", + "Peng", + "Paxson", + "Ortez", + "Organ", + "Oles", + "Newborn", + "Mullett", + "Muirhead", + "Mouzon", + "Mork", + "Mollett", + "Mohn", + "Mitcham", + "Melillo", + "Mee", + "Medders", + "Mcmiller", + "Mccleery", + "Mccaughey", + "Manders", + "Mak", + "Maciejewski", + "Macaulay", + "Lute", + "Lipman", + "Lewter", + "Larocque", + "Langton", + "Kriner", + "Knipp", + "Killeen", + "Karn", + "Kalish", + "Kaczor", + "Jonson", + "Jerez", + "Jarrard", + "Janda", + "Hymes", + "Hollman", + "Hollandsworth", + "Holl", + "Hobdy", + "Hitch", + "Hennen", + "Hemmer", + "Hagins", + "Haddox", + "Guitierrez", + "Guernsey", + "Gorsuch", + "Gholson", + "Genova", + "Gazaway", + "Gauna", + "Gammons", + "Freels", + "Fonville", + "Fly", + "Florian", + "Fleet", + "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", + "Chess", + "Cheeseman", + "Charity", + "Cavallaro", + "Castille", + "Cabello", + "Burgan", + "Buffum", + "Bruss", + "Brassfield", + "Bowerman", + "Bothwell", + "Borgen", + "Bonaparte", + "Bombard", + "Boivin", + "Boissonneault", + "Bogner", + "Bodden", + "Boan", + "Blanche", + "Bittinger", + "Bickham", + "Bedolla", + "Bale", + "Bainbridge", + "Aybar", + "Avendano", + "Ashlock", + "Amidon", + "Almanzar", + "Akridge", + "Ackermann", + "Zager", + "Yong", + "Xavier", + "Worrall", + "Winans", + "Wilsey", + "Wightman", + "Oesterick", + "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", + "Spray", + "Spinney", + "Spengler", + "Smartt", + "Skoog", + "Silvis", + "Sieg", + "Shuford", + "Selfridge", + "Seguin", + "Sedgwick", + "Sease", + "Scotti", + "Schroer", + "Schlenker", + "Schill", + "Savarese", + "Sapienza", + "Sanson", + "Sandefur", + "Salamone", + "Rusnak", + "Rudisill", + "Royalty", + "Rothermel", + "Roca", + "Resendiz", + "Reliford", + "Rasco", + "Raiford", + "Quisenberry", + "Quijada", + "Pullins", + "Puccio", + "Postell", + "Poppe", + "Pinter", + "Piche", + "Petrucci", + "Pellegrin", + "Pelaez", + "Patti", + "Paton", + "Pasco", + "Parkes", + "Paden", + "Pabst", + "Orchard", + "Olmsted", + "Newlon", + "Mynatt", + "Mustafa", + "Mower", + "Morrone", + "Moree", + "Moffat", + "Mixson", + "Minner", + "Min", + "Millette", + "Mederos", + "Mcgahan", + "Mcconville", + "Maughan", + "Massingill", + "Marano", + "Macri", + "Lovern", + "Lichtenstein", + "Leonetti", + "Lehner", + "Lawley", + "Laramie", + "Lappin", + "Lahti", + "Lago", + "Lacayo", + "Kuester", + "Knee", + "Kincade", + "Junior", + "Juhl", + "Joslyn", + "Jiron", + "Jessop", + "Jerry", + "Jarosz", + "Jain", + "Hults", + "Hoge", + "Hodgins", + "Hoban", + "Hinkson", + "Hillyard", + "Herzig", + "Hervey", + "Henriksen", + "Hawker", + "Hause", + "Hard", + "Hankerson", + "Gregson", + "Golliday", + "Gilcrease", + "Gessner", + "Gerace", + "Garwood", + "Garst", + "Gaillard", + "Flinchum", + "Fishel", + "Fishback", + "Filkins", + "Fentress", + "Fabre", + "Ethier", + "Espana", + "Eisner", + "Ehrhart", + "Efird", + "Drennon", + "Dominy", + "Dominique", + "Domingue", + "Dipaolo", + "Dinan", + "Dimartino", + "Deskins", + "Dengler", + "Defreitas", + "Defranco", + "Dancer", + "Dahlin", + "Cutshaw", + "Cuthbert", + "Croyle", + "Crothers", + "Critchfield", + "Cowie", + "Costner", + "Coppedge", + "Copes", + "Ciccone", + "Champ", + "Cesar", + "Caufield", + "Capo", + "Cambron", + "Cambridge", + "Buser", + "Burnes", + "Buhl", + "Buendia", + "Brindley", + "Brecht", + "Bourgoin", + "Boomer", + "Blackshire", + "Birge", + "Benninger", + "Bembry", + "Beil", + "Begaye", + "Barrentine", + "Barks", + "Banton", + "Balmer", + "Baity", + "Auerbach", + "Ambler", + "Alexandre", + "Ackerson", + "Zurcher", + "Zell", + "Wynkoop", + "Wallick", + "Waid", + "Vos", + "Vizcaino", + "Vester", + "Veale", + "Vandermark", + "Vanderford", + "Tuthill", + "Trivette", + "Thiessen", + "Tewksbury", + "Tao", + "Tabron", + "Swim", + "Swasey", + "Swanigan", + "Stoughton", + "Stoudt", + "Stimson", + "Stecker", + "Stead", + "Stall", + "Spady", + "Souther", + "Smoak", + "Sklar", + "Simcox", + "Sidwell", + "Sharon", + "Seybert", + "Sesco", + "Seeman", + "Seaborn", + "Schwenk", + "Schmeling", + "Rossignol", + "Robillard", + "Robicheaux", + "Riveria", + "Rippeon", + "Ridgley", + "Remaley", + "Rehkop", + "Reddish", + "Reach", + "Rauscher", + "Rachel", + "Quirion", + "Pusey", + "Pruden", + "Pressler", + "Potvin", + "Pospisil", + "Paradiso", + "Pangburn", + "Palmateer", + "Ownby", + "Otwell", + "Osterberg", + "Osmond", + "Olsson", + "Old", + "Oberlander", + "Nusbaum", + "Novack", + "Nokes", + "Nicastro", + "Nehls", + "Nay", + "Naber", + "Mulhern", + "Motter", + "Moretz", + "Milian", + "Mercedes", + "Mckeel", + "Mcclay", + "Mccart", + "Matsuda", + "Mary", + "Martucci", + "Marple", + "Marko", + "Marciniak", + "Manes", + "Mancia", + "Maker", + "Macrae", + "Lybarger", + "Lint", + "Lineberger", + "Levingston", + "Lecroy", + "Lattimer", + "Laseter", + "Kulick", + "Krier", + "Knutsen", + "Klem", + "Kinne", + "Kinkade", + "Ketterman", + "Kerstetter", + "Kersten", + "Karam", + "Jury", + "Joshi", + "Jin", + "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", + "Games", + "Gain", + "Friedlander", + "Frahm", + "Fossett", + "Fosdick", + "Forth", + "Forbush", + "Fondren", + "Fleckenstein", + "Fitchett", + "Filer", + "Feliz", + "Feist", + "Ewart", + "Evelyn", + "Esters", + "Elsner", + "Edgin", + "Eddie", + "Esteerly", + "Dussault", + "Durazo", + "Don", + "Devereaux", + "Deshotel", + "Deckert", + "Dargan", + "Dare", + "Cornman", + "Conkle", + "Condit", + "Commander", + "Claunch", + "Clabaugh", + "Chute", + "Cheesman", + "Chea", + "Charney", + "Charleston", + "Casella", + "Carone", + "Carbonell", + "Canipe", + "Campana", + "Calles", + "Cabezas", + "Cabell", + "Buttram", + "Bustillos", + "Buskirk", + "Boyland", + "Bourke", + "Blakeley", + "Big", + "Berumen", + "Berrier", + "Bench", + "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", + "Stryker", + "Stoller", + "Stapler", + "Stansfield", + "Smit", + "Smelley", + "Sicard", + "Shulman", + "Shew", + "Shear", + "Sheahan", + "Sharpton", + "Selvidge", + "Schlesinger", + "Savell", + "Sandford", + "Sabatino", + "Rosenbloom", + "Roepke", + "Rish", + "Rhames", + "Renken", + "Reger", + "Rappaport", + "Quarterman", + "Puig", + "Prasad", + "Poplar", + "Pizano", + "Pigott", + "Pick", + "Phair", + "Petrick", + "Patt", + "Pascua", + "Paramore", + "Papineau", + "Olivieri", + "Ogren", + "Norden", + "Noga", + "Nisbet", + "Munk", + "Munch", + "Mui", + "Morvant", + "Moro", + "Moloney", + "Merz", + "Meng", + "Meltzer", + "Mellinger", + "Mehl", + "Mcnealy", + "Mckernan", + "Mchaney", + "Mccleskey", + "Mcandrews", + "Mayton", + "Mayor", + "Markert", + "Maresca", + "Marcellus", + "Maner", + "Mandujano", + "Malpass", + "Macintyre", + "Lytton", + "Lyall", + "Lummus", + "Longshore", + "Longfellow", + "Lokey", + "Locher", + "Leverette", + "Lepe", + "Lefever", + "Leeson", + "Lederer", + "Lampert", + "Lagrone", + "La", + "Kreider", + "Korth", + "Knopf", + "Kleist", + "Kiss", + "Keltner", + "Kelling", + "Kaspar", + "Kappler", + "Justin", + "Josephs", + "Jiang", + "Huckins", + "Horace", + "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", + "Flor", + "Flanary", + "Fales", + "Erlandson", + "Ellett", + "Elia", + "Edinger", + "Dziedzic", + "Duerr", + "Draughn", + "Donoho", + "Dimatteo", + "Devos", + "Dematteo", + "Degnan", + "Darlington", + "Danis", + "Dam", + "Dahlstrom", + "Dahlke", + "Czajkowski", + "Cumbie", + "Culbert", + "Crosier", + "Croley", + "Corry", + "Clinger", + "Cheshire", + "Chalker", + "Cephas", + "Caywood", + "Cavalier", + "Capehart", + "Cales", + "Cadiz", + "Bussiere", + "Burriss", + "Burkart", + "Brundidge", + "Bronstein", + "Breeze", + "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", + "Sing", + "Shisler", + "Sheriff", + "Shanley", + "Servantes", + "Selders", + "Segrest", + "Seese", + "Seeber", + "Schaible", + "Savala", + "Sartor", + "Rutt", + "Rumbaugh", + "Ruis", + "Roten", + "Roessler", + "Ritenour", + "Riney", + "Restivo", + "Rene", + "Renard", + "Rakestraw", + "Rake", + "Rachal", + "Quiros", + "Pullin", + "Prudhomme", + "Primeaux", + "Prestridge", + "Presswood", + "Ponte", + "Polzin", + "Poarch", + "Pittenger", + "Piggott", + "Pickell", + "Phaneuf", + "Parvin", + "Parmley", + "Palmeri", + "Paisley", + "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", + "Hole", + "Hockman", + "Hockaday", + "Hiltz", + "Hetherington", + "Hesser", + "Hershman", + "Heng", + "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", + "Esteridge", + "Dyck", + "Dufault", + "Dubreuil", + "Dresser", + "Drapeau", + "Domingues", + "Dolezal", + "Dinkel", + "Didonato", + "Devitt", + "Devane", + "Demott", + "Daughtrey", + "Daubert", + "Das", + "Darrell", + "Creason", + "Crary", + "Costilla", + "Chipps", + "Cheatwood", + "Carmean", + "Canton", + "Caffrey", + "Burgher", + "Buker", + "Brunk", + "Brodbeck", + "Brantner", + "Brandy", + "Bolivar", + "Boerner", + "Bodkin", + "Biel", + "Betty", + "Bencomo", + "Bellino", + "Beliveau", + "Beauvais", + "Beaupre", + "Baylis", + "Baskett", + "Barcus", + "Barbera", + "Baltz", + "Asay", + "Arney", + "Arcuri", + "Ankney", + "Agostini", + "Addy", + "Zwilling", + "Zubia", + "Zollinger", + "Zeitz", + "Yard", + "Yanes", + "Winship", + "Winningham", + "Wickline", + "Webre", + "Waddington", + "Vosburgh", + "Vessels", + "Verrett", + "Vedder", + "Varnum", + "Vandeventer", + "Vacca", + "Usry", + "Towry", + "Touchet", + "Tookes", + "Tonkin", + "Timko", + "Tibbitts", + "Thedford", + "Tarleton", + "Talty", + "Talamantez", + "Tafolla", + "Sugg", + "Strecker", + "Stirling", + "Steffan", + "Spiva", + "Slape", + "Siemens", + "Shatzer", + "Seyler", + "Seamans", + "Schmaltz", + "Schipper", + "Sasso", + "Sailor", + "Ruppe", + "Runner", + "Royals", + "Roudebush", + "Ripple", + "Riemer", + "Richarson", + "Revilla", + "Reichenbach", + "Ratley", + "Railsback", + "Quayle", + "Poplin", + "Poorman", + "Ponton", + "Polo", + "Pollitt", + "Poitras", + "Piscitelli", + "Piedra", + "Pickles", + "Pew", + "Perera", + "People", + "Penwell", + "Pelt", + "Pauline", + "Parkhill", + "Paladino", + "Ore", + "Oram", + "Olmo", + "Oliveras", + "Olivarria", + "Ogorman", + "Near", + "Naron", + "Na", + "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", + "Knuckles", + "Kinman", + "Kimmons", + "Kelty", + "Kaster", + "Karlson", + "Kania", + "Jules", + "Joyal", + "Job", + "Jenner", + "Jasinski", + "Jandreau", + "Isenhour", + "Hunziker", + "Huhn", + "Houde", + "Houchins", + "Holtman", + "Hodo", + "Heyman", + "Hentges", + "Hedberg", + "Hayne", + "Haycraft", + "Harshbarger", + "Harshaw", + "Harriss", + "Haring", + "Hansell", + "Hanford", + "Handler", + "Hamburg", + "Hamblen", + "Gunnell", + "Groat", + "Gorecki", + "Gochenour", + "Gleeson", + "Genest", + "Geiser", + "Gabriele", + "Fulghum", + "Friese", + "Fridley", + "Freeborn", + "Frailey", + "Flaugher", + "Fiala", + "Ettinger", + "Etheredge", + "Espitia", + "Eriksen", + "Engelbrecht", + "Engebretson", + "Elie", + "Eickhoff", + "Edney", + "Edelen", + "Eberhard", + "Estein", + "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", + "Blossom", + "Blauser", + "Blacker", + "Bjorklund", + "Belair", + "Baumer", + "Basler", + "Barb", + "Baltimore", + "Baize", + "Baden", + "Auman", + "Amundsen", + "Amore", + "Alvarenga", + "Adan", + "Adamczyk", + "Yerkes", + "Yerby", + "Yawn", + "Yamaguchi", + "Worthey", + "Wolk", + "Wixom", + "Wiersma", + "Wieczorek", + "Whiddon", + "Weyer", + "Wetherington", + "Wein", + "Watchman", + "Warf", + "Wansley", + "Vesely", + "Velazco", + "Vannorman", + "Valasquez", + "Utz", + "Urso", + "Turco", + "Turbeville", + "Trivett", + "Torrance", + "Toothaker", + "Toohey", + "Tondreau", + "Thaler", + "Sylvain", + "Swindler", + "Swigert", + "Swider", + "Stiner", + "Stever", + "Steffes", + "Stampley", + "Stair", + "Smidt", + "Skeete", + "Silvestre", + "Shy", + "Shutts", + "Shock", + "Shealey", + "Seigler", + "Schweizer", + "Schuldt", + "Schlichting", + "Scherr", + "Saulsberry", + "Saner", + "Rosin", + "Rosato", + "Roling", + "Rohn", + "Rix", + "Rister", + "Remley", + "Remick", + "Recinos", + "Ramm", + "Raabe", + "Pursell", + "Poythress", + "Poli", + "Pokorny", + "Plum", + "Pettry", + "Petrey", + "Petitt", + "Penman", + "Payson", + "Paquet", + "Pappalardo", + "Outland", + "Oscar", + "Orenstein", + "Nuttall", + "Nuckols", + "Nott", + "Nimmo", + "Murtagh", + "Mousseau", + "Moulder", + "Mooneyhan", + "Moak", + "Minch", + "Miera", + "Mercuri", + "Meighan", + "Mcnelly", + "Mcguffin", + "Mccreery", + "Mcclaskey", + "Man", + "Mainor", + "Luongo", + "Lundstrom", + "Loughman", + "Loose", + "Lobo", + "Lobb", + "Linhart", + "Liberty", + "Lever", + "Leu", + "Leiter", + "Lehoux", + "Lehn", + "Lares", + "Lapan", + "Langhorne", + "Lamon", + "Ladwig", + "Ladson", + "Kuzma", + "Kreitzer", + "Knop", + "Keech", + "Kea", + "Kadlec", + "Jo", + "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", + "Esteland", + "Earwood", + "Dudash", + "Du", + "Drozd", + "Desoto", + "Delph", + "Dekker", + "Dejohn", + "Degarmo", + "Defeo", + "Defalco", + "Deblois", + "Dacus", + "Cudd", + "Crossen", + "Crooms", + "Cronan", + "Costin", + "Costanza", + "Cordray", + "Comerford", + "Collie", + "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", + "Avis", + "Avallone", + "Aubry", + "Ashcroft", + "Asencio", + "Arledge", + "Anchondo", + "Amy", + "Alvord", + "Acheson", + "Zaleski", + "Yonker", + "Wyss", + "Wycoff", + "Woodburn", + "Wininger", + "Winders", + "Willmon", + "Wiechmann", + "Oesteley", + "Weatherholt", + "Warnick", + "Wardle", + "Warburton", + "Volkert", + "Virgin", + "Villanveva", + "Veit", + "Vass", + "Vanallen", + "Tung", + "Toribio", + "Toothman", + "Tiggs", + "Thornsberry", + "Thome", + "Tepper", + "Teeple", + "Tebo", + "Tassone", + "Tann", + "Sultan", + "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", + "Rollin", + "Rivenburg", + "Ritzman", + "Rist", + "Rio", + "Ricardo", + "Reynosa", + "Retana", + "Reiber", + "Regnier", + "Rarick", + "Ransome", + "Rall", + "Propes", + "Prall", + "Poyner", + "Ponds", + "Poitra", + "Plaster", + "Pippins", + "Pinion", + "Piccolo", + "Phu", + "Perillo", + "Penrose", + "Pendergraft", + "Pelchat", + "Peed", + "Patenaude", + "Palko", + "Odoms", + "Oddo", + "Novoa", + "Noone", + "Newburn", + "Negri", + "Nantz", + "Mosser", + "Moshier", + "Molter", + "Molinari", + "Moler", + "Millman", + "Meurer", + "Mendel", + "Mcray", + "Mcnicholas", + "Mcnerney", + "Mckillip", + "Mcilvain", + "Mcadory", + "Matter", + "Master", + "Marmol", + "Marinez", + "Manzer", + "Mankin", + "Makris", + "Majeski", + "Magnus", + "Maffei", + "Luoma", + "Luman", + "Luebke", + "Luby", + "Lomonaco", + "Loar", + "Litchford", + "Lintz", + "Licht", + "Levenson", + "Legge", + "Laughter", + "Lanigan", + "Krom", + "Kreger", + "Koop", + "Kober", + "Klima", + "Kitterman", + "Kinkead", + "Kimbell", + "Kilian", + "Kibbe", + "Kendig", + "Kemmer", + "Kash", + "Jenkin", + "Inniss", + "Hurlbut", + "Hunsucker", + "Hugo", + "Huckabee", + "Hoxie", + "Hoglund", + "Hockensmith", + "Hoadley", + "Hinkel", + "Higuera", + "Herrman", + "Heiner", + "Hausmann", + "Haubrich", + "Hassen", + "Hanlin", + "Hallinan", + "Haglund", + "Hagberg", + "Gullo", + "Gullion", + "Groner", + "Greenwalt", + "Grand", + "Goodwill", + "Gong", + "Gobert", + "Glowacki", + "Glessner", + "Gines", + "Gildersleeve", + "Gildea", + "Gerke", + "Gerhard", + "Gebhard", + "Gatton", + "Gately", + "Galasso", + "Fralick", + "Fouse", + "Fluharty", + "Faucette", + "Fairfax", + "Evanoff", + "Elser", + "Ellard", + "Egerton", + "Edie", + "Ector", + "Ebling", + "Dunkel", + "Duhart", + "Drysdale", + "Dostal", + "Dorey", + "Dolph", + "Doles", + "Dismukes", + "Digregorio", + "Digby", + "Dewees", + "Deramus", + "Denniston", + "Dennett", + "Deloney", + "Delaughter", + "Darcy", + "Cuneo", + "Cumberland", + "Crotts", + "Crosswhite", + "Cremeans", + "Creasey", + "Cottman", + "Cothern", + "Costales", + "Cosner", + "Corpus", + "Cora", + "Constable", + "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", + "Basil", + "Bartos", + "Barriga", + "Barrie", + "Barna", + "Barcenas", + "Banach", + "Baccus", + "Auclair", + "Ashman", + "Arter", + "Arendt", + "Ansell", + "Allums", + "Allsop", + "Allender", + "Alber", + "Albarran", + "Adelson", + "Zoll", + "Wysong", + "Wimbley", + "Wildes", + "Whitis", + "Whitehill", + "Whicker", + "Weymouth", + "Well", + "Weldy", + "Wark", + "Wareham", + "Waddy", + "Viveiros", + "Vito", + "Vides", + "Vecchio", + "Vath", + "Vandoren", + "Vanderhoof", + "Unrein", + "Uecker", + "Tsan", + "Trepanier", + "Tregre", + "Torkelson", + "Ton", + "Tobler", + "Tineo", + "Timmer", + "Swopes", + "Swofford", + "Sweeten", + "Swarts", + "Summerfield", + "Sumler", + "Stucky", + "Strozier", + "Stigall", + "Stickel", + "Stennis", + "Stelzer", + "Steely", + "Solar", + "Slayden", + "Skillern", + "Shurtz", + "Shelor", + "Shellenbarger", + "Shand", + "Shabazz", + "Seo", + "Scroggs", + "Schwandt", + "Schrecengost", + "Schoenrock", + "Schirmer", + "Sandridge", + "Ruzicka", + "Rozek", + "Rowlands", + "Roser", + "Rosendahl", + "Romanowski", + "Romaine", + "Rolston", + "Rink", + "Riggio", + "Reichman", + "Redondo", + "Reay", + "Rawlinson", + "Raskin", + "Raine", + "Quandt", + "Purpura", + "Purdue", + "Pruneda", + "Prevatte", + "Prettyman", + "Pinedo", + "Pierro", + "Pidgeon", + "Phillippi", + "Pfeil", + "Penix", + "Peasley", + "Paro", + "Overall", + "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", + "Mattie", + "Matranga", + "Martone", + "Markland", + "Maravilla", + "Manno", + "Manly", + "Mancha", + "Mallery", + "Magno", + "Lorentz", + "Locklin", + "Livingstone", + "Lipford", + "Lininger", + "Line", + "Liao", + "Lepley", + "Leming", + "Lemelin", + "Leadbetter", + "Lawhon", + "Lattin", + "Langworthy", + "Lampman", + "Lambeth", + "Lamarr", + "Lahey", + "Krajewski", + "Klopp", + "Kinnison", + "Kestner", + "Kerry", + "Kennell", + "Karim", + "Jozwiak", + "Jakubowski", + "Jagger", + "Ivery", + "Ishmael", + "Iliff", + "Iddings", + "Hudkins", + "Houseman", + "Holz", + "Holderman", + "Hoehne", + "Highfill", + "Hiett", + "Heskett", + "Heldt", + "Hedman", + "Hayslett", + "Hatchell", + "Hasse", + "Hamon", + "Hamada", + "Hakala", + "Haislip", + "Haffey", + "Hackbarth", + "Guo", + "Gullickson", + "Guerrette", + "Guan", + "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", + "Crown", + "Cozad", + "Cossette", + "Comacho", + "Climer", + "Chadbourne", + "Cespedes", + "Cayton", + "Castaldo", + "Carpino", + "Carls", + "Capozzi", + "Canela", + "Cadet", + "Buzard", + "Busick", + "Burlison", + "Brinkmann", + "Bridgeforth", + "Bourbeau", + "Bornstein", + "Boots", + "Bonfiglio", + "Boice", + "Boese", + "Biondi", + "Bilski", + "Betton", + "Berwick", + "Berlanga", + "Behan", + "Becraft", + "Barrientez", + "Banh", + "Balke", + "Balderrama", + "Bahe", + "Bachand", + "Atlas", + "Armer", + "Arceo", + "Aliff", + "Alatorre", + "Zermeno", + "Zane", + "Younce", + "You", + "Yeoman", + "Yamasaki", + "Wroten", + "Worm", + "Woodby", + "Winer", + "Wilmer", + "Willits", + "Wilcoxon", + "Wehmeyer", + "Waterbury", + "Wass", + "Wann", + "Wake", + "Wachtel", + "Vizcarra", + "Vince", + "Victory", + "Veitch", + "Vanderbilt", + "Vallone", + "Vallery", + "Ureno", + "Tyer", + "Tipps", + "Tiedeman", + "Theberge", + "Texeira", + "Taub", + "Tapscott", + "Stutts", + "Stults", + "Stukes", + "Staff", + "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", + "Morning", + "Morison", + "Montz", + "Mogensen", + "Mizer", + "Miraglia", + "Mingus", + "Migliore", + "Merideth", + "Menges", + "Mellor", + "Mcnear", + "Mcnab", + "Mcloud", + "Mcelligott", + "Mccollom", + "Maynes", + "Marquette", + "Markowski", + "Marcantonio", + "Mar", + "Maldanado", + "Makin", + "Macey", + "Lundeen", + "Lovin", + "Longino", + "Lisle", + "Linthicum", + "Limones", + "Lesure", + "Lesage", + "Leisure", + "Lauver", + "Laubach", + "Latshaw", + "Lary", + "Lapham", + "Lacoste", + "Lacher", + "Kutcher", + "Knickerbocker", + "Klos", + "Klingler", + "Kleiman", + "Kittleson", + "Kimbrel", + "Kimberly", + "Kemmerer", + "Kelson", + "Keese", + "Kam", + "Kallas", + "Jurgensen", + "Junkins", + "Juneau", + "Juergens", + "Jolliff", + "Jelks", + "Janicki", + "Jang", + "Innocent", + "Ingles", + "Inge", + "Huguley", + "Huggard", + "Howton", + "Hone", + "Holford", + "Holding", + "Hogle", + "Hipple", + "Heimbach", + "Heider", + "Heidel", + "Havener", + "Hattaway", + "Harrah", + "Hanscom", + "Hankinson", + "Hamdan", + "Gridley", + "Goulette", + "Goulart", + "Goodspeed", + "Goodrow", + "Go", + "Girardi", + "Gent", + "Gautreau", + "Ganz", + "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", + "Domino", + "Dimick", + "Diener", + "Dickert", + "Deines", + "Degree", + "Declue", + "Daw", + "Dattilo", + "Danko", + "Custodio", + "Cuccia", + "Crunk", + "Crispin", + "Corp", + "Cornwall", + "Corea", + "Coppin", + "Considine", + "Coniglio", + "Conboy", + "Collar", + "Cockrum", + "Clute", + "Clewis", + "Claude", + "Christiano", + "Channell", + "Channel", + "Cerrato", + "Cecere", + "Catoe", + "Castillon", + "Castile", + "Carstarphen", + "Carmouche", + "Caperton", + "Buteau", + "Bury", + "Bumpers", + "Brey", + "Brenton", + "Brazeal", + "Brassard", + "Brass", + "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", + "Ardis", + "Amon", + "Almaguer", + "Allee", + "Albarado", + "Alameda", + "Abdo", + "Zuehlke", + "Zoeller", + "Yokoyama", + "Yocom", + "Wyllie", + "Woolum", + "Wint", + "Winland", + "Wink", + "Wilner", + "Wilmes", + "Whitlatch", + "Oesteervelt", + "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", + "Regina", + "Reda", + "Raygoza", + "Ratner", + "Rascoe", + "Rahm", + "Quincy", + "Quast", + "Pry", + "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", + "Laurel", + "Latson", + "Larmon", + "Largo", + "Landreneau", + "Landgraf", + "Lamberson", + "Kurland", + "Kresge", + "Korman", + "Korando", + "Klapper", + "Kitson", + "Kinyon", + "Kincheloe", + "Kawamoto", + "Kawakami", + "Jenney", + "Jeanpierre", + "Ivers", + "Issa", + "Ince", + "Hugh", + "Hug", + "Honda", + "Hollier", + "Hollars", + "Hoerner", + "Hodgkinson", + "Hiott", + "Hibbitts", + "Herlihy", + "Henricks", + "Heavner", + "Hayhurst", + "Harvill", + "Harewood", + "Hanselman", + "Hanning", + "Gwyn", + "Gustavson", + "Grounds", + "Grizzard", + "Grinder", + "Graybeal", + "Gravley", + "Gorney", + "Goll", + "Goehring", + "Godines", + "Gobeil", + "Glickman", + "Giuliano", + "Gimbel", + "Gift", + "Geib", + "Gayhart", + "Gatti", + "Gains", + "Gadberry", + "Frei", + "Fraise", + "Fouch", + "Forst", + "Forsman", + "Folden", + "Fogleman", + "Figaro", + "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", + "Coop", + "Compos", + "Colmenero", + "Cogar", + "Cliff", + "Chapel", + "Carnevale", + "Campanella", + "Caley", + "Calderone", + "Burtch", + "Brouwer", + "Brehmer", + "Brassell", + "Brafford", + "Bourquin", + "Bourn", + "Bohnert", + "Blewett", + "Blass", + "Blakes", + "Bhakta", + "Besser", + "Berge", + "Bellis", + "Balfour", + "Avera", + "Austria", + "Applin", + "Ammon", + "Alsop", + "Aleshire", + "Akbar", + "Zoller", + "Zapien", + "Wymore", + "Wyble", + "Wolken", + "Wix", + "Wickstrom", + "Whobrey", + "Whigham", + "Oesteerlund", + "Welsch", + "Weisser", + "Weisner", + "Weinstock", + "Wehner", + "Watlington", + "Wakeland", + "Wafer", + "Virgen", + "Victorino", + "Veltri", + "Veith", + "Urich", + "Uresti", + "Umberger", + "Twedt", + "Tuohy", + "Tschida", + "Trumble", + "Troia", + "Tristan", + "Trimmer", + "Topps", + "Tonn", + "Tiernan", + "Threet", + "Thrall", + "Thetford", + "Teneyck", + "Tartaglia", + "Swords", + "Strohl", + "Streater", + "Strausbaugh", + "Stradley", + "Stonecipher", + "Steadham", + "Stansel", + "Stalcup", + "Stabile", + "Sprenger", + "Spradley", + "Speier", + "Southwood", + "Sorrels", + "Slezak", + "Skow", + "Sirmans", + "Simental", + "Silk", + "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", + "Rafael", + "Quist", + "Pyron", + "Punch", + "Pullman", + "Przybylski", + "Pridmore", + "Pooley", + "Pines", + "Perkinson", + "Perine", + "Perham", + "Pecor", + "Peavler", + "Partington", + "Panton", + "Oliverio", + "Olague", + "Ohman", + "Ohearn", + "Noyola", + "Nicolai", + "Nebel", + "Murtha", + "Muff", + "Mowrey", + "Moroney", + "Morgenstern", + "Morant", + "Monty", + "Monsour", + "Mohammad", + "Moffit", + "Mijares", + "Meriwether", + "Mendieta", + "Melendrez", + "Mejorado", + "Mckittrick", + "Mckey", + "Mckenny", + "Mckelvy", + "Mckechnie", + "Mcelvain", + "Mccoin", + "Mazzarella", + "Mazon", + "Maurin", + "Matthies", + "Maston", + "Maske", + "Marzano", + "Marmon", + "Marburger", + "Mangus", + "Mangino", + "Mallet", + "Luo", + "Losada", + "Londono", + "Lobdell", + "Lipson", + "Lesniak", + "Leighty", + "Lei", + "League", + "Lavallie", + "Lareau", + "Laperle", + "Lape", + "Laforce", + "Laffey", + "Kuehner", + "Kravitz", + "Kowalsky", + "Kohr", + "Kinsman", + "Keppler", + "Kennemer", + "Keiper", + "Keely", + "Kaler", + "Jun", + "Jelinek", + "Jarnagin", + "Issac", + "Isakson", + "Hypes", + "Hutzler", + "Huls", + "Horak", + "Hitz", + "Hice", + "Herrell", + "Henslee", + "Heitz", + "Heiss", + "Heiman", + "Hasting", + "Hartwick", + "Harmer", + "Harland", + "Hammontree", + "Haldeman", + "Hakes", + "Guse", + "Guillotte", + "Guard", + "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", + "Dry", + "Drumheller", + "Douthitt", + "Doris", + "Donis", + "Dixion", + "Dittrich", + "Dials", + "Dessert", + "Descoteaux", + "Depaul", + "Denker", + "Demuth", + "Demelo", + "Delacerda", + "Deforge", + "Danos", + "Dalley", + "Daigneault", + "Cybulski", + "Crystal", + "Cristobal", + "Cothren", + "Corns", + "Corkery", + "Copas", + "Coco", + "Clubb", + "Clore", + "Chitty", + "Chichester", + "Chery", + "Charon", + "Chamber", + "Chace", + "Catanzaro", + "Castonguay", + "Cassella", + "Caroll", + "Carlberg", + "Cammarata", + "Calle", + "Cajigas", + "Byas", + "Buzbee", + "Busey", + "Burling", + "Bufkin", + "Brzezinski", + "Brun", + "Brickner", + "Brabham", + "Boller", + "Bodily", + "Bockman", + "Bleich", + "Blakeman", + "Bisbee", + "Bier", + "Bezanson", + "Bevilacqua", + "Besaw", + "Berrian", + "Berkeley", + "Bequette", + "Beauford", + "Baumgarten", + "Baudoin", + "Batie", + "Basaldua", + "Bardin", + "Bangert", + "Banes", + "Backlund", + "Avitia", + "Artz", + "Archey", + "Apel", + "Amico", + "Alam", + "Aden", + "Zebrowski", + "Yokota", + "Wormley", + "Wootton", + "Woodie", + "Womac", + "Wiltz", + "Wigington", + "Whitehorn", + "Whisman", + "Weisgerber", + "Weigle", + "Weedman", + "Watkin", + "Wasilewski", + "Wadlington", + "Wadkins", + "Viverette", + "Vidaurri", + "Vidales", + "Vezina", + "Vanleer", + "Vanhoy", + "Vanguilder", + "Vanbrunt", + "Uy", + "Updegraff", + "Tylor", + "Trinkle", + "Touchette", + "Tilson", + "Tilman", + "Tengan", + "Tarkington", + "Surrett", + "Super", + "Summy", + "Streetman", + "Straughter", + "Steere", + "Stalling", + "Spruell", + "Spadaro", + "Solley", + "Smathers", + "Silvera", + "Siems", + "Shreffler", + "Sholar", + "Selden", + "Schaper", + "Samayoa", + "Ruggeri", + "Rowen", + "Rosso", + "Rosenbalm", + "Roosevelt", + "Roose", + "Ronquillo", + "Rogowski", + "Rexford", + "Repass", + "Renzi", + "Renick", + "Renda", + "Rehberg", + "Reaper", + "Ranck", + "Raffa", + "Rackers", + "Raap", + "Pugsley", + "Puglisi", + "Prinz", + "Primus", + "Pounders", + "Pon", + "Pompa", + "Plasencia", + "Pipkins", + "Pillar", + "Petrosky", + "Pelley", + "Pauls", + "Pauli", + "Parkison", + "Parisien", + "Pangle", + "Pancoast", + "Palazzolo", + "Owenby", + "Overbay", + "Orris", + "Orlowski", + "Nipp", + "Newbern", + "Nedd", + "Nealon", + "Najar", + "Mysliwiec", + "Myron", + "Myres", + "Musson", + "Murrieta", + "Munsell", + "Mumma", + "Muldowney", + "Moyle", + "Mowen", + "Mose", + "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", + "Jeremiah", + "Jared", + "Igo", + "Huseman", + "Huseby", + "Hurlbert", + "Huard", + "Hottinger", + "Hornberger", + "Hopps", + "Holdsworth", + "Hensen", + "Heilig", + "Heeter", + "Harpole", + "Haak", + "Gutowski", + "Gunnels", + "Grimmer", + "Grieve", + "Gravatt", + "Granderson", + "Gotcher", + "Gleaves", + "Genao", + "Garfinkel", + "Frerichs", + "Foushee", + "Flanery", + "Finnie", + "Feldt", + "Fagin", + "Ewalt", + "Ellefson", + "Eiler", + "Eckhart", + "Esteep", + "Dwight", + "Digirolamo", + "Didomenico", + "Devera", + "Delavega", + "Defilippo", + "Debusk", + "Daub", + "Damiani", + "Cupples", + "Cuddy", + "Crofoot", + "Courter", + "Coto", + "Costigan", + "Corning", + "Corman", + "Corlett", + "Cooperman", + "Collison", + "Coghlan", + "Cobbins", + "Coady", + "Coachman", + "Clothier", + "Client", + "Clear", + "Cipolla", + "Chmielewski", + "Chiodo", + "Chatterton", + "Chappelle", + "Chairez", + "Ceron", + "Casperson", + "Casler", + "Casados", + "Carrow", + "Carolina", + "Carlino", + "Carico", + "Cardillo", + "Caouette", + "Canto", + "Canavan", + "Cambra", + "Byard", + "Buterbaugh", + "Buse", + "Bucy", + "Buckwalter", + "Bubb", + "Bryd", + "Brissette", + "Brault", + "Bradwell", + "Boshears", + "Borchert", + "Blansett", + "Blanch", + "Blade", + "Biondo", + "Bilbo", + "Biehl", + "Bessey", + "Berta", + "Belles", + "Bella", + "Beeks", + "Beekman", + "Beaufort", + "Bayliss", + "Bardsley", + "Avilla", + "Astudillo", + "Ardito", + "Anwar", + "Antunez", + "Amen", + "Aderholt", + "Abate", + "Yowell", + "Yin", + "Yearby", + "Ye", + "Wurst", + "Woolverton", + "Woolbright", + "Wildermuth", + "Whittenburg", + "Whitely", + "Wetter", + "Wetherbee", + "Wenz", + "Welliver", + "Welling", + "Welcome", + "Wason", + "Warrior", + "Warlick", + "Voorhies", + "Vivier", + "Villines", + "Vida", + "Verde", + "Veiga", + "Varghese", + "Vanwyk", + "Vanwingerden", + "Vanhorne", + "Umstead", + "Twiggs", + "Tusing", + "Trego", + "Tompson", + "Tinkle", + "Thoman", + "Thole", + "Tatman", + "Tartt", + "Suda", + "Studley", + "Strock", + "Strawbridge", + "Stokely", + "Stec", + "Stang", + "Stalter", + "Speidel", + "Spafford", + "Spade", + "Sontag", + "Sokolowski", + "Skillman", + "Skelley", + "Skalski", + "Sison", + "Sippel", + "Sinquefield", + "Sin", + "Siegle", + "Sher", + "Sharrow", + "Setliff", + "Sera", + "Sellner", + "Selig", + "Seibold", + "Seery", + "Scriber", + "Schull", + "Schrupp", + "Schippers", + "Say", + "Saulsbury", + "Sao", + "Santillo", + "Sanor", + "Sancho", + "Rufus", + "Rubalcaba", + "Roosa", + "Ronk", + "Robbs", + "Roache", + "River", + "Riebe", + "Reinoso", + "Quin", + "Prude", + "Preuss", + "Pottorff", + "Pontiff", + "Plouffe", + "Picou", + "Picklesimer", + "Pettyjohn", + "Petti", + "Penaloza", + "Parmelee", + "Pardee", + "Palazzo", + "Overholt", + "Ogawa", + "Ofarrell", + "Nova", + "Nolting", + "Noda", + "Nicola", + "Nickson", + "Nevitt", + "Neveu", + "Navarre", + "Nam", + "Murrow", + "Munz", + "Mulloy", + "Monzo", + "Milliman", + "Metivier", + "Merlino", + "Mcpeters", + "Mckissack", + "Mckeen", + "Mcgurk", + "Mcfee", + "Mcfarren", + "Mcelwee", + "Mceachin", + "Mcdonagh", + "Mccarville", + "Mayhall", + "Mattoon", + "Martello", + "Marconi", + "Marbury", + "Mao", + "Manzella", + "Maly", + "Malec", + "Maitland", + "Maheu", + "Maclennan", + "Lyke", + "Luera", + "Loyola", + "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", + "Kilroy", + "Kenna", + "Keisler", + "Keeble", + "Keaney", + "Kale", + "Joly", + "Jimison", + "Jeans", + "Ikner", + "Hursey", + "Hruska", + "Hove", + "Hou", + "Host", + "Hosking", + "Hoose", + "Holle", + "Hoeppner", + "Hittle", + "Hitchens", + "Hirth", + "Hinerman", + "Hilario", + "Higby", + "Hertzog", + "Hentz", + "Hensler", + "Heist", + "Heier", + "Hegg", + "Hassel", + "Harpe", + "Hara", + "Hank", + "Hain", + "Hagopian", + "Grimshaw", + "Grado", + "Gowin", + "Gowans", + "Googe", + "Goodlow", + "Goering", + "Gleaton", + "Gidley", + "Giannone", + "Gascon", + "Garneau", + "Gambrel", + "Galaz", + "Fuentez", + "Frisina", + "Fresquez", + "Fraher", + "Fitting", + "Feuerstein", + "Felten", + "Everman", + "Estell", + "Ertel", + "Erazo", + "Ensign", + "Endo", + "Ellerman", + "Eichorn", + "Edgell", + "Ebron", + "Eaker", + "Dundas", + "Duncanson", + "Duchene", + "Ducan", + "Dombroski", + "Doman", + "Dock", + "Dickison", + "Dewoody", + "Deloera", + "Delahoussaye", + "Dejean", + "Degroat", + "Decaro", + "Dearmond", + "Dashner", + "Dales", + "Crossett", + "Cressey", + "Cowger", + "Courts", + "Court", + "Cornette", + "Corbo", + "Coplin", + "Coover", + "Condie", + "Cokley", + "Cicero", + "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", + "Zang", + "Zambrana", + "Ybanez", + "Yagi", + "Wolak", + "Wilcoxson", + "Whitesel", + "Whitehair", + "Weyand", + "Oesteendorf", + "Welke", + "Weinmann", + "Wei", + "Weesner", + "Weekes", + "Wedel", + "Wedding", + "Weatherall", + "Warthen", + "Vose", + "Villalta", + "Vila", + "Viator", + "Vaz", + "Valtierra", + "Urbanek", + "Tulley", + "Trojanowski", + "Trapani", + "Toups", + "Torpey", + "Tomita", + "Tindal", + "Tieman", + "Tevis", + "Tedrow", + "Taul", + "Tash", + "Tammaro", + "Sylva", + "Swiderski", + "Sweeting", + "Sund", + "Stutler", + "Stocking", + "Stich", + "Sterns", + "Stegner", + "Stalder", + "Splawn", + "Speirs", + "Southwell", + "Soltys", + "Smead", + "Slye", + "Skipworth", + "Sipos", + "Simmerman", + "Sigmund", + "Sidhu", + "Shuffler", + "Shingleton", + "Shadwick", + "Sermons", + "Seefeldt", + "Scipio", + "Schwanke", + "Schreffler", + "Schiro", + "Scheiber", + "Sandoz", + "Samsel", + "Ruddell", + "Royse", + "Rouillard", + "Rotella", + "Rosalez", + "Romriell", + "Rommel", + "Rizer", + "Riner", + "Rickards", + "Rhoton", + "Rhem", + "Reppert", + "Rayl", + "Raulston", + "Raposo", + "Rapier", + "Rainville", + "Radel", + "Quinney", + "Purdie", + "Puffer", + "Pizzo", + "Pincus", + "Petrus", + "Pendelton", + "Pendarvis", + "Peltz", + "Peguero", + "Peete", + "Patricio", + "Patchett", + "Parrino", + "Papke", + "Pam", + "Palafox", + "Ottley", + "Ostby", + "Oritz", + "Oren", + "Ogan", + "Odegaard", + "Oatman", + "Noell", + "Nida", + "Nicoll", + "Newhall", + "Newbill", + "Netzer", + "Nettleton", + "Neblett", + "Murley", + "Mungo", + "Mulhall", + "Mosca", + "Morissette", + "Morford", + "Montag", + "Monsen", + "Mitzel", + "Miskell", + "Minder", + "Mehaffey", + "Mcquillen", + "Mclennan", + "Mcgrail", + "Mccreight", + "Mayville", + "Maysonet", + "Maust", + "Mathieson", + "Mastrangelo", + "Maskell", + "Martina", + "Manz", + "Malmberg", + "Makela", + "Madruga", + "Luz", + "Lotts", + "Longnecker", + "Logston", + "Littell", + "Liska", + "Lindauer", + "Lillibridge", + "Levron", + "Letchworth", + "Lesh", + "Leffel", + "Leday", + "Leamon", + "Laura", + "Kulas", + "Kula", + "Kucharski", + "Kromer", + "Kraatz", + "Konieczny", + "Konen", + "Komar", + "Kivett", + "Kirts", + "Kinnear", + "Kersh", + "Keithley", + "Keifer", + "Judah", + "Jimenes", + "Jeppesen", + "Jasmin", + "Jansson", + "Huntsberry", + "Hund", + "Huitt", + "Huffine", + "Hosford", + "Hopes", + "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", + "Even", + "Etzel", + "Elzey", + "Eichner", + "Eger", + "Eatman", + "Ducker", + "Duchesne", + "Donati", + "Domenech", + "Dollard", + "Dodrill", + "Dinapoli", + "Denn", + "Delfino", + "Delcid", + "Delaune", + "Delatte", + "Deems", + "Daluz", + "Cusson", + "Cullison", + "Cue", + "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", + "Burner", + "Brunton", + "Bruch", + "Broxton", + "Brosius", + "Brooking", + "Branco", + "Bracco", + "Bourgault", + "Bosserman", + "Books", + "Bonet", + "Bolds", + "Bolander", + "Bohman", + "Boelter", + "Blohm", + "Blea", + "Blaise", + "Bischof", + "Billie", + "Beus", + "Bellew", + "Bastarache", + "Bast", + "Bartolome", + "Bark", + "Barcomb", + "Barco", + "Balls", + "Balk", + "Balas", + "Bakos", + "Avey", + "Atnip", + "Ashbrook", + "Arno", + "Arbour", + "Aquirre", + "Appell", + "Aldaco", + "Alcazar", + "Alban", + "Ahlstrom", + "Abadie", + "Zylstra", + "Zick", + "Zheng", + "Yother", + "Wyse", + "Wunsch", + "Whitty", + "Weist", + "Vrooman", + "Vine", + "Villalon", + "Vidrio", + "Vavra", + "Vasbinder", + "Vanmatre", + "Vandorn", + "Ugarte", + "Turberville", + "Tuel", + "Trogdon", + "Town", + "Toupin", + "Toone", + "Tolleson", + "Tinkham", + "Tinch", + "Tiano", + "Teston", + "Teer", + "Tea", + "Tawney", + "Taplin", + "Tant", + "Tansey", + "Swayne", + "Sutcliffe", + "Sunderman", + "Suits", + "Strothers", + "Stromain", + "Stork", + "Stoneburner", + "Stolte", + "Stolp", + "Stoehr", + "Stingley", + "Stegman", + "Stangl", + "Spinella", + "Spier", + "Soules", + "Sommerfield", + "Sipp", + "Simek", + "Siders", + "Shufelt", + "Shue", + "Shor", + "Shires", + "Shellenberger", + "Sheely", + "Service", + "Sepe", + "Seaberg", + "Schwing", + "Scherrer", + "Scalzo", + "Saver", + "Sasse", + "Sarvis", + "Santora", + "Sansbury", + "Salls", + "Saleem", + "Ryland", + "Rybicki", + "Ruggieri", + "Rothenberg", + "Rosenstein", + "Roquemore", + "Rollison", + "Rodden", + "Rivet", + "Rita", + "Ridlon", + "Riche", + "Riccardi", + "Reiley", + "Regner", + "Rech", + "Rayo", + "Rawley", + "Ranger", + "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", + "Mo", + "Minjares", + "Minix", + "Mingle", + "Minchew", + "Mill", + "Milewski", + "Mikkelson", + "Mifflin", + "Messing", + "Merkley", + "Meis", + "Meas", + "Mcroy", + "Mcphearson", + "Mcneel", + "Mcmunn", + "Mcmorrow", + "Mcdorman", + "Mccroskey", + "Mccoll", + "Mcclusky", + "Mcclaran", + "Mccampbell", + "Mazzariello", + "Mauzy", + "Mauch", + "Mastro", + "Martinek", + "Marsala", + "Marcantel", + "Mahle", + "Lyda", + "Lucius", + "Luciani", + "Lubbers", + "Louder", + "Lobel", + "Linsey", + "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", + "Janelle", + "Jacobus", + "Iler", + "Holgate", + "Hoar", + "Hisey", + "Hird", + "Hilyard", + "Heslin", + "Herzberg", + "Hennigan", + "Hegland", + "Hartl", + "Haner", + "Handel", + "Gualtieri", + "Greenly", + "Grasser", + "Gran", + "Goetsch", + "Godbold", + "Gilland", + "Gidney", + "Gibney", + "Giancola", + "Gettinger", + "Garzon", + "Garret", + "Galle", + "Galgano", + "Gaier", + "Gaertner", + "Fuston", + "Freel", + "Fortes", + "Flock", + "Fiorillo", + "Figgs", + "Fenstermacher", + "Fedler", + "Facer", + "Fabiano", + "Evins", + "Eusebio", + "Euler", + "Esquer", + "Enyeart", + "Elem", + "Eisenhower", + "Eich", + "Edgerly", + "Durocher", + "Durgan", + "Duffin", + "Drolet", + "Drewes", + "Dotts", + "Dossantos", + "Dolly", + "Dockins", + "Dirksen", + "Difiore", + "Dierks", + "Dickerman", + "Dice", + "Dery", + "Denault", + "Demaree", + "Delmonte", + "Delcambre", + "Days", + "Daulton", + "Darst", + "Dahle", + "Curnutt", + "Cully", + "Culligan", + "Cueva", + "Crosslin", + "Croskey", + "Cromartie", + "Crofts", + "Covin", + "Coutee", + "Countess", + "Cost", + "Coppa", + "Coogan", + "Condrey", + "Concannon", + "Coger", + "Cloer", + "Clatterbuck", + "Cieslak", + "Chumbley", + "Choudhury", + "Chiaramonte", + "Charboneau", + "Chai", + "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", + "Wolfram", + "Witherell", + "Wisneski", + "Whitby", + "Whelchel", + "Weisz", + "Weisinger", + "Weishaar", + "Wehr", + "Wedge", + "Waxman", + "Waldschmidt", + "Walck", + "Waggener", + "Vosburg", + "Vita", + "Villela", + "Vercher", + "Venters", + "Vanscyoc", + "Vandyne", + "Valenza", + "Utt", + "Urick", + "Ungar", + "Ulm", + "Tumlin", + "Tsao", + "Tryon", + "Trudel", + "Treiber", + "Tow", + "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", + "Sherron", + "Shepler", + "Sharpless", + "Shadrick", + "Severt", + "Severs", + "Semon", + "Semmes", + "Seiter", + "Segers", + "Sclafani", + "Sciortino", + "Schroyer", + "Schrack", + "Schoenberg", + "Schober", + "Scheidt", + "Scheele", + "Satter", + "Sartori", + "Sarris", + "Sarratt", + "Salvaggio", + "Saladino", + "Sakamoto", + "Saine", + "Ryman", + "Rumley", + "Ruggerio", + "Rucks", + "Roughton", + "Room", + "Robards", + "Ricca", + "Rexroad", + "Resler", + "Reny", + "Rentschler", + "Redrick", + "Redick", + "Reagle", + "Raymo", + "Rape", + "Raker", + "Racette", + "Pyburn", + "Pritt", + "Presson", + "Pressman", + "Pough", + "Plain", + "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", + "Mart", + "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", + "Labrador", + "Labounty", + "Lablanc", + "Laberge", + "Kyte", + "Kroon", + "Kron", + "Kraker", + "Kouba", + "Kirwin", + "Kincer", + "Kimbler", + "Kegler", + "Keach", + "Katzman", + "Katzer", + "Kalman", + "Journey", + "Jimmerson", + "Jenning", + "Janus", + "Iacovelli", + "Hust", + "Huson", + "Husby", + "Humphery", + "Hufnagel", + "Honig", + "Holsey", + "Holoman", + "Hohl", + "Hogge", + "Hinderliter", + "Hildebrant", + "Hick", + "Hey", + "Hemby", + "Helle", + "Heintzelman", + "Heidrick", + "Hearon", + "Heap", + "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", + "Feng", + "Fells", + "Feemster", + "Fauntleroy", + "Fails", + "Evatt", + "Espy", + "Eno", + "Emmerich", + "Edwin", + "Edler", + "Esteham", + "Dunavant", + "Duca", + "Drinnon", + "Dowe", + "Dorgan", + "Dollinger", + "Divers", + "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", + "Colorado", + "Clyne", + "Clayson", + "Cearley", + "Catania", + "Carini", + "Cargo", + "Cantero", + "Cali", + "Buttrey", + "Buttler", + "Burpee", + "Bulkley", + "Buitron", + "Buda", + "Bublitz", + "Bryer", + "Bryden", + "Brouillette", + "Brott", + "Brookman", + "Bronk", + "Breshears", + "Brennen", + "Brannum", + "Brandl", + "Braman", + "Bracewell", + "Boyter", + "Bomberger", + "Bold", + "Bogen", + "Boeding", + "Bob", + "Blauvelt", + "Blandford", + "Bigger", + "Biermann", + "Bielecki", + "Bibby", + "Berthold", + "Berkman", + "Belvin", + "Bellomy", + "Beland", + "Behne", + "Beecham", + "Becher", + "Beams", + "Bax", + "Bassham", + "Barret", + "Baley", + "Bacchus", + "Auxier", + "Atkison", + "Ary", + "Arocha", + "Arechiga", + "Anspach", + "An", + "Algarin", + "Alcott", + "Alberty", + "Ager", + "Adolph", + "Ackman", + "Abdul", + "Abdallah", + "Zwick", + "Ziemer", + "Zastrow", + "Zajicek", + "Yokum", + "Yokley", + "Wittrock", + "Winebarger", + "Wilker", + "Wilham", + "Whitham", + "Wetzler", + "Oesteling", + "Oestebury", + "Wendler", + "Wellborn", + "Weitzman", + "Weitz", + "Weight", + "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", + "Shiner", + "Sheen", + "Sheckler", + "Seim", + "Secrist", + "Scoggin", + "Schultheis", + "Schmalz", + "Schendel", + "Schacher", + "Savard", + "Saulter", + "Santillanes", + "Sandiford", + "Sande", + "Salzer", + "Salvato", + "Saltz", + "Sakai", + "Ryckman", + "Ryant", + "Ruck", + "Ronald", + "Rocker", + "Rittenberry", + "Ristau", + "Risk", + "Richart", + "Rhynes", + "Reyer", + "Reulet", + "Reser", + "Redington", + "Reddington", + "Rebello", + "Reasor", + "Raftery", + "Rabago", + "Raasch", + "Quintanar", + "Pylant", + "Purington", + "Provencal", + "Prom", + "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", + "Ned", + "Nanney", + "Myrie", + "Mutch", + "Motto", + "Mosquera", + "Morena", + "Montalto", + "Montagna", + "Mizelle", + "Mincy", + "Millikan", + "Millay", + "Miler", + "Milbourn", + "Mikels", + "Migues", + "Miesner", + "Mershon", + "Merrow", + "Merlin", + "Melia", + "Meigs", + "Mealey", + "Mcraney", + "Mcmartin", + "Mclachlan", + "Mcgeehan", + "Mcferren", + "Mcdole", + "Mccaulley", + "Mcanulty", + "Maziarz", + "Maul", + "Mateer", + "Martinsen", + "Marson", + "Mariotti", + "Manna", + "Mang", + "Mance", + "Malbon", + "Mah", + "Magnusson", + "Maclachlan", + "Macek", + "Lurie", + "Luc", + "Lown", + "Loranger", + "Lonon", + "Lisenby", + "Linsley", + "Linger", + "Lenk", + "Leavens", + "Learned", + "Lauritzen", + "Lathem", + "Lashbrook", + "Landman", + "Lamarche", + "Lamantia", + "Laguerre", + "Lagrange", + "Kogan", + "Klingbeil", + "Kist", + "Kimpel", + "Kime", + "Kier", + "Kerfoot", + "Kennamer", + "Kellems", + "Kammer", + "Kamen", + "Jess", + "Jepsen", + "Jarnigan", + "Isler", + "Ishee", + "Isabel", + "Hux", + "Hungate", + "Hummell", + "Hultgren", + "Huffaker", + "Hruby", + "Hover", + "Hornick", + "Hooser", + "Hooley", + "Hoggan", + "Hirano", + "Hilley", + "Higham", + "Heuser", + "Henrickson", + "Henegar", + "Hellwig", + "Heide", + "Hedley", + "Hasegawa", + "Hartt", + "Hambright", + "Halfacre", + "Hafley", + "Guion", + "Guinan", + "Grunwald", + "Grothe", + "Gries", + "Greaney", + "Granda", + "Grabill", + "Gothard", + "Gossman", + "Gosser", + "Gossard", + "Gosha", + "Goldner", + "Gobin", + "Gloss", + "Ginyard", + "Gilkes", + "Gilden", + "Gerson", + "Gephart", + "Gengler", + "Gautier", + "Gassett", + "Garon", + "Gandhi", + "Galusha", + "Gallager", + "Galdamez", + "Fulmore", + "Fritsche", + "Fowles", + "Foutch", + "Forward", + "Footman", + "Fludd", + "Flakes", + "Ferriera", + "Ferrero", + "Ferreri", + "Fenimore", + "Fegley", + "Fegan", + "Fearn", + "Farrier", + "Fansler", + "Fane", + "Falzone", + "Fairweather", + "Etherton", + "Elsberry", + "Dykema", + "Duppstadt", + "Dunnam", + "Dunklin", + "Duet", + "Due", + "Dudgeon", + "Dubuc", + "Doxey", + "Dory", + "Donmoyer", + "Dodgen", + "Disanto", + "Dingler", + "Dimattia", + "Dilday", + "Digennaro", + "Diedrich", + "Derossett", + "Deputy", + "Depp", + "Demasi", + "Degraffenreid", + "Deakins", + "Deady", + "Davin", + "Daigre", + "Daddario", + "Czerwinski", + "Cullens", + "Cubbage", + "Cracraft", + "Constance", + "Comes", + "Combest", + "Coletti", + "Coghill", + "Clerk", + "Claybrooks", + "Class", + "Christofferse", + "Chiesa", + "Chason", + "Chamorro", + "Cessna", + "Celentano", + "Cayer", + "Carolan", + "Carnegie", + "Capetillo", + "Callier", + "Cadogan", + "Caba", + "Byrom", + "Byrns", + "Burrowes", + "Burket", + "Burdge", + "Burbage", + "Bukowski", + "Buchholtz", + "Brunt", + "Brungardt", + "Brunetti", + "Brumbelow", + "Brugger", + "Broadhurst", + "Brigance", + "Brandow", + "Bouknight", + "Bottorff", + "Bottomley", + "Bosarge", + "Borger", + "Bona", + "Bombardier", + "Bologna", + "Boggan", + "Blumer", + "Blecha", + "Birney", + "Birkland", + "Betances", + "Beran", + "Benny", + "Benes", + "Belin", + "Belgrave", + "Bealer", + "Bauch", + "Bath", + "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", + "Won", + "Wittig", + "Witman", + "Winsett", + "Winkles", + "Wiedman", + "Whitner", + "Whitcher", + "Wetherby", + "Oestera", + "Oestehoff", + "Wehrle", + "Wee", + "Wagaman", + "Voris", + "Vicknair", + "Vegas", + "Veasley", + "Vaugh", + "Vanish", + "Vanderburg", + "Valletta", + "Tunney", + "Trumbo", + "Truluck", + "Trueman", + "Truby", + "Trombly", + "Trojan", + "Tourville", + "Tostado", + "Tone", + "Titcomb", + "Timpson", + "Tignor", + "Thrush", + "Thresher", + "Thiede", + "Tews", + "Tamplin", + "Taff", + "Tacker", + "Syverson", + "Sylvestre", + "Summerall", + "Stumbaugh", + "Strouth", + "Straker", + "Stradford", + "Stoney", + "Stokley", + "Steinhoff", + "Steinberger", + "Stairs", + "Spigner", + "Soltero", + "Snively", + "Sletten", + "Sinkler", + "Sinegal", + "Simoes", + "Siller", + "Sigel", + "Shoe", + "Shire", + "Shinkle", + "Shellman", + "Sheller", + "Sheats", + "Sharer", + "Selvage", + "Sedlak", + "Sea", + "Schriver", + "Schimke", + "Scheuerman", + "Schanz", + "Savory", + "Saulters", + "Sauers", + "Sais", + "Rusin", + "Rumfelt", + "Ruhland", + "Rozar", + "Rosborough", + "Ronning", + "Rolph", + "Roloff", + "Rogue", + "Robie", + "Riviera", + "Rimer", + "Riehle", + "Ricco", + "Rhein", + "Retzlaff", + "Reisman", + "Reimann", + "Re", + "Rayes", + "Raub", + "Raminez", + "Quesinberry", + "Pua", + "Procopio", + "Priolo", + "Printz", + "Prewett", + "Preas", + "Prahl", + "Portugal", + "Poovey", + "Ploof", + "Platz", + "Plaisted", + "Pinzon", + "Pineiro", + "Pickney", + "Petrovich", + "Perl", + "Pehrson", + "Peets", + "Pavon", + "Pautz", + "Pascarella", + "Paras", + "Paolini", + "Pals", + "Pafford", + "Oyer", + "Ovellette", + "Outten", + "Outen", + "Ours", + "Orduna", + "Odriscoll", + "Oberlin", + "Nosal", + "Niven", + "Nisbett", + "Nevers", + "Nathanson", + "Mule", + "Mukai", + "Mozee", + "Mowers", + "Motyka", + "Morency", + "Montford", + "Mollica", + "Molden", + "Mitten", + "Miser", + "Mina", + "Millender", + "Midgette", + "Messerly", + "Melendy", + "Meisel", + "Meidinger", + "Meany", + "Mcnitt", + "Mcnemar", + "Mcmakin", + "Mcgaugh", + "Mccaa", + "Mauriello", + "Maudlin", + "Matzke", + "Mattia", + "Matteo", + "Matsumura", + "Masuda", + "Mangels", + "Maloof", + "Malizia", + "Mahmoud", + "Maglione", + "Maddix", + "Lucchesi", + "Lochner", + "Linquist", + "Lino", + "Lietz", + "Leventhal", + "Leopard", + "Lemanski", + "Leiser", + "Laury", + "Lauber", + "Lamberth", + "Kuss", + "Kung", + "Kulik", + "Kuiper", + "Krout", + "Kotter", + "Kort", + "Kohlmeier", + "Koffler", + "Koeller", + "Knipe", + "Knauss", + "Kleiber", + "Kissee", + "Kirst", + "Kirch", + "Kilgo", + "Kerlin", + "Kellison", + "Kehl", + "Kalb", + "Jorden", + "Jantzen", + "Jamar", + "Inabinet", + "Ikard", + "Husman", + "Hunsberger", + "Hundt", + "Hucks", + "Houtz", + "Houseknecht", + "Hoots", + "Hogsett", + "Hogans", + "Hintze", + "Hession", + "Henault", + "Hemming", + "Helsley", + "Heinen", + "Heffington", + "Heberling", + "Heasley", + "Heal", + "Hazley", + "Hazeltine", + "Hayton", + "Hayse", + "Hawke", + "Haston", + "Harward", + "Harvard", + "Harrow", + "Hanneman", + "Hafford", + "Hadnot", + "Guerro", + "Graig", + "Grahm", + "Gowins", + "Gordillo", + "Goosby", + "Glatt", + "Gibbens", + "Ghent", + "Gerrard", + "Germann", + "Geil", + "Gebo", + "Gean", + "Garling", + "Gardenhire", + "Garbutt", + "Gagner", + "Furguson", + "Funchess", + "Fujiwara", + "Fujita", + "Friley", + "Frigo", + "Forshee", + "Folkes", + "Filler", + "Fernald", + "Ferber", + "Feingold", + "Favorite", + "Faul", + "Farrelly", + "Fairbank", + "Failla", + "Estelle", + "Espey", + "Eshleman", + "Ertl", + "Erhart", + "Erhardt", + "Erbe", + "Elsea", + "Ells", + "Ellman", + "Eisenhart", + "Ehmann", + "Earnhardt", + "Duplantis", + "Dulac", + "Ducote", + "Draves", + "Dosch", + "Dolce", + "Divito", + "Ditch", + "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", + "Cassette", + "Cashin", + "Carstensen", + "Carol", + "Caprio", + "Calcote", + "Calaway", + "Byfield", + "Butner", + "Bushway", + "Burritt", + "Browner", + "Brobst", + "Briner", + "Brighton", + "Bridger", + "Brickley", + "Brendel", + "Bratten", + "Bratt", + "Brainerd", + "Brackman", + "Bowne", + "Bouck", + "Borunda", + "Bordner", + "Bonenfant", + "Boer", + "Boehmer", + "Bodiford", + "Bleau", + "Blankinship", + "Blane", + "Blaha", + "Bitting", + "Bissonette", + "Bigby", + "Bibeau", + "Beverage", + "Bermudes", + "Berke", + "Bergevin", + "Bergerson", + "Bendel", + "Belville", + "Bechard", + "Bearce", + "Beadles", + "Batz", + "Bartlow", + "Barren", + "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", + "Whistler", + "Wayt", + "Watley", + "Wasser", + "Warkentin", + "Voll", + "Vogelsang", + "Voegele", + "Vivanco", + "Vinton", + "Villafane", + "Viles", + "Versace", + "Ver", + "Venne", + "Vanwagoner", + "Vanwagenen", + "Vanleuven", + "Vanauken", + "Uselton", + "Uren", + "Trumbauer", + "Tritt", + "Treadaway", + "Tozier", + "Tope", + "Tomczak", + "Tomberlin", + "Tomasini", + "Tollett", + "Toller", + "Titsworth", + "Tirrell", + "Tilly", + "Tavera", + "Tarnowski", + "Tanouye", + "Tall", + "Swarthout", + "Sutera", + "Surette", + "Styers", + "Styer", + "Stipe", + "Stickland", + "Steve", + "Stembridge", + "Stearn", + "Starkes", + "Stanberry", + "Stahr", + "Spino", + "Spicher", + "Sperber", + "Speece", + "Soo", + "Sonntag", + "Sneller", + "Smalling", + "Slowik", + "Slocumb", + "Sliva", + "Slemp", + "Slama", + "Sitz", + "Sisto", + "Sisemore", + "Sindelar", + "Shipton", + "Shillings", + "Sheeley", + "Sharber", + "Shaddix", + "Severns", + "Severino", + "Sever", + "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", + "Reade", + "Rast", + "Ranallo", + "Rana", + "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", + "Opp", + "Olivar", + "Ohlson", + "Odonoghue", + "Oceguera", + "Oberry", + "Novello", + "Noguera", + "Newquist", + "Newcombe", + "Neihoff", + "Nehring", + "Nees", + "Nebeker", + "Nau", + "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", + "Latch", + "Larrick", + "Lantigua", + "Langlinais", + "Lalli", + "Lafever", + "Labat", + "Labadie", + "Kurt", + "Krogman", + "Kohut", + "Knarr", + "Klimas", + "Klar", + "Kittelson", + "Kirschbaum", + "Kintzel", + "Kincannon", + "Kimmell", + "Killgore", + "Kettner", + "Kelsch", + "Karle", + "Kapoor", + "Johansson", + "Jock", + "Jenkinson", + "Janney", + "Isabelle", + "Iraheta", + "Insley", + "Hyslop", + "Hy", + "Human", + "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", + "Goo", + "Gomer", + "Golla", + "Godby", + "Glanz", + "Glancy", + "Givan", + "Giesen", + "Gerst", + "Gayman", + "Garraway", + "Gabor", + "Furness", + "Frisk", + "Fremont", + "Frary", + "Forand", + "Fessenden", + "Ferrigno", + "Fearon", + "Favreau", + "Faulks", + "Falbo", + "Ewen", + "Everton", + "Eurich", + "Etchison", + "Esterly", + "Entwistle", + "Ellingsworth", + "Elders", + "Ek", + "Eisenbarth", + "Edelson", + "Eckel", + "Earnshaw", + "Dunneback", + "Doyal", + "Donnellan", + "Dolin", + "Dibiase", + "Deschenes", + "Dermody", + "Denmark", + "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", + "Cola", + "Cohee", + "Claire", + "Ciotti", + "Chill", + "Chien", + "Check", + "Chacko", + "Cevallos", + "Cavitt", + "Cavins", + "Castagna", + "Cashwell", + "Carrozza", + "Carrara", + "Capra", + "Campas", + "Callas", + "Caison", + "Cai", + "Caggiano", + "Cabot", + "Bynoe", + "Buswell", + "Burpo", + "Burnam", + "Burges", + "Buerger", + "Buelow", + "Bueche", + "Buckle", + "Bruni", + "Brummitt", + "Brodersen", + "Briese", + "Breit", + "Brakebill", + "Braatz", + "Boyers", + "Boughner", + "Borror", + "Borquez", + "Bonelli", + "Bohner", + "Blaze", + "Blaker", + "Blackmer", + "Bissette", + "Bibbins", + "Bhatt", + "Bhatia", + "Bessler", + "Bergh", + "Beresford", + "Bensen", + "Benningfield", + "Benito", + "Bellantoni", + "Behler", + "Beehler", + "Beazley", + "Beauchesne", + "Bargo", + "Bannerman", + "Baltes", + "Balog", + "Ballantyne", + "Bad", + "Axelson", + "Apgar", + "Aoki", + "Anstett", + "Alejos", + "Alcocer", + "Albury", + "Aichele", + "Ahl", + "Ackles", + "Zerangue", + "Zehner", + "Zank", + "Zacarias", + "Youngberg", + "Yorke", + "Yarbro", + "Xie", + "Wydra", + "Worthley", + "Wolbert", + "Wittmer", + "Witherington", + "Wishart", + "Wire", + "Winnie", + "Winkleman", + "Willilams", + "Willer", + "Wiedeman", + "Whittingham", + "Whitbeck", + "Whetsel", + "Wheless", + "Oesteerberg", + "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", + "Tay", + "Swoope", + "Sunseri", + "Stutes", + "Stthomas", + "Strohm", + "Stroble", + "Striegel", + "Streicher", + "Stodola", + "Stinchcomb", + "Steves", + "Steppe", + "Stem", + "Steller", + "Staudt", + "Starner", + "Stamant", + "Stam", + "Stackpole", + "Sprankle", + "Speciale", + "Spahr", + "Sowders", + "Sova", + "Soluri", + "Soderlund", + "Slinkard", + "Skates", + "Sjogren", + "Sirianni", + "Siewert", + "Sickels", + "Sica", + "Shugart", + "Shoults", + "Shive", + "Shimer", + "Shier", + "Shield", + "Shepley", + "Sheeran", + "Sharper", + "Sevin", + "Severe", + "Seto", + "Segundo", + "Sedlacek", + "Scuderi", + "Schurman", + "Schuelke", + "Scholten", + "Schlater", + "Schisler", + "Schiefelbein", + "Schalk", + "Sanon", + "Sae", + "Sabala", + "Ruyle", + "Ruybal", + "Ruf", + "Rueb", + "Rowsey", + "Rosol", + "Rocheleau", + "Rishel", + "Rippey", + "Ringgold", + "Rieves", + "Ridinger", + "Rew", + "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", + "Overly", + "Ouimet", + "Ottman", + "Otter", + "Ostlund", + "Ormiston", + "Occhipinti", + "Nowacki", + "Norred", + "Noack", + "Nishida", + "Nilles", + "Nicodemus", + "Neth", + "Nealey", + "Myricks", + "Murff", + "Mungia", + "Mullet", + "Motsinger", + "Moscato", + "Mort", + "Morado", + "Moors", + "Monnier", + "Molyneux", + "Modzelewski", + "Miura", + "Minich", + "Militello", + "Milbrandt", + "Michalik", + "Meserve", + "Merle", + "Mendivil", + "Melara", + "Meadow", + "Mcnish", + "Mcelhannon", + "Mccroy", + "Mccrady", + "Mazzella", + "Maule", + "Mattera", + "Mathena", + "Matas", + "Mass", + "Mascorro", + "Marone", + "Marinello", + "Marguez", + "Marcell", + "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", + "Lando", + "Lamphear", + "Lamberton", + "Lafon", + "Lade", + "Lacross", + "Kyzer", + "Krok", + "Kring", + "Krell", + "Krehbiel", + "Kratochvil", + "Krach", + "Kovar", + "Kostka", + "Knudtson", + "Knaack", + "Kliebert", + "Klahn", + "Kirkley", + "Kimzey", + "Kettle", + "Kerrick", + "Kennerson", + "Keesler", + "Karlin", + "Kan", + "Jenny", + "Janousek", + "Jan", + "Imel", + "Icenhour", + "Hyler", + "Hunger", + "Hudock", + "Houpt", + "Hopping", + "Hoops", + "Holquin", + "Holiman", + "Holahan", + "Hodapp", + "Hires", + "Hillen", + "Hickmon", + "Hersom", + "Henrich", + "Helvey", + "Heidt", + "Heideman", + "Hedstrom", + "Hedin", + "Hebron", + "Hayter", + "Harn", + "Hardage", + "Harbor", + "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", + "Ferdinand", + "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", + "Dave", + "Danek", + "Dahmen", + "Curci", + "Cudjoe", + "Crumble", + "Croxton", + "Creasman", + "Craney", + "Crader", + "Cowling", + "Coulston", + "Cortina", + "Corlew", + "Corl", + "Copland", + "Convery", + "Cohrs", + "Clune", + "Clausing", + "Cipriani", + "Cinnamon", + "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", + "Blind", + "Bivona", + "Bitter", + "Billips", + "Bibler", + "Benfer", + "Benedetti", + "Belue", + "Bellanger", + "Belford", + "Behn", + "Beerman", + "Barnhardt", + "Baltzell", + "Balling", + "Balducci", + "Bainter", + "Babineau", + "Babich", + "Baade", + "Attwood", + "Asmus", + "Asaro", + "Artiaga", + "April", + "Applebaum", + "Ang", + "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", + "Wen", + "Weissinger", + "Weinman", + "Weingartner", + "Weidler", + "Waltrip", + "Walt", + "Wagar", + "Wafford", + "Vitagliano", + "Villalvazo", + "Villacorta", + "Vigna", + "Vickrey", + "Vicini", + "Ventimiglia", + "Vandenbosch", + "Valvo", + "Valazquez", + "Utsey", + "Urbaniak", + "Unzueta", + "Trombetta", + "Trevizo", + "Trembley", + "Tremaine", + "Traverso", + "Tores", + "Tolan", + "Tillison", + "Tietjen", + "Tee", + "Teachout", + "Taube", + "Tatham", + "Tarwater", + "Tarbell", + "Sydow", + "Sy", + "Swims", + "Swader", + "Striplin", + "Stops", + "Stoltenberg", + "Steinhauer", + "Steil", + "Steigerwald", + "Starkweather", + "Stallman", + "Squier", + "Sparacino", + "Span", + "Spadafora", + "Shiflet", + "Shibata", + "Shevlin", + "Sherrick", + "Shake", + "Sessums", + "Servais", + "Senters", + "Seevers", + "Seelye", + "Searfoss", + "Seabrooks", + "Scoles", + "Schwager", + "Schrom", + "Schmeltzer", + "Scheffel", + "Sax", + "Sawin", + "Saterfiel", + "Sardina", + "Sanroman", + "Sane", + "Sandin", + "Salamanca", + "Saladin", + "Sak", + "Sabia", + "Rustin", + "Rushin", + "Ruley", + "Rueter", + "Row", + "Rotter", + "Rosenzweig", + "Roles", + "Rohe", + "Roder", + "Rockey", + "Ro", + "Riter", + "Rieth", + "Ried", + "Riding", + "Riddles", + "Ridder", + "Rennick", + "Remmers", + "Remer", + "Relyea", + "Reilley", + "Reder", + "Rasheed", + "Rakowski", + "Rabin", + "Queener", + "Pursel", + "Prue", + "Prowell", + "Pritts", + "Primo", + "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", + "Officer", + "Obando", + "Noggle", + "Nicosia", + "Netto", + "Negrin", + "Natali", + "Nakayama", + "Nagao", + "Nadel", + "Musial", + "Murrill", + "Murrah", + "Munsch", + "Mucci", + "Mrozek", + "Moyes", + "Mowrer", + "Moris", + "Morais", + "Moorhouse", + "Monico", + "Mone", + "Mondy", + "Moncayo", + "Mole", + "Miltenberger", + "Milsap", + "Milone", + "Millikin", + "Milardo", + "Mika", + "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", + "Mae", + "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", + "Kidney", + "Kibby", + "Khang", + "Kettler", + "Ketterer", + "Kepner", + "Kelliher", + "Keenum", + "Kanode", + "Kail", + "July", + "Juhasz", + "Jowett", + "Jolicoeur", + "Jeon", + "Iser", + "Ingrassia", + "Imai", + "Hutchcraft", + "Humiston", + "Hulings", + "Hukill", + "Huizenga", + "Hugley", + "Huddle", + "Hose", + "Hornyak", + "Hodder", + "Hisle", + "Hillenbrand", + "Hille", + "Higuchi", + "Hertzler", + "Herdon", + "Heppner", + "Hepp", + "Heitmann", + "Heckart", + "Hazlewood", + "Hayles", + "Hayek", + "Hawthorn", + "Hawkin", + "Haugland", + "Hasler", + "Harbuck", + "Happel", + "Hambly", + "Hambleton", + "Hagaman", + "Guzzi", + "Gullette", + "Guinyard", + "Grogg", + "Grise", + "Griffing", + "Goto", + "Gosney", + "Goods", + "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", + "Factor", + "Eustice", + "Eppler", + "Engelman", + "Engelke", + "Emmer", + "Elzy", + "Ellwood", + "Ellerbee", + "Elks", + "Ehret", + "Ebbert", + "Durrah", + "Dupras", + "Dubuque", + "Dragoo", + "Donlon", + "Dolloff", + "Doi", + "Dibella", + "Derrico", + "Demko", + "Demar", + "Darrington", + "Czapla", + "Crooker", + "Creagh", + "Cranor", + "Craner", + "Crafts", + "Crabill", + "Coyer", + "Cowman", + "Cowherd", + "Cottone", + "Costillo", + "Coster", + "Costas", + "Cosenza", + "Corker", + "Collinson", + "Coello", + "Clingman", + "Clingerman", + "Claborn", + "Citizen", + "Chmura", + "Chausse", + "Chaudhry", + "Chapell", + "Chancy", + "Cerrone", + "Caves", + "Caverly", + "Caulkins", + "Carn", + "Campfield", + "Campanelli", + "Callaham", + "Cadorette", + "Butkovich", + "Buske", + "Burrier", + "Burkley", + "Bunyard", + "Budge", + "Buckelew", + "Buchheit", + "Broman", + "Brescia", + "Brasel", + "Brain", + "Boyster", + "Booe", + "Bonomo", + "Bonnet", + "Bondi", + "Bohnsack", + "Bobby", + "Blomberg", + "Blanford", + "Bilderback", + "Biggins", + "Bently", + "Behrends", + "Beegle", + "Bedoya", + "Bechtol", + "Beaubien", + "Bayerl", + "Baumgart", + "Baumeister", + "Barratt", + "Barlowe", + "Barkman", + "Barbagallo", + "Baldree", + "Baine", + "Bail", + "Baggs", + "Bacote", + "Aylward", + "Ashurst", + "Arvidson", + "Arthurs", + "Arrieta", + "Arrey", + "Arreguin", + "Arrant", + "Arner", + "Armor", + "Arizmendi", + "Anker", + "Amis", + "Amend", + "Alphin", + "Allbright", + "Aikin", + "Acres" + ); + +$sugar_demodata['first_name_array'] = array( + "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", + "Samantha", + "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", + "Willie", + "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", + "Terry", + "Maxine", + "Irma", + "Mabel", + "Marsha", + "Myrtle", + "Lena", + "Christy", + "Deanna", + "Patsy", + "Hilda", + "Gwendolyn", + "Jennie", + "Nora", + "Margie", + "Nina", + "Cassandra", + "Leah", + "Penny", + "Kay", + "Priscilla", + "Naomi", + "Carole", + "Brandy", + "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", + "Maggie", + "Kayla", + "Sonya", + "Jan", + "Lee", + "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", + "Hannah", + "Whitney", + "Bridget", + "Karla", + "Celia", + "Latoya", + "Patty", + "Shelia", + "Gayle", + "Della", + "Vicky", + "Lynne", + "Sheri", + "Marianne", + "Kara", + "Jacquelyn", + "Erma", + "Blanca", + "Myra", + "Leticia", + "Pat", + "Krista", + "Roxanne", + "Angelica", + "Johnnie", + "Robyn", + "Francis", + "Adrienne", + "Rosalie", + "Alexandra", + "Brooke", + "Bethany", + "Sadie", + "Bernadette", + "Traci", + "Jody", + "Kendra", + "Jasmine", + "Nichole", + "Rachael", + "Chelsea", + "Mable", + "Ernestine", + "Muriel", + "Marcella", + "Elena", + "Krystal", + "Angelina", + "Nadine", + "Kari", + "Estelle", + "Dianna", + "Paulette", + "Lora", + "Mona", + "Doreen", + "Rosemarie", + "Angel", + "Desiree", + "Antonia", + "Hope", + "Ginger", + "Janis", + "Betsy", + "Christie", + "Freda", + "Mercedes", + "Meredith", + "Lynette", + "Teri", + "Cristina", + "Eula", + "Leigh", + "Meghan", + "Sophia", + "Eloise", + "Rochelle", + "Gretchen", + "Cecelia", + "Raquel", + "Henrietta", + "Alyssa", + "Jana", + "Kelley", + "Gwen", + "Kerry", + "Jenna", + "Tricia", + "Laverne", + "Olive", + "Alexis", + "Tasha", + "Silvia", + "Elvira", + "Casey", + "Delia", + "Sophie", + "Kate", + "Patti", + "Lorena", + "Kellie", + "Sonja", + "Lila", + "Lana", + "Darla", + "May", + "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", + "Jaime", + "Winifred", + "Kristie", + "Marina", + "Alisha", + "Aimee", + "Rena", + "Myrna", + "Marla", + "Tammie", + "Latasha", + "Bonita", + "Patrice", + "Ronda", + "Sherrie", + "Addie", + "Francine", + "Deloris", + "Stacie", + "Adriana", + "Cheri", + "Shelby", + "Abigail", + "Celeste", + "Jewel", + "Cara", + "Adele", + "Rebekah", + "Lucinda", + "Dorthy", + "Chris", + "Effie", + "Trina", + "Reba", + "Shawn", + "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", + "Cassie", + "Maude", + "Jenifer", + "Therese", + "Frankie", + "Dena", + "Lorna", + "Janette", + "Latonya", + "Candy", + "Morgan", + "Consuelo", + "Tamika", + "Rosetta", + "Debora", + "Cherie", + "Polly", + "Dina", + "Jewell", + "Fay", + "Jillian", + "Dorothea", + "Nell", + "Trudy", + "Esperanza", + "Patrica", + "Kimberley", + "Shanna", + "Helena", + "Carolina", + "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", + "Robbie", + "Shauna", + "Millie", + "Claudette", + "Cathleen", + "Angelia", + "Gabrielle", + "Autumn", + "Katharine", + "Summer", + "Jodie", + "Staci", + "Lea", + "Christi", + "Jimmie", + "Justine", + "Elma", + "Luella", + "Margret", + "Dominique", + "Socorro", + "Rene", + "Martina", + "Margo", + "Mavis", + "Callie", + "Bobbi", + "Maritza", + "Lucile", + "Leanne", + "Jeannine", + "Deana", + "Aileen", + "Lorie", + "Ladonna", + "Willa", + "Manuela", + "Gale", + "Selma", + "Dolly", + "Sybil", + "Abby", + "Lara", + "Dale", + "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", + "Tommie", + "Esmeralda", + "Karina", + "Eve", + "Pearlie", + "Zelma", + "Malinda", + "Noreen", + "Tameka", + "Saundra", + "Hillary", + "Amie", + "Althea", + "Rosalinda", + "Jordan", + "Lilia", + "Alana", + "Gay", + "Clare", + "Alejandra", + "Elinor", + "Michael", + "Lorrie", + "Jerri", + "Darcy", + "Earnestine", + "Carmella", + "Taylor", + "Noemi", + "Marcie", + "Liza", + "Annabelle", + "Louisa", + "Earlene", + "Mallory", + "Carlene", + "Nita", + "Selena", + "Tanisha", + "Katy", + "Julianne", + "John", + "Lakisha", + "Edwina", + "Maricela", + "Margery", + "Kenya", + "Dollie", + "Roxie", + "Roslyn", + "Kathrine", + "Nanette", + "Charmaine", + "Lavonne", + "Ilene", + "Kris", + "Tammi", + "Suzette", + "Corine", + "Kaye", + "Jerry", + "Merle", + "Chrystal", + "Lina", + "Deanne", + "Lilian", + "Juliana", + "Aline", + "Luann", + "Kasey", + "Maryanne", + "Evangeline", + "Colette", + "Melva", + "Lawanda", + "Yesenia", + "Nadia", + "Madge", + "Kathie", + "Eddie", + "Ophelia", + "Valeria", + "Nona", + "Mitzi", + "Mari", + "Georgette", + "Claudine", + "Fran", + "Alissa", + "Roseann", + "Lakeisha", + "Susanna", + "Reva", + "Deidre", + "Chasity", + "Sheree", + "Carly", + "James", + "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", + "Young", + "Christian", + "Lessie", + "Amalia", + "Savannah", + "Anastasia", + "Vilma", + "Natalia", + "Rosella", + "Lynnette", + "Corina", + "Alfreda", + "Leanna", + "Carey", + "Amparo", + "Coleen", + "Tamra", + "Aisha", + "Wilda", + "Karyn", + "Cherry", + "Queen", + "Maura", + "Mai", + "Evangelina", + "Rosanna", + "Hallie", + "Erna", + "Enid", + "Mariana", + "Lacy", + "Juliet", + "Jacklyn", + "Freida", + "Madeleine", + "Mara", + "Hester", + "Cathryn", + "Lelia", + "Casandra", + "Bridgett", + "Angelita", + "Jannie", + "Dionne", + "Annmarie", + "Katina", + "Beryl", + "Phoebe", + "Millicent", + "Katheryn", + "Diann", + "Carissa", + "Maryellen", + "Liz", + "Lauri", + "Helga", + "Gilda", + "Adrian", + "Rhea", + "Marquita", + "Hollie", + "Tisha", + "Tamera", + "Angelique", + "Francesca", + "Britney", + "Kaitlin", + "Lolita", + "Florine", + "Rowena", + "Reyna", + "Twila", + "Fanny", + "Janell", + "Ines", + "Concetta", + "Bertie", + "Alba", + "Brigitte", + "Alyson", + "Vonda", + "Pansy", + "Elba", + "Noelle", + "Letitia", + "Kitty", + "Deann", + "Brandie", + "Louella", + "Leta", + "Felecia", + "Sharlene", + "Lesa", + "Beverley", + "Robert", + "Isabella", + "Herminia", + "Terra", + "Celina", + "Tori", + "Octavia", + "Jade", + "Denice", + "Germaine", + "Sierra", + "Michell", + "Cortney", + "Nelly", + "Doretha", + "Sydney", + "Deidra", + "Monika", + "Lashonda", + "Judi", + "Chelsey", + "Antionette", + "Margot", + "Bobby", + "Adelaide", + "Nan", + "Leeann", + "Elisha", + "Dessie", + "Libby", + "Kathi", + "Gayla", + "Latanya", + "Mina", + "Mellisa", + "Kimberlee", + "Jasmin", + "Renae", + "Zelda", + "Elda", + "Ma", + "Justina", + "Gussie", + "Emilie", + "Camilla", + "Abbie", + "Rocio", + "Kaitlyn", + "Jesse", + "Edythe", + "Ashleigh", + "Selina", + "Lakesha", + "Geri", + "Allene", + "Pamala", + "Michaela", + "Dayna", + "Caryn", + "Rosalia", + "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", + "Howard", + "Eugene", + "Carlos", + "Russell", + "Bobby", + "Victor", + "Martin", + "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", + "Allen", + "Marvin", + "Vincent", + "Glenn", + "Jeffery", + "Travis", + "Jeff", + "Chad", + "Jacob", + "Lee", + "Melvin", + "Alfred", + "Kyle", + "Francis", + "Bradley", + "Jesus", + "Herbert", + "Frederick", + "Ray", + "Joel", + "Edwin", + "Don", + "Eddie", + "Ricky", + "Troy", + "Randall", + "Barry", + "Alexander", + "Bernard", + "Mario", + "Leroy", + "Francisco", + "Marcus", + "Micheal", + "Theodore", + "Clifford", + "Miguel", + "Oscar", + "Jay", + "Jim", + "Tom", + "Calvin", + "Alex", + "Jon", + "Ronnie", + "Bill", + "Lloyd", + "Tommy", + "Leon", + "Derek", + "Warren", + "Darrell", + "Jerome", + "Floyd", + "Leo", + "Alvin", + "Tim", + "Wesley", + "Gordon", + "Dean", + "Greg", + "Jorge", + "Dustin", + "Pedro", + "Derrick", + "Dan", + "Lewis", + "Zachary", + "Corey", + "Herman", + "Maurice", + "Vernon", + "Roberto", + "Clyde", + "Glen", + "Hector", + "Shane", + "Ricardo", + "Sam", + "Rick", + "Lester", + "Brent", + "Ramon", + "Charlie", + "Tyler", + "Gilbert", + "Gene", + "Marc", + "Reginald", + "Ruben", + "Brett", + "Angel", + "Nathaniel", + "Rafael", + "Leslie", + "Edgar", + "Milton", + "Raul", + "Ben", + "Chester", + "Cecil", + "Duane", + "Franklin", + "Andre", + "Elmer", + "Brad", + "Gabriel", + "Ron", + "Mitchell", + "Roland", + "Arnold", + "Harvey", + "Jared", + "Adrian", + "Karl", + "Cory", + "Claude", + "Erik", + "Darryl", + "Jamie", + "Neil", + "Jessie", + "Christian", + "Javier", + "Fernando", + "Clinton", + "Ted", + "Mathew", + "Tyrone", + "Darren", + "Lonnie", + "Lance", + "Cody", + "Julio", + "Kelly", + "Kurt", + "Allan", + "Nelson", + "Guy", + "Clayton", + "Hugh", + "Max", + "Dwayne", + "Dwight", + "Armando", + "Felix", + "Jimmie", + "Everett", + "Jordan", + "Ian", + "Wallace", + "Ken", + "Bob", + "Jaime", + "Casey", + "Alfredo", + "Alberto", + "Dave", + "Ivan", + "Johnnie", + "Sidney", + "Byron", + "Julian", + "Isaac", + "Morris", + "Clifton", + "Willard", + "Daryl", + "Ross", + "Virgil", + "Andy", + "Marshall", + "Salvador", + "Perry", + "Kirk", + "Sergio", + "Marion", + "Tracy", + "Seth", + "Kent", + "Terrance", + "Rene", + "Eduardo", + "Terrence", + "Enrique", + "Freddie", + "Wade", + "Austin", + "Stuart", + "Fredrick", + "Arturo", + "Alejandro", + "Jackie", + "Joey", + "Nick", + "Luther", + "Wendell", + "Jeremiah", + "Evan", + "Julius", + "Dana", + "Donnie", + "Otis", + "Shannon", + "Trevor", + "Oliver", + "Luke", + "Homer", + "Gerard", + "Doug", + "Kenny", + "Hubert", + "Angelo", + "Shaun", + "Lyle", + "Matt", + "Lynn", + "Alfonso", + "Orlando", + "Rex", + "Carlton", + "Ernesto", + "Cameron", + "Neal", + "Pablo", + "Lorenzo", + "Omar", + "Wilbur", + "Blake", + "Grant", + "Horace", + "Roderick", + "Kerry", + "Abraham", + "Willis", + "Rickey", + "Jean", + "Ira", + "Andres", + "Cesar", + "Johnathan", + "Malcolm", + "Rudolph", + "Damon", + "Kelvin", + "Rudy", + "Preston", + "Alton", + "Archie", + "Marco", + "Wm", + "Pete", + "Randolph", + "Garry", + "Geoffrey", + "Jonathon", + "Felipe", + "Bennie", + "Gerardo", + "Ed", + "Dominic", + "Robin", + "Loren", + "Delbert", + "Colin", + "Guillermo", + "Earnest", + "Lucas", + "Benny", + "Noel", + "Spencer", + "Rodolfo", + "Myron", + "Edmund", + "Garrett", + "Salvatore", + "Cedric", + "Lowell", + "Gregg", + "Sherman", + "Wilson", + "Devin", + "Sylvester", + "Kim", + "Roosevelt", + "Israel", + "Jermaine", + "Forrest", + "Wilbert", + "Leland", + "Simon", + "Guadalupe", + "Clark", + "Irving", + "Carroll", + "Bryant", + "Owen", + "Rufus", + "Woodrow", + "Sammy", + "Kristopher", + "Mack", + "Levi", + "Marcos", + "Gustavo", + "Jake", + "Lionel", + "Marty", + "Taylor", + "Ellis", + "Dallas", + "Gilberto", + "Clint", + "Nicolas", + "Laurence", + "Ismael", + "Orville", + "Drew", + "Jody", + "Ervin", + "Dewey", + "Al", + "Wilfred", + "Josh", + "Hugo", + "Ignacio", + "Caleb", + "Tomas", + "Sheldon", + "Erick", + "Frankie", + "Stewart", + "Doyle", + "Darrel", + "Rogelio", + "Terence", + "Santiago", + "Alonzo", + "Elias", + "Bert", + "Elbert", + "Ramiro", + "Conrad", + "Pat", + "Noah", + "Grady", + "Phil", + "Cornelius", + "Lamar", + "Rolando", + "Clay", + "Percy", + "Dexter", + "Bradford", + "Merle", + "Darin", + "Amos", + "Terrell", + "Moses", + "Irvin", + "Saul", + "Roman", + "Darnell", + "Randal", + "Tommie", + "Timmy", + "Darrin", + "Winston", + "Brendan", + "Toby", + "Van", + "Abel", + "Dominick", + "Boyd", + "Courtney", + "Jan", + "Emilio", + "Elijah", + "Cary", + "Domingo", + "Santos", + "Aubrey", + "Emmett", + "Marlon", + "Emanuel", + "Jerald", + "Edmond", + "Emil", + "Dewayne", + "Will", + "Otto", + "Teddy", + "Reynaldo", + "Bret", + "Morgan", + "Jess", + "Trent", + "Humberto", + "Emmanuel", + "Stephan", + "Louie", + "Vicente", + "Lamont", + "Stacy", + "Garland", + "Miles", + "Micah", + "Efrain", + "Billie", + "Logan", + "Heath", + "Rodger", + "Harley", + "Demetrius", + "Ethan", + "Eldon", + "Rocky", + "Pierre", + "Junior", + "Freddy", + "Eli", + "Bryce", + "Antoine", + "Robbie", + "Kendall", + "Royce", + "Sterling", + "Mickey", + "Chase", + "Grover", + "Elton", + "Cleveland", + "Dylan", + "Chuck", + "Damian", + "Reuben", + "Stan", + "August", + "Leonardo", + "Jasper", + "Russel", + "Erwin", + "Benito", + "Hans", + "Monte", + "Blaine", + "Ernie", + "Curt", + "Quentin", + "Agustin", + "Murray", + "Jamal", + "Devon", + "Adolfo", + "Harrison", + "Tyson", + "Burton", + "Brady", + "Elliott", + "Wilfredo", + "Bart", + "Jarrod", + "Vance", + "Denis", + "Damien", + "Joaquin", + "Harlan", + "Desmond", + "Elliot", + "Darwin", + "Ashley", + "Gregorio", + "Buddy", + "Xavier", + "Kermit", + "Roscoe", + "Esteban", + "Anton", + "Solomon", + "Scotty", + "Norbert", + "Elvin", + "Williams", + "Nolan", + "Carey", + "Rod", + "Quinton", + "Hal", + "Brain", + "Rob", + "Elwood", + "Kendrick", + "Darius", + "Moises", + "Son", + "Marlin", + "Fidel", + "Thaddeus", + "Cliff", + "Marcel", + "Ali", + "Jackson", + "Raphael", + "Bryon", + "Armand", + "Alvaro", + "Jeffry", + "Dane", + "Joesph", + "Thurman", + "Ned", + "Sammie", + "Rusty", + "Michel", + "Monty", + "Rory", + "Fabian", + "Reggie", + "Mason", + "Graham", + "Kris", + "Isaiah", + "Vaughn", + "Gus", + "Avery", + "Loyd", + "Diego", + "Alexis", + "Adolph", + "Norris", + "Millard", + "Rocco", + "Gonzalo", + "Derick", + "Rodrigo", + "Gerry", + "Stacey", + "Carmen", + "Wiley", + "Rigoberto", + "Alphonso", + "Ty", + "Shelby", + "Rickie", + "Noe", + "Vern", + "Bobbie", + "Reed", + "Jefferson", + "Elvis", + "Bernardo", + "Mauricio", + "Hiram", + "Donovan", + "Basil", + "Riley", + "Ollie", + "Nickolas", + "Maynard", + "Scot", + "Vince", + "Quincy", + "Eddy", + "Sebastian", + "Federico", + "Ulysses", + "Heriberto", + "Donnell", + "Cole", + "Denny", + "Davis", + "Gavin", + "Emery", + "Ward", + "Romeo", + "Jayson", + "Dion", + "Dante", + "Clement", + "Coy", + "Odell", + "Maxwell", + "Jarvis", + "Bruno", + "Issac", + "Mary", + "Dudley", + "Brock", + "Sanford", + "Colby", + "Carmelo", + "Barney", + "Nestor", + "Hollis", + "Stefan", + "Donny", + "Art", + "Linwood", + "Beau", + "Weldon", + "Galen", + "Isidro", + "Truman", + "Delmar", + "Johnathon", + "Silas", + "Frederic", + "Dick", + "Kirby", + "Irwin", + "Cruz", + "Merlin", + "Merrill", + "Charley", + "Marcelino", + "Lane", + "Harris", + "Cleo", + "Carlo", + "Trenton", + "Kurtis", + "Hunter", + "Aurelio", + "Winfred", + "Vito", + "Collin", + "Denver", + "Carter", + "Leonel", + "Emory", + "Pasquale", + "Mohammad", + "Mariano", + "Danial", + "Blair", + "Landon", + "Dirk", + "Branden", + "Adan", + "Numbers", + "Clair", + "Buford", + "German", + "Bernie", + "Wilmer", + "Joan", + "Emerson", + "Zachery", + "Fletcher", + "Jacques", + "Errol", + "Dalton", + "Monroe", + "Josue", + "Dominique", + "Edwardo", + "Booker", + "Wilford", + "Sonny", + "Shelton", + "Carson", + "Theron", + "Raymundo", + "Daren", + "Tristan", + "Houston", + "Robby", + "Lincoln", + "Jame", + "Genaro", + "Gale", + "Bennett", + "Octavio", + "Cornell", + "Laverne", + "Hung", + "Arron", + "Antony", + "Herschel", + "Alva", + "Giovanni", + "Garth", + "Cyrus", + "Cyril", + "Ronny", + "Stevie", + "Lon", + "Freeman", + "Erin", + "Duncan", + "Kennith", + "Carmine", + "Augustine", + "Young", + "Erich", + "Chadwick", + "Wilburn", + "Russ", + "Reid", + "Myles", + "Anderson", + "Morton", + "Jonas", + "Forest", + "Mitchel", + "Mervin", + "Zane", + "Rich", + "Jamel", + "Lazaro", + "Alphonse", + "Randell", + "Major", + "Johnie", + "Jarrett", + "Brooks", + "Ariel", + "Abdul", + "Dusty", + "Luciano", + "Lindsey", + "Tracey", + "Seymour", + "Scottie", + "Eugenio", + "Mohammed", + "Sandy", + "Valentin", + "Chance", + "Arnulfo", + "Lucien", + "Ferdinand", + "Thad", + "Ezra", + "Sydney", + "Aldo", + "Rubin", + "Royal", + "Mitch", + "Earle", + "Abe", + "Wyatt", + "Marquis", + "Lanny", + "Kareem", + "Jamar", + "Boris", + "Isiah", + "Emile", + "Elmo", + "Aron", + "Leopoldo", + "Everette", + "Josef", + "Gail", + "Eloy", + "Dorian", + "Rodrick", + "Reinaldo", + "Lucio", + "Jerrod", + "Oesteon", + "Hershel", + "Barton", + "Parker", + "Lemuel", + "Lavern", + "Burt", + "Jules", + "Gil", + "Eliseo", + "Ahmad", + "Nigel", + "Efren", + "Antwan", + "Alden", + "Margarito", + "Coleman", + "Refugio", + "Dino", + "Osvaldo", + "Les", + "Deandre", + "Normand", + "Kieth", + "Ivory", + "Andrea", + "Trey", + "Norberto", + "Napoleon", + "Jerold", + "Fritz", + "Rosendo", + "Milford", + "Sang", + "Deon", + "Christoper", + "Alfonzo", + "Lyman", + "Josiah", + "Brant", + "Wilton", + "Rico", + "Jamaal", + "Dewitt", + "Carol", + "Brenton", + "Yong", + "Olin", + "Foster", + "Faustino", + "Claudio", + "Judson", + "Gino", + "Edgardo", + "Berry", + "Alec", + "Tanner", + "Jarred", + "Donn", + "Trinidad", + "Tad", + "Shirley", + "Prince", + "Porfirio", + "Odis", + "Maria", + "Lenard", + "Chauncey", + "Chang", + "Tod", + "Mel", + "Marcelo", + "Kory", + "Augustus", + "Keven", + "Hilario", + "Bud", + "Sal", + "Rosario", + "Orval", + "Mauro", + "Dannie", + "Zachariah", + "Olen", + "Anibal", + "Milo", + "Jed", + "Frances", + "Thanh", + "Dillon", + "Amado", + "Newton", + "Connie", + "Lenny", + "Tory", + "Richie", + "Lupe", + "Horacio", + "Brice", + "Mohamed", + "Delmer", + "Dario", + "Reyes", + "Dee", + "Mac", + "Jonah", + "Jerrold", + "Robt", + "Hank", + "Sung", + "Rupert", + "Rolland", + "Kenton", + "Damion", + "Chi", + "Antone", + "Waldo", + "Fredric", + "Bradly", + "Quinn", + "Kip", + "Burl", + "Walker", + "Tyree", + "Jefferey", + "Ahmed", + "Willy", + "Stanford", + "Oren", + "Noble", + "Moshe", + "Mikel", + "Enoch", + "Brendon", + "Quintin", + "Jamison", + "Florencio", + "Darrick", + "Tobias", + "Minh", + "Hassan", + "Giuseppe", + "Demarcus", + "Cletus", + "Tyrell", + "Lyndon", + "Keenan", + "Werner", + "Theo", + "Geraldo", + "Lou", + "Columbus", + "Chet", + "Bertram", + "Markus", + "Huey", + "Hilton", + "Dwain", + "Donte", + "Tyron", + "Omer", + "Isaias", + "Hipolito", + "Fermin", + "Chung", + "Adalberto", + "Valentine", + "Jamey", + "Bo", + "Barrett", + "Whitney", + "Teodoro", + "Mckinley", + "Maximo", + "Garfield", + "Sol", + "Raleigh", + "Lawerence", + "Abram", + "Rashad", + "King", + "Emmitt", + "Daron", + "Chong", + "Samual", + "Paris", + "Otha", + "Miquel", + "Lacy", + "Eusebio", + "Dong", + "Domenic", + "Darron", + "Buster", + "Antonia", + "Wilber", + "Renato", + "Jc", + "Hoyt", + "Haywood", + "Ezekiel", + "Chas", + "Florentino", + "Elroy", + "Clemente", + "Arden", + "Neville", + "Kelley", + "Edison", + "Deshawn", + "Carrol", + "Shayne", + "Nathanial", + "Jordon", + "Danilo", + "Claud", + "Val", + "Sherwood", + "Raymon", + "Rayford", + "Cristobal", + "Ambrose", + "Titus", + "Hyman", + "Felton", + "Ezequiel", + "Erasmo", + "Stanton", + "Lonny", + "Len", + "Ike", + "Milan", + "Lino", + "Jarod", + "Herb", + "Andreas", + "Walton", + "Rhett", + "Palmer", + "Jude", + "Douglass", + "Cordell", + "Oswaldo", + "Ellsworth", + "Virgilio", + "Toney", + "Nathanael", + "Del", + "Britt", + "Benedict", + "Mose", + "Hong", + "Leigh", + "Johnson", + "Isreal", + "Gayle", + "Garret", + "Fausto", + "Asa", + "Arlen", + "Zack", + "Warner", + "Modesto", + "Francesco", + "Manual", + "Jae", + "Gaylord", + "Gaston", + "Filiberto", + "Deangelo", + "Michale", + "Granville", + "Wes", + "Malik", + "Zackary", + "Tuan", + "Nicky", + "Eldridge", + "Cristopher", + "Cortez", + "Antione", + "Malcom", + "Long", + "Korey", + "Jospeh", + "Colton", + "Waylon", + "Von", + "Hosea", + "Shad", + "Santo", + "Rudolf", + "Rolf", + "Rey", + "Renaldo", + "Marcellus", + "Lucius", + "Lesley", + "Kristofer", + "Boyce", + "Benton", + "Man", + "Kasey", + "Jewell", + "Hayden", + "Harland", + "Arnoldo", + "Rueben", + "Leandro", + "Kraig", + "Jerrell", + "Jeromy", + "Hobert", + "Cedrick", + "Arlie", + "Winford", + "Wally", + "Patricia", + "Luigi", + "Keneth", + "Jacinto", + "Graig", + "Franklyn", + "Edmundo", + "Sid", + "Porter", + "Leif", + "Lauren", + "Jeramy", + "Elisha", + "Buck", + "Willian", + "Vincenzo", + "Shon", + "Michal", + "Lynwood", + "Lindsay", + "Jewel", + "Jere", + "Hai", + "Elden", + "Dorsey", + "Darell", + "Broderick", + "Alonso" +); + +$sugar_demodata['company_name_array'] = array( + "24/7 Mensajería", + "Sandeon Consolidation Corp", + "360 Vacations", + "Powell Funding", + "5D Inversiones", + "Aim Capital Inc", + "AB Drivers Limited", + "Hammer Group Inc", + "Arts & Crafts Inc", + "A.D. Importing Compañía Inc", + "A.G. Parr PLC", + "AtoZ Co Ltd", + "Avery Software Co", + "Airline Maintenance Co", + "Air Safety Inc", + "Anytime Air Support Inc", + "Coolview Net Ltd", + "Rubble Group Inc", + "B.C. Inversiones International", + "Sunyvale Reporting Ltd", + "B.H. Edwards Inc", + "Insight Marketing Inc", + "Bay Funding Co", + "Nelson Inc", + "Calm Sailing Inc", + "Chandler Logistics Inc", + "Cloud Cover Trust", + "Complete Holding", + "Constrata Trust LLC", + "Cumberland Trails Inc", + "DD Furniture Inc", + "Dirt Mining Ltd", + "Hollywood Diner Ltd", + "Davenport Inversiones", + "Draft Diversified Energy Inc", + "First National S/B", + "Gifted Holdings AG", + "Green Tractor Group Limited", + "Grow-Fast Inc", + "Income Free Inversiones LP", + "International Art Inc", + "Ink Conglomerate Inc", + "J.K.M. Corp (HA)", + "JAB Funds Ltd.", + "JBC Banking Inc", + "JJ Resources Inc", + "Jungle Systems Inc", + "Kringle Bell Inc". + "K.A. Tower & Co", + "Kaos Trading Ltd", + "Kings Royalty Trust", + "King Software Inc", + "Smith & Sons", + "Lexington Shores Corp", + "Max Holdings Ltd", + "Mississippi Bank Group", + "MMM Mortuary Corp", + "MTM Investment Bank F S B", + "Nimble Technologies Inc", + "NW Bridge Construcciones", + "NW Capital Corp", + "OTC Holdings", + "Overhead & Underfoot Ltd.", + "P Piper & Sons", + "Powder Suppliers", + "Pullman Cart Compañía", + "Q.R.&E. Corp", + "Q3 ARVRO III PR", + "Rhyme & Reason Inc", + "Riviera Hotels", + "RR. Talker Co", + "RRR Advertising Inc.", + "S Cane Sweeteners Ltd", + "Sea Region Inc", + "Slender Broadband Inc", + "Smallville Resources Inc", + "South Sea Plumbing Products", + "Southern Realty", + "Spend Thrift Inc", + "Spindle Broadcast Corp.", + "Start Over Trust", + "Super Star Holdings Inc", + "SuperG Tech", + "T-Cat Media Group Inc", + "TJ O'Rourke Inc", + "Tortoise Corp", + "Tracker Com LP", + "Trait Institute Inc", + "Tri-State Medical Corp", + "T-Squared Techs", + "EEE Endowments LTD", + "Underwater Mining Inc.", + "Union Bank", + "Waverly Trading House", + "White Cross Co", + "X-Sell Holdings", + "XY&Z Funding Inc", +); + +$sugar_demodata['street_address_array'] = array( + "123 Anywhere Street", + "345 Sugar Blvd.", + "1715 Scott Dr", + "999 Baker Way", + "67321 Oeste Siam St.", + "48920 San Carlos Ave", + "777 Oeste Filmore Ln", + "9 IBM Path", + "111 Silicon Valley Road", + "321 University Ave.", + ); + +$sugar_demodata['city_array'] = array( + "San Jose", + "San Francisco", + "Sunnyvale", + "San Mateo", + "Cupertino", + "Los Angeles", + "Santa Monica", + "Denver", + "St. Petersburg", + "Santa Fe", + "Ohio", + "Salt Lake City", + "Persistance", + "Alabama", + "Kansas City", +); + +//cases demodata +$sugar_demodata['case_seed_names'] = array( + 'Problema agregando nuevos items', + 'El sistema no responde', + 'Se necesita soporte para grandes customizaciones', + 'Se necesita contratar licencias adicionales', + 'Mensaje de alerta al utilizar el navegador incorrecto' +); + +//bugs demodata +$sugar_demodata['bug_seed_names'] = array( + 'Ocurre un error al ejecutar la consulta', + 'Se muestra un mensaje de alerta en el archivo después de exportar', + 'Error fatal durante la instalación', + 'Aparece imagen rota en la página inicial', + 'Aparece un error de sintaxis al ejecutar reportes antiguos' +); + +$sugar_demodata['note_seed_names_and_Descriptions'] = array( + array('Más información de la cuenta','Esta cuenta se puede transformar en una oportunidad de 3000 usuarios.'), + array('Información de la Llamada','La llamada inicial de venta estuvo bien. Se volverá a contactar en 3 días.'), + array('Encuentro en la convención 2010','El contacto expresó interés en transformarse en partner.'), + array('Asistió a un Evento de CRM en Asia','La registración del Contacto al evento fue bonificada.') +); + +$sugar_demodata['call_seed_data_names'] = array( + 'Obtener más información del acuerdo propuesto', + 'Dejar un mensaje', + 'Mal momento, nos llamará luego', + 'Discutir el proceso de revisión' +); + +//titles +$sugar_demodata['titles'] = array( + "Presidente", + "Gerente de Operaciones", + "Gerente de Ventas", + "Director Operations", + "Director Sales", + "Manager de Operaciones", + "Desarrollador IT", + "Gerente de Productos Senior" +); + +//tasks +$sugar_demodata['task_seed_data_names'] = array( + 'Ensamblar catálogos', + 'Hacer arreglos para el viaje', + 'Enviar una carta', + 'Enviar el contrato', + 'Enviar fax', + 'Enviar una carta de follow-up', + 'Enviar documentación', + 'Enviar propuesta', + 'Enviar presupuesto', + 'Llamar para planificar reunión', + 'Evaluar Configuración', + 'Dar feedback de demo', + 'Arreglar introducción', + 'Escalar requerimientos de soporte', + 'Cerrar requerimientos de soporte', + 'Enviar producto', + 'Organizar llamada de referencia', + 'Planificar entrenamiento', + 'Enviar información de grupos locales de usuarios', + 'Agregar a lista de correo', +); + +//meetings +$sugar_demodata['meeting_seed_data_names'] = array( + 'Revisión de la Propuesta', + 'Discusión Inicial', + 'Rever necesidades', + 'Discutir costos', + 'Demo', + 'Presentar a todos los participantes', +); +$sugar_demodata['meeting_seed_data_descriptions'] = 'Reunión para discutir el plan de proyecto y revisar los detalles de implementación'; + +//emails +$sugar_demodata['email_seed_data_subjects'] = array( + 'Revisión de la Propuesta', + 'Discusión Inicial', + 'Rever necesidades', + 'Discutir costos', + 'Demo', + 'Presentar a todos los participantes', +); +$sugar_demodata['email_seed_data_descriptions'] = 'Reunión para discutir el plan de proyecto y revisar los detalles de implementación'; + +//leads +$sugar_demodata['primary_address_state'] = 'CA'; +$sugar_demodata['billing_address_state']['east'] = 'NY'; +$sugar_demodata['billing_address_state']['west'] = 'CA'; +$sugar_demodata['primary_address_country'] = 'USA'; + +//manufacturers +$sugar_demodata['manufacturer_seed_data_names'] = array( + 'TekWare Inc.', + 'Acme Suppliers' +); + +//Shippers +$sugar_demodata['shipper_seed_data_names'] = array( + 'FedEx', + 'USPS Ground' +); + +//productcategories +$sugar_demodata['category_ext_name'] = ' Dispositivos'; +$sugar_demodata['product_ext_name'] = ' Accesorios'; +$sugar_demodata['productcategory_seed_data_names'] = array( + 'Escritorio', + 'Laptops', + 'Estaciones de Trabajo', + 'Dispositivos Modulares' +); + +//producttype +$sugar_demodata['producttype_seed_data_names']= array( + 'Dispositivos', + 'Hardware', + 'Contratos de Soporte' +); + +//taxrate +$sugar_demodata['taxrate_seed_data'][] = array( + 'name' => '8.25 - Cupertino, CA', + 'value' => '8.25', +); + +$sugar_demodata['currency_seed_data'][] = array( + 'name' => 'Euro', + 'conversion_rate' => 0.9, + 'iso4217' => 'EUR', + 'symbol' => '€', +); + +//producttemplate +$sugar_demodata['producttemplate_seed_data'][] = array( + 'name' => 'TK 1000 Desktop', + 'tax_class' => 'Taxable', + 'cost_price' => 500.00, + 'cost_usdollar' => 500.00, + 'list_price' => 800.00, + 'list_usdollar' => 800.00, + 'discount_price' => 800.00, + 'discount_usdollar' => 800.00, + 'pricing_formula' => 'IsList', + 'mft_part_num' => 'XYZ7890122222', + 'pricing_factor' => '1', + 'status' => 'Available', + 'weight' => 20.0, + 'date_available' => '2009-10-15', + 'qty_in_stock' => '72', +); + +$sugar_demodata['producttemplate_seed_data'][] = array( + 'name' => 'TK 1000 Desktop', + 'tax_class' => 'Taxable', + 'cost_price' => 600.00, + 'cost_usdollar' => 600.00, + 'list_price' => 900.00, + 'list_usdollar' => 900.00, + 'discount_price' => 900.00, + 'discount_usdollar' => 900.00, + 'pricing_formula' => 'IsList', + 'mft_part_num' => 'XYZ7890123456', + 'pricing_factor' => '1', + 'status' => 'Available', + 'weight' => 20.0, + 'date_available' => '2009-10-15', + 'qty_in_stock' => '65', +); + +$sugar_demodata['producttemplate_seed_data'][] = array( + 'name' => 'TK m30 Desktop', + 'tax_class' => 'Taxable', + 'cost_price' => 1300.00, + 'cost_usdollar' => 1300.00, + 'list_price' => 1700.00, + 'list_usdollar' => 1700.00, + 'discount_price' => 1625.00, + 'discount_usdollar' => 1625.00, + 'pricing_formula' => 'ProfitMargin', + 'mft_part_num' => 'ABCD123456890', + 'pricing_factor' => '20', + 'status' => 'Available', + 'weight' => 5.0, + 'date_available' => '2009-10-15', + 'qty_in_stock' => '12', +); + +$sugar_demodata['producttemplate_seed_data'][] = array( + 'name' => 'Reflective Mirror Widget', + 'tax_class' => 'Taxable', + 'cost_price' => 200.00, + 'cost_usdollar' => 200.00, + 'list_price' => 325.00, + 'list_usdollar' => 325.00, + 'discount_price' => 266.50, + 'discount_usdollar' => 266.50, + 'pricing_formula' => 'PercentageDiscount', + 'mft_part_num' => '2.0', + 'pricing_factor' => '20', + 'status' => 'Available', + 'weight' => 20.0, + 'date_available' => '2009-10-15', + 'qty_in_stock' => '65', +); + + +$sugar_demodata['contract_seed_data'][] = array( + 'name' => 'IT Tech Support for UK Datacenter', + 'reference_code' => 'EMP-9802', + 'total_contract_value' => '500600.01', + 'start_date' => '2010-05-15', + 'end_date' => '2020-05-15', + 'company_signed_date' => '2010-03-15', + 'customer_signed_date' => '2010-03-16', + 'description' => 'This is a sub-contract for a very large project.', +); + +$sugar_demodata['contract_seed_data'][] = array( + 'name' => 'Ion Engines for Auto Plant', + 'reference_code' => 'EMP-7277', + 'total_contract_value' => '333444.34', + 'start_date' => '2010-05-15', + 'end_date' => '2020-05-15', + 'company_signed_date' => '2010-03-15', + 'customer_signed_date' => '2010-03-16', + 'description' => 'In competition with Sienar Fleet Systems for this one.', +); + +$sugar_demodata['project_seed_data']['audit'] = array( + 'name' => 'Create new plan for the annual audit', + 'description' => 'The annual audit is coming up next month.', + 'estimated_start_date' => '2010-11-01', + 'estimated_end_date' => '2010-12-31', + 'status' => 'Draft', + 'priority' => 'medium', +); + +$sugar_demodata['project_seed_data']['audit']['project_tasks'][] = array( + 'name' => 'Communicate with internal stakeholders', + 'date_start' => '2010-11-1', + 'date_finish' => '2010-11-8', + 'description' => 'Schedule individual meetings with Will, Max, and Sarah.', + 'duration' => '6', + 'duration_unit' => 'Days', + 'percent_complete' => 100, +); + +$sugar_demodata['project_seed_data']['audit']['project_tasks'][] = array( + 'name' => 'Create draft of the plan', + 'date_start' => '2010-11-5', + 'date_finish' => '2010-11-20', + 'description' => 'Start new plan document, including all of the information from the initial discussion meetings.', + 'duration' => '12', + 'duration_unit' => 'Days', + 'percent_complete' => 38, +); + +$sugar_demodata['project_seed_data']['audit']['project_tasks'][] = array( + 'name' => 'Perform field studies to collect data', + 'date_start' => '2010-11-5', + 'date_finish' => '2010-11-13', + 'description' => 'Obtain approval from all stakeholders of the plan.', + 'duration' => '17', + 'duration_unit' => 'Days', + 'percent_complete' => 75, +); + +$sugar_demodata['project_seed_data']['audit']['project_tasks'][] = array( + 'name' => 'Update draft of the plan', + 'date_start' => '2010-11-12', + 'date_finish' => '2010-11-19', + 'description' => 'Schedule a meeting with the heads of the business units to review the plan.', + 'duration' => '6', + 'duration_unit' => 'Days', + 'percent_complete' => 0, +); + +$sugar_demodata['project_seed_data']['audit']['project_tasks'][] = array( + 'name' => 'Gather data from meetings', + 'date_start' => '2010-11-20', + 'date_finish' => '2010-11-20', + 'description' => 'Need to organize the data and create charts to represent the data.', + 'duration' => '1', + 'duration_unit' => 'Days', + 'percent_complete' => 0, +); + +//BEGIN Quotes demo data +$sugar_demodata['quotes_seed_data']['quotes'][0] = array( + 'name' => 'Computers for [account name]', + 'quote_stage' => 'Draft', + 'date_quote_expected_closed' => '2012-04-30', + 'description' => '', + 'purcahse_order_num' => '6011842', + 'payment_terms' => 'Net 30', + + 'bundle_data' => array( + 0 => array ( + 'bundle_name' => 'Computers', + 'bundle_stage' => 'Draft', + 'comment' => 'TK Desktop Computers', + 'products' => array ( + 1 => array('name'=>'TK 1000 Desktop', 'quantity'=>'1'), + 2 => array('name'=>'TK m30 Desktop', 'quantity'=>'2'), + ), + ), + ), +); + + +$sugar_demodata['quotes_seed_data']['quotes'][1] = array( + 'name' => 'Mirrors for [account name]', + 'quote_stage' => 'Negotiation', + 'date_quote_expected_closed' => '2012-04-30', + 'description' => '', + 'purcahse_order_num' => '3940021', + 'payment_terms' => 'Net 15', + + + 'bundle_data' => array( + 0 => array ( + 'bundle_name' => 'Mirrors', + 'bundle_stage' => 'Draft', + 'comment' => 'Reflective Mirrors', + 'products' => array ( + 1 => array('name'=>'Reflective Mirror Widget', 'quantity'=>'2'), + ), + ), + ), +); +//END Quotes demo data + + +?> From b043dd6048f37a7318a75f4868b4655c1059b1a5 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 4 Dec 2013 15:49:41 +0000 Subject: [PATCH 011/223] Fixed Add Dashlets option Doesn't display when Home is renamed --- themes/Suite7/tpls/_headerModuleList.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/Suite7/tpls/_headerModuleList.tpl b/themes/Suite7/tpls/_headerModuleList.tpl index ffa0aa69567..4fb3bfcaf6b 100755 --- a/themes/Suite7/tpls/_headerModuleList.tpl +++ b/themes/Suite7/tpls/_headerModuleList.tpl @@ -112,7 +112,7 @@ {/foreach}
    {/if} - {if $module == 'Home' and !$lock_homepage} + {if $name == 'Home' and !$lock_homepage}

    {$APP.LBL_LINK_ACTIONS}

  3. {$APP.LBL_ADD_DASHLETS}
  4. {/if} From 78805320dc74c251eef9ce0f4b9857bcbdd26681 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 4 Dec 2013 16:50:28 +0000 Subject: [PATCH 012/223] fixed suitecrm support link --- custom/include/globalControlLinks.php | 2 +- install/installSystemCheck.php | 2 +- install/install_utils.php | 2 +- install/language/en_us.lang.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/custom/include/globalControlLinks.php b/custom/include/globalControlLinks.php index 85611cad4fc..9bf1241d7a1 100755 --- a/custom/include/globalControlLinks.php +++ b/custom/include/globalControlLinks.php @@ -1,6 +1,6 @@ array($app_strings['LBL_TRAINING'] => 'javascript:void(window.open(\'http://suitecrm.com/index.php/support\'))'), + 'linkinfo' => array($app_strings['LBL_TRAINING'] => 'javascript:void(window.open(\'http://suitecrm.com/support\'))'), 'submenu' => '' ); \ No newline at end of file diff --git a/install/installSystemCheck.php b/install/installSystemCheck.php index 585e695b73e..6bd6cf5866b 100755 --- a/install/installSystemCheck.php +++ b/install/installSystemCheck.php @@ -435,7 +435,7 @@ function runCheck($install_script = false, $mod_strings){ - + diff --git a/install/install_utils.php b/install/install_utils.php index 8adc0e34e80..3292c6e0e47 100755 --- a/install/install_utils.php +++ b/install/install_utils.php @@ -2031,7 +2031,7 @@ function post_install_modules(){ } function get_help_button_url(){ - $help_url = 'http://suitecrm.com/index.php/forum/index'; + $help_url = 'http://www.suitecrm.com/support'; return $help_url; } diff --git a/install/language/en_us.lang.php b/install/language/en_us.lang.php index 91198e8dd95..80bf3b7a606 100755 --- a/install/language/en_us.lang.php +++ b/install/language/en_us.lang.php @@ -260,7 +260,7 @@ 'LBL_DISABLED_DESCRIPTION_2' => 'After this change has been made, you may click the "Start" button below to begin your installation. After the installation is complete, you will want to change the value for \'installer_locked\' to \'true\'.', 'LBL_DISABLED_DESCRIPTION' => 'The installer has already been run once. As a safety measure, it has been disabled from running a second time. If you are absolutely sure you want to run it again, please go to your config.php file and locate (or add) a variable called \'installer_locked\' and set it to \'false\'. The line should look like this:', 'LBL_DISABLED_HELP_1' => 'For installation help, please visit the SuiteCRM', - 'LBL_DISABLED_HELP_LNK' => 'http://www.suitecrm.com/forums/', + 'LBL_DISABLED_HELP_LNK' => 'http://www.suitecrm.com/support', 'LBL_DISABLED_HELP_2' => 'support forums', 'LBL_DISABLED_TITLE_2' => 'SuiteCRM Installation has been Disabled', 'LBL_DISABLED_TITLE' => 'SuiteCRM Installation Disabled', From 0856484fe5a671ee3e8a45b069f267b572a4bf67 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 4 Dec 2013 17:12:31 +0000 Subject: [PATCH 013/223] fixed invalid field name 'function' in aor for mssql --- modules/AOR_Fields/AOR_Field.php | 2 +- modules/AOR_Fields/vardefs.php | 4 ++-- modules/AOR_Reports/AOR_Report.php | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/AOR_Fields/AOR_Field.php b/modules/AOR_Fields/AOR_Field.php index b6149afefed..b4d814ac1d4 100755 --- a/modules/AOR_Fields/AOR_Field.php +++ b/modules/AOR_Fields/AOR_Field.php @@ -46,7 +46,7 @@ class AOR_Field extends Basic { var $field; var $display; var $label; - var $function; + var $field_function; var $sort_by; var $sort_order; var $group_by; diff --git a/modules/AOR_Fields/vardefs.php b/modules/AOR_Fields/vardefs.php index 375a2731ae4..684bb7a0ba5 100755 --- a/modules/AOR_Fields/vardefs.php +++ b/modules/AOR_Fields/vardefs.php @@ -151,10 +151,10 @@ 'len' => '255', 'size' => '20', ), - 'function' => + 'field_function' => array ( 'required' => false, - 'name' => 'function', + 'name' => 'field_function', 'vname' => 'LBL_FUNCTION', 'type' => 'enum', 'massupdate' => 0, diff --git a/modules/AOR_Reports/AOR_Report.php b/modules/AOR_Reports/AOR_Report.php index 0e07496e111..959ba46bc5a 100755 --- a/modules/AOR_Reports/AOR_Report.php +++ b/modules/AOR_Reports/AOR_Report.php @@ -231,7 +231,7 @@ function build_report_html($offset = -1, $links = true){ $label = $field->label.$i; $fields[$label]['field'] = $field->field; $fields[$label]['display'] = $field->display; - $fields[$label]['function'] = $field->function; + $fields[$label]['function'] = $field->field_function; $fields[$label]['module'] = $field_module; $fields[$label]['alias'] = $field_alias; $fields[$label]['link'] = $field->link; @@ -320,7 +320,7 @@ function build_report_csv(){ $label = $field->label.$i; $fields[$label]['field'] = $field->field; $fields[$label]['display'] = $field->display; - $fields[$label]['function'] = $field->function; + $fields[$label]['function'] = $field->field_function; $fields[$label]['module'] = $field_module; @@ -467,8 +467,8 @@ function build_report_query_select($query = array()){ $query['group_by'][] = $select_field; } - if($field->function != null){ - $select_field = $field->function.'('.$select_field.')'; + if($field->field_function != null){ + $select_field = $field->field_function.'('.$select_field.')'; } $query['select'][] = $select_field ." AS '".$field->label.$i."'"; From 858c66fbfb610ab22c1ebc7c4ac4c89f2517e1b3 Mon Sep 17 00:00:00 2001 From: Jorge Obeaga Date: Wed, 4 Dec 2013 17:06:15 -0300 Subject: [PATCH 014/223] Minor fix. --- modules/FP_Event_Locations/language/es_es.lang.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/FP_Event_Locations/language/es_es.lang.php b/modules/FP_Event_Locations/language/es_es.lang.php index cc398f9d6b1..cdc26b78620 100644 --- a/modules/FP_Event_Locations/language/es_es.lang.php +++ b/modules/FP_Event_Locations/language/es_es.lang.php @@ -70,7 +70,7 @@ 'LBL_ADDRESS_CITY' => 'Ciudad', 'LBL_ADDRESS_COUNTRY' => 'País', 'LBL_ADDRESS_POSTALCODE' => 'Código Postal', - 'LBL_ADDRESS_STATE' => 'País', + 'LBL_ADDRESS_STATE' => 'Estado/Provincia', 'LBL_CAPACITY' => 'Capacidad', 'LBL_EDITVIEW_PANEL1' => 'Dirección', ); From 7eca788f5f7a56988e64dc578505097afb095c8b Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 8 Dec 2013 18:05:43 +0000 Subject: [PATCH 015/223] fixed issue with js var module_sugar_grp1 and AJAX --- modules/AOR_Conditions/conditionLines.js | 2 +- modules/AOR_Fields/fieldLines.js | 2 +- modules/AOS_Products_Quotes/Line_Items.php | 1 + modules/AOW_Conditions/conditionLines.js | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/AOR_Conditions/conditionLines.js b/modules/AOR_Conditions/conditionLines.js index 573055af88b..baf44dd36e1 100755 --- a/modules/AOR_Conditions/conditionLines.js +++ b/modules/AOR_Conditions/conditionLines.js @@ -244,7 +244,7 @@ function insertConditionLine(){ var a = x.insertCell(0); if(action_sugar_grp1 == 'EditView'){ - a.innerHTML = "
    "; + a.innerHTML = "
    "; a.innerHTML += ""; } else{ a.innerHTML = condln +1; diff --git a/modules/AOR_Fields/fieldLines.js b/modules/AOR_Fields/fieldLines.js index bac0d8c1046..8c5eb275198 100755 --- a/modules/AOR_Fields/fieldLines.js +++ b/modules/AOR_Fields/fieldLines.js @@ -265,7 +265,7 @@ function insertFieldLine(){ var a = x.insertCell(0); if(action_sugar_grp1 == 'EditView'){ - a.innerHTML = "
    "; + a.innerHTML = "
    "; a.innerHTML += ""; } else{ a.innerHTML = fieldln +1; diff --git a/modules/AOS_Products_Quotes/Line_Items.php b/modules/AOS_Products_Quotes/Line_Items.php index 37db4fdffb8..87ad1c6d769 100755 --- a/modules/AOS_Products_Quotes/Line_Items.php +++ b/modules/AOS_Products_Quotes/Line_Items.php @@ -35,6 +35,7 @@ function display_lines($focus, $field, $value, $view){ $html .= ''; $html .= ''; diff --git a/modules/AOW_Conditions/conditionLines.js b/modules/AOW_Conditions/conditionLines.js index 50d0e8cd83e..5673191461d 100755 --- a/modules/AOW_Conditions/conditionLines.js +++ b/modules/AOW_Conditions/conditionLines.js @@ -205,7 +205,7 @@ function insertConditionLine(){ var a = x.insertCell(0); if(action_sugar_grp1 == 'EditView'){ - a.innerHTML = "
    "; + a.innerHTML = "
    "; a.innerHTML += ""; } else{ a.innerHTML = condln +1; From 96c95a5296666df5104ba28d9f0bda83e8ae8c7a Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 8 Dec 2013 18:10:35 +0000 Subject: [PATCH 016/223] fixed Undefined Variable $sugar_smarty in SugarView.php --- include/MVC/View/SugarView.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/MVC/View/SugarView.php b/include/MVC/View/SugarView.php index 7dd59abfd67..75eefbe25dd 100755 --- a/include/MVC/View/SugarView.php +++ b/include/MVC/View/SugarView.php @@ -624,7 +624,7 @@ public function displayHeader($retModTabs=false) ); } } - if(!empty($sugar_config['lock_homepage']) && $sugar_config['lock_homepage'] == true) $sugar_smarty->assign('lock_homepage', true); + if(!empty($sugar_config['lock_homepage']) && $sugar_config['lock_homepage'] == true) $ss->assign('lock_homepage', true); $ss->assign("groupTabs",$groupTabs); $ss->assign("shortcutTopMenu",$shortcutTopMenu); $ss->assign('USE_GROUP_TABS',$usingGroupTabs); From d8b6b458aa76a66f52da49d14a02223ed0e985f0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 8 Dec 2013 18:29:38 +0000 Subject: [PATCH 017/223] fixed Undefined variable in aor_utils.php --- modules/AOR_Reports/aor_utils.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/AOR_Reports/aor_utils.php b/modules/AOR_Reports/aor_utils.php index a58023a6253..b8743086b5a 100755 --- a/modules/AOR_Reports/aor_utils.php +++ b/modules/AOR_Reports/aor_utils.php @@ -265,10 +265,10 @@ function getModuleField($module, $fieldname, $aor_field, $view='EditView',$value require_once($beanFiles[$beanList[$module]]); $focus = new $beanList[$module]; // create the dropdowns for the parent type fields - if ( $vardef['type'] == 'parent_type' ) { - $focus->field_defs[$vardef['name']]['options'] = $focus->field_defs[$vardef['group']]['options']; - } $vardefFields = $focus->getFieldDefinitions(); + if ( $vardefFields[$fieldname]['type'] == 'parent_type' ) { + $focus->field_defs[$fieldname]['options'] = $focus->field_defs[$vardefFields[$fieldname]['group']]['options']; + } foreach ( $vardefFields as $name => $properties ) { $fieldlist[$name] = $properties; // fill in enums From 8570a32371501cb1d1afe46cf51c643e53454fb9 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 8 Dec 2013 18:42:18 +0000 Subject: [PATCH 018/223] fixed sort by issue in reports --- modules/AOR_Reports/AOR_Report.php | 35 +++++------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/modules/AOR_Reports/AOR_Report.php b/modules/AOR_Reports/AOR_Report.php index 0e07496e111..f641639d5b0 100755 --- a/modules/AOR_Reports/AOR_Report.php +++ b/modules/AOR_Reports/AOR_Report.php @@ -228,7 +228,7 @@ function build_report_html($offset = -1, $links = true){ $field_alias = $rel; } } - $label = $field->label.$i; + $label = str_replace(' ','_',$field->label).$i; $fields[$label]['field'] = $field->field; $fields[$label]['display'] = $field->display; $fields[$label]['function'] = $field->function; @@ -317,7 +317,7 @@ function build_report_csv(){ $field_module = getRelatedModule($field_module,$rel); } } - $label = $field->label.$i; + $label = str_replace(' ','_',$field->label).$i; $fields[$label]['field'] = $field->field; $fields[$label]['display'] = $field->display; $fields[$label]['function'] = $field->function; @@ -434,6 +434,8 @@ function build_report_query_select($query = array()){ $field = new AOR_Field(); $field->retrieve($row['id']); + $field->label = str_replace(' ','_',$field->label).$i; + $path = unserialize(base64_decode($field->module_path)); $field_module = $module; @@ -460,7 +462,7 @@ function build_report_query_select($query = array()){ } if($field->sort_by != ''){ - $query['sort_by'][] = $field->label.$i.' '.$field->sort_by; + $query['sort_by'][] = $field->label.' '.$field->sort_by; } if($field->group_by == 1){ @@ -471,7 +473,7 @@ function build_report_query_select($query = array()){ $select_field = $field->function.'('.$select_field.')'; } - $query['select'][] = $select_field ." AS '".$field->label.$i."'"; + $query['select'][] = $select_field ." AS '".$field->label."'"; ++$i; } } @@ -633,29 +635,4 @@ function build_report_query_where($query = array()){ } } - -/*$field_array = array(); - -$field_array[0] = $select_field; -$field_array[1] = $field->label; -$field_array[2] = $field->display == 1 ? 'yes' : 'no'; -$field_array[3] = $field->sort_by; -$field_array[4] = $field->sort_order; -$field_array[5] = ($field->function != null ? $field->function : '0') .'${comma}'; -$field_array[6] = $field->group_by == 1 ? 'Grouped' : '0'; -$field_array[7] = $field->group_order; -$field_array[8] = $data['type']; -$field_array[9] = ''; //relationship -$field_array[10] = 'false'; //rel? -$field_array[11] = ''; //? - -if(isset($data['options']) && $data['options'] != ''){ - $field_array[12] = 'options'; - $field_array[13] = $data['options']; -} else { - $field_array[12] = ''; - $field_array[13] = ''; -} - -$select[] = $field_array;*/ ?> From d7914dbb6b611cbd7e5aebdeea91871670a6e96b Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 27 Dec 2013 16:57:44 +0000 Subject: [PATCH 019/223] fixed wrong field name billing account in quotes/invoices dashlet search defs --- modules/AOS_Invoices/metadata/dashletviewdefs.php | 2 +- modules/AOS_Quotes/metadata/dashletviewdefs.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/AOS_Invoices/metadata/dashletviewdefs.php b/modules/AOS_Invoices/metadata/dashletviewdefs.php index afc8d7253a8..f6e6361eab2 100755 --- a/modules/AOS_Invoices/metadata/dashletviewdefs.php +++ b/modules/AOS_Invoices/metadata/dashletviewdefs.php @@ -33,7 +33,7 @@ array( 'default' => '' ), -'billing account' => +'billing_account' => array( 'default' => '' ), diff --git a/modules/AOS_Quotes/metadata/dashletviewdefs.php b/modules/AOS_Quotes/metadata/dashletviewdefs.php index bee5b899421..78031326543 100755 --- a/modules/AOS_Quotes/metadata/dashletviewdefs.php +++ b/modules/AOS_Quotes/metadata/dashletviewdefs.php @@ -36,7 +36,7 @@ array( 'default' => '' ), -'billing account' => +'billing_account' => array( 'default' => '' ), From 0132e467535c2a97894adf2b411f885b7cb04b02 Mon Sep 17 00:00:00 2001 From: Will Date: Tue, 7 Jan 2014 17:05:51 +0000 Subject: [PATCH 020/223] Fixed: Calls_Reschedule in search - translation issue Prospects (modules\jjwg_Maps\views\view.geocoded_counts.php) - translation issue AOS Settings - in AOSAdmin - translation issue edit - in AOSAdmin - translation issue days - in AOSAdmin - translation issue Single User - in Portal Settings - translation issue back to top button - in each module - translation issue More on top menu - translation issue --- .../Language/en_us.Advanced OpenEvents.php | 3 + .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../Ext/Administration/AOSAdmin.php | 6 +- .../Ext/Language/en_us.AOPAdmin.php | 1 + .../Ext/Language/en_us.AdvancedOpenSales.php | 6 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../sugarfield_jjwg_maps_address_c.php | 2 +- .../sugarfield_jjwg_maps_geocode_status_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lat_c.php | 2 +- .../Vardefs/sugarfield_jjwg_maps_lng_c.php | 2 +- .../entry_point_registry.ext.php | 10 +- .../application/Ext/Include/modules.ext.php | 142 ++--- .../Ext/Language/en_us.lang.ext.php | 504 +++++++++--------- .../TableDictionary/tabledictionary.ext.php | 34 +- custom/modules/Administration/AOSAdmin.tpl | 2 +- .../Connectors/metadata/display_config.php | 2 +- include/MVC/View/SugarView.php | 1 - include/language/en_us.lang.php | 1 + .../Calls_Reschedule/metadata/searchdefs.php | 2 +- .../jjwg_Maps/views/view.geocoded_counts.php | 8 +- themes/Suite7/tpls/_headerModuleList.tpl | 2 +- themes/Suite7/tpls/footer.tpl | 2 +- 48 files changed, 400 insertions(+), 390 deletions(-) diff --git a/custom/Extension/application/Ext/Language/en_us.Advanced OpenEvents.php b/custom/Extension/application/Ext/Language/en_us.Advanced OpenEvents.php index 436c5133928..b7d45ac9950 100755 --- a/custom/Extension/application/Ext/Language/en_us.Advanced OpenEvents.php +++ b/custom/Extension/application/Ext/Language/en_us.Advanced OpenEvents.php @@ -49,3 +49,6 @@ $app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; $app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; +$app_strings['LBL_LISTVIEW_OPTION_CURRENT'] = 'Select This Page'; +$app_strings['LBL_LISTVIEW_OPTION_ENTIRE'] = 'Select All'; +$app_strings['LBL_LISTVIEW_NONE'] = 'Deselect All'; \ No newline at end of file diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index b4183934d3b..42f13b3fbb5 100755 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index 33f36befe87..42f13b3fbb5 100755 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index 33f36befe87..42f13b3fbb5 100755 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index 0eb001001e3..9ef60b8532a 100755 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Administration/Ext/Administration/AOSAdmin.php b/custom/Extension/modules/Administration/Ext/Administration/AOSAdmin.php index 141ab1e9198..543c9596672 100755 --- a/custom/Extension/modules/Administration/Ext/Administration/AOSAdmin.php +++ b/custom/Extension/modules/Administration/Ext/Administration/AOSAdmin.php @@ -1,9 +1,9 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index b9dd98b29f7..872985bfd0f 100755 --- a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index b9dd98b29f7..0dc3cdce7cb 100755 --- a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index b4183934d3b..0dc3cdce7cb 100755 --- a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index 8df977a14a9..d4329842636 100755 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index 8df977a14a9..d4329842636 100755 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index 38f91bf3983..6acd9fdf569 100755 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index 38f91bf3983..6acd9fdf569 100755 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index d71474382b5..67aec7692f5 100755 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index 9881901c3e5..3c0e90f4d9d 100755 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index 9881901c3e5..9e06aa806ad 100755 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index 9881901c3e5..9e06aa806ad 100755 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index b8c262d0fc5..0086a1c21cd 100755 --- a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index 24796217b3e..0086a1c21cd 100755 --- a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index 24796217b3e..7840d1b36e7 100755 --- a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index d71474382b5..67aec7692f5 100755 --- a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index dba816b71ce..c7d505b3ebb 100755 --- a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index dba816b71ce..c7d505b3ebb 100755 --- a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index dba816b71ce..93f9bf62844 100755 --- a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index b8c262d0fc5..93f9bf62844 100755 --- a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index b2fefe76a8b..1fe98ff0eb8 100755 --- a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index b2fefe76a8b..1fe98ff0eb8 100755 --- a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index 85e6ae71550..14377990653 100755 --- a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index 85e6ae71550..14377990653 100755 --- a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php index a52cc2cc205..3fccf8ec221 100755 --- a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php +++ b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_address_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php index a52cc2cc205..8bd80272b4b 100755 --- a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php +++ b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_geocode_status_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php index 024d1800c7d..8bd80272b4b 100755 --- a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php +++ b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lat_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php index 024d1800c7d..8bd80272b4b 100755 --- a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php +++ b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_jjwg_maps_lng_c.php @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php b/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php index e1ccad19bb9..f25584926c7 100755 --- a/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php +++ b/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php @@ -1,15 +1,15 @@ 'modules/FP_events/responseEntryPoint.php', + 'auth' => false + ); $entry_point_registry['QuickCRMgetConfig'] = array( 'file' => 'custom/QuickCRM/getConfig.php', 'auth' => false ); - - $entry_point_registry['responseEntryPoint'] = array( - 'file' => 'modules/FP_events/responseEntryPoint.php', - 'auth' => false - ); ?> \ No newline at end of file diff --git a/custom/application/Ext/Include/modules.ext.php b/custom/application/Ext/Include/modules.ext.php index 57f65f4b44e..8667ebe8688 100755 --- a/custom/application/Ext/Include/modules.ext.php +++ b/custom/application/Ext/Include/modules.ext.php @@ -2,37 +2,6 @@ //WARNING: The contents of this file are auto-generated - //WARNING: The contents of this file are auto-generated -$beanList['AOW_Actions'] = 'AOW_Action'; -$beanFiles['AOW_Action'] = 'modules/AOW_Actions/AOW_Action.php'; -$modules_exempt_from_availability_check['AOW_Actions'] = 'AOW_Actions'; -$report_include_modules['AOW_Actions'] = 'AOW_Actions'; -$modInvisList[] = 'AOW_Actions'; -$beanList['AOW_WorkFlow'] = 'AOW_WorkFlow'; -$beanFiles['AOW_WorkFlow'] = 'modules/AOW_WorkFlow/AOW_WorkFlow.php'; -$moduleList[] = 'AOW_WorkFlow'; -$beanList['AOW_Processed'] = 'AOW_Processed'; -$beanFiles['AOW_Processed'] = 'modules/AOW_Processed/AOW_Processed.php'; -$modules_exempt_from_availability_check['AOW_Processed'] = 'AOW_Processed'; -$report_include_modules['AOW_Processed'] = 'AOW_Processed'; -$modInvisList[] = 'AOW_Processed'; -$beanList['AOW_Conditions'] = 'AOW_Condition'; -$beanFiles['AOW_Condition'] = 'modules/AOW_Conditions/AOW_Condition.php'; -$modules_exempt_from_availability_check['AOW_Conditions'] = 'AOW_Conditions'; -$report_include_modules['AOW_Conditions'] = 'AOW_Conditions'; -$modInvisList[] = 'AOW_Conditions'; - - - - //WARNING: The contents of this file are auto-generated -$beanList['Calls_Reschedule'] = 'Calls_Reschedule'; -$beanFiles['Calls_Reschedule'] = 'modules/Calls_Reschedule/Calls_Reschedule.php'; -$modules_exempt_from_availability_check['Calls_Reschedule'] = 'Calls_Reschedule'; -$report_include_modules['Calls_Reschedule'] = 'Calls_Reschedule'; -$modInvisList[] = 'Calls_Reschedule'; - - - //WARNING: The contents of this file are auto-generated $beanList['jjwg_Maps'] = 'jjwg_Maps'; $beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; @@ -49,6 +18,38 @@ + //WARNING: The contents of this file are auto-generated +$beanList['FP_events'] = 'FP_events'; +$beanFiles['FP_events'] = 'modules/FP_events/FP_events.php'; +$moduleList[] = 'FP_events'; +$beanList['FP_Event_Locations'] = 'FP_Event_Locations'; +$beanFiles['FP_Event_Locations'] = 'modules/FP_Event_Locations/FP_Event_Locations.php'; +$moduleList[] = 'FP_Event_Locations'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['AOR_Reports'] = 'AOR_Report'; +$beanFiles['AOR_Report'] = 'modules/AOR_Reports/AOR_Report.php'; +$moduleList[] = 'AOR_Reports'; +$beanList['AOR_Fields'] = 'AOR_Field'; +$beanFiles['AOR_Field'] = 'modules/AOR_Fields/AOR_Field.php'; +$modules_exempt_from_availability_check['AOR_Fields'] = 'AOR_Fields'; +$report_include_modules['AOR_Fields'] = 'AOR_Fields'; +$modInvisList[] = 'AOR_Fields'; +$beanList['AOR_Charts'] = 'AOR_Chart'; +$beanFiles['AOR_Chart'] = 'modules/AOR_Charts/AOR_Chart.php'; +$modules_exempt_from_availability_check['AOR_Charts'] = 'AOR_Charts'; +$report_include_modules['AOR_Charts'] = 'AOR_Charts'; +$modInvisList[] = 'AOR_Charts'; +$beanList['AOR_Conditions'] = 'AOR_Condition'; +$beanFiles['AOR_Condition'] = 'modules/AOR_Conditions/AOR_Condition.php'; +$modules_exempt_from_availability_check['AOR_Conditions'] = 'AOR_Conditions'; +$report_include_modules['AOR_Conditions'] = 'AOR_Conditions'; +$modInvisList[] = 'AOR_Conditions'; + + + //WARNING: The contents of this file are auto-generated $beanList['AOS_Contracts'] = 'AOS_Contracts'; $beanFiles['AOS_Contracts'] = 'modules/AOS_Contracts/AOS_Contracts.php'; @@ -81,28 +82,6 @@ - //WARNING: The contents of this file are auto-generated -$beanList['AOR_Reports'] = 'AOR_Report'; -$beanFiles['AOR_Report'] = 'modules/AOR_Reports/AOR_Report.php'; -$moduleList[] = 'AOR_Reports'; -$beanList['AOR_Fields'] = 'AOR_Field'; -$beanFiles['AOR_Field'] = 'modules/AOR_Fields/AOR_Field.php'; -$modules_exempt_from_availability_check['AOR_Fields'] = 'AOR_Fields'; -$report_include_modules['AOR_Fields'] = 'AOR_Fields'; -$modInvisList[] = 'AOR_Fields'; -$beanList['AOR_Charts'] = 'AOR_Chart'; -$beanFiles['AOR_Chart'] = 'modules/AOR_Charts/AOR_Chart.php'; -$modules_exempt_from_availability_check['AOR_Charts'] = 'AOR_Charts'; -$report_include_modules['AOR_Charts'] = 'AOR_Charts'; -$modInvisList[] = 'AOR_Charts'; -$beanList['AOR_Conditions'] = 'AOR_Condition'; -$beanFiles['AOR_Condition'] = 'modules/AOR_Conditions/AOR_Condition.php'; -$modules_exempt_from_availability_check['AOR_Conditions'] = 'AOR_Conditions'; -$report_include_modules['AOR_Conditions'] = 'AOR_Conditions'; -$modInvisList[] = 'AOR_Conditions'; - - - //WARNING: The contents of this file are auto-generated $beanList['SecurityGroups'] = 'SecurityGroup'; $beanFiles['SecurityGroup'] = 'modules/SecurityGroups/SecurityGroup.php'; @@ -111,12 +90,18 @@ //WARNING: The contents of this file are auto-generated -$beanList['FP_events'] = 'FP_events'; -$beanFiles['FP_events'] = 'modules/FP_events/FP_events.php'; -$moduleList[] = 'FP_events'; -$beanList['FP_Event_Locations'] = 'FP_Event_Locations'; -$beanFiles['FP_Event_Locations'] = 'modules/FP_Event_Locations/FP_Event_Locations.php'; -$moduleList[] = 'FP_Event_Locations'; +$beanList['jjwg_Maps'] = 'jjwg_Maps'; +$beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; +$moduleList[] = 'jjwg_Maps'; +$beanList['jjwg_Markers'] = 'jjwg_Markers'; +$beanFiles['jjwg_Markers'] = 'modules/jjwg_Markers/jjwg_Markers.php'; +$moduleList[] = 'jjwg_Markers'; +$beanList['jjwg_Areas'] = 'jjwg_Areas'; +$beanFiles['jjwg_Areas'] = 'modules/jjwg_Areas/jjwg_Areas.php'; +$moduleList[] = 'jjwg_Areas'; +$beanList['jjwg_Address_Cache'] = 'jjwg_Address_Cache'; +$beanFiles['jjwg_Address_Cache'] = 'modules/jjwg_Address_Cache/jjwg_Address_Cache.php'; +$moduleList[] = 'jjwg_Address_Cache'; @@ -135,18 +120,33 @@ //WARNING: The contents of this file are auto-generated -$beanList['jjwg_Maps'] = 'jjwg_Maps'; -$beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; -$moduleList[] = 'jjwg_Maps'; -$beanList['jjwg_Markers'] = 'jjwg_Markers'; -$beanFiles['jjwg_Markers'] = 'modules/jjwg_Markers/jjwg_Markers.php'; -$moduleList[] = 'jjwg_Markers'; -$beanList['jjwg_Areas'] = 'jjwg_Areas'; -$beanFiles['jjwg_Areas'] = 'modules/jjwg_Areas/jjwg_Areas.php'; -$moduleList[] = 'jjwg_Areas'; -$beanList['jjwg_Address_Cache'] = 'jjwg_Address_Cache'; -$beanFiles['jjwg_Address_Cache'] = 'modules/jjwg_Address_Cache/jjwg_Address_Cache.php'; -$moduleList[] = 'jjwg_Address_Cache'; +$beanList['Calls_Reschedule'] = 'Calls_Reschedule'; +$beanFiles['Calls_Reschedule'] = 'modules/Calls_Reschedule/Calls_Reschedule.php'; +$modules_exempt_from_availability_check['Calls_Reschedule'] = 'Calls_Reschedule'; +$report_include_modules['Calls_Reschedule'] = 'Calls_Reschedule'; +$modInvisList[] = 'Calls_Reschedule'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['AOW_Actions'] = 'AOW_Action'; +$beanFiles['AOW_Action'] = 'modules/AOW_Actions/AOW_Action.php'; +$modules_exempt_from_availability_check['AOW_Actions'] = 'AOW_Actions'; +$report_include_modules['AOW_Actions'] = 'AOW_Actions'; +$modInvisList[] = 'AOW_Actions'; +$beanList['AOW_WorkFlow'] = 'AOW_WorkFlow'; +$beanFiles['AOW_WorkFlow'] = 'modules/AOW_WorkFlow/AOW_WorkFlow.php'; +$moduleList[] = 'AOW_WorkFlow'; +$beanList['AOW_Processed'] = 'AOW_Processed'; +$beanFiles['AOW_Processed'] = 'modules/AOW_Processed/AOW_Processed.php'; +$modules_exempt_from_availability_check['AOW_Processed'] = 'AOW_Processed'; +$report_include_modules['AOW_Processed'] = 'AOW_Processed'; +$modInvisList[] = 'AOW_Processed'; +$beanList['AOW_Conditions'] = 'AOW_Condition'; +$beanFiles['AOW_Condition'] = 'modules/AOW_Conditions/AOW_Condition.php'; +$modules_exempt_from_availability_check['AOW_Conditions'] = 'AOW_Conditions'; +$report_include_modules['AOW_Conditions'] = 'AOW_Conditions'; +$modInvisList[] = 'AOW_Conditions'; ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/en_us.lang.ext.php b/custom/application/Ext/Language/en_us.lang.ext.php index d20263701e0..0f334e12e8d 100755 --- a/custom/application/Ext/Language/en_us.lang.ext.php +++ b/custom/application/Ext/Language/en_us.lang.ext.php @@ -1,116 +1,6 @@ - */ - -$app_list_strings['call_reschedule_dom'][''] = ''; -$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Out of Office'; -$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'In a Meeting'; - -$app_strings['LBL_RESCHEDULE_LABEL'] = 'Reschedule'; -$app_strings['LBL_RESCHEDULE_TITLE'] = 'Please enter the reschedule information'; -$app_strings['LBL_RESCHEDULE_DATE'] = 'Date:'; -$app_strings['LBL_RESCHEDULE_REASON'] = 'Reason:'; -$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Please select a valid date'; -$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Please select a reason'; - -$app_strings['LBL_RESCHEDULE_PANEL'] = 'Reschedule'; -$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Call attempt history'; -$app_strings['LBL_RESCHEDULE_COUNT'] = 'Call Attempts'; - - - - -/** - * Advanced OpenReports, SugarCRM Reporting. - * @package Advanced OpenReports for SugarCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author SalesAgility - */ - - -$app_list_strings['moduleList']['AOR_Reports'] = 'Reports'; -$app_list_strings['moduleList']['AOR_Conditions'] = 'Report Conditions'; -$app_list_strings['moduleList']['AOR_Charts'] = 'Report Charts'; -$app_list_strings['moduleList']['AOR_Fields'] = 'Report Fields'; -$app_list_strings['aor_operator_list']['Equal_To'] = 'Equal To'; -$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'Not Equal To'; -$app_list_strings['aor_operator_list']['Greater_Than'] = 'Greater Than'; -$app_list_strings['aor_operator_list']['Less_Than'] = 'Less Than'; -$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Greater Than or Equal To'; -$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Less Than or Equal To'; -$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; -$app_list_strings['aor_condition_operator_list']['And'] = 'And'; -$app_list_strings['aor_condition_operator_list']['OR'] = 'OR'; -$app_list_strings['aor_condition_type_list']['Value'] = 'Value'; -$app_list_strings['aor_condition_type_list']['Field'] = 'Field'; -$app_list_strings['aor_condition_type_list']['Date'] = 'Date'; -$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; -$app_list_strings['aor_date_type_list'][''] = ''; -$app_list_strings['aor_date_type_list']['minute'] = 'Minutes'; -$app_list_strings['aor_date_type_list']['hour'] = 'Hours'; -$app_list_strings['aor_date_type_list']['day'] = 'Days'; -$app_list_strings['aor_date_type_list']['week'] = 'Weeks'; -$app_list_strings['aor_date_type_list']['month'] = 'Months'; -$app_list_strings['aor_date_type_list']['business_hours'] = 'Business Hours'; -$app_list_strings['aor_date_options']['now'] = 'Now'; -$app_list_strings['aor_date_options']['field'] = 'This Field'; -$app_list_strings['aor_date_operator']['now'] = ''; -$app_list_strings['aor_date_operator']['plus'] = '+'; -$app_list_strings['aor_date_operator']['minus'] = '-'; -$app_list_strings['aor_sort_operator'][''] = ''; -$app_list_strings['aor_sort_operator']['ASC'] = 'Ascending'; -$app_list_strings['aor_sort_operator']['DESC'] = 'Descending'; -$app_list_strings['aor_function_list'][''] = ''; -$app_list_strings['aor_function_list']['COUNT'] = 'Count'; -$app_list_strings['aor_function_list']['MIN'] = 'Minimum'; -$app_list_strings['aor_function_list']['MAX'] = 'Maximum'; -$app_list_strings['aor_function_list']['SUM'] = 'Sum'; -$app_list_strings['aor_function_list']['AVG'] = 'Average'; $app_strings['LBL_MAP'] = 'Map'; @@ -400,58 +290,6 @@ $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; -/********************************************************************************* - * SugarCRM Community Edition is a customer relationship management program developed by - * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Affero General Public License version 3 as published by the - * Free Software Foundation with the addition of the following permission added - * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK - * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY - * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more - * details. - * - * You should have received a copy of the GNU Affero General Public License along with - * this program; if not, see http://www.gnu.org/licenses or write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA. - * - * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, - * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. - * - * The interactive user interfaces in modified source and object code versions - * of this program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU Affero General Public License version 3. - * - * In accordance with Section 7(b) of the GNU Affero General Public License version 3, - * these Appropriate Legal Notices must retain the display of the "Powered by - * SugarCRM" logo. If the display of the logo is not reasonably feasible for - * technical reasons, the Appropriate Legal Notices must display the words - * "Powered by SugarCRM". - ********************************************************************************/ - - -$app_list_strings['moduleList']['FP_events'] = 'Events'; -$app_list_strings['moduleList']['FP_Event_Locations'] = 'Locations'; -$app_list_strings['invite_template_list'][''] = ''; - -$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invited'; -$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'Not Invited'; -$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Attended'; -$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'Not Attended'; -$app_list_strings['fp_event_status_dom']['Accepted'] = 'Accepted'; -$app_list_strings['fp_event_status_dom']['Declined'] = 'Declined'; -$app_list_strings['fp_event_status_dom']['No Response'] = 'No Response'; - -$app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; -$app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; - - $app_strings['LBL_MAP'] = 'Map'; $app_strings['LBL_MAPS'] = 'Maps'; @@ -739,18 +577,10 @@ $app_list_strings['marker_image_list']['world_heritage_site'] = 'World Heritage Site'; $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; - - -$app_list_strings["moduleList"]["SecurityGroups"] = 'Security Groups Management'; -$app_strings['LBL_LOGIN_AS'] = "Login as "; -$app_strings['LBL_LOGOUT_AS'] = "Logout as "; - - /** - * Products, Quotations & Invoices modules. * Extensions to SugarCRM - * @package Advanced OpenSales for SugarCRM + * @package Reschedule for SugarCRM * @subpackage Products * @copyright SalesAgility Ltd http://www.salesagility.com * @@ -772,89 +602,92 @@ * @author Salesagility Ltd */ -$app_list_strings['moduleList']['AOS_Contracts'] = 'Contracts'; -$app_list_strings['moduleList']['AOS_Invoices'] = 'Invoices'; -$app_list_strings['moduleList']['AOS_PDF_Templates'] = 'PDF Templates'; -$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Product Categories'; -$app_list_strings['moduleList']['AOS_Products'] = 'Products'; -$app_list_strings['moduleList']['AOS_Products_Quotes'] = 'Line Items'; -$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Line Item Groups'; -$app_list_strings['moduleList']['AOS_Quotes'] = 'Quotes'; -$app_list_strings['aos_quotes_type_dom'][''] = ''; -$app_list_strings['aos_quotes_type_dom']['Analyst'] = 'Analyst'; -$app_list_strings['aos_quotes_type_dom']['Competitor'] = 'Competitor'; -$app_list_strings['aos_quotes_type_dom']['Customer'] = 'Customer'; -$app_list_strings['aos_quotes_type_dom']['Integrator'] = 'Integrator'; -$app_list_strings['aos_quotes_type_dom']['Investor'] = 'Investor'; -$app_list_strings['aos_quotes_type_dom']['Partner'] = 'Partner'; -$app_list_strings['aos_quotes_type_dom']['Press'] = 'Press'; -$app_list_strings['aos_quotes_type_dom']['Prospect'] = 'Prospect'; -$app_list_strings['aos_quotes_type_dom']['Reseller'] = 'Reseller'; -$app_list_strings['aos_quotes_type_dom']['Other'] = 'Other'; -$app_list_strings['template_ddown_c_list'][''] = ''; -$app_list_strings['quote_stage_dom']['Draft'] = 'Draft'; -$app_list_strings['quote_stage_dom']['Negotiation'] = 'Negotiation'; -$app_list_strings['quote_stage_dom']['Delivered'] = 'Delivered'; -$app_list_strings['quote_stage_dom']['On Hold'] = 'On Hold'; -$app_list_strings['quote_stage_dom']['Confirmed'] = 'Confirmed'; -$app_list_strings['quote_stage_dom']['Closed Accepted'] = 'Closed Accepted'; -$app_list_strings['quote_stage_dom']['Closed Lost'] = 'Closed Lost'; -$app_list_strings['quote_stage_dom']['Closed Dead'] = 'Closed Dead'; -$app_list_strings['quote_term_dom']['Net 15'] = 'Nett 15'; -$app_list_strings['quote_term_dom']['Net 30'] = 'Nett 30'; -$app_list_strings['quote_term_dom'][''] = ''; -$app_list_strings['approval_status_dom']['Approved'] = 'Approved'; -$app_list_strings['approval_status_dom']['Not Approved'] = 'Not Approved'; -$app_list_strings['approval_status_dom'][''] = ''; -$app_list_strings['vat_list']['0.0'] = '0%'; -$app_list_strings['vat_list']['5.0'] = '5%'; -$app_list_strings['vat_list']['7.5'] = '7.5%'; -$app_list_strings['vat_list']['17.5'] = '17.5%'; -$app_list_strings['vat_list']['20.0'] = '20%'; -$app_list_strings['discount_list']['Percentage'] = 'Pct'; -$app_list_strings['discount_list']['Amount'] = 'Amt'; -$app_list_strings['aos_invoices_type_dom'][''] = ''; -$app_list_strings['aos_invoices_type_dom']['Analyst'] = 'Analyst'; -$app_list_strings['aos_invoices_type_dom']['Competitor'] = 'Competitor'; -$app_list_strings['aos_invoices_type_dom']['Customer'] = 'Customer'; -$app_list_strings['aos_invoices_type_dom']['Integrator'] = 'Integrator'; -$app_list_strings['aos_invoices_type_dom']['Investor'] = 'Investor'; -$app_list_strings['aos_invoices_type_dom']['Partner'] = 'Partner'; -$app_list_strings['aos_invoices_type_dom']['Press'] = 'Press'; -$app_list_strings['aos_invoices_type_dom']['Prospect'] = 'Prospect'; -$app_list_strings['aos_invoices_type_dom']['Reseller'] = 'Reseller'; -$app_list_strings['aos_invoices_type_dom']['Other'] = 'Other'; -$app_list_strings['invoice_status_dom']['Paid'] = 'Paid'; -$app_list_strings['invoice_status_dom']['Unpaid'] = 'Unpaid'; -$app_list_strings['invoice_status_dom']['Cancelled'] = 'Cancelled'; -$app_list_strings['invoice_status_dom'][''] = ''; -$app_list_strings['quote_invoice_status_dom']['Not Invoiced'] = 'Not Invoiced'; -$app_list_strings['quote_invoice_status_dom']['Invoiced'] = 'Invoiced'; -$app_list_strings['product_code_dom']['XXXX'] = 'XXXX'; -$app_list_strings['product_code_dom']['YYYY'] = 'YYYY'; -$app_list_strings['product_category_dom']['Laptops'] = 'Laptops'; -$app_list_strings['product_category_dom']['Desktops'] = 'Desktops'; -$app_list_strings['product_category_dom'][''] = ''; -$app_list_strings['product_type_dom']['Good'] = 'Good'; -$app_list_strings['product_type_dom']['Service'] = 'Service'; -$app_list_strings['product_quote_parent_type_dom']['AOS_Quotes'] = 'Quotes'; -$app_list_strings['product_quote_parent_type_dom']['AOS_Invoices'] = 'Invoices'; -$app_list_strings['pdf_template_type_dom']['AOS_Quotes'] = 'Quotes'; -$app_list_strings['pdf_template_type_dom']['AOS_Invoices'] = 'Invoices'; -$app_list_strings['pdf_template_type_dom']['Accounts'] = 'Accounts'; -$app_list_strings['pdf_template_type_dom']['Contacts'] = 'Contacts'; -$app_list_strings['pdf_template_type_dom']['Leads'] = 'Leads'; -$app_list_strings['pdf_template_sample_dom'][''] = ''; -$app_list_strings['contract_status_list']['Not Started'] = 'Not Started'; -$app_list_strings['contract_status_list']['In Progress'] = 'In Progress'; -$app_list_strings['contract_status_list']['Signed'] = 'Signed'; -$app_list_strings['contract_type_list']['Type'] = 'Type'; -$app_strings['LBL_GENERATE_LETTER'] = 'Generate Letter'; -$app_strings['LBL_SELECT_TEMPLATE'] = 'Please Select a Template'; -$app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo templates found.\nPlease go to the PDF templates module and create one'; +$app_list_strings['call_reschedule_dom'][''] = ''; +$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Out of Office'; +$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'In a Meeting'; + +$app_strings['LBL_RESCHEDULE_LABEL'] = 'Reschedule'; +$app_strings['LBL_RESCHEDULE_TITLE'] = 'Please enter the reschedule information'; +$app_strings['LBL_RESCHEDULE_DATE'] = 'Date:'; +$app_strings['LBL_RESCHEDULE_REASON'] = 'Reason:'; +$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Please select a valid date'; +$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Please select a reason'; + +$app_strings['LBL_RESCHEDULE_PANEL'] = 'Reschedule'; +$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Call attempt history'; +$app_strings['LBL_RESCHEDULE_COUNT'] = 'Call Attempts'; + +/** + * Advanced OpenReports, SugarCRM Reporting. + * @package Advanced OpenReports for SugarCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + + +$app_list_strings['moduleList']['AOR_Reports'] = 'Reports'; +$app_list_strings['moduleList']['AOR_Conditions'] = 'Report Conditions'; +$app_list_strings['moduleList']['AOR_Charts'] = 'Report Charts'; +$app_list_strings['moduleList']['AOR_Fields'] = 'Report Fields'; +$app_list_strings['aor_operator_list']['Equal_To'] = 'Equal To'; +$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'Not Equal To'; +$app_list_strings['aor_operator_list']['Greater_Than'] = 'Greater Than'; +$app_list_strings['aor_operator_list']['Less_Than'] = 'Less Than'; +$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Greater Than or Equal To'; +$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Less Than or Equal To'; +$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aor_condition_operator_list']['And'] = 'And'; +$app_list_strings['aor_condition_operator_list']['OR'] = 'OR'; +$app_list_strings['aor_condition_type_list']['Value'] = 'Value'; +$app_list_strings['aor_condition_type_list']['Field'] = 'Field'; +$app_list_strings['aor_condition_type_list']['Date'] = 'Date'; +$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aor_date_type_list'][''] = ''; +$app_list_strings['aor_date_type_list']['minute'] = 'Minutes'; +$app_list_strings['aor_date_type_list']['hour'] = 'Hours'; +$app_list_strings['aor_date_type_list']['day'] = 'Days'; +$app_list_strings['aor_date_type_list']['week'] = 'Weeks'; +$app_list_strings['aor_date_type_list']['month'] = 'Months'; +$app_list_strings['aor_date_type_list']['business_hours'] = 'Business Hours'; +$app_list_strings['aor_date_options']['now'] = 'Now'; +$app_list_strings['aor_date_options']['field'] = 'This Field'; +$app_list_strings['aor_date_operator']['now'] = ''; +$app_list_strings['aor_date_operator']['plus'] = '+'; +$app_list_strings['aor_date_operator']['minus'] = '-'; +$app_list_strings['aor_sort_operator'][''] = ''; +$app_list_strings['aor_sort_operator']['ASC'] = 'Ascending'; +$app_list_strings['aor_sort_operator']['DESC'] = 'Descending'; +$app_list_strings['aor_function_list'][''] = ''; +$app_list_strings['aor_function_list']['COUNT'] = 'Count'; +$app_list_strings['aor_function_list']['MIN'] = 'Minimum'; +$app_list_strings['aor_function_list']['MAX'] = 'Maximum'; +$app_list_strings['aor_function_list']['SUM'] = 'Sum'; +$app_list_strings['aor_function_list']['AVG'] = 'Average'; + /** * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM @@ -985,4 +818,173 @@ 'Closed_Rejected' => 'Rejected', 'Closed_Duplicate' => 'Duplicate', ); + + +$app_list_strings["moduleList"]["SecurityGroups"] = 'Security Groups Management'; +$app_strings['LBL_LOGIN_AS'] = "Login as "; +$app_strings['LBL_LOGOUT_AS'] = "Logout as "; + + + +/** + * Products, Quotations & Invoices modules. + * Extensions to SugarCRM + * @package Advanced OpenSales for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$app_list_strings['moduleList']['AOS_Contracts'] = 'Contracts'; +$app_list_strings['moduleList']['AOS_Invoices'] = 'Invoices'; +$app_list_strings['moduleList']['AOS_PDF_Templates'] = 'PDF Templates'; +$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Product Categories'; +$app_list_strings['moduleList']['AOS_Products'] = 'Products'; +$app_list_strings['moduleList']['AOS_Products_Quotes'] = 'Line Items'; +$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Line Item Groups'; +$app_list_strings['moduleList']['AOS_Quotes'] = 'Quotes'; +$app_list_strings['aos_quotes_type_dom'][''] = ''; +$app_list_strings['aos_quotes_type_dom']['Analyst'] = 'Analyst'; +$app_list_strings['aos_quotes_type_dom']['Competitor'] = 'Competitor'; +$app_list_strings['aos_quotes_type_dom']['Customer'] = 'Customer'; +$app_list_strings['aos_quotes_type_dom']['Integrator'] = 'Integrator'; +$app_list_strings['aos_quotes_type_dom']['Investor'] = 'Investor'; +$app_list_strings['aos_quotes_type_dom']['Partner'] = 'Partner'; +$app_list_strings['aos_quotes_type_dom']['Press'] = 'Press'; +$app_list_strings['aos_quotes_type_dom']['Prospect'] = 'Prospect'; +$app_list_strings['aos_quotes_type_dom']['Reseller'] = 'Reseller'; +$app_list_strings['aos_quotes_type_dom']['Other'] = 'Other'; +$app_list_strings['template_ddown_c_list'][''] = ''; +$app_list_strings['quote_stage_dom']['Draft'] = 'Draft'; +$app_list_strings['quote_stage_dom']['Negotiation'] = 'Negotiation'; +$app_list_strings['quote_stage_dom']['Delivered'] = 'Delivered'; +$app_list_strings['quote_stage_dom']['On Hold'] = 'On Hold'; +$app_list_strings['quote_stage_dom']['Confirmed'] = 'Confirmed'; +$app_list_strings['quote_stage_dom']['Closed Accepted'] = 'Closed Accepted'; +$app_list_strings['quote_stage_dom']['Closed Lost'] = 'Closed Lost'; +$app_list_strings['quote_stage_dom']['Closed Dead'] = 'Closed Dead'; +$app_list_strings['quote_term_dom']['Net 15'] = 'Nett 15'; +$app_list_strings['quote_term_dom']['Net 30'] = 'Nett 30'; +$app_list_strings['quote_term_dom'][''] = ''; +$app_list_strings['approval_status_dom']['Approved'] = 'Approved'; +$app_list_strings['approval_status_dom']['Not Approved'] = 'Not Approved'; +$app_list_strings['approval_status_dom'][''] = ''; +$app_list_strings['vat_list']['0.0'] = '0%'; +$app_list_strings['vat_list']['5.0'] = '5%'; +$app_list_strings['vat_list']['7.5'] = '7.5%'; +$app_list_strings['vat_list']['17.5'] = '17.5%'; +$app_list_strings['vat_list']['20.0'] = '20%'; +$app_list_strings['discount_list']['Percentage'] = 'Pct'; +$app_list_strings['discount_list']['Amount'] = 'Amt'; +$app_list_strings['aos_invoices_type_dom'][''] = ''; +$app_list_strings['aos_invoices_type_dom']['Analyst'] = 'Analyst'; +$app_list_strings['aos_invoices_type_dom']['Competitor'] = 'Competitor'; +$app_list_strings['aos_invoices_type_dom']['Customer'] = 'Customer'; +$app_list_strings['aos_invoices_type_dom']['Integrator'] = 'Integrator'; +$app_list_strings['aos_invoices_type_dom']['Investor'] = 'Investor'; +$app_list_strings['aos_invoices_type_dom']['Partner'] = 'Partner'; +$app_list_strings['aos_invoices_type_dom']['Press'] = 'Press'; +$app_list_strings['aos_invoices_type_dom']['Prospect'] = 'Prospect'; +$app_list_strings['aos_invoices_type_dom']['Reseller'] = 'Reseller'; +$app_list_strings['aos_invoices_type_dom']['Other'] = 'Other'; +$app_list_strings['invoice_status_dom']['Paid'] = 'Paid'; +$app_list_strings['invoice_status_dom']['Unpaid'] = 'Unpaid'; +$app_list_strings['invoice_status_dom']['Cancelled'] = 'Cancelled'; +$app_list_strings['invoice_status_dom'][''] = ''; +$app_list_strings['quote_invoice_status_dom']['Not Invoiced'] = 'Not Invoiced'; +$app_list_strings['quote_invoice_status_dom']['Invoiced'] = 'Invoiced'; +$app_list_strings['product_code_dom']['XXXX'] = 'XXXX'; +$app_list_strings['product_code_dom']['YYYY'] = 'YYYY'; +$app_list_strings['product_category_dom']['Laptops'] = 'Laptops'; +$app_list_strings['product_category_dom']['Desktops'] = 'Desktops'; +$app_list_strings['product_category_dom'][''] = ''; +$app_list_strings['product_type_dom']['Good'] = 'Good'; +$app_list_strings['product_type_dom']['Service'] = 'Service'; +$app_list_strings['product_quote_parent_type_dom']['AOS_Quotes'] = 'Quotes'; +$app_list_strings['product_quote_parent_type_dom']['AOS_Invoices'] = 'Invoices'; +$app_list_strings['pdf_template_type_dom']['AOS_Quotes'] = 'Quotes'; +$app_list_strings['pdf_template_type_dom']['AOS_Invoices'] = 'Invoices'; +$app_list_strings['pdf_template_type_dom']['Accounts'] = 'Accounts'; +$app_list_strings['pdf_template_type_dom']['Contacts'] = 'Contacts'; +$app_list_strings['pdf_template_type_dom']['Leads'] = 'Leads'; +$app_list_strings['pdf_template_sample_dom'][''] = ''; +$app_list_strings['contract_status_list']['Not Started'] = 'Not Started'; +$app_list_strings['contract_status_list']['In Progress'] = 'In Progress'; +$app_list_strings['contract_status_list']['Signed'] = 'Signed'; +$app_list_strings['contract_type_list']['Type'] = 'Type'; +$app_strings['LBL_GENERATE_LETTER'] = 'Generate Letter'; +$app_strings['LBL_SELECT_TEMPLATE'] = 'Please Select a Template'; +$app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo templates found.\nPlease go to the PDF templates module and create one'; + + + +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + + +$app_list_strings['moduleList']['FP_events'] = 'Events'; +$app_list_strings['moduleList']['FP_Event_Locations'] = 'Locations'; +$app_list_strings['invite_template_list'][''] = ''; + +$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invited'; +$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'Not Invited'; +$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Attended'; +$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'Not Attended'; +$app_list_strings['fp_event_status_dom']['Accepted'] = 'Accepted'; +$app_list_strings['fp_event_status_dom']['Declined'] = 'Declined'; +$app_list_strings['fp_event_status_dom']['No Response'] = 'No Response'; + +$app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; +$app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; +$app_strings['LBL_LISTVIEW_OPTION_CURRENT'] = 'Select This Page'; +$app_strings['LBL_LISTVIEW_OPTION_ENTIRE'] = 'Select All'; +$app_strings['LBL_LISTVIEW_NONE'] = 'Deselect All'; ?> \ No newline at end of file diff --git a/custom/application/Ext/TableDictionary/tabledictionary.ext.php b/custom/application/Ext/TableDictionary/tabledictionary.ext.php index 62b741659eb..2b75498a1ed 100755 --- a/custom/application/Ext/TableDictionary/tabledictionary.ext.php +++ b/custom/application/Ext/TableDictionary/tabledictionary.ext.php @@ -3,87 +3,87 @@ //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_recordsMetaData.php'); +include('custom/metadata/securitygroups_usersMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aow_processed_aow_actionsMetaData.php'); +include('custom/metadata/fp_events_leads_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_contactsMetaData.php'); +include('custom/metadata/aos_quotes_aos_contractsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_contracts_documentsMetaData.php'); +include('custom/metadata/securitygroups_recordsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_event_locations_fp_events_1MetaData.php'); +include('custom/metadata/fp_events_fp_event_locations_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/jjwg_maps_jjwg_markersMetaData.php'); +include('custom/metadata/aos_quotes_aos_invoicesMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_acl_rolesMetaData.php'); +include('custom/metadata/jjwg_maps_jjwg_areasMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_usersMetaData.php'); +include('custom/metadata/aos_quotes_projectMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_prospects_1MetaData.php'); +include('custom/metadata/aos_contracts_documentsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_aos_contractsMetaData.php'); +include('custom/metadata/fp_events_fp_event_delegates_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/jjwg_maps_jjwg_areasMetaData.php'); +include('custom/metadata/securitygroups_acl_rolesMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_defaultsMetaData.php'); +include('custom/metadata/fp_events_prospects_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_leads_1MetaData.php'); +include('custom/metadata/aow_processed_aow_actionsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_projectMetaData.php'); +include('custom/metadata/securitygroups_defaultsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_fp_event_locations_1MetaData.php'); +include('custom/metadata/fp_events_contactsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_fp_event_delegates_1MetaData.php'); +include('custom/metadata/fp_event_locations_fp_events_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_aos_invoicesMetaData.php'); +include('custom/metadata/jjwg_maps_jjwg_markersMetaData.php'); ?> \ No newline at end of file diff --git a/custom/modules/Administration/AOSAdmin.tpl b/custom/modules/Administration/AOSAdmin.tpl index b514db9c9a5..90ac51e7f20 100755 --- a/custom/modules/Administration/AOSAdmin.tpl +++ b/custom/modules/Administration/AOSAdmin.tpl @@ -18,7 +18,7 @@
    {$MOD.LBL_AOS_ADMIN_CONTRACT_RENEWAL_REMINDER}: - days + {$MOD.LBL_AOS_DAYS}
    diff --git a/custom/modules/Connectors/metadata/display_config.php b/custom/modules/Connectors/metadata/display_config.php index 7cd069a5cb1..202c7da1866 100755 --- a/custom/modules/Connectors/metadata/display_config.php +++ b/custom/modules/Connectors/metadata/display_config.php @@ -1,5 +1,5 @@ array ( diff --git a/include/MVC/View/SugarView.php b/include/MVC/View/SugarView.php index 75eefbe25dd..371e6896887 100755 --- a/include/MVC/View/SugarView.php +++ b/include/MVC/View/SugarView.php @@ -926,7 +926,6 @@ public function displayFooter() - // The interactive user interfaces in modified source and object code // versions of this program must display Appropriate Legal Notices, as // required under Section 5 of the GNU General Public License version diff --git a/include/language/en_us.lang.php b/include/language/en_us.lang.php index 0920a59841f..4eee70b72b1 100755 --- a/include/language/en_us.lang.php +++ b/include/language/en_us.lang.php @@ -1888,6 +1888,7 @@ 'LBL_BILLING_STREET'=> 'Street:', 'LBL_SHIPPING_STREET'=> 'Street:', + 'LBL_PROSPECTS'=>'Prospects', 'LBL_PRODUCT_BUNDLES'=>'Product Bundles', 'LBL_PRODUCT_BUNDLES'=>'Product Bundles', 'LBL_PRODUCTS'=>'Products', diff --git a/modules/Calls_Reschedule/metadata/searchdefs.php b/modules/Calls_Reschedule/metadata/searchdefs.php index 922cdf1044a..5a1ba8bb1ba 100755 --- a/modules/Calls_Reschedule/metadata/searchdefs.php +++ b/modules/Calls_Reschedule/metadata/searchdefs.php @@ -40,7 +40,7 @@ * To change the template for this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates */ -$module_name = 'Calls_Reschedule'; +$module_name = 'LBL_MODULE_NAME'; $searchdefs[$module_name] = array( 'templateMeta' => array( 'maxColumns' => '3', diff --git a/modules/jjwg_Maps/views/view.geocoded_counts.php b/modules/jjwg_Maps/views/view.geocoded_counts.php index 3d8866c90d9..ad78e3b7f1b 100755 --- a/modules/jjwg_Maps/views/view.geocoded_counts.php +++ b/modules/jjwg_Maps/views/view.geocoded_counts.php @@ -83,13 +83,13 @@ function display() { $export_url = $sugar_config['site_url'].'/index.php?module=jjwg_Maps&action=export_geocoding_addresses&display_module='; - echo ''.$app_strings['LBL_EXPORT'].' '.$app_strings['LBL_ACCOUNTS'].''; + echo ''.$app_strings['LBL_EXPORT'].' '.$app_strings['LBL_ACCOUNTS'].''; echo '

    '; - echo ''.$app_strings['LBL_EXPORT'].' '.$app_strings['LBL_CONTACTS'].''; + echo ''.$app_strings['LBL_EXPORT'].' '.$app_strings['LBL_CONTACTS'].''; echo '

    '; - echo ''.$app_strings['LBL_EXPORT'].' '.$app_strings['LBL_LEADS'].''; + echo ''.$app_strings['LBL_EXPORT'].' '.$app_strings['LBL_LEADS'].''; echo '

    '; - echo ''.$app_strings['LBL_EXPORT'].' Prospects'.''; + echo ''.$app_strings['LBL_EXPORT'].' LBL_PROSPECTS'.''; echo '

    '; echo '

    '; diff --git a/themes/Suite7/tpls/_headerModuleList.tpl b/themes/Suite7/tpls/_headerModuleList.tpl index 4fb3bfcaf6b..4a6cc845be4 100755 --- a/themes/Suite7/tpls/_headerModuleList.tpl +++ b/themes/Suite7/tpls/_headerModuleList.tpl @@ -238,7 +238,7 @@ {/foreach} {if count($moduleExtraMenu) > 0}
  5. - More »
    + {$APP.LBL_MORE} »
      {foreach from=$moduleExtraMenu item=module key=name name=moduleList}
    • {sugar_link id="moduleTab_$name" module=$name data=$module}
    • diff --git a/themes/Suite7/tpls/footer.tpl b/themes/Suite7/tpls/footer.tpl index c59965eba7c..4ef4e93dc99 100755 --- a/themes/Suite7/tpls/footer.tpl +++ b/themes/Suite7/tpls/footer.tpl @@ -69,7 +69,7 @@

      {$COPYRIGHT}

      - + From faecf75e8982716190552a1faf3d19bf0ccd7a53 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 8 Jan 2014 14:38:18 +0000 Subject: [PATCH 021/223] added upgrade safe way to extend line_items.js --- modules/AOS_Products_Quotes/Line_Items.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/AOS_Products_Quotes/Line_Items.php b/modules/AOS_Products_Quotes/Line_Items.php index 87ad1c6d769..ae10581242f 100755 --- a/modules/AOS_Products_Quotes/Line_Items.php +++ b/modules/AOS_Products_Quotes/Line_Items.php @@ -34,6 +34,9 @@ function display_lines($focus, $field, $value, $view){ if($view == 'EditView'){ $html .= ''; + if(file_exists('custom/modules/AOS_Products_Quotes/line_items.js')){ + $html .= ''; + } $html .= ' -
      - - \ No newline at end of file diff --git a/modules/jjwg_Areas/views/view.area_edit_map.config.php b/modules/jjwg_Areas/views/view.area_edit_map.config.php index 674a2a892b4..b7f9fb022a1 100755 --- a/modules/jjwg_Areas/views/view.area_edit_map.config.php +++ b/modules/jjwg_Areas/views/view.area_edit_map.config.php @@ -1,5 +1,3 @@ false); - -?> \ No newline at end of file diff --git a/modules/jjwg_Areas/views/view.area_edit_map.php b/modules/jjwg_Areas/views/view.area_edit_map.php index 30422600e05..57532f21475 100755 --- a/modules/jjwg_Areas/views/view.area_edit_map.php +++ b/modules/jjwg_Areas/views/view.area_edit_map.php @@ -10,24 +10,15 @@ function Jjwg_AreasViewArea_Edit_Map() { function display() { - global $sugar_config; - global $jjwg_config; - global $currentModule; - global $theme; - global $mod_strings; - global $loc; - global $polygon; - $jsonObj = new JSON(JSON_LOOSE_TYPE); - ?> - <?php echo $mod_strings['LBL_AREA_MAP']; ?> + <?php echo $GLOBALS['mod_strings']['LBL_AREA_MAP']; ?> - + - - + + + + + + + + + + - +
      +
      + +bean->map_center) || $num_markers > 0) { +?>
      - +
      bean->map_center)) { ?> - - , + + bean->map_center['name']; ?>
      -   + $group_number) { ?> - - + +
      + + + 0) { +?> +
      + + + + + + + + + + + + + + + + + +
      +
      + + +bean->display_object->module_name, array('Accounts', 'Contacts', 'Leads', 'Prospects', 'Users')) && + ($GLOBALS['current_user']->isAdmin() || $this->bean->ACLAccess('list')) && + empty($_REQUEST['list_id']) && !empty($this->bean->list_array)) { +?> +
      +
      +
      + + + + + + + +
      +
      + + + + + +"; +//var_dump($this->bean); +//var_dump($GLOBALS['app_list_strings']); +//var_dump($GLOBALS['app_strings']); +//var_dump($GLOBALS['mod_strings']); +//echo ""; +?> @@ -370,5 +1032,3 @@ function initialize() { } } - -?> diff --git a/modules/jjwg_Maps/views/view.quick_radius.php b/modules/jjwg_Maps/views/view.quick_radius.php index f61dca5693d..0ee5e2b8184 100755 --- a/modules/jjwg_Maps/views/view.quick_radius.php +++ b/modules/jjwg_Maps/views/view.quick_radius.php @@ -10,34 +10,20 @@ function Jjwg_MapsViewQuick_Radius() { function display() { - global $sugar_config; - global $currentModule; - global $valid_geocode_modules; - global $theme; - global $mod_strings; - global $app_list_strings; - if (!isset($_REQUEST['quick_address'])) $_REQUEST['quick_address'] = ''; ?> -

      +

      - + -'; -//var_dump($mod_strings); -//var_dump($app_list_strings); -//echo ''; -?> -
      - +
      - + - +
      - + - + $value) { ?>

      - +
      \ No newline at end of file diff --git a/modules/jjwg_Maps/views/view.quick_radius_display.php b/modules/jjwg_Maps/views/view.quick_radius_display.php index b31f4203c0e..bcf0e8d9d51 100755 --- a/modules/jjwg_Maps/views/view.quick_radius_display.php +++ b/modules/jjwg_Maps/views/view.quick_radius_display.php @@ -10,10 +10,7 @@ function Jjwg_MapsViewQuick_Radius_Display() { function display() { - global $sugar_config; - global $currentModule; - - $url = 'index.php?module='.$currentModule.'&action=map_markers'; + $url = 'index.php?module='.$GLOBALS['currentModule'].'&action=map_markers'; foreach (array_keys($_REQUEST) as $key) { // Exclude certain request parameters if (!in_array($key, array('action', 'module', 'entryPoint', 'record', 'relate_id'))) { @@ -26,13 +23,12 @@ function display() {
      -

      iframe:

      + +

      IFrame: URL

      \ No newline at end of file diff --git a/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.meta.php b/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.meta.php index d6e63215d7f..5c496c119ab 100755 --- a/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.meta.php +++ b/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.meta.php @@ -1,52 +1,8 @@ 'jjwg_Markers', - 'title' => translate('LBL_HOMEPAGE_TITLE', 'jjwg_Markers'), - 'description' => 'A customizable view into jjwg_Markers', - 'icon' => 'icon_jjwg_Markers_32.gif', - 'category' => 'Module Views'); \ No newline at end of file +$dashletMeta['jjwg_MarkersDashlet'] = array('module' => 'jjwg_Markers', + 'title' => translate('LBL_HOMEPAGE_TITLE', 'jjwg_Markers'), + 'description' => 'A customizable view into jjwg_Markers', + 'icon' => 'icon_jjwg_Markers_32.gif', + 'category' => 'Module Views'); diff --git a/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.php b/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.php index 8cb5cf4d282..036a46d1798 100755 --- a/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.php +++ b/modules/jjwg_Markers/Dashlets/jjwg_MarkersDashlet/jjwg_MarkersDashlet.php @@ -1,54 +1,13 @@ seedBean = new jjwg_Markers(); } + } \ No newline at end of file diff --git a/modules/jjwg_Markers/controller.php b/modules/jjwg_Markers/controller.php index ce8f15babb2..53970f99735 100755 --- a/modules/jjwg_Markers/controller.php +++ b/modules/jjwg_Markers/controller.php @@ -9,27 +9,25 @@ class jjwg_MarkersController extends SugarController { function action_marker_edit_map() { $this->view = 'marker_edit_map'; - global $loc; $jjwg_Markers = get_module_info('jjwg_Markers'); // Get the map object if (is_guid($_REQUEST['id'])) { $jjwg_Markers->retrieve($_REQUEST['id']); } - $loc = $jjwg_Markers->define_loc(); + $GLOBALS['loc'] = $jjwg_Markers->define_loc(); } function action_marker_detail_map() { $this->view = 'marker_detail_map'; - global $loc; $jjwg_Markers = get_module_info('jjwg_Markers'); // Get the map object if (is_guid($_REQUEST['id'])) { $jjwg_Markers->retrieve($_REQUEST['id']); } - $loc = $jjwg_Markers->define_loc(); + $GLOBALS['loc'] = $jjwg_Markers->define_loc(); } } diff --git a/modules/jjwg_Markers/jjwg_Markers.php b/modules/jjwg_Markers/jjwg_Markers.php index f46e7194dfd..88e4743201a 100755 --- a/modules/jjwg_Markers/jjwg_Markers.php +++ b/modules/jjwg_Markers/jjwg_Markers.php @@ -3,7 +3,6 @@ if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); -require_once('include/JSON.php'); require_once('modules/jjwg_Markers/jjwg_Markers_sugar.php'); require_once('modules/jjwg_Maps/jjwg_Maps.php'); diff --git a/modules/jjwg_Markers/jjwg_Markers_sugar.php b/modules/jjwg_Markers/jjwg_Markers_sugar.php index f3bd42cf4ad..25b258bc361 100755 --- a/modules/jjwg_Markers/jjwg_Markers_sugar.php +++ b/modules/jjwg_Markers/jjwg_Markers_sugar.php @@ -42,5 +42,3 @@ function bean_implements($interface) { } } - -?> \ No newline at end of file diff --git a/modules/jjwg_Markers/metadata/SearchFields.php b/modules/jjwg_Markers/metadata/SearchFields.php index add2ff4fdce..787af2ff4b6 100755 --- a/modules/jjwg_Markers/metadata/SearchFields.php +++ b/modules/jjwg_Markers/metadata/SearchFields.php @@ -1,45 +1,10 @@ array( 'query_type'=>'default'), - 'current_user_only'=> array('query_type'=>'default','db_field'=>array('assigned_user_id'),'my_items'=>true, 'vname' => 'LBL_CURRENT_USER_FILTER', 'type' => 'bool'), - 'assigned_user_id'=> array('query_type'=>'default'), - ); -?> +$searchFields[$module_name] = + array( + 'name' => array('query_type' => 'default'), + 'current_user_only' => array('query_type' => 'default', 'db_field' => array('assigned_user_id'), 'my_items' => true, 'vname' => 'LBL_CURRENT_USER_FILTER', 'type' => 'bool'), + 'assigned_user_id' => array('query_type' => 'default'), +); diff --git a/modules/jjwg_Markers/metadata/detailviewdefs.php b/modules/jjwg_Markers/metadata/detailviewdefs.php index 270000a7607..6117ff4409e 100755 --- a/modules/jjwg_Markers/metadata/detailviewdefs.php +++ b/modules/jjwg_Markers/metadata/detailviewdefs.php @@ -105,4 +105,3 @@ ), ), ); -?> diff --git a/modules/jjwg_Markers/metadata/editviewdefs.php b/modules/jjwg_Markers/metadata/editviewdefs.php index cc81ac0acd9..e9062942ae6 100755 --- a/modules/jjwg_Markers/metadata/editviewdefs.php +++ b/modules/jjwg_Markers/metadata/editviewdefs.php @@ -94,4 +94,3 @@ ), ), ); -?> diff --git a/modules/jjwg_Markers/metadata/listviewdefs.php b/modules/jjwg_Markers/metadata/listviewdefs.php index 1df34c3e1d1..4664187eee0 100755 --- a/modules/jjwg_Markers/metadata/listviewdefs.php +++ b/modules/jjwg_Markers/metadata/listviewdefs.php @@ -100,4 +100,3 @@ 'default' => false, ), ); -?> diff --git a/modules/jjwg_Markers/metadata/metafiles.php b/modules/jjwg_Markers/metadata/metafiles.php index 78339437a93..3f9f67c60fb 100755 --- a/modules/jjwg_Markers/metadata/metafiles.php +++ b/modules/jjwg_Markers/metadata/metafiles.php @@ -1,52 +1,11 @@ 'modules/' . $module_name . '/metadata/detailviewdefs.php', - 'editviewdefs' => 'modules/' . $module_name . '/metadata/editviewdefs.php', - 'listviewdefs' => 'modules/' . $module_name . '/metadata/listviewdefs.php', - 'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php', - 'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php', - 'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php', - ); -?> +$metafiles[$module_name] = array( + 'detailviewdefs' => 'modules/' . $module_name . '/metadata/detailviewdefs.php', + 'editviewdefs' => 'modules/' . $module_name . '/metadata/editviewdefs.php', + 'listviewdefs' => 'modules/' . $module_name . '/metadata/listviewdefs.php', + 'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php', + 'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php', + 'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php', +); diff --git a/modules/jjwg_Markers/metadata/quickcreatedefs.php b/modules/jjwg_Markers/metadata/quickcreatedefs.php index 08b4ff3d975..8ddda82caed 100755 --- a/modules/jjwg_Markers/metadata/quickcreatedefs.php +++ b/modules/jjwg_Markers/metadata/quickcreatedefs.php @@ -66,4 +66,3 @@ ), ), ); -?> diff --git a/modules/jjwg_Markers/metadata/searchdefs.php b/modules/jjwg_Markers/metadata/searchdefs.php index 3468be5ef54..1b492a737e1 100755 --- a/modules/jjwg_Markers/metadata/searchdefs.php +++ b/modules/jjwg_Markers/metadata/searchdefs.php @@ -1,60 +1,19 @@ array( - 'maxColumns' => '3', - 'widths' => array('label' => '10', 'field' => '30'), - ), - 'layout' => array( - 'basic_search' => array( - 'name', - array('name'=>'current_user_only', 'label'=>'LBL_CURRENT_USER_FILTER', 'type'=>'bool'), - ), - 'advanced_search' => array( - 'name', - array('name' => 'assigned_user_id', 'label' => 'LBL_ASSIGNED_TO', 'type' => 'enum', 'function' => array('name' => 'get_user_array', 'params' => array(false))), - ), - ), - ); -?> +$searchdefs[$module_name] = array( + 'templateMeta' => array( + 'maxColumns' => '3', + 'widths' => array('label' => '10', 'field' => '30'), + ), + 'layout' => array( + 'basic_search' => array( + 'name', + array('name' => 'current_user_only', 'label' => 'LBL_CURRENT_USER_FILTER', 'type' => 'bool'), + ), + 'advanced_search' => array( + 'name', + array('name' => 'assigned_user_id', 'label' => 'LBL_ASSIGNED_TO', 'type' => 'enum', 'function' => array('name' => 'get_user_array', 'params' => array(false))), + ), + ), +); diff --git a/modules/jjwg_Markers/metadata/studio.php b/modules/jjwg_Markers/metadata/studio.php index f42934f2f7e..f8e7ee7bb00 100755 --- a/modules/jjwg_Markers/metadata/studio.php +++ b/modules/jjwg_Markers/metadata/studio.php @@ -1,41 +1,5 @@ \ No newline at end of file diff --git a/modules/jjwg_Markers/metadata/subpanels/default.php b/modules/jjwg_Markers/metadata/subpanels/default.php index 93f46eef11f..a41f9b1dc9f 100755 --- a/modules/jjwg_Markers/metadata/subpanels/default.php +++ b/modules/jjwg_Markers/metadata/subpanels/default.php @@ -82,4 +82,4 @@ 'default' => true, ), ), -); \ No newline at end of file +); diff --git a/modules/jjwg_Markers/tpls/DetailViewFooter.tpl b/modules/jjwg_Markers/tpls/DetailViewFooter.tpl index a587c60f4b8..c76e0b82e50 100755 --- a/modules/jjwg_Markers/tpls/DetailViewFooter.tpl +++ b/modules/jjwg_Markers/tpls/DetailViewFooter.tpl @@ -1,7 +1,7 @@

      diff --git a/modules/jjwg_Markers/tpls/EditViewFooter.tpl b/modules/jjwg_Markers/tpls/EditViewFooter.tpl index 6fb721004aa..ec055475fe8 100755 --- a/modules/jjwg_Markers/tpls/EditViewFooter.tpl +++ b/modules/jjwg_Markers/tpls/EditViewFooter.tpl @@ -1,7 +1,7 @@

      diff --git a/modules/jjwg_Markers/vardefs.php b/modules/jjwg_Markers/vardefs.php index 2b8abfec291..c38838418c9 100755 --- a/modules/jjwg_Markers/vardefs.php +++ b/modules/jjwg_Markers/vardefs.php @@ -1,38 +1,4 @@ 'jjwg_markers', @@ -156,4 +122,4 @@ if (!class_exists('VardefManager')){ require_once('include/SugarObjects/VardefManager.php'); } -VardefManager::createVardef('jjwg_Markers','jjwg_Markers', array('basic','assignable')); \ No newline at end of file +VardefManager::createVardef('jjwg_Markers','jjwg_Markers', array('basic','assignable')); diff --git a/modules/jjwg_Markers/views/view.marker_detail_map.config.php b/modules/jjwg_Markers/views/view.marker_detail_map.config.php index 94367897c66..189978fb75d 100755 --- a/modules/jjwg_Markers/views/view.marker_detail_map.config.php +++ b/modules/jjwg_Markers/views/view.marker_detail_map.config.php @@ -2,4 +2,3 @@ $view_config['actions']['marker_detail_map'] = array('show_all' => false); -?> \ No newline at end of file diff --git a/modules/jjwg_Markers/views/view.marker_detail_map.php b/modules/jjwg_Markers/views/view.marker_detail_map.php index fc1ca085be6..88f1a634edf 100755 --- a/modules/jjwg_Markers/views/view.marker_detail_map.php +++ b/modules/jjwg_Markers/views/view.marker_detail_map.php @@ -10,13 +10,6 @@ function Jjwg_MarkersViewMarker_Detail_Map() { function display() { - global $sugar_config; - global $jjwg_config; - global $currentModule; - global $theme; - global $mod_strings; - global $loc; - $custom_markers_dir = 'custom/themes/default/images/jjwg_Markers/'; ?> @@ -24,19 +17,20 @@ function display() { - <?php echo $mod_strings['LBL_MARKER_DISPLAY']; ?> + <?php echo $GLOBALS['mod_strings']['LBL_MARKER_DISPLAY']; ?> - + + + +

      php-sdk

      + + + Logout + +
      + Check the login status using OAuth 2.0 handled by the PHP SDK: + Check the login status +
      +
      + Login using OAuth 2.0 handled by the PHP SDK: + Login with Facebook +
      + + +

      PHP Session

      +
      + + +

      You

      + + +

      Your User Object (/me)

      +
      + + You are not Connected. + + +

      Public profile of Naitik

      + + + + diff --git a/custom/include/social/facebook/facebook_sdk/examples/with_js_sdk.php b/custom/include/social/facebook/facebook_sdk/examples/with_js_sdk.php new file mode 100755 index 00000000000..4255a35c34a --- /dev/null +++ b/custom/include/social/facebook/facebook_sdk/examples/with_js_sdk.php @@ -0,0 +1,59 @@ + '344617158898614', + 'secret' => '6dc8ac871858b34798bc2488200e503d', +)); + +// See if there is a user from a cookie +$user = $facebook->getUser(); + +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + echo '
      '.htmlspecialchars(print_r($e, true)).'
      '; + $user = null; + } +} + +?> + + + + + Your user profile is +
      +        
      +      
      + + + +
      + + + diff --git a/custom/include/social/facebook/facebook_sdk/readme.md b/custom/include/social/facebook/facebook_sdk/readme.md new file mode 100755 index 00000000000..ecbfffe3d20 --- /dev/null +++ b/custom/include/social/facebook/facebook_sdk/readme.md @@ -0,0 +1,115 @@ +Facebook PHP SDK (v.3.2.3) + +The [Facebook Platform](http://developers.facebook.com/) is +a set of APIs that make your app more social. + +This repository contains the open source PHP SDK that allows you to +access Facebook Platform from your PHP app. Except as otherwise noted, +the Facebook PHP SDK is licensed under the Apache Licence, Version 2.0 +(http://www.apache.org/licenses/LICENSE-2.0.html). + + +Usage +----- + +The [examples][examples] are a good place to start. The minimal you'll need to +have is: +```php +require 'facebook-php-sdk/src/facebook.php'; + +$facebook = new Facebook(array( + 'appId' => 'YOUR_APP_ID', + 'secret' => 'YOUR_APP_SECRET', +)); + +// Get User ID +$user = $facebook->getUser(); +``` + +To make [API][API] calls: +```php +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + error_log($e); + $user = null; + } +} +``` + +You can make api calls by choosing the `HTTP method` and setting optional `parameters`: +```php +$facebook->api('/me/feed/', 'post', array( + 'message' => 'I want to display this message on my wall' +)); +``` + + +Login or logout url will be needed depending on current user state. +```php +if ($user) { + $logoutUrl = $facebook->getLogoutUrl(); +} else { + $loginUrl = $facebook->getLoginUrl(); +} +``` + +With Composer: + +- Add the `"facebook/php-sdk": "@stable"` into the `require` section of your `composer.json`. +- Run `composer install`. +- The example will look like + +```php +if (($loader = require_once __DIR__ . '/vendor/autoload.php') == null) { + die('Vendor directory not found, Please run composer install.'); +} + +$facebook = new Facebook(array( + 'appId' => 'YOUR_APP_ID', + 'secret' => 'YOUR_APP_SECRET', +)); + +// Get User ID +$user = $facebook->getUser(); +``` + +[examples]: /examples/example.php +[API]: http://developers.facebook.com/docs/api + +Tests +----- + +In order to keep us nimble and allow us to bring you new functionality, without +compromising on stability, we have ensured full test coverage of the SDK. +We are including this in the open source repository to assure you of our +commitment to quality, but also with the hopes that you will contribute back to +help keep it stable. The easiest way to do so is to file bugs and include a +test case. + +The tests can be executed by using this command from the base directory: + + phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php + + +Contributing +=========== +For us to accept contributions you will have to first have signed the +[Contributor License Agreement](https://developers.facebook.com/opensource/cla). + +When commiting, keep all lines to less than 80 characters, and try to +follow the existing style. + +Before creating a pull request, squash your commits into a single commit. + +Add the comments where needed, and provide ample explanation in the +commit message. + + +Report Issues/Bugs +=============== +[Bugs](https://developers.facebook.com/bugs) + +[Questions](http://facebook.stackoverflow.com) diff --git a/custom/include/social/facebook/facebook_sdk/src/base_facebook.php b/custom/include/social/facebook/facebook_sdk/src/base_facebook.php new file mode 100755 index 00000000000..b9d403efb4f --- /dev/null +++ b/custom/include/social/facebook/facebook_sdk/src/base_facebook.php @@ -0,0 +1,1545 @@ + + */ +class FacebookApiException extends Exception +{ + /** + * The result from the API server that represents the exception information. + * + * @var mixed + */ + protected $result; + + /** + * Make a new API Exception with the given result. + * + * @param array $result The result from the API server + */ + public function __construct($result) { + $this->result = $result; + + $code = 0; + if (isset($result['error_code']) && is_int($result['error_code'])) { + $code = $result['error_code']; + } + + if (isset($result['error_description'])) { + // OAuth 2.0 Draft 10 style + $msg = $result['error_description']; + } else if (isset($result['error']) && is_array($result['error'])) { + // OAuth 2.0 Draft 00 style + $msg = $result['error']['message']; + } else if (isset($result['error_msg'])) { + // Rest server style + $msg = $result['error_msg']; + } else { + $msg = 'Unknown Error. Check getResult()'; + } + + parent::__construct($msg, $code); + } + + /** + * Return the associated result object returned by the API server. + * + * @return array The result from the API server + */ + public function getResult() { + return $this->result; + } + + /** + * Returns the associated type for the error. This will default to + * 'Exception' when a type is not available. + * + * @return string + */ + public function getType() { + if (isset($this->result['error'])) { + $error = $this->result['error']; + if (is_string($error)) { + // OAuth 2.0 Draft 10 style + return $error; + } else if (is_array($error)) { + // OAuth 2.0 Draft 00 style + if (isset($error['type'])) { + return $error['type']; + } + } + } + + return 'Exception'; + } + + /** + * To make debugging easier. + * + * @return string The string representation of the error + */ + public function __toString() { + $str = $this->getType() . ': '; + if ($this->code != 0) { + $str .= $this->code . ': '; + } + return $str . $this->message; + } +} + +/** + * Provides access to the Facebook Platform. This class provides + * a majority of the functionality needed, but the class is abstract + * because it is designed to be sub-classed. The subclass must + * implement the four abstract methods listed at the bottom of + * the file. + * + * @author Naitik Shah + */ +abstract class BaseFacebook +{ + /** + * Version. + */ + const VERSION = '3.2.3'; + + /** + * Signed Request Algorithm. + */ + const SIGNED_REQUEST_ALGORITHM = 'HMAC-SHA256'; + + /** + * Default options for curl. + * + * @var array + */ + public static $CURL_OPTS = array( + CURLOPT_CONNECTTIMEOUT => 10, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 60, + CURLOPT_USERAGENT => 'facebook-php-3.2', + ); + + /** + * List of query parameters that get automatically dropped when rebuilding + * the current URL. + * + * @var array + */ + protected static $DROP_QUERY_PARAMS = array( + 'code', + 'state', + 'signed_request', + ); + + /** + * Maps aliases to Facebook domains. + * + * @var array + */ + public static $DOMAIN_MAP = array( + 'api' => 'https://api.facebook.com/', + 'api_video' => 'https://api-video.facebook.com/', + 'api_read' => 'https://api-read.facebook.com/', + 'graph' => 'https://graph.facebook.com/', + 'graph_video' => 'https://graph-video.facebook.com/', + 'www' => 'https://www.facebook.com/', + ); + + /** + * The Application ID. + * + * @var string + */ + protected $appId; + + /** + * The Application App Secret. + * + * @var string + */ + protected $appSecret; + + /** + * The ID of the Facebook user, or 0 if the user is logged out. + * + * @var integer + */ + protected $user; + + /** + * The data from the signed_request token. + * + * @var string + */ + protected $signedRequest; + + /** + * A CSRF state variable to assist in the defense against CSRF attacks. + * + * @var string + */ + protected $state; + + /** + * The OAuth access token received in exchange for a valid authorization + * code. null means the access token has yet to be determined. + * + * @var string + */ + protected $accessToken = null; + + /** + * Indicates if the CURL based @ syntax for file uploads is enabled. + * + * @var boolean + */ + protected $fileUploadSupport = false; + + /** + * Indicates if we trust HTTP_X_FORWARDED_* headers. + * + * @var boolean + */ + protected $trustForwarded = false; + + /** + * Indicates if signed_request is allowed in query parameters. + * + * @var boolean + */ + protected $allowSignedRequest = true; + + /** + * Initialize a Facebook Application. + * + * The configuration: + * - appId: the application ID + * - secret: the application secret + * - fileUpload: (optional) boolean indicating if file uploads are enabled + * - allowSignedRequest: (optional) boolean indicating if signed_request is + * allowed in query parameters or POST body. Should be + * false for non-canvas apps. Defaults to true. + * + * @param array $config The application configuration + */ + public function __construct($config) { + $this->setAppId($config['appId']); + $this->setAppSecret($config['secret']); + if (isset($config['fileUpload'])) { + $this->setFileUploadSupport($config['fileUpload']); + } + if (isset($config['trustForwarded']) && $config['trustForwarded']) { + $this->trustForwarded = true; + } + if (isset($config['allowSignedRequest']) + && !$config['allowSignedRequest']) { + $this->allowSignedRequest = false; + } + $state = $this->getPersistentData('state'); + if (!empty($state)) { + $this->state = $state; + } + } + + /** + * Set the Application ID. + * + * @param string $appId The Application ID + * + * @return BaseFacebook + */ + public function setAppId($appId) { + $this->appId = $appId; + return $this; + } + + /** + * Get the Application ID. + * + * @return string the Application ID + */ + public function getAppId() { + return $this->appId; + } + + /** + * Set the App Secret. + * + * @param string $apiSecret The App Secret + * + * @return BaseFacebook + * @deprecated Use setAppSecret instead. + * @see setAppSecret() + */ + public function setApiSecret($apiSecret) { + $this->setAppSecret($apiSecret); + return $this; + } + + /** + * Set the App Secret. + * + * @param string $appSecret The App Secret + * + * @return BaseFacebook + */ + public function setAppSecret($appSecret) { + $this->appSecret = $appSecret; + return $this; + } + + /** + * Get the App Secret. + * + * @return string the App Secret + * + * @deprecated Use getAppSecret instead. + * @see getAppSecret() + */ + public function getApiSecret() { + return $this->getAppSecret(); + } + + /** + * Get the App Secret. + * + * @return string the App Secret + */ + public function getAppSecret() { + return $this->appSecret; + } + + /** + * Set the file upload support status. + * + * @param boolean $fileUploadSupport The file upload support status. + * + * @return BaseFacebook + */ + public function setFileUploadSupport($fileUploadSupport) { + $this->fileUploadSupport = $fileUploadSupport; + return $this; + } + + /** + * Get the file upload support status. + * + * @return boolean true if and only if the server supports file upload. + */ + public function getFileUploadSupport() { + return $this->fileUploadSupport; + } + + /** + * Get the file upload support status. + * + * @return boolean true if and only if the server supports file upload. + * + * @deprecated Use getFileUploadSupport instead. + * @see getFileUploadSupport() + */ + public function useFileUploadSupport() { + return $this->getFileUploadSupport(); + } + + /** + * Sets the access token for api calls. Use this if you get + * your access token by other means and just want the SDK + * to use it. + * + * @param string $access_token an access token. + * + * @return BaseFacebook + */ + public function setAccessToken($access_token) { + $this->accessToken = $access_token; + return $this; + } + + /** + * Extend an access token, while removing the short-lived token that might + * have been generated via client-side flow. Thanks to http://bit.ly/b0Pt0H + * for the workaround. + */ + public function setExtendedAccessToken() { + try { + // need to circumvent json_decode by calling _oauthRequest + // directly, since response isn't JSON format. + $access_token_response = $this->_oauthRequest( + $this->getUrl('graph', '/oauth/access_token'), + $params = array( + 'client_id' => $this->getAppId(), + 'client_secret' => $this->getAppSecret(), + 'grant_type' => 'fb_exchange_token', + 'fb_exchange_token' => $this->getAccessToken(), + ) + ); + } + catch (FacebookApiException $e) { + // most likely that user very recently revoked authorization. + // In any event, we don't have an access token, so say so. + return false; + } + + if (empty($access_token_response)) { + return false; + } + + $response_params = array(); + parse_str($access_token_response, $response_params); + + if (!isset($response_params['access_token'])) { + return false; + } + + $this->destroySession(); + + $this->setPersistentData( + 'access_token', $response_params['access_token'] + ); + } + + /** + * Determines the access token that should be used for API calls. + * The first time this is called, $this->accessToken is set equal + * to either a valid user access token, or it's set to the application + * access token if a valid user access token wasn't available. Subsequent + * calls return whatever the first call returned. + * + * @return string The access token + */ + public function getAccessToken() { + if ($this->accessToken !== null) { + // we've done this already and cached it. Just return. + return $this->accessToken; + } + + // first establish access token to be the application + // access token, in case we navigate to the /oauth/access_token + // endpoint, where SOME access token is required. + $this->setAccessToken($this->getApplicationAccessToken()); + $user_access_token = $this->getUserAccessToken(); + if ($user_access_token) { + $this->setAccessToken($user_access_token); + } + + return $this->accessToken; + } + + /** + * Determines and returns the user access token, first using + * the signed request if present, and then falling back on + * the authorization code if present. The intent is to + * return a valid user access token, or false if one is determined + * to not be available. + * + * @return string A valid user access token, or false if one + * could not be determined. + */ + protected function getUserAccessToken() { + // first, consider a signed request if it's supplied. + // if there is a signed request, then it alone determines + // the access token. + $signed_request = $this->getSignedRequest(); + if ($signed_request) { + // apps.facebook.com hands the access_token in the signed_request + if (array_key_exists('oauth_token', $signed_request)) { + $access_token = $signed_request['oauth_token']; + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + + // the JS SDK puts a code in with the redirect_uri of '' + if (array_key_exists('code', $signed_request)) { + $code = $signed_request['code']; + if ($code && $code == $this->getPersistentData('code')) { + // short-circuit if the code we have is the same as the one presented + return $this->getPersistentData('access_token'); + } + + $access_token = $this->getAccessTokenFromCode($code, ''); + if ($access_token) { + $this->setPersistentData('code', $code); + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + } + + // signed request states there's no access token, so anything + // stored should be cleared. + $this->clearAllPersistentData(); + return false; // respect the signed request's data, even + // if there's an authorization code or something else + } + + $code = $this->getCode(); + if ($code && $code != $this->getPersistentData('code')) { + $access_token = $this->getAccessTokenFromCode($code); + if ($access_token) { + $this->setPersistentData('code', $code); + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + + // code was bogus, so everything based on it should be invalidated. + $this->clearAllPersistentData(); + return false; + } + + // as a fallback, just return whatever is in the persistent + // store, knowing nothing explicit (signed request, authorization + // code, etc.) was present to shadow it (or we saw a code in $_REQUEST, + // but it's the same as what's in the persistent store) + return $this->getPersistentData('access_token'); + } + + /** + * Retrieve the signed request, either from a request parameter or, + * if not present, from a cookie. + * + * @return string the signed request, if available, or null otherwise. + */ + public function getSignedRequest() { + if (!$this->signedRequest) { + if ($this->allowSignedRequest && !empty($_REQUEST['signed_request'])) { + $this->signedRequest = $this->parseSignedRequest( + $_REQUEST['signed_request'] + ); + } else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) { + $this->signedRequest = $this->parseSignedRequest( + $_COOKIE[$this->getSignedRequestCookieName()]); + } + } + return $this->signedRequest; + } + + /** + * Get the UID of the connected user, or 0 + * if the Facebook user is not connected. + * + * @return string the UID if available. + */ + public function getUser() { + if ($this->user !== null) { + // we've already determined this and cached the value. + return $this->user; + } + + return $this->user = $this->getUserFromAvailableData(); + } + + /** + * Determines the connected user by first examining any signed + * requests, then considering an authorization code, and then + * falling back to any persistent store storing the user. + * + * @return integer The id of the connected Facebook user, + * or 0 if no such user exists. + */ + protected function getUserFromAvailableData() { + // if a signed request is supplied, then it solely determines + // who the user is. + $signed_request = $this->getSignedRequest(); + if ($signed_request) { + if (array_key_exists('user_id', $signed_request)) { + $user = $signed_request['user_id']; + + if($user != $this->getPersistentData('user_id')){ + $this->clearAllPersistentData(); + } + + $this->setPersistentData('user_id', $signed_request['user_id']); + return $user; + } + + // if the signed request didn't present a user id, then invalidate + // all entries in any persistent store. + $this->clearAllPersistentData(); + return 0; + } + + $user = $this->getPersistentData('user_id', $default = 0); + $persisted_access_token = $this->getPersistentData('access_token'); + + // use access_token to fetch user id if we have a user access_token, or if + // the cached access token has changed. + $access_token = $this->getAccessToken(); + if ($access_token && + $access_token != $this->getApplicationAccessToken() && + !($user && $persisted_access_token == $access_token)) { + $user = $this->getUserFromAccessToken(); + if ($user) { + $this->setPersistentData('user_id', $user); + } else { + $this->clearAllPersistentData(); + } + } + + return $user; + } + + /** + * Get a Login URL for use with redirects. By default, full page redirect is + * assumed. If you are using the generated URL with a window.open() call in + * JavaScript, you can pass in display=popup as part of the $params. + * + * The parameters: + * - redirect_uri: the url to go to after a successful login + * - scope: comma separated list of requested extended perms + * + * @param array $params Provide custom parameters + * @return string The URL for the login flow + */ + public function getLoginUrl($params=array()) { + $this->establishCSRFTokenState(); + $currentUrl = $this->getCurrentUrl(); + + // if 'scope' is passed as an array, convert to comma separated list + $scopeParams = isset($params['scope']) ? $params['scope'] : null; + if ($scopeParams && is_array($scopeParams)) { + $params['scope'] = implode(',', $scopeParams); + } + + return $this->getUrl( + 'www', + 'dialog/oauth', + array_merge( + array( + 'client_id' => $this->getAppId(), + 'redirect_uri' => $currentUrl, // possibly overwritten + 'state' => $this->state, + 'sdk' => 'php-sdk-'.self::VERSION + ), + $params + )); + } + + /** + * Get a Logout URL suitable for use with redirects. + * + * The parameters: + * - next: the url to go to after a successful logout + * + * @param array $params Provide custom parameters + * @return string The URL for the logout flow + */ + public function getLogoutUrl($params=array()) { + return $this->getUrl( + 'www', + 'logout.php', + array_merge(array( + 'next' => $this->getCurrentUrl(), + 'access_token' => $this->getUserAccessToken(), + ), $params) + ); + } + + /** + * Get a login status URL to fetch the status from Facebook. + * + * @param array $params Provide custom parameters + * @return string The URL for the logout flow + */ + public function getLoginStatusUrl($params=array()) { + return $this->getLoginUrl( + array_merge(array( + 'response_type' => 'code', + 'display' => 'none', + ), $params) + ); + } + + /** + * Make an API call. + * + * @return mixed The decoded response + */ + public function api(/* polymorphic */) { + $args = func_get_args(); + if (is_array($args[0])) { + return $this->_restserver($args[0]); + } else { + return call_user_func_array(array($this, '_graph'), $args); + } + } + + /** + * Constructs and returns the name of the cookie that + * potentially houses the signed request for the app user. + * The cookie is not set by the BaseFacebook class, but + * it may be set by the JavaScript SDK. + * + * @return string the name of the cookie that would house + * the signed request value. + */ + protected function getSignedRequestCookieName() { + return 'fbsr_'.$this->getAppId(); + } + + /** + * Constructs and returns the name of the cookie that potentially contain + * metadata. The cookie is not set by the BaseFacebook class, but it may be + * set by the JavaScript SDK. + * + * @return string the name of the cookie that would house metadata. + */ + protected function getMetadataCookieName() { + return 'fbm_'.$this->getAppId(); + } + + /** + * Get the authorization code from the query parameters, if it exists, + * and otherwise return false to signal no authorization code was + * discoverable. + * + * @return mixed The authorization code, or false if the authorization + * code could not be determined. + */ + protected function getCode() { + if (!isset($_REQUEST['code']) || !isset($_REQUEST['state'])) { + return false; + } + if ($this->state === $_REQUEST['state']) { + // CSRF state has done its job, so clear it + $this->state = null; + $this->clearPersistentData('state'); + return $_REQUEST['code']; + } + self::errorLog('CSRF state token does not match one provided.'); + + return false; + } + + /** + * Retrieves the UID with the understanding that + * $this->accessToken has already been set and is + * seemingly legitimate. It relies on Facebook's Graph API + * to retrieve user information and then extract + * the user ID. + * + * @return integer Returns the UID of the Facebook user, or 0 + * if the Facebook user could not be determined. + */ + protected function getUserFromAccessToken() { + try { + $user_info = $this->api('/me'); + return $user_info['id']; + } catch (FacebookApiException $e) { + return 0; + } + } + + /** + * Returns the access token that should be used for logged out + * users when no authorization code is available. + * + * @return string The application access token, useful for gathering + * public information about users and applications. + */ + public function getApplicationAccessToken() { + return $this->appId.'|'.$this->appSecret; + } + + /** + * Lays down a CSRF state token for this process. + * + * @return void + */ + protected function establishCSRFTokenState() { + if ($this->state === null) { + $this->state = md5(uniqid(mt_rand(), true)); + $this->setPersistentData('state', $this->state); + } + } + + /** + * Retrieves an access token for the given authorization code + * (previously generated from www.facebook.com on behalf of + * a specific user). The authorization code is sent to graph.facebook.com + * and a legitimate access token is generated provided the access token + * and the user for which it was generated all match, and the user is + * either logged in to Facebook or has granted an offline access permission. + * + * @param string $code An authorization code. + * @param string $redirect_uri Optional redirect URI. Default null + * + * @return mixed An access token exchanged for the authorization code, or + * false if an access token could not be generated. + */ + protected function getAccessTokenFromCode($code, $redirect_uri = null) { + if (empty($code)) { + return false; + } + + if ($redirect_uri === null) { + $redirect_uri = $this->getCurrentUrl(); + } + + try { + // need to circumvent json_decode by calling _oauthRequest + // directly, since response isn't JSON format. + $access_token_response = + $this->_oauthRequest( + $this->getUrl('graph', '/oauth/access_token'), + $params = array('client_id' => $this->getAppId(), + 'client_secret' => $this->getAppSecret(), + 'redirect_uri' => $redirect_uri, + 'code' => $code)); + } catch (FacebookApiException $e) { + // most likely that user very recently revoked authorization. + // In any event, we don't have an access token, so say so. + return false; + } + + if (empty($access_token_response)) { + return false; + } + + $response_params = array(); + parse_str($access_token_response, $response_params); + if (!isset($response_params['access_token'])) { + return false; + } + + return $response_params['access_token']; + } + + /** + * Invoke the old restserver.php endpoint. + * + * @param array $params Method call object + * + * @return mixed The decoded response object + * @throws FacebookApiException + */ + protected function _restserver($params) { + // generic application level parameters + $params['api_key'] = $this->getAppId(); + $params['format'] = 'json-strings'; + + $result = json_decode($this->_oauthRequest( + $this->getApiUrl($params['method']), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error_code'])) { + $this->throwAPIException($result); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + $method = strtolower($params['method']); + if ($method === 'auth.expiresession' || + $method === 'auth.revokeauthorization') { + $this->destroySession(); + } + + return $result; + } + + /** + * Return true if this is video post. + * + * @param string $path The path + * @param string $method The http method (default 'GET') + * + * @return boolean true if this is video post + */ + protected function isVideoPost($path, $method = 'GET') { + if ($method == 'POST' && preg_match("/^(\/)(.+)(\/)(videos)$/", $path)) { + return true; + } + return false; + } + + /** + * Invoke the Graph API. + * + * @param string $path The path (required) + * @param string $method The http method (default 'GET') + * @param array $params The query/post data + * + * @return mixed The decoded response object + * @throws FacebookApiException + */ + protected function _graph($path, $method = 'GET', $params = array()) { + if (is_array($method) && empty($params)) { + $params = $method; + $method = 'GET'; + } + $params['method'] = $method; // method override as we always do a POST + + if ($this->isVideoPost($path, $method)) { + $domainKey = 'graph_video'; + } else { + $domainKey = 'graph'; + } + + $result = json_decode($this->_oauthRequest( + $this->getUrl($domainKey, $path), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error'])) { + $this->throwAPIException($result); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + return $result; + } + + /** + * Make a OAuth Request. + * + * @param string $url The path (required) + * @param array $params The query/post data + * + * @return string The decoded response object + * @throws FacebookApiException + */ + protected function _oauthRequest($url, $params) { + if (!isset($params['access_token'])) { + $params['access_token'] = $this->getAccessToken(); + } + + if (isset($params['access_token']) && !isset($params['appsecret_proof'])) { + $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']); + } + + // json_encode all params values that are not strings + foreach ($params as $key => $value) { + if (!is_string($value) && !($value instanceof CURLFile)) { + $params[$key] = json_encode($value); + } + } + + return $this->makeRequest($url, $params); + } + + /** + * Generate a proof of App Secret + * This is required for all API calls originating from a server + * It is a sha256 hash of the access_token made using the app secret + * + * @param string $access_token The access_token to be hashed (required) + * + * @return string The sha256 hash of the access_token + */ + protected function getAppSecretProof($access_token) { + return hash_hmac('sha256', $access_token, $this->getAppSecret()); + } + + /** + * Makes an HTTP request. This method can be overridden by subclasses if + * developers want to do fancier things or use something other than curl to + * make the request. + * + * @param string $url The URL to make the request to + * @param array $params The parameters to use for the POST body + * @param CurlHandler $ch Initialized curl handle + * + * @return string The response text + */ + protected function makeRequest($url, $params, $ch=null) { + if (!$ch) { + $ch = curl_init(); + } + + $opts = self::$CURL_OPTS; + if ($this->getFileUploadSupport()) { + $opts[CURLOPT_POSTFIELDS] = $params; + } else { + $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); + } + $opts[CURLOPT_URL] = $url; + + // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait + // for 2 seconds if the server does not support this header. + if (isset($opts[CURLOPT_HTTPHEADER])) { + $existing_headers = $opts[CURLOPT_HTTPHEADER]; + $existing_headers[] = 'Expect:'; + $opts[CURLOPT_HTTPHEADER] = $existing_headers; + } else { + $opts[CURLOPT_HTTPHEADER] = array('Expect:'); + } + + curl_setopt_array($ch, $opts); + $result = curl_exec($ch); + + $errno = curl_errno($ch); + // CURLE_SSL_CACERT || CURLE_SSL_CACERT_BADFILE + if ($errno == 60 || $errno == 77) { + self::errorLog('Invalid or no certificate authority found, '. + 'using bundled information'); + curl_setopt($ch, CURLOPT_CAINFO, + dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fb_ca_chain_bundle.crt'); + $result = curl_exec($ch); + } + + // With dual stacked DNS responses, it's possible for a server to + // have IPv6 enabled but not have IPv6 connectivity. If this is + // the case, curl will try IPv4 first and if that fails, then it will + // fall back to IPv6 and the error EHOSTUNREACH is returned by the + // operating system. + if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) { + $matches = array(); + $regex = '/Failed to connect to ([^:].*): Network is unreachable/'; + if (preg_match($regex, curl_error($ch), $matches)) { + if (strlen(@inet_pton($matches[1])) === 16) { + self::errorLog('Invalid IPv6 configuration on server, '. + 'Please disable or get native IPv6 on your server.'); + self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + $result = curl_exec($ch); + } + } + } + + if ($result === false) { + $e = new FacebookApiException(array( + 'error_code' => curl_errno($ch), + 'error' => array( + 'message' => curl_error($ch), + 'type' => 'CurlException', + ), + )); + curl_close($ch); + throw $e; + } + curl_close($ch); + return $result; + } + + /** + * Parses a signed_request and validates the signature. + * + * @param string $signed_request A signed token + * + * @return array The payload inside it or null if the sig is wrong + */ + protected function parseSignedRequest($signed_request) { + + if (!$signed_request || strpos($signed_request, '.') === false) { + self::errorLog('Signed request was invalid!'); + return null; + } + + list($encoded_sig, $payload) = explode('.', $signed_request, 2); + + // decode the data + $sig = self::base64UrlDecode($encoded_sig); + $data = json_decode(self::base64UrlDecode($payload), true); + + if (!isset($data['algorithm']) + || strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM + ) { + self::errorLog( + 'Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM); + return null; + } + + // check sig + $expected_sig = hash_hmac('sha256', $payload, + $this->getAppSecret(), $raw = true); + + if (strlen($expected_sig) !== strlen($sig)) { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + + $result = 0; + for ($i = 0; $i < strlen($expected_sig); $i++) { + $result |= ord($expected_sig[$i]) ^ ord($sig[$i]); + } + + if ($result == 0) { + return $data; + } else { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + } + + /** + * Makes a signed_request blob using the given data. + * + * @param array $data The data array. + * + * @return string The signed request. + */ + protected function makeSignedRequest($data) { + if (!is_array($data)) { + throw new InvalidArgumentException( + 'makeSignedRequest expects an array. Got: ' . print_r($data, true)); + } + $data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM; + $data['issued_at'] = time(); + $json = json_encode($data); + $b64 = self::base64UrlEncode($json); + $raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true); + $sig = self::base64UrlEncode($raw_sig); + return $sig.'.'.$b64; + } + + /** + * Build the URL for api given parameters. + * + * @param string $method The method name. + * + * @return string The URL for the given parameters + */ + protected function getApiUrl($method) { + static $READ_ONLY_CALLS = + array('admin.getallocation' => 1, + 'admin.getappproperties' => 1, + 'admin.getbannedusers' => 1, + 'admin.getlivestreamvialink' => 1, + 'admin.getmetrics' => 1, + 'admin.getrestrictioninfo' => 1, + 'application.getpublicinfo' => 1, + 'auth.getapppublickey' => 1, + 'auth.getsession' => 1, + 'auth.getsignedpublicsessiondata' => 1, + 'comments.get' => 1, + 'connect.getunconnectedfriendscount' => 1, + 'dashboard.getactivity' => 1, + 'dashboard.getcount' => 1, + 'dashboard.getglobalnews' => 1, + 'dashboard.getnews' => 1, + 'dashboard.multigetcount' => 1, + 'dashboard.multigetnews' => 1, + 'data.getcookies' => 1, + 'events.get' => 1, + 'events.getmembers' => 1, + 'fbml.getcustomtags' => 1, + 'feed.getappfriendstories' => 1, + 'feed.getregisteredtemplatebundlebyid' => 1, + 'feed.getregisteredtemplatebundles' => 1, + 'fql.multiquery' => 1, + 'fql.query' => 1, + 'friends.arefriends' => 1, + 'friends.get' => 1, + 'friends.getappusers' => 1, + 'friends.getlists' => 1, + 'friends.getmutualfriends' => 1, + 'gifts.get' => 1, + 'groups.get' => 1, + 'groups.getmembers' => 1, + 'intl.gettranslations' => 1, + 'links.get' => 1, + 'notes.get' => 1, + 'notifications.get' => 1, + 'pages.getinfo' => 1, + 'pages.isadmin' => 1, + 'pages.isappadded' => 1, + 'pages.isfan' => 1, + 'permissions.checkavailableapiaccess' => 1, + 'permissions.checkgrantedapiaccess' => 1, + 'photos.get' => 1, + 'photos.getalbums' => 1, + 'photos.gettags' => 1, + 'profile.getinfo' => 1, + 'profile.getinfooptions' => 1, + 'stream.get' => 1, + 'stream.getcomments' => 1, + 'stream.getfilters' => 1, + 'users.getinfo' => 1, + 'users.getloggedinuser' => 1, + 'users.getstandardinfo' => 1, + 'users.hasapppermission' => 1, + 'users.isappuser' => 1, + 'users.isverified' => 1, + 'video.getuploadlimits' => 1); + $name = 'api'; + if (isset($READ_ONLY_CALLS[strtolower($method)])) { + $name = 'api_read'; + } else if (strtolower($method) == 'video.upload') { + $name = 'api_video'; + } + return self::getUrl($name, 'restserver.php'); + } + + /** + * Build the URL for given domain alias, path and parameters. + * + * @param string $name The name of the domain + * @param string $path Optional path (without a leading slash) + * @param array $params Optional query parameters + * + * @return string The URL for the given parameters + */ + protected function getUrl($name, $path='', $params=array()) { + $url = self::$DOMAIN_MAP[$name]; + if ($path) { + if ($path[0] === '/') { + $path = substr($path, 1); + } + $url .= $path; + } + if ($params) { + $url .= '?' . http_build_query($params, null, '&'); + } + + return $url; + } + + /** + * Returns the HTTP Host + * + * @return string The HTTP Host + */ + protected function getHttpHost() { + if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { + $forwardProxies = explode(',', $_SERVER['HTTP_X_FORWARDED_HOST']); + if (!empty($forwardProxies)) { + return $forwardProxies[0]; + } + } + return $_SERVER['HTTP_HOST']; + } + + /** + * Returns the HTTP Protocol + * + * @return string The HTTP Protocol + */ + protected function getHttpProtocol() { + if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { + if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + return 'https'; + } + return 'http'; + } + /*apache + variants specific way of checking for https*/ + if (isset($_SERVER['HTTPS']) && + ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) { + return 'https'; + } + /*nginx way of checking for https*/ + if (isset($_SERVER['SERVER_PORT']) && + ($_SERVER['SERVER_PORT'] === '443')) { + return 'https'; + } + return 'http'; + } + + /** + * Returns the base domain used for the cookie. + * + * @return string The base domain + */ + protected function getBaseDomain() { + // The base domain is stored in the metadata cookie if not we fallback + // to the current hostname + $metadata = $this->getMetadataCookie(); + if (array_key_exists('base_domain', $metadata) && + !empty($metadata['base_domain'])) { + return trim($metadata['base_domain'], '.'); + } + return $this->getHttpHost(); + } + + /** + * Returns the Current URL, stripping it of known FB parameters that should + * not persist. + * + * @return string The current URL + */ + protected function getCurrentUrl() { + $protocol = $this->getHttpProtocol() . '://'; + $host = $this->getHttpHost(); + $currentUrl = $protocol.$host.$_SERVER['REQUEST_URI']; + $parts = parse_url($currentUrl); + + $query = ''; + if (!empty($parts['query'])) { + // drop known fb params + $params = explode('&', $parts['query']); + $retained_params = array(); + foreach ($params as $param) { + if ($this->shouldRetainParam($param)) { + $retained_params[] = $param; + } + } + + if (!empty($retained_params)) { + $query = '?'.implode($retained_params, '&'); + } + } + + // use port if non default + $port = + isset($parts['port']) && + (($protocol === 'http://' && $parts['port'] !== 80) || + ($protocol === 'https://' && $parts['port'] !== 443)) + ? ':' . $parts['port'] : ''; + + // rebuild + return $protocol . $parts['host'] . $port . $parts['path'] . $query; + } + + /** + * Returns true if and only if the key or key/value pair should + * be retained as part of the query string. This amounts to + * a brute-force search of the very small list of Facebook-specific + * params that should be stripped out. + * + * @param string $param A key or key/value pair within a URL's query (e.g. + * 'foo=a', 'foo=', or 'foo'. + * + * @return boolean + */ + protected function shouldRetainParam($param) { + foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) { + if ($param === $drop_query_param || + strpos($param, $drop_query_param.'=') === 0) { + return false; + } + } + + return true; + } + + /** + * Analyzes the supplied result to see if it was thrown + * because the access token is no longer valid. If that is + * the case, then we destroy the session. + * + * @param array $result A record storing the error message returned + * by a failed API call. + */ + protected function throwAPIException($result) { + $e = new FacebookApiException($result); + switch ($e->getType()) { + // OAuth 2.0 Draft 00 style + case 'OAuthException': + // OAuth 2.0 Draft 10 style + case 'invalid_token': + // REST server errors are just Exceptions + case 'Exception': + $message = $e->getMessage(); + if ((strpos($message, 'Error validating access token') !== false) || + (strpos($message, 'Invalid OAuth access token') !== false) || + (strpos($message, 'An active access token must be used') !== false) + ) { + $this->destroySession(); + } + break; + } + + throw $e; + } + + + /** + * Prints to the error log if you aren't in command line mode. + * + * @param string $msg Log message + */ + protected static function errorLog($msg) { + // disable error log if we are running in a CLI environment + // @codeCoverageIgnoreStart + if (php_sapi_name() != 'cli') { + error_log($msg); + } + // uncomment this if you want to see the errors on the page + // print 'error_log: '.$msg."\n"; + // @codeCoverageIgnoreEnd + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * No padded = + * + * @param string $input base64UrlEncoded input + * + * @return string The decoded string + */ + protected static function base64UrlDecode($input) { + return base64_decode(strtr($input, '-_', '+/')); + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * + * @param string $input The input to encode + * @return string The base64Url encoded input, as a string. + */ + protected static function base64UrlEncode($input) { + $str = strtr(base64_encode($input), '+/', '-_'); + $str = str_replace('=', '', $str); + return $str; + } + + /** + * Destroy the current session + */ + public function destroySession() { + $this->accessToken = null; + $this->signedRequest = null; + $this->user = null; + $this->clearAllPersistentData(); + + // Javascript sets a cookie that will be used in getSignedRequest that we + // need to clear if we can + $cookie_name = $this->getSignedRequestCookieName(); + if (array_key_exists($cookie_name, $_COOKIE)) { + unset($_COOKIE[$cookie_name]); + if (!headers_sent()) { + $base_domain = $this->getBaseDomain(); + setcookie($cookie_name, '', 1, '/', '.'.$base_domain); + } else { + // @codeCoverageIgnoreStart + self::errorLog( + 'There exists a cookie that we wanted to clear that we couldn\'t '. + 'clear because headers was already sent. Make sure to do the first '. + 'API call before outputing anything.' + ); + // @codeCoverageIgnoreEnd + } + } + } + + /** + * Parses the metadata cookie that our Javascript API set + * + * @return array an array mapping key to value + */ + protected function getMetadataCookie() { + $cookie_name = $this->getMetadataCookieName(); + if (!array_key_exists($cookie_name, $_COOKIE)) { + return array(); + } + + // The cookie value can be wrapped in "-characters so remove them + $cookie_value = trim($_COOKIE[$cookie_name], '"'); + + if (empty($cookie_value)) { + return array(); + } + + $parts = explode('&', $cookie_value); + $metadata = array(); + foreach ($parts as $part) { + $pair = explode('=', $part, 2); + if (!empty($pair[0])) { + $metadata[urldecode($pair[0])] = + (count($pair) > 1) ? urldecode($pair[1]) : ''; + } + } + + return $metadata; + } + + /** + * Finds whether the given domain is allowed or not + * + * @param string $big The value to be checked against $small + * @param string $small The input string + * + * @return boolean Returns TRUE if $big matches $small + */ + protected static function isAllowedDomain($big, $small) { + if ($big === $small) { + return true; + } + return self::endsWith($big, '.'.$small); + } + + /** + * Checks if $big string ends with $small string + * + * @param string $big The value to be checked against $small + * @param string $small The input string + * + * @return boolean TRUE if $big ends with $small + */ + protected static function endsWith($big, $small) { + $len = strlen($small); + if ($len === 0) { + return true; + } + return substr($big, -$len) === $small; + } + + /** + * Each of the following four methods should be overridden in + * a concrete subclass, as they are in the provided Facebook class. + * The Facebook class uses PHP sessions to provide a primitive + * persistent store, but another subclass--one that you implement-- + * might use a database, memcache, or an in-memory cache. + * + * @see Facebook + */ + + /** + * Stores the given ($key, $value) pair, so that future calls to + * getPersistentData($key) return $value. This call may be in another request. + * + * @param string $key + * @param array $value + * + * @return void + */ + abstract protected function setPersistentData($key, $value); + + /** + * Get the data for $key, persisted by BaseFacebook::setPersistentData() + * + * @param string $key The key of the data to retrieve + * @param boolean $default The default value to return if $key is not found + * + * @return mixed + */ + abstract protected function getPersistentData($key, $default = false); + + /** + * Clear the data with $key from the persistent storage + * + * @param string $key + * + * @return void + */ + abstract protected function clearPersistentData($key); + + /** + * Clear all data from the persistent storage + * + * @return void + */ + abstract protected function clearAllPersistentData(); +} diff --git a/custom/include/social/facebook/facebook_sdk/src/facebook.php b/custom/include/social/facebook/facebook_sdk/src/facebook.php new file mode 100755 index 00000000000..51de333b352 --- /dev/null +++ b/custom/include/social/facebook/facebook_sdk/src/facebook.php @@ -0,0 +1,227 @@ +initSharedSession(); + + // re-load the persisted state, since parent + // attempted to read out of non-shared cookie + $state = $this->getPersistentData('state'); + if (!empty($state)) { + $this->state = $state; + } else { + $this->state = null; + } + + } + } + + /** + * Supported keys for persistent data + * + * @var array + */ + protected static $kSupportedKeys = + array('state', 'code', 'access_token', 'user_id'); + + /** + * Initiates Shared Session + */ + protected function initSharedSession() { + $cookie_name = $this->getSharedSessionCookieName(); + if (isset($_COOKIE[$cookie_name])) { + $data = $this->parseSignedRequest($_COOKIE[$cookie_name]); + if ($data && !empty($data['domain']) && + self::isAllowedDomain($this->getHttpHost(), $data['domain'])) { + // good case + $this->sharedSessionID = $data['id']; + return; + } + // ignoring potentially unreachable data + } + // evil/corrupt/missing case + $base_domain = $this->getBaseDomain(); + $this->sharedSessionID = md5(uniqid(mt_rand(), true)); + $cookie_value = $this->makeSignedRequest( + array( + 'domain' => $base_domain, + 'id' => $this->sharedSessionID, + ) + ); + $_COOKIE[$cookie_name] = $cookie_value; + if (!headers_sent()) { + $expire = time() + self::FBSS_COOKIE_EXPIRE; + setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain); + } else { + // @codeCoverageIgnoreStart + self::errorLog( + 'Shared session ID cookie could not be set! You must ensure you '. + 'create the Facebook instance before headers have been sent. This '. + 'will cause authentication issues after the first request.' + ); + // @codeCoverageIgnoreEnd + } + } + + /** + * Provides the implementations of the inherited abstract + * methods. The implementation uses PHP sessions to maintain + * a store for authorization codes, user ids, CSRF states, and + * access tokens. + */ + + /** + * {@inheritdoc} + * + * @see BaseFacebook::setPersistentData() + */ + protected function setPersistentData($key, $value) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to setPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + $_SESSION[$session_var_name] = $value; + } + + /** + * {@inheritdoc} + * + * @see BaseFacebook::getPersistentData() + */ + protected function getPersistentData($key, $default = false) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to getPersistentData.'); + return $default; + } + + $session_var_name = $this->constructSessionVariableName($key); + return isset($_SESSION[$session_var_name]) ? + $_SESSION[$session_var_name] : $default; + } + + /** + * {@inheritdoc} + * + * @see BaseFacebook::clearPersistentData() + */ + protected function clearPersistentData($key) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to clearPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + if (isset($_SESSION[$session_var_name])) { + unset($_SESSION[$session_var_name]); + } + } + + /** + * {@inheritdoc} + * + * @see BaseFacebook::clearAllPersistentData() + */ + protected function clearAllPersistentData() { + foreach (self::$kSupportedKeys as $key) { + $this->clearPersistentData($key); + } + if ($this->sharedSessionID) { + $this->deleteSharedSessionCookie(); + } + } + + /** + * Deletes Shared session cookie + */ + protected function deleteSharedSessionCookie() { + $cookie_name = $this->getSharedSessionCookieName(); + unset($_COOKIE[$cookie_name]); + $base_domain = $this->getBaseDomain(); + setcookie($cookie_name, '', 1, '/', '.'.$base_domain); + } + + /** + * Returns the Shared session cookie name + * + * @return string The Shared session cookie name + */ + protected function getSharedSessionCookieName() { + return self::FBSS_COOKIE_NAME . '_' . $this->getAppId(); + } + + /** + * Constructs and returns the name of the session key. + * + * @see setPersistentData() + * @param string $key The key for which the session variable name to construct. + * + * @return string The name of the session key. + */ + protected function constructSessionVariableName($key) { + $parts = array('fb', $this->getAppId(), $key); + if ($this->sharedSessionID) { + array_unshift($parts, $this->sharedSessionID); + } + return implode('_', $parts); + } +} diff --git a/custom/include/social/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt b/custom/include/social/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt new file mode 100755 index 00000000000..969239ff676 --- /dev/null +++ b/custom/include/social/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt @@ -0,0 +1,3920 @@ +## +## ca-bundle.crt -- Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## + +# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $ + +GTE CyberTrust Global Root +========================== +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg +Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG +A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz +MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL +Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 +IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u +sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql +HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID +AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW +M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF +NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- + +Thawte Server CA +================ +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE +AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j +b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV +BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u +c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG +A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 +ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl +/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 +1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J +GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ +GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- + +Thawte Premium Server CA +======================== +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE +AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl +ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU +VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 +aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ +cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 +aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh +Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ +qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm +SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf +8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t +UCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- + +Equifax Secure CA +================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE +ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT +B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR +fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW +8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE +CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS +spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 +zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB +BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 +70+sB3c4 +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 1 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy +MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE +NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i +o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq +kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 +RbyhkwS7hp86W0N6w4pl +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 3 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy +MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD +VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS +xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi +up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 +mPnHfxsb1gYgAlihw6ID +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA +TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah +WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf +Tqj/ZA1k +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd +k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq +WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM +XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC +lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx +nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC +wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA +ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK +1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk +LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO +FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 +lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT +1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD +Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 +-----END CERTIFICATE----- + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +ValiCert Class 1 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy +MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi +GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm +DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG +lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX +icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP +Orf1LXLI +-----END CERTIFICATE----- + +ValiCert Class 2 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC +CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf +ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ +SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV +UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 +W9ViH0Pd +-----END CERTIFICATE----- + +RSA Root Certificate 1 +====================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td +3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H +BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs +3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF +V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r +on+jjBXu +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E +bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ +rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ +Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB +FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N +y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h +a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc +D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y +azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug +b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 +tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 +C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS +0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs +Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 +JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf +0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx +JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j +GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Verisign Class 4 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS +tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM +8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW +Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX +Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt +mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd +RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG +UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- + +Entrust.net Secure Server CA +============================ +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg +cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl +ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG +A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi +eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p +dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ +aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 +gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw +ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw +CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l +dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw +NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow +HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN +Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 +n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC +AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER +gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B +AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS +o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z +2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX +OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Equifax Secure Global eBusiness CA +================================== +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp +bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx +HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds +b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV +PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN +qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn +hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs +MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN +I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY +NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 1 +============================= +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB +LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE +ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz +IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ +1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a +IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk +MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW +Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF +AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 +lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ +KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 2 +============================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE +ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y +MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT +DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn +2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 +BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx +JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e +uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 +jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia +78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm +V+GRMOrN +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +UTN-USER First-Network Applications +=================================== +-----BEGIN CERTIFICATE----- +MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp +BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 +WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T +YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB +cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug +mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj +DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu +Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi +P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE +j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w +HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j +cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G +CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y +IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK +RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp +xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq +DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE +-----END CERTIFICATE----- + +America Online Root Certification Authority 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG +v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z +DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh +sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP +8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z +o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf +GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF +VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft +3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g +Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- + +America Online Root Certification Authority 2 +============================================= +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en +fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 +f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO +qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN +RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 +gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn +6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid +FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 +Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj +B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op +aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY +T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p ++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg +JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy +zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO +ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh +1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf +GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff +Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP +cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 1 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw +NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 +7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 +EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl +0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 +2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa +HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT +iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 +28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV +yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR +vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P +qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z +IRlXvVWa +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +TDC Internet Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE +ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx +NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu +ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j +xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL +znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc +5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 +otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI +AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM +VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM +MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC +AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe +UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G +CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m +gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ +2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb +O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU +Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l +-----END CERTIFICATE----- + +TDC OCES Root CA +================ +-----BEGIN CERTIFICATE----- +MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE +ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 +MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH +nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 +zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV +iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde +dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO +3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB +5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k +ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm +cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp +Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x +LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM +MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm +aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy +MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 ++RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 +NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 +A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc +A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 +AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 +AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== +-----END CERTIFICATE----- + +UTN DATACorp SGC Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ +BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa +MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w +HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy +dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys +raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo +wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA +9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv +33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud +DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 +BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD +LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 +DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 +I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx +EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP +DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- + +UTN USERFirst Email Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 +BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 +OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx +FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx +ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz +dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx +B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 +om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG +TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl +yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE +AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV +HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll +bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne +xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ +5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV +NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ +w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +UTN USERFirst Object Root CA +============================ +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb +BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz +NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx +HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy +dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR +loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ +w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu +lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 +RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL +BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 +ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly +c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw +DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO +PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE +qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG +hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Qualified (Class QA) Root +================================= +-----BEGIN CERTIFICATE----- +MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn +eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 +bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 +LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 +dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP +aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV +CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e +8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb +m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ +0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM +0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 +YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh +biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p +a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz +YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg +YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg +ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov +L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr +Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 +aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg +YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 +IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 +DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN +wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg +W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc +R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR +5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +NetLock Business (Class B) Root +=============================== +-----BEGIN CERTIFICATE----- +MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg +VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD +VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv +bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg +VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB +iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S +o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr +1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ +RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh +dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 +ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv +c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg +YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh +c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz +Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA +bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl +IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 +YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj +cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM +43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR +stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI +-----END CERTIFICATE----- + +NetLock Express (Class C) Root +============================== +-----BEGIN CERTIFICATE----- +MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ +BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j +ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z +W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 +euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw +DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN +RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn +YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB +IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i +aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 +ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs +ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo +dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y +emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k +IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ +UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg +YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 +xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW +gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Firmaprofesional Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT +GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp +Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA +ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL +MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT +OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 +ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V +j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH +lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf +3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 +NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww +KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG +AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD +ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq +u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf +wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm +7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG +VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= +-----END CERTIFICATE----- + +Wells Fargo Root CA +=================== +-----BEGIN CERTIFICATE----- +MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl +bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv +MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX +x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 +E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 +OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j +sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj +YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF +BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD +ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv +m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R +OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx +x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 +tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 1 +============================================== +-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP +MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 +acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx +MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg +U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB +TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC +aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX +yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i +Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ +8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 +W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 +sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE +q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy +B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY +nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2 +============================================== +-----BEGIN CERTIFICATE----- +MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN +MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr +dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe +LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI +x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g +QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr +5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB +AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt +Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 +Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ +hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P +9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 +UrbnBEI= +-----END CERTIFICATE----- + +SwissSign Platinum CA - G2 +========================== +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw +HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM +U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu +669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF +eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne +WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo +j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 +8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T +aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy +domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D ++m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV +CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv +zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 +Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 +NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 +U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 +KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl +9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B +aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs +OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY +Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci +IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +S-TRUST Authentication and Encryption Root CA 2005 PN +===================================================== +-----BEGIN CERTIFICATE----- +MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh +cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT +LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w +NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk +ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj +aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp +b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob +4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL +g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf +eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 +KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB +/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv +bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU +D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD +pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 +P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA +nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit +F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b +Hz2eBIPdltkdOpQ= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. +====================================== +-----BEGIN CERTIFICATE----- +MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT +AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg +LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w +HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ +U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh +IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN +yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU +2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 +4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP +2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm +8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf +HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa +Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK +5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b +czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g +ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF +BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug +cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf +AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX +EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v +/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 +MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 +3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk +eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f +/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h +RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU +Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 2 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw +MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw +IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 +xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ +Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u +SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G +dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ +KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj +TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP +JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk +vQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 3 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw +MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W +yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo +6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ +uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk +2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE +O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 +yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 +IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal +092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc +5A== +-----END CERTIFICATE----- + +TC TrustCenter Universal CA I +============================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN +MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg +VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw +JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC +qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv +xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw +ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O +gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j +BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG +1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy +vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 +ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a +7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +ComSign CA +========== +-----BEGIN CERTIFICATE----- +MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD +EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy +MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp +Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q +ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy +P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN +GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk +YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM +rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy +oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P +AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ +VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 +QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI +mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb +/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG +zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U +AGegcQCCSA== +-----END CERTIFICATE----- + +ComSign Secured CA +================== +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE +AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w +NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD +QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs +49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH +7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB +kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 +9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw +AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t +U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA +j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC +AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a +BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp +FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP +51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +Buypass Class 3 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 +MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx +ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 +n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia +AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c +1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 +pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA +EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 +htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj +el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg +QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe +Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt +IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by +X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b +gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr +eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ +TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy +Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn +uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI +qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm +ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 +Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW +Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t +FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm +zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k +XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT +bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU +RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK +1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt +2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ +Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 +AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ +VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 +yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa +XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n +0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ +RjXZ+Hxb +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky +CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX +bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ +D/xwzoiQ +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi +=================================================== +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz +ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 +MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 +cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u +aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY +8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y +jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI +JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk +9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG +SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d +F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq +D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 +Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq +fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +TC TrustCenter Universal CA III +=============================== +-----BEGIN CERTIFICATE----- +MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe +Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU +QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex +KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt +QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO +juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut +CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 +M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G +A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA +g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ +KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK +BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV +CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq +woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +A-Trust-nQual-03 +================ +-----BEGIN CERTIFICATE----- +MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE +Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy +a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R +dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw +RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 +ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 +c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA +zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n +yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE +SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 +iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V +cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV +eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 +ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr +sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd +JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS +mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 +ahq97BvIxYSazQ== +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı +====================================================== +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- diff --git a/custom/include/social/facebook/facebook_sdk/tests/bootstrap.php b/custom/include/social/facebook/facebook_sdk/tests/bootstrap.php new file mode 100755 index 00000000000..e32b9f83c24 --- /dev/null +++ b/custom/include/social/facebook/facebook_sdk/tests/bootstrap.php @@ -0,0 +1,5 @@ + self::APP_ID, + 'secret' => self::SECRET, + )); + return $facebook->publicMakeSignedRequest( + array( + 'user_id' => $id, + 'oauth_token' => $oauth_token + ) + ); + } + + private static function kNonTosedSignedRequest() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + return $facebook->publicMakeSignedRequest(array()); + } + + private static function kSignedRequestWithEmptyValue() { + return ''; + } + + private static function kSignedRequestWithBogusSignature() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => 'bogus', + )); + return $facebook->publicMakeSignedRequest( + array( + 'algorithm' => 'HMAC-SHA256', + ) + ); + } + + private static function kSignedRequestWithWrongAlgo() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $data['algorithm'] = 'foo'; + $json = json_encode($data); + $b64 = $facebook->publicBase64UrlEncode($json); + $raw_sig = hash_hmac('sha256', $b64, self::SECRET, $raw = true); + $sig = $facebook->publicBase64UrlEncode($raw_sig); + return $sig.'.'.$b64; + } + + public function testConstructor() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals($facebook->getAppId(), self::APP_ID, + 'Expect the App ID to be set.'); + $this->assertEquals($facebook->getAppSecret(), self::SECRET, + 'Expect the API secret to be set.'); + } + + public function testConstructorWithFileUpload() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'fileUpload' => true, + )); + $this->assertEquals($facebook->getAppId(), self::APP_ID, + 'Expect the App ID to be set.'); + $this->assertEquals($facebook->getAppSecret(), self::SECRET, + 'Expect the API secret to be set.'); + $this->assertTrue($facebook->getFileUploadSupport(), + 'Expect file upload support to be on.'); + // alias (depricated) for getFileUploadSupport -- test until removed + $this->assertTrue($facebook->useFileUploadSupport(), + 'Expect file upload support to be on.'); + } + + public function testSetAppId() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setAppId('dummy'); + $this->assertEquals($facebook->getAppId(), 'dummy', + 'Expect the App ID to be dummy.'); + } + + public function testSetAPISecret() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setApiSecret('dummy'); + $this->assertEquals($facebook->getApiSecret(), 'dummy', + 'Expect the API secret to be dummy.'); + } + + public function testSetAPPSecret() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setAppSecret('dummy'); + $this->assertEquals($facebook->getAppSecret(), 'dummy', + 'Expect the API secret to be dummy.'); + } + + public function testSetAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('saltydog'); + $this->assertEquals($facebook->getAccessToken(), 'saltydog', + 'Expect installed access token to remain \'saltydog\''); + } + + public function testSetFileUploadSupport() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertFalse($facebook->getFileUploadSupport(), + 'Expect file upload support to be off.'); + // alias for getFileUploadSupport (depricated), testing until removed + $this->assertFalse($facebook->useFileUploadSupport(), + 'Expect file upload support to be off.'); + $facebook->setFileUploadSupport(true); + $this->assertTrue($facebook->getFileUploadSupport(), + 'Expect file upload support to be on.'); + // alias for getFileUploadSupport (depricated), testing until removed + $this->assertTrue($facebook->useFileUploadSupport(), + 'Expect file upload support to be on.'); + } + + public function testGetCurrentURL() { + $facebook = new FBGetCurrentURLFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=one&two=two&three=three'; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one=one&two=two&three=three', + $current_url, + 'getCurrentUrl function is changing the current URL'); + + // ensure structure of valueless GET params is retained (sometimes + // an = sign was present, and sometimes it was not) + // first test when equal signs are present + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=&two=&three='; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one=&two=&three=', + $current_url, + 'getCurrentUrl function is changing the current URL'); + + // now confirm that + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one&two&three'; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one&two&three', + $current_url, + 'getCurrentUrl function is changing the current URL'); + } + + public function testGetLoginURL() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $login_url = parse_url($facebook->getLoginUrl()); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + $expected_login_params = + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'); + + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetLoginURLWithExtraParams() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $extra_params = array('scope' => 'email, sms', + 'nonsense' => 'nonsense'); + $login_url = parse_url($facebook->getLoginUrl($extra_params)); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + $expected_login_params = + array_merge( + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'), + $extra_params); + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetLoginURLWithScopeParamsAsArray() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $scope_params_as_array = array('email','sms','read_stream'); + $extra_params = array('scope' => $scope_params_as_array, + 'nonsense' => 'nonsense'); + $login_url = parse_url($facebook->getLoginUrl($extra_params)); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + // expect api to flatten array params to comma separated list + // should do the same here before asserting to make sure API is behaving + // correctly; + $extra_params['scope'] = implode(',', $scope_params_as_array); + $expected_login_params = + array_merge( + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'), + $extra_params); + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetCodeWithValidCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setCSRFStateToken(); + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + $_REQUEST['state'] = $facebook->getCSRFStateToken(); + $this->assertEquals($code, + $facebook->publicGetCode(), + 'Expect code to be pulled from $_REQUEST[\'code\']'); + } + + public function testGetCodeWithInvalidCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setCSRFStateToken(); + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + $_REQUEST['state'] = $facebook->getCSRFStateToken().'forgery!!!'; + $this->assertFalse($facebook->publicGetCode(), + 'Expect getCode to fail, CSRF state should not match.'); + } + + public function testGetCodeWithMissingCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + // intentionally don't set CSRF token at all + $this->assertFalse($facebook->publicGetCode(), + 'Expect getCode to fail, CSRF state not sent back.'); + } + + public function testPersistentCSRFState() + { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setCSRFStateToken(); + $code = $facebook->getCSRFStateToken(); + + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $this->assertEquals($code, $facebook->publicGetState(), + 'Persisted CSRF state token not loaded correctly'); + } + + public function testPersistentCSRFStateWithSharedSession() + { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $facebook->setCSRFStateToken(); + $code = $facebook->getCSRFStateToken(); + + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + + $this->assertEquals($code, $facebook->publicGetState(), + 'Persisted CSRF state token not loaded correctly with shared session'); + } + + public function testGetUserFromSignedRequest() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + } + + public function testDisallowSignedRequest() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'allowSignedRequest' => false + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals(0, $facebook->getUser(), + 'Should not have received valid user from signed_request.'); + } + + + public function testSignedRequestRewrite(){ + $facebook = new FBRewrite(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER, 'Hello sweetie'); + + $this->assertEquals(self::TEST_USER, $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + + $this->assertEquals('Hello sweetie', $facebook->getAccessToken(), + 'Failed to get access token from signed request'); + + $facebook->uncache(); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER_2, 'spoilers'); + + $this->assertEquals(self::TEST_USER_2, $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + + $_REQUEST['signed_request'] = null; + $facebook ->uncacheSignedRequest(); + + $this->assertNotEquals('Hello sweetie', $facebook->getAccessToken(), + 'Failed to clear access token'); + } + + public function testGetSignedRequestFromCookie() { + $facebook = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = + self::kValidSignedRequest(); + $this->assertNotNull($facebook->publicGetSignedRequest()); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + } + + public function testGetSignedRequestWithIncorrectSignature() { + $facebook = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = + self::kSignedRequestWithBogusSignature(); + $this->assertNull($facebook->publicGetSignedRequest()); + } + + public function testNonUserAccessToken() { + $facebook = new FBAccessToken(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // no cookies, and no request params, so no user or code, + // so no user access token (even with cookie support) + $this->assertEquals($facebook->publicGetApplicationAccessToken(), + $facebook->getAccessToken(), + 'Access token should be that for logged out users.'); + } + + public function testMissingMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEmpty($fb->publicGetMetadataCookie()); + } + + public function testEmptyMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $_COOKIE[$fb->publicGetMetadataCookieName()] = ''; + $this->assertEmpty($fb->publicGetMetadataCookie()); + } + + public function testMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'foo'; + $val = '42'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = "$key=$val"; + $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); + } + + public function testQuotedMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'foo'; + $val = '42'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = "\"$key=$val\""; + $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); + } + + public function testAPIForLoggedOutUsers() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $response = $facebook->api(array( + 'method' => 'fql.query', + 'query' => 'SELECT name FROM user WHERE uid=4', + )); + $this->assertEquals(count($response), 1, + 'Expect one row back.'); + $this->assertEquals($response[0]['name'], 'Mark Zuckerberg', + 'Expect the name back.'); + } + + public function testAPIWithBogusAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('this-is-not-really-an-access-token'); + // if we don't set an access token and there's no way to + // get one, then the FQL query below works beautifully, handing + // over Zuck's public data. But if you specify a bogus access + // token as I have right here, then the FQL query should fail. + // We could return just Zuck's public data, but that wouldn't + // advertise the issue that the access token is at worst broken + // and at best expired. + try { + $response = $facebook->api(array( + 'method' => 'fql.query', + 'query' => 'SELECT name FROM profile WHERE id=4', + )); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + $result = $e->getResult(); + $this->assertTrue(is_array($result), 'expect a result object'); + $this->assertEquals('190', $result['error_code'], 'expect code'); + } + } + + public function testAPIGraphPublicData() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $response = $facebook->api('/jerry'); + $this->assertEquals( + $response['id'], '214707', 'should get expected id.'); + } + + public function testGraphAPIWithBogusAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('this-is-not-really-an-access-token'); + try { + $response = $facebook->api('/me'); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token and didn't like it + $msg = 'OAuthException: Invalid OAuth access token.'; + $this->assertEquals($msg, (string) $e, + 'Expect the invalid OAuth token message.'); + } + } + + public function testGraphAPIWithExpiredAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken(self::$kExpiredAccessToken); + try { + $response = $facebook->api('/me'); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token and didn't like it + $error_msg_start = 'OAuthException: Error validating access token:'; + $this->assertTrue(strpos((string) $e, $error_msg_start) === 0, + 'Expect the token validation error message.'); + } + } + + public function testGraphAPIOAuthSpecError() { + $facebook = new TransientFacebook(array( + 'appId' => self::MIGRATED_APP_ID, + 'secret' => self::MIGRATED_SECRET, + )); + + try { + $response = $facebook->api('/me', array( + 'client_id' => self::MIGRATED_APP_ID)); + + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token + $msg = 'invalid_request: An active access token must be used '. + 'to query information about the current user.'; + $this->assertEquals($msg, (string) $e, + 'Expect the invalid session message.'); + } + } + + public function testGraphAPIMethodOAuthSpecError() { + $facebook = new TransientFacebook(array( + 'appId' => self::MIGRATED_APP_ID, + 'secret' => self::MIGRATED_SECRET, + )); + + try { + $response = $facebook->api('/daaku.shah', 'DELETE', array( + 'client_id' => self::MIGRATED_APP_ID)); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + $this->assertEquals(strpos($e, 'invalid_request'), 0); + } + } + + public function testCurlFailure() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + if (!defined('CURLOPT_TIMEOUT_MS')) { + // can't test it if we don't have millisecond timeouts + return; + } + + $exception = null; + try { + // we dont expect facebook will ever return in 1ms + Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS] = 50; + $facebook->api('/naitik'); + } catch(FacebookApiException $e) { + $exception = $e; + } + unset(Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS]); + if (!$exception) { + $this->fail('no exception was thrown on timeout.'); + } + + $code = $exception->getCode(); + if ($code != CURLE_OPERATION_TIMEOUTED && $code != CURLE_COULDNT_CONNECT) { + $this->fail("Expected curl error code 7 or 28 but got: $code"); + } + $this->assertEquals('CurlException', $exception->getType(), 'expect type'); + } + + public function testGraphAPIWithOnlyParams() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $response = $facebook->api('/jerry'); + $this->assertTrue(isset($response['id']), + 'User ID should be public.'); + $this->assertTrue(isset($response['name']), + 'User\'s name should be public.'); + $this->assertTrue(isset($response['first_name']), + 'User\'s first name should be public.'); + $this->assertTrue(isset($response['last_name']), + 'User\'s last name should be public.'); + $this->assertFalse(isset($response['work']), + 'User\'s work history should only be available with '. + 'a valid access token.'); + $this->assertFalse(isset($response['education']), + 'User\'s education history should only be '. + 'available with a valid access token.'); + $this->assertFalse(isset($response['verified']), + 'User\'s verification status should only be '. + 'available with a valid access token.'); + } + + public function testLoginURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testLoginURLDefaultsDropStateQueryParam() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples?state=xx42xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + } + + public function testLoginURLDefaultsDropCodeQueryParam() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples?code=xx42xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + } + + public function testLoginURLDefaultsDropSignedRequestParamButNotOthers() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = + '/examples?signed_request=xx42xx&do_not_drop=xx43xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + $this->assertTrue(strpos($facebook->getLoginUrl(), 'xx43xx') > -1, + 'Expect the do_not_drop param to exist.'); + } + + public function testLoginURLCustomNext() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $next = 'http://fbrell.com/custom'; + $loginUrl = $facebook->getLoginUrl(array( + 'redirect_uri' => $next, + 'cancel_url' => $next + )); + $currentEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $expectedEncodedUrl = rawurlencode($next); + $this->assertNotNull(strpos($loginUrl, $expectedEncodedUrl), + 'Expect the custom url to exist.'); + $this->assertFalse(strpos($loginUrl, $currentEncodedUrl), + 'Expect the current url to not exist.'); + } + + public function testLogoutURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLogoutUrl(), $encodedUrl), + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLogoutUrl(), self::SECRET)); + } + + public function testLoginStatusURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginStatusUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testLoginStatusURLCustom() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl1 = rawurlencode('http://fbrell.com/examples'); + $okUrl = 'http://fbrell.com/here1'; + $encodedUrl2 = rawurlencode($okUrl); + $loginStatusUrl = $facebook->getLoginStatusUrl(array( + 'ok_session' => $okUrl, + )); + $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl1), + 'Expect the current url to exist.'); + $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl2), + 'Expect the custom url to exist.'); + } + + public function testNonDefaultPort() { + $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com:8080/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testSecureCurrentUrl() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $_SERVER['HTTPS'] = 'on'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('https://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testSecureCurrentUrlWithNonDefaultPort() { + $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; + $_SERVER['REQUEST_URI'] = '/examples'; + $_SERVER['HTTPS'] = 'on'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('https://fbrell.com:8080/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testBase64UrlEncode() { + $input = 'Facebook rocks'; + $output = 'RmFjZWJvb2sgcm9ja3M'; + + $this->assertEquals(FBPublic::publicBase64UrlDecode($output), $input); + } + + public function testSignedToken() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $sr = self::kValidSignedRequest(); + $payload = $facebook->publicParseSignedRequest($sr); + $this->assertNotNull($payload, 'Expected token to parse'); + $this->assertEquals($facebook->getSignedRequest(), null); + $_REQUEST['signed_request'] = $sr; + $this->assertEquals($facebook->getSignedRequest(), $payload); + } + + public function testNonTossedSignedtoken() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $facebook->publicParseSignedRequest( + self::kNonTosedSignedRequest()); + $this->assertNotNull($payload, 'Expected token to parse'); + $this->assertNull($facebook->getSignedRequest()); + $_REQUEST['signed_request'] = self::kNonTosedSignedRequest(); + $sr = $facebook->getSignedRequest(); + $this->assertTrue(isset($sr['algorithm'])); + } + + public function testSignedRequestWithEmptyValue() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $_REQUEST['signed_request'] = self::kSignedRequestWithEmptyValue(); + $this->assertNull($fb->getSignedRequest()); + $_COOKIE[$fb->publicGetSignedRequestCookieName()] = + self::kSignedRequestWithEmptyValue(); + $this->assertNull($fb->getSignedRequest()); + } + + public function testSignedRequestWithWrongAlgo() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $fb->publicParseSignedRequest( + self::kSignedRequestWithWrongAlgo()); + $this->assertNull($payload, 'Expected nothing back.'); + } + + public function testMakeAndParse() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $data = array('foo' => 42); + $sr = $fb->publicMakeSignedRequest($data); + $decoded = $fb->publicParseSignedRequest($sr); + $this->assertEquals($data['foo'], $decoded['foo']); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testMakeSignedRequestExpectsArray() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $sr = $fb->publicMakeSignedRequest(''); + } + + public function testBundledCACert() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + // use the bundled cert from the start + Facebook::$CURL_OPTS[CURLOPT_CAINFO] = + dirname(__FILE__) . '/../src/fb_ca_chain_bundle.crt'; + $response = $facebook->api('/naitik'); + + unset(Facebook::$CURL_OPTS[CURLOPT_CAINFO]); + $this->assertEquals( + $response['id'], '5526183', 'should get expected id.'); + } + + public function testVideoUpload() { + $facebook = new FBRecordURL(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->api(array('method' => 'video.upload')); + $this->assertContains('//api-video.', $facebook->getRequestedURL(), + 'video.upload should go against api-video'); + } + + public function testVideoUploadGraph() { + $facebook = new FBRecordURL(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->api('/me/videos', 'POST'); + $this->assertContains('//graph-video.', $facebook->getRequestedURL(), + '/me/videos should go against graph-video'); + } + + public function testGetUserAndAccessTokenFromSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->publicSetPersistentData('access_token', + self::$kExpiredAccessToken); + $facebook->publicSetPersistentData('user_id', 12345); + $this->assertEquals(self::$kExpiredAccessToken, + $facebook->getAccessToken(), + 'Get access token from persistent store.'); + $this->assertEquals('12345', + $facebook->getUser(), + 'Get user id from persistent store.'); + } + + public function testGetUserAndAccessTokenFromSignedRequestNotSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $facebook->publicSetPersistentData('user_id', 41572); + $facebook->publicSetPersistentData('access_token', + self::$kExpiredAccessToken); + $this->assertNotEquals('41572', $facebook->getUser(), + 'Got user from session instead of signed request.'); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get correct user ID from signed request.'); + $this->assertNotEquals( + self::$kExpiredAccessToken, + $facebook->getAccessToken(), + 'Got access token from session instead of signed request.'); + $this->assertNotEmpty( + $facebook->getAccessToken(), + 'Failed to extract an access token from the signed request.'); + } + + public function testGetUserWithoutCodeOrSignedRequestOrSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + // deliberately leave $_REQUEST and _$SESSION empty + $this->assertEmpty($_REQUEST, + 'GET, POST, and COOKIE params exist even though '. + 'they should. Test cannot succeed unless all of '. + '$_REQUEST is empty.'); + $this->assertEmpty($_SESSION, + 'Session is carrying state and should not be.'); + $this->assertEmpty($facebook->getUser(), + 'Got a user id, even without a signed request, '. + 'access token, or session variable.'); + $this->assertEmpty($_SESSION, + 'Session superglobal incorrectly populated by getUser.'); + } + + public function testGetAccessTokenUsingCodeInJsSdkCookie() { + $code = 'code1'; + $access_token = 'at1'; + $methods_to_stub = array('getSignedRequest', 'getAccessTokenFromCode'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('code' => $code))); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValueMap(array(array($code, '', $access_token)))); + $this->assertEquals($stub->getAccessToken(), $access_token); + } + + public function testSignedRequestWithoutAuthClearsData() { + $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('foo' => 1))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testInvalidCodeInSignedRequestWillClearData() { + $code = 'code1'; + $methods_to_stub = array( + 'getSignedRequest', + 'getAccessTokenFromCode', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('code' => $code))); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValue(null)); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testInvalidCodeWillClearData() { + $code = 'code1'; + $methods_to_stub = array( + 'getCode', + 'getAccessTokenFromCode', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getCode') + ->will($this->returnValue($code)); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValue(null)); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testValidCodeToToken() { + $code = 'code1'; + $access_token = 'at1'; + $methods_to_stub = array( + 'getSignedRequest', + 'getCode', + 'getAccessTokenFromCode', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getCode') + ->will($this->returnValue($code)); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValueMap(array(array($code, null, $access_token)))); + $this->assertEquals($stub->getAccessToken(), $access_token); + } + + public function testSignedRequestWithoutAuthClearsDataInAvailData() { + $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('foo' => 1))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testFailedToGetUserFromAccessTokenClearsData() { + $methods_to_stub = array( + 'getAccessToken', + 'getUserFromAccessToken', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('getUserFromAccessToken'); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testUserFromAccessTokenIsStored() { + $methods_to_stub = array( + 'getAccessToken', + 'getUserFromAccessToken', + 'setPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $user = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('getUserFromAccessToken') + ->will($this->returnValue($user)); + $stub + ->expects($this->once()) + ->method('setPersistentData'); + $this->assertEquals($user, $stub->getUser()); + } + + public function testUserFromAccessTokenPullsID() { + $methods_to_stub = array( + 'getAccessToken', + 'api', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $user = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('api') + ->will($this->returnValue(array('id' => $user))); + $this->assertEquals($user, $stub->getUser()); + } + + public function testUserFromAccessTokenResetsOnApiException() { + $methods_to_stub = array( + 'getAccessToken', + 'clearAllPersistentData', + 'api', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('api') + ->will($this->throwException(new FacebookApiException(false))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testEmptyCodeReturnsFalse() { + $fb = new FBPublicGetAccessTokenFromCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $this->assertFalse($fb->publicGetAccessTokenFromCode('')); + $this->assertFalse($fb->publicGetAccessTokenFromCode(null)); + $this->assertFalse($fb->publicGetAccessTokenFromCode(false)); + } + + public function testNullRedirectURIUsesCurrentURL() { + $methods_to_stub = array( + '_oauthRequest', + 'getCurrentUrl', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $access_token = 'at1'; + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("access_token=$access_token")); + $stub + ->expects($this->once()) + ->method('getCurrentUrl'); + $this->assertEquals( + $access_token, $stub->publicGetAccessTokenFromCode('c')); + } + + public function testNullRedirectURIAllowsEmptyStringForCookie() { + $methods_to_stub = array( + '_oauthRequest', + 'getCurrentUrl', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $access_token = 'at1'; + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("access_token=$access_token")); + $stub + ->expects($this->never()) + ->method('getCurrentUrl'); + $this->assertEquals( + $access_token, $stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testAPIExceptionDuringCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->throwException(new FacebookApiException(false))); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testEmptyResponseInCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('')); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testExistingStateRestoredInConstructor() { + $fb = new FBPublicState(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $this->assertEquals(FBPublicState::STATE, $fb->publicGetState()); + } + + public function testMissingAccessTokenInCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('foo=1')); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testAppsecretProofNoParams() { + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $token = $fb->getAccessToken(); + $proof = $fb->publicGetAppSecretProof($token); + $params = array(); + $fb->api('/mattynoce', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals($proof, $requests[0]['params']['appsecret_proof']); + } + + public function testAppsecretProofWithParams() { + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $proof = 'foo'; + $params = array('appsecret_proof' => $proof); + $fb->api('/mattynoce', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals($proof, $requests[0]['params']['appsecret_proof']); + } + + public function testExceptionConstructorWithErrorCode() { + $code = 404; + $e = new FacebookApiException(array('error_code' => $code)); + $this->assertEquals($code, $e->getCode()); + } + + public function testExceptionConstructorWithInvalidErrorCode() { + $e = new FacebookApiException(array('error_code' => 'not an int')); + $this->assertEquals(0, $e->getCode()); + } + + // this happens often despite the fact that it is useless + public function testExceptionTypeFalse() { + $e = new FacebookApiException(false); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionTypeMixedDraft00() { + $e = new FacebookApiException(array('error' => array('message' => 'foo'))); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionTypeDraft00() { + $error = 'foo'; + $e = new FacebookApiException( + array('error' => array('type' => $error, 'message' => 'hello world'))); + $this->assertEquals($error, $e->getType()); + } + + public function testExceptionTypeDraft10() { + $error = 'foo'; + $e = new FacebookApiException(array('error' => $error)); + $this->assertEquals($error, $e->getType()); + } + + public function testExceptionTypeDefault() { + $e = new FacebookApiException(array('error' => false)); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionToString() { + $e = new FacebookApiException(array( + 'error_code' => 1, + 'error_description' => 'foo', + )); + $this->assertEquals('Exception: 1: foo', (string) $e); + } + + public function testDestroyClearsCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $_COOKIE[$fb->publicGetSignedRequestCookieName()] = 'foo'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = 'base_domain=fbrell.com'; + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb->destroySession(); + $this->assertFalse( + array_key_exists($fb->publicGetSignedRequestCookieName(), $_COOKIE)); + } + + public function testAuthExpireSessionDestroysSession() { + $methods_to_stub = array( + '_oauthRequest', + 'destroySession', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $key = 'foo'; + $val = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("{\"$key\":$val}")); + $stub + ->expects($this->once()) + ->method('destroySession'); + $this->assertEquals( + array($key => $val), + $stub->api(array('method' => 'auth.expireSession')) + ); + } + + public function testLowercaseAuthRevokeAuthDestroysSession() { + $methods_to_stub = array( + '_oauthRequest', + 'destroySession', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $key = 'foo'; + $val = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("{\"$key\":$val}")); + $stub + ->expects($this->once()) + ->method('destroySession'); + $this->assertEquals( + array($key => $val), + $stub->api(array('method' => 'auth.revokeauthorization')) + ); + } + + /** + * @expectedException FacebookAPIException + */ + public function testErrorCodeFromRestAPIThrowsException() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('{"error_code": 500}')); + $stub->api(array('method' => 'foo')); + } + + public function testJsonEncodeOfNonStringParams() { + $foo = array(1, 2); + $params = array( + 'method' => 'get', + 'foo' => $foo, + ); + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $fb->api('/naitik', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals(json_encode($foo), $requests[0]['params']['foo']); + } + + public function testSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertEquals( + $val, + $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] + ); + $this->assertEquals( + $val, + $fb->publicGetPersistentData($key) + ); + } + + public function testSessionBackedFacebookIgnoresUnsupportedKey() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = '--invalid--'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertFalse( + array_key_exists( + sprintf('fb_%s_%s', self::APP_ID, $key), + $_SESSION + ) + ); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testClearSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertEquals( + $val, + $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] + ); + $this->assertEquals( + $val, + $fb->publicGetPersistentData($key) + ); + $fb->publicClearPersistentData($key); + $this->assertFalse( + array_key_exists( + sprintf('fb_%s_%s', self::APP_ID, $key), + $_SESSION + ) + ); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSessionBackedFacebookIgnoresUnsupportedKeyInClear() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); + $_SESSION[$session_var_name] = $val; + $fb->publicClearPersistentData($key); + $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testClearAllSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearAllPersistentData(); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIgnoresUnsupportedKey() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedClearSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearPersistentData($key); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIgnoresUnsupportedKeyInClear() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $_SESSION[$session_var_name] = $val; + $fb->publicClearPersistentData($key); + $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedClearAllSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearAllPersistentData(); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIsRestored() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $shared_session_id = $fb->publicGetSharedSessionID(); + $session_var_name = sprintf( + '%s_fb_%s_%s', + $shared_session_id, + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + + // check the new instance has the same data + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $this->assertEquals( + $shared_session_id, + $fb->publicGetSharedSessionID() + ); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIsNotRestoredWhenCorrupt() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $shared_session_id = $fb->publicGetSharedSessionID(); + $session_var_name = sprintf( + '%s_fb_%s_%s', + $shared_session_id, + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + + // break the cookie + $cookie_name = $fb->publicGetSharedSessionCookieName(); + $_COOKIE[$cookie_name] = substr($_COOKIE[$cookie_name], 1); + + // check the new instance does not have the data + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $this->assertFalse($fb->publicGetPersistentData($key)); + $this->assertNotEquals( + $shared_session_id, + $fb->publicGetSharedSessionID() + ); + } + + public function testHttpHost() { + $real = 'foo.com'; + $_SERVER['HTTP_HOST'] = $real; + $_SERVER['HTTP_X_FORWARDED_HOST'] = 'evil.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals($real, $fb->publicGetHttpHost()); + } + + public function testHttpProtocol() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals('https', $fb->publicGetHttpProtocol()); + } + + public function testHttpHostForwarded() { + $real = 'foo.com'; + $_SERVER['HTTP_HOST'] = 'localhost'; + $_SERVER['HTTP_X_FORWARDED_HOST'] = $real; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals($real, $fb->publicGetHttpHost()); + } + + public function testHttpProtocolForwarded() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals('http', $fb->publicGetHttpProtocol()); + } + + public function testHttpProtocolForwardedSecure() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals('https', $fb->publicGetHttpProtocol()); + } + + /** + * @dataProvider provideEndsWith + */ + public function testEndsWith($big, $small, $result) { + $this->assertEquals( + $result, + PersistentFBPublic::publicEndsWith($big, $small) + ); + } + + public function provideEndsWith() { + return array( + array('', '', true), + array('', 'a', false), + array('a', '', true), + array('a', 'b', false), + array('a', 'a', true), + array('aa', 'a', true), + array('ab', 'a', false), + array('ba', 'a', true), + ); + } + + /** + * @dataProvider provideIsAllowedDomain + */ + public function testIsAllowedDomain($big, $small, $result) { + $this->assertEquals( + $result, + PersistentFBPublic::publicIsAllowedDomain($big, $small) + ); + } + + public function provideIsAllowedDomain() { + return array( + array('fbrell.com', 'fbrell.com', true), + array('foo.fbrell.com', 'fbrell.com', true), + array('foofbrell.com', 'fbrell.com', false), + array('evil.com', 'fbrell.com', false), + array('foo.fbrell.com', 'bar.fbrell.com', false), + ); + } + + protected function generateMD5HashOfRandomValue() { + return md5(uniqid(mt_rand(), true)); + } + + protected function setUp() { + parent::setUp(); + } + + protected function tearDown() { + $this->clearSuperGlobals(); + parent::tearDown(); + } + + protected function clearSuperGlobals() { + unset($_SERVER['HTTPS']); + unset($_SERVER['HTTP_HOST']); + unset($_SERVER['REQUEST_URI']); + $_SESSION = array(); + $_COOKIE = array(); + $_REQUEST = array(); + $_POST = array(); + $_GET = array(); + if (session_id()) { + session_destroy(); + } + } + + /** + * Checks that the correct args are a subset of the returned obj + * @param array $correct The correct array values + * @param array $actual The values in practice + * @param string $message to be shown on failure + */ + protected function assertIsSubset($correct, $actual, $msg='') { + foreach ($correct as $key => $value) { + $actual_value = $actual[$key]; + $newMsg = (strlen($msg) ? ($msg.' ') : '').'Key: '.$key; + $this->assertEquals($value, $actual_value, $newMsg); + } + } +} + +class TransientFacebook extends BaseFacebook { + protected function setPersistentData($key, $value) {} + protected function getPersistentData($key, $default = false) { + return $default; + } + protected function clearPersistentData($key) {} + protected function clearAllPersistentData() {} +} + +class FBRecordURL extends TransientFacebook { + private $url; + + protected function _oauthRequest($url, $params) { + $this->url = $url; + } + + public function getRequestedURL() { + return $this->url; + } +} + +class FBRecordMakeRequest extends TransientFacebook { + private $requests = array(); + + protected function makeRequest($url, $params, $ch=null) { + $this->requests[] = array( + 'url' => $url, + 'params' => $params, + ); + return parent::makeRequest($url, $params, $ch); + } + + public function publicGetRequests() { + return $this->requests; + } + + public function publicGetAppSecretProof($access_token) { + return $this->getAppSecretProof($access_token); + } +} + +class FBPublic extends TransientFacebook { + public static function publicBase64UrlDecode($input) { + return self::base64UrlDecode($input); + } + public static function publicBase64UrlEncode($input) { + return self::base64UrlEncode($input); + } + public function publicParseSignedRequest($input) { + return $this->parseSignedRequest($input); + } + public function publicMakeSignedRequest($data) { + return $this->makeSignedRequest($data); + } +} + +class PersistentFBPublic extends Facebook { + public function publicParseSignedRequest($input) { + return $this->parseSignedRequest($input); + } + + public function publicSetPersistentData($key, $value) { + $this->setPersistentData($key, $value); + } + + public function publicGetPersistentData($key, $default = false) { + return $this->getPersistentData($key, $default); + } + + public function publicClearPersistentData($key) { + return $this->clearPersistentData($key); + } + + public function publicClearAllPersistentData() { + return $this->clearAllPersistentData(); + } + + public function publicGetSharedSessionID() { + return $this->sharedSessionID; + } + + public static function publicIsAllowedDomain($big, $small) { + return self::isAllowedDomain($big, $small); + } + + public static function publicEndsWith($big, $small) { + return self::endsWith($big, $small); + } + + public function publicGetSharedSessionCookieName() { + return $this->getSharedSessionCookieName(); + } + + public function publicGetHttpHost() { + return $this->getHttpHost(); + } + + public function publicGetHttpProtocol() { + return $this->getHttpProtocol(); + } +} + +class FBCode extends Facebook { + public function publicGetCode() { + return $this->getCode(); + } + + public function publicGetState() { + return $this->state; + } + + public function setCSRFStateToken() { + $this->establishCSRFTokenState(); + } + + public function getCSRFStateToken() { + return $this->getPersistentData('state'); + } +} + +class FBAccessToken extends TransientFacebook { + public function publicGetApplicationAccessToken() { + return $this->getApplicationAccessToken(); + } +} + +class FBGetCurrentURLFacebook extends TransientFacebook { + public function publicGetCurrentUrl() { + return $this->getCurrentUrl(); + } +} + +class FBPublicCookie extends TransientFacebook { + public function publicGetSignedRequest() { + return $this->getSignedRequest(); + } + + public function publicGetSignedRequestCookieName() { + return $this->getSignedRequestCookieName(); + } + + public function publicGetMetadataCookie() { + return $this->getMetadataCookie(); + } + + public function publicGetMetadataCookieName() { + return $this->getMetadataCookieName(); + } +} + +class FBRewrite extends Facebook{ + + public function uncacheSignedRequest(){ + $this->signedRequest = null; + } + + public function uncache() + { + $this->user = null; + $this->signedRequest = null; + $this->accessToken = null; + } +} + + +class FBPublicGetAccessTokenFromCode extends TransientFacebook { + public function publicGetAccessTokenFromCode($code, $redirect_uri = null) { + return $this->getAccessTokenFromCode($code, $redirect_uri); + } +} + +class FBPublicState extends TransientFacebook { + const STATE = 'foo'; + protected function getPersistentData($key, $default = false) { + if ($key === 'state') { + return self::STATE; + } + return parent::getPersistentData($key, $default); + } + + public function publicGetState() { + return $this->state; + } +} diff --git a/custom/include/social/facebook/facebookapi.php b/custom/include/social/facebook/facebookapi.php new file mode 100755 index 00000000000..4cd07f16d38 --- /dev/null +++ b/custom/include/social/facebook/facebookapi.php @@ -0,0 +1,63 @@ +facebook->getUser(); + +$different_user = $facebook_helper->get_facebook_user($_REQUEST['username']); + +$content = ($facebook_helper->get_other_newsfeed($_REQUEST['username'], "50")); + +if ($user) { + //redirect to url. + //header('Location: http://localhost/suitecrm'); + $logoutUrl = $facebook_helper->get_logout_url(); +} else { + $loginUrl = $facebook_helper->get_login_url($_REQUEST['url']); +} + +?> + + Logout'; ?> + + Login with Facebook'; ?> + +'; +echo ''; +echo ''; +echo ''; +echo ''; +echo ''; + +foreach($content['data'] as $story){ + echo $facebook_helper->process_feed($story); + } +?> + + +
      Facebook Activity' . $log . '
      ' . $different_user['first_name'] . ' ' . $different_user['last_name'] . ' (' . $different_user['username'] .')
      + ' . $different_user['gender']. '
      + ' . $different_user['location']['name'] . '
      + + + \ No newline at end of file diff --git a/custom/include/social/get_data.php b/custom/include/social/get_data.php new file mode 100755 index 00000000000..34033f10481 --- /dev/null +++ b/custom/include/social/get_data.php @@ -0,0 +1,25 @@ + $config['properties']['oauth_access_token'], + 'oauth_access_token_secret' => $config['properties']['oauth_access_token_secret'], + 'consumer_key' => $config['properties']['consumer_key'], + 'consumer_secret' => $config['properties']['consumer_secret'], + 'call_back_url' => $config['properties']['OAUTH_CALLBACK'], +); + +session_start(); + +/* Create a TwitterOauth object with consumer/user tokens. */ +$connection = new TwitterOAuth($settings['consumer_key'], $settings['consumer_secret'], $access_token['oauth_token'], $access_token['oauth_token_secret']); + +/* If method is set change API call made. Test is called by default. */ +$tweets = $connection->get('statuses/home_timeline', array('screen_name' => $content['screen_name'], 'exclude_replies ' => true)); + +$i = 0; +$assigned_user = $current_user->id; + +if ($tweets) { + while ($i < count($tweets)) { + + + if (count($tweets[$i]['entities']['urls'][0]['url']) != '') { + $tweets[$i]['text'] = str_replace($tweets[$i]['entities']['urls'][0]['url'], "" . $tweets[$i]['entities']['urls'][0]['display_url'] . " ", $tweets[$i]['text']); + $tweets[$i]['text'] = $db->quote($tweets[$i]['text']); + + } + + $date = date("Y-m-d H:i:s", strtotime($tweets[$i]['created_at'])); + $sql_check = "SELECT * FROM sugarfeed WHERE description = '" . $tweets[$i]['text'] . "' AND date_entered = '" . $date . "'"; + $results = $db->query($sql_check); + + while ($row = $db->fetchByAssoc($results)) { + $found_record = $row; + + break; + } + if (empty($found_record)) { + + $id = create_guid(); + + $sql = "INSERT INTO sugarfeed (id, name, date_entered, date_modified, modified_user_id, created_by, description, deleted, assigned_user_id, related_module, related_id, link_url, link_type) + VALUES + ('" . $id . "', + '" . $tweets[$i]['user']['name'] . " ', + '" . $date . "', + '" . $date . "', + '1', + '1', + '" . $tweets[$i]['text'] . "', + '0', + '" . $assigned_user . "', + 'UserFeed', + '" . $assigned_user . "', + NULL, + NULL);"; + $results = $db->query($sql); + + $sql2 = "INSERT INTO sugarfeed_cstm WHERE (id_c, social_c) values ('" . $id . "','twitter');"; + $results = $db->query($sql2); + + $i++; + }else{ + $i++; + } + } +} + +$facebook_helper = new facebook_helper(); + +$user = $facebook_helper->facebook->getUser(); + + +if ($user) { + + $user_profile = $facebook_helper->get_my_user(); //get my user details + + $user_home = $facebook_helper->get_my_newsfeed(); //gets my newsfeed, +} + + +if ($user) { + $logoutUrl = $facebook_helper->get_logout_url(); +} else { + $loginUrl = $facebook_helper->get_login_url($url); +} + + +//$single = $user_home['data'][0]; + +foreach ($user_home['data'] as $single) { + $id = guid_maker(); + $message = $db->quote(generate_stream($single)); + $assigned_user = '1'; + + $date = date("Y-m-d H:m:s", strtotime($single['created_time'])); + + $sql_check = "SELECT * FROM sugarfeed WHERE description = '" . $message . "' AND date_entered = '" . $date . "'"; + $results = $db->query($sql_check); + + while ($row = $db->fetchByAssoc($results)) { + $found_record = $row; + break; + } + if (empty($found_record)) { + $sql = "INSERT INTO sugarfeed (id, name, date_entered, date_modified, modified_user_id, created_by, description, deleted, assigned_user_id, related_module, related_id, link_url, link_type) + VALUES + ('" . $id . "', + NULL, + '" . $date . "', + '" . $date . "', + '1', + '1', + '" . $message . "', + '0', + '" . $assigned_user . "', + 'UserFeed', + '" . $assigned_user . "', + NULL, + NULL);"; + + if (!empty($message)) { + $results = $db->query($sql); + $sql2 = "INSERT INTO sugarfeed_cstm WHERE (id_c, social_c) values ('" . $id . "','facebook');"; + $results = $db->query($sql2); + } + } +} + +//print_r($user_home); + +function guid_maker() +{ + if (function_exists('com_create_guid')) { + return com_create_guid(); + } else { + mt_srand((double)microtime() * 10000); //optional for php 4.2.0 and up. + $charid = strtoupper(md5(uniqid(rand(), true))); + $hyphen = chr(45); + $uuid = chr(123) + . substr($charid, 0, 8) . $hyphen + . substr($charid, 8, 4) . $hyphen + . substr($charid, 12, 4) . $hyphen + . substr($charid, 16, 4) . $hyphen + . substr($charid, 20, 12) + . chr(125); + return $uuid; + } +} + +function generate_stream($stream) +{ + + //if simple post + if ($stream['from']['name'] == "Gina Scott") { + $var = "asd"; + } + switch ($stream['type']) { + + case "": + $string = "" . $stream['from']['name'] . " - " . $stream['message']; + break; + case "link"; + $string = "" . $stream['from']['name'] . " - " . $stream['name'] . ""; + break; + case "status": + // + if (!empty($stream['story'])) { + $string = "" . $stream['from']['name'] . " - " . $stream['story'] . ""; + } else { + //wall post. + $string = "" . $stream['from']['name'] . " - " . $stream['message'] . ""; + } + break; + case "photos": + break; + } + + + return $string; + +} + diff --git a/custom/include/social/hooks.php b/custom/include/social/hooks.php new file mode 100755 index 00000000000..77a58baf960 --- /dev/null +++ b/custom/include/social/hooks.php @@ -0,0 +1,28 @@ +'; + echo ''; + + } + + } + +} + diff --git a/custom/include/social/twitter/LICENSE.md b/custom/include/social/twitter/LICENSE.md new file mode 100755 index 00000000000..1f7ccb64dd7 --- /dev/null +++ b/custom/include/social/twitter/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 James Mallison (j7mbo.co.uk) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/custom/include/social/twitter/README.md b/custom/include/social/twitter/README.md new file mode 100755 index 00000000000..6db3c5caa1c --- /dev/null +++ b/custom/include/social/twitter/README.md @@ -0,0 +1,91 @@ +twitter-api-php +====================== +Simple PHP Wrapper for Twitter API v1.1 calls + +[![Total Downloads](https://poser.pugx.org/j7mbo/twitter-api-php/downloads.png)](https://packagist.org/packages/j7mbo/twitter-api-php) + + +**[Changelog](https://github.com/J7mbo/twitter-api-php/wiki/Changelog)** || +**[Examples](https://github.com/J7mbo/twitter-api-php/wiki/Twitter-API-PHP-Wiki)** || +**[Wiki](https://github.com/J7mbo/twitter-api-php/wiki)** || +**[Buy me a beer!](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KHQYGY4MM3E7J)** + +[Instructions in StackOverflow post here](http://stackoverflow.com/questions/12916539/simplest-php-example-retrieving-user-timeline-with-twitter-api-version-1-1/15314662#15314662) with examples. This post shows you how to get your tokens and more. +If you found it useful, please upvote / leave a comment! :) + +The aim of this class is simple. You need to: + +- Include the class in your PHP code +- [Create a twitter app on the twitter developer site](https://dev.twitter.com/apps/) +- Enable read/write access for your twitter app +- Grab your access tokens from the twitter developer site +- [Choose a twitter API URL to make the request to](https://dev.twitter.com/docs/api/1.1/) +- Choose either GET / POST (depending on the request) +- Choose the fields you want to send with the request (example: `array('screen_name' => 'usernameToBlock')`) + +You really can't get much simpler than that. Here is an example of how to use the class for a POST request to block a user, and at the bottom is an example of a GET request. + +Installation +------------ + +**Normally:** If you *don't* use composer, don't worry - just include TwitterAPIExchange.php in your application. + +**Via Composer:** If you *do* use composer, here's what you add to your composer.json file to have TwitterAPIExchange.php automatically imported into your vendor's folder: + + { + "require": { + "j7mbo/twitter-api-php": "dev-master" + } + } + +Of course, you'll then need to run `php composer.phar update`. + +How To Use +------ +#### Include the class file #### + + require_once('TwitterAPIExchange.php'); + +#### Set access tokens #### + + $settings = array( + 'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN", + 'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET", + 'consumer_key' => "YOUR_CONSUMER_KEY", + 'consumer_secret' => "YOUR_CONSUMER_SECRET" + ); + +#### Choose URL and Request Method #### + + $url = 'https://api.twitter.com/1.1/blocks/create.json'; + $requestMethod = 'POST'; + +#### Choose POST fields #### + + $postfields = array( + 'screen_name' => 'usernameToBlock', + 'skip_status' => '1' + ); + +#### Perform the request! #### + + $twitter = new TwitterAPIExchange($settings); + echo $twitter->buildOauth($url, $requestMethod) + ->setPostfields($postfields) + ->performRequest(); + +GET Request Example +---------------- + +Set the GET field BEFORE calling buildOauth(); and everything else is the same: + + $url = 'https://api.twitter.com/1.1/followers/ids.json'; + $getfield = '?screen_name=J7mbo'; + $requestMethod = 'GET'; + + $twitter = new TwitterAPIExchange($settings); + echo $twitter->setGetfield($getfield) + ->buildOauth($url, $requestMethod) + ->performRequest(); + +That is it! Really simple, works great with the 1.1 API. Thanks to @lackovic10 and @rivers on SO! diff --git a/custom/include/social/twitter/TwitterAPIExchange.php b/custom/include/social/twitter/TwitterAPIExchange.php new file mode 100755 index 00000000000..7832725915d --- /dev/null +++ b/custom/include/social/twitter/TwitterAPIExchange.php @@ -0,0 +1,263 @@ + + * @license MIT License + * @link http://github.com/j7mbo/twitter-api-php + */ +class TwitterAPIExchange +{ + private $oauth_access_token; + private $oauth_access_token_secret; + private $consumer_key; + private $consumer_secret; + private $postfields; + private $getfield; + protected $oauth; + public $url; + + /** + * Create the API access object. Requires an array of settings:: + * oauth access token, oauth access token secret, consumer key, consumer secret + * These are all available by creating your own application on dev.twitter.com + * Requires the cURL library + * + * @param array $settings + */ + public function __construct(array $settings) + { + if (!in_array('curl', get_loaded_extensions())) + { + throw new Exception('You need to install cURL, see: http://curl.haxx.se/docs/install.html'); + } + + if (!isset($settings['oauth_access_token']) + || !isset($settings['oauth_access_token_secret']) + || !isset($settings['consumer_key']) + || !isset($settings['consumer_secret'])) + { + throw new Exception('Make sure you are passing in the correct parameters'); + } + + $this->oauth_access_token = $settings['oauth_access_token']; + $this->oauth_access_token_secret = $settings['oauth_access_token_secret']; + $this->consumer_key = $settings['consumer_key']; + $this->consumer_secret = $settings['consumer_secret']; + } + + /** + * Set postfields array, example: array('screen_name' => 'J7mbo') + * + * @param array $array Array of parameters to send to API + * + * @return TwitterAPIExchange Instance of self for method chaining + */ + public function setPostfields(array $array) + { + if (!is_null($this->getGetfield())) + { + throw new Exception('You can only choose get OR post fields.'); + } + + if (isset($array['status']) && substr($array['status'], 0, 1) === '@') + { + $array['status'] = sprintf("\0%s", $array['status']); + } + + $this->postfields = $array; + + return $this; + } + + /** + * Set getfield string, example: '?screen_name=J7mbo' + * + * @param string $string Get key and value pairs as string + * + * @return \TwitterAPIExchange Instance of self for method chaining + */ + public function setGetfield($string) + { + if (!is_null($this->getPostfields())) + { + throw new Exception('You can only choose get OR post fields.'); + } + + $search = array('#', ',', '+', ':'); + $replace = array('%23', '%2C', '%2B', '%3A'); + $string = str_replace($search, $replace, $string); + + $this->getfield = $string; + + return $this; + } + + /** + * Get getfield string (simple getter) + * + * @return string $this->getfields + */ + public function getGetfield() + { + return $this->getfield; + } + + /** + * Get postfields array (simple getter) + * + * @return array $this->postfields + */ + public function getPostfields() + { + return $this->postfields; + } + + /** + * Build the Oauth object using params set in construct and additionals + * passed to this method. For v1.1, see: https://dev.twitter.com/docs/api/1.1 + * + * @param string $url The API url to use. Example: https://api.twitter.com/1.1/search/tweets.json + * @param string $requestMethod Either POST or GET + * @return \TwitterAPIExchange Instance of self for method chaining + */ + public function buildOauth($url, $requestMethod) + { + if (!in_array(strtolower($requestMethod), array('post', 'get'))) + { + throw new Exception('Request method must be either POST or GET'); + } + + $consumer_key = $this->consumer_key; + $consumer_secret = $this->consumer_secret; + $oauth_access_token = $this->oauth_access_token; + $oauth_access_token_secret = $this->oauth_access_token_secret; + + $oauth = array( + 'oauth_consumer_key' => $consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_token' => $oauth_access_token, + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0' + ); + + $getfield = $this->getGetfield(); + + if (!is_null($getfield)) + { + $getfields = str_replace('?', '', explode('&', $getfield)); + foreach ($getfields as $g) + { + $split = explode('=', $g); + $oauth[$split[0]] = $split[1]; + } + } + + $base_info = $this->buildBaseString($url, $requestMethod, $oauth); + $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); + $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); + $oauth['oauth_signature'] = $oauth_signature; + + $this->url = $url; + $this->oauth = $oauth; + + return $this; + } + + /** + * Perform the actual data retrieval from the API + * + * @param boolean $return If true, returns data. + * + * @return string json If $return param is true, returns json data. + */ + public function performRequest($return = true) + { + if (!is_bool($return)) + { + throw new Exception('performRequest parameter must be true or false'); + } + + $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:'); + + $getfield = $this->getGetfield(); + $postfields = $this->getPostfields(); + + $options = array( + CURLOPT_HTTPHEADER => $header, + CURLOPT_HEADER => false, + CURLOPT_URL => $this->url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 10, + ); + + if (!is_null($postfields)) + { + $options[CURLOPT_POSTFIELDS] = $postfields; + } + else + { + if ($getfield !== '') + { + $options[CURLOPT_URL] .= $getfield; + } + } + + $feed = curl_init(); + curl_setopt_array($feed, $options); + $json = curl_exec($feed); + curl_close($feed); + + if ($return) { return $json; } + } + + /** + * Private method to generate the base string used by cURL + * + * @param string $baseURI + * @param string $method + * @param array $params + * + * @return string Built base string + */ + private function buildBaseString($baseURI, $method, $params) + { + $return = array(); + ksort($params); + + foreach($params as $key=>$value) + { + $return[] = "$key=" . $value; + } + + return $method . "&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $return)); + } + + /** + * Private method to generate authorization header used by cURL + * + * @param array $oauth Array of oauth data generated by buildOauth() + * + * @return string $return Header used by cURL for request + */ + private function buildAuthorizationHeader($oauth) + { + $return = 'Authorization: OAuth '; + $values = array(); + + foreach($oauth as $key => $value) + { + $values[] = "$key=\"" . rawurlencode($value) . "\""; + } + + $return .= implode(', ', $values); + return $return; + } + +} diff --git a/custom/include/social/twitter/composer.json b/custom/include/social/twitter/composer.json new file mode 100755 index 00000000000..2032224ccbf --- /dev/null +++ b/custom/include/social/twitter/composer.json @@ -0,0 +1,18 @@ +{ + "name": "j7mbo/twitter-api-php", + "description": "Simple PHP Wrapper for Twitter API v1.1 calls", + "version": "0.1", + "type": "library", + "keywords": ["twitter", "PHP", "API"], + "homepage": "https://github.com/j7mbo/twitter-api-php", + "license": "GNU Public License", + "authors": [ + { + "name": "James Mallison", + "homepage": "https://github.com/j7mbo/twitter-api-php" + } + ], + "autoload": { + "files": ["TwitterAPIExchange.php"] + } +} diff --git a/custom/include/social/twitter/twitter.css b/custom/include/social/twitter/twitter.css new file mode 100755 index 00000000000..96b1a2adc83 --- /dev/null +++ b/custom/include/social/twitter/twitter.css @@ -0,0 +1,9 @@ +.tweet { + border-bottom: 0 none; + border-radius: 0; + border-top: 1px solid #E8E8E8; + cursor: default; + font-size: 12px; + min-height: 32px; + padding: 9px 15px 12px; +} \ No newline at end of file diff --git a/custom/include/social/twitter/twitter.js b/custom/include/social/twitter/twitter.js new file mode 100755 index 00000000000..9faf43a6f6b --- /dev/null +++ b/custom/include/social/twitter/twitter.js @@ -0,0 +1,22 @@ +$(function() { + + var twitter_user = $( "#twitter_user_c" ).text(); + + if(twitter_user){ + + $.ajax({ + type: "POST", + url: "index.php?entryPoint=social", + data: { twitter_user: twitter_user, social: "twitter"} + }) + .done(function( msg ) { + $("#twitter_feed").html(' '); + $("#twitter_feed").html( msg + $("#twitter_feed").html() ); + }); + + }else{ + return false; + } + + +}); \ No newline at end of file diff --git a/custom/include/social/twitter/twitter_auth/callback.php b/custom/include/social/twitter/twitter_auth/callback.php new file mode 100755 index 00000000000..9e91fedd23c --- /dev/null +++ b/custom/include/social/twitter/twitter_auth/callback.php @@ -0,0 +1,40 @@ +getAccessToken($_REQUEST['oauth_verifier']); + +/* Save the access tokens. Normally these would be saved in a database for future use. */ +$_SESSION['access_token'] = $access_token; + +/* Remove no longer needed request tokens */ +unset($_SESSION['oauth_token']); +unset($_SESSION['oauth_token_secret']); + +/* If HTTP response is 200 continue otherwise send to connect page to retry */ +if (200 == $connection->http_code) { + /* The user has been verified and the access tokens can be saved for future use */ + $_SESSION['status'] = 'verified'; + header('Location: http://localhost/suitecrm/index.php?entryPoint=social_reader'); +} else { + /* Save HTTP status for error dialog on connnect page.*/ + header('Location: http://localhost/suitecrm/index.php?entryPoint=social_reader'); +} diff --git a/custom/include/social/twitter/twitter_auth/images/darker.png b/custom/include/social/twitter/twitter_auth/images/darker.png new file mode 100755 index 0000000000000000000000000000000000000000..746b6b9f80c71049f2a4eb84ff72d5d1bf77c62c GIT binary patch literal 2370 zcmV-I3BC4-P)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2%AYn zK~!jg?VD?CQ|B4Sf5(m;U*kCB;v^&~X`mqlD70k=%6eVbQL0v*Xp7YQm8n{*b!>yJ z(!O+58|t*KV;|a1YSE?^(P~r!DwWWcmX(x3qEZMUPRQMkYn;T6?ZlUJ&OSJC634d` z2cpeC=_r2mzR&ajpNrq~p4TS=K=t-rGFh@@kd9Zj2}1SuU2^SRo90ZU_22>KvVNBN zN$bG_D6X`LEdRUY0LY>^=R%i5Bg_0Ea&bx0oC{qJjV$wvq$5|gLBmVSt0>W^0odPr zkvH4z-$^Jta{d3210W?h@h{a^F(j&a*$TCKc&?(53nP9G+XiPXlt^O&F&IP&hsn`s z5EPNA;FxsxVjtoV% z8w_x}#msH+D zUG^;@b5%E4eOZieLxC|GdqX0xe$&Ypj-jMNi8KOE2Y=kSfm@f>FeZxRDir+gt8;wj^zh!Z z4|1S;fIofHmFDiG$6VD-RKNGsNereu%r#2@czVNHJ~(6LRF^Ahouk{HM6Xf-GLk4F z2#V;a{+_juy`2LY@e>1%F6o1ag}KMDd^>Xs!v=aD&Ais3mCBO>f^ zz-{K7lr<8yYYhef7Mt|!Z9Imrv=m)I0RVfS+RTxTUf$^)Brr0G@8oEJduZEaPNXAHVpl8Ko(IhUV0|K-#%m*RAB1@**Dl z=s1!fueR#0OW`wyYIg< zsa}`I3qYPSa=Y>cLv*@FGU}&&*gGwL=D_FNS6R#x58XwfUdyTOetvVfk#J!#4KF;x zvGyKn7g|72@Z#~aNzb_gBBM&YEgjb6MgFF$k*NJpmz@@un+I-K&cC)k$QrE@kIjZG zid2|Q7;@FfqDY-y&Ch9>U1jV%1XGUb`j!;hxMg}*nFc%;pz4NalQwCD8!dNc7A`d zHF`|$sIN)OYh;t+9>+}hiH%pAbo}Z^-{-?KR(|-_2V7lLz!R&NMvv3R6Q5aRhyn%L9QNukNeYg;z4xn|*H zt{ll-v(SP<5ctU2!)PExv&}i)E=T(|v~{!R%mo_z8~~^lio~8|rp4*xp0K;{2Scnb zDPVnhF~@rc(5Y2iYtnIjWhu=UJu~V%y`xBy%vdNyuiH0kud*mjt`W*)+)r%0uBr@$ zAW&q`^XT>U1Vou-<(6ojBi0_?ZRz5q-Idtyc;BQ?i?NieCr7FYj`cfv`%Fj5+(a6o z(NV%mC2xIgPtsNA_$Y)ue z(H6(iw6=6|1Cq$sb|O4!+Cosu(|F91lh*NY-eyjL*2 zPp14#jdRp00ET>iMwBYvxArpZ^GEwivXu7ql5#>{u7-)zygM?N#;BZZzp=cC=T_G6 zm!|Vcg%W98rOCnGZ^Jg?M>gn??_7&dk|z7hkzA|C2f+O+YB8K?YpQttt8+<(5^3C0SHn|VHsbV;k)Nx^=^x{bW^1&+TB}7CC60F4`JlLy zO-rh%uPo)z*>>tJMTiJ9`l@m@kyxWe7UMtePxOtAQ{|p=4DqZ|L6c*Ma9HHbpqIOq zN>01naq9sb?y~bh-6Fo&v6XxG9htRPL6sBNbEf>n#&0&CXG{GO?q0DJ8EAI6*w%0& zp@&2W)!TQ;B}?M3Z>+K`;LmrgWw#A>_r))8n;BkT3>)?wjN9&LYoqqAO$=Gv5}L3W zw3O(z_<~_NhCC#Cxh%)!WWeJELEyz(*Ru7dH9Y#^QLKaRWcxTTDA4AjQ{~V%J_289 zV*SL%ISK{kMjh@zkm0e^i{!C5+S-!e7MuFNW#_SGetqLAZZN?9i_kwsCr=rf(A&NK zltX2*cDvh)-R(_j_}yn7M3yB)Nv0y-$onl9Xmif~r>HA|%j+lklIi6o)=z945=FW$ z@k^U>&ULW0i;>X)Ppn?b&T7+)cKe8*9Sx0_baAE2L;DU>TVzJB&Y^wK&A^C1byAiq zM#`Um0FGYh=jet0OA<==KAjA|7^G?Z(LKxjXI4uQm%`=H$TGi3`pQivxf~i<<`>!5 ooU_as0%ZTSEKBC;cx9XLUtuVuKI-|I^Z)<=07*qoM6N<$g3Pn2od5s; literal 0 HcmV?d00001 diff --git a/custom/include/social/twitter/twitter_auth/images/lighter.png b/custom/include/social/twitter/twitter_auth/images/lighter.png new file mode 100755 index 0000000000000000000000000000000000000000..297bb03404f2d7462ee9355aae38f5f5f3e47fbd GIT binary patch literal 2490 zcmV;r2}SmaP)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2@^>~ zK~!jg?VEdWl+_u=f8X9WA)72QVM!vF1VSK4AZQ?nK}o}NseS3JN$f zgRQMIo!W~OJ6`ZouvAJ_K&eH%O=zU35Dd9+OGJ}EvYTu++57IdU;kJVc9XpY6B?a; zX3k{ZIp=-eC+|7m`<-)kR{+>vQ7sWi9D|5ebEgWz_KIq$s4!>9f*d_|j-lj_V|e1| zv2!Q@e7>PCTvsDT9K#C=07>!<2 zJRT3v{^4m(e0B`AMuXes=AQD^+;C$tPj22q>4H*zdfz>`#KAid3>9xAeo+*W%jE#P zv+pgwyLbU*^X6iX@D|vxdJPV{BV^y=rMIzo>FtA}CzL%H7|@3PC-uR0k{o`MEpT&+ zmiCUwd$DjaD&G5mR^R=5Ugy>A zFL6`pd;osE=`rd~)-ZEc5shchvh}x5aZ~9nJpS;;UjCggyhMFX4IM@k^;K2OnpeX9 zJ+G59W-M>Ndx+<@J`*QB2?^MN1N-(fead7?=HEi6T!B@Box5IR=L;`>Ej{PX zHuTf??pp_V_K#2V&%f=WuDXUP)2>6K(eP;bS}ruV@b7*5sr;ydIrB8I2tIsDgsYdEB~aA*X6k7? zxX|2;qp^|Gwe@`Y#d&IupCC)EqUw`l7)GU&uTKu*U$o?QG#U*z%qZYj8`hDRoCLu8 zhbzgOI5DbLyT^;&?d{E@=<{Loc(HlBWQ@7?YwIarxgyB6oH@guS9eiXI-mWozJlq( z1uEY@fC2%N(MZ*iqs%Lw&3$(-XHs%f#Ci8GF3A_N^~J`q@N(Yec4#`>p8;Rm>`^(w z^()mX);zY6A1}KTOQ(hBpZ+tI2M_vvC6EgOasg^TuSW9u`2L~=xMTvlF=IdirA&q( z01}jz+(`M#6-+Id=Jypvl2wZSngV!x>{xvBuA7QRt)c4kYU--0D3~!Fhr>aA^+`_G z)iHDWG@POs#IMsQgCL+*sYp&si#>KieJ zAZPaXZl!3>9M-SjNX7dfvh?=bdf)$&1YWO*1jqy#ZFVPakM~lt{ns24pi(Mnce*e+ zoV|U5)IWA0uWtapa=C)>xf3{EU4zZ(WX19y(%RC@hySVMd_x1@*}REPr@KGD1PCBr zszd|P3jULJU(P|*6JUEpf1ZUYMN@b5y{gO~R0`R^ zzo2^1b1iYS>vBugsL9qPM&yVTyCwWp(Uo=ev@y*W7rS{ZmOePbh#j}_&X%YtxeZa(=9L5<&(e8Bi z<5wsYm^&^0MKr*8(egMLdIIf9`S}2Jn9Y=xl~T570XoAdF4!DlHH6a}anEJ-cv*VQ z<;7KRgYq-}Q)5qi@;qcECS38JtLDV#Y+3g(n;(3LUp}&dB%O}ct5)I-xFV2%>k11g zTUf@C&yKTa*KVdw^(R50loR*{_b2SKCHeZt4jkLpj^;ZlKOe6sQZ!>aT9uM(b0*;N zdYL_=0IS=B(gj7|CTgIo3w=s5DLNgUE;lDl z=6*ck(9~r1FRqNt5);TzP2p%4ylH~wfExv!+`pk8s}?!j(i+mgrP)GJVGd2L zrifxR3OQ=I9MLCX4Ray;#3LJ#2{HtkfT^vG#S0hk#JUIhwAC2&WDQrS)2nfk*V=iQ!Y2K(sVlqHpM%x^1{ck;y4Kin5jc`W;@8<8AFx4+YWs z?QSo2A}4+Q<6F?#y0F{rget('account/verify_credentials'); + + +//$connection->get('users/show', array('screen_name' => 'abraham')); +//$connection->post('statuses/update', array('status' => date(DATE_RFC822))); +//$connection->post('statuses/destroy', array('id' => 5437877770)); +//$connection->post('friendships/create', array('id' => 9436992)); +//$connection->post('friendships/destroy', array('id' => 9436992)); + +/* Include HTML to display on the page */ +include('html.inc'); diff --git a/custom/include/social/twitter/twitter_auth/twitteroauth/OAuth.php b/custom/include/social/twitter/twitter_auth/twitteroauth/OAuth.php new file mode 100755 index 00000000000..4570013b80f --- /dev/null +++ b/custom/include/social/twitter/twitter_auth/twitteroauth/OAuth.php @@ -0,0 +1,874 @@ +key = $key; + $this->secret = $secret; + $this->callback_url = $callback_url; + } + + function __toString() { + return "OAuthConsumer[key=$this->key,secret=$this->secret]"; + } +} + +class OAuthToken { + // access tokens and request tokens + public $key; + public $secret; + + /** + * key = the token + * secret = the token secret + */ + function __construct($key, $secret) { + $this->key = $key; + $this->secret = $secret; + } + + /** + * generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + */ + function to_string() { + return "oauth_token=" . + OAuthUtil::urlencode_rfc3986($this->key) . + "&oauth_token_secret=" . + OAuthUtil::urlencode_rfc3986($this->secret); + } + + function __toString() { + return $this->to_string(); + } +} + +/** + * A class for implementing a Signature Method + * See section 9 ("Signing Requests") in the spec + */ +abstract class OAuthSignatureMethod { + /** + * Needs to return the name of the Signature Method (ie HMAC-SHA1) + * @return string + */ + abstract public function get_name(); + + /** + * Build up the signature + * NOTE: The output of this function MUST NOT be urlencoded. + * the encoding is handled in OAuthRequest when the final + * request is serialized + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @return string + */ + abstract public function build_signature($request, $consumer, $token); + + /** + * Verifies that a given signature is correct + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @param string $signature + * @return bool + */ + public function check_signature($request, $consumer, $token, $signature) { + $built = $this->build_signature($request, $consumer, $token); + return $built == $signature; + } +} + +/** + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] + * where the Signature Base String is the text and the key is the concatenated values (each first + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' + * character (ASCII code 38) even if empty. + * - Chapter 9.2 ("HMAC-SHA1") + */ +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { + function get_name() { + return "HMAC-SHA1"; + } + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + + return base64_encode(hash_hmac('sha1', $base_string, $key, true)); + } +} + +/** + * The PLAINTEXT method does not provide any security protection and SHOULD only be used + * over a secure channel such as HTTPS. It does not use the Signature Base String. + * - Chapter 9.4 ("PLAINTEXT") + */ +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { + public function get_name() { + return "PLAINTEXT"; + } + + /** + * oauth_signature is set to the concatenated encoded values of the Consumer Secret and + * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is + * empty. The result MUST be encoded again. + * - Chapter 9.4.1 ("Generating Signatures") + * + * Please note that the second encoding MUST NOT happen in the SignatureMethod, as + * OAuthRequest handles this! + */ + public function build_signature($request, $consumer, $token) { + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + $request->base_string = $key; + + return $key; + } +} + +/** + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a + * verified way to the Service Provider, in a manner which is beyond the scope of this + * specification. + * - Chapter 9.3 ("RSA-SHA1") + */ +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { + public function get_name() { + return "RSA-SHA1"; + } + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // (2) fetch via http using a url provided by the requester + // (3) some sort of specific discovery code based on request + // + // Either way should return a string representation of the certificate + protected abstract function fetch_public_cert(&$request); + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // + // Either way should return a string representation of the certificate + protected abstract function fetch_private_cert(&$request); + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + // Fetch the private key cert based on the request + $cert = $this->fetch_private_cert($request); + + // Pull the private key ID from the certificate + $privatekeyid = openssl_get_privatekey($cert); + + // Sign using the key + $ok = openssl_sign($base_string, $signature, $privatekeyid); + + // Release the key resource + openssl_free_key($privatekeyid); + + return base64_encode($signature); + } + + public function check_signature($request, $consumer, $token, $signature) { + $decoded_sig = base64_decode($signature); + + $base_string = $request->get_signature_base_string(); + + // Fetch the public key cert based on the request + $cert = $this->fetch_public_cert($request); + + // Pull the public key ID from the certificate + $publickeyid = openssl_get_publickey($cert); + + // Check the computed signature against the one passed in the query + $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); + + // Release the key resource + openssl_free_key($publickeyid); + + return $ok == 1; + } +} + +class OAuthRequest { + private $parameters; + private $http_method; + private $http_url; + // for debug purposes + public $base_string; + public static $version = '1.0'; + public static $POST_INPUT = 'php://input'; + + function __construct($http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); + $this->parameters = $parameters; + $this->http_method = $http_method; + $this->http_url = $http_url; + } + + + /** + * attempt to build up a request from what was passed to the server + */ + public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { + $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") + ? 'http' + : 'https'; + @$http_url or $http_url = $scheme . + '://' . $_SERVER['HTTP_HOST'] . + ':' . + $_SERVER['SERVER_PORT'] . + $_SERVER['REQUEST_URI']; + @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; + + // We weren't handed any parameters, so let's find the ones relevant to + // this request. + // If you run XML-RPC or similar you should use this to provide your own + // parsed parameter-list + if (!$parameters) { + // Find request headers + $request_headers = OAuthUtil::get_headers(); + + // Parse the query-string to find GET parameters + $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); + + // It's a POST request of the proper content-type, so parse POST + // parameters and add those overriding any duplicates from GET + if ($http_method == "POST" + && @strstr($request_headers["Content-Type"], + "application/x-www-form-urlencoded") + ) { + $post_data = OAuthUtil::parse_parameters( + file_get_contents(self::$POST_INPUT) + ); + $parameters = array_merge($parameters, $post_data); + } + + // We have a Authorization-header with OAuth data. Parse the header + // and add those overriding any duplicates from GET or POST + if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { + $header_parameters = OAuthUtil::split_header( + $request_headers['Authorization'] + ); + $parameters = array_merge($parameters, $header_parameters); + } + + } + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + /** + * pretty much a helper function to set up the request + */ + public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $defaults = array("oauth_version" => OAuthRequest::$version, + "oauth_nonce" => OAuthRequest::generate_nonce(), + "oauth_timestamp" => OAuthRequest::generate_timestamp(), + "oauth_consumer_key" => $consumer->key); + if ($token) + $defaults['oauth_token'] = $token->key; + + $parameters = array_merge($defaults, $parameters); + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + public function set_parameter($name, $value, $allow_duplicates = true) { + if ($allow_duplicates && isset($this->parameters[$name])) { + // We have already added parameter(s) with this name, so add to the list + if (is_scalar($this->parameters[$name])) { + // This is the first duplicate, so transform scalar (string) + // into an array so we can add the duplicates + $this->parameters[$name] = array($this->parameters[$name]); + } + + $this->parameters[$name][] = $value; + } else { + $this->parameters[$name] = $value; + } + } + + public function get_parameter($name) { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + public function get_parameters() { + return $this->parameters; + } + + public function unset_parameter($name) { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * @return string + */ + public function get_signable_parameters() { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return OAuthUtil::build_http_query($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + */ + public function get_signature_base_string() { + $parts = array( + $this->get_normalized_http_method(), + $this->get_normalized_http_url(), + $this->get_signable_parameters() + ); + + $parts = OAuthUtil::urlencode_rfc3986($parts); + + return implode('&', $parts); + } + + /** + * just uppercases the http method + */ + public function get_normalized_http_method() { + return strtoupper($this->http_method); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + */ + public function get_normalized_http_url() { + $parts = parse_url($this->http_url); + + $port = @$parts['port']; + $scheme = $parts['scheme']; + $host = $parts['host']; + $path = @$parts['path']; + + $port or $port = ($scheme == 'https') ? '443' : '80'; + + if (($scheme == 'https' && $port != '443') + || ($scheme == 'http' && $port != '80')) { + $host = "$host:$port"; + } + return "$scheme://$host$path"; + } + + /** + * builds a url usable for a GET request + */ + public function to_url() { + $post_data = $this->to_postdata(); + $out = $this->get_normalized_http_url(); + if ($post_data) { + $out .= '?'.$post_data; + } + return $out; + } + + /** + * builds the data one would send in a POST request + */ + public function to_postdata() { + return OAuthUtil::build_http_query($this->parameters); + } + + /** + * builds the Authorization: header + */ + public function to_header($realm=null) { + $first = true; + if($realm) { + $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; + $first = false; + } else + $out = 'Authorization: OAuth'; + + $total = array(); + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") continue; + if (is_array($v)) { + throw new OAuthException('Arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ','; + $out .= OAuthUtil::urlencode_rfc3986($k) . + '="' . + OAuthUtil::urlencode_rfc3986($v) . + '"'; + $first = false; + } + return $out; + } + + public function __toString() { + return $this->to_url(); + } + + + public function sign_request($signature_method, $consumer, $token) { + $this->set_parameter( + "oauth_signature_method", + $signature_method->get_name(), + false + ); + $signature = $this->build_signature($signature_method, $consumer, $token); + $this->set_parameter("oauth_signature", $signature, false); + } + + public function build_signature($signature_method, $consumer, $token) { + $signature = $signature_method->build_signature($this, $consumer, $token); + return $signature; + } + + /** + * util function: current timestamp + */ + private static function generate_timestamp() { + return time(); + } + + /** + * util function: current nonce + */ + private static function generate_nonce() { + $mt = microtime(); + $rand = mt_rand(); + + return md5($mt . $rand); // md5s look nicer than numbers + } +} + +class OAuthServer { + protected $timestamp_threshold = 300; // in seconds, five minutes + protected $version = '1.0'; // hi blaine + protected $signature_methods = array(); + + protected $data_store; + + function __construct($data_store) { + $this->data_store = $data_store; + } + + public function add_signature_method($signature_method) { + $this->signature_methods[$signature_method->get_name()] = + $signature_method; + } + + // high level functions + + /** + * process a request_token request + * returns the request token on success + */ + public function fetch_request_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // no token required for the initial token request + $token = NULL; + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $callback = $request->get_parameter('oauth_callback'); + $new_token = $this->data_store->new_request_token($consumer, $callback); + + return $new_token; + } + + /** + * process an access_token request + * returns the access token on success + */ + public function fetch_access_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // requires authorized request token + $token = $this->get_token($request, $consumer, "request"); + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $verifier = $request->get_parameter('oauth_verifier'); + $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); + + return $new_token; + } + + /** + * verify an api call, checks all the parameters + */ + public function verify_request(&$request) { + $this->get_version($request); + $consumer = $this->get_consumer($request); + $token = $this->get_token($request, $consumer, "access"); + $this->check_signature($request, $consumer, $token); + return array($consumer, $token); + } + + // Internals from here + /** + * version 1 + */ + private function get_version(&$request) { + $version = $request->get_parameter("oauth_version"); + if (!$version) { + // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. + // Chapter 7.0 ("Accessing Protected Ressources") + $version = '1.0'; + } + if ($version !== $this->version) { + throw new OAuthException("OAuth version '$version' not supported"); + } + return $version; + } + + /** + * figure out the signature with some defaults + */ + private function get_signature_method(&$request) { + $signature_method = + @$request->get_parameter("oauth_signature_method"); + + if (!$signature_method) { + // According to chapter 7 ("Accessing Protected Ressources") the signature-method + // parameter is required, and we can't just fallback to PLAINTEXT + throw new OAuthException('No signature method parameter. This parameter is required'); + } + + if (!in_array($signature_method, + array_keys($this->signature_methods))) { + throw new OAuthException( + "Signature method '$signature_method' not supported " . + "try one of the following: " . + implode(", ", array_keys($this->signature_methods)) + ); + } + return $this->signature_methods[$signature_method]; + } + + /** + * try to find the consumer for the provided request's consumer key + */ + private function get_consumer(&$request) { + $consumer_key = @$request->get_parameter("oauth_consumer_key"); + if (!$consumer_key) { + throw new OAuthException("Invalid consumer key"); + } + + $consumer = $this->data_store->lookup_consumer($consumer_key); + if (!$consumer) { + throw new OAuthException("Invalid consumer"); + } + + return $consumer; + } + + /** + * try to find the token for the provided request's token key + */ + private function get_token(&$request, $consumer, $token_type="access") { + $token_field = @$request->get_parameter('oauth_token'); + $token = $this->data_store->lookup_token( + $consumer, $token_type, $token_field + ); + if (!$token) { + throw new OAuthException("Invalid $token_type token: $token_field"); + } + return $token; + } + + /** + * all-in-one function to check the signature on a request + * should guess the signature method appropriately + */ + private function check_signature(&$request, $consumer, $token) { + // this should probably be in a different method + $timestamp = @$request->get_parameter('oauth_timestamp'); + $nonce = @$request->get_parameter('oauth_nonce'); + + $this->check_timestamp($timestamp); + $this->check_nonce($consumer, $token, $nonce, $timestamp); + + $signature_method = $this->get_signature_method($request); + + $signature = $request->get_parameter('oauth_signature'); + $valid_sig = $signature_method->check_signature( + $request, + $consumer, + $token, + $signature + ); + + if (!$valid_sig) { + throw new OAuthException("Invalid signature"); + } + } + + /** + * check that the timestamp is new enough + */ + private function check_timestamp($timestamp) { + if( ! $timestamp ) + throw new OAuthException( + 'Missing timestamp parameter. The parameter is required' + ); + + // verify that timestamp is recentish + $now = time(); + if (abs($now - $timestamp) > $this->timestamp_threshold) { + throw new OAuthException( + "Expired timestamp, yours $timestamp, ours $now" + ); + } + } + + /** + * check that the nonce is not repeated + */ + private function check_nonce($consumer, $token, $nonce, $timestamp) { + if( ! $nonce ) + throw new OAuthException( + 'Missing nonce parameter. The parameter is required' + ); + + // verify that the nonce is uniqueish + $found = $this->data_store->lookup_nonce( + $consumer, + $token, + $nonce, + $timestamp + ); + if ($found) { + throw new OAuthException("Nonce already used: $nonce"); + } + } + +} + +class OAuthDataStore { + function lookup_consumer($consumer_key) { + // implement me + } + + function lookup_token($consumer, $token_type, $token) { + // implement me + } + + function lookup_nonce($consumer, $token, $nonce, $timestamp) { + // implement me + } + + function new_request_token($consumer, $callback = null) { + // return a new token attached to this consumer + } + + function new_access_token($token, $consumer, $verifier = null) { + // return a new access token attached to this consumer + // for the user associated with this token if the request token + // is authorized + // should also invalidate the request token + } + +} + +class OAuthUtil { + public static function urlencode_rfc3986($input) { + if (is_array($input)) { + return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); + } else if (is_scalar($input)) { + return str_replace( + '+', + ' ', + str_replace('%7E', '~', rawurlencode($input)) + ); + } else { + return ''; + } +} + + + // This decode function isn't taking into consideration the above + // modifications to the encoding process. However, this method doesn't + // seem to be used anywhere so leaving it as is. + public static function urldecode_rfc3986($string) { + return urldecode($string); + } + + // Utility function for turning the Authorization: header into + // parameters, has to do some unescaping + // Can filter out any non-oauth parameters if needed (default behaviour) + public static function split_header($header, $only_allow_oauth_parameters = true) { + $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; + $offset = 0; + $params = array(); + while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { + $match = $matches[0]; + $header_name = $matches[2][0]; + $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; + if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { + $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); + } + $offset = $match[1] + strlen($match[0]); + } + + if (isset($params['realm'])) { + unset($params['realm']); + } + + return $params; + } + + // helper to try to sort out headers for people who aren't running apache + public static function get_headers() { + if (function_exists('apache_request_headers')) { + // we need this to get the actual Authorization: header + // because apache tends to tell us it doesn't exist + $headers = apache_request_headers(); + + // sanitize the output of apache_request_headers because + // we always want the keys to be Cased-Like-This and arh() + // returns the headers in the same case as they are in the + // request + $out = array(); + foreach( $headers AS $key => $value ) { + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("-", " ", $key))) + ); + $out[$key] = $value; + } + } else { + // otherwise we don't have apache and are just going to have to hope + // that $_SERVER actually contains what we need + $out = array(); + if( isset($_SERVER['CONTENT_TYPE']) ) + $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; + if( isset($_ENV['CONTENT_TYPE']) ) + $out['Content-Type'] = $_ENV['CONTENT_TYPE']; + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) == "HTTP_") { + // this is chaos, basically it is just there to capitalize the first + // letter of every word that is not an initial HTTP and strip HTTP + // code from przemek + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) + ); + $out[$key] = $value; + } + } + } + return $out; + } + + // This function takes a input like a=b&a=c&d=e and returns the parsed + // parameters like this + // array('a' => array('b','c'), 'd' => 'e') + public static function parse_parameters( $input ) { + if (!isset($input) || !$input) return array(); + + $pairs = explode('&', $input); + + $parsed_parameters = array(); + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = OAuthUtil::urldecode_rfc3986($split[0]); + $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; + + if (isset($parsed_parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parsed_parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); + } + + $parsed_parameters[$parameter][] = $value; + } else { + $parsed_parameters[$parameter] = $value; + } + } + return $parsed_parameters; + } + + public static function build_http_query($params) { + if (!$params) return ''; + + // Urlencode both keys and values + $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); + $values = OAuthUtil::urlencode_rfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = array(); + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + natsort($value); + foreach ($value as $duplicate_value) { + $pairs[] = $parameter . '=' . $duplicate_value; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} diff --git a/custom/include/social/twitter/twitter_auth/twitteroauth/twitteroauth.php b/custom/include/social/twitter/twitter_auth/twitteroauth/twitteroauth.php new file mode 100755 index 00000000000..f7fc22bd1ef --- /dev/null +++ b/custom/include/social/twitter/twitter_auth/twitteroauth/twitteroauth.php @@ -0,0 +1,241 @@ +http_status; } + function lastAPICall() { return $this->last_api_call; } + + /** + * construct TwitterOAuth object + */ + function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { + $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); + if (!empty($oauth_token) && !empty($oauth_token_secret)) { + $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); + } else { + $this->token = NULL; + } + } + + + /** + * Get a request_token from Twitter + * + * @returns a key/value array containing oauth_token and oauth_token_secret + */ + function getRequestToken($oauth_callback) { + $parameters = array(); + $parameters['oauth_callback'] = $oauth_callback; + $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * Get the authorize URL + * + * @returns a string + */ + function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { + if (is_array($token)) { + $token = $token['oauth_token']; + } + if (empty($sign_in_with_twitter)) { + return $this->authorizeURL() . "?oauth_token={$token}"; + } else { + return $this->authenticateURL() . "?oauth_token={$token}"; + } + } + + /** + * Exchange request token and secret for an access token and + * secret, to sign API calls. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham") + */ + function getAccessToken($oauth_verifier) { + $parameters = array(); + $parameters['oauth_verifier'] = $oauth_verifier; + $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * One time exchange of username and password for access token and secret. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham", + * "x_auth_expires" => "0") + */ + function getXAuthToken($username, $password) { + $parameters = array(); + $parameters['x_auth_username'] = $username; + $parameters['x_auth_password'] = $password; + $parameters['x_auth_mode'] = 'client_auth'; + $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * GET wrapper for oAuthRequest. + */ + function get($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'GET', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response, true); + } + return $response; + } + + /** + * POST wrapper for oAuthRequest. + */ + function post($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'POST', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * DELETE wrapper for oAuthReqeust. + */ + function delete($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'DELETE', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * Format and sign an OAuth / API request + */ + function oAuthRequest($url, $method, $parameters) { + if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { + $url = "{$this->host}{$url}.{$this->format}"; + } + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': + return $this->http($request->to_url(), 'GET'); + default: + return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); + } + } + + /** + * Make an HTTP request + * + * @return API results + */ + function http($url, $method, $postfields = NULL) { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close ($ci); + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) { + $i = strpos($header, ':'); + if (!empty($i)) { + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + return strlen($header); + } +} diff --git a/custom/include/social/twitter/twitter_process.php b/custom/include/social/twitter/twitter_process.php new file mode 100755 index 00000000000..4b0a1865afe --- /dev/null +++ b/custom/include/social/twitter/twitter_process.php @@ -0,0 +1,98 @@ + $config['properties']['oauth_access_token'], + 'oauth_access_token_secret' => $config['properties']['oauth_access_token_secret'], + 'consumer_key' => $config['properties']['consumer_key'], + 'consumer_secret' => $config['properties']['consumer_secret'], +); +$limit = $config['properties']['max_number_of_tweets']; + +$twitter_user = $_REQUEST['twitter_user']; +$type = 'user_timeline'; + +$tweets_json = request_tweets($settings,$twitter_user,$type); +$tweets = json_decode($tweets_json, true); + +$display = display_tweets($tweets,$limit); +$formatted_display = format_tweets($display); + +echo $formatted_display; + +function request_tweets($settings,$twitter_user,$type){ + $url = 'https://api.twitter.com/1.1/statuses/' . $type .'.json'; + $getfield = "?screen_name=". $twitter_user .""; + $requestMethod = 'GET'; + $twitter = new TwitterAPIExchange($settings); + $tweets_json= $twitter->setGetfield($getfield) + ->buildOauth($url, $requestMethod) + ->performRequest(); + + return $tweets_json; +} + +function format_tweets($display){ + + $html =''; + $html = ""; + + + $html .= "
      "; + $html .= ''; + $html .= ""; + $html .= "
      Twitter Activity
      " . $display['name'] ."
      "; + + foreach($display['tweets'] as $tweet){ + $html .= "
      "; + $html .= "

      ". $tweet."

      "; + $html .= "
      "; + } + return $html . '
      '; + +} + + +function display_tweets($tweets,$limit){ +if(count($tweets) > 0){ + if(count($tweets) < $limit){ + $limit = count($tweets); + } + + $i = 0; + $display_tweets_array = array(); + + $display_tweets_array['name'] = $tweets[$i]['user']['name']; + $display_tweets_array['follow'] = $tweets[$i]['user']['url']; + $display_tweets_array['picture'] = $tweets[$i]['user']['profile_image_url_https']; + + while($i < $limit){ + + + $display_tweets_array['tweets'][] = $tweets[$i]['text']; + + if(count($tweets[$i]['entities']['urls']) != 0){ + + $u = 0; + while($u < count($tweets[$i]['entities']['urls'])){ + $display_tweets_array['tweets'][$i] = str_replace($tweets[$i]['entities']['urls'][0]['url'], "". $tweets[$i]['entities']['urls'][0]['display_url'] ." ",$display_tweets_array['tweets'][$i]); + $u++; + } + + } + $i++; + } + return $display_tweets_array; +}else{ + return false; +} + + + + + + +} diff --git a/custom/modules/Accounts/language/en_us.lang.php b/custom/modules/Accounts/language/en_us.lang.php new file mode 100755 index 00000000000..6c0cc81d037 --- /dev/null +++ b/custom/modules/Accounts/language/en_us.lang.php @@ -0,0 +1,6 @@ + 'Twitter Username', + 'LBL_FACEBOOK_USERNAME' => 'Facebook Username', +); \ No newline at end of file diff --git a/custom/modules/Accounts/metadata/detailviewdefs.php b/custom/modules/Accounts/metadata/detailviewdefs.php index 0d205fba576..7e3fa4b02c3 100755 --- a/custom/modules/Accounts/metadata/detailviewdefs.php +++ b/custom/modules/Accounts/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( @@ -42,6 +42,26 @@ 'file' => 'modules/Accounts/Account.js', ), ), + 'useTabs' => false, + 'tabDefs' => + array ( + 'LBL_ACCOUNT_INFORMATION' => + array ( + 'newTab' => false, + 'panelDefault' => 'expanded', + ), + 'LBL_PANEL_ADVANCED' => + array ( + 'newTab' => false, + 'panelDefault' => 'expanded', + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 'newTab' => false, + 'panelDefault' => 'expanded', + ), + ), + 'syncDetailEditViews' => true, ), 'panels' => array ( @@ -131,6 +151,19 @@ 'label' => 'LBL_DESCRIPTION', ), ), + 5 => + array ( + 0 => + array ( + 'name' => 'facebook_username_c', + 'label' => 'LBL_FACEBOOK_USERNAME', + ), + 1 => + array ( + 'name' => 'twitter_user_c', + 'label' => 'LBL_TWITTER_USER', + ), + ), ), 'LBL_PANEL_ADVANCED' => array ( @@ -213,20 +246,6 @@ 'name' => 'assigned_user_name', 'label' => 'LBL_ASSIGNED_TO', ), - 1 => - array ( - 'name' => 'date_modified', - 'label' => 'LBL_DATE_MODIFIED', - 'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}', - ), - ), - 1 => - array ( - 0 => - array ( - 'name' => 'date_entered', - 'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value}', - ), ), ), ), diff --git a/custom/modules/Accounts/metadata/editviewdefs.php b/custom/modules/Accounts/metadata/editviewdefs.php new file mode 100755 index 00000000000..0724bc7d3c8 --- /dev/null +++ b/custom/modules/Accounts/metadata/editviewdefs.php @@ -0,0 +1,196 @@ + + array ( + 'templateMeta' => + array ( + 'form' => + array ( + 'buttons' => + array ( + 0 => 'SAVE', + 1 => 'CANCEL', + ), + ), + 'maxColumns' => '2', + 'widths' => + array ( + 0 => + array ( + 'label' => '10', + 'field' => '30', + ), + 1 => + array ( + 'label' => '10', + 'field' => '30', + ), + ), + 'includes' => + array ( + 0 => + array ( + 'file' => 'modules/Accounts/Account.js', + ), + ), + 'useTabs' => false, + 'tabDefs' => + array ( + 'LBL_ACCOUNT_INFORMATION' => + array ( + 'newTab' => false, + 'panelDefault' => 'expanded', + ), + 'LBL_PANEL_ADVANCED' => + array ( + 'newTab' => false, + 'panelDefault' => 'expanded', + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 'newTab' => false, + 'panelDefault' => 'expanded', + ), + ), + 'syncDetailEditViews' => true, + ), + 'panels' => + array ( + 'lbl_account_information' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'name', + 'label' => 'LBL_NAME', + 'displayParams' => + array ( + 'required' => true, + ), + ), + 1 => + array ( + 'name' => 'phone_office', + 'label' => 'LBL_PHONE_OFFICE', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'website', + 'type' => 'link', + 'label' => 'LBL_WEBSITE', + ), + 1 => + array ( + 'name' => 'phone_fax', + 'label' => 'LBL_FAX', + ), + ), + 2 => + array ( + 0 => + array ( + 'name' => 'billing_address_street', + 'hideLabel' => true, + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'billing', + 'rows' => 2, + 'cols' => 30, + 'maxlength' => 150, + ), + ), + 1 => + array ( + 'name' => 'shipping_address_street', + 'hideLabel' => true, + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'shipping', + 'copy' => 'billing', + 'rows' => 2, + 'cols' => 30, + 'maxlength' => 150, + ), + ), + ), + 3 => + array ( + 0 => + array ( + 'name' => 'email1', + 'studio' => 'false', + 'label' => 'LBL_EMAIL', + ), + ), + 4 => + array ( + 0 => + array ( + 'name' => 'description', + 'label' => 'LBL_DESCRIPTION', + ), + ), + 5 => + array ( + 0 => + array ( + 'name' => 'facebook_username_c', + 'label' => 'LBL_FACEBOOK_USERNAME', + ), + 1 => + array ( + 'name' => 'twitter_user_c', + 'label' => 'LBL_TWITTER_USER', + ), + ), + ), + 'LBL_PANEL_ADVANCED' => + array ( + 0 => + array ( + 0 => 'account_type', + 1 => 'industry', + ), + 1 => + array ( + 0 => 'annual_revenue', + 1 => 'employees', + ), + 2 => + array ( + 0 => 'sic_code', + 1 => 'ticker_symbol', + ), + 3 => + array ( + 0 => 'parent_name', + 1 => 'ownership', + ), + 4 => + array ( + 0 => 'campaign_name', + 1 => 'rating', + ), + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'assigned_user_name', + 'label' => 'LBL_ASSIGNED_TO', + ), + ), + ), + ), + ), +); +?> diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php new file mode 100755 index 00000000000..9b84204d822 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php @@ -0,0 +1,117 @@ + $config['properties']['appid'], + 'secret' => $config['properties']['secret'] + ); + $this->facebook = new Facebook($fb_config); + } + function get_my_user(){ + try { + // Proceed knowing you have a logged in user who's authenticated. + return $this->facebook->api('/me'); + } catch (FacebookApiException $e) { + error_log($e); + $user = null; + } + } + function get_my_newsfeed(){ + return $this->facebook->api('me/home'); //get my news feed + } + function get_other_newsfeed($user, $limit = "50"){ + return $this->facebook->api('/' . $user . '/feed?limit=' . $limit); + } + function get_login_url($url){ + $params = array( + 'scope' => 'read_stream, publish_stream' + + ); + + + return $this->facebook->getLoginUrl($params); + } + function get_logout_url(){ + return $this->facebook->getLogoutUrl(); + } + function get_facebook_user($username){ + return $this->facebook->api('/' . $username); + } + + function process_feed($story){ + switch($story['type']){ + case "status": + return $this->status($story); + break; + case "photo": + return $this->photo_status($story); + break; + case "link": + return $this->link_type($story); + case "video": + break; + } + } + function photo_status($story){ + + $string = ' + +
      + + +
      + + +
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      + '; + + + return $string; + } + + function status($story){ + + $string = ' + +
      + + ' . ' +
      + +
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      + + '; + + + return $string; + } + function link_type($story){ + $string = ' + +
      + '; + if($story['name']){ + $string .= ''; + }else{ + $string .= ''; + } + + $string .= ' +
      + +
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      + '; + + + return $string; + } +} +?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js new file mode 100755 index 00000000000..97b86ce8d28 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js @@ -0,0 +1,46 @@ +/** + * Created by ian on 14/01/14. + */ + +$(function() { + //create new subpanel for social feeds + $("#subpanel_title_activities").before('

      Hide Social Feeds

      '); + + $("#show_socialfeeds").click(function( ) { + $("#SocialDiv").show(); + $("#show_socialfeeds").hide(); + $("#socialfeeds_show").show(); + $("#show").hide(); + + return false; + }); + $("#socialfeeds_show").click(function() { + + $("#SocialDiv").hide(); + $("#socialfeeds_show").hide(); + $("#show_socialfeeds").show(); + return false; + }); + + + //Ajax Call + username = $("#facebook_username_c").text(); + module = $("#formDetailView input[name=module]").val() + record = $("input[name=record]").val() + social = "facebook"; + url = document.URL; + + $.ajax({ + type: "POST", + url: "index.php?entryPoint=social&social=facebook&username=" + username + "&module=" + module + "&record=" + record, + data: { username: username, social: "facebook", url:url } + }) + .done(function( msg ) { + $("#facebook_feed").html( msg + $("#feed_history_c").html() ); + }); + +}); + + + + diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore new file mode 100755 index 00000000000..c2a70fcc4a2 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore @@ -0,0 +1,6 @@ +/coverage/ +vendor/ +composer.lock +composer.phar +.DS_Store +.idea/ diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml new file mode 100755 index 00000000000..9c49978dfd7 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml @@ -0,0 +1,6 @@ +language: php +php: + - 5.3 + - 5.4 + - 5.5 +script: phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md new file mode 100755 index 00000000000..16728fe595f --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md @@ -0,0 +1,28 @@ +Facebook PHP SDK (v.3.0.0) +========================== + +The new PHP SDK (v3.0.0) is a major upgrade to the older one (v2.2.x): + +- Uses OAuth authentication flows instead of our legacy authentication flow +- Consists of two classes. The first (class BaseFacebook) maintains the core of the upgrade, and the second one (class Facebook) is a small subclass that uses PHP sessions to store the user id and access token. + +If you’re currently using the PHP SDK (v2.2.x) for authentication, you will recall that the login code looked like this: + + $facebook = new Facebook(…); + $session = $facebook->getSession(); + if ($session) { + // proceed knowing you have a valid user session + } else { + // proceed knowing you require user login and/or authentication + } + +The login code is now: + + $facebook = new Facebook(…); + $user = $facebook->getUser(); + if ($user) { + // proceed knowing you have a logged in user who's authenticated + } else { + // proceed knowing you require user login and/or authentication + } + diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json new file mode 100755 index 00000000000..38cba0167e6 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json @@ -0,0 +1,25 @@ +{ + "name": "facebook/php-sdk", + "description": "Facebook PHP SDK", + "keywords": ["facebook", "sdk"], + "type": "library", + "homepage": "https://github.com/facebook/facebook-php-sdk", + "license": "Apache2", + "authors": [ + { + "name": "Facebook", + "homepage": "https://github.com/facebook/facebook-php-sdk/contributors" + } + ], + "require": { + "php": ">=5.2.0", + "ext-curl": "*", + "ext-json": "*" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "autoload": { + "classmap": ["src"] + } +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php new file mode 100755 index 00000000000..4c22fa96410 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php @@ -0,0 +1,107 @@ + '344617158898614', + 'secret' => '6dc8ac871858b34798bc2488200e503d', +)); + +// Get User ID +$user = $facebook->getUser(); + +// We may or may not have this data based on whether the user is logged in. +// +// If we have a $user id here, it means we know the user is logged into +// Facebook, but we don't know if the access token is valid. An access +// token is invalid if the user logged out of Facebook. + +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + error_log($e); + $user = null; + } +} + +// Login or logout url will be needed depending on current user state. +if ($user) { + $logoutUrl = $facebook->getLogoutUrl(); +} else { + $statusUrl = $facebook->getLoginStatusUrl(); + $loginUrl = $facebook->getLoginUrl(); +} + +// This call will always work since we are fetching public data. +$naitik = $facebook->api('/naitik'); + +?> + + + + php-sdk + + + +

      php-sdk

      + + + Logout + +
      + Check the login status using OAuth 2.0 handled by the PHP SDK: + Check the login status +
      +
      + Login using OAuth 2.0 handled by the PHP SDK: + Login with Facebook +
      + + +

      PHP Session

      +
      + + +

      You

      + + +

      Your User Object (/me)

      +
      + + You are not Connected. + + +

      Public profile of Naitik

      + + + + diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php new file mode 100755 index 00000000000..4255a35c34a --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php @@ -0,0 +1,59 @@ + '344617158898614', + 'secret' => '6dc8ac871858b34798bc2488200e503d', +)); + +// See if there is a user from a cookie +$user = $facebook->getUser(); + +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + echo '
      '.htmlspecialchars(print_r($e, true)).'
      '; + $user = null; + } +} + +?> + + + + + Your user profile is +
      +        
      +      
      + + + +
      + + + diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md new file mode 100755 index 00000000000..ecbfffe3d20 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md @@ -0,0 +1,115 @@ +Facebook PHP SDK (v.3.2.3) + +The [Facebook Platform](http://developers.facebook.com/) is +a set of APIs that make your app more social. + +This repository contains the open source PHP SDK that allows you to +access Facebook Platform from your PHP app. Except as otherwise noted, +the Facebook PHP SDK is licensed under the Apache Licence, Version 2.0 +(http://www.apache.org/licenses/LICENSE-2.0.html). + + +Usage +----- + +The [examples][examples] are a good place to start. The minimal you'll need to +have is: +```php +require 'facebook-php-sdk/src/facebook.php'; + +$facebook = new Facebook(array( + 'appId' => 'YOUR_APP_ID', + 'secret' => 'YOUR_APP_SECRET', +)); + +// Get User ID +$user = $facebook->getUser(); +``` + +To make [API][API] calls: +```php +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + error_log($e); + $user = null; + } +} +``` + +You can make api calls by choosing the `HTTP method` and setting optional `parameters`: +```php +$facebook->api('/me/feed/', 'post', array( + 'message' => 'I want to display this message on my wall' +)); +``` + + +Login or logout url will be needed depending on current user state. +```php +if ($user) { + $logoutUrl = $facebook->getLogoutUrl(); +} else { + $loginUrl = $facebook->getLoginUrl(); +} +``` + +With Composer: + +- Add the `"facebook/php-sdk": "@stable"` into the `require` section of your `composer.json`. +- Run `composer install`. +- The example will look like + +```php +if (($loader = require_once __DIR__ . '/vendor/autoload.php') == null) { + die('Vendor directory not found, Please run composer install.'); +} + +$facebook = new Facebook(array( + 'appId' => 'YOUR_APP_ID', + 'secret' => 'YOUR_APP_SECRET', +)); + +// Get User ID +$user = $facebook->getUser(); +``` + +[examples]: /examples/example.php +[API]: http://developers.facebook.com/docs/api + +Tests +----- + +In order to keep us nimble and allow us to bring you new functionality, without +compromising on stability, we have ensured full test coverage of the SDK. +We are including this in the open source repository to assure you of our +commitment to quality, but also with the hopes that you will contribute back to +help keep it stable. The easiest way to do so is to file bugs and include a +test case. + +The tests can be executed by using this command from the base directory: + + phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php + + +Contributing +=========== +For us to accept contributions you will have to first have signed the +[Contributor License Agreement](https://developers.facebook.com/opensource/cla). + +When commiting, keep all lines to less than 80 characters, and try to +follow the existing style. + +Before creating a pull request, squash your commits into a single commit. + +Add the comments where needed, and provide ample explanation in the +commit message. + + +Report Issues/Bugs +=============== +[Bugs](https://developers.facebook.com/bugs) + +[Questions](http://facebook.stackoverflow.com) diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php new file mode 100755 index 00000000000..b9d403efb4f --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php @@ -0,0 +1,1545 @@ + + */ +class FacebookApiException extends Exception +{ + /** + * The result from the API server that represents the exception information. + * + * @var mixed + */ + protected $result; + + /** + * Make a new API Exception with the given result. + * + * @param array $result The result from the API server + */ + public function __construct($result) { + $this->result = $result; + + $code = 0; + if (isset($result['error_code']) && is_int($result['error_code'])) { + $code = $result['error_code']; + } + + if (isset($result['error_description'])) { + // OAuth 2.0 Draft 10 style + $msg = $result['error_description']; + } else if (isset($result['error']) && is_array($result['error'])) { + // OAuth 2.0 Draft 00 style + $msg = $result['error']['message']; + } else if (isset($result['error_msg'])) { + // Rest server style + $msg = $result['error_msg']; + } else { + $msg = 'Unknown Error. Check getResult()'; + } + + parent::__construct($msg, $code); + } + + /** + * Return the associated result object returned by the API server. + * + * @return array The result from the API server + */ + public function getResult() { + return $this->result; + } + + /** + * Returns the associated type for the error. This will default to + * 'Exception' when a type is not available. + * + * @return string + */ + public function getType() { + if (isset($this->result['error'])) { + $error = $this->result['error']; + if (is_string($error)) { + // OAuth 2.0 Draft 10 style + return $error; + } else if (is_array($error)) { + // OAuth 2.0 Draft 00 style + if (isset($error['type'])) { + return $error['type']; + } + } + } + + return 'Exception'; + } + + /** + * To make debugging easier. + * + * @return string The string representation of the error + */ + public function __toString() { + $str = $this->getType() . ': '; + if ($this->code != 0) { + $str .= $this->code . ': '; + } + return $str . $this->message; + } +} + +/** + * Provides access to the Facebook Platform. This class provides + * a majority of the functionality needed, but the class is abstract + * because it is designed to be sub-classed. The subclass must + * implement the four abstract methods listed at the bottom of + * the file. + * + * @author Naitik Shah + */ +abstract class BaseFacebook +{ + /** + * Version. + */ + const VERSION = '3.2.3'; + + /** + * Signed Request Algorithm. + */ + const SIGNED_REQUEST_ALGORITHM = 'HMAC-SHA256'; + + /** + * Default options for curl. + * + * @var array + */ + public static $CURL_OPTS = array( + CURLOPT_CONNECTTIMEOUT => 10, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 60, + CURLOPT_USERAGENT => 'facebook-php-3.2', + ); + + /** + * List of query parameters that get automatically dropped when rebuilding + * the current URL. + * + * @var array + */ + protected static $DROP_QUERY_PARAMS = array( + 'code', + 'state', + 'signed_request', + ); + + /** + * Maps aliases to Facebook domains. + * + * @var array + */ + public static $DOMAIN_MAP = array( + 'api' => 'https://api.facebook.com/', + 'api_video' => 'https://api-video.facebook.com/', + 'api_read' => 'https://api-read.facebook.com/', + 'graph' => 'https://graph.facebook.com/', + 'graph_video' => 'https://graph-video.facebook.com/', + 'www' => 'https://www.facebook.com/', + ); + + /** + * The Application ID. + * + * @var string + */ + protected $appId; + + /** + * The Application App Secret. + * + * @var string + */ + protected $appSecret; + + /** + * The ID of the Facebook user, or 0 if the user is logged out. + * + * @var integer + */ + protected $user; + + /** + * The data from the signed_request token. + * + * @var string + */ + protected $signedRequest; + + /** + * A CSRF state variable to assist in the defense against CSRF attacks. + * + * @var string + */ + protected $state; + + /** + * The OAuth access token received in exchange for a valid authorization + * code. null means the access token has yet to be determined. + * + * @var string + */ + protected $accessToken = null; + + /** + * Indicates if the CURL based @ syntax for file uploads is enabled. + * + * @var boolean + */ + protected $fileUploadSupport = false; + + /** + * Indicates if we trust HTTP_X_FORWARDED_* headers. + * + * @var boolean + */ + protected $trustForwarded = false; + + /** + * Indicates if signed_request is allowed in query parameters. + * + * @var boolean + */ + protected $allowSignedRequest = true; + + /** + * Initialize a Facebook Application. + * + * The configuration: + * - appId: the application ID + * - secret: the application secret + * - fileUpload: (optional) boolean indicating if file uploads are enabled + * - allowSignedRequest: (optional) boolean indicating if signed_request is + * allowed in query parameters or POST body. Should be + * false for non-canvas apps. Defaults to true. + * + * @param array $config The application configuration + */ + public function __construct($config) { + $this->setAppId($config['appId']); + $this->setAppSecret($config['secret']); + if (isset($config['fileUpload'])) { + $this->setFileUploadSupport($config['fileUpload']); + } + if (isset($config['trustForwarded']) && $config['trustForwarded']) { + $this->trustForwarded = true; + } + if (isset($config['allowSignedRequest']) + && !$config['allowSignedRequest']) { + $this->allowSignedRequest = false; + } + $state = $this->getPersistentData('state'); + if (!empty($state)) { + $this->state = $state; + } + } + + /** + * Set the Application ID. + * + * @param string $appId The Application ID + * + * @return BaseFacebook + */ + public function setAppId($appId) { + $this->appId = $appId; + return $this; + } + + /** + * Get the Application ID. + * + * @return string the Application ID + */ + public function getAppId() { + return $this->appId; + } + + /** + * Set the App Secret. + * + * @param string $apiSecret The App Secret + * + * @return BaseFacebook + * @deprecated Use setAppSecret instead. + * @see setAppSecret() + */ + public function setApiSecret($apiSecret) { + $this->setAppSecret($apiSecret); + return $this; + } + + /** + * Set the App Secret. + * + * @param string $appSecret The App Secret + * + * @return BaseFacebook + */ + public function setAppSecret($appSecret) { + $this->appSecret = $appSecret; + return $this; + } + + /** + * Get the App Secret. + * + * @return string the App Secret + * + * @deprecated Use getAppSecret instead. + * @see getAppSecret() + */ + public function getApiSecret() { + return $this->getAppSecret(); + } + + /** + * Get the App Secret. + * + * @return string the App Secret + */ + public function getAppSecret() { + return $this->appSecret; + } + + /** + * Set the file upload support status. + * + * @param boolean $fileUploadSupport The file upload support status. + * + * @return BaseFacebook + */ + public function setFileUploadSupport($fileUploadSupport) { + $this->fileUploadSupport = $fileUploadSupport; + return $this; + } + + /** + * Get the file upload support status. + * + * @return boolean true if and only if the server supports file upload. + */ + public function getFileUploadSupport() { + return $this->fileUploadSupport; + } + + /** + * Get the file upload support status. + * + * @return boolean true if and only if the server supports file upload. + * + * @deprecated Use getFileUploadSupport instead. + * @see getFileUploadSupport() + */ + public function useFileUploadSupport() { + return $this->getFileUploadSupport(); + } + + /** + * Sets the access token for api calls. Use this if you get + * your access token by other means and just want the SDK + * to use it. + * + * @param string $access_token an access token. + * + * @return BaseFacebook + */ + public function setAccessToken($access_token) { + $this->accessToken = $access_token; + return $this; + } + + /** + * Extend an access token, while removing the short-lived token that might + * have been generated via client-side flow. Thanks to http://bit.ly/b0Pt0H + * for the workaround. + */ + public function setExtendedAccessToken() { + try { + // need to circumvent json_decode by calling _oauthRequest + // directly, since response isn't JSON format. + $access_token_response = $this->_oauthRequest( + $this->getUrl('graph', '/oauth/access_token'), + $params = array( + 'client_id' => $this->getAppId(), + 'client_secret' => $this->getAppSecret(), + 'grant_type' => 'fb_exchange_token', + 'fb_exchange_token' => $this->getAccessToken(), + ) + ); + } + catch (FacebookApiException $e) { + // most likely that user very recently revoked authorization. + // In any event, we don't have an access token, so say so. + return false; + } + + if (empty($access_token_response)) { + return false; + } + + $response_params = array(); + parse_str($access_token_response, $response_params); + + if (!isset($response_params['access_token'])) { + return false; + } + + $this->destroySession(); + + $this->setPersistentData( + 'access_token', $response_params['access_token'] + ); + } + + /** + * Determines the access token that should be used for API calls. + * The first time this is called, $this->accessToken is set equal + * to either a valid user access token, or it's set to the application + * access token if a valid user access token wasn't available. Subsequent + * calls return whatever the first call returned. + * + * @return string The access token + */ + public function getAccessToken() { + if ($this->accessToken !== null) { + // we've done this already and cached it. Just return. + return $this->accessToken; + } + + // first establish access token to be the application + // access token, in case we navigate to the /oauth/access_token + // endpoint, where SOME access token is required. + $this->setAccessToken($this->getApplicationAccessToken()); + $user_access_token = $this->getUserAccessToken(); + if ($user_access_token) { + $this->setAccessToken($user_access_token); + } + + return $this->accessToken; + } + + /** + * Determines and returns the user access token, first using + * the signed request if present, and then falling back on + * the authorization code if present. The intent is to + * return a valid user access token, or false if one is determined + * to not be available. + * + * @return string A valid user access token, or false if one + * could not be determined. + */ + protected function getUserAccessToken() { + // first, consider a signed request if it's supplied. + // if there is a signed request, then it alone determines + // the access token. + $signed_request = $this->getSignedRequest(); + if ($signed_request) { + // apps.facebook.com hands the access_token in the signed_request + if (array_key_exists('oauth_token', $signed_request)) { + $access_token = $signed_request['oauth_token']; + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + + // the JS SDK puts a code in with the redirect_uri of '' + if (array_key_exists('code', $signed_request)) { + $code = $signed_request['code']; + if ($code && $code == $this->getPersistentData('code')) { + // short-circuit if the code we have is the same as the one presented + return $this->getPersistentData('access_token'); + } + + $access_token = $this->getAccessTokenFromCode($code, ''); + if ($access_token) { + $this->setPersistentData('code', $code); + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + } + + // signed request states there's no access token, so anything + // stored should be cleared. + $this->clearAllPersistentData(); + return false; // respect the signed request's data, even + // if there's an authorization code or something else + } + + $code = $this->getCode(); + if ($code && $code != $this->getPersistentData('code')) { + $access_token = $this->getAccessTokenFromCode($code); + if ($access_token) { + $this->setPersistentData('code', $code); + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + + // code was bogus, so everything based on it should be invalidated. + $this->clearAllPersistentData(); + return false; + } + + // as a fallback, just return whatever is in the persistent + // store, knowing nothing explicit (signed request, authorization + // code, etc.) was present to shadow it (or we saw a code in $_REQUEST, + // but it's the same as what's in the persistent store) + return $this->getPersistentData('access_token'); + } + + /** + * Retrieve the signed request, either from a request parameter or, + * if not present, from a cookie. + * + * @return string the signed request, if available, or null otherwise. + */ + public function getSignedRequest() { + if (!$this->signedRequest) { + if ($this->allowSignedRequest && !empty($_REQUEST['signed_request'])) { + $this->signedRequest = $this->parseSignedRequest( + $_REQUEST['signed_request'] + ); + } else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) { + $this->signedRequest = $this->parseSignedRequest( + $_COOKIE[$this->getSignedRequestCookieName()]); + } + } + return $this->signedRequest; + } + + /** + * Get the UID of the connected user, or 0 + * if the Facebook user is not connected. + * + * @return string the UID if available. + */ + public function getUser() { + if ($this->user !== null) { + // we've already determined this and cached the value. + return $this->user; + } + + return $this->user = $this->getUserFromAvailableData(); + } + + /** + * Determines the connected user by first examining any signed + * requests, then considering an authorization code, and then + * falling back to any persistent store storing the user. + * + * @return integer The id of the connected Facebook user, + * or 0 if no such user exists. + */ + protected function getUserFromAvailableData() { + // if a signed request is supplied, then it solely determines + // who the user is. + $signed_request = $this->getSignedRequest(); + if ($signed_request) { + if (array_key_exists('user_id', $signed_request)) { + $user = $signed_request['user_id']; + + if($user != $this->getPersistentData('user_id')){ + $this->clearAllPersistentData(); + } + + $this->setPersistentData('user_id', $signed_request['user_id']); + return $user; + } + + // if the signed request didn't present a user id, then invalidate + // all entries in any persistent store. + $this->clearAllPersistentData(); + return 0; + } + + $user = $this->getPersistentData('user_id', $default = 0); + $persisted_access_token = $this->getPersistentData('access_token'); + + // use access_token to fetch user id if we have a user access_token, or if + // the cached access token has changed. + $access_token = $this->getAccessToken(); + if ($access_token && + $access_token != $this->getApplicationAccessToken() && + !($user && $persisted_access_token == $access_token)) { + $user = $this->getUserFromAccessToken(); + if ($user) { + $this->setPersistentData('user_id', $user); + } else { + $this->clearAllPersistentData(); + } + } + + return $user; + } + + /** + * Get a Login URL for use with redirects. By default, full page redirect is + * assumed. If you are using the generated URL with a window.open() call in + * JavaScript, you can pass in display=popup as part of the $params. + * + * The parameters: + * - redirect_uri: the url to go to after a successful login + * - scope: comma separated list of requested extended perms + * + * @param array $params Provide custom parameters + * @return string The URL for the login flow + */ + public function getLoginUrl($params=array()) { + $this->establishCSRFTokenState(); + $currentUrl = $this->getCurrentUrl(); + + // if 'scope' is passed as an array, convert to comma separated list + $scopeParams = isset($params['scope']) ? $params['scope'] : null; + if ($scopeParams && is_array($scopeParams)) { + $params['scope'] = implode(',', $scopeParams); + } + + return $this->getUrl( + 'www', + 'dialog/oauth', + array_merge( + array( + 'client_id' => $this->getAppId(), + 'redirect_uri' => $currentUrl, // possibly overwritten + 'state' => $this->state, + 'sdk' => 'php-sdk-'.self::VERSION + ), + $params + )); + } + + /** + * Get a Logout URL suitable for use with redirects. + * + * The parameters: + * - next: the url to go to after a successful logout + * + * @param array $params Provide custom parameters + * @return string The URL for the logout flow + */ + public function getLogoutUrl($params=array()) { + return $this->getUrl( + 'www', + 'logout.php', + array_merge(array( + 'next' => $this->getCurrentUrl(), + 'access_token' => $this->getUserAccessToken(), + ), $params) + ); + } + + /** + * Get a login status URL to fetch the status from Facebook. + * + * @param array $params Provide custom parameters + * @return string The URL for the logout flow + */ + public function getLoginStatusUrl($params=array()) { + return $this->getLoginUrl( + array_merge(array( + 'response_type' => 'code', + 'display' => 'none', + ), $params) + ); + } + + /** + * Make an API call. + * + * @return mixed The decoded response + */ + public function api(/* polymorphic */) { + $args = func_get_args(); + if (is_array($args[0])) { + return $this->_restserver($args[0]); + } else { + return call_user_func_array(array($this, '_graph'), $args); + } + } + + /** + * Constructs and returns the name of the cookie that + * potentially houses the signed request for the app user. + * The cookie is not set by the BaseFacebook class, but + * it may be set by the JavaScript SDK. + * + * @return string the name of the cookie that would house + * the signed request value. + */ + protected function getSignedRequestCookieName() { + return 'fbsr_'.$this->getAppId(); + } + + /** + * Constructs and returns the name of the cookie that potentially contain + * metadata. The cookie is not set by the BaseFacebook class, but it may be + * set by the JavaScript SDK. + * + * @return string the name of the cookie that would house metadata. + */ + protected function getMetadataCookieName() { + return 'fbm_'.$this->getAppId(); + } + + /** + * Get the authorization code from the query parameters, if it exists, + * and otherwise return false to signal no authorization code was + * discoverable. + * + * @return mixed The authorization code, or false if the authorization + * code could not be determined. + */ + protected function getCode() { + if (!isset($_REQUEST['code']) || !isset($_REQUEST['state'])) { + return false; + } + if ($this->state === $_REQUEST['state']) { + // CSRF state has done its job, so clear it + $this->state = null; + $this->clearPersistentData('state'); + return $_REQUEST['code']; + } + self::errorLog('CSRF state token does not match one provided.'); + + return false; + } + + /** + * Retrieves the UID with the understanding that + * $this->accessToken has already been set and is + * seemingly legitimate. It relies on Facebook's Graph API + * to retrieve user information and then extract + * the user ID. + * + * @return integer Returns the UID of the Facebook user, or 0 + * if the Facebook user could not be determined. + */ + protected function getUserFromAccessToken() { + try { + $user_info = $this->api('/me'); + return $user_info['id']; + } catch (FacebookApiException $e) { + return 0; + } + } + + /** + * Returns the access token that should be used for logged out + * users when no authorization code is available. + * + * @return string The application access token, useful for gathering + * public information about users and applications. + */ + public function getApplicationAccessToken() { + return $this->appId.'|'.$this->appSecret; + } + + /** + * Lays down a CSRF state token for this process. + * + * @return void + */ + protected function establishCSRFTokenState() { + if ($this->state === null) { + $this->state = md5(uniqid(mt_rand(), true)); + $this->setPersistentData('state', $this->state); + } + } + + /** + * Retrieves an access token for the given authorization code + * (previously generated from www.facebook.com on behalf of + * a specific user). The authorization code is sent to graph.facebook.com + * and a legitimate access token is generated provided the access token + * and the user for which it was generated all match, and the user is + * either logged in to Facebook or has granted an offline access permission. + * + * @param string $code An authorization code. + * @param string $redirect_uri Optional redirect URI. Default null + * + * @return mixed An access token exchanged for the authorization code, or + * false if an access token could not be generated. + */ + protected function getAccessTokenFromCode($code, $redirect_uri = null) { + if (empty($code)) { + return false; + } + + if ($redirect_uri === null) { + $redirect_uri = $this->getCurrentUrl(); + } + + try { + // need to circumvent json_decode by calling _oauthRequest + // directly, since response isn't JSON format. + $access_token_response = + $this->_oauthRequest( + $this->getUrl('graph', '/oauth/access_token'), + $params = array('client_id' => $this->getAppId(), + 'client_secret' => $this->getAppSecret(), + 'redirect_uri' => $redirect_uri, + 'code' => $code)); + } catch (FacebookApiException $e) { + // most likely that user very recently revoked authorization. + // In any event, we don't have an access token, so say so. + return false; + } + + if (empty($access_token_response)) { + return false; + } + + $response_params = array(); + parse_str($access_token_response, $response_params); + if (!isset($response_params['access_token'])) { + return false; + } + + return $response_params['access_token']; + } + + /** + * Invoke the old restserver.php endpoint. + * + * @param array $params Method call object + * + * @return mixed The decoded response object + * @throws FacebookApiException + */ + protected function _restserver($params) { + // generic application level parameters + $params['api_key'] = $this->getAppId(); + $params['format'] = 'json-strings'; + + $result = json_decode($this->_oauthRequest( + $this->getApiUrl($params['method']), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error_code'])) { + $this->throwAPIException($result); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + $method = strtolower($params['method']); + if ($method === 'auth.expiresession' || + $method === 'auth.revokeauthorization') { + $this->destroySession(); + } + + return $result; + } + + /** + * Return true if this is video post. + * + * @param string $path The path + * @param string $method The http method (default 'GET') + * + * @return boolean true if this is video post + */ + protected function isVideoPost($path, $method = 'GET') { + if ($method == 'POST' && preg_match("/^(\/)(.+)(\/)(videos)$/", $path)) { + return true; + } + return false; + } + + /** + * Invoke the Graph API. + * + * @param string $path The path (required) + * @param string $method The http method (default 'GET') + * @param array $params The query/post data + * + * @return mixed The decoded response object + * @throws FacebookApiException + */ + protected function _graph($path, $method = 'GET', $params = array()) { + if (is_array($method) && empty($params)) { + $params = $method; + $method = 'GET'; + } + $params['method'] = $method; // method override as we always do a POST + + if ($this->isVideoPost($path, $method)) { + $domainKey = 'graph_video'; + } else { + $domainKey = 'graph'; + } + + $result = json_decode($this->_oauthRequest( + $this->getUrl($domainKey, $path), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error'])) { + $this->throwAPIException($result); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + return $result; + } + + /** + * Make a OAuth Request. + * + * @param string $url The path (required) + * @param array $params The query/post data + * + * @return string The decoded response object + * @throws FacebookApiException + */ + protected function _oauthRequest($url, $params) { + if (!isset($params['access_token'])) { + $params['access_token'] = $this->getAccessToken(); + } + + if (isset($params['access_token']) && !isset($params['appsecret_proof'])) { + $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']); + } + + // json_encode all params values that are not strings + foreach ($params as $key => $value) { + if (!is_string($value) && !($value instanceof CURLFile)) { + $params[$key] = json_encode($value); + } + } + + return $this->makeRequest($url, $params); + } + + /** + * Generate a proof of App Secret + * This is required for all API calls originating from a server + * It is a sha256 hash of the access_token made using the app secret + * + * @param string $access_token The access_token to be hashed (required) + * + * @return string The sha256 hash of the access_token + */ + protected function getAppSecretProof($access_token) { + return hash_hmac('sha256', $access_token, $this->getAppSecret()); + } + + /** + * Makes an HTTP request. This method can be overridden by subclasses if + * developers want to do fancier things or use something other than curl to + * make the request. + * + * @param string $url The URL to make the request to + * @param array $params The parameters to use for the POST body + * @param CurlHandler $ch Initialized curl handle + * + * @return string The response text + */ + protected function makeRequest($url, $params, $ch=null) { + if (!$ch) { + $ch = curl_init(); + } + + $opts = self::$CURL_OPTS; + if ($this->getFileUploadSupport()) { + $opts[CURLOPT_POSTFIELDS] = $params; + } else { + $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); + } + $opts[CURLOPT_URL] = $url; + + // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait + // for 2 seconds if the server does not support this header. + if (isset($opts[CURLOPT_HTTPHEADER])) { + $existing_headers = $opts[CURLOPT_HTTPHEADER]; + $existing_headers[] = 'Expect:'; + $opts[CURLOPT_HTTPHEADER] = $existing_headers; + } else { + $opts[CURLOPT_HTTPHEADER] = array('Expect:'); + } + + curl_setopt_array($ch, $opts); + $result = curl_exec($ch); + + $errno = curl_errno($ch); + // CURLE_SSL_CACERT || CURLE_SSL_CACERT_BADFILE + if ($errno == 60 || $errno == 77) { + self::errorLog('Invalid or no certificate authority found, '. + 'using bundled information'); + curl_setopt($ch, CURLOPT_CAINFO, + dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fb_ca_chain_bundle.crt'); + $result = curl_exec($ch); + } + + // With dual stacked DNS responses, it's possible for a server to + // have IPv6 enabled but not have IPv6 connectivity. If this is + // the case, curl will try IPv4 first and if that fails, then it will + // fall back to IPv6 and the error EHOSTUNREACH is returned by the + // operating system. + if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) { + $matches = array(); + $regex = '/Failed to connect to ([^:].*): Network is unreachable/'; + if (preg_match($regex, curl_error($ch), $matches)) { + if (strlen(@inet_pton($matches[1])) === 16) { + self::errorLog('Invalid IPv6 configuration on server, '. + 'Please disable or get native IPv6 on your server.'); + self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + $result = curl_exec($ch); + } + } + } + + if ($result === false) { + $e = new FacebookApiException(array( + 'error_code' => curl_errno($ch), + 'error' => array( + 'message' => curl_error($ch), + 'type' => 'CurlException', + ), + )); + curl_close($ch); + throw $e; + } + curl_close($ch); + return $result; + } + + /** + * Parses a signed_request and validates the signature. + * + * @param string $signed_request A signed token + * + * @return array The payload inside it or null if the sig is wrong + */ + protected function parseSignedRequest($signed_request) { + + if (!$signed_request || strpos($signed_request, '.') === false) { + self::errorLog('Signed request was invalid!'); + return null; + } + + list($encoded_sig, $payload) = explode('.', $signed_request, 2); + + // decode the data + $sig = self::base64UrlDecode($encoded_sig); + $data = json_decode(self::base64UrlDecode($payload), true); + + if (!isset($data['algorithm']) + || strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM + ) { + self::errorLog( + 'Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM); + return null; + } + + // check sig + $expected_sig = hash_hmac('sha256', $payload, + $this->getAppSecret(), $raw = true); + + if (strlen($expected_sig) !== strlen($sig)) { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + + $result = 0; + for ($i = 0; $i < strlen($expected_sig); $i++) { + $result |= ord($expected_sig[$i]) ^ ord($sig[$i]); + } + + if ($result == 0) { + return $data; + } else { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + } + + /** + * Makes a signed_request blob using the given data. + * + * @param array $data The data array. + * + * @return string The signed request. + */ + protected function makeSignedRequest($data) { + if (!is_array($data)) { + throw new InvalidArgumentException( + 'makeSignedRequest expects an array. Got: ' . print_r($data, true)); + } + $data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM; + $data['issued_at'] = time(); + $json = json_encode($data); + $b64 = self::base64UrlEncode($json); + $raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true); + $sig = self::base64UrlEncode($raw_sig); + return $sig.'.'.$b64; + } + + /** + * Build the URL for api given parameters. + * + * @param string $method The method name. + * + * @return string The URL for the given parameters + */ + protected function getApiUrl($method) { + static $READ_ONLY_CALLS = + array('admin.getallocation' => 1, + 'admin.getappproperties' => 1, + 'admin.getbannedusers' => 1, + 'admin.getlivestreamvialink' => 1, + 'admin.getmetrics' => 1, + 'admin.getrestrictioninfo' => 1, + 'application.getpublicinfo' => 1, + 'auth.getapppublickey' => 1, + 'auth.getsession' => 1, + 'auth.getsignedpublicsessiondata' => 1, + 'comments.get' => 1, + 'connect.getunconnectedfriendscount' => 1, + 'dashboard.getactivity' => 1, + 'dashboard.getcount' => 1, + 'dashboard.getglobalnews' => 1, + 'dashboard.getnews' => 1, + 'dashboard.multigetcount' => 1, + 'dashboard.multigetnews' => 1, + 'data.getcookies' => 1, + 'events.get' => 1, + 'events.getmembers' => 1, + 'fbml.getcustomtags' => 1, + 'feed.getappfriendstories' => 1, + 'feed.getregisteredtemplatebundlebyid' => 1, + 'feed.getregisteredtemplatebundles' => 1, + 'fql.multiquery' => 1, + 'fql.query' => 1, + 'friends.arefriends' => 1, + 'friends.get' => 1, + 'friends.getappusers' => 1, + 'friends.getlists' => 1, + 'friends.getmutualfriends' => 1, + 'gifts.get' => 1, + 'groups.get' => 1, + 'groups.getmembers' => 1, + 'intl.gettranslations' => 1, + 'links.get' => 1, + 'notes.get' => 1, + 'notifications.get' => 1, + 'pages.getinfo' => 1, + 'pages.isadmin' => 1, + 'pages.isappadded' => 1, + 'pages.isfan' => 1, + 'permissions.checkavailableapiaccess' => 1, + 'permissions.checkgrantedapiaccess' => 1, + 'photos.get' => 1, + 'photos.getalbums' => 1, + 'photos.gettags' => 1, + 'profile.getinfo' => 1, + 'profile.getinfooptions' => 1, + 'stream.get' => 1, + 'stream.getcomments' => 1, + 'stream.getfilters' => 1, + 'users.getinfo' => 1, + 'users.getloggedinuser' => 1, + 'users.getstandardinfo' => 1, + 'users.hasapppermission' => 1, + 'users.isappuser' => 1, + 'users.isverified' => 1, + 'video.getuploadlimits' => 1); + $name = 'api'; + if (isset($READ_ONLY_CALLS[strtolower($method)])) { + $name = 'api_read'; + } else if (strtolower($method) == 'video.upload') { + $name = 'api_video'; + } + return self::getUrl($name, 'restserver.php'); + } + + /** + * Build the URL for given domain alias, path and parameters. + * + * @param string $name The name of the domain + * @param string $path Optional path (without a leading slash) + * @param array $params Optional query parameters + * + * @return string The URL for the given parameters + */ + protected function getUrl($name, $path='', $params=array()) { + $url = self::$DOMAIN_MAP[$name]; + if ($path) { + if ($path[0] === '/') { + $path = substr($path, 1); + } + $url .= $path; + } + if ($params) { + $url .= '?' . http_build_query($params, null, '&'); + } + + return $url; + } + + /** + * Returns the HTTP Host + * + * @return string The HTTP Host + */ + protected function getHttpHost() { + if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { + $forwardProxies = explode(',', $_SERVER['HTTP_X_FORWARDED_HOST']); + if (!empty($forwardProxies)) { + return $forwardProxies[0]; + } + } + return $_SERVER['HTTP_HOST']; + } + + /** + * Returns the HTTP Protocol + * + * @return string The HTTP Protocol + */ + protected function getHttpProtocol() { + if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { + if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + return 'https'; + } + return 'http'; + } + /*apache + variants specific way of checking for https*/ + if (isset($_SERVER['HTTPS']) && + ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) { + return 'https'; + } + /*nginx way of checking for https*/ + if (isset($_SERVER['SERVER_PORT']) && + ($_SERVER['SERVER_PORT'] === '443')) { + return 'https'; + } + return 'http'; + } + + /** + * Returns the base domain used for the cookie. + * + * @return string The base domain + */ + protected function getBaseDomain() { + // The base domain is stored in the metadata cookie if not we fallback + // to the current hostname + $metadata = $this->getMetadataCookie(); + if (array_key_exists('base_domain', $metadata) && + !empty($metadata['base_domain'])) { + return trim($metadata['base_domain'], '.'); + } + return $this->getHttpHost(); + } + + /** + * Returns the Current URL, stripping it of known FB parameters that should + * not persist. + * + * @return string The current URL + */ + protected function getCurrentUrl() { + $protocol = $this->getHttpProtocol() . '://'; + $host = $this->getHttpHost(); + $currentUrl = $protocol.$host.$_SERVER['REQUEST_URI']; + $parts = parse_url($currentUrl); + + $query = ''; + if (!empty($parts['query'])) { + // drop known fb params + $params = explode('&', $parts['query']); + $retained_params = array(); + foreach ($params as $param) { + if ($this->shouldRetainParam($param)) { + $retained_params[] = $param; + } + } + + if (!empty($retained_params)) { + $query = '?'.implode($retained_params, '&'); + } + } + + // use port if non default + $port = + isset($parts['port']) && + (($protocol === 'http://' && $parts['port'] !== 80) || + ($protocol === 'https://' && $parts['port'] !== 443)) + ? ':' . $parts['port'] : ''; + + // rebuild + return $protocol . $parts['host'] . $port . $parts['path'] . $query; + } + + /** + * Returns true if and only if the key or key/value pair should + * be retained as part of the query string. This amounts to + * a brute-force search of the very small list of Facebook-specific + * params that should be stripped out. + * + * @param string $param A key or key/value pair within a URL's query (e.g. + * 'foo=a', 'foo=', or 'foo'. + * + * @return boolean + */ + protected function shouldRetainParam($param) { + foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) { + if ($param === $drop_query_param || + strpos($param, $drop_query_param.'=') === 0) { + return false; + } + } + + return true; + } + + /** + * Analyzes the supplied result to see if it was thrown + * because the access token is no longer valid. If that is + * the case, then we destroy the session. + * + * @param array $result A record storing the error message returned + * by a failed API call. + */ + protected function throwAPIException($result) { + $e = new FacebookApiException($result); + switch ($e->getType()) { + // OAuth 2.0 Draft 00 style + case 'OAuthException': + // OAuth 2.0 Draft 10 style + case 'invalid_token': + // REST server errors are just Exceptions + case 'Exception': + $message = $e->getMessage(); + if ((strpos($message, 'Error validating access token') !== false) || + (strpos($message, 'Invalid OAuth access token') !== false) || + (strpos($message, 'An active access token must be used') !== false) + ) { + $this->destroySession(); + } + break; + } + + throw $e; + } + + + /** + * Prints to the error log if you aren't in command line mode. + * + * @param string $msg Log message + */ + protected static function errorLog($msg) { + // disable error log if we are running in a CLI environment + // @codeCoverageIgnoreStart + if (php_sapi_name() != 'cli') { + error_log($msg); + } + // uncomment this if you want to see the errors on the page + // print 'error_log: '.$msg."\n"; + // @codeCoverageIgnoreEnd + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * No padded = + * + * @param string $input base64UrlEncoded input + * + * @return string The decoded string + */ + protected static function base64UrlDecode($input) { + return base64_decode(strtr($input, '-_', '+/')); + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * + * @param string $input The input to encode + * @return string The base64Url encoded input, as a string. + */ + protected static function base64UrlEncode($input) { + $str = strtr(base64_encode($input), '+/', '-_'); + $str = str_replace('=', '', $str); + return $str; + } + + /** + * Destroy the current session + */ + public function destroySession() { + $this->accessToken = null; + $this->signedRequest = null; + $this->user = null; + $this->clearAllPersistentData(); + + // Javascript sets a cookie that will be used in getSignedRequest that we + // need to clear if we can + $cookie_name = $this->getSignedRequestCookieName(); + if (array_key_exists($cookie_name, $_COOKIE)) { + unset($_COOKIE[$cookie_name]); + if (!headers_sent()) { + $base_domain = $this->getBaseDomain(); + setcookie($cookie_name, '', 1, '/', '.'.$base_domain); + } else { + // @codeCoverageIgnoreStart + self::errorLog( + 'There exists a cookie that we wanted to clear that we couldn\'t '. + 'clear because headers was already sent. Make sure to do the first '. + 'API call before outputing anything.' + ); + // @codeCoverageIgnoreEnd + } + } + } + + /** + * Parses the metadata cookie that our Javascript API set + * + * @return array an array mapping key to value + */ + protected function getMetadataCookie() { + $cookie_name = $this->getMetadataCookieName(); + if (!array_key_exists($cookie_name, $_COOKIE)) { + return array(); + } + + // The cookie value can be wrapped in "-characters so remove them + $cookie_value = trim($_COOKIE[$cookie_name], '"'); + + if (empty($cookie_value)) { + return array(); + } + + $parts = explode('&', $cookie_value); + $metadata = array(); + foreach ($parts as $part) { + $pair = explode('=', $part, 2); + if (!empty($pair[0])) { + $metadata[urldecode($pair[0])] = + (count($pair) > 1) ? urldecode($pair[1]) : ''; + } + } + + return $metadata; + } + + /** + * Finds whether the given domain is allowed or not + * + * @param string $big The value to be checked against $small + * @param string $small The input string + * + * @return boolean Returns TRUE if $big matches $small + */ + protected static function isAllowedDomain($big, $small) { + if ($big === $small) { + return true; + } + return self::endsWith($big, '.'.$small); + } + + /** + * Checks if $big string ends with $small string + * + * @param string $big The value to be checked against $small + * @param string $small The input string + * + * @return boolean TRUE if $big ends with $small + */ + protected static function endsWith($big, $small) { + $len = strlen($small); + if ($len === 0) { + return true; + } + return substr($big, -$len) === $small; + } + + /** + * Each of the following four methods should be overridden in + * a concrete subclass, as they are in the provided Facebook class. + * The Facebook class uses PHP sessions to provide a primitive + * persistent store, but another subclass--one that you implement-- + * might use a database, memcache, or an in-memory cache. + * + * @see Facebook + */ + + /** + * Stores the given ($key, $value) pair, so that future calls to + * getPersistentData($key) return $value. This call may be in another request. + * + * @param string $key + * @param array $value + * + * @return void + */ + abstract protected function setPersistentData($key, $value); + + /** + * Get the data for $key, persisted by BaseFacebook::setPersistentData() + * + * @param string $key The key of the data to retrieve + * @param boolean $default The default value to return if $key is not found + * + * @return mixed + */ + abstract protected function getPersistentData($key, $default = false); + + /** + * Clear the data with $key from the persistent storage + * + * @param string $key + * + * @return void + */ + abstract protected function clearPersistentData($key); + + /** + * Clear all data from the persistent storage + * + * @return void + */ + abstract protected function clearAllPersistentData(); +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php new file mode 100755 index 00000000000..51de333b352 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php @@ -0,0 +1,227 @@ +initSharedSession(); + + // re-load the persisted state, since parent + // attempted to read out of non-shared cookie + $state = $this->getPersistentData('state'); + if (!empty($state)) { + $this->state = $state; + } else { + $this->state = null; + } + + } + } + + /** + * Supported keys for persistent data + * + * @var array + */ + protected static $kSupportedKeys = + array('state', 'code', 'access_token', 'user_id'); + + /** + * Initiates Shared Session + */ + protected function initSharedSession() { + $cookie_name = $this->getSharedSessionCookieName(); + if (isset($_COOKIE[$cookie_name])) { + $data = $this->parseSignedRequest($_COOKIE[$cookie_name]); + if ($data && !empty($data['domain']) && + self::isAllowedDomain($this->getHttpHost(), $data['domain'])) { + // good case + $this->sharedSessionID = $data['id']; + return; + } + // ignoring potentially unreachable data + } + // evil/corrupt/missing case + $base_domain = $this->getBaseDomain(); + $this->sharedSessionID = md5(uniqid(mt_rand(), true)); + $cookie_value = $this->makeSignedRequest( + array( + 'domain' => $base_domain, + 'id' => $this->sharedSessionID, + ) + ); + $_COOKIE[$cookie_name] = $cookie_value; + if (!headers_sent()) { + $expire = time() + self::FBSS_COOKIE_EXPIRE; + setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain); + } else { + // @codeCoverageIgnoreStart + self::errorLog( + 'Shared session ID cookie could not be set! You must ensure you '. + 'create the Facebook instance before headers have been sent. This '. + 'will cause authentication issues after the first request.' + ); + // @codeCoverageIgnoreEnd + } + } + + /** + * Provides the implementations of the inherited abstract + * methods. The implementation uses PHP sessions to maintain + * a store for authorization codes, user ids, CSRF states, and + * access tokens. + */ + + /** + * {@inheritdoc} + * + * @see BaseFacebook::setPersistentData() + */ + protected function setPersistentData($key, $value) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to setPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + $_SESSION[$session_var_name] = $value; + } + + /** + * {@inheritdoc} + * + * @see BaseFacebook::getPersistentData() + */ + protected function getPersistentData($key, $default = false) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to getPersistentData.'); + return $default; + } + + $session_var_name = $this->constructSessionVariableName($key); + return isset($_SESSION[$session_var_name]) ? + $_SESSION[$session_var_name] : $default; + } + + /** + * {@inheritdoc} + * + * @see BaseFacebook::clearPersistentData() + */ + protected function clearPersistentData($key) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to clearPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + if (isset($_SESSION[$session_var_name])) { + unset($_SESSION[$session_var_name]); + } + } + + /** + * {@inheritdoc} + * + * @see BaseFacebook::clearAllPersistentData() + */ + protected function clearAllPersistentData() { + foreach (self::$kSupportedKeys as $key) { + $this->clearPersistentData($key); + } + if ($this->sharedSessionID) { + $this->deleteSharedSessionCookie(); + } + } + + /** + * Deletes Shared session cookie + */ + protected function deleteSharedSessionCookie() { + $cookie_name = $this->getSharedSessionCookieName(); + unset($_COOKIE[$cookie_name]); + $base_domain = $this->getBaseDomain(); + setcookie($cookie_name, '', 1, '/', '.'.$base_domain); + } + + /** + * Returns the Shared session cookie name + * + * @return string The Shared session cookie name + */ + protected function getSharedSessionCookieName() { + return self::FBSS_COOKIE_NAME . '_' . $this->getAppId(); + } + + /** + * Constructs and returns the name of the session key. + * + * @see setPersistentData() + * @param string $key The key for which the session variable name to construct. + * + * @return string The name of the session key. + */ + protected function constructSessionVariableName($key) { + $parts = array('fb', $this->getAppId(), $key); + if ($this->sharedSessionID) { + array_unshift($parts, $this->sharedSessionID); + } + return implode('_', $parts); + } +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt new file mode 100755 index 00000000000..969239ff676 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt @@ -0,0 +1,3920 @@ +## +## ca-bundle.crt -- Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## + +# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $ + +GTE CyberTrust Global Root +========================== +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg +Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG +A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz +MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL +Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 +IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u +sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql +HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID +AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW +M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF +NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- + +Thawte Server CA +================ +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE +AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j +b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV +BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u +c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG +A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 +ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl +/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 +1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J +GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ +GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- + +Thawte Premium Server CA +======================== +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE +AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl +ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU +VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 +aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ +cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 +aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh +Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ +qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm +SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf +8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t +UCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- + +Equifax Secure CA +================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE +ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT +B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR +fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW +8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE +CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS +spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 +zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB +BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 +70+sB3c4 +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 1 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy +MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE +NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i +o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq +kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 +RbyhkwS7hp86W0N6w4pl +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 3 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy +MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD +VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS +xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi +up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 +mPnHfxsb1gYgAlihw6ID +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA +TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah +WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf +Tqj/ZA1k +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd +k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq +WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM +XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC +lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx +nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC +wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA +ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK +1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk +LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO +FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 +lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT +1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD +Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 +-----END CERTIFICATE----- + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +ValiCert Class 1 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy +MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi +GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm +DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG +lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX +icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP +Orf1LXLI +-----END CERTIFICATE----- + +ValiCert Class 2 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC +CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf +ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ +SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV +UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 +W9ViH0Pd +-----END CERTIFICATE----- + +RSA Root Certificate 1 +====================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td +3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H +BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs +3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF +V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r +on+jjBXu +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E +bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ +rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ +Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB +FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N +y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h +a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc +D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y +azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug +b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 +tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 +C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS +0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs +Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 +JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf +0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx +JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j +GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Verisign Class 4 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS +tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM +8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW +Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX +Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt +mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd +RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG +UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- + +Entrust.net Secure Server CA +============================ +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg +cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl +ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG +A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi +eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p +dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ +aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 +gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw +ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw +CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l +dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw +NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow +HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN +Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 +n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC +AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER +gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B +AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS +o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z +2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX +OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Equifax Secure Global eBusiness CA +================================== +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp +bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx +HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds +b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV +PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN +qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn +hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs +MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN +I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY +NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 1 +============================= +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB +LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE +ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz +IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ +1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a +IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk +MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW +Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF +AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 +lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ +KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 2 +============================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE +ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y +MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT +DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn +2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 +BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx +JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e +uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 +jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia +78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm +V+GRMOrN +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +UTN-USER First-Network Applications +=================================== +-----BEGIN CERTIFICATE----- +MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp +BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 +WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T +YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB +cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug +mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj +DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu +Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi +P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE +j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w +HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j +cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G +CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y +IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK +RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp +xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq +DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE +-----END CERTIFICATE----- + +America Online Root Certification Authority 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG +v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z +DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh +sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP +8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z +o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf +GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF +VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft +3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g +Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- + +America Online Root Certification Authority 2 +============================================= +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en +fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 +f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO +qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN +RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 +gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn +6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid +FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 +Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj +B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op +aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY +T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p ++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg +JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy +zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO +ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh +1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf +GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff +Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP +cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 1 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw +NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 +7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 +EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl +0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 +2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa +HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT +iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 +28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV +yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR +vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P +qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z +IRlXvVWa +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +TDC Internet Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE +ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx +NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu +ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j +xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL +znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc +5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 +otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI +AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM +VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM +MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC +AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe +UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G +CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m +gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ +2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb +O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU +Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l +-----END CERTIFICATE----- + +TDC OCES Root CA +================ +-----BEGIN CERTIFICATE----- +MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE +ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 +MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH +nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 +zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV +iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde +dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO +3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB +5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k +ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm +cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp +Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x +LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM +MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm +aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy +MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 ++RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 +NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 +A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc +A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 +AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 +AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== +-----END CERTIFICATE----- + +UTN DATACorp SGC Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ +BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa +MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w +HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy +dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys +raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo +wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA +9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv +33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud +DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 +BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD +LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 +DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 +I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx +EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP +DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- + +UTN USERFirst Email Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 +BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 +OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx +FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx +ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz +dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx +B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 +om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG +TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl +yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE +AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV +HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll +bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne +xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ +5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV +NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ +w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +UTN USERFirst Object Root CA +============================ +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb +BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz +NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx +HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy +dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR +loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ +w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu +lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 +RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL +BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 +ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly +c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw +DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO +PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE +qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG +hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Qualified (Class QA) Root +================================= +-----BEGIN CERTIFICATE----- +MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn +eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 +bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 +LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 +dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP +aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV +CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e +8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb +m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ +0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM +0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 +YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh +biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p +a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz +YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg +YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg +ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov +L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr +Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 +aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg +YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 +IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 +DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN +wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg +W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc +R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR +5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +NetLock Business (Class B) Root +=============================== +-----BEGIN CERTIFICATE----- +MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg +VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD +VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv +bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg +VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB +iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S +o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr +1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ +RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh +dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 +ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv +c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg +YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh +c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz +Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA +bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl +IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 +YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj +cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM +43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR +stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI +-----END CERTIFICATE----- + +NetLock Express (Class C) Root +============================== +-----BEGIN CERTIFICATE----- +MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ +BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j +ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z +W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 +euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw +DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN +RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn +YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB +IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i +aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 +ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs +ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo +dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y +emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k +IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ +UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg +YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 +xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW +gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Firmaprofesional Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT +GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp +Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA +ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL +MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT +OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 +ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V +j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH +lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf +3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 +NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww +KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG +AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD +ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq +u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf +wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm +7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG +VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= +-----END CERTIFICATE----- + +Wells Fargo Root CA +=================== +-----BEGIN CERTIFICATE----- +MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl +bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv +MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX +x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 +E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 +OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j +sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj +YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF +BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD +ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv +m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R +OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx +x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 +tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 1 +============================================== +-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP +MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 +acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx +MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg +U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB +TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC +aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX +yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i +Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ +8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 +W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 +sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE +q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy +B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY +nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2 +============================================== +-----BEGIN CERTIFICATE----- +MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN +MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr +dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe +LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI +x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g +QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr +5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB +AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt +Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 +Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ +hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P +9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 +UrbnBEI= +-----END CERTIFICATE----- + +SwissSign Platinum CA - G2 +========================== +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw +HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM +U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu +669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF +eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne +WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo +j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 +8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T +aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy +domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D ++m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV +CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv +zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 +Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 +NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 +U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 +KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl +9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B +aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs +OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY +Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci +IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +S-TRUST Authentication and Encryption Root CA 2005 PN +===================================================== +-----BEGIN CERTIFICATE----- +MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh +cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT +LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w +NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk +ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj +aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp +b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob +4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL +g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf +eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 +KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB +/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv +bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU +D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD +pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 +P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA +nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit +F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b +Hz2eBIPdltkdOpQ= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. +====================================== +-----BEGIN CERTIFICATE----- +MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT +AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg +LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w +HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ +U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh +IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN +yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU +2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 +4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP +2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm +8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf +HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa +Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK +5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b +czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g +ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF +BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug +cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf +AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX +EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v +/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 +MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 +3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk +eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f +/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h +RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU +Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 2 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw +MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw +IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 +xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ +Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u +SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G +dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ +KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj +TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP +JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk +vQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 3 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw +MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W +yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo +6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ +uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk +2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE +O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 +yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 +IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal +092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc +5A== +-----END CERTIFICATE----- + +TC TrustCenter Universal CA I +============================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN +MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg +VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw +JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC +qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv +xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw +ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O +gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j +BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG +1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy +vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 +ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a +7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +ComSign CA +========== +-----BEGIN CERTIFICATE----- +MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD +EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy +MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp +Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q +ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy +P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN +GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk +YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM +rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy +oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P +AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ +VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 +QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI +mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb +/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG +zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U +AGegcQCCSA== +-----END CERTIFICATE----- + +ComSign Secured CA +================== +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE +AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w +NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD +QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs +49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH +7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB +kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 +9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw +AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t +U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA +j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC +AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a +BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp +FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP +51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +Buypass Class 3 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 +MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx +ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 +n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia +AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c +1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 +pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA +EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 +htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj +el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg +QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe +Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt +IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by +X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b +gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr +eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ +TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy +Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn +uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI +qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm +ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 +Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW +Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t +FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm +zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k +XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT +bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU +RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK +1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt +2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ +Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 +AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ +VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 +yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa +XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n +0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ +RjXZ+Hxb +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky +CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX +bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ +D/xwzoiQ +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi +=================================================== +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz +ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 +MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 +cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u +aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY +8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y +jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI +JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk +9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG +SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d +F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq +D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 +Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq +fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +TC TrustCenter Universal CA III +=============================== +-----BEGIN CERTIFICATE----- +MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe +Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU +QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex +KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt +QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO +juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut +CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 +M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G +A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA +g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ +KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK +BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV +CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq +woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +A-Trust-nQual-03 +================ +-----BEGIN CERTIFICATE----- +MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE +Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy +a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R +dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw +RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 +ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 +c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA +zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n +yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE +SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 +iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V +cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV +eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 +ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr +sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd +JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS +mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 +ahq97BvIxYSazQ== +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı +====================================================== +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php new file mode 100755 index 00000000000..e32b9f83c24 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php @@ -0,0 +1,5 @@ + self::APP_ID, + 'secret' => self::SECRET, + )); + return $facebook->publicMakeSignedRequest( + array( + 'user_id' => $id, + 'oauth_token' => $oauth_token + ) + ); + } + + private static function kNonTosedSignedRequest() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + return $facebook->publicMakeSignedRequest(array()); + } + + private static function kSignedRequestWithEmptyValue() { + return ''; + } + + private static function kSignedRequestWithBogusSignature() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => 'bogus', + )); + return $facebook->publicMakeSignedRequest( + array( + 'algorithm' => 'HMAC-SHA256', + ) + ); + } + + private static function kSignedRequestWithWrongAlgo() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $data['algorithm'] = 'foo'; + $json = json_encode($data); + $b64 = $facebook->publicBase64UrlEncode($json); + $raw_sig = hash_hmac('sha256', $b64, self::SECRET, $raw = true); + $sig = $facebook->publicBase64UrlEncode($raw_sig); + return $sig.'.'.$b64; + } + + public function testConstructor() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals($facebook->getAppId(), self::APP_ID, + 'Expect the App ID to be set.'); + $this->assertEquals($facebook->getAppSecret(), self::SECRET, + 'Expect the API secret to be set.'); + } + + public function testConstructorWithFileUpload() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'fileUpload' => true, + )); + $this->assertEquals($facebook->getAppId(), self::APP_ID, + 'Expect the App ID to be set.'); + $this->assertEquals($facebook->getAppSecret(), self::SECRET, + 'Expect the API secret to be set.'); + $this->assertTrue($facebook->getFileUploadSupport(), + 'Expect file upload support to be on.'); + // alias (depricated) for getFileUploadSupport -- test until removed + $this->assertTrue($facebook->useFileUploadSupport(), + 'Expect file upload support to be on.'); + } + + public function testSetAppId() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setAppId('dummy'); + $this->assertEquals($facebook->getAppId(), 'dummy', + 'Expect the App ID to be dummy.'); + } + + public function testSetAPISecret() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setApiSecret('dummy'); + $this->assertEquals($facebook->getApiSecret(), 'dummy', + 'Expect the API secret to be dummy.'); + } + + public function testSetAPPSecret() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setAppSecret('dummy'); + $this->assertEquals($facebook->getAppSecret(), 'dummy', + 'Expect the API secret to be dummy.'); + } + + public function testSetAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('saltydog'); + $this->assertEquals($facebook->getAccessToken(), 'saltydog', + 'Expect installed access token to remain \'saltydog\''); + } + + public function testSetFileUploadSupport() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertFalse($facebook->getFileUploadSupport(), + 'Expect file upload support to be off.'); + // alias for getFileUploadSupport (depricated), testing until removed + $this->assertFalse($facebook->useFileUploadSupport(), + 'Expect file upload support to be off.'); + $facebook->setFileUploadSupport(true); + $this->assertTrue($facebook->getFileUploadSupport(), + 'Expect file upload support to be on.'); + // alias for getFileUploadSupport (depricated), testing until removed + $this->assertTrue($facebook->useFileUploadSupport(), + 'Expect file upload support to be on.'); + } + + public function testGetCurrentURL() { + $facebook = new FBGetCurrentURLFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=one&two=two&three=three'; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one=one&two=two&three=three', + $current_url, + 'getCurrentUrl function is changing the current URL'); + + // ensure structure of valueless GET params is retained (sometimes + // an = sign was present, and sometimes it was not) + // first test when equal signs are present + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=&two=&three='; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one=&two=&three=', + $current_url, + 'getCurrentUrl function is changing the current URL'); + + // now confirm that + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one&two&three'; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one&two&three', + $current_url, + 'getCurrentUrl function is changing the current URL'); + } + + public function testGetLoginURL() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $login_url = parse_url($facebook->getLoginUrl()); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + $expected_login_params = + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'); + + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetLoginURLWithExtraParams() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $extra_params = array('scope' => 'email, sms', + 'nonsense' => 'nonsense'); + $login_url = parse_url($facebook->getLoginUrl($extra_params)); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + $expected_login_params = + array_merge( + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'), + $extra_params); + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetLoginURLWithScopeParamsAsArray() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $scope_params_as_array = array('email','sms','read_stream'); + $extra_params = array('scope' => $scope_params_as_array, + 'nonsense' => 'nonsense'); + $login_url = parse_url($facebook->getLoginUrl($extra_params)); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + // expect api to flatten array params to comma separated list + // should do the same here before asserting to make sure API is behaving + // correctly; + $extra_params['scope'] = implode(',', $scope_params_as_array); + $expected_login_params = + array_merge( + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'), + $extra_params); + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetCodeWithValidCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setCSRFStateToken(); + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + $_REQUEST['state'] = $facebook->getCSRFStateToken(); + $this->assertEquals($code, + $facebook->publicGetCode(), + 'Expect code to be pulled from $_REQUEST[\'code\']'); + } + + public function testGetCodeWithInvalidCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setCSRFStateToken(); + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + $_REQUEST['state'] = $facebook->getCSRFStateToken().'forgery!!!'; + $this->assertFalse($facebook->publicGetCode(), + 'Expect getCode to fail, CSRF state should not match.'); + } + + public function testGetCodeWithMissingCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + // intentionally don't set CSRF token at all + $this->assertFalse($facebook->publicGetCode(), + 'Expect getCode to fail, CSRF state not sent back.'); + } + + public function testPersistentCSRFState() + { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setCSRFStateToken(); + $code = $facebook->getCSRFStateToken(); + + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $this->assertEquals($code, $facebook->publicGetState(), + 'Persisted CSRF state token not loaded correctly'); + } + + public function testPersistentCSRFStateWithSharedSession() + { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $facebook->setCSRFStateToken(); + $code = $facebook->getCSRFStateToken(); + + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + + $this->assertEquals($code, $facebook->publicGetState(), + 'Persisted CSRF state token not loaded correctly with shared session'); + } + + public function testGetUserFromSignedRequest() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + } + + public function testDisallowSignedRequest() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'allowSignedRequest' => false + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals(0, $facebook->getUser(), + 'Should not have received valid user from signed_request.'); + } + + + public function testSignedRequestRewrite(){ + $facebook = new FBRewrite(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER, 'Hello sweetie'); + + $this->assertEquals(self::TEST_USER, $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + + $this->assertEquals('Hello sweetie', $facebook->getAccessToken(), + 'Failed to get access token from signed request'); + + $facebook->uncache(); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER_2, 'spoilers'); + + $this->assertEquals(self::TEST_USER_2, $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + + $_REQUEST['signed_request'] = null; + $facebook ->uncacheSignedRequest(); + + $this->assertNotEquals('Hello sweetie', $facebook->getAccessToken(), + 'Failed to clear access token'); + } + + public function testGetSignedRequestFromCookie() { + $facebook = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = + self::kValidSignedRequest(); + $this->assertNotNull($facebook->publicGetSignedRequest()); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + } + + public function testGetSignedRequestWithIncorrectSignature() { + $facebook = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = + self::kSignedRequestWithBogusSignature(); + $this->assertNull($facebook->publicGetSignedRequest()); + } + + public function testNonUserAccessToken() { + $facebook = new FBAccessToken(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // no cookies, and no request params, so no user or code, + // so no user access token (even with cookie support) + $this->assertEquals($facebook->publicGetApplicationAccessToken(), + $facebook->getAccessToken(), + 'Access token should be that for logged out users.'); + } + + public function testMissingMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEmpty($fb->publicGetMetadataCookie()); + } + + public function testEmptyMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $_COOKIE[$fb->publicGetMetadataCookieName()] = ''; + $this->assertEmpty($fb->publicGetMetadataCookie()); + } + + public function testMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'foo'; + $val = '42'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = "$key=$val"; + $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); + } + + public function testQuotedMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'foo'; + $val = '42'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = "\"$key=$val\""; + $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); + } + + public function testAPIForLoggedOutUsers() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $response = $facebook->api(array( + 'method' => 'fql.query', + 'query' => 'SELECT name FROM user WHERE uid=4', + )); + $this->assertEquals(count($response), 1, + 'Expect one row back.'); + $this->assertEquals($response[0]['name'], 'Mark Zuckerberg', + 'Expect the name back.'); + } + + public function testAPIWithBogusAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('this-is-not-really-an-access-token'); + // if we don't set an access token and there's no way to + // get one, then the FQL query below works beautifully, handing + // over Zuck's public data. But if you specify a bogus access + // token as I have right here, then the FQL query should fail. + // We could return just Zuck's public data, but that wouldn't + // advertise the issue that the access token is at worst broken + // and at best expired. + try { + $response = $facebook->api(array( + 'method' => 'fql.query', + 'query' => 'SELECT name FROM profile WHERE id=4', + )); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + $result = $e->getResult(); + $this->assertTrue(is_array($result), 'expect a result object'); + $this->assertEquals('190', $result['error_code'], 'expect code'); + } + } + + public function testAPIGraphPublicData() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $response = $facebook->api('/jerry'); + $this->assertEquals( + $response['id'], '214707', 'should get expected id.'); + } + + public function testGraphAPIWithBogusAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('this-is-not-really-an-access-token'); + try { + $response = $facebook->api('/me'); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token and didn't like it + $msg = 'OAuthException: Invalid OAuth access token.'; + $this->assertEquals($msg, (string) $e, + 'Expect the invalid OAuth token message.'); + } + } + + public function testGraphAPIWithExpiredAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken(self::$kExpiredAccessToken); + try { + $response = $facebook->api('/me'); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token and didn't like it + $error_msg_start = 'OAuthException: Error validating access token:'; + $this->assertTrue(strpos((string) $e, $error_msg_start) === 0, + 'Expect the token validation error message.'); + } + } + + public function testGraphAPIOAuthSpecError() { + $facebook = new TransientFacebook(array( + 'appId' => self::MIGRATED_APP_ID, + 'secret' => self::MIGRATED_SECRET, + )); + + try { + $response = $facebook->api('/me', array( + 'client_id' => self::MIGRATED_APP_ID)); + + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token + $msg = 'invalid_request: An active access token must be used '. + 'to query information about the current user.'; + $this->assertEquals($msg, (string) $e, + 'Expect the invalid session message.'); + } + } + + public function testGraphAPIMethodOAuthSpecError() { + $facebook = new TransientFacebook(array( + 'appId' => self::MIGRATED_APP_ID, + 'secret' => self::MIGRATED_SECRET, + )); + + try { + $response = $facebook->api('/daaku.shah', 'DELETE', array( + 'client_id' => self::MIGRATED_APP_ID)); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + $this->assertEquals(strpos($e, 'invalid_request'), 0); + } + } + + public function testCurlFailure() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + if (!defined('CURLOPT_TIMEOUT_MS')) { + // can't test it if we don't have millisecond timeouts + return; + } + + $exception = null; + try { + // we dont expect facebook will ever return in 1ms + Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS] = 50; + $facebook->api('/naitik'); + } catch(FacebookApiException $e) { + $exception = $e; + } + unset(Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS]); + if (!$exception) { + $this->fail('no exception was thrown on timeout.'); + } + + $code = $exception->getCode(); + if ($code != CURLE_OPERATION_TIMEOUTED && $code != CURLE_COULDNT_CONNECT) { + $this->fail("Expected curl error code 7 or 28 but got: $code"); + } + $this->assertEquals('CurlException', $exception->getType(), 'expect type'); + } + + public function testGraphAPIWithOnlyParams() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $response = $facebook->api('/jerry'); + $this->assertTrue(isset($response['id']), + 'User ID should be public.'); + $this->assertTrue(isset($response['name']), + 'User\'s name should be public.'); + $this->assertTrue(isset($response['first_name']), + 'User\'s first name should be public.'); + $this->assertTrue(isset($response['last_name']), + 'User\'s last name should be public.'); + $this->assertFalse(isset($response['work']), + 'User\'s work history should only be available with '. + 'a valid access token.'); + $this->assertFalse(isset($response['education']), + 'User\'s education history should only be '. + 'available with a valid access token.'); + $this->assertFalse(isset($response['verified']), + 'User\'s verification status should only be '. + 'available with a valid access token.'); + } + + public function testLoginURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testLoginURLDefaultsDropStateQueryParam() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples?state=xx42xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + } + + public function testLoginURLDefaultsDropCodeQueryParam() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples?code=xx42xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + } + + public function testLoginURLDefaultsDropSignedRequestParamButNotOthers() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = + '/examples?signed_request=xx42xx&do_not_drop=xx43xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + $this->assertTrue(strpos($facebook->getLoginUrl(), 'xx43xx') > -1, + 'Expect the do_not_drop param to exist.'); + } + + public function testLoginURLCustomNext() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $next = 'http://fbrell.com/custom'; + $loginUrl = $facebook->getLoginUrl(array( + 'redirect_uri' => $next, + 'cancel_url' => $next + )); + $currentEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $expectedEncodedUrl = rawurlencode($next); + $this->assertNotNull(strpos($loginUrl, $expectedEncodedUrl), + 'Expect the custom url to exist.'); + $this->assertFalse(strpos($loginUrl, $currentEncodedUrl), + 'Expect the current url to not exist.'); + } + + public function testLogoutURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLogoutUrl(), $encodedUrl), + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLogoutUrl(), self::SECRET)); + } + + public function testLoginStatusURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginStatusUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testLoginStatusURLCustom() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl1 = rawurlencode('http://fbrell.com/examples'); + $okUrl = 'http://fbrell.com/here1'; + $encodedUrl2 = rawurlencode($okUrl); + $loginStatusUrl = $facebook->getLoginStatusUrl(array( + 'ok_session' => $okUrl, + )); + $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl1), + 'Expect the current url to exist.'); + $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl2), + 'Expect the custom url to exist.'); + } + + public function testNonDefaultPort() { + $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com:8080/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testSecureCurrentUrl() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $_SERVER['HTTPS'] = 'on'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('https://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testSecureCurrentUrlWithNonDefaultPort() { + $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; + $_SERVER['REQUEST_URI'] = '/examples'; + $_SERVER['HTTPS'] = 'on'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('https://fbrell.com:8080/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testBase64UrlEncode() { + $input = 'Facebook rocks'; + $output = 'RmFjZWJvb2sgcm9ja3M'; + + $this->assertEquals(FBPublic::publicBase64UrlDecode($output), $input); + } + + public function testSignedToken() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $sr = self::kValidSignedRequest(); + $payload = $facebook->publicParseSignedRequest($sr); + $this->assertNotNull($payload, 'Expected token to parse'); + $this->assertEquals($facebook->getSignedRequest(), null); + $_REQUEST['signed_request'] = $sr; + $this->assertEquals($facebook->getSignedRequest(), $payload); + } + + public function testNonTossedSignedtoken() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $facebook->publicParseSignedRequest( + self::kNonTosedSignedRequest()); + $this->assertNotNull($payload, 'Expected token to parse'); + $this->assertNull($facebook->getSignedRequest()); + $_REQUEST['signed_request'] = self::kNonTosedSignedRequest(); + $sr = $facebook->getSignedRequest(); + $this->assertTrue(isset($sr['algorithm'])); + } + + public function testSignedRequestWithEmptyValue() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $_REQUEST['signed_request'] = self::kSignedRequestWithEmptyValue(); + $this->assertNull($fb->getSignedRequest()); + $_COOKIE[$fb->publicGetSignedRequestCookieName()] = + self::kSignedRequestWithEmptyValue(); + $this->assertNull($fb->getSignedRequest()); + } + + public function testSignedRequestWithWrongAlgo() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $fb->publicParseSignedRequest( + self::kSignedRequestWithWrongAlgo()); + $this->assertNull($payload, 'Expected nothing back.'); + } + + public function testMakeAndParse() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $data = array('foo' => 42); + $sr = $fb->publicMakeSignedRequest($data); + $decoded = $fb->publicParseSignedRequest($sr); + $this->assertEquals($data['foo'], $decoded['foo']); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testMakeSignedRequestExpectsArray() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $sr = $fb->publicMakeSignedRequest(''); + } + + public function testBundledCACert() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + // use the bundled cert from the start + Facebook::$CURL_OPTS[CURLOPT_CAINFO] = + dirname(__FILE__) . '/../src/fb_ca_chain_bundle.crt'; + $response = $facebook->api('/naitik'); + + unset(Facebook::$CURL_OPTS[CURLOPT_CAINFO]); + $this->assertEquals( + $response['id'], '5526183', 'should get expected id.'); + } + + public function testVideoUpload() { + $facebook = new FBRecordURL(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->api(array('method' => 'video.upload')); + $this->assertContains('//api-video.', $facebook->getRequestedURL(), + 'video.upload should go against api-video'); + } + + public function testVideoUploadGraph() { + $facebook = new FBRecordURL(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->api('/me/videos', 'POST'); + $this->assertContains('//graph-video.', $facebook->getRequestedURL(), + '/me/videos should go against graph-video'); + } + + public function testGetUserAndAccessTokenFromSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->publicSetPersistentData('access_token', + self::$kExpiredAccessToken); + $facebook->publicSetPersistentData('user_id', 12345); + $this->assertEquals(self::$kExpiredAccessToken, + $facebook->getAccessToken(), + 'Get access token from persistent store.'); + $this->assertEquals('12345', + $facebook->getUser(), + 'Get user id from persistent store.'); + } + + public function testGetUserAndAccessTokenFromSignedRequestNotSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $facebook->publicSetPersistentData('user_id', 41572); + $facebook->publicSetPersistentData('access_token', + self::$kExpiredAccessToken); + $this->assertNotEquals('41572', $facebook->getUser(), + 'Got user from session instead of signed request.'); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get correct user ID from signed request.'); + $this->assertNotEquals( + self::$kExpiredAccessToken, + $facebook->getAccessToken(), + 'Got access token from session instead of signed request.'); + $this->assertNotEmpty( + $facebook->getAccessToken(), + 'Failed to extract an access token from the signed request.'); + } + + public function testGetUserWithoutCodeOrSignedRequestOrSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + // deliberately leave $_REQUEST and _$SESSION empty + $this->assertEmpty($_REQUEST, + 'GET, POST, and COOKIE params exist even though '. + 'they should. Test cannot succeed unless all of '. + '$_REQUEST is empty.'); + $this->assertEmpty($_SESSION, + 'Session is carrying state and should not be.'); + $this->assertEmpty($facebook->getUser(), + 'Got a user id, even without a signed request, '. + 'access token, or session variable.'); + $this->assertEmpty($_SESSION, + 'Session superglobal incorrectly populated by getUser.'); + } + + public function testGetAccessTokenUsingCodeInJsSdkCookie() { + $code = 'code1'; + $access_token = 'at1'; + $methods_to_stub = array('getSignedRequest', 'getAccessTokenFromCode'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('code' => $code))); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValueMap(array(array($code, '', $access_token)))); + $this->assertEquals($stub->getAccessToken(), $access_token); + } + + public function testSignedRequestWithoutAuthClearsData() { + $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('foo' => 1))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testInvalidCodeInSignedRequestWillClearData() { + $code = 'code1'; + $methods_to_stub = array( + 'getSignedRequest', + 'getAccessTokenFromCode', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('code' => $code))); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValue(null)); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testInvalidCodeWillClearData() { + $code = 'code1'; + $methods_to_stub = array( + 'getCode', + 'getAccessTokenFromCode', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getCode') + ->will($this->returnValue($code)); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValue(null)); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testValidCodeToToken() { + $code = 'code1'; + $access_token = 'at1'; + $methods_to_stub = array( + 'getSignedRequest', + 'getCode', + 'getAccessTokenFromCode', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getCode') + ->will($this->returnValue($code)); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValueMap(array(array($code, null, $access_token)))); + $this->assertEquals($stub->getAccessToken(), $access_token); + } + + public function testSignedRequestWithoutAuthClearsDataInAvailData() { + $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('foo' => 1))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testFailedToGetUserFromAccessTokenClearsData() { + $methods_to_stub = array( + 'getAccessToken', + 'getUserFromAccessToken', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('getUserFromAccessToken'); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testUserFromAccessTokenIsStored() { + $methods_to_stub = array( + 'getAccessToken', + 'getUserFromAccessToken', + 'setPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $user = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('getUserFromAccessToken') + ->will($this->returnValue($user)); + $stub + ->expects($this->once()) + ->method('setPersistentData'); + $this->assertEquals($user, $stub->getUser()); + } + + public function testUserFromAccessTokenPullsID() { + $methods_to_stub = array( + 'getAccessToken', + 'api', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $user = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('api') + ->will($this->returnValue(array('id' => $user))); + $this->assertEquals($user, $stub->getUser()); + } + + public function testUserFromAccessTokenResetsOnApiException() { + $methods_to_stub = array( + 'getAccessToken', + 'clearAllPersistentData', + 'api', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('api') + ->will($this->throwException(new FacebookApiException(false))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testEmptyCodeReturnsFalse() { + $fb = new FBPublicGetAccessTokenFromCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $this->assertFalse($fb->publicGetAccessTokenFromCode('')); + $this->assertFalse($fb->publicGetAccessTokenFromCode(null)); + $this->assertFalse($fb->publicGetAccessTokenFromCode(false)); + } + + public function testNullRedirectURIUsesCurrentURL() { + $methods_to_stub = array( + '_oauthRequest', + 'getCurrentUrl', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $access_token = 'at1'; + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("access_token=$access_token")); + $stub + ->expects($this->once()) + ->method('getCurrentUrl'); + $this->assertEquals( + $access_token, $stub->publicGetAccessTokenFromCode('c')); + } + + public function testNullRedirectURIAllowsEmptyStringForCookie() { + $methods_to_stub = array( + '_oauthRequest', + 'getCurrentUrl', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $access_token = 'at1'; + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("access_token=$access_token")); + $stub + ->expects($this->never()) + ->method('getCurrentUrl'); + $this->assertEquals( + $access_token, $stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testAPIExceptionDuringCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->throwException(new FacebookApiException(false))); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testEmptyResponseInCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('')); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testExistingStateRestoredInConstructor() { + $fb = new FBPublicState(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $this->assertEquals(FBPublicState::STATE, $fb->publicGetState()); + } + + public function testMissingAccessTokenInCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('foo=1')); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testAppsecretProofNoParams() { + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $token = $fb->getAccessToken(); + $proof = $fb->publicGetAppSecretProof($token); + $params = array(); + $fb->api('/mattynoce', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals($proof, $requests[0]['params']['appsecret_proof']); + } + + public function testAppsecretProofWithParams() { + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $proof = 'foo'; + $params = array('appsecret_proof' => $proof); + $fb->api('/mattynoce', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals($proof, $requests[0]['params']['appsecret_proof']); + } + + public function testExceptionConstructorWithErrorCode() { + $code = 404; + $e = new FacebookApiException(array('error_code' => $code)); + $this->assertEquals($code, $e->getCode()); + } + + public function testExceptionConstructorWithInvalidErrorCode() { + $e = new FacebookApiException(array('error_code' => 'not an int')); + $this->assertEquals(0, $e->getCode()); + } + + // this happens often despite the fact that it is useless + public function testExceptionTypeFalse() { + $e = new FacebookApiException(false); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionTypeMixedDraft00() { + $e = new FacebookApiException(array('error' => array('message' => 'foo'))); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionTypeDraft00() { + $error = 'foo'; + $e = new FacebookApiException( + array('error' => array('type' => $error, 'message' => 'hello world'))); + $this->assertEquals($error, $e->getType()); + } + + public function testExceptionTypeDraft10() { + $error = 'foo'; + $e = new FacebookApiException(array('error' => $error)); + $this->assertEquals($error, $e->getType()); + } + + public function testExceptionTypeDefault() { + $e = new FacebookApiException(array('error' => false)); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionToString() { + $e = new FacebookApiException(array( + 'error_code' => 1, + 'error_description' => 'foo', + )); + $this->assertEquals('Exception: 1: foo', (string) $e); + } + + public function testDestroyClearsCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $_COOKIE[$fb->publicGetSignedRequestCookieName()] = 'foo'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = 'base_domain=fbrell.com'; + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb->destroySession(); + $this->assertFalse( + array_key_exists($fb->publicGetSignedRequestCookieName(), $_COOKIE)); + } + + public function testAuthExpireSessionDestroysSession() { + $methods_to_stub = array( + '_oauthRequest', + 'destroySession', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $key = 'foo'; + $val = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("{\"$key\":$val}")); + $stub + ->expects($this->once()) + ->method('destroySession'); + $this->assertEquals( + array($key => $val), + $stub->api(array('method' => 'auth.expireSession')) + ); + } + + public function testLowercaseAuthRevokeAuthDestroysSession() { + $methods_to_stub = array( + '_oauthRequest', + 'destroySession', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $key = 'foo'; + $val = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("{\"$key\":$val}")); + $stub + ->expects($this->once()) + ->method('destroySession'); + $this->assertEquals( + array($key => $val), + $stub->api(array('method' => 'auth.revokeauthorization')) + ); + } + + /** + * @expectedException FacebookAPIException + */ + public function testErrorCodeFromRestAPIThrowsException() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('{"error_code": 500}')); + $stub->api(array('method' => 'foo')); + } + + public function testJsonEncodeOfNonStringParams() { + $foo = array(1, 2); + $params = array( + 'method' => 'get', + 'foo' => $foo, + ); + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $fb->api('/naitik', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals(json_encode($foo), $requests[0]['params']['foo']); + } + + public function testSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertEquals( + $val, + $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] + ); + $this->assertEquals( + $val, + $fb->publicGetPersistentData($key) + ); + } + + public function testSessionBackedFacebookIgnoresUnsupportedKey() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = '--invalid--'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertFalse( + array_key_exists( + sprintf('fb_%s_%s', self::APP_ID, $key), + $_SESSION + ) + ); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testClearSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertEquals( + $val, + $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] + ); + $this->assertEquals( + $val, + $fb->publicGetPersistentData($key) + ); + $fb->publicClearPersistentData($key); + $this->assertFalse( + array_key_exists( + sprintf('fb_%s_%s', self::APP_ID, $key), + $_SESSION + ) + ); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSessionBackedFacebookIgnoresUnsupportedKeyInClear() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); + $_SESSION[$session_var_name] = $val; + $fb->publicClearPersistentData($key); + $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testClearAllSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearAllPersistentData(); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIgnoresUnsupportedKey() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedClearSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearPersistentData($key); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIgnoresUnsupportedKeyInClear() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $_SESSION[$session_var_name] = $val; + $fb->publicClearPersistentData($key); + $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedClearAllSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearAllPersistentData(); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIsRestored() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $shared_session_id = $fb->publicGetSharedSessionID(); + $session_var_name = sprintf( + '%s_fb_%s_%s', + $shared_session_id, + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + + // check the new instance has the same data + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $this->assertEquals( + $shared_session_id, + $fb->publicGetSharedSessionID() + ); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIsNotRestoredWhenCorrupt() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $shared_session_id = $fb->publicGetSharedSessionID(); + $session_var_name = sprintf( + '%s_fb_%s_%s', + $shared_session_id, + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + + // break the cookie + $cookie_name = $fb->publicGetSharedSessionCookieName(); + $_COOKIE[$cookie_name] = substr($_COOKIE[$cookie_name], 1); + + // check the new instance does not have the data + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $this->assertFalse($fb->publicGetPersistentData($key)); + $this->assertNotEquals( + $shared_session_id, + $fb->publicGetSharedSessionID() + ); + } + + public function testHttpHost() { + $real = 'foo.com'; + $_SERVER['HTTP_HOST'] = $real; + $_SERVER['HTTP_X_FORWARDED_HOST'] = 'evil.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals($real, $fb->publicGetHttpHost()); + } + + public function testHttpProtocol() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals('https', $fb->publicGetHttpProtocol()); + } + + public function testHttpHostForwarded() { + $real = 'foo.com'; + $_SERVER['HTTP_HOST'] = 'localhost'; + $_SERVER['HTTP_X_FORWARDED_HOST'] = $real; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals($real, $fb->publicGetHttpHost()); + } + + public function testHttpProtocolForwarded() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals('http', $fb->publicGetHttpProtocol()); + } + + public function testHttpProtocolForwardedSecure() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals('https', $fb->publicGetHttpProtocol()); + } + + /** + * @dataProvider provideEndsWith + */ + public function testEndsWith($big, $small, $result) { + $this->assertEquals( + $result, + PersistentFBPublic::publicEndsWith($big, $small) + ); + } + + public function provideEndsWith() { + return array( + array('', '', true), + array('', 'a', false), + array('a', '', true), + array('a', 'b', false), + array('a', 'a', true), + array('aa', 'a', true), + array('ab', 'a', false), + array('ba', 'a', true), + ); + } + + /** + * @dataProvider provideIsAllowedDomain + */ + public function testIsAllowedDomain($big, $small, $result) { + $this->assertEquals( + $result, + PersistentFBPublic::publicIsAllowedDomain($big, $small) + ); + } + + public function provideIsAllowedDomain() { + return array( + array('fbrell.com', 'fbrell.com', true), + array('foo.fbrell.com', 'fbrell.com', true), + array('foofbrell.com', 'fbrell.com', false), + array('evil.com', 'fbrell.com', false), + array('foo.fbrell.com', 'bar.fbrell.com', false), + ); + } + + protected function generateMD5HashOfRandomValue() { + return md5(uniqid(mt_rand(), true)); + } + + protected function setUp() { + parent::setUp(); + } + + protected function tearDown() { + $this->clearSuperGlobals(); + parent::tearDown(); + } + + protected function clearSuperGlobals() { + unset($_SERVER['HTTPS']); + unset($_SERVER['HTTP_HOST']); + unset($_SERVER['REQUEST_URI']); + $_SESSION = array(); + $_COOKIE = array(); + $_REQUEST = array(); + $_POST = array(); + $_GET = array(); + if (session_id()) { + session_destroy(); + } + } + + /** + * Checks that the correct args are a subset of the returned obj + * @param array $correct The correct array values + * @param array $actual The values in practice + * @param string $message to be shown on failure + */ + protected function assertIsSubset($correct, $actual, $msg='') { + foreach ($correct as $key => $value) { + $actual_value = $actual[$key]; + $newMsg = (strlen($msg) ? ($msg.' ') : '').'Key: '.$key; + $this->assertEquals($value, $actual_value, $newMsg); + } + } +} + +class TransientFacebook extends BaseFacebook { + protected function setPersistentData($key, $value) {} + protected function getPersistentData($key, $default = false) { + return $default; + } + protected function clearPersistentData($key) {} + protected function clearAllPersistentData() {} +} + +class FBRecordURL extends TransientFacebook { + private $url; + + protected function _oauthRequest($url, $params) { + $this->url = $url; + } + + public function getRequestedURL() { + return $this->url; + } +} + +class FBRecordMakeRequest extends TransientFacebook { + private $requests = array(); + + protected function makeRequest($url, $params, $ch=null) { + $this->requests[] = array( + 'url' => $url, + 'params' => $params, + ); + return parent::makeRequest($url, $params, $ch); + } + + public function publicGetRequests() { + return $this->requests; + } + + public function publicGetAppSecretProof($access_token) { + return $this->getAppSecretProof($access_token); + } +} + +class FBPublic extends TransientFacebook { + public static function publicBase64UrlDecode($input) { + return self::base64UrlDecode($input); + } + public static function publicBase64UrlEncode($input) { + return self::base64UrlEncode($input); + } + public function publicParseSignedRequest($input) { + return $this->parseSignedRequest($input); + } + public function publicMakeSignedRequest($data) { + return $this->makeSignedRequest($data); + } +} + +class PersistentFBPublic extends Facebook { + public function publicParseSignedRequest($input) { + return $this->parseSignedRequest($input); + } + + public function publicSetPersistentData($key, $value) { + $this->setPersistentData($key, $value); + } + + public function publicGetPersistentData($key, $default = false) { + return $this->getPersistentData($key, $default); + } + + public function publicClearPersistentData($key) { + return $this->clearPersistentData($key); + } + + public function publicClearAllPersistentData() { + return $this->clearAllPersistentData(); + } + + public function publicGetSharedSessionID() { + return $this->sharedSessionID; + } + + public static function publicIsAllowedDomain($big, $small) { + return self::isAllowedDomain($big, $small); + } + + public static function publicEndsWith($big, $small) { + return self::endsWith($big, $small); + } + + public function publicGetSharedSessionCookieName() { + return $this->getSharedSessionCookieName(); + } + + public function publicGetHttpHost() { + return $this->getHttpHost(); + } + + public function publicGetHttpProtocol() { + return $this->getHttpProtocol(); + } +} + +class FBCode extends Facebook { + public function publicGetCode() { + return $this->getCode(); + } + + public function publicGetState() { + return $this->state; + } + + public function setCSRFStateToken() { + $this->establishCSRFTokenState(); + } + + public function getCSRFStateToken() { + return $this->getPersistentData('state'); + } +} + +class FBAccessToken extends TransientFacebook { + public function publicGetApplicationAccessToken() { + return $this->getApplicationAccessToken(); + } +} + +class FBGetCurrentURLFacebook extends TransientFacebook { + public function publicGetCurrentUrl() { + return $this->getCurrentUrl(); + } +} + +class FBPublicCookie extends TransientFacebook { + public function publicGetSignedRequest() { + return $this->getSignedRequest(); + } + + public function publicGetSignedRequestCookieName() { + return $this->getSignedRequestCookieName(); + } + + public function publicGetMetadataCookie() { + return $this->getMetadataCookie(); + } + + public function publicGetMetadataCookieName() { + return $this->getMetadataCookieName(); + } +} + +class FBRewrite extends Facebook{ + + public function uncacheSignedRequest(){ + $this->signedRequest = null; + } + + public function uncache() + { + $this->user = null; + $this->signedRequest = null; + $this->accessToken = null; + } +} + + +class FBPublicGetAccessTokenFromCode extends TransientFacebook { + public function publicGetAccessTokenFromCode($code, $redirect_uri = null) { + return $this->getAccessTokenFromCode($code, $redirect_uri); + } +} + +class FBPublicState extends TransientFacebook { + const STATE = 'foo'; + protected function getPersistentData($key, $default = false) { + if ($key === 'state') { + return self::STATE; + } + return parent::getPersistentData($key, $default); + } + + public function publicGetState() { + return $this->state; + } +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php new file mode 100755 index 00000000000..4cd07f16d38 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php @@ -0,0 +1,63 @@ +facebook->getUser(); + +$different_user = $facebook_helper->get_facebook_user($_REQUEST['username']); + +$content = ($facebook_helper->get_other_newsfeed($_REQUEST['username'], "50")); + +if ($user) { + //redirect to url. + //header('Location: http://localhost/suitecrm'); + $logoutUrl = $facebook_helper->get_logout_url(); +} else { + $loginUrl = $facebook_helper->get_login_url($_REQUEST['url']); +} + +?> + + Logout'; ?> + + Login with Facebook'; ?> + +'; +echo ''; +echo ''; +echo ''; +echo ''; +echo ''; + +foreach($content['data'] as $story){ + echo $facebook_helper->process_feed($story); + } +?> + + +
      Facebook Activity' . $log . '
      ' . $different_user['first_name'] . ' ' . $different_user['last_name'] . ' (' . $different_user['username'] .')
      + ' . $different_user['gender']. '
      + ' . $different_user['location']['name'] . '
      + + + \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/config.php b/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/config.php new file mode 100755 index 00000000000..c791480f231 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/config.php @@ -0,0 +1,6 @@ + 'usernameToBlock')`) + +You really can't get much simpler than that. Here is an example of how to use the class for a POST request to block a user, and at the bottom is an example of a GET request. + +Installation +------------ + +**Normally:** If you *don't* use composer, don't worry - just include TwitterAPIExchange.php in your application. + +**Via Composer:** If you *do* use composer, here's what you add to your composer.json file to have TwitterAPIExchange.php automatically imported into your vendor's folder: + + { + "require": { + "j7mbo/twitter-api-php": "dev-master" + } + } + +Of course, you'll then need to run `php composer.phar update`. + +How To Use +------ +#### Include the class file #### + + require_once('TwitterAPIExchange.php'); + +#### Set access tokens #### + + $settings = array( + 'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN", + 'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET", + 'consumer_key' => "YOUR_CONSUMER_KEY", + 'consumer_secret' => "YOUR_CONSUMER_SECRET" + ); + +#### Choose URL and Request Method #### + + $url = 'https://api.twitter.com/1.1/blocks/create.json'; + $requestMethod = 'POST'; + +#### Choose POST fields #### + + $postfields = array( + 'screen_name' => 'usernameToBlock', + 'skip_status' => '1' + ); + +#### Perform the request! #### + + $twitter = new TwitterAPIExchange($settings); + echo $twitter->buildOauth($url, $requestMethod) + ->setPostfields($postfields) + ->performRequest(); + +GET Request Example +---------------- + +Set the GET field BEFORE calling buildOauth(); and everything else is the same: + + $url = 'https://api.twitter.com/1.1/followers/ids.json'; + $getfield = '?screen_name=J7mbo'; + $requestMethod = 'GET'; + + $twitter = new TwitterAPIExchange($settings); + echo $twitter->setGetfield($getfield) + ->buildOauth($url, $requestMethod) + ->performRequest(); + +That is it! Really simple, works great with the 1.1 API. Thanks to @lackovic10 and @rivers on SO! diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php new file mode 100755 index 00000000000..7832725915d --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php @@ -0,0 +1,263 @@ + + * @license MIT License + * @link http://github.com/j7mbo/twitter-api-php + */ +class TwitterAPIExchange +{ + private $oauth_access_token; + private $oauth_access_token_secret; + private $consumer_key; + private $consumer_secret; + private $postfields; + private $getfield; + protected $oauth; + public $url; + + /** + * Create the API access object. Requires an array of settings:: + * oauth access token, oauth access token secret, consumer key, consumer secret + * These are all available by creating your own application on dev.twitter.com + * Requires the cURL library + * + * @param array $settings + */ + public function __construct(array $settings) + { + if (!in_array('curl', get_loaded_extensions())) + { + throw new Exception('You need to install cURL, see: http://curl.haxx.se/docs/install.html'); + } + + if (!isset($settings['oauth_access_token']) + || !isset($settings['oauth_access_token_secret']) + || !isset($settings['consumer_key']) + || !isset($settings['consumer_secret'])) + { + throw new Exception('Make sure you are passing in the correct parameters'); + } + + $this->oauth_access_token = $settings['oauth_access_token']; + $this->oauth_access_token_secret = $settings['oauth_access_token_secret']; + $this->consumer_key = $settings['consumer_key']; + $this->consumer_secret = $settings['consumer_secret']; + } + + /** + * Set postfields array, example: array('screen_name' => 'J7mbo') + * + * @param array $array Array of parameters to send to API + * + * @return TwitterAPIExchange Instance of self for method chaining + */ + public function setPostfields(array $array) + { + if (!is_null($this->getGetfield())) + { + throw new Exception('You can only choose get OR post fields.'); + } + + if (isset($array['status']) && substr($array['status'], 0, 1) === '@') + { + $array['status'] = sprintf("\0%s", $array['status']); + } + + $this->postfields = $array; + + return $this; + } + + /** + * Set getfield string, example: '?screen_name=J7mbo' + * + * @param string $string Get key and value pairs as string + * + * @return \TwitterAPIExchange Instance of self for method chaining + */ + public function setGetfield($string) + { + if (!is_null($this->getPostfields())) + { + throw new Exception('You can only choose get OR post fields.'); + } + + $search = array('#', ',', '+', ':'); + $replace = array('%23', '%2C', '%2B', '%3A'); + $string = str_replace($search, $replace, $string); + + $this->getfield = $string; + + return $this; + } + + /** + * Get getfield string (simple getter) + * + * @return string $this->getfields + */ + public function getGetfield() + { + return $this->getfield; + } + + /** + * Get postfields array (simple getter) + * + * @return array $this->postfields + */ + public function getPostfields() + { + return $this->postfields; + } + + /** + * Build the Oauth object using params set in construct and additionals + * passed to this method. For v1.1, see: https://dev.twitter.com/docs/api/1.1 + * + * @param string $url The API url to use. Example: https://api.twitter.com/1.1/search/tweets.json + * @param string $requestMethod Either POST or GET + * @return \TwitterAPIExchange Instance of self for method chaining + */ + public function buildOauth($url, $requestMethod) + { + if (!in_array(strtolower($requestMethod), array('post', 'get'))) + { + throw new Exception('Request method must be either POST or GET'); + } + + $consumer_key = $this->consumer_key; + $consumer_secret = $this->consumer_secret; + $oauth_access_token = $this->oauth_access_token; + $oauth_access_token_secret = $this->oauth_access_token_secret; + + $oauth = array( + 'oauth_consumer_key' => $consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_token' => $oauth_access_token, + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0' + ); + + $getfield = $this->getGetfield(); + + if (!is_null($getfield)) + { + $getfields = str_replace('?', '', explode('&', $getfield)); + foreach ($getfields as $g) + { + $split = explode('=', $g); + $oauth[$split[0]] = $split[1]; + } + } + + $base_info = $this->buildBaseString($url, $requestMethod, $oauth); + $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); + $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); + $oauth['oauth_signature'] = $oauth_signature; + + $this->url = $url; + $this->oauth = $oauth; + + return $this; + } + + /** + * Perform the actual data retrieval from the API + * + * @param boolean $return If true, returns data. + * + * @return string json If $return param is true, returns json data. + */ + public function performRequest($return = true) + { + if (!is_bool($return)) + { + throw new Exception('performRequest parameter must be true or false'); + } + + $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:'); + + $getfield = $this->getGetfield(); + $postfields = $this->getPostfields(); + + $options = array( + CURLOPT_HTTPHEADER => $header, + CURLOPT_HEADER => false, + CURLOPT_URL => $this->url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 10, + ); + + if (!is_null($postfields)) + { + $options[CURLOPT_POSTFIELDS] = $postfields; + } + else + { + if ($getfield !== '') + { + $options[CURLOPT_URL] .= $getfield; + } + } + + $feed = curl_init(); + curl_setopt_array($feed, $options); + $json = curl_exec($feed); + curl_close($feed); + + if ($return) { return $json; } + } + + /** + * Private method to generate the base string used by cURL + * + * @param string $baseURI + * @param string $method + * @param array $params + * + * @return string Built base string + */ + private function buildBaseString($baseURI, $method, $params) + { + $return = array(); + ksort($params); + + foreach($params as $key=>$value) + { + $return[] = "$key=" . $value; + } + + return $method . "&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $return)); + } + + /** + * Private method to generate authorization header used by cURL + * + * @param array $oauth Array of oauth data generated by buildOauth() + * + * @return string $return Header used by cURL for request + */ + private function buildAuthorizationHeader($oauth) + { + $return = 'Authorization: OAuth '; + $values = array(); + + foreach($oauth as $key => $value) + { + $values[] = "$key=\"" . rawurlencode($value) . "\""; + } + + $return .= implode(', ', $values); + return $return; + } + +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json new file mode 100755 index 00000000000..2032224ccbf --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json @@ -0,0 +1,18 @@ +{ + "name": "j7mbo/twitter-api-php", + "description": "Simple PHP Wrapper for Twitter API v1.1 calls", + "version": "0.1", + "type": "library", + "keywords": ["twitter", "PHP", "API"], + "homepage": "https://github.com/j7mbo/twitter-api-php", + "license": "GNU Public License", + "authors": [ + { + "name": "James Mallison", + "homepage": "https://github.com/j7mbo/twitter-api-php" + } + ], + "autoload": { + "files": ["TwitterAPIExchange.php"] + } +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css new file mode 100755 index 00000000000..96b1a2adc83 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css @@ -0,0 +1,9 @@ +.tweet { + border-bottom: 0 none; + border-radius: 0; + border-top: 1px solid #E8E8E8; + cursor: default; + font-size: 12px; + min-height: 32px; + padding: 9px 15px 12px; +} \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js new file mode 100755 index 00000000000..9faf43a6f6b --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js @@ -0,0 +1,22 @@ +$(function() { + + var twitter_user = $( "#twitter_user_c" ).text(); + + if(twitter_user){ + + $.ajax({ + type: "POST", + url: "index.php?entryPoint=social", + data: { twitter_user: twitter_user, social: "twitter"} + }) + .done(function( msg ) { + $("#twitter_feed").html(' '); + $("#twitter_feed").html( msg + $("#twitter_feed").html() ); + }); + + }else{ + return false; + } + + +}); \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php new file mode 100755 index 00000000000..9e91fedd23c --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php @@ -0,0 +1,40 @@ +getAccessToken($_REQUEST['oauth_verifier']); + +/* Save the access tokens. Normally these would be saved in a database for future use. */ +$_SESSION['access_token'] = $access_token; + +/* Remove no longer needed request tokens */ +unset($_SESSION['oauth_token']); +unset($_SESSION['oauth_token_secret']); + +/* If HTTP response is 200 continue otherwise send to connect page to retry */ +if (200 == $connection->http_code) { + /* The user has been verified and the access tokens can be saved for future use */ + $_SESSION['status'] = 'verified'; + header('Location: http://localhost/suitecrm/index.php?entryPoint=social_reader'); +} else { + /* Save HTTP status for error dialog on connnect page.*/ + header('Location: http://localhost/suitecrm/index.php?entryPoint=social_reader'); +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/darker.png b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/darker.png new file mode 100755 index 0000000000000000000000000000000000000000..746b6b9f80c71049f2a4eb84ff72d5d1bf77c62c GIT binary patch literal 2370 zcmV-I3BC4-P)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2%AYn zK~!jg?VD?CQ|B4Sf5(m;U*kCB;v^&~X`mqlD70k=%6eVbQL0v*Xp7YQm8n{*b!>yJ z(!O+58|t*KV;|a1YSE?^(P~r!DwWWcmX(x3qEZMUPRQMkYn;T6?ZlUJ&OSJC634d` z2cpeC=_r2mzR&ajpNrq~p4TS=K=t-rGFh@@kd9Zj2}1SuU2^SRo90ZU_22>KvVNBN zN$bG_D6X`LEdRUY0LY>^=R%i5Bg_0Ea&bx0oC{qJjV$wvq$5|gLBmVSt0>W^0odPr zkvH4z-$^Jta{d3210W?h@h{a^F(j&a*$TCKc&?(53nP9G+XiPXlt^O&F&IP&hsn`s z5EPNA;FxsxVjtoV% z8w_x}#msH+D zUG^;@b5%E4eOZieLxC|GdqX0xe$&Ypj-jMNi8KOE2Y=kSfm@f>FeZxRDir+gt8;wj^zh!Z z4|1S;fIofHmFDiG$6VD-RKNGsNereu%r#2@czVNHJ~(6LRF^Ahouk{HM6Xf-GLk4F z2#V;a{+_juy`2LY@e>1%F6o1ag}KMDd^>Xs!v=aD&Ais3mCBO>f^ zz-{K7lr<8yYYhef7Mt|!Z9Imrv=m)I0RVfS+RTxTUf$^)Brr0G@8oEJduZEaPNXAHVpl8Ko(IhUV0|K-#%m*RAB1@**Dl z=s1!fueR#0OW`wyYIg< zsa}`I3qYPSa=Y>cLv*@FGU}&&*gGwL=D_FNS6R#x58XwfUdyTOetvVfk#J!#4KF;x zvGyKn7g|72@Z#~aNzb_gBBM&YEgjb6MgFF$k*NJpmz@@un+I-K&cC)k$QrE@kIjZG zid2|Q7;@FfqDY-y&Ch9>U1jV%1XGUb`j!;hxMg}*nFc%;pz4NalQwCD8!dNc7A`d zHF`|$sIN)OYh;t+9>+}hiH%pAbo}Z^-{-?KR(|-_2V7lLz!R&NMvv3R6Q5aRhyn%L9QNukNeYg;z4xn|*H zt{ll-v(SP<5ctU2!)PExv&}i)E=T(|v~{!R%mo_z8~~^lio~8|rp4*xp0K;{2Scnb zDPVnhF~@rc(5Y2iYtnIjWhu=UJu~V%y`xBy%vdNyuiH0kud*mjt`W*)+)r%0uBr@$ zAW&q`^XT>U1Vou-<(6ojBi0_?ZRz5q-Idtyc;BQ?i?NieCr7FYj`cfv`%Fj5+(a6o z(NV%mC2xIgPtsNA_$Y)ue z(H6(iw6=6|1Cq$sb|O4!+Cosu(|F91lh*NY-eyjL*2 zPp14#jdRp00ET>iMwBYvxArpZ^GEwivXu7ql5#>{u7-)zygM?N#;BZZzp=cC=T_G6 zm!|Vcg%W98rOCnGZ^Jg?M>gn??_7&dk|z7hkzA|C2f+O+YB8K?YpQttt8+<(5^3C0SHn|VHsbV;k)Nx^=^x{bW^1&+TB}7CC60F4`JlLy zO-rh%uPo)z*>>tJMTiJ9`l@m@kyxWe7UMtePxOtAQ{|p=4DqZ|L6c*Ma9HHbpqIOq zN>01naq9sb?y~bh-6Fo&v6XxG9htRPL6sBNbEf>n#&0&CXG{GO?q0DJ8EAI6*w%0& zp@&2W)!TQ;B}?M3Z>+K`;LmrgWw#A>_r))8n;BkT3>)?wjN9&LYoqqAO$=Gv5}L3W zw3O(z_<~_NhCC#Cxh%)!WWeJELEyz(*Ru7dH9Y#^QLKaRWcxTTDA4AjQ{~V%J_289 zV*SL%ISK{kMjh@zkm0e^i{!C5+S-!e7MuFNW#_SGetqLAZZN?9i_kwsCr=rf(A&NK zltX2*cDvh)-R(_j_}yn7M3yB)Nv0y-$onl9Xmif~r>HA|%j+lklIi6o)=z945=FW$ z@k^U>&ULW0i;>X)Ppn?b&T7+)cKe8*9Sx0_baAE2L;DU>TVzJB&Y^wK&A^C1byAiq zM#`Um0FGYh=jet0OA<==KAjA|7^G?Z(LKxjXI4uQm%`=H$TGi3`pQivxf~i<<`>!5 ooU_as0%ZTSEKBC;cx9XLUtuVuKI-|I^Z)<=07*qoM6N<$g3Pn2od5s; literal 0 HcmV?d00001 diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/lighter.png b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/lighter.png new file mode 100755 index 0000000000000000000000000000000000000000..297bb03404f2d7462ee9355aae38f5f5f3e47fbd GIT binary patch literal 2490 zcmV;r2}SmaP)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2@^>~ zK~!jg?VEdWl+_u=f8X9WA)72QVM!vF1VSK4AZQ?nK}o}NseS3JN$f zgRQMIo!W~OJ6`ZouvAJ_K&eH%O=zU35Dd9+OGJ}EvYTu++57IdU;kJVc9XpY6B?a; zX3k{ZIp=-eC+|7m`<-)kR{+>vQ7sWi9D|5ebEgWz_KIq$s4!>9f*d_|j-lj_V|e1| zv2!Q@e7>PCTvsDT9K#C=07>!<2 zJRT3v{^4m(e0B`AMuXes=AQD^+;C$tPj22q>4H*zdfz>`#KAid3>9xAeo+*W%jE#P zv+pgwyLbU*^X6iX@D|vxdJPV{BV^y=rMIzo>FtA}CzL%H7|@3PC-uR0k{o`MEpT&+ zmiCUwd$DjaD&G5mR^R=5Ugy>A zFL6`pd;osE=`rd~)-ZEc5shchvh}x5aZ~9nJpS;;UjCggyhMFX4IM@k^;K2OnpeX9 zJ+G59W-M>Ndx+<@J`*QB2?^MN1N-(fead7?=HEi6T!B@Box5IR=L;`>Ej{PX zHuTf??pp_V_K#2V&%f=WuDXUP)2>6K(eP;bS}ruV@b7*5sr;ydIrB8I2tIsDgsYdEB~aA*X6k7? zxX|2;qp^|Gwe@`Y#d&IupCC)EqUw`l7)GU&uTKu*U$o?QG#U*z%qZYj8`hDRoCLu8 zhbzgOI5DbLyT^;&?d{E@=<{Loc(HlBWQ@7?YwIarxgyB6oH@guS9eiXI-mWozJlq( z1uEY@fC2%N(MZ*iqs%Lw&3$(-XHs%f#Ci8GF3A_N^~J`q@N(Yec4#`>p8;Rm>`^(w z^()mX);zY6A1}KTOQ(hBpZ+tI2M_vvC6EgOasg^TuSW9u`2L~=xMTvlF=IdirA&q( z01}jz+(`M#6-+Id=Jypvl2wZSngV!x>{xvBuA7QRt)c4kYU--0D3~!Fhr>aA^+`_G z)iHDWG@POs#IMsQgCL+*sYp&si#>KieJ zAZPaXZl!3>9M-SjNX7dfvh?=bdf)$&1YWO*1jqy#ZFVPakM~lt{ns24pi(Mnce*e+ zoV|U5)IWA0uWtapa=C)>xf3{EU4zZ(WX19y(%RC@hySVMd_x1@*}REPr@KGD1PCBr zszd|P3jULJU(P|*6JUEpf1ZUYMN@b5y{gO~R0`R^ zzo2^1b1iYS>vBugsL9qPM&yVTyCwWp(Uo=ev@y*W7rS{ZmOePbh#j}_&X%YtxeZa(=9L5<&(e8Bi z<5wsYm^&^0MKr*8(egMLdIIf9`S}2Jn9Y=xl~T570XoAdF4!DlHH6a}anEJ-cv*VQ z<;7KRgYq-}Q)5qi@;qcECS38JtLDV#Y+3g(n;(3LUp}&dB%O}ct5)I-xFV2%>k11g zTUf@C&yKTa*KVdw^(R50loR*{_b2SKCHeZt4jkLpj^;ZlKOe6sQZ!>aT9uM(b0*;N zdYL_=0IS=B(gj7|CTgIo3w=s5DLNgUE;lDl z=6*ck(9~r1FRqNt5);TzP2p%4ylH~wfExv!+`pk8s}?!j(i+mgrP)GJVGd2L zrifxR3OQ=I9MLCX4Ray;#3LJ#2{HtkfT^vG#S0hk#JUIhwAC2&WDQrS)2nfk*V=iQ!Y2K(sVlqHpM%x^1{ck;y4Kin5jc`W;@8<8AFx4+YWs z?QSo2A}4+Q<6F?#y0F{rget('account/verify_credentials'); + + +//$connection->get('users/show', array('screen_name' => 'abraham')); +//$connection->post('statuses/update', array('status' => date(DATE_RFC822))); +//$connection->post('statuses/destroy', array('id' => 5437877770)); +//$connection->post('friendships/create', array('id' => 9436992)); +//$connection->post('friendships/destroy', array('id' => 9436992)); + +/* Include HTML to display on the page */ +include('html.inc'); diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php new file mode 100755 index 00000000000..4570013b80f --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php @@ -0,0 +1,874 @@ +key = $key; + $this->secret = $secret; + $this->callback_url = $callback_url; + } + + function __toString() { + return "OAuthConsumer[key=$this->key,secret=$this->secret]"; + } +} + +class OAuthToken { + // access tokens and request tokens + public $key; + public $secret; + + /** + * key = the token + * secret = the token secret + */ + function __construct($key, $secret) { + $this->key = $key; + $this->secret = $secret; + } + + /** + * generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + */ + function to_string() { + return "oauth_token=" . + OAuthUtil::urlencode_rfc3986($this->key) . + "&oauth_token_secret=" . + OAuthUtil::urlencode_rfc3986($this->secret); + } + + function __toString() { + return $this->to_string(); + } +} + +/** + * A class for implementing a Signature Method + * See section 9 ("Signing Requests") in the spec + */ +abstract class OAuthSignatureMethod { + /** + * Needs to return the name of the Signature Method (ie HMAC-SHA1) + * @return string + */ + abstract public function get_name(); + + /** + * Build up the signature + * NOTE: The output of this function MUST NOT be urlencoded. + * the encoding is handled in OAuthRequest when the final + * request is serialized + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @return string + */ + abstract public function build_signature($request, $consumer, $token); + + /** + * Verifies that a given signature is correct + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @param string $signature + * @return bool + */ + public function check_signature($request, $consumer, $token, $signature) { + $built = $this->build_signature($request, $consumer, $token); + return $built == $signature; + } +} + +/** + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] + * where the Signature Base String is the text and the key is the concatenated values (each first + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' + * character (ASCII code 38) even if empty. + * - Chapter 9.2 ("HMAC-SHA1") + */ +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { + function get_name() { + return "HMAC-SHA1"; + } + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + + return base64_encode(hash_hmac('sha1', $base_string, $key, true)); + } +} + +/** + * The PLAINTEXT method does not provide any security protection and SHOULD only be used + * over a secure channel such as HTTPS. It does not use the Signature Base String. + * - Chapter 9.4 ("PLAINTEXT") + */ +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { + public function get_name() { + return "PLAINTEXT"; + } + + /** + * oauth_signature is set to the concatenated encoded values of the Consumer Secret and + * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is + * empty. The result MUST be encoded again. + * - Chapter 9.4.1 ("Generating Signatures") + * + * Please note that the second encoding MUST NOT happen in the SignatureMethod, as + * OAuthRequest handles this! + */ + public function build_signature($request, $consumer, $token) { + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + $request->base_string = $key; + + return $key; + } +} + +/** + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a + * verified way to the Service Provider, in a manner which is beyond the scope of this + * specification. + * - Chapter 9.3 ("RSA-SHA1") + */ +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { + public function get_name() { + return "RSA-SHA1"; + } + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // (2) fetch via http using a url provided by the requester + // (3) some sort of specific discovery code based on request + // + // Either way should return a string representation of the certificate + protected abstract function fetch_public_cert(&$request); + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // + // Either way should return a string representation of the certificate + protected abstract function fetch_private_cert(&$request); + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + // Fetch the private key cert based on the request + $cert = $this->fetch_private_cert($request); + + // Pull the private key ID from the certificate + $privatekeyid = openssl_get_privatekey($cert); + + // Sign using the key + $ok = openssl_sign($base_string, $signature, $privatekeyid); + + // Release the key resource + openssl_free_key($privatekeyid); + + return base64_encode($signature); + } + + public function check_signature($request, $consumer, $token, $signature) { + $decoded_sig = base64_decode($signature); + + $base_string = $request->get_signature_base_string(); + + // Fetch the public key cert based on the request + $cert = $this->fetch_public_cert($request); + + // Pull the public key ID from the certificate + $publickeyid = openssl_get_publickey($cert); + + // Check the computed signature against the one passed in the query + $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); + + // Release the key resource + openssl_free_key($publickeyid); + + return $ok == 1; + } +} + +class OAuthRequest { + private $parameters; + private $http_method; + private $http_url; + // for debug purposes + public $base_string; + public static $version = '1.0'; + public static $POST_INPUT = 'php://input'; + + function __construct($http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); + $this->parameters = $parameters; + $this->http_method = $http_method; + $this->http_url = $http_url; + } + + + /** + * attempt to build up a request from what was passed to the server + */ + public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { + $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") + ? 'http' + : 'https'; + @$http_url or $http_url = $scheme . + '://' . $_SERVER['HTTP_HOST'] . + ':' . + $_SERVER['SERVER_PORT'] . + $_SERVER['REQUEST_URI']; + @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; + + // We weren't handed any parameters, so let's find the ones relevant to + // this request. + // If you run XML-RPC or similar you should use this to provide your own + // parsed parameter-list + if (!$parameters) { + // Find request headers + $request_headers = OAuthUtil::get_headers(); + + // Parse the query-string to find GET parameters + $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); + + // It's a POST request of the proper content-type, so parse POST + // parameters and add those overriding any duplicates from GET + if ($http_method == "POST" + && @strstr($request_headers["Content-Type"], + "application/x-www-form-urlencoded") + ) { + $post_data = OAuthUtil::parse_parameters( + file_get_contents(self::$POST_INPUT) + ); + $parameters = array_merge($parameters, $post_data); + } + + // We have a Authorization-header with OAuth data. Parse the header + // and add those overriding any duplicates from GET or POST + if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { + $header_parameters = OAuthUtil::split_header( + $request_headers['Authorization'] + ); + $parameters = array_merge($parameters, $header_parameters); + } + + } + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + /** + * pretty much a helper function to set up the request + */ + public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $defaults = array("oauth_version" => OAuthRequest::$version, + "oauth_nonce" => OAuthRequest::generate_nonce(), + "oauth_timestamp" => OAuthRequest::generate_timestamp(), + "oauth_consumer_key" => $consumer->key); + if ($token) + $defaults['oauth_token'] = $token->key; + + $parameters = array_merge($defaults, $parameters); + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + public function set_parameter($name, $value, $allow_duplicates = true) { + if ($allow_duplicates && isset($this->parameters[$name])) { + // We have already added parameter(s) with this name, so add to the list + if (is_scalar($this->parameters[$name])) { + // This is the first duplicate, so transform scalar (string) + // into an array so we can add the duplicates + $this->parameters[$name] = array($this->parameters[$name]); + } + + $this->parameters[$name][] = $value; + } else { + $this->parameters[$name] = $value; + } + } + + public function get_parameter($name) { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + public function get_parameters() { + return $this->parameters; + } + + public function unset_parameter($name) { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * @return string + */ + public function get_signable_parameters() { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return OAuthUtil::build_http_query($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + */ + public function get_signature_base_string() { + $parts = array( + $this->get_normalized_http_method(), + $this->get_normalized_http_url(), + $this->get_signable_parameters() + ); + + $parts = OAuthUtil::urlencode_rfc3986($parts); + + return implode('&', $parts); + } + + /** + * just uppercases the http method + */ + public function get_normalized_http_method() { + return strtoupper($this->http_method); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + */ + public function get_normalized_http_url() { + $parts = parse_url($this->http_url); + + $port = @$parts['port']; + $scheme = $parts['scheme']; + $host = $parts['host']; + $path = @$parts['path']; + + $port or $port = ($scheme == 'https') ? '443' : '80'; + + if (($scheme == 'https' && $port != '443') + || ($scheme == 'http' && $port != '80')) { + $host = "$host:$port"; + } + return "$scheme://$host$path"; + } + + /** + * builds a url usable for a GET request + */ + public function to_url() { + $post_data = $this->to_postdata(); + $out = $this->get_normalized_http_url(); + if ($post_data) { + $out .= '?'.$post_data; + } + return $out; + } + + /** + * builds the data one would send in a POST request + */ + public function to_postdata() { + return OAuthUtil::build_http_query($this->parameters); + } + + /** + * builds the Authorization: header + */ + public function to_header($realm=null) { + $first = true; + if($realm) { + $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; + $first = false; + } else + $out = 'Authorization: OAuth'; + + $total = array(); + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") continue; + if (is_array($v)) { + throw new OAuthException('Arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ','; + $out .= OAuthUtil::urlencode_rfc3986($k) . + '="' . + OAuthUtil::urlencode_rfc3986($v) . + '"'; + $first = false; + } + return $out; + } + + public function __toString() { + return $this->to_url(); + } + + + public function sign_request($signature_method, $consumer, $token) { + $this->set_parameter( + "oauth_signature_method", + $signature_method->get_name(), + false + ); + $signature = $this->build_signature($signature_method, $consumer, $token); + $this->set_parameter("oauth_signature", $signature, false); + } + + public function build_signature($signature_method, $consumer, $token) { + $signature = $signature_method->build_signature($this, $consumer, $token); + return $signature; + } + + /** + * util function: current timestamp + */ + private static function generate_timestamp() { + return time(); + } + + /** + * util function: current nonce + */ + private static function generate_nonce() { + $mt = microtime(); + $rand = mt_rand(); + + return md5($mt . $rand); // md5s look nicer than numbers + } +} + +class OAuthServer { + protected $timestamp_threshold = 300; // in seconds, five minutes + protected $version = '1.0'; // hi blaine + protected $signature_methods = array(); + + protected $data_store; + + function __construct($data_store) { + $this->data_store = $data_store; + } + + public function add_signature_method($signature_method) { + $this->signature_methods[$signature_method->get_name()] = + $signature_method; + } + + // high level functions + + /** + * process a request_token request + * returns the request token on success + */ + public function fetch_request_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // no token required for the initial token request + $token = NULL; + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $callback = $request->get_parameter('oauth_callback'); + $new_token = $this->data_store->new_request_token($consumer, $callback); + + return $new_token; + } + + /** + * process an access_token request + * returns the access token on success + */ + public function fetch_access_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // requires authorized request token + $token = $this->get_token($request, $consumer, "request"); + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $verifier = $request->get_parameter('oauth_verifier'); + $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); + + return $new_token; + } + + /** + * verify an api call, checks all the parameters + */ + public function verify_request(&$request) { + $this->get_version($request); + $consumer = $this->get_consumer($request); + $token = $this->get_token($request, $consumer, "access"); + $this->check_signature($request, $consumer, $token); + return array($consumer, $token); + } + + // Internals from here + /** + * version 1 + */ + private function get_version(&$request) { + $version = $request->get_parameter("oauth_version"); + if (!$version) { + // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. + // Chapter 7.0 ("Accessing Protected Ressources") + $version = '1.0'; + } + if ($version !== $this->version) { + throw new OAuthException("OAuth version '$version' not supported"); + } + return $version; + } + + /** + * figure out the signature with some defaults + */ + private function get_signature_method(&$request) { + $signature_method = + @$request->get_parameter("oauth_signature_method"); + + if (!$signature_method) { + // According to chapter 7 ("Accessing Protected Ressources") the signature-method + // parameter is required, and we can't just fallback to PLAINTEXT + throw new OAuthException('No signature method parameter. This parameter is required'); + } + + if (!in_array($signature_method, + array_keys($this->signature_methods))) { + throw new OAuthException( + "Signature method '$signature_method' not supported " . + "try one of the following: " . + implode(", ", array_keys($this->signature_methods)) + ); + } + return $this->signature_methods[$signature_method]; + } + + /** + * try to find the consumer for the provided request's consumer key + */ + private function get_consumer(&$request) { + $consumer_key = @$request->get_parameter("oauth_consumer_key"); + if (!$consumer_key) { + throw new OAuthException("Invalid consumer key"); + } + + $consumer = $this->data_store->lookup_consumer($consumer_key); + if (!$consumer) { + throw new OAuthException("Invalid consumer"); + } + + return $consumer; + } + + /** + * try to find the token for the provided request's token key + */ + private function get_token(&$request, $consumer, $token_type="access") { + $token_field = @$request->get_parameter('oauth_token'); + $token = $this->data_store->lookup_token( + $consumer, $token_type, $token_field + ); + if (!$token) { + throw new OAuthException("Invalid $token_type token: $token_field"); + } + return $token; + } + + /** + * all-in-one function to check the signature on a request + * should guess the signature method appropriately + */ + private function check_signature(&$request, $consumer, $token) { + // this should probably be in a different method + $timestamp = @$request->get_parameter('oauth_timestamp'); + $nonce = @$request->get_parameter('oauth_nonce'); + + $this->check_timestamp($timestamp); + $this->check_nonce($consumer, $token, $nonce, $timestamp); + + $signature_method = $this->get_signature_method($request); + + $signature = $request->get_parameter('oauth_signature'); + $valid_sig = $signature_method->check_signature( + $request, + $consumer, + $token, + $signature + ); + + if (!$valid_sig) { + throw new OAuthException("Invalid signature"); + } + } + + /** + * check that the timestamp is new enough + */ + private function check_timestamp($timestamp) { + if( ! $timestamp ) + throw new OAuthException( + 'Missing timestamp parameter. The parameter is required' + ); + + // verify that timestamp is recentish + $now = time(); + if (abs($now - $timestamp) > $this->timestamp_threshold) { + throw new OAuthException( + "Expired timestamp, yours $timestamp, ours $now" + ); + } + } + + /** + * check that the nonce is not repeated + */ + private function check_nonce($consumer, $token, $nonce, $timestamp) { + if( ! $nonce ) + throw new OAuthException( + 'Missing nonce parameter. The parameter is required' + ); + + // verify that the nonce is uniqueish + $found = $this->data_store->lookup_nonce( + $consumer, + $token, + $nonce, + $timestamp + ); + if ($found) { + throw new OAuthException("Nonce already used: $nonce"); + } + } + +} + +class OAuthDataStore { + function lookup_consumer($consumer_key) { + // implement me + } + + function lookup_token($consumer, $token_type, $token) { + // implement me + } + + function lookup_nonce($consumer, $token, $nonce, $timestamp) { + // implement me + } + + function new_request_token($consumer, $callback = null) { + // return a new token attached to this consumer + } + + function new_access_token($token, $consumer, $verifier = null) { + // return a new access token attached to this consumer + // for the user associated with this token if the request token + // is authorized + // should also invalidate the request token + } + +} + +class OAuthUtil { + public static function urlencode_rfc3986($input) { + if (is_array($input)) { + return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); + } else if (is_scalar($input)) { + return str_replace( + '+', + ' ', + str_replace('%7E', '~', rawurlencode($input)) + ); + } else { + return ''; + } +} + + + // This decode function isn't taking into consideration the above + // modifications to the encoding process. However, this method doesn't + // seem to be used anywhere so leaving it as is. + public static function urldecode_rfc3986($string) { + return urldecode($string); + } + + // Utility function for turning the Authorization: header into + // parameters, has to do some unescaping + // Can filter out any non-oauth parameters if needed (default behaviour) + public static function split_header($header, $only_allow_oauth_parameters = true) { + $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; + $offset = 0; + $params = array(); + while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { + $match = $matches[0]; + $header_name = $matches[2][0]; + $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; + if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { + $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); + } + $offset = $match[1] + strlen($match[0]); + } + + if (isset($params['realm'])) { + unset($params['realm']); + } + + return $params; + } + + // helper to try to sort out headers for people who aren't running apache + public static function get_headers() { + if (function_exists('apache_request_headers')) { + // we need this to get the actual Authorization: header + // because apache tends to tell us it doesn't exist + $headers = apache_request_headers(); + + // sanitize the output of apache_request_headers because + // we always want the keys to be Cased-Like-This and arh() + // returns the headers in the same case as they are in the + // request + $out = array(); + foreach( $headers AS $key => $value ) { + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("-", " ", $key))) + ); + $out[$key] = $value; + } + } else { + // otherwise we don't have apache and are just going to have to hope + // that $_SERVER actually contains what we need + $out = array(); + if( isset($_SERVER['CONTENT_TYPE']) ) + $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; + if( isset($_ENV['CONTENT_TYPE']) ) + $out['Content-Type'] = $_ENV['CONTENT_TYPE']; + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) == "HTTP_") { + // this is chaos, basically it is just there to capitalize the first + // letter of every word that is not an initial HTTP and strip HTTP + // code from przemek + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) + ); + $out[$key] = $value; + } + } + } + return $out; + } + + // This function takes a input like a=b&a=c&d=e and returns the parsed + // parameters like this + // array('a' => array('b','c'), 'd' => 'e') + public static function parse_parameters( $input ) { + if (!isset($input) || !$input) return array(); + + $pairs = explode('&', $input); + + $parsed_parameters = array(); + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = OAuthUtil::urldecode_rfc3986($split[0]); + $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; + + if (isset($parsed_parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parsed_parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); + } + + $parsed_parameters[$parameter][] = $value; + } else { + $parsed_parameters[$parameter] = $value; + } + } + return $parsed_parameters; + } + + public static function build_http_query($params) { + if (!$params) return ''; + + // Urlencode both keys and values + $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); + $values = OAuthUtil::urlencode_rfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = array(); + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + natsort($value); + foreach ($value as $duplicate_value) { + $pairs[] = $parameter . '=' . $duplicate_value; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php new file mode 100755 index 00000000000..f7fc22bd1ef --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php @@ -0,0 +1,241 @@ +http_status; } + function lastAPICall() { return $this->last_api_call; } + + /** + * construct TwitterOAuth object + */ + function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { + $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); + if (!empty($oauth_token) && !empty($oauth_token_secret)) { + $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); + } else { + $this->token = NULL; + } + } + + + /** + * Get a request_token from Twitter + * + * @returns a key/value array containing oauth_token and oauth_token_secret + */ + function getRequestToken($oauth_callback) { + $parameters = array(); + $parameters['oauth_callback'] = $oauth_callback; + $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * Get the authorize URL + * + * @returns a string + */ + function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { + if (is_array($token)) { + $token = $token['oauth_token']; + } + if (empty($sign_in_with_twitter)) { + return $this->authorizeURL() . "?oauth_token={$token}"; + } else { + return $this->authenticateURL() . "?oauth_token={$token}"; + } + } + + /** + * Exchange request token and secret for an access token and + * secret, to sign API calls. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham") + */ + function getAccessToken($oauth_verifier) { + $parameters = array(); + $parameters['oauth_verifier'] = $oauth_verifier; + $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * One time exchange of username and password for access token and secret. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham", + * "x_auth_expires" => "0") + */ + function getXAuthToken($username, $password) { + $parameters = array(); + $parameters['x_auth_username'] = $username; + $parameters['x_auth_password'] = $password; + $parameters['x_auth_mode'] = 'client_auth'; + $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * GET wrapper for oAuthRequest. + */ + function get($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'GET', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response, true); + } + return $response; + } + + /** + * POST wrapper for oAuthRequest. + */ + function post($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'POST', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * DELETE wrapper for oAuthReqeust. + */ + function delete($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'DELETE', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * Format and sign an OAuth / API request + */ + function oAuthRequest($url, $method, $parameters) { + if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { + $url = "{$this->host}{$url}.{$this->format}"; + } + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': + return $this->http($request->to_url(), 'GET'); + default: + return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); + } + } + + /** + * Make an HTTP request + * + * @return API results + */ + function http($url, $method, $postfields = NULL) { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close ($ci); + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) { + $i = strpos($header, ':'); + if (!empty($i)) { + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + return strlen($header); + } +} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php new file mode 100755 index 00000000000..4b0a1865afe --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php @@ -0,0 +1,98 @@ + $config['properties']['oauth_access_token'], + 'oauth_access_token_secret' => $config['properties']['oauth_access_token_secret'], + 'consumer_key' => $config['properties']['consumer_key'], + 'consumer_secret' => $config['properties']['consumer_secret'], +); +$limit = $config['properties']['max_number_of_tweets']; + +$twitter_user = $_REQUEST['twitter_user']; +$type = 'user_timeline'; + +$tweets_json = request_tweets($settings,$twitter_user,$type); +$tweets = json_decode($tweets_json, true); + +$display = display_tweets($tweets,$limit); +$formatted_display = format_tweets($display); + +echo $formatted_display; + +function request_tweets($settings,$twitter_user,$type){ + $url = 'https://api.twitter.com/1.1/statuses/' . $type .'.json'; + $getfield = "?screen_name=". $twitter_user .""; + $requestMethod = 'GET'; + $twitter = new TwitterAPIExchange($settings); + $tweets_json= $twitter->setGetfield($getfield) + ->buildOauth($url, $requestMethod) + ->performRequest(); + + return $tweets_json; +} + +function format_tweets($display){ + + $html =''; + $html = ""; + + + $html .= "
      "; + $html .= ''; + $html .= ""; + $html .= "
      Twitter Activity
      " . $display['name'] ."
      "; + + foreach($display['tweets'] as $tweet){ + $html .= "
      "; + $html .= "

      ". $tweet."

      "; + $html .= "
      "; + } + return $html . '
      '; + +} + + +function display_tweets($tweets,$limit){ +if(count($tweets) > 0){ + if(count($tweets) < $limit){ + $limit = count($tweets); + } + + $i = 0; + $display_tweets_array = array(); + + $display_tweets_array['name'] = $tweets[$i]['user']['name']; + $display_tweets_array['follow'] = $tweets[$i]['user']['url']; + $display_tweets_array['picture'] = $tweets[$i]['user']['profile_image_url_https']; + + while($i < $limit){ + + + $display_tweets_array['tweets'][] = $tweets[$i]['text']; + + if(count($tweets[$i]['entities']['urls']) != 0){ + + $u = 0; + while($u < count($tweets[$i]['entities']['urls'])){ + $display_tweets_array['tweets'][$i] = str_replace($tweets[$i]['entities']['urls'][0]['url'], "". $tweets[$i]['entities']['urls'][0]['display_url'] ." ",$display_tweets_array['tweets'][$i]); + $u++; + } + + } + $i++; + } + return $display_tweets_array; +}else{ + return false; +} + + + + + + +} diff --git a/custom/modules/Connectors/metadata/connectors.php b/custom/modules/Connectors/metadata/connectors.php new file mode 100755 index 00000000000..00dc43b8f20 --- /dev/null +++ b/custom/modules/Connectors/metadata/connectors.php @@ -0,0 +1,37 @@ + + array ( + 'id' => 'ext_rest_linkedin', + 'name' => 'LinkedIn©', + 'enabled' => true, + 'directory' => 'modules/Connectors/connectors/sources/ext/rest/linkedin', + 'eapm' => + array ( + 'enabled' => true, + ), + 'modules' => + array ( + 0 => 'Accounts', + 1 => 'Contacts', + 2 => 'Leads', + 3 => 'Prospects', + ), + ), + 'ext_rest_insideview' => + array ( + 'id' => 'ext_rest_insideview', + 'name' => 'InsideView©', + 'enabled' => true, + 'directory' => 'modules/Connectors/connectors/sources/ext/rest/insideview', + 'eapm' => false, + 'modules' => + array ( + 0 => 'Accounts', + 1 => 'Contacts', + 2 => 'Leads', + 3 => 'Opportunities', + ), + ), +); \ No newline at end of file diff --git a/custom/modules/Connectors/metadata/display_config.php b/custom/modules/Connectors/metadata/display_config.php index 202c7da1866..598c422b54b 100755 --- a/custom/modules/Connectors/metadata/display_config.php +++ b/custom/modules/Connectors/metadata/display_config.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Contacts/metadata/detailviewdefs.php b/custom/modules/Contacts/metadata/detailviewdefs.php index da2fd33c800..4d246b07e33 100755 --- a/custom/modules/Contacts/metadata/detailviewdefs.php +++ b/custom/modules/Contacts/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Home/language/es_es.lang.php b/custom/modules/Home/language/es_es.lang.php old mode 100644 new mode 100755 diff --git a/custom/modules/Home/language/ru_ru.lang.php b/custom/modules/Home/language/ru_ru.lang.php old mode 100644 new mode 100755 diff --git a/custom/modules/Leads/metadata/detailviewdefs.php b/custom/modules/Leads/metadata/detailviewdefs.php index dddbc92b2f3..10a5a071b48 100755 --- a/custom/modules/Leads/metadata/detailviewdefs.php +++ b/custom/modules/Leads/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Opportunities/metadata/detailviewdefs.php b/custom/modules/Opportunities/metadata/detailviewdefs.php new file mode 100755 index 00000000000..ed068639e77 --- /dev/null +++ b/custom/modules/Opportunities/metadata/detailviewdefs.php @@ -0,0 +1,105 @@ + + array ( + 'DetailView' => + array ( + 'templateMeta' => + array ( + 'form' => + array ( + 'buttons' => + array ( + 0 => 'EDIT', + 1 => 'DUPLICATE', + 2 => 'DELETE', + 3 => 'FIND_DUPLICATES', + ), + ), + 'maxColumns' => '2', + 'widths' => + array ( + 0 => + array ( + 'label' => '10', + 'field' => '30', + ), + 1 => + array ( + 'label' => '10', + 'field' => '30', + ), + ), + ), + 'panels' => + array ( + 'default' => + array ( + 0 => + array ( + 0 => 'name', + 1 => 'account_name', + ), + 1 => + array ( + 0 => + array ( + 'name' => 'amount', + 'label' => '{$MOD.LBL_AMOUNT} ({$CURRENCY})', + ), + 1 => 'date_closed', + ), + 2 => + array ( + 0 => 'sales_stage', + 1 => 'opportunity_type', + ), + 3 => + array ( + 0 => 'probability', + 1 => 'lead_source', + ), + 4 => + array ( + 0 => 'next_step', + 1 => 'campaign_name', + ), + 5 => + array ( + 0 => + array ( + 'name' => 'description', + 'nl2br' => true, + ), + ), + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'assigned_user_name', + 'label' => 'LBL_ASSIGNED_TO', + ), + 1 => + array ( + 'name' => 'date_modified', + 'label' => 'LBL_DATE_MODIFIED', + 'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'date_entered', + 'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value}', + ), + ), + ), + ), + ), + ), +); \ No newline at end of file diff --git a/custom/modules/Prospects/metadata/detailviewdefs.php b/custom/modules/Prospects/metadata/detailviewdefs.php new file mode 100755 index 00000000000..09c18bba6ce --- /dev/null +++ b/custom/modules/Prospects/metadata/detailviewdefs.php @@ -0,0 +1,180 @@ + + array ( + 'DetailView' => + array ( + 'templateMeta' => + array ( + 'form' => + array ( + 'buttons' => + array ( + 0 => 'EDIT', + 1 => 'DUPLICATE', + 2 => 'DELETE', + 3 => + array ( + 'customCode' => '', + 'sugar_html' => + array ( + 'type' => 'submit', + 'value' => '{$MOD.LBL_CONVERT_BUTTON_LABEL}', + 'htmlOptions' => + array ( + 'class' => 'button', + 'name' => 'CONVERT_LEAD_BTN', + 'id' => 'convert_target_button', + 'title' => '{$MOD.LBL_CONVERT_BUTTON_TITLE}', + 'onclick' => 'this.form.return_module.value=\'Prospects\'; this.form.return_action.value=\'DetailView\'; this.form.return_id.value=\'{$fields.id.value}\';this.form.module.value=\'Leads\';this.form.action.value=\'EditView\';', + ), + ), + ), + 4 => + array ( + 'customCode' => '', + 'sugar_html' => + array ( + 'type' => 'submit', + 'value' => '{$APP.LBL_MANAGE_SUBSCRIPTIONS}', + 'htmlOptions' => + array ( + 'class' => 'button', + 'id' => 'manage_subscriptions_button', + 'name' => 'Manage Subscriptions', + 'title' => '{$APP.LBL_MANAGE_SUBSCRIPTIONS}', + 'onclick' => 'this.form.return_module.value=\'Prospects\'; this.form.return_action.value=\'DetailView\'; this.form.return_id.value=\'{$fields.id.value}\'; this.form.action.value=\'Subscriptions\'; this.form.module.value=\'Campaigns\';', + ), + ), + ), + ), + 'hidden' => + array ( + 0 => '', + ), + 'headerTpl' => 'modules/Prospects/tpls/DetailViewHeader.tpl', + ), + 'maxColumns' => '2', + 'widths' => + array ( + 0 => + array ( + 'label' => '10', + 'field' => '30', + ), + 1 => + array ( + 'label' => '10', + 'field' => '30', + ), + ), + ), + 'panels' => + array ( + 'lbl_prospect_information' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'full_name', + ), + ), + 1 => + array ( + 0 => 'title', + 1 => + array ( + 'name' => 'phone_work', + 'label' => 'LBL_OFFICE_PHONE', + ), + ), + 2 => + array ( + 0 => 'department', + 1 => 'phone_mobile', + ), + 3 => + array ( + 0 => + array ( + 'name' => 'account_name', + 'displayParams' => + array ( + 'enableConnectors' => true, + 'module' => 'Prospects', + 'connectors' => + array ( + 0 => 'ext_rest_linkedin', + ), + ), + ), + 1 => 'phone_fax', + ), + 4 => + array ( + 0 => + array ( + 'name' => 'primary_address_street', + 'label' => 'LBL_PRIMARY_ADDRESS', + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'primary', + ), + ), + 1 => + array ( + 'name' => 'alt_address_street', + 'label' => 'LBL_ALTERNATE_ADDRESS', + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'alt', + ), + ), + ), + 5 => + array ( + 0 => 'email1', + ), + 6 => + array ( + 0 => 'description', + ), + ), + 'LBL_MORE_INFORMATION' => + array ( + 0 => + array ( + 0 => 'email_opt_out', + 1 => 'do_not_call', + ), + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 0 => + array ( + 0 => 'assigned_user_name', + 1 => + array ( + 'name' => 'modified_by_name', + 'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value} ', + 'label' => 'LBL_DATE_MODIFIED', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'created_by_name', + 'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value} ', + 'label' => 'LBL_DATE_ENTERED', + ), + ), + ), + ), + ), + ), +); \ No newline at end of file diff --git a/custom/modules/Users/tpls/wizard.tpl b/custom/modules/Users/tpls/wizard.tpl old mode 100644 new mode 100755 diff --git a/custom/modules/logic_hooks.php b/custom/modules/logic_hooks.php index 705a4d29074..eadedf7cfc9 100755 --- a/custom/modules/logic_hooks.php +++ b/custom/modules/logic_hooks.php @@ -1,7 +1,7 @@ Date: Mon, 20 Jan 2014 12:27:42 +0000 Subject: [PATCH 081/223] Fixed --- .../ext/rest/facebook/facebook.class.php | 117 - .../sources/ext/rest/facebook/facebook.js | 46 - .../ext/rest/facebook/facebook_sdk/.gitignore | 6 - .../rest/facebook/facebook_sdk/.travis.yml | 6 - .../rest/facebook/facebook_sdk/changelog.md | 28 - .../rest/facebook/facebook_sdk/composer.json | 25 - .../facebook_sdk/examples/example.php | 107 - .../facebook_sdk/examples/with_js_sdk.php | 59 - .../ext/rest/facebook/facebook_sdk/readme.md | 115 - .../facebook_sdk/src/base_facebook.php | 1545 ------- .../facebook/facebook_sdk/src/facebook.php | 227 - .../facebook_sdk/src/fb_ca_chain_bundle.crt | 3920 ----------------- .../facebook/facebook_sdk/tests/bootstrap.php | 5 - .../facebook/facebook_sdk/tests/tests.php | 2125 --------- .../sources/ext/rest/facebook/facebookapi.php | 63 - .../sources/ext/rest/facebookAPI/config.php | 5 + .../ext/rest/facebookAPI/facebookAPI.php | 89 + .../rest/facebookAPI/language/en_us.lang.php | 14 + .../sources/ext/rest/facebookAPI/mapping.php | 7 + .../sources/ext/rest/facebookAPI/vardefs.php | 42 + .../sources/ext/rest/twitter/LICENSE.md | 21 - .../sources/ext/rest/twitter/README.md | 91 - .../ext/rest/twitter/TwitterAPIExchange.php | 263 -- .../sources/ext/rest/twitter/composer.json | 18 - .../sources/ext/rest/twitter/config.php | 9 + .../ext/rest/twitter/language/en_us.lang.php | 18 + .../sources/ext/rest/twitter/mapping.php | 13 + .../sources/ext/rest/twitter/twitter.css | 9 - .../sources/ext/rest/twitter/twitter.js | 22 - .../sources/ext/rest/twitter/twitter.php | 88 + .../rest/twitter/twitter_auth/callback.php | 40 - .../twitter/twitter_auth/images/darker.png | Bin 2370 -> 0 bytes .../twitter/twitter_auth/images/lighter.png | Bin 2490 -> 0 bytes .../ext/rest/twitter/twitter_auth/index.php | 33 - .../twitter_auth/twitteroauth/OAuth.php | 874 ---- .../twitteroauth/twitteroauth.php | 241 - .../ext/rest/twitter/twitter_process.php | 98 - .../sources/ext/rest/twitter/vardefs.php | 42 + .../Connectors/metadata/connectors.php | 29 +- .../Connectors/metadata/display_config.php | 11 +- .../Connectors/metadata/searchdefs.php | 28 + 41 files changed, 386 insertions(+), 10113 deletions(-) delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/tests.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/config.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/facebookAPI.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/language/en_us.lang.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/mapping.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/vardefs.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/LICENSE.md delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/README.md delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/config.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/language/en_us.lang.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/darker.png delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/lighter.png delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/index.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php delete mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php create mode 100755 custom/modules/Connectors/connectors/sources/ext/rest/twitter/vardefs.php create mode 100755 custom/modules/Connectors/metadata/searchdefs.php diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php deleted file mode 100755 index 9b84204d822..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.class.php +++ /dev/null @@ -1,117 +0,0 @@ - $config['properties']['appid'], - 'secret' => $config['properties']['secret'] - ); - $this->facebook = new Facebook($fb_config); - } - function get_my_user(){ - try { - // Proceed knowing you have a logged in user who's authenticated. - return $this->facebook->api('/me'); - } catch (FacebookApiException $e) { - error_log($e); - $user = null; - } - } - function get_my_newsfeed(){ - return $this->facebook->api('me/home'); //get my news feed - } - function get_other_newsfeed($user, $limit = "50"){ - return $this->facebook->api('/' . $user . '/feed?limit=' . $limit); - } - function get_login_url($url){ - $params = array( - 'scope' => 'read_stream, publish_stream' - - ); - - - return $this->facebook->getLoginUrl($params); - } - function get_logout_url(){ - return $this->facebook->getLogoutUrl(); - } - function get_facebook_user($username){ - return $this->facebook->api('/' . $username); - } - - function process_feed($story){ - switch($story['type']){ - case "status": - return $this->status($story); - break; - case "photo": - return $this->photo_status($story); - break; - case "link": - return $this->link_type($story); - case "video": - break; - } - } - function photo_status($story){ - - $string = ' - -
      - - -
      - - -
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      - '; - - - return $string; - } - - function status($story){ - - $string = ' - -
      - - ' . ' -
      - -
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      - - '; - - - return $string; - } - function link_type($story){ - $string = ' - -
      - '; - if($story['name']){ - $string .= ''; - }else{ - $string .= ''; - } - - $string .= ' -
      - -
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      - '; - - - return $string; - } -} -?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js deleted file mode 100755 index 97b86ce8d28..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Created by ian on 14/01/14. - */ - -$(function() { - //create new subpanel for social feeds - $("#subpanel_title_activities").before('

      Hide Social Feeds

      '); - - $("#show_socialfeeds").click(function( ) { - $("#SocialDiv").show(); - $("#show_socialfeeds").hide(); - $("#socialfeeds_show").show(); - $("#show").hide(); - - return false; - }); - $("#socialfeeds_show").click(function() { - - $("#SocialDiv").hide(); - $("#socialfeeds_show").hide(); - $("#show_socialfeeds").show(); - return false; - }); - - - //Ajax Call - username = $("#facebook_username_c").text(); - module = $("#formDetailView input[name=module]").val() - record = $("input[name=record]").val() - social = "facebook"; - url = document.URL; - - $.ajax({ - type: "POST", - url: "index.php?entryPoint=social&social=facebook&username=" + username + "&module=" + module + "&record=" + record, - data: { username: username, social: "facebook", url:url } - }) - .done(function( msg ) { - $("#facebook_feed").html( msg + $("#feed_history_c").html() ); - }); - -}); - - - - diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore deleted file mode 100755 index c2a70fcc4a2..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/coverage/ -vendor/ -composer.lock -composer.phar -.DS_Store -.idea/ diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml deleted file mode 100755 index 9c49978dfd7..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: php -php: - - 5.3 - - 5.4 - - 5.5 -script: phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md deleted file mode 100755 index 16728fe595f..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/changelog.md +++ /dev/null @@ -1,28 +0,0 @@ -Facebook PHP SDK (v.3.0.0) -========================== - -The new PHP SDK (v3.0.0) is a major upgrade to the older one (v2.2.x): - -- Uses OAuth authentication flows instead of our legacy authentication flow -- Consists of two classes. The first (class BaseFacebook) maintains the core of the upgrade, and the second one (class Facebook) is a small subclass that uses PHP sessions to store the user id and access token. - -If you’re currently using the PHP SDK (v2.2.x) for authentication, you will recall that the login code looked like this: - - $facebook = new Facebook(…); - $session = $facebook->getSession(); - if ($session) { - // proceed knowing you have a valid user session - } else { - // proceed knowing you require user login and/or authentication - } - -The login code is now: - - $facebook = new Facebook(…); - $user = $facebook->getUser(); - if ($user) { - // proceed knowing you have a logged in user who's authenticated - } else { - // proceed knowing you require user login and/or authentication - } - diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json deleted file mode 100755 index 38cba0167e6..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "facebook/php-sdk", - "description": "Facebook PHP SDK", - "keywords": ["facebook", "sdk"], - "type": "library", - "homepage": "https://github.com/facebook/facebook-php-sdk", - "license": "Apache2", - "authors": [ - { - "name": "Facebook", - "homepage": "https://github.com/facebook/facebook-php-sdk/contributors" - } - ], - "require": { - "php": ">=5.2.0", - "ext-curl": "*", - "ext-json": "*" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "autoload": { - "classmap": ["src"] - } -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php deleted file mode 100755 index 4c22fa96410..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/example.php +++ /dev/null @@ -1,107 +0,0 @@ - '344617158898614', - 'secret' => '6dc8ac871858b34798bc2488200e503d', -)); - -// Get User ID -$user = $facebook->getUser(); - -// We may or may not have this data based on whether the user is logged in. -// -// If we have a $user id here, it means we know the user is logged into -// Facebook, but we don't know if the access token is valid. An access -// token is invalid if the user logged out of Facebook. - -if ($user) { - try { - // Proceed knowing you have a logged in user who's authenticated. - $user_profile = $facebook->api('/me'); - } catch (FacebookApiException $e) { - error_log($e); - $user = null; - } -} - -// Login or logout url will be needed depending on current user state. -if ($user) { - $logoutUrl = $facebook->getLogoutUrl(); -} else { - $statusUrl = $facebook->getLoginStatusUrl(); - $loginUrl = $facebook->getLoginUrl(); -} - -// This call will always work since we are fetching public data. -$naitik = $facebook->api('/naitik'); - -?> - - - - php-sdk - - - -

      php-sdk

      - - - Logout - -
      - Check the login status using OAuth 2.0 handled by the PHP SDK: - Check the login status -
      -
      - Login using OAuth 2.0 handled by the PHP SDK: - Login with Facebook -
      - - -

      PHP Session

      -
      - - -

      You

      - - -

      Your User Object (/me)

      -
      - - You are not Connected. - - -

      Public profile of Naitik

      - - - - diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php deleted file mode 100755 index 4255a35c34a..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/examples/with_js_sdk.php +++ /dev/null @@ -1,59 +0,0 @@ - '344617158898614', - 'secret' => '6dc8ac871858b34798bc2488200e503d', -)); - -// See if there is a user from a cookie -$user = $facebook->getUser(); - -if ($user) { - try { - // Proceed knowing you have a logged in user who's authenticated. - $user_profile = $facebook->api('/me'); - } catch (FacebookApiException $e) { - echo '
      '.htmlspecialchars(print_r($e, true)).'
      '; - $user = null; - } -} - -?> - - - - - Your user profile is -
      -        
      -      
      - - - -
      - - - diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md deleted file mode 100755 index ecbfffe3d20..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/readme.md +++ /dev/null @@ -1,115 +0,0 @@ -Facebook PHP SDK (v.3.2.3) - -The [Facebook Platform](http://developers.facebook.com/) is -a set of APIs that make your app more social. - -This repository contains the open source PHP SDK that allows you to -access Facebook Platform from your PHP app. Except as otherwise noted, -the Facebook PHP SDK is licensed under the Apache Licence, Version 2.0 -(http://www.apache.org/licenses/LICENSE-2.0.html). - - -Usage ------ - -The [examples][examples] are a good place to start. The minimal you'll need to -have is: -```php -require 'facebook-php-sdk/src/facebook.php'; - -$facebook = new Facebook(array( - 'appId' => 'YOUR_APP_ID', - 'secret' => 'YOUR_APP_SECRET', -)); - -// Get User ID -$user = $facebook->getUser(); -``` - -To make [API][API] calls: -```php -if ($user) { - try { - // Proceed knowing you have a logged in user who's authenticated. - $user_profile = $facebook->api('/me'); - } catch (FacebookApiException $e) { - error_log($e); - $user = null; - } -} -``` - -You can make api calls by choosing the `HTTP method` and setting optional `parameters`: -```php -$facebook->api('/me/feed/', 'post', array( - 'message' => 'I want to display this message on my wall' -)); -``` - - -Login or logout url will be needed depending on current user state. -```php -if ($user) { - $logoutUrl = $facebook->getLogoutUrl(); -} else { - $loginUrl = $facebook->getLoginUrl(); -} -``` - -With Composer: - -- Add the `"facebook/php-sdk": "@stable"` into the `require` section of your `composer.json`. -- Run `composer install`. -- The example will look like - -```php -if (($loader = require_once __DIR__ . '/vendor/autoload.php') == null) { - die('Vendor directory not found, Please run composer install.'); -} - -$facebook = new Facebook(array( - 'appId' => 'YOUR_APP_ID', - 'secret' => 'YOUR_APP_SECRET', -)); - -// Get User ID -$user = $facebook->getUser(); -``` - -[examples]: /examples/example.php -[API]: http://developers.facebook.com/docs/api - -Tests ------ - -In order to keep us nimble and allow us to bring you new functionality, without -compromising on stability, we have ensured full test coverage of the SDK. -We are including this in the open source repository to assure you of our -commitment to quality, but also with the hopes that you will contribute back to -help keep it stable. The easiest way to do so is to file bugs and include a -test case. - -The tests can be executed by using this command from the base directory: - - phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php - - -Contributing -=========== -For us to accept contributions you will have to first have signed the -[Contributor License Agreement](https://developers.facebook.com/opensource/cla). - -When commiting, keep all lines to less than 80 characters, and try to -follow the existing style. - -Before creating a pull request, squash your commits into a single commit. - -Add the comments where needed, and provide ample explanation in the -commit message. - - -Report Issues/Bugs -=============== -[Bugs](https://developers.facebook.com/bugs) - -[Questions](http://facebook.stackoverflow.com) diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php deleted file mode 100755 index b9d403efb4f..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/base_facebook.php +++ /dev/null @@ -1,1545 +0,0 @@ - - */ -class FacebookApiException extends Exception -{ - /** - * The result from the API server that represents the exception information. - * - * @var mixed - */ - protected $result; - - /** - * Make a new API Exception with the given result. - * - * @param array $result The result from the API server - */ - public function __construct($result) { - $this->result = $result; - - $code = 0; - if (isset($result['error_code']) && is_int($result['error_code'])) { - $code = $result['error_code']; - } - - if (isset($result['error_description'])) { - // OAuth 2.0 Draft 10 style - $msg = $result['error_description']; - } else if (isset($result['error']) && is_array($result['error'])) { - // OAuth 2.0 Draft 00 style - $msg = $result['error']['message']; - } else if (isset($result['error_msg'])) { - // Rest server style - $msg = $result['error_msg']; - } else { - $msg = 'Unknown Error. Check getResult()'; - } - - parent::__construct($msg, $code); - } - - /** - * Return the associated result object returned by the API server. - * - * @return array The result from the API server - */ - public function getResult() { - return $this->result; - } - - /** - * Returns the associated type for the error. This will default to - * 'Exception' when a type is not available. - * - * @return string - */ - public function getType() { - if (isset($this->result['error'])) { - $error = $this->result['error']; - if (is_string($error)) { - // OAuth 2.0 Draft 10 style - return $error; - } else if (is_array($error)) { - // OAuth 2.0 Draft 00 style - if (isset($error['type'])) { - return $error['type']; - } - } - } - - return 'Exception'; - } - - /** - * To make debugging easier. - * - * @return string The string representation of the error - */ - public function __toString() { - $str = $this->getType() . ': '; - if ($this->code != 0) { - $str .= $this->code . ': '; - } - return $str . $this->message; - } -} - -/** - * Provides access to the Facebook Platform. This class provides - * a majority of the functionality needed, but the class is abstract - * because it is designed to be sub-classed. The subclass must - * implement the four abstract methods listed at the bottom of - * the file. - * - * @author Naitik Shah - */ -abstract class BaseFacebook -{ - /** - * Version. - */ - const VERSION = '3.2.3'; - - /** - * Signed Request Algorithm. - */ - const SIGNED_REQUEST_ALGORITHM = 'HMAC-SHA256'; - - /** - * Default options for curl. - * - * @var array - */ - public static $CURL_OPTS = array( - CURLOPT_CONNECTTIMEOUT => 10, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_TIMEOUT => 60, - CURLOPT_USERAGENT => 'facebook-php-3.2', - ); - - /** - * List of query parameters that get automatically dropped when rebuilding - * the current URL. - * - * @var array - */ - protected static $DROP_QUERY_PARAMS = array( - 'code', - 'state', - 'signed_request', - ); - - /** - * Maps aliases to Facebook domains. - * - * @var array - */ - public static $DOMAIN_MAP = array( - 'api' => 'https://api.facebook.com/', - 'api_video' => 'https://api-video.facebook.com/', - 'api_read' => 'https://api-read.facebook.com/', - 'graph' => 'https://graph.facebook.com/', - 'graph_video' => 'https://graph-video.facebook.com/', - 'www' => 'https://www.facebook.com/', - ); - - /** - * The Application ID. - * - * @var string - */ - protected $appId; - - /** - * The Application App Secret. - * - * @var string - */ - protected $appSecret; - - /** - * The ID of the Facebook user, or 0 if the user is logged out. - * - * @var integer - */ - protected $user; - - /** - * The data from the signed_request token. - * - * @var string - */ - protected $signedRequest; - - /** - * A CSRF state variable to assist in the defense against CSRF attacks. - * - * @var string - */ - protected $state; - - /** - * The OAuth access token received in exchange for a valid authorization - * code. null means the access token has yet to be determined. - * - * @var string - */ - protected $accessToken = null; - - /** - * Indicates if the CURL based @ syntax for file uploads is enabled. - * - * @var boolean - */ - protected $fileUploadSupport = false; - - /** - * Indicates if we trust HTTP_X_FORWARDED_* headers. - * - * @var boolean - */ - protected $trustForwarded = false; - - /** - * Indicates if signed_request is allowed in query parameters. - * - * @var boolean - */ - protected $allowSignedRequest = true; - - /** - * Initialize a Facebook Application. - * - * The configuration: - * - appId: the application ID - * - secret: the application secret - * - fileUpload: (optional) boolean indicating if file uploads are enabled - * - allowSignedRequest: (optional) boolean indicating if signed_request is - * allowed in query parameters or POST body. Should be - * false for non-canvas apps. Defaults to true. - * - * @param array $config The application configuration - */ - public function __construct($config) { - $this->setAppId($config['appId']); - $this->setAppSecret($config['secret']); - if (isset($config['fileUpload'])) { - $this->setFileUploadSupport($config['fileUpload']); - } - if (isset($config['trustForwarded']) && $config['trustForwarded']) { - $this->trustForwarded = true; - } - if (isset($config['allowSignedRequest']) - && !$config['allowSignedRequest']) { - $this->allowSignedRequest = false; - } - $state = $this->getPersistentData('state'); - if (!empty($state)) { - $this->state = $state; - } - } - - /** - * Set the Application ID. - * - * @param string $appId The Application ID - * - * @return BaseFacebook - */ - public function setAppId($appId) { - $this->appId = $appId; - return $this; - } - - /** - * Get the Application ID. - * - * @return string the Application ID - */ - public function getAppId() { - return $this->appId; - } - - /** - * Set the App Secret. - * - * @param string $apiSecret The App Secret - * - * @return BaseFacebook - * @deprecated Use setAppSecret instead. - * @see setAppSecret() - */ - public function setApiSecret($apiSecret) { - $this->setAppSecret($apiSecret); - return $this; - } - - /** - * Set the App Secret. - * - * @param string $appSecret The App Secret - * - * @return BaseFacebook - */ - public function setAppSecret($appSecret) { - $this->appSecret = $appSecret; - return $this; - } - - /** - * Get the App Secret. - * - * @return string the App Secret - * - * @deprecated Use getAppSecret instead. - * @see getAppSecret() - */ - public function getApiSecret() { - return $this->getAppSecret(); - } - - /** - * Get the App Secret. - * - * @return string the App Secret - */ - public function getAppSecret() { - return $this->appSecret; - } - - /** - * Set the file upload support status. - * - * @param boolean $fileUploadSupport The file upload support status. - * - * @return BaseFacebook - */ - public function setFileUploadSupport($fileUploadSupport) { - $this->fileUploadSupport = $fileUploadSupport; - return $this; - } - - /** - * Get the file upload support status. - * - * @return boolean true if and only if the server supports file upload. - */ - public function getFileUploadSupport() { - return $this->fileUploadSupport; - } - - /** - * Get the file upload support status. - * - * @return boolean true if and only if the server supports file upload. - * - * @deprecated Use getFileUploadSupport instead. - * @see getFileUploadSupport() - */ - public function useFileUploadSupport() { - return $this->getFileUploadSupport(); - } - - /** - * Sets the access token for api calls. Use this if you get - * your access token by other means and just want the SDK - * to use it. - * - * @param string $access_token an access token. - * - * @return BaseFacebook - */ - public function setAccessToken($access_token) { - $this->accessToken = $access_token; - return $this; - } - - /** - * Extend an access token, while removing the short-lived token that might - * have been generated via client-side flow. Thanks to http://bit.ly/b0Pt0H - * for the workaround. - */ - public function setExtendedAccessToken() { - try { - // need to circumvent json_decode by calling _oauthRequest - // directly, since response isn't JSON format. - $access_token_response = $this->_oauthRequest( - $this->getUrl('graph', '/oauth/access_token'), - $params = array( - 'client_id' => $this->getAppId(), - 'client_secret' => $this->getAppSecret(), - 'grant_type' => 'fb_exchange_token', - 'fb_exchange_token' => $this->getAccessToken(), - ) - ); - } - catch (FacebookApiException $e) { - // most likely that user very recently revoked authorization. - // In any event, we don't have an access token, so say so. - return false; - } - - if (empty($access_token_response)) { - return false; - } - - $response_params = array(); - parse_str($access_token_response, $response_params); - - if (!isset($response_params['access_token'])) { - return false; - } - - $this->destroySession(); - - $this->setPersistentData( - 'access_token', $response_params['access_token'] - ); - } - - /** - * Determines the access token that should be used for API calls. - * The first time this is called, $this->accessToken is set equal - * to either a valid user access token, or it's set to the application - * access token if a valid user access token wasn't available. Subsequent - * calls return whatever the first call returned. - * - * @return string The access token - */ - public function getAccessToken() { - if ($this->accessToken !== null) { - // we've done this already and cached it. Just return. - return $this->accessToken; - } - - // first establish access token to be the application - // access token, in case we navigate to the /oauth/access_token - // endpoint, where SOME access token is required. - $this->setAccessToken($this->getApplicationAccessToken()); - $user_access_token = $this->getUserAccessToken(); - if ($user_access_token) { - $this->setAccessToken($user_access_token); - } - - return $this->accessToken; - } - - /** - * Determines and returns the user access token, first using - * the signed request if present, and then falling back on - * the authorization code if present. The intent is to - * return a valid user access token, or false if one is determined - * to not be available. - * - * @return string A valid user access token, or false if one - * could not be determined. - */ - protected function getUserAccessToken() { - // first, consider a signed request if it's supplied. - // if there is a signed request, then it alone determines - // the access token. - $signed_request = $this->getSignedRequest(); - if ($signed_request) { - // apps.facebook.com hands the access_token in the signed_request - if (array_key_exists('oauth_token', $signed_request)) { - $access_token = $signed_request['oauth_token']; - $this->setPersistentData('access_token', $access_token); - return $access_token; - } - - // the JS SDK puts a code in with the redirect_uri of '' - if (array_key_exists('code', $signed_request)) { - $code = $signed_request['code']; - if ($code && $code == $this->getPersistentData('code')) { - // short-circuit if the code we have is the same as the one presented - return $this->getPersistentData('access_token'); - } - - $access_token = $this->getAccessTokenFromCode($code, ''); - if ($access_token) { - $this->setPersistentData('code', $code); - $this->setPersistentData('access_token', $access_token); - return $access_token; - } - } - - // signed request states there's no access token, so anything - // stored should be cleared. - $this->clearAllPersistentData(); - return false; // respect the signed request's data, even - // if there's an authorization code or something else - } - - $code = $this->getCode(); - if ($code && $code != $this->getPersistentData('code')) { - $access_token = $this->getAccessTokenFromCode($code); - if ($access_token) { - $this->setPersistentData('code', $code); - $this->setPersistentData('access_token', $access_token); - return $access_token; - } - - // code was bogus, so everything based on it should be invalidated. - $this->clearAllPersistentData(); - return false; - } - - // as a fallback, just return whatever is in the persistent - // store, knowing nothing explicit (signed request, authorization - // code, etc.) was present to shadow it (or we saw a code in $_REQUEST, - // but it's the same as what's in the persistent store) - return $this->getPersistentData('access_token'); - } - - /** - * Retrieve the signed request, either from a request parameter or, - * if not present, from a cookie. - * - * @return string the signed request, if available, or null otherwise. - */ - public function getSignedRequest() { - if (!$this->signedRequest) { - if ($this->allowSignedRequest && !empty($_REQUEST['signed_request'])) { - $this->signedRequest = $this->parseSignedRequest( - $_REQUEST['signed_request'] - ); - } else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) { - $this->signedRequest = $this->parseSignedRequest( - $_COOKIE[$this->getSignedRequestCookieName()]); - } - } - return $this->signedRequest; - } - - /** - * Get the UID of the connected user, or 0 - * if the Facebook user is not connected. - * - * @return string the UID if available. - */ - public function getUser() { - if ($this->user !== null) { - // we've already determined this and cached the value. - return $this->user; - } - - return $this->user = $this->getUserFromAvailableData(); - } - - /** - * Determines the connected user by first examining any signed - * requests, then considering an authorization code, and then - * falling back to any persistent store storing the user. - * - * @return integer The id of the connected Facebook user, - * or 0 if no such user exists. - */ - protected function getUserFromAvailableData() { - // if a signed request is supplied, then it solely determines - // who the user is. - $signed_request = $this->getSignedRequest(); - if ($signed_request) { - if (array_key_exists('user_id', $signed_request)) { - $user = $signed_request['user_id']; - - if($user != $this->getPersistentData('user_id')){ - $this->clearAllPersistentData(); - } - - $this->setPersistentData('user_id', $signed_request['user_id']); - return $user; - } - - // if the signed request didn't present a user id, then invalidate - // all entries in any persistent store. - $this->clearAllPersistentData(); - return 0; - } - - $user = $this->getPersistentData('user_id', $default = 0); - $persisted_access_token = $this->getPersistentData('access_token'); - - // use access_token to fetch user id if we have a user access_token, or if - // the cached access token has changed. - $access_token = $this->getAccessToken(); - if ($access_token && - $access_token != $this->getApplicationAccessToken() && - !($user && $persisted_access_token == $access_token)) { - $user = $this->getUserFromAccessToken(); - if ($user) { - $this->setPersistentData('user_id', $user); - } else { - $this->clearAllPersistentData(); - } - } - - return $user; - } - - /** - * Get a Login URL for use with redirects. By default, full page redirect is - * assumed. If you are using the generated URL with a window.open() call in - * JavaScript, you can pass in display=popup as part of the $params. - * - * The parameters: - * - redirect_uri: the url to go to after a successful login - * - scope: comma separated list of requested extended perms - * - * @param array $params Provide custom parameters - * @return string The URL for the login flow - */ - public function getLoginUrl($params=array()) { - $this->establishCSRFTokenState(); - $currentUrl = $this->getCurrentUrl(); - - // if 'scope' is passed as an array, convert to comma separated list - $scopeParams = isset($params['scope']) ? $params['scope'] : null; - if ($scopeParams && is_array($scopeParams)) { - $params['scope'] = implode(',', $scopeParams); - } - - return $this->getUrl( - 'www', - 'dialog/oauth', - array_merge( - array( - 'client_id' => $this->getAppId(), - 'redirect_uri' => $currentUrl, // possibly overwritten - 'state' => $this->state, - 'sdk' => 'php-sdk-'.self::VERSION - ), - $params - )); - } - - /** - * Get a Logout URL suitable for use with redirects. - * - * The parameters: - * - next: the url to go to after a successful logout - * - * @param array $params Provide custom parameters - * @return string The URL for the logout flow - */ - public function getLogoutUrl($params=array()) { - return $this->getUrl( - 'www', - 'logout.php', - array_merge(array( - 'next' => $this->getCurrentUrl(), - 'access_token' => $this->getUserAccessToken(), - ), $params) - ); - } - - /** - * Get a login status URL to fetch the status from Facebook. - * - * @param array $params Provide custom parameters - * @return string The URL for the logout flow - */ - public function getLoginStatusUrl($params=array()) { - return $this->getLoginUrl( - array_merge(array( - 'response_type' => 'code', - 'display' => 'none', - ), $params) - ); - } - - /** - * Make an API call. - * - * @return mixed The decoded response - */ - public function api(/* polymorphic */) { - $args = func_get_args(); - if (is_array($args[0])) { - return $this->_restserver($args[0]); - } else { - return call_user_func_array(array($this, '_graph'), $args); - } - } - - /** - * Constructs and returns the name of the cookie that - * potentially houses the signed request for the app user. - * The cookie is not set by the BaseFacebook class, but - * it may be set by the JavaScript SDK. - * - * @return string the name of the cookie that would house - * the signed request value. - */ - protected function getSignedRequestCookieName() { - return 'fbsr_'.$this->getAppId(); - } - - /** - * Constructs and returns the name of the cookie that potentially contain - * metadata. The cookie is not set by the BaseFacebook class, but it may be - * set by the JavaScript SDK. - * - * @return string the name of the cookie that would house metadata. - */ - protected function getMetadataCookieName() { - return 'fbm_'.$this->getAppId(); - } - - /** - * Get the authorization code from the query parameters, if it exists, - * and otherwise return false to signal no authorization code was - * discoverable. - * - * @return mixed The authorization code, or false if the authorization - * code could not be determined. - */ - protected function getCode() { - if (!isset($_REQUEST['code']) || !isset($_REQUEST['state'])) { - return false; - } - if ($this->state === $_REQUEST['state']) { - // CSRF state has done its job, so clear it - $this->state = null; - $this->clearPersistentData('state'); - return $_REQUEST['code']; - } - self::errorLog('CSRF state token does not match one provided.'); - - return false; - } - - /** - * Retrieves the UID with the understanding that - * $this->accessToken has already been set and is - * seemingly legitimate. It relies on Facebook's Graph API - * to retrieve user information and then extract - * the user ID. - * - * @return integer Returns the UID of the Facebook user, or 0 - * if the Facebook user could not be determined. - */ - protected function getUserFromAccessToken() { - try { - $user_info = $this->api('/me'); - return $user_info['id']; - } catch (FacebookApiException $e) { - return 0; - } - } - - /** - * Returns the access token that should be used for logged out - * users when no authorization code is available. - * - * @return string The application access token, useful for gathering - * public information about users and applications. - */ - public function getApplicationAccessToken() { - return $this->appId.'|'.$this->appSecret; - } - - /** - * Lays down a CSRF state token for this process. - * - * @return void - */ - protected function establishCSRFTokenState() { - if ($this->state === null) { - $this->state = md5(uniqid(mt_rand(), true)); - $this->setPersistentData('state', $this->state); - } - } - - /** - * Retrieves an access token for the given authorization code - * (previously generated from www.facebook.com on behalf of - * a specific user). The authorization code is sent to graph.facebook.com - * and a legitimate access token is generated provided the access token - * and the user for which it was generated all match, and the user is - * either logged in to Facebook or has granted an offline access permission. - * - * @param string $code An authorization code. - * @param string $redirect_uri Optional redirect URI. Default null - * - * @return mixed An access token exchanged for the authorization code, or - * false if an access token could not be generated. - */ - protected function getAccessTokenFromCode($code, $redirect_uri = null) { - if (empty($code)) { - return false; - } - - if ($redirect_uri === null) { - $redirect_uri = $this->getCurrentUrl(); - } - - try { - // need to circumvent json_decode by calling _oauthRequest - // directly, since response isn't JSON format. - $access_token_response = - $this->_oauthRequest( - $this->getUrl('graph', '/oauth/access_token'), - $params = array('client_id' => $this->getAppId(), - 'client_secret' => $this->getAppSecret(), - 'redirect_uri' => $redirect_uri, - 'code' => $code)); - } catch (FacebookApiException $e) { - // most likely that user very recently revoked authorization. - // In any event, we don't have an access token, so say so. - return false; - } - - if (empty($access_token_response)) { - return false; - } - - $response_params = array(); - parse_str($access_token_response, $response_params); - if (!isset($response_params['access_token'])) { - return false; - } - - return $response_params['access_token']; - } - - /** - * Invoke the old restserver.php endpoint. - * - * @param array $params Method call object - * - * @return mixed The decoded response object - * @throws FacebookApiException - */ - protected function _restserver($params) { - // generic application level parameters - $params['api_key'] = $this->getAppId(); - $params['format'] = 'json-strings'; - - $result = json_decode($this->_oauthRequest( - $this->getApiUrl($params['method']), - $params - ), true); - - // results are returned, errors are thrown - if (is_array($result) && isset($result['error_code'])) { - $this->throwAPIException($result); - // @codeCoverageIgnoreStart - } - // @codeCoverageIgnoreEnd - - $method = strtolower($params['method']); - if ($method === 'auth.expiresession' || - $method === 'auth.revokeauthorization') { - $this->destroySession(); - } - - return $result; - } - - /** - * Return true if this is video post. - * - * @param string $path The path - * @param string $method The http method (default 'GET') - * - * @return boolean true if this is video post - */ - protected function isVideoPost($path, $method = 'GET') { - if ($method == 'POST' && preg_match("/^(\/)(.+)(\/)(videos)$/", $path)) { - return true; - } - return false; - } - - /** - * Invoke the Graph API. - * - * @param string $path The path (required) - * @param string $method The http method (default 'GET') - * @param array $params The query/post data - * - * @return mixed The decoded response object - * @throws FacebookApiException - */ - protected function _graph($path, $method = 'GET', $params = array()) { - if (is_array($method) && empty($params)) { - $params = $method; - $method = 'GET'; - } - $params['method'] = $method; // method override as we always do a POST - - if ($this->isVideoPost($path, $method)) { - $domainKey = 'graph_video'; - } else { - $domainKey = 'graph'; - } - - $result = json_decode($this->_oauthRequest( - $this->getUrl($domainKey, $path), - $params - ), true); - - // results are returned, errors are thrown - if (is_array($result) && isset($result['error'])) { - $this->throwAPIException($result); - // @codeCoverageIgnoreStart - } - // @codeCoverageIgnoreEnd - - return $result; - } - - /** - * Make a OAuth Request. - * - * @param string $url The path (required) - * @param array $params The query/post data - * - * @return string The decoded response object - * @throws FacebookApiException - */ - protected function _oauthRequest($url, $params) { - if (!isset($params['access_token'])) { - $params['access_token'] = $this->getAccessToken(); - } - - if (isset($params['access_token']) && !isset($params['appsecret_proof'])) { - $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']); - } - - // json_encode all params values that are not strings - foreach ($params as $key => $value) { - if (!is_string($value) && !($value instanceof CURLFile)) { - $params[$key] = json_encode($value); - } - } - - return $this->makeRequest($url, $params); - } - - /** - * Generate a proof of App Secret - * This is required for all API calls originating from a server - * It is a sha256 hash of the access_token made using the app secret - * - * @param string $access_token The access_token to be hashed (required) - * - * @return string The sha256 hash of the access_token - */ - protected function getAppSecretProof($access_token) { - return hash_hmac('sha256', $access_token, $this->getAppSecret()); - } - - /** - * Makes an HTTP request. This method can be overridden by subclasses if - * developers want to do fancier things or use something other than curl to - * make the request. - * - * @param string $url The URL to make the request to - * @param array $params The parameters to use for the POST body - * @param CurlHandler $ch Initialized curl handle - * - * @return string The response text - */ - protected function makeRequest($url, $params, $ch=null) { - if (!$ch) { - $ch = curl_init(); - } - - $opts = self::$CURL_OPTS; - if ($this->getFileUploadSupport()) { - $opts[CURLOPT_POSTFIELDS] = $params; - } else { - $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); - } - $opts[CURLOPT_URL] = $url; - - // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait - // for 2 seconds if the server does not support this header. - if (isset($opts[CURLOPT_HTTPHEADER])) { - $existing_headers = $opts[CURLOPT_HTTPHEADER]; - $existing_headers[] = 'Expect:'; - $opts[CURLOPT_HTTPHEADER] = $existing_headers; - } else { - $opts[CURLOPT_HTTPHEADER] = array('Expect:'); - } - - curl_setopt_array($ch, $opts); - $result = curl_exec($ch); - - $errno = curl_errno($ch); - // CURLE_SSL_CACERT || CURLE_SSL_CACERT_BADFILE - if ($errno == 60 || $errno == 77) { - self::errorLog('Invalid or no certificate authority found, '. - 'using bundled information'); - curl_setopt($ch, CURLOPT_CAINFO, - dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fb_ca_chain_bundle.crt'); - $result = curl_exec($ch); - } - - // With dual stacked DNS responses, it's possible for a server to - // have IPv6 enabled but not have IPv6 connectivity. If this is - // the case, curl will try IPv4 first and if that fails, then it will - // fall back to IPv6 and the error EHOSTUNREACH is returned by the - // operating system. - if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) { - $matches = array(); - $regex = '/Failed to connect to ([^:].*): Network is unreachable/'; - if (preg_match($regex, curl_error($ch), $matches)) { - if (strlen(@inet_pton($matches[1])) === 16) { - self::errorLog('Invalid IPv6 configuration on server, '. - 'Please disable or get native IPv6 on your server.'); - self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; - curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); - $result = curl_exec($ch); - } - } - } - - if ($result === false) { - $e = new FacebookApiException(array( - 'error_code' => curl_errno($ch), - 'error' => array( - 'message' => curl_error($ch), - 'type' => 'CurlException', - ), - )); - curl_close($ch); - throw $e; - } - curl_close($ch); - return $result; - } - - /** - * Parses a signed_request and validates the signature. - * - * @param string $signed_request A signed token - * - * @return array The payload inside it or null if the sig is wrong - */ - protected function parseSignedRequest($signed_request) { - - if (!$signed_request || strpos($signed_request, '.') === false) { - self::errorLog('Signed request was invalid!'); - return null; - } - - list($encoded_sig, $payload) = explode('.', $signed_request, 2); - - // decode the data - $sig = self::base64UrlDecode($encoded_sig); - $data = json_decode(self::base64UrlDecode($payload), true); - - if (!isset($data['algorithm']) - || strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM - ) { - self::errorLog( - 'Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM); - return null; - } - - // check sig - $expected_sig = hash_hmac('sha256', $payload, - $this->getAppSecret(), $raw = true); - - if (strlen($expected_sig) !== strlen($sig)) { - self::errorLog('Bad Signed JSON signature!'); - return null; - } - - $result = 0; - for ($i = 0; $i < strlen($expected_sig); $i++) { - $result |= ord($expected_sig[$i]) ^ ord($sig[$i]); - } - - if ($result == 0) { - return $data; - } else { - self::errorLog('Bad Signed JSON signature!'); - return null; - } - } - - /** - * Makes a signed_request blob using the given data. - * - * @param array $data The data array. - * - * @return string The signed request. - */ - protected function makeSignedRequest($data) { - if (!is_array($data)) { - throw new InvalidArgumentException( - 'makeSignedRequest expects an array. Got: ' . print_r($data, true)); - } - $data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM; - $data['issued_at'] = time(); - $json = json_encode($data); - $b64 = self::base64UrlEncode($json); - $raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true); - $sig = self::base64UrlEncode($raw_sig); - return $sig.'.'.$b64; - } - - /** - * Build the URL for api given parameters. - * - * @param string $method The method name. - * - * @return string The URL for the given parameters - */ - protected function getApiUrl($method) { - static $READ_ONLY_CALLS = - array('admin.getallocation' => 1, - 'admin.getappproperties' => 1, - 'admin.getbannedusers' => 1, - 'admin.getlivestreamvialink' => 1, - 'admin.getmetrics' => 1, - 'admin.getrestrictioninfo' => 1, - 'application.getpublicinfo' => 1, - 'auth.getapppublickey' => 1, - 'auth.getsession' => 1, - 'auth.getsignedpublicsessiondata' => 1, - 'comments.get' => 1, - 'connect.getunconnectedfriendscount' => 1, - 'dashboard.getactivity' => 1, - 'dashboard.getcount' => 1, - 'dashboard.getglobalnews' => 1, - 'dashboard.getnews' => 1, - 'dashboard.multigetcount' => 1, - 'dashboard.multigetnews' => 1, - 'data.getcookies' => 1, - 'events.get' => 1, - 'events.getmembers' => 1, - 'fbml.getcustomtags' => 1, - 'feed.getappfriendstories' => 1, - 'feed.getregisteredtemplatebundlebyid' => 1, - 'feed.getregisteredtemplatebundles' => 1, - 'fql.multiquery' => 1, - 'fql.query' => 1, - 'friends.arefriends' => 1, - 'friends.get' => 1, - 'friends.getappusers' => 1, - 'friends.getlists' => 1, - 'friends.getmutualfriends' => 1, - 'gifts.get' => 1, - 'groups.get' => 1, - 'groups.getmembers' => 1, - 'intl.gettranslations' => 1, - 'links.get' => 1, - 'notes.get' => 1, - 'notifications.get' => 1, - 'pages.getinfo' => 1, - 'pages.isadmin' => 1, - 'pages.isappadded' => 1, - 'pages.isfan' => 1, - 'permissions.checkavailableapiaccess' => 1, - 'permissions.checkgrantedapiaccess' => 1, - 'photos.get' => 1, - 'photos.getalbums' => 1, - 'photos.gettags' => 1, - 'profile.getinfo' => 1, - 'profile.getinfooptions' => 1, - 'stream.get' => 1, - 'stream.getcomments' => 1, - 'stream.getfilters' => 1, - 'users.getinfo' => 1, - 'users.getloggedinuser' => 1, - 'users.getstandardinfo' => 1, - 'users.hasapppermission' => 1, - 'users.isappuser' => 1, - 'users.isverified' => 1, - 'video.getuploadlimits' => 1); - $name = 'api'; - if (isset($READ_ONLY_CALLS[strtolower($method)])) { - $name = 'api_read'; - } else if (strtolower($method) == 'video.upload') { - $name = 'api_video'; - } - return self::getUrl($name, 'restserver.php'); - } - - /** - * Build the URL for given domain alias, path and parameters. - * - * @param string $name The name of the domain - * @param string $path Optional path (without a leading slash) - * @param array $params Optional query parameters - * - * @return string The URL for the given parameters - */ - protected function getUrl($name, $path='', $params=array()) { - $url = self::$DOMAIN_MAP[$name]; - if ($path) { - if ($path[0] === '/') { - $path = substr($path, 1); - } - $url .= $path; - } - if ($params) { - $url .= '?' . http_build_query($params, null, '&'); - } - - return $url; - } - - /** - * Returns the HTTP Host - * - * @return string The HTTP Host - */ - protected function getHttpHost() { - if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { - $forwardProxies = explode(',', $_SERVER['HTTP_X_FORWARDED_HOST']); - if (!empty($forwardProxies)) { - return $forwardProxies[0]; - } - } - return $_SERVER['HTTP_HOST']; - } - - /** - * Returns the HTTP Protocol - * - * @return string The HTTP Protocol - */ - protected function getHttpProtocol() { - if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { - if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { - return 'https'; - } - return 'http'; - } - /*apache + variants specific way of checking for https*/ - if (isset($_SERVER['HTTPS']) && - ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) { - return 'https'; - } - /*nginx way of checking for https*/ - if (isset($_SERVER['SERVER_PORT']) && - ($_SERVER['SERVER_PORT'] === '443')) { - return 'https'; - } - return 'http'; - } - - /** - * Returns the base domain used for the cookie. - * - * @return string The base domain - */ - protected function getBaseDomain() { - // The base domain is stored in the metadata cookie if not we fallback - // to the current hostname - $metadata = $this->getMetadataCookie(); - if (array_key_exists('base_domain', $metadata) && - !empty($metadata['base_domain'])) { - return trim($metadata['base_domain'], '.'); - } - return $this->getHttpHost(); - } - - /** - * Returns the Current URL, stripping it of known FB parameters that should - * not persist. - * - * @return string The current URL - */ - protected function getCurrentUrl() { - $protocol = $this->getHttpProtocol() . '://'; - $host = $this->getHttpHost(); - $currentUrl = $protocol.$host.$_SERVER['REQUEST_URI']; - $parts = parse_url($currentUrl); - - $query = ''; - if (!empty($parts['query'])) { - // drop known fb params - $params = explode('&', $parts['query']); - $retained_params = array(); - foreach ($params as $param) { - if ($this->shouldRetainParam($param)) { - $retained_params[] = $param; - } - } - - if (!empty($retained_params)) { - $query = '?'.implode($retained_params, '&'); - } - } - - // use port if non default - $port = - isset($parts['port']) && - (($protocol === 'http://' && $parts['port'] !== 80) || - ($protocol === 'https://' && $parts['port'] !== 443)) - ? ':' . $parts['port'] : ''; - - // rebuild - return $protocol . $parts['host'] . $port . $parts['path'] . $query; - } - - /** - * Returns true if and only if the key or key/value pair should - * be retained as part of the query string. This amounts to - * a brute-force search of the very small list of Facebook-specific - * params that should be stripped out. - * - * @param string $param A key or key/value pair within a URL's query (e.g. - * 'foo=a', 'foo=', or 'foo'. - * - * @return boolean - */ - protected function shouldRetainParam($param) { - foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) { - if ($param === $drop_query_param || - strpos($param, $drop_query_param.'=') === 0) { - return false; - } - } - - return true; - } - - /** - * Analyzes the supplied result to see if it was thrown - * because the access token is no longer valid. If that is - * the case, then we destroy the session. - * - * @param array $result A record storing the error message returned - * by a failed API call. - */ - protected function throwAPIException($result) { - $e = new FacebookApiException($result); - switch ($e->getType()) { - // OAuth 2.0 Draft 00 style - case 'OAuthException': - // OAuth 2.0 Draft 10 style - case 'invalid_token': - // REST server errors are just Exceptions - case 'Exception': - $message = $e->getMessage(); - if ((strpos($message, 'Error validating access token') !== false) || - (strpos($message, 'Invalid OAuth access token') !== false) || - (strpos($message, 'An active access token must be used') !== false) - ) { - $this->destroySession(); - } - break; - } - - throw $e; - } - - - /** - * Prints to the error log if you aren't in command line mode. - * - * @param string $msg Log message - */ - protected static function errorLog($msg) { - // disable error log if we are running in a CLI environment - // @codeCoverageIgnoreStart - if (php_sapi_name() != 'cli') { - error_log($msg); - } - // uncomment this if you want to see the errors on the page - // print 'error_log: '.$msg."\n"; - // @codeCoverageIgnoreEnd - } - - /** - * Base64 encoding that doesn't need to be urlencode()ed. - * Exactly the same as base64_encode except it uses - * - instead of + - * _ instead of / - * No padded = - * - * @param string $input base64UrlEncoded input - * - * @return string The decoded string - */ - protected static function base64UrlDecode($input) { - return base64_decode(strtr($input, '-_', '+/')); - } - - /** - * Base64 encoding that doesn't need to be urlencode()ed. - * Exactly the same as base64_encode except it uses - * - instead of + - * _ instead of / - * - * @param string $input The input to encode - * @return string The base64Url encoded input, as a string. - */ - protected static function base64UrlEncode($input) { - $str = strtr(base64_encode($input), '+/', '-_'); - $str = str_replace('=', '', $str); - return $str; - } - - /** - * Destroy the current session - */ - public function destroySession() { - $this->accessToken = null; - $this->signedRequest = null; - $this->user = null; - $this->clearAllPersistentData(); - - // Javascript sets a cookie that will be used in getSignedRequest that we - // need to clear if we can - $cookie_name = $this->getSignedRequestCookieName(); - if (array_key_exists($cookie_name, $_COOKIE)) { - unset($_COOKIE[$cookie_name]); - if (!headers_sent()) { - $base_domain = $this->getBaseDomain(); - setcookie($cookie_name, '', 1, '/', '.'.$base_domain); - } else { - // @codeCoverageIgnoreStart - self::errorLog( - 'There exists a cookie that we wanted to clear that we couldn\'t '. - 'clear because headers was already sent. Make sure to do the first '. - 'API call before outputing anything.' - ); - // @codeCoverageIgnoreEnd - } - } - } - - /** - * Parses the metadata cookie that our Javascript API set - * - * @return array an array mapping key to value - */ - protected function getMetadataCookie() { - $cookie_name = $this->getMetadataCookieName(); - if (!array_key_exists($cookie_name, $_COOKIE)) { - return array(); - } - - // The cookie value can be wrapped in "-characters so remove them - $cookie_value = trim($_COOKIE[$cookie_name], '"'); - - if (empty($cookie_value)) { - return array(); - } - - $parts = explode('&', $cookie_value); - $metadata = array(); - foreach ($parts as $part) { - $pair = explode('=', $part, 2); - if (!empty($pair[0])) { - $metadata[urldecode($pair[0])] = - (count($pair) > 1) ? urldecode($pair[1]) : ''; - } - } - - return $metadata; - } - - /** - * Finds whether the given domain is allowed or not - * - * @param string $big The value to be checked against $small - * @param string $small The input string - * - * @return boolean Returns TRUE if $big matches $small - */ - protected static function isAllowedDomain($big, $small) { - if ($big === $small) { - return true; - } - return self::endsWith($big, '.'.$small); - } - - /** - * Checks if $big string ends with $small string - * - * @param string $big The value to be checked against $small - * @param string $small The input string - * - * @return boolean TRUE if $big ends with $small - */ - protected static function endsWith($big, $small) { - $len = strlen($small); - if ($len === 0) { - return true; - } - return substr($big, -$len) === $small; - } - - /** - * Each of the following four methods should be overridden in - * a concrete subclass, as they are in the provided Facebook class. - * The Facebook class uses PHP sessions to provide a primitive - * persistent store, but another subclass--one that you implement-- - * might use a database, memcache, or an in-memory cache. - * - * @see Facebook - */ - - /** - * Stores the given ($key, $value) pair, so that future calls to - * getPersistentData($key) return $value. This call may be in another request. - * - * @param string $key - * @param array $value - * - * @return void - */ - abstract protected function setPersistentData($key, $value); - - /** - * Get the data for $key, persisted by BaseFacebook::setPersistentData() - * - * @param string $key The key of the data to retrieve - * @param boolean $default The default value to return if $key is not found - * - * @return mixed - */ - abstract protected function getPersistentData($key, $default = false); - - /** - * Clear the data with $key from the persistent storage - * - * @param string $key - * - * @return void - */ - abstract protected function clearPersistentData($key); - - /** - * Clear all data from the persistent storage - * - * @return void - */ - abstract protected function clearAllPersistentData(); -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php deleted file mode 100755 index 51de333b352..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/facebook.php +++ /dev/null @@ -1,227 +0,0 @@ -initSharedSession(); - - // re-load the persisted state, since parent - // attempted to read out of non-shared cookie - $state = $this->getPersistentData('state'); - if (!empty($state)) { - $this->state = $state; - } else { - $this->state = null; - } - - } - } - - /** - * Supported keys for persistent data - * - * @var array - */ - protected static $kSupportedKeys = - array('state', 'code', 'access_token', 'user_id'); - - /** - * Initiates Shared Session - */ - protected function initSharedSession() { - $cookie_name = $this->getSharedSessionCookieName(); - if (isset($_COOKIE[$cookie_name])) { - $data = $this->parseSignedRequest($_COOKIE[$cookie_name]); - if ($data && !empty($data['domain']) && - self::isAllowedDomain($this->getHttpHost(), $data['domain'])) { - // good case - $this->sharedSessionID = $data['id']; - return; - } - // ignoring potentially unreachable data - } - // evil/corrupt/missing case - $base_domain = $this->getBaseDomain(); - $this->sharedSessionID = md5(uniqid(mt_rand(), true)); - $cookie_value = $this->makeSignedRequest( - array( - 'domain' => $base_domain, - 'id' => $this->sharedSessionID, - ) - ); - $_COOKIE[$cookie_name] = $cookie_value; - if (!headers_sent()) { - $expire = time() + self::FBSS_COOKIE_EXPIRE; - setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain); - } else { - // @codeCoverageIgnoreStart - self::errorLog( - 'Shared session ID cookie could not be set! You must ensure you '. - 'create the Facebook instance before headers have been sent. This '. - 'will cause authentication issues after the first request.' - ); - // @codeCoverageIgnoreEnd - } - } - - /** - * Provides the implementations of the inherited abstract - * methods. The implementation uses PHP sessions to maintain - * a store for authorization codes, user ids, CSRF states, and - * access tokens. - */ - - /** - * {@inheritdoc} - * - * @see BaseFacebook::setPersistentData() - */ - protected function setPersistentData($key, $value) { - if (!in_array($key, self::$kSupportedKeys)) { - self::errorLog('Unsupported key passed to setPersistentData.'); - return; - } - - $session_var_name = $this->constructSessionVariableName($key); - $_SESSION[$session_var_name] = $value; - } - - /** - * {@inheritdoc} - * - * @see BaseFacebook::getPersistentData() - */ - protected function getPersistentData($key, $default = false) { - if (!in_array($key, self::$kSupportedKeys)) { - self::errorLog('Unsupported key passed to getPersistentData.'); - return $default; - } - - $session_var_name = $this->constructSessionVariableName($key); - return isset($_SESSION[$session_var_name]) ? - $_SESSION[$session_var_name] : $default; - } - - /** - * {@inheritdoc} - * - * @see BaseFacebook::clearPersistentData() - */ - protected function clearPersistentData($key) { - if (!in_array($key, self::$kSupportedKeys)) { - self::errorLog('Unsupported key passed to clearPersistentData.'); - return; - } - - $session_var_name = $this->constructSessionVariableName($key); - if (isset($_SESSION[$session_var_name])) { - unset($_SESSION[$session_var_name]); - } - } - - /** - * {@inheritdoc} - * - * @see BaseFacebook::clearAllPersistentData() - */ - protected function clearAllPersistentData() { - foreach (self::$kSupportedKeys as $key) { - $this->clearPersistentData($key); - } - if ($this->sharedSessionID) { - $this->deleteSharedSessionCookie(); - } - } - - /** - * Deletes Shared session cookie - */ - protected function deleteSharedSessionCookie() { - $cookie_name = $this->getSharedSessionCookieName(); - unset($_COOKIE[$cookie_name]); - $base_domain = $this->getBaseDomain(); - setcookie($cookie_name, '', 1, '/', '.'.$base_domain); - } - - /** - * Returns the Shared session cookie name - * - * @return string The Shared session cookie name - */ - protected function getSharedSessionCookieName() { - return self::FBSS_COOKIE_NAME . '_' . $this->getAppId(); - } - - /** - * Constructs and returns the name of the session key. - * - * @see setPersistentData() - * @param string $key The key for which the session variable name to construct. - * - * @return string The name of the session key. - */ - protected function constructSessionVariableName($key) { - $parts = array('fb', $this->getAppId(), $key); - if ($this->sharedSessionID) { - array_unshift($parts, $this->sharedSessionID); - } - return implode('_', $parts); - } -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt deleted file mode 100755 index 969239ff676..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/src/fb_ca_chain_bundle.crt +++ /dev/null @@ -1,3920 +0,0 @@ -## -## ca-bundle.crt -- Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012 -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## - -# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $ - -GTE CyberTrust Global Root -========================== ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg -Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG -A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz -MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL -Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 -IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u -sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql -HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID -AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW -M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF -NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -Thawte Server CA -================ ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE -AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j -b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV -BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u -c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG -A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 -ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl -/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 -1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J -GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ -GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -Thawte Premium Server CA -======================== ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE -AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl -ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU -VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 -aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ -cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 -aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh -Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ -qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm -SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf -8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t -UCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE -ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT -B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR -fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW -8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE -CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS -spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 -zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB -BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 -70+sB3c4 ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 1 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy -MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE -NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i -o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq -kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 -RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 3 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy -MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD -VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS -xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi -up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 -mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA -TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah -WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf -Tqj/ZA1k ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd -k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq -WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM -XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC -lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx -nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC -wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA -ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK -1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk -LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO -FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 -lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT -1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD -Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 ------END CERTIFICATE----- - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -ValiCert Class 1 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy -MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi -GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm -DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG -lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX -icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP -Orf1LXLI ------END CERTIFICATE----- - -ValiCert Class 2 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC -CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf -ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ -SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV -UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 -W9ViH0Pd ------END CERTIFICATE----- - -RSA Root Certificate 1 -====================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td -3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H -BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs -3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF -V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r -on+jjBXu ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E -bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ -rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ -Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB -FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N -y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h -a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc -D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y -azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug -b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 -tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 -C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS -0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs -Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 -JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf -0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx -JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j -GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS -tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM -8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW -Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX -Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt -mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd -RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG -UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -Entrust.net Secure Server CA -============================ ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg -cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl -ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG -A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi -eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p -dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ -aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 -gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw -ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw -CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l -dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw -NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow -HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN -Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 -n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC -AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER -gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B -AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS -o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z -2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX -OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -Equifax Secure Global eBusiness CA -================================== ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp -bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx -HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds -b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV -PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN -qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn -hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs -MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN -I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY -NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 1 -============================= ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB -LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE -ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz -IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ -1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a -IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk -MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW -Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF -AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 -lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ -KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 2 -============================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE -ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y -MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT -DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn -2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 -BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx -JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e -uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 -jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia -78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm -V+GRMOrN ------END CERTIFICATE----- - -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU -cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw -CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO -ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 -54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr -oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 -Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui -GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w -HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT -RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw -HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt -ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph -iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr -mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj -ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU -cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ -BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l -dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu -nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i -d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG -Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw -HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G -A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G -A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 -JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL -+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 -Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H -EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU -cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx -CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ -IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx -64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 -KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o -L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR -wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU -MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE -BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y -azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG -GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze -RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB -iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -RSA Security 2048 v3 -==================== ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK -ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy -MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb -BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 -Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb -WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH -KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP -+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E -FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY -v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj -0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj -VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 -nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA -pKnXwiJPZ9d37CAFYd4= ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw -MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ -NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k -LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA -Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b -HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH -K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 -srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh -ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL -OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC -x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF -H4z1Ir+rzoPz4iIprn2DQKi6bA== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -UTN-USER First-Network Applications -=================================== ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp -BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 -WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T -YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB -cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug -mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj -DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu -Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi -P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE -j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w -HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j -cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G -CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK -RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp -xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq -DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- - -America Online Root Certification Authority 1 -============================================= ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG -v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z -DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh -sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP -8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z -o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf -GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF -VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft -3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g -Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -America Online Root Certification Authority 2 -============================================= ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en -fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 -f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO -qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN -RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 -gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn -6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid -FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 -Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj -B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op -aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY -T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p -+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg -JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy -zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO -ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh -1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf -GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff -Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP -cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK -ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla -Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u -by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x -wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL -kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ -89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K -Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P -NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ -GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg -GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ -0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS -qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw -MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu -Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi -BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP -9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc -rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC -oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V -p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E -FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj -YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm -aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm -4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL -DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw -pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H -RR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw -MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h -bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw -IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 -3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y -/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 -juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS -ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud -DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp -ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl -cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw -uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA -BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l -R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O -9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx -ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 -XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk -lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB -lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy -lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt -66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn -wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh -D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy -BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie -J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud -DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU -a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv -Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 -UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm -VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK -+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW -IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 -WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X -f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II -4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 -VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx -OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg -DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij -KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K -DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv -BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp -p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 -nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX -MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM -Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz -uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT -BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj -YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB -BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD -VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 -ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE -AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV -qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s -hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z -POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 -Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp -8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC -bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu -g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p -vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr -qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 1 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw -NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 -7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 -EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl -0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 -2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa -HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT -iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 -28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV -yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR -vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P -qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z -IRlXvVWa ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -Staat der Nederlanden Root CA -============================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE -ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w -HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh -bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt -vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P -jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca -C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth -vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 -22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV -HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v -dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN -BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR -EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw -MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y -nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -TDC Internet Root CA -==================== ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE -ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx -NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu -ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j -xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL -znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc -5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 -otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI -AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM -VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM -MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC -AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe -UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G -CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m -gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb -O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU -Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - -TDC OCES Root CA -================ ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE -ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 -MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH -nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 -zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV -iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde -dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO -3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB -5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k -ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm -cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp -Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x -LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM -MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm -aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 -+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 -NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 -A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc -A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 -AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 -AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- - -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ -BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa -MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w -HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy -dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys -raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo -wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA -9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv -33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud -DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 -BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD -LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 -DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 -I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx -EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP -DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -UTN USERFirst Email Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 -BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 -OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx -FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx -ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz -dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx -B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 -om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG -TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl -yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE -AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV -HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll -bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne -xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ -5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV -NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ -w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- - -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd -BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx -OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 -eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz -ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI -wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd -tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 -i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf -Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw -gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF -lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF -UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF -BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW -XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 -lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn -iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 -nfhmqA== ------END CERTIFICATE----- - -UTN USERFirst Object Root CA -============================ ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb -BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz -NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx -HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy -dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR -loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ -w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu -lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 -RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL -BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 -ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly -c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw -DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO -PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE -qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG -hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx -NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp -cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn -MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU -xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH -NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW -DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV -d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud -EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v -cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P -AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh -bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD -VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi -fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD -L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN -UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n -ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 -erfutGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx -NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt -YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg -MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw -ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J -1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O -by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl -6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c -8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ -BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j -aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B -Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj -aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y -ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA -PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y -gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ -PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 -IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes -t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -NetLock Qualified (Class QA) Root -================================= ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn -eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 -bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 -LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 -dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP -aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV -CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e -8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb -m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ -0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM -0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 -YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p -a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz -YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg -YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg -ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov -L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr -Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 -aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg -YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 -IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 -DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN -wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg -W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc -R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR -5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- - -NetLock Notary (Class A) Root -============================= ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI -EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j -ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX -DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH -EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD -VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz -cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM -D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ -z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC -/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 -tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 -4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG -A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC -Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv -bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn -LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 -ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz -IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh -IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu -b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg -Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp -bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 -ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP -ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB -CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr -KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM -8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -NetLock Business (Class B) Root -=============================== ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg -VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD -VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv -bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg -VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S -o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr -1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ -RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh -dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 -ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv -c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg -YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz -Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA -bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl -IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 -YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj -cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM -43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR -stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -NetLock Express (Class C) Root -============================== ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ -BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j -ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z -W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 -euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw -DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN -RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn -YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB -IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i -aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 -ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y -emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k -IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ -UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg -YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 -xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW -gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj -YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH -AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw -Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg -U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 -LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh -cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT -dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC -AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh -3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm -vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk -fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 -fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ -EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl -1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ -lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro -g14= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - -Firmaprofesional Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT -GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp -Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA -ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL -MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT -OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 -ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V -j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH -lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf -3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 -NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww -KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG -AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD -ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf -wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm -7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG -VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -Wells Fargo Root CA -=================== ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl -bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv -MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX -x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 -E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 -OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j -sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj -YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF -BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD -ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv -m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R -OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 -tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- - -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG -EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy -dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 -MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln -aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC -IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM -MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF -NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe -AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC -b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn -7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN -cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp -WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 -haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY -MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw -HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 -MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn -jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ -MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H -VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl -vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl -OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 -1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq -nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy -x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW -NY6E0F/6MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT -MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha -MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE -CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI -DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa -pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow -GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy -MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu -Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy -dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU -CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 -5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t -Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs -vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 -oKfN5XozNmr6mis= ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP -MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 -acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx -MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB -TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC -aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX -yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i -Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ -8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 -W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME -BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 -sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE -q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY -nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN -MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr -dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G -A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls -acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe -LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI -x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g -QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr -5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB -AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt -Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ -hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P -9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 -UrbnBEI= ------END CERTIFICATE----- - -SwissSign Platinum CA - G2 -========================== ------BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw -HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM -U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu -669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF -eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne -WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo -j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 -8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T -aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy -domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D -+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV -CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv -zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 -Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 -NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 -U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 -KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl -9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B -aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs -OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY -Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci -IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw -EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN -MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp -c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq -t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C -jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg -vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF -ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR -AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend -jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO -peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR -7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi -GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 -OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm -5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr -44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf -Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m -Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp -mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk -vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf -KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br -NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj -viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X -DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 -aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 -N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm -+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH -6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu -MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h -qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 -FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs -ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc -celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X -CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB -tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P -4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F -kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L -3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx -/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa -DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP -e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu -WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ -DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub -DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -WellsSecure Public Root Certificate Authority -============================================= ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM -F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw -NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl -bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD -VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 -iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 -i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 -bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB -K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB -AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu -cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm -lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB -i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww -GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI -K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 -bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj -qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es -E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ -tylv2G0xffX8oRAHh84vWdw+WNs= ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -IGC/A -===== ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD -VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE -Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy -MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI -EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT -STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 -TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW -So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy -HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd -frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ -tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB -egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC -iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK -q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q -MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI -lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF -0mBWWg== ------END CERTIFICATE----- - -Security Communication EV RootCA1 -================================= ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE -BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl -Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO -/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX -WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z -ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 -bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK -9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm -iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG -Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW -mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW -T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE -BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG -A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH -bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD -VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw -IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 -IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 -Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg -Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD -d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ -/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R -LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm -MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 -+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY -okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= ------END CERTIFICATE----- - -S-TRUST Authentication and Encryption Root CA 2005 PN -===================================================== ------BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh -cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT -LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w -NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk -ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj -aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp -b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob -4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL -g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf -eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 -KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB -/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv -bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU -D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD -pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 -P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA -nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit -F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b -Hz2eBIPdltkdOpQ= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA -========================= ------BEGIN CERTIFICATE----- -MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE -BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL -EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 -MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz -dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT -GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG -d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N -oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc -QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ -PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb -MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG -IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD -VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 -LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A -dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn -AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA -4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg -AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA -egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 -Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO -PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv -c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h -cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw -IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT -WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV -MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp -Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal -HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT -nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE -aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a -86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK -yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB -S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. -====================================== ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT -AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg -LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w -HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ -U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh -IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN -yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU -2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 -4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP -2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm -8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf -HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa -Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK -5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b -czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g -ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF -BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug -cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf -AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX -EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v -/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 -MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 -3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk -eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f -/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h -RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU -Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== ------END CERTIFICATE----- - -TC TrustCenter Class 2 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw -MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw -IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 -xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ -Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u -SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G -dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ -KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj -TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP -JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk -vQ== ------END CERTIFICATE----- - -TC TrustCenter Class 3 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw -MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W -yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo -6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ -uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk -2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE -O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 -yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 -IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal -092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc -5A== ------END CERTIFICATE----- - -TC TrustCenter Universal CA I -============================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN -MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg -VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw -JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC -qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv -xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw -ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O -gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j -BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG -1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy -vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 -ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a -7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT -RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG -A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 -MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G -A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS -b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 -bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI -KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY -AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK -Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV -jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV -HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr -E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy -zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 -rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G -dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -ComSign CA -========== ------BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD -EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy -MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp -Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q -ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy -P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN -GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk -YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM -rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy -oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P -AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ -VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 -QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI -mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb -/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG -zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U -AGegcQCCSA== ------END CERTIFICATE----- - -ComSign Secured CA -================== ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE -AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w -NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD -QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs -49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH -7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB -kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 -9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw -AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t -U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA -j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC -AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a -BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp -FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP -51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 -============================================================================================================================= ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH -DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q -aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry -b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV -BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg -S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 -MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl -IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF -n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl -IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft -dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl -cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO -Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 -xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR -6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd -BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 -N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT -y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh -LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M -dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= ------END CERTIFICATE----- - -Buypass Class 2 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 -MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M -cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 -0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 -0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R -uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV -1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt -7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 -fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w -wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho ------END CERTIFICATE----- - -Buypass Class 3 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 -MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx -ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 -n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia -AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c -1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 -pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA -EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 -htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj -el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - -EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 -========================================================================== ------BEGIN CERTIFICATE----- -MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg -QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe -Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt -IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by -X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b -gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr -eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ -TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy -Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn -uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI -qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm -ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 -Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW -Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t -FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm -zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k -XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT -bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU -RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK -1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt -2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ -Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 -AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -CNNIC ROOT -========== ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE -ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw -OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD -o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz -VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT -VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or -czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK -y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC -wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S -lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 -Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM -O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 -BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 -G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m -mxE= ------END CERTIFICATE----- - -ApplicationCA - Japanese Government -=================================== ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT -SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw -MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl -cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 -fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN -wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE -jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu -nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU -WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV -BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD -vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs -o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g -/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD -io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW -dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL -rosot4LKGAfmt1t06SAZf7IbiVQ= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz -NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo -YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT -LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j -K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE -c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C -IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu -dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr -2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 -cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE -Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s -t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC -VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu -IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg -Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV -MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG -b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt -IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS -LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 -8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN -G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K -rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w -ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD -VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG -A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At -P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC -+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY -7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW -vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ -KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK -A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC -8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm -er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 -OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl -b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG -BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc -KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ -EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m -ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 -npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj -1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP -MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 -9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I -AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR -tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G -CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O -a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 -Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx -Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx -P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P -wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 -mJO37M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC -VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 -b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz -ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU -cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo -b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 -Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz -rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw -HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u -Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD -A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx -AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -NetLock Arany (Class Gold) Főtanúsítvány -============================================ ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ -5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn -vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj -CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil -e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR -OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI -CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 -48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi -trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 -qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB -AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC -ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA -A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz -+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj -f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN -kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk -CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF -URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb -CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h -oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV -IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm -66+KAQ== ------END CERTIFICATE----- - -CA Disig -======== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK -QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw -MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz -bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm -GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD -Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo -hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt -ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w -gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P -AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz -aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff -ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa -BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t -WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 -mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K -ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA -4Z7CRneC9VkGjCFMhwnN5ag= ------END CERTIFICATE----- - -Juur-SK -======= ------BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA -c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw -DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG -SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy -aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf -TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC -+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw -UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa -Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF -MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD -HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh -AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA -cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr -AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw -cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G -A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo -ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL -abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 -IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh -Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 -yyqcjg== ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -ACEDICOM Root -============= ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD -T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 -MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG -A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk -WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD -YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew -MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb -m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk -HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT -xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 -3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 -2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq -TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz -4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU -9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg -aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP -eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk -zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 -ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI -KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq -nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE -I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp -MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o -tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ -VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 -yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa -XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n -0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ -RjXZ+Hxb ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky -CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX -bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ -D/xwzoiQ ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi -=================================================== ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz -ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 -MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 -cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u -aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY -8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y -jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI -JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk -9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG -SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d -F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq -D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 -Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq -fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -TC TrustCenter Universal CA III -=============================== ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe -Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU -QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex -KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt -QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO -juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut -CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 -M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G -A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA -g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ -KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK -BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq -woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG -EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz -MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu -QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ -03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK -ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU -+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC -PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT -OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK -F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK -0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ -0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB -leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID -AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ -SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG -NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l -Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga -kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q -hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs -g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 -aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 -nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC -ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo -Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z -WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy -Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl -ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF -EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl -cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA -XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj -h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ -ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk -NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g -D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 -lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ -0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 -EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI -G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ -BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh -bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh -bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC -CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH -AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 -wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH -3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU -RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 -M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 -YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF -9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK -zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG -nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx -NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg -Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ -QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf -VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf -XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 -ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB -/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA -TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M -H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe -Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF -HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB -AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT -BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE -BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm -aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm -aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp -1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 -dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG -/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 -ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s -dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg -9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH -foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du -qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr -P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq -c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -Certinomis - Autorité Racine -============================= ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg -LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG -A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw -JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa -wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly -Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw -2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N -jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q -c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC -lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb -xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g -530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna -4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x -WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva -R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 -nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B -CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv -JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE -qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b -WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE -wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ -vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - -Root CA Generalitat Valenciana -============================== ------BEGIN CERTIFICATE----- -MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE -ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 -IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 -WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE -CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 -F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B -ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ -D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte -JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB -AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n -dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB -ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl -AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA -YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy -AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA -aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt -AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA -YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu -AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA -OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 -dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV -BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G -A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S -b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh -TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz -Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 -NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH -iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt -+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= ------END CERTIFICATE----- - -A-Trust-nQual-03 -================ ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE -Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R -dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw -RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 -ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 -c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA -zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n -yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE -SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 -iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V -cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV -eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 -ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr -sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd -JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 -ahq97BvIxYSazQ== ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ -Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 -dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu -c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv -bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 -aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 -fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm -N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN -Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T -tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX -e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA -2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs -HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib -D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -StartCom Certification Authority G2 -=================================== ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE -ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O -o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG -4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi -Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul -Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs -O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H -vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L -nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS -FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa -z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ -KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk -J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ -JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG -/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc -nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld -blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc -l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm -7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm -obp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı -====================================================== ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X -DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl -a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N -YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv -KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya -KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT -rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC -AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s -Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO -Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb -BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK -poRq0Tl9 ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy -dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw -MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB -UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy -ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM -TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 -rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw -93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN -P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ -MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF -BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj -xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM -lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU -3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM -dcGWxZ0= ------END CERTIFICATE----- diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php deleted file mode 100755 index e32b9f83c24..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebook_sdk/tests/bootstrap.php +++ /dev/null @@ -1,5 +0,0 @@ - self::APP_ID, - 'secret' => self::SECRET, - )); - return $facebook->publicMakeSignedRequest( - array( - 'user_id' => $id, - 'oauth_token' => $oauth_token - ) - ); - } - - private static function kNonTosedSignedRequest() { - $facebook = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - return $facebook->publicMakeSignedRequest(array()); - } - - private static function kSignedRequestWithEmptyValue() { - return ''; - } - - private static function kSignedRequestWithBogusSignature() { - $facebook = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => 'bogus', - )); - return $facebook->publicMakeSignedRequest( - array( - 'algorithm' => 'HMAC-SHA256', - ) - ); - } - - private static function kSignedRequestWithWrongAlgo() { - $facebook = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $data['algorithm'] = 'foo'; - $json = json_encode($data); - $b64 = $facebook->publicBase64UrlEncode($json); - $raw_sig = hash_hmac('sha256', $b64, self::SECRET, $raw = true); - $sig = $facebook->publicBase64UrlEncode($raw_sig); - return $sig.'.'.$b64; - } - - public function testConstructor() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $this->assertEquals($facebook->getAppId(), self::APP_ID, - 'Expect the App ID to be set.'); - $this->assertEquals($facebook->getAppSecret(), self::SECRET, - 'Expect the API secret to be set.'); - } - - public function testConstructorWithFileUpload() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'fileUpload' => true, - )); - $this->assertEquals($facebook->getAppId(), self::APP_ID, - 'Expect the App ID to be set.'); - $this->assertEquals($facebook->getAppSecret(), self::SECRET, - 'Expect the API secret to be set.'); - $this->assertTrue($facebook->getFileUploadSupport(), - 'Expect file upload support to be on.'); - // alias (depricated) for getFileUploadSupport -- test until removed - $this->assertTrue($facebook->useFileUploadSupport(), - 'Expect file upload support to be on.'); - } - - public function testSetAppId() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $facebook->setAppId('dummy'); - $this->assertEquals($facebook->getAppId(), 'dummy', - 'Expect the App ID to be dummy.'); - } - - public function testSetAPISecret() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $facebook->setApiSecret('dummy'); - $this->assertEquals($facebook->getApiSecret(), 'dummy', - 'Expect the API secret to be dummy.'); - } - - public function testSetAPPSecret() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $facebook->setAppSecret('dummy'); - $this->assertEquals($facebook->getAppSecret(), 'dummy', - 'Expect the API secret to be dummy.'); - } - - public function testSetAccessToken() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $facebook->setAccessToken('saltydog'); - $this->assertEquals($facebook->getAccessToken(), 'saltydog', - 'Expect installed access token to remain \'saltydog\''); - } - - public function testSetFileUploadSupport() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $this->assertFalse($facebook->getFileUploadSupport(), - 'Expect file upload support to be off.'); - // alias for getFileUploadSupport (depricated), testing until removed - $this->assertFalse($facebook->useFileUploadSupport(), - 'Expect file upload support to be off.'); - $facebook->setFileUploadSupport(true); - $this->assertTrue($facebook->getFileUploadSupport(), - 'Expect file upload support to be on.'); - // alias for getFileUploadSupport (depricated), testing until removed - $this->assertTrue($facebook->useFileUploadSupport(), - 'Expect file upload support to be on.'); - } - - public function testGetCurrentURL() { - $facebook = new FBGetCurrentURLFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - // fake the HPHP $_SERVER globals - $_SERVER['HTTP_HOST'] = 'www.test.com'; - $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=one&two=two&three=three'; - $current_url = $facebook->publicGetCurrentUrl(); - $this->assertEquals( - 'http://www.test.com/unit-tests.php?one=one&two=two&three=three', - $current_url, - 'getCurrentUrl function is changing the current URL'); - - // ensure structure of valueless GET params is retained (sometimes - // an = sign was present, and sometimes it was not) - // first test when equal signs are present - $_SERVER['HTTP_HOST'] = 'www.test.com'; - $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=&two=&three='; - $current_url = $facebook->publicGetCurrentUrl(); - $this->assertEquals( - 'http://www.test.com/unit-tests.php?one=&two=&three=', - $current_url, - 'getCurrentUrl function is changing the current URL'); - - // now confirm that - $_SERVER['HTTP_HOST'] = 'www.test.com'; - $_SERVER['REQUEST_URI'] = '/unit-tests.php?one&two&three'; - $current_url = $facebook->publicGetCurrentUrl(); - $this->assertEquals( - 'http://www.test.com/unit-tests.php?one&two&three', - $current_url, - 'getCurrentUrl function is changing the current URL'); - } - - public function testGetLoginURL() { - $facebook = new Facebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - // fake the HPHP $_SERVER globals - $_SERVER['HTTP_HOST'] = 'www.test.com'; - $_SERVER['REQUEST_URI'] = '/unit-tests.php'; - $login_url = parse_url($facebook->getLoginUrl()); - $this->assertEquals($login_url['scheme'], 'https'); - $this->assertEquals($login_url['host'], 'www.facebook.com'); - $this->assertEquals($login_url['path'], '/dialog/oauth'); - $expected_login_params = - array('client_id' => self::APP_ID, - 'redirect_uri' => 'http://www.test.com/unit-tests.php'); - - $query_map = array(); - parse_str($login_url['query'], $query_map); - $this->assertIsSubset($expected_login_params, $query_map); - // we don't know what the state is, but we know it's an md5 and should - // be 32 characters long. - $this->assertEquals(strlen($query_map['state']), $num_characters = 32); - } - - public function testGetLoginURLWithExtraParams() { - $facebook = new Facebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - // fake the HPHP $_SERVER globals - $_SERVER['HTTP_HOST'] = 'www.test.com'; - $_SERVER['REQUEST_URI'] = '/unit-tests.php'; - $extra_params = array('scope' => 'email, sms', - 'nonsense' => 'nonsense'); - $login_url = parse_url($facebook->getLoginUrl($extra_params)); - $this->assertEquals($login_url['scheme'], 'https'); - $this->assertEquals($login_url['host'], 'www.facebook.com'); - $this->assertEquals($login_url['path'], '/dialog/oauth'); - $expected_login_params = - array_merge( - array('client_id' => self::APP_ID, - 'redirect_uri' => 'http://www.test.com/unit-tests.php'), - $extra_params); - $query_map = array(); - parse_str($login_url['query'], $query_map); - $this->assertIsSubset($expected_login_params, $query_map); - // we don't know what the state is, but we know it's an md5 and should - // be 32 characters long. - $this->assertEquals(strlen($query_map['state']), $num_characters = 32); - } - - public function testGetLoginURLWithScopeParamsAsArray() { - $facebook = new Facebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - // fake the HPHP $_SERVER globals - $_SERVER['HTTP_HOST'] = 'www.test.com'; - $_SERVER['REQUEST_URI'] = '/unit-tests.php'; - $scope_params_as_array = array('email','sms','read_stream'); - $extra_params = array('scope' => $scope_params_as_array, - 'nonsense' => 'nonsense'); - $login_url = parse_url($facebook->getLoginUrl($extra_params)); - $this->assertEquals($login_url['scheme'], 'https'); - $this->assertEquals($login_url['host'], 'www.facebook.com'); - $this->assertEquals($login_url['path'], '/dialog/oauth'); - // expect api to flatten array params to comma separated list - // should do the same here before asserting to make sure API is behaving - // correctly; - $extra_params['scope'] = implode(',', $scope_params_as_array); - $expected_login_params = - array_merge( - array('client_id' => self::APP_ID, - 'redirect_uri' => 'http://www.test.com/unit-tests.php'), - $extra_params); - $query_map = array(); - parse_str($login_url['query'], $query_map); - $this->assertIsSubset($expected_login_params, $query_map); - // we don't know what the state is, but we know it's an md5 and should - // be 32 characters long. - $this->assertEquals(strlen($query_map['state']), $num_characters = 32); - } - - public function testGetCodeWithValidCSRFState() { - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $facebook->setCSRFStateToken(); - $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); - $_REQUEST['state'] = $facebook->getCSRFStateToken(); - $this->assertEquals($code, - $facebook->publicGetCode(), - 'Expect code to be pulled from $_REQUEST[\'code\']'); - } - - public function testGetCodeWithInvalidCSRFState() { - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $facebook->setCSRFStateToken(); - $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); - $_REQUEST['state'] = $facebook->getCSRFStateToken().'forgery!!!'; - $this->assertFalse($facebook->publicGetCode(), - 'Expect getCode to fail, CSRF state should not match.'); - } - - public function testGetCodeWithMissingCSRFState() { - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); - // intentionally don't set CSRF token at all - $this->assertFalse($facebook->publicGetCode(), - 'Expect getCode to fail, CSRF state not sent back.'); - } - - public function testPersistentCSRFState() - { - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $facebook->setCSRFStateToken(); - $code = $facebook->getCSRFStateToken(); - - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $this->assertEquals($code, $facebook->publicGetState(), - 'Persisted CSRF state token not loaded correctly'); - } - - public function testPersistentCSRFStateWithSharedSession() - { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $facebook->setCSRFStateToken(); - $code = $facebook->getCSRFStateToken(); - - $facebook = new FBCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - - $this->assertEquals($code, $facebook->publicGetState(), - 'Persisted CSRF state token not loaded correctly with shared session'); - } - - public function testGetUserFromSignedRequest() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $_REQUEST['signed_request'] = self::kValidSignedRequest(); - $this->assertEquals('499834690', $facebook->getUser(), - 'Failed to get user ID from a valid signed request.'); - } - - public function testDisallowSignedRequest() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'allowSignedRequest' => false - )); - - $_REQUEST['signed_request'] = self::kValidSignedRequest(); - $this->assertEquals(0, $facebook->getUser(), - 'Should not have received valid user from signed_request.'); - } - - - public function testSignedRequestRewrite(){ - $facebook = new FBRewrite(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER, 'Hello sweetie'); - - $this->assertEquals(self::TEST_USER, $facebook->getUser(), - 'Failed to get user ID from a valid signed request.'); - - $this->assertEquals('Hello sweetie', $facebook->getAccessToken(), - 'Failed to get access token from signed request'); - - $facebook->uncache(); - - $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER_2, 'spoilers'); - - $this->assertEquals(self::TEST_USER_2, $facebook->getUser(), - 'Failed to get user ID from a valid signed request.'); - - $_REQUEST['signed_request'] = null; - $facebook ->uncacheSignedRequest(); - - $this->assertNotEquals('Hello sweetie', $facebook->getAccessToken(), - 'Failed to clear access token'); - } - - public function testGetSignedRequestFromCookie() { - $facebook = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = - self::kValidSignedRequest(); - $this->assertNotNull($facebook->publicGetSignedRequest()); - $this->assertEquals('499834690', $facebook->getUser(), - 'Failed to get user ID from a valid signed request.'); - } - - public function testGetSignedRequestWithIncorrectSignature() { - $facebook = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = - self::kSignedRequestWithBogusSignature(); - $this->assertNull($facebook->publicGetSignedRequest()); - } - - public function testNonUserAccessToken() { - $facebook = new FBAccessToken(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - // no cookies, and no request params, so no user or code, - // so no user access token (even with cookie support) - $this->assertEquals($facebook->publicGetApplicationAccessToken(), - $facebook->getAccessToken(), - 'Access token should be that for logged out users.'); - } - - public function testMissingMetadataCookie() { - $fb = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $this->assertEmpty($fb->publicGetMetadataCookie()); - } - - public function testEmptyMetadataCookie() { - $fb = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $_COOKIE[$fb->publicGetMetadataCookieName()] = ''; - $this->assertEmpty($fb->publicGetMetadataCookie()); - } - - public function testMetadataCookie() { - $fb = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = 'foo'; - $val = '42'; - $_COOKIE[$fb->publicGetMetadataCookieName()] = "$key=$val"; - $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); - } - - public function testQuotedMetadataCookie() { - $fb = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = 'foo'; - $val = '42'; - $_COOKIE[$fb->publicGetMetadataCookieName()] = "\"$key=$val\""; - $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); - } - - public function testAPIForLoggedOutUsers() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $response = $facebook->api(array( - 'method' => 'fql.query', - 'query' => 'SELECT name FROM user WHERE uid=4', - )); - $this->assertEquals(count($response), 1, - 'Expect one row back.'); - $this->assertEquals($response[0]['name'], 'Mark Zuckerberg', - 'Expect the name back.'); - } - - public function testAPIWithBogusAccessToken() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $facebook->setAccessToken('this-is-not-really-an-access-token'); - // if we don't set an access token and there's no way to - // get one, then the FQL query below works beautifully, handing - // over Zuck's public data. But if you specify a bogus access - // token as I have right here, then the FQL query should fail. - // We could return just Zuck's public data, but that wouldn't - // advertise the issue that the access token is at worst broken - // and at best expired. - try { - $response = $facebook->api(array( - 'method' => 'fql.query', - 'query' => 'SELECT name FROM profile WHERE id=4', - )); - $this->fail('Should not get here.'); - } catch(FacebookApiException $e) { - $result = $e->getResult(); - $this->assertTrue(is_array($result), 'expect a result object'); - $this->assertEquals('190', $result['error_code'], 'expect code'); - } - } - - public function testAPIGraphPublicData() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $response = $facebook->api('/jerry'); - $this->assertEquals( - $response['id'], '214707', 'should get expected id.'); - } - - public function testGraphAPIWithBogusAccessToken() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $facebook->setAccessToken('this-is-not-really-an-access-token'); - try { - $response = $facebook->api('/me'); - $this->fail('Should not get here.'); - } catch(FacebookApiException $e) { - // means the server got the access token and didn't like it - $msg = 'OAuthException: Invalid OAuth access token.'; - $this->assertEquals($msg, (string) $e, - 'Expect the invalid OAuth token message.'); - } - } - - public function testGraphAPIWithExpiredAccessToken() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $facebook->setAccessToken(self::$kExpiredAccessToken); - try { - $response = $facebook->api('/me'); - $this->fail('Should not get here.'); - } catch(FacebookApiException $e) { - // means the server got the access token and didn't like it - $error_msg_start = 'OAuthException: Error validating access token:'; - $this->assertTrue(strpos((string) $e, $error_msg_start) === 0, - 'Expect the token validation error message.'); - } - } - - public function testGraphAPIOAuthSpecError() { - $facebook = new TransientFacebook(array( - 'appId' => self::MIGRATED_APP_ID, - 'secret' => self::MIGRATED_SECRET, - )); - - try { - $response = $facebook->api('/me', array( - 'client_id' => self::MIGRATED_APP_ID)); - - $this->fail('Should not get here.'); - } catch(FacebookApiException $e) { - // means the server got the access token - $msg = 'invalid_request: An active access token must be used '. - 'to query information about the current user.'; - $this->assertEquals($msg, (string) $e, - 'Expect the invalid session message.'); - } - } - - public function testGraphAPIMethodOAuthSpecError() { - $facebook = new TransientFacebook(array( - 'appId' => self::MIGRATED_APP_ID, - 'secret' => self::MIGRATED_SECRET, - )); - - try { - $response = $facebook->api('/daaku.shah', 'DELETE', array( - 'client_id' => self::MIGRATED_APP_ID)); - $this->fail('Should not get here.'); - } catch(FacebookApiException $e) { - $this->assertEquals(strpos($e, 'invalid_request'), 0); - } - } - - public function testCurlFailure() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - if (!defined('CURLOPT_TIMEOUT_MS')) { - // can't test it if we don't have millisecond timeouts - return; - } - - $exception = null; - try { - // we dont expect facebook will ever return in 1ms - Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS] = 50; - $facebook->api('/naitik'); - } catch(FacebookApiException $e) { - $exception = $e; - } - unset(Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS]); - if (!$exception) { - $this->fail('no exception was thrown on timeout.'); - } - - $code = $exception->getCode(); - if ($code != CURLE_OPERATION_TIMEOUTED && $code != CURLE_COULDNT_CONNECT) { - $this->fail("Expected curl error code 7 or 28 but got: $code"); - } - $this->assertEquals('CurlException', $exception->getType(), 'expect type'); - } - - public function testGraphAPIWithOnlyParams() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - - $response = $facebook->api('/jerry'); - $this->assertTrue(isset($response['id']), - 'User ID should be public.'); - $this->assertTrue(isset($response['name']), - 'User\'s name should be public.'); - $this->assertTrue(isset($response['first_name']), - 'User\'s first name should be public.'); - $this->assertTrue(isset($response['last_name']), - 'User\'s last name should be public.'); - $this->assertFalse(isset($response['work']), - 'User\'s work history should only be available with '. - 'a valid access token.'); - $this->assertFalse(isset($response['education']), - 'User\'s education history should only be '. - 'available with a valid access token.'); - $this->assertFalse(isset($response['verified']), - 'User\'s verification status should only be '. - 'available with a valid access token.'); - } - - public function testLoginURLDefaults() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl = rawurlencode('http://fbrell.com/examples'); - $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), - 'Expect the current url to exist.'); - } - - public function testLoginURLDefaultsDropStateQueryParam() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples?state=xx42xx'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); - $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, - 'Expect the current url to exist.'); - $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), - 'Expect the session param to be dropped.'); - } - - public function testLoginURLDefaultsDropCodeQueryParam() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples?code=xx42xx'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); - $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, - 'Expect the current url to exist.'); - $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), - 'Expect the session param to be dropped.'); - } - - public function testLoginURLDefaultsDropSignedRequestParamButNotOthers() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = - '/examples?signed_request=xx42xx&do_not_drop=xx43xx'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); - $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), - 'Expect the session param to be dropped.'); - $this->assertTrue(strpos($facebook->getLoginUrl(), 'xx43xx') > -1, - 'Expect the do_not_drop param to exist.'); - } - - public function testLoginURLCustomNext() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $next = 'http://fbrell.com/custom'; - $loginUrl = $facebook->getLoginUrl(array( - 'redirect_uri' => $next, - 'cancel_url' => $next - )); - $currentEncodedUrl = rawurlencode('http://fbrell.com/examples'); - $expectedEncodedUrl = rawurlencode($next); - $this->assertNotNull(strpos($loginUrl, $expectedEncodedUrl), - 'Expect the custom url to exist.'); - $this->assertFalse(strpos($loginUrl, $currentEncodedUrl), - 'Expect the current url to not exist.'); - } - - public function testLogoutURLDefaults() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl = rawurlencode('http://fbrell.com/examples'); - $this->assertNotNull(strpos($facebook->getLogoutUrl(), $encodedUrl), - 'Expect the current url to exist.'); - $this->assertFalse(strpos($facebook->getLogoutUrl(), self::SECRET)); - } - - public function testLoginStatusURLDefaults() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl = rawurlencode('http://fbrell.com/examples'); - $this->assertNotNull(strpos($facebook->getLoginStatusUrl(), $encodedUrl), - 'Expect the current url to exist.'); - } - - public function testLoginStatusURLCustom() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl1 = rawurlencode('http://fbrell.com/examples'); - $okUrl = 'http://fbrell.com/here1'; - $encodedUrl2 = rawurlencode($okUrl); - $loginStatusUrl = $facebook->getLoginStatusUrl(array( - 'ok_session' => $okUrl, - )); - $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl1), - 'Expect the current url to exist.'); - $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl2), - 'Expect the custom url to exist.'); - } - - public function testNonDefaultPort() { - $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; - $_SERVER['REQUEST_URI'] = '/examples'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl = rawurlencode('http://fbrell.com:8080/examples'); - $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), - 'Expect the current url to exist.'); - } - - public function testSecureCurrentUrl() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $_SERVER['REQUEST_URI'] = '/examples'; - $_SERVER['HTTPS'] = 'on'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl = rawurlencode('https://fbrell.com/examples'); - $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), - 'Expect the current url to exist.'); - } - - public function testSecureCurrentUrlWithNonDefaultPort() { - $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; - $_SERVER['REQUEST_URI'] = '/examples'; - $_SERVER['HTTPS'] = 'on'; - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $encodedUrl = rawurlencode('https://fbrell.com:8080/examples'); - $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), - 'Expect the current url to exist.'); - } - - public function testBase64UrlEncode() { - $input = 'Facebook rocks'; - $output = 'RmFjZWJvb2sgcm9ja3M'; - - $this->assertEquals(FBPublic::publicBase64UrlDecode($output), $input); - } - - public function testSignedToken() { - $facebook = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $sr = self::kValidSignedRequest(); - $payload = $facebook->publicParseSignedRequest($sr); - $this->assertNotNull($payload, 'Expected token to parse'); - $this->assertEquals($facebook->getSignedRequest(), null); - $_REQUEST['signed_request'] = $sr; - $this->assertEquals($facebook->getSignedRequest(), $payload); - } - - public function testNonTossedSignedtoken() { - $facebook = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $payload = $facebook->publicParseSignedRequest( - self::kNonTosedSignedRequest()); - $this->assertNotNull($payload, 'Expected token to parse'); - $this->assertNull($facebook->getSignedRequest()); - $_REQUEST['signed_request'] = self::kNonTosedSignedRequest(); - $sr = $facebook->getSignedRequest(); - $this->assertTrue(isset($sr['algorithm'])); - } - - public function testSignedRequestWithEmptyValue() { - $fb = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $_REQUEST['signed_request'] = self::kSignedRequestWithEmptyValue(); - $this->assertNull($fb->getSignedRequest()); - $_COOKIE[$fb->publicGetSignedRequestCookieName()] = - self::kSignedRequestWithEmptyValue(); - $this->assertNull($fb->getSignedRequest()); - } - - public function testSignedRequestWithWrongAlgo() { - $fb = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $payload = $fb->publicParseSignedRequest( - self::kSignedRequestWithWrongAlgo()); - $this->assertNull($payload, 'Expected nothing back.'); - } - - public function testMakeAndParse() { - $fb = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $data = array('foo' => 42); - $sr = $fb->publicMakeSignedRequest($data); - $decoded = $fb->publicParseSignedRequest($sr); - $this->assertEquals($data['foo'], $decoded['foo']); - } - - /** - * @expectedException InvalidArgumentException - */ - public function testMakeSignedRequestExpectsArray() { - $fb = new FBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $sr = $fb->publicMakeSignedRequest(''); - } - - public function testBundledCACert() { - $facebook = new TransientFacebook(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - - // use the bundled cert from the start - Facebook::$CURL_OPTS[CURLOPT_CAINFO] = - dirname(__FILE__) . '/../src/fb_ca_chain_bundle.crt'; - $response = $facebook->api('/naitik'); - - unset(Facebook::$CURL_OPTS[CURLOPT_CAINFO]); - $this->assertEquals( - $response['id'], '5526183', 'should get expected id.'); - } - - public function testVideoUpload() { - $facebook = new FBRecordURL(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - - $facebook->api(array('method' => 'video.upload')); - $this->assertContains('//api-video.', $facebook->getRequestedURL(), - 'video.upload should go against api-video'); - } - - public function testVideoUploadGraph() { - $facebook = new FBRecordURL(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - - $facebook->api('/me/videos', 'POST'); - $this->assertContains('//graph-video.', $facebook->getRequestedURL(), - '/me/videos should go against graph-video'); - } - - public function testGetUserAndAccessTokenFromSession() { - $facebook = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - - $facebook->publicSetPersistentData('access_token', - self::$kExpiredAccessToken); - $facebook->publicSetPersistentData('user_id', 12345); - $this->assertEquals(self::$kExpiredAccessToken, - $facebook->getAccessToken(), - 'Get access token from persistent store.'); - $this->assertEquals('12345', - $facebook->getUser(), - 'Get user id from persistent store.'); - } - - public function testGetUserAndAccessTokenFromSignedRequestNotSession() { - $facebook = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - - $_REQUEST['signed_request'] = self::kValidSignedRequest(); - $facebook->publicSetPersistentData('user_id', 41572); - $facebook->publicSetPersistentData('access_token', - self::$kExpiredAccessToken); - $this->assertNotEquals('41572', $facebook->getUser(), - 'Got user from session instead of signed request.'); - $this->assertEquals('499834690', $facebook->getUser(), - 'Failed to get correct user ID from signed request.'); - $this->assertNotEquals( - self::$kExpiredAccessToken, - $facebook->getAccessToken(), - 'Got access token from session instead of signed request.'); - $this->assertNotEmpty( - $facebook->getAccessToken(), - 'Failed to extract an access token from the signed request.'); - } - - public function testGetUserWithoutCodeOrSignedRequestOrSession() { - $facebook = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - - // deliberately leave $_REQUEST and _$SESSION empty - $this->assertEmpty($_REQUEST, - 'GET, POST, and COOKIE params exist even though '. - 'they should. Test cannot succeed unless all of '. - '$_REQUEST is empty.'); - $this->assertEmpty($_SESSION, - 'Session is carrying state and should not be.'); - $this->assertEmpty($facebook->getUser(), - 'Got a user id, even without a signed request, '. - 'access token, or session variable.'); - $this->assertEmpty($_SESSION, - 'Session superglobal incorrectly populated by getUser.'); - } - - public function testGetAccessTokenUsingCodeInJsSdkCookie() { - $code = 'code1'; - $access_token = 'at1'; - $methods_to_stub = array('getSignedRequest', 'getAccessTokenFromCode'); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getSignedRequest') - ->will($this->returnValue(array('code' => $code))); - $stub - ->expects($this->once()) - ->method('getAccessTokenFromCode') - ->will($this->returnValueMap(array(array($code, '', $access_token)))); - $this->assertEquals($stub->getAccessToken(), $access_token); - } - - public function testSignedRequestWithoutAuthClearsData() { - $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getSignedRequest') - ->will($this->returnValue(array('foo' => 1))); - $stub - ->expects($this->once()) - ->method('clearAllPersistentData'); - $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); - } - - public function testInvalidCodeInSignedRequestWillClearData() { - $code = 'code1'; - $methods_to_stub = array( - 'getSignedRequest', - 'getAccessTokenFromCode', - 'clearAllPersistentData', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getSignedRequest') - ->will($this->returnValue(array('code' => $code))); - $stub - ->expects($this->once()) - ->method('getAccessTokenFromCode') - ->will($this->returnValue(null)); - $stub - ->expects($this->once()) - ->method('clearAllPersistentData'); - $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); - } - - public function testInvalidCodeWillClearData() { - $code = 'code1'; - $methods_to_stub = array( - 'getCode', - 'getAccessTokenFromCode', - 'clearAllPersistentData', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getCode') - ->will($this->returnValue($code)); - $stub - ->expects($this->once()) - ->method('getAccessTokenFromCode') - ->will($this->returnValue(null)); - $stub - ->expects($this->once()) - ->method('clearAllPersistentData'); - $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); - } - - public function testValidCodeToToken() { - $code = 'code1'; - $access_token = 'at1'; - $methods_to_stub = array( - 'getSignedRequest', - 'getCode', - 'getAccessTokenFromCode', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getCode') - ->will($this->returnValue($code)); - $stub - ->expects($this->once()) - ->method('getAccessTokenFromCode') - ->will($this->returnValueMap(array(array($code, null, $access_token)))); - $this->assertEquals($stub->getAccessToken(), $access_token); - } - - public function testSignedRequestWithoutAuthClearsDataInAvailData() { - $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getSignedRequest') - ->will($this->returnValue(array('foo' => 1))); - $stub - ->expects($this->once()) - ->method('clearAllPersistentData'); - $this->assertEquals(0, $stub->getUser()); - } - - public function testFailedToGetUserFromAccessTokenClearsData() { - $methods_to_stub = array( - 'getAccessToken', - 'getUserFromAccessToken', - 'clearAllPersistentData', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getAccessToken') - ->will($this->returnValue('at1')); - $stub - ->expects($this->once()) - ->method('getUserFromAccessToken'); - $stub - ->expects($this->once()) - ->method('clearAllPersistentData'); - $this->assertEquals(0, $stub->getUser()); - } - - public function testUserFromAccessTokenIsStored() { - $methods_to_stub = array( - 'getAccessToken', - 'getUserFromAccessToken', - 'setPersistentData', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $user = 42; - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getAccessToken') - ->will($this->returnValue('at1')); - $stub - ->expects($this->once()) - ->method('getUserFromAccessToken') - ->will($this->returnValue($user)); - $stub - ->expects($this->once()) - ->method('setPersistentData'); - $this->assertEquals($user, $stub->getUser()); - } - - public function testUserFromAccessTokenPullsID() { - $methods_to_stub = array( - 'getAccessToken', - 'api', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $user = 42; - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getAccessToken') - ->will($this->returnValue('at1')); - $stub - ->expects($this->once()) - ->method('api') - ->will($this->returnValue(array('id' => $user))); - $this->assertEquals($user, $stub->getUser()); - } - - public function testUserFromAccessTokenResetsOnApiException() { - $methods_to_stub = array( - 'getAccessToken', - 'clearAllPersistentData', - 'api', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('getAccessToken') - ->will($this->returnValue('at1')); - $stub - ->expects($this->once()) - ->method('api') - ->will($this->throwException(new FacebookApiException(false))); - $stub - ->expects($this->once()) - ->method('clearAllPersistentData'); - $this->assertEquals(0, $stub->getUser()); - } - - public function testEmptyCodeReturnsFalse() { - $fb = new FBPublicGetAccessTokenFromCode(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $this->assertFalse($fb->publicGetAccessTokenFromCode('')); - $this->assertFalse($fb->publicGetAccessTokenFromCode(null)); - $this->assertFalse($fb->publicGetAccessTokenFromCode(false)); - } - - public function testNullRedirectURIUsesCurrentURL() { - $methods_to_stub = array( - '_oauthRequest', - 'getCurrentUrl', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $access_token = 'at1'; - $stub = $this->getMock( - 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue("access_token=$access_token")); - $stub - ->expects($this->once()) - ->method('getCurrentUrl'); - $this->assertEquals( - $access_token, $stub->publicGetAccessTokenFromCode('c')); - } - - public function testNullRedirectURIAllowsEmptyStringForCookie() { - $methods_to_stub = array( - '_oauthRequest', - 'getCurrentUrl', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $access_token = 'at1'; - $stub = $this->getMock( - 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue("access_token=$access_token")); - $stub - ->expects($this->never()) - ->method('getCurrentUrl'); - $this->assertEquals( - $access_token, $stub->publicGetAccessTokenFromCode('c', '')); - } - - public function testAPIExceptionDuringCodeExchangeIsIgnored() { - $methods_to_stub = array( - '_oauthRequest', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->throwException(new FacebookApiException(false))); - $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); - } - - public function testEmptyResponseInCodeExchangeIsIgnored() { - $methods_to_stub = array( - '_oauthRequest', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue('')); - $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); - } - - public function testExistingStateRestoredInConstructor() { - $fb = new FBPublicState(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $this->assertEquals(FBPublicState::STATE, $fb->publicGetState()); - } - - public function testMissingAccessTokenInCodeExchangeIsIgnored() { - $methods_to_stub = array( - '_oauthRequest', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue('foo=1')); - $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); - } - - public function testAppsecretProofNoParams() { - $fb = new FBRecordMakeRequest(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $token = $fb->getAccessToken(); - $proof = $fb->publicGetAppSecretProof($token); - $params = array(); - $fb->api('/mattynoce', $params); - $requests = $fb->publicGetRequests(); - $this->assertEquals($proof, $requests[0]['params']['appsecret_proof']); - } - - public function testAppsecretProofWithParams() { - $fb = new FBRecordMakeRequest(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $proof = 'foo'; - $params = array('appsecret_proof' => $proof); - $fb->api('/mattynoce', $params); - $requests = $fb->publicGetRequests(); - $this->assertEquals($proof, $requests[0]['params']['appsecret_proof']); - } - - public function testExceptionConstructorWithErrorCode() { - $code = 404; - $e = new FacebookApiException(array('error_code' => $code)); - $this->assertEquals($code, $e->getCode()); - } - - public function testExceptionConstructorWithInvalidErrorCode() { - $e = new FacebookApiException(array('error_code' => 'not an int')); - $this->assertEquals(0, $e->getCode()); - } - - // this happens often despite the fact that it is useless - public function testExceptionTypeFalse() { - $e = new FacebookApiException(false); - $this->assertEquals('Exception', $e->getType()); - } - - public function testExceptionTypeMixedDraft00() { - $e = new FacebookApiException(array('error' => array('message' => 'foo'))); - $this->assertEquals('Exception', $e->getType()); - } - - public function testExceptionTypeDraft00() { - $error = 'foo'; - $e = new FacebookApiException( - array('error' => array('type' => $error, 'message' => 'hello world'))); - $this->assertEquals($error, $e->getType()); - } - - public function testExceptionTypeDraft10() { - $error = 'foo'; - $e = new FacebookApiException(array('error' => $error)); - $this->assertEquals($error, $e->getType()); - } - - public function testExceptionTypeDefault() { - $e = new FacebookApiException(array('error' => false)); - $this->assertEquals('Exception', $e->getType()); - } - - public function testExceptionToString() { - $e = new FacebookApiException(array( - 'error_code' => 1, - 'error_description' => 'foo', - )); - $this->assertEquals('Exception: 1: foo', (string) $e); - } - - public function testDestroyClearsCookie() { - $fb = new FBPublicCookie(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $_COOKIE[$fb->publicGetSignedRequestCookieName()] = 'foo'; - $_COOKIE[$fb->publicGetMetadataCookieName()] = 'base_domain=fbrell.com'; - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb->destroySession(); - $this->assertFalse( - array_key_exists($fb->publicGetSignedRequestCookieName(), $_COOKIE)); - } - - public function testAuthExpireSessionDestroysSession() { - $methods_to_stub = array( - '_oauthRequest', - 'destroySession', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $key = 'foo'; - $val = 42; - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue("{\"$key\":$val}")); - $stub - ->expects($this->once()) - ->method('destroySession'); - $this->assertEquals( - array($key => $val), - $stub->api(array('method' => 'auth.expireSession')) - ); - } - - public function testLowercaseAuthRevokeAuthDestroysSession() { - $methods_to_stub = array( - '_oauthRequest', - 'destroySession', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $key = 'foo'; - $val = 42; - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue("{\"$key\":$val}")); - $stub - ->expects($this->once()) - ->method('destroySession'); - $this->assertEquals( - array($key => $val), - $stub->api(array('method' => 'auth.revokeauthorization')) - ); - } - - /** - * @expectedException FacebookAPIException - */ - public function testErrorCodeFromRestAPIThrowsException() { - $methods_to_stub = array( - '_oauthRequest', - ); - $constructor_args = array(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET - )); - $stub = $this->getMock( - 'TransientFacebook', $methods_to_stub, $constructor_args); - $stub - ->expects($this->once()) - ->method('_oauthRequest') - ->will($this->returnValue('{"error_code": 500}')); - $stub->api(array('method' => 'foo')); - } - - public function testJsonEncodeOfNonStringParams() { - $foo = array(1, 2); - $params = array( - 'method' => 'get', - 'foo' => $foo, - ); - $fb = new FBRecordMakeRequest(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $fb->api('/naitik', $params); - $requests = $fb->publicGetRequests(); - $this->assertEquals(json_encode($foo), $requests[0]['params']['foo']); - } - - public function testSessionBackedFacebook() { - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = 'state'; - $val = 'foo'; - $fb->publicSetPersistentData($key, $val); - $this->assertEquals( - $val, - $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] - ); - $this->assertEquals( - $val, - $fb->publicGetPersistentData($key) - ); - } - - public function testSessionBackedFacebookIgnoresUnsupportedKey() { - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = '--invalid--'; - $val = 'foo'; - $fb->publicSetPersistentData($key, $val); - $this->assertFalse( - array_key_exists( - sprintf('fb_%s_%s', self::APP_ID, $key), - $_SESSION - ) - ); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testClearSessionBackedFacebook() { - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = 'state'; - $val = 'foo'; - $fb->publicSetPersistentData($key, $val); - $this->assertEquals( - $val, - $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] - ); - $this->assertEquals( - $val, - $fb->publicGetPersistentData($key) - ); - $fb->publicClearPersistentData($key); - $this->assertFalse( - array_key_exists( - sprintf('fb_%s_%s', self::APP_ID, $key), - $_SESSION - ) - ); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testSessionBackedFacebookIgnoresUnsupportedKeyInClear() { - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = '--invalid--'; - $val = 'foo'; - $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); - $_SESSION[$session_var_name] = $val; - $fb->publicClearPersistentData($key); - $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testClearAllSessionBackedFacebook() { - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $key = 'state'; - $val = 'foo'; - $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); - $fb->publicSetPersistentData($key, $val); - $this->assertEquals($val, $_SESSION[$session_var_name]); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - $fb->publicClearAllPersistentData(); - $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testSharedSessionBackedFacebook() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = 'state'; - $val = 'foo'; - $session_var_name = sprintf( - '%s_fb_%s_%s', - $fb->publicGetSharedSessionID(), - self::APP_ID, - $key - ); - $fb->publicSetPersistentData($key, $val); - $this->assertEquals($val, $_SESSION[$session_var_name]); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - } - - public function testSharedSessionBackedFacebookIgnoresUnsupportedKey() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = '--invalid--'; - $val = 'foo'; - $session_var_name = sprintf( - '%s_fb_%s_%s', - $fb->publicGetSharedSessionID(), - self::APP_ID, - $key - ); - $fb->publicSetPersistentData($key, $val); - $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testSharedClearSessionBackedFacebook() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = 'state'; - $val = 'foo'; - $session_var_name = sprintf( - '%s_fb_%s_%s', - $fb->publicGetSharedSessionID(), - self::APP_ID, - $key - ); - $fb->publicSetPersistentData($key, $val); - $this->assertEquals($val, $_SESSION[$session_var_name]); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - $fb->publicClearPersistentData($key); - $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testSharedSessionBackedFacebookIgnoresUnsupportedKeyInClear() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = '--invalid--'; - $val = 'foo'; - $session_var_name = sprintf( - '%s_fb_%s_%s', - $fb->publicGetSharedSessionID(), - self::APP_ID, - $key - ); - $_SESSION[$session_var_name] = $val; - $fb->publicClearPersistentData($key); - $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testSharedClearAllSessionBackedFacebook() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = 'state'; - $val = 'foo'; - $session_var_name = sprintf( - '%s_fb_%s_%s', - $fb->publicGetSharedSessionID(), - self::APP_ID, - $key - ); - $fb->publicSetPersistentData($key, $val); - $this->assertEquals($val, $_SESSION[$session_var_name]); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - $fb->publicClearAllPersistentData(); - $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); - $this->assertFalse($fb->publicGetPersistentData($key)); - } - - public function testSharedSessionBackedFacebookIsRestored() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = 'state'; - $val = 'foo'; - $shared_session_id = $fb->publicGetSharedSessionID(); - $session_var_name = sprintf( - '%s_fb_%s_%s', - $shared_session_id, - self::APP_ID, - $key - ); - $fb->publicSetPersistentData($key, $val); - $this->assertEquals($val, $_SESSION[$session_var_name]); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - - // check the new instance has the same data - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $this->assertEquals( - $shared_session_id, - $fb->publicGetSharedSessionID() - ); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - } - - public function testSharedSessionBackedFacebookIsNotRestoredWhenCorrupt() { - $_SERVER['HTTP_HOST'] = 'fbrell.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $key = 'state'; - $val = 'foo'; - $shared_session_id = $fb->publicGetSharedSessionID(); - $session_var_name = sprintf( - '%s_fb_%s_%s', - $shared_session_id, - self::APP_ID, - $key - ); - $fb->publicSetPersistentData($key, $val); - $this->assertEquals($val, $_SESSION[$session_var_name]); - $this->assertEquals($val, $fb->publicGetPersistentData($key)); - - // break the cookie - $cookie_name = $fb->publicGetSharedSessionCookieName(); - $_COOKIE[$cookie_name] = substr($_COOKIE[$cookie_name], 1); - - // check the new instance does not have the data - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'sharedSession' => true, - )); - $this->assertFalse($fb->publicGetPersistentData($key)); - $this->assertNotEquals( - $shared_session_id, - $fb->publicGetSharedSessionID() - ); - } - - public function testHttpHost() { - $real = 'foo.com'; - $_SERVER['HTTP_HOST'] = $real; - $_SERVER['HTTP_X_FORWARDED_HOST'] = 'evil.com'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $this->assertEquals($real, $fb->publicGetHttpHost()); - } - - public function testHttpProtocol() { - $_SERVER['HTTPS'] = 'on'; - $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - )); - $this->assertEquals('https', $fb->publicGetHttpProtocol()); - } - - public function testHttpHostForwarded() { - $real = 'foo.com'; - $_SERVER['HTTP_HOST'] = 'localhost'; - $_SERVER['HTTP_X_FORWARDED_HOST'] = $real; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'trustForwarded' => true, - )); - $this->assertEquals($real, $fb->publicGetHttpHost()); - } - - public function testHttpProtocolForwarded() { - $_SERVER['HTTPS'] = 'on'; - $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'trustForwarded' => true, - )); - $this->assertEquals('http', $fb->publicGetHttpProtocol()); - } - - public function testHttpProtocolForwardedSecure() { - $_SERVER['HTTPS'] = 'on'; - $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; - $fb = new PersistentFBPublic(array( - 'appId' => self::APP_ID, - 'secret' => self::SECRET, - 'trustForwarded' => true, - )); - $this->assertEquals('https', $fb->publicGetHttpProtocol()); - } - - /** - * @dataProvider provideEndsWith - */ - public function testEndsWith($big, $small, $result) { - $this->assertEquals( - $result, - PersistentFBPublic::publicEndsWith($big, $small) - ); - } - - public function provideEndsWith() { - return array( - array('', '', true), - array('', 'a', false), - array('a', '', true), - array('a', 'b', false), - array('a', 'a', true), - array('aa', 'a', true), - array('ab', 'a', false), - array('ba', 'a', true), - ); - } - - /** - * @dataProvider provideIsAllowedDomain - */ - public function testIsAllowedDomain($big, $small, $result) { - $this->assertEquals( - $result, - PersistentFBPublic::publicIsAllowedDomain($big, $small) - ); - } - - public function provideIsAllowedDomain() { - return array( - array('fbrell.com', 'fbrell.com', true), - array('foo.fbrell.com', 'fbrell.com', true), - array('foofbrell.com', 'fbrell.com', false), - array('evil.com', 'fbrell.com', false), - array('foo.fbrell.com', 'bar.fbrell.com', false), - ); - } - - protected function generateMD5HashOfRandomValue() { - return md5(uniqid(mt_rand(), true)); - } - - protected function setUp() { - parent::setUp(); - } - - protected function tearDown() { - $this->clearSuperGlobals(); - parent::tearDown(); - } - - protected function clearSuperGlobals() { - unset($_SERVER['HTTPS']); - unset($_SERVER['HTTP_HOST']); - unset($_SERVER['REQUEST_URI']); - $_SESSION = array(); - $_COOKIE = array(); - $_REQUEST = array(); - $_POST = array(); - $_GET = array(); - if (session_id()) { - session_destroy(); - } - } - - /** - * Checks that the correct args are a subset of the returned obj - * @param array $correct The correct array values - * @param array $actual The values in practice - * @param string $message to be shown on failure - */ - protected function assertIsSubset($correct, $actual, $msg='') { - foreach ($correct as $key => $value) { - $actual_value = $actual[$key]; - $newMsg = (strlen($msg) ? ($msg.' ') : '').'Key: '.$key; - $this->assertEquals($value, $actual_value, $newMsg); - } - } -} - -class TransientFacebook extends BaseFacebook { - protected function setPersistentData($key, $value) {} - protected function getPersistentData($key, $default = false) { - return $default; - } - protected function clearPersistentData($key) {} - protected function clearAllPersistentData() {} -} - -class FBRecordURL extends TransientFacebook { - private $url; - - protected function _oauthRequest($url, $params) { - $this->url = $url; - } - - public function getRequestedURL() { - return $this->url; - } -} - -class FBRecordMakeRequest extends TransientFacebook { - private $requests = array(); - - protected function makeRequest($url, $params, $ch=null) { - $this->requests[] = array( - 'url' => $url, - 'params' => $params, - ); - return parent::makeRequest($url, $params, $ch); - } - - public function publicGetRequests() { - return $this->requests; - } - - public function publicGetAppSecretProof($access_token) { - return $this->getAppSecretProof($access_token); - } -} - -class FBPublic extends TransientFacebook { - public static function publicBase64UrlDecode($input) { - return self::base64UrlDecode($input); - } - public static function publicBase64UrlEncode($input) { - return self::base64UrlEncode($input); - } - public function publicParseSignedRequest($input) { - return $this->parseSignedRequest($input); - } - public function publicMakeSignedRequest($data) { - return $this->makeSignedRequest($data); - } -} - -class PersistentFBPublic extends Facebook { - public function publicParseSignedRequest($input) { - return $this->parseSignedRequest($input); - } - - public function publicSetPersistentData($key, $value) { - $this->setPersistentData($key, $value); - } - - public function publicGetPersistentData($key, $default = false) { - return $this->getPersistentData($key, $default); - } - - public function publicClearPersistentData($key) { - return $this->clearPersistentData($key); - } - - public function publicClearAllPersistentData() { - return $this->clearAllPersistentData(); - } - - public function publicGetSharedSessionID() { - return $this->sharedSessionID; - } - - public static function publicIsAllowedDomain($big, $small) { - return self::isAllowedDomain($big, $small); - } - - public static function publicEndsWith($big, $small) { - return self::endsWith($big, $small); - } - - public function publicGetSharedSessionCookieName() { - return $this->getSharedSessionCookieName(); - } - - public function publicGetHttpHost() { - return $this->getHttpHost(); - } - - public function publicGetHttpProtocol() { - return $this->getHttpProtocol(); - } -} - -class FBCode extends Facebook { - public function publicGetCode() { - return $this->getCode(); - } - - public function publicGetState() { - return $this->state; - } - - public function setCSRFStateToken() { - $this->establishCSRFTokenState(); - } - - public function getCSRFStateToken() { - return $this->getPersistentData('state'); - } -} - -class FBAccessToken extends TransientFacebook { - public function publicGetApplicationAccessToken() { - return $this->getApplicationAccessToken(); - } -} - -class FBGetCurrentURLFacebook extends TransientFacebook { - public function publicGetCurrentUrl() { - return $this->getCurrentUrl(); - } -} - -class FBPublicCookie extends TransientFacebook { - public function publicGetSignedRequest() { - return $this->getSignedRequest(); - } - - public function publicGetSignedRequestCookieName() { - return $this->getSignedRequestCookieName(); - } - - public function publicGetMetadataCookie() { - return $this->getMetadataCookie(); - } - - public function publicGetMetadataCookieName() { - return $this->getMetadataCookieName(); - } -} - -class FBRewrite extends Facebook{ - - public function uncacheSignedRequest(){ - $this->signedRequest = null; - } - - public function uncache() - { - $this->user = null; - $this->signedRequest = null; - $this->accessToken = null; - } -} - - -class FBPublicGetAccessTokenFromCode extends TransientFacebook { - public function publicGetAccessTokenFromCode($code, $redirect_uri = null) { - return $this->getAccessTokenFromCode($code, $redirect_uri); - } -} - -class FBPublicState extends TransientFacebook { - const STATE = 'foo'; - protected function getPersistentData($key, $default = false) { - if ($key === 'state') { - return self::STATE; - } - return parent::getPersistentData($key, $default); - } - - public function publicGetState() { - return $this->state; - } -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php deleted file mode 100755 index 4cd07f16d38..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/facebookapi.php +++ /dev/null @@ -1,63 +0,0 @@ -facebook->getUser(); - -$different_user = $facebook_helper->get_facebook_user($_REQUEST['username']); - -$content = ($facebook_helper->get_other_newsfeed($_REQUEST['username'], "50")); - -if ($user) { - //redirect to url. - //header('Location: http://localhost/suitecrm'); - $logoutUrl = $facebook_helper->get_logout_url(); -} else { - $loginUrl = $facebook_helper->get_login_url($_REQUEST['url']); -} - -?> - - Logout'; ?> - - Login with Facebook'; ?> - -'; -echo ''; -echo ''; -echo ''; -echo ''; -echo ''; - -foreach($content['data'] as $story){ - echo $facebook_helper->process_feed($story); - } -?> - - -
      Facebook Activity' . $log . '
      ' . $different_user['first_name'] . ' ' . $different_user['last_name'] . ' (' . $different_user['username'] .')
      - ' . $different_user['gender']. '
      - ' . $different_user['location']['name'] . '
      - - - \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/config.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/config.php new file mode 100755 index 00000000000..645f1fef70e --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/config.php @@ -0,0 +1,5 @@ +_has_testing_enabled = true; + + //Used to enable hover for the formatter + $this->_enable_in_hover = true; + } + + + + /** + * getItem + * Returns an array containing a key/value pair(s) of a source record + * + * @param Array $args Array of arguments to search/filter by + * @param String $module String optional value of the module that the connector framework is attempting to map to + * @return Array of key/value pair(s) of the source record; empty Array if no results are found + */ + public function getItem($args=array(), $module=null) + { + $result = null; + if ($args['id'] == 1) + { + $result = array(); + $result['id'] = '1'; //Unique record identifier + $result['firstname'] = 'John'; + $result['lastname'] = 'Doe'; + $result['email'] = 'john.doe@sugar.crm'; + $result['state'] = 'CA'; + } + else if ($args['id'] == 2) + { + $result = array(); + $result['id'] = '2'; //Unique record identifier + $result['firstname'] = 'Jane'; + $result['lastname'] = 'Doe'; + $result['email'] = 'jane.doe@sugar.crm'; + $result['state'] = 'HI'; + } + + return $result; + } + + /** + * getList + * Returns a nested array containing a key/value pair(s) of a source record + * + * @param Array $args Array of arguments to search/filter by + * @param String $module String optional value of the module that the connector framework is attempting to map to + * @return Array of key/value pair(s) of source record; empty Array if no results are found + */ + public function getList($args=array(), $module=null) + { + $results = array(); + if(!empty($args['name']['last']) && strtolower($args['name']['last']) == 'doe') + { + $results[1] = array(' + id' => 1, + 'firstname' => 'John', + 'lastname' => 'Doe', + 'email' => 'john.doe@sugar.crm', + 'state' => 'CA' + ); + + $results[2] = array( + 'id' => 2, + 'firstname' => 'Jane', + 'lastname' => 'Doe', + 'email' => 'john.doe@sugar.crm', + 'state' => 'HI' + ); + } + + return $results; + } + } + +?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/language/en_us.lang.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/language/en_us.lang.php new file mode 100755 index 00000000000..dbc33c42312 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/language/en_us.lang.php @@ -0,0 +1,14 @@ + '
      Facebook Application Information
      ', + + //Configuration labels + 'appid' => 'Facebook App ID ', + 'secret' => 'Facebook App Secret ', + ); + +?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/mapping.php new file mode 100755 index 00000000000..e9de11a0d59 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/mapping.php @@ -0,0 +1,7 @@ + + array ( + ), +); \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/vardefs.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/vardefs.php new file mode 100755 index 00000000000..d40a0680322 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI/vardefs.php @@ -0,0 +1,42 @@ + 'vardefs for example connector', + 'fields' => array ( + 'id' => array ( + 'name' => 'id', + 'vname' => 'LBL_ID', + 'type' => 'id', + 'comment' => 'Unique identifier', + 'hidden' => true, + ), + 'fullname' => array ( + 'name' => 'fullname', + 'vname' => 'LBL_FULL_NAME', + 'hover' => true, + ), + 'firstname' => array ( + 'name' => 'firstname', + 'vname' => 'LBL_FIRST_NAME', + ), + 'lastname' => array ( + 'name' => 'lastname', + 'vname' => 'LBL_LAST_NAME', + 'input' => 'lastname', + 'search' => true, + ), + 'email' => array ( + 'name' => 'email', + 'vname' => 'LBL_EMAIL', + ), + 'state' => array ( + 'name' => 'state', + 'vname' => 'LBL_STATE', + 'options' => 'states_dom', + ), + ) + ); + +?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/LICENSE.md b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/LICENSE.md deleted file mode 100755 index 1f7ccb64dd7..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 James Mallison (j7mbo.co.uk) - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/README.md b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/README.md deleted file mode 100755 index 6db3c5caa1c..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/README.md +++ /dev/null @@ -1,91 +0,0 @@ -twitter-api-php -====================== -Simple PHP Wrapper for Twitter API v1.1 calls - -[![Total Downloads](https://poser.pugx.org/j7mbo/twitter-api-php/downloads.png)](https://packagist.org/packages/j7mbo/twitter-api-php) - - -**[Changelog](https://github.com/J7mbo/twitter-api-php/wiki/Changelog)** || -**[Examples](https://github.com/J7mbo/twitter-api-php/wiki/Twitter-API-PHP-Wiki)** || -**[Wiki](https://github.com/J7mbo/twitter-api-php/wiki)** || -**[Buy me a beer!](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KHQYGY4MM3E7J)** - -[Instructions in StackOverflow post here](http://stackoverflow.com/questions/12916539/simplest-php-example-retrieving-user-timeline-with-twitter-api-version-1-1/15314662#15314662) with examples. This post shows you how to get your tokens and more. -If you found it useful, please upvote / leave a comment! :) - -The aim of this class is simple. You need to: - -- Include the class in your PHP code -- [Create a twitter app on the twitter developer site](https://dev.twitter.com/apps/) -- Enable read/write access for your twitter app -- Grab your access tokens from the twitter developer site -- [Choose a twitter API URL to make the request to](https://dev.twitter.com/docs/api/1.1/) -- Choose either GET / POST (depending on the request) -- Choose the fields you want to send with the request (example: `array('screen_name' => 'usernameToBlock')`) - -You really can't get much simpler than that. Here is an example of how to use the class for a POST request to block a user, and at the bottom is an example of a GET request. - -Installation ------------- - -**Normally:** If you *don't* use composer, don't worry - just include TwitterAPIExchange.php in your application. - -**Via Composer:** If you *do* use composer, here's what you add to your composer.json file to have TwitterAPIExchange.php automatically imported into your vendor's folder: - - { - "require": { - "j7mbo/twitter-api-php": "dev-master" - } - } - -Of course, you'll then need to run `php composer.phar update`. - -How To Use ------- -#### Include the class file #### - - require_once('TwitterAPIExchange.php'); - -#### Set access tokens #### - - $settings = array( - 'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN", - 'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET", - 'consumer_key' => "YOUR_CONSUMER_KEY", - 'consumer_secret' => "YOUR_CONSUMER_SECRET" - ); - -#### Choose URL and Request Method #### - - $url = 'https://api.twitter.com/1.1/blocks/create.json'; - $requestMethod = 'POST'; - -#### Choose POST fields #### - - $postfields = array( - 'screen_name' => 'usernameToBlock', - 'skip_status' => '1' - ); - -#### Perform the request! #### - - $twitter = new TwitterAPIExchange($settings); - echo $twitter->buildOauth($url, $requestMethod) - ->setPostfields($postfields) - ->performRequest(); - -GET Request Example ----------------- - -Set the GET field BEFORE calling buildOauth(); and everything else is the same: - - $url = 'https://api.twitter.com/1.1/followers/ids.json'; - $getfield = '?screen_name=J7mbo'; - $requestMethod = 'GET'; - - $twitter = new TwitterAPIExchange($settings); - echo $twitter->setGetfield($getfield) - ->buildOauth($url, $requestMethod) - ->performRequest(); - -That is it! Really simple, works great with the 1.1 API. Thanks to @lackovic10 and @rivers on SO! diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php deleted file mode 100755 index 7832725915d..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/TwitterAPIExchange.php +++ /dev/null @@ -1,263 +0,0 @@ - - * @license MIT License - * @link http://github.com/j7mbo/twitter-api-php - */ -class TwitterAPIExchange -{ - private $oauth_access_token; - private $oauth_access_token_secret; - private $consumer_key; - private $consumer_secret; - private $postfields; - private $getfield; - protected $oauth; - public $url; - - /** - * Create the API access object. Requires an array of settings:: - * oauth access token, oauth access token secret, consumer key, consumer secret - * These are all available by creating your own application on dev.twitter.com - * Requires the cURL library - * - * @param array $settings - */ - public function __construct(array $settings) - { - if (!in_array('curl', get_loaded_extensions())) - { - throw new Exception('You need to install cURL, see: http://curl.haxx.se/docs/install.html'); - } - - if (!isset($settings['oauth_access_token']) - || !isset($settings['oauth_access_token_secret']) - || !isset($settings['consumer_key']) - || !isset($settings['consumer_secret'])) - { - throw new Exception('Make sure you are passing in the correct parameters'); - } - - $this->oauth_access_token = $settings['oauth_access_token']; - $this->oauth_access_token_secret = $settings['oauth_access_token_secret']; - $this->consumer_key = $settings['consumer_key']; - $this->consumer_secret = $settings['consumer_secret']; - } - - /** - * Set postfields array, example: array('screen_name' => 'J7mbo') - * - * @param array $array Array of parameters to send to API - * - * @return TwitterAPIExchange Instance of self for method chaining - */ - public function setPostfields(array $array) - { - if (!is_null($this->getGetfield())) - { - throw new Exception('You can only choose get OR post fields.'); - } - - if (isset($array['status']) && substr($array['status'], 0, 1) === '@') - { - $array['status'] = sprintf("\0%s", $array['status']); - } - - $this->postfields = $array; - - return $this; - } - - /** - * Set getfield string, example: '?screen_name=J7mbo' - * - * @param string $string Get key and value pairs as string - * - * @return \TwitterAPIExchange Instance of self for method chaining - */ - public function setGetfield($string) - { - if (!is_null($this->getPostfields())) - { - throw new Exception('You can only choose get OR post fields.'); - } - - $search = array('#', ',', '+', ':'); - $replace = array('%23', '%2C', '%2B', '%3A'); - $string = str_replace($search, $replace, $string); - - $this->getfield = $string; - - return $this; - } - - /** - * Get getfield string (simple getter) - * - * @return string $this->getfields - */ - public function getGetfield() - { - return $this->getfield; - } - - /** - * Get postfields array (simple getter) - * - * @return array $this->postfields - */ - public function getPostfields() - { - return $this->postfields; - } - - /** - * Build the Oauth object using params set in construct and additionals - * passed to this method. For v1.1, see: https://dev.twitter.com/docs/api/1.1 - * - * @param string $url The API url to use. Example: https://api.twitter.com/1.1/search/tweets.json - * @param string $requestMethod Either POST or GET - * @return \TwitterAPIExchange Instance of self for method chaining - */ - public function buildOauth($url, $requestMethod) - { - if (!in_array(strtolower($requestMethod), array('post', 'get'))) - { - throw new Exception('Request method must be either POST or GET'); - } - - $consumer_key = $this->consumer_key; - $consumer_secret = $this->consumer_secret; - $oauth_access_token = $this->oauth_access_token; - $oauth_access_token_secret = $this->oauth_access_token_secret; - - $oauth = array( - 'oauth_consumer_key' => $consumer_key, - 'oauth_nonce' => time(), - 'oauth_signature_method' => 'HMAC-SHA1', - 'oauth_token' => $oauth_access_token, - 'oauth_timestamp' => time(), - 'oauth_version' => '1.0' - ); - - $getfield = $this->getGetfield(); - - if (!is_null($getfield)) - { - $getfields = str_replace('?', '', explode('&', $getfield)); - foreach ($getfields as $g) - { - $split = explode('=', $g); - $oauth[$split[0]] = $split[1]; - } - } - - $base_info = $this->buildBaseString($url, $requestMethod, $oauth); - $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); - $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); - $oauth['oauth_signature'] = $oauth_signature; - - $this->url = $url; - $this->oauth = $oauth; - - return $this; - } - - /** - * Perform the actual data retrieval from the API - * - * @param boolean $return If true, returns data. - * - * @return string json If $return param is true, returns json data. - */ - public function performRequest($return = true) - { - if (!is_bool($return)) - { - throw new Exception('performRequest parameter must be true or false'); - } - - $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:'); - - $getfield = $this->getGetfield(); - $postfields = $this->getPostfields(); - - $options = array( - CURLOPT_HTTPHEADER => $header, - CURLOPT_HEADER => false, - CURLOPT_URL => $this->url, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_TIMEOUT => 10, - ); - - if (!is_null($postfields)) - { - $options[CURLOPT_POSTFIELDS] = $postfields; - } - else - { - if ($getfield !== '') - { - $options[CURLOPT_URL] .= $getfield; - } - } - - $feed = curl_init(); - curl_setopt_array($feed, $options); - $json = curl_exec($feed); - curl_close($feed); - - if ($return) { return $json; } - } - - /** - * Private method to generate the base string used by cURL - * - * @param string $baseURI - * @param string $method - * @param array $params - * - * @return string Built base string - */ - private function buildBaseString($baseURI, $method, $params) - { - $return = array(); - ksort($params); - - foreach($params as $key=>$value) - { - $return[] = "$key=" . $value; - } - - return $method . "&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $return)); - } - - /** - * Private method to generate authorization header used by cURL - * - * @param array $oauth Array of oauth data generated by buildOauth() - * - * @return string $return Header used by cURL for request - */ - private function buildAuthorizationHeader($oauth) - { - $return = 'Authorization: OAuth '; - $values = array(); - - foreach($oauth as $key => $value) - { - $values[] = "$key=\"" . rawurlencode($value) . "\""; - } - - $return .= implode(', ', $values); - return $return; - } - -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json deleted file mode 100755 index 2032224ccbf..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/composer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "j7mbo/twitter-api-php", - "description": "Simple PHP Wrapper for Twitter API v1.1 calls", - "version": "0.1", - "type": "library", - "keywords": ["twitter", "PHP", "API"], - "homepage": "https://github.com/j7mbo/twitter-api-php", - "license": "GNU Public License", - "authors": [ - { - "name": "James Mallison", - "homepage": "https://github.com/j7mbo/twitter-api-php" - } - ], - "autoload": { - "files": ["TwitterAPIExchange.php"] - } -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/config.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/config.php new file mode 100755 index 00000000000..29dc8a6e93d --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/config.php @@ -0,0 +1,9 @@ + '
      Twitter Authentication
      ', + //Configuration labels + 'oauth_access_token' => 'Oauth Access Token', + 'oauth_access_token_secret' => 'Oauth Access Token Secret', + 'consumer_key' => 'Consumer Key', + 'consumer_secret' => 'Consumer Secret', + 'max_number_of_tweets' => 'Number of Tweets Shown', + 'OAUTH_CALLBACK' => 'Callback URL', + + ); + +?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php new file mode 100755 index 00000000000..1c03d3f5530 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php @@ -0,0 +1,13 @@ + + array ( + 'Accounts' => + array ( + ), + 'Contacts' => + array ( + ), + ), +); \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css deleted file mode 100755 index 96b1a2adc83..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.css +++ /dev/null @@ -1,9 +0,0 @@ -.tweet { - border-bottom: 0 none; - border-radius: 0; - border-top: 1px solid #E8E8E8; - cursor: default; - font-size: 12px; - min-height: 32px; - padding: 9px 15px 12px; -} \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js deleted file mode 100755 index 9faf43a6f6b..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.js +++ /dev/null @@ -1,22 +0,0 @@ -$(function() { - - var twitter_user = $( "#twitter_user_c" ).text(); - - if(twitter_user){ - - $.ajax({ - type: "POST", - url: "index.php?entryPoint=social", - data: { twitter_user: twitter_user, social: "twitter"} - }) - .done(function( msg ) { - $("#twitter_feed").html(' '); - $("#twitter_feed").html( msg + $("#twitter_feed").html() ); - }); - - }else{ - return false; - } - - -}); \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.php new file mode 100755 index 00000000000..8decc231231 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter.php @@ -0,0 +1,88 @@ +_has_testing_enabled = false; + + //Used to enable hover for the formatter + $this->_enable_in_hover = true; + } + + + /** + * getItem + * Returns an array containing a key/value pair(s) of a source record + * + * @param Array $args Array of arguments to search/filter by + * @param String $module String optional value of the module that the connector framework is attempting to map to + * @return Array of key/value pair(s) of the source record; empty Array if no results are found + */ + public function getItem($args=array(), $module=null) + { + $result = null; + if ($args['id'] == 1) + { + $result = array(); + $result['id'] = '1'; //Unique record identifier + $result['firstname'] = 'John'; + $result['lastname'] = 'Doe'; + $result['email'] = 'john.doe@sugar.crm'; + $result['state'] = 'CA'; + } + else if ($args['id'] == 2) + { + $result = array(); + $result['id'] = '2'; //Unique record identifier + $result['firstname'] = 'Jane'; + $result['lastname'] = 'Doe'; + $result['email'] = 'jane.doe@sugar.crm'; + $result['state'] = 'HI'; + } + + return $result; + } + + /** + * getList + * Returns a nested array containing a key/value pair(s) of a source record + * + * @param Array $args Array of arguments to search/filter by + * @param String $module String optional value of the module that the connector framework is attempting to map to + * @return Array of key/value pair(s) of source record; empty Array if no results are found + */ + public function getList($args=array(), $module=null) + { + $results = array(); + if(!empty($args['name']['last']) && strtolower($args['name']['last']) == 'doe') + { + $results[1] = array(' + id' => 1, + 'firstname' => 'John', + 'lastname' => 'Doe', + 'email' => 'john.doe@sugar.crm', + 'state' => 'CA' + ); + + $results[2] = array( + 'id' => 2, + 'firstname' => 'Jane', + 'lastname' => 'Doe', + 'email' => 'john.doe@sugar.crm', + 'state' => 'HI' + ); + } + + return $results; + } + } + +?> \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php deleted file mode 100755 index 9e91fedd23c..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/callback.php +++ /dev/null @@ -1,40 +0,0 @@ -getAccessToken($_REQUEST['oauth_verifier']); - -/* Save the access tokens. Normally these would be saved in a database for future use. */ -$_SESSION['access_token'] = $access_token; - -/* Remove no longer needed request tokens */ -unset($_SESSION['oauth_token']); -unset($_SESSION['oauth_token_secret']); - -/* If HTTP response is 200 continue otherwise send to connect page to retry */ -if (200 == $connection->http_code) { - /* The user has been verified and the access tokens can be saved for future use */ - $_SESSION['status'] = 'verified'; - header('Location: http://localhost/suitecrm/index.php?entryPoint=social_reader'); -} else { - /* Save HTTP status for error dialog on connnect page.*/ - header('Location: http://localhost/suitecrm/index.php?entryPoint=social_reader'); -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/darker.png b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/darker.png deleted file mode 100755 index 746b6b9f80c71049f2a4eb84ff72d5d1bf77c62c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2370 zcmV-I3BC4-P)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2%AYn zK~!jg?VD?CQ|B4Sf5(m;U*kCB;v^&~X`mqlD70k=%6eVbQL0v*Xp7YQm8n{*b!>yJ z(!O+58|t*KV;|a1YSE?^(P~r!DwWWcmX(x3qEZMUPRQMkYn;T6?ZlUJ&OSJC634d` z2cpeC=_r2mzR&ajpNrq~p4TS=K=t-rGFh@@kd9Zj2}1SuU2^SRo90ZU_22>KvVNBN zN$bG_D6X`LEdRUY0LY>^=R%i5Bg_0Ea&bx0oC{qJjV$wvq$5|gLBmVSt0>W^0odPr zkvH4z-$^Jta{d3210W?h@h{a^F(j&a*$TCKc&?(53nP9G+XiPXlt^O&F&IP&hsn`s z5EPNA;FxsxVjtoV% z8w_x}#msH+D zUG^;@b5%E4eOZieLxC|GdqX0xe$&Ypj-jMNi8KOE2Y=kSfm@f>FeZxRDir+gt8;wj^zh!Z z4|1S;fIofHmFDiG$6VD-RKNGsNereu%r#2@czVNHJ~(6LRF^Ahouk{HM6Xf-GLk4F z2#V;a{+_juy`2LY@e>1%F6o1ag}KMDd^>Xs!v=aD&Ais3mCBO>f^ zz-{K7lr<8yYYhef7Mt|!Z9Imrv=m)I0RVfS+RTxTUf$^)Brr0G@8oEJduZEaPNXAHVpl8Ko(IhUV0|K-#%m*RAB1@**Dl z=s1!fueR#0OW`wyYIg< zsa}`I3qYPSa=Y>cLv*@FGU}&&*gGwL=D_FNS6R#x58XwfUdyTOetvVfk#J!#4KF;x zvGyKn7g|72@Z#~aNzb_gBBM&YEgjb6MgFF$k*NJpmz@@un+I-K&cC)k$QrE@kIjZG zid2|Q7;@FfqDY-y&Ch9>U1jV%1XGUb`j!;hxMg}*nFc%;pz4NalQwCD8!dNc7A`d zHF`|$sIN)OYh;t+9>+}hiH%pAbo}Z^-{-?KR(|-_2V7lLz!R&NMvv3R6Q5aRhyn%L9QNukNeYg;z4xn|*H zt{ll-v(SP<5ctU2!)PExv&}i)E=T(|v~{!R%mo_z8~~^lio~8|rp4*xp0K;{2Scnb zDPVnhF~@rc(5Y2iYtnIjWhu=UJu~V%y`xBy%vdNyuiH0kud*mjt`W*)+)r%0uBr@$ zAW&q`^XT>U1Vou-<(6ojBi0_?ZRz5q-Idtyc;BQ?i?NieCr7FYj`cfv`%Fj5+(a6o z(NV%mC2xIgPtsNA_$Y)ue z(H6(iw6=6|1Cq$sb|O4!+Cosu(|F91lh*NY-eyjL*2 zPp14#jdRp00ET>iMwBYvxArpZ^GEwivXu7ql5#>{u7-)zygM?N#;BZZzp=cC=T_G6 zm!|Vcg%W98rOCnGZ^Jg?M>gn??_7&dk|z7hkzA|C2f+O+YB8K?YpQttt8+<(5^3C0SHn|VHsbV;k)Nx^=^x{bW^1&+TB}7CC60F4`JlLy zO-rh%uPo)z*>>tJMTiJ9`l@m@kyxWe7UMtePxOtAQ{|p=4DqZ|L6c*Ma9HHbpqIOq zN>01naq9sb?y~bh-6Fo&v6XxG9htRPL6sBNbEf>n#&0&CXG{GO?q0DJ8EAI6*w%0& zp@&2W)!TQ;B}?M3Z>+K`;LmrgWw#A>_r))8n;BkT3>)?wjN9&LYoqqAO$=Gv5}L3W zw3O(z_<~_NhCC#Cxh%)!WWeJELEyz(*Ru7dH9Y#^QLKaRWcxTTDA4AjQ{~V%J_289 zV*SL%ISK{kMjh@zkm0e^i{!C5+S-!e7MuFNW#_SGetqLAZZN?9i_kwsCr=rf(A&NK zltX2*cDvh)-R(_j_}yn7M3yB)Nv0y-$onl9Xmif~r>HA|%j+lklIi6o)=z945=FW$ z@k^U>&ULW0i;>X)Ppn?b&T7+)cKe8*9Sx0_baAE2L;DU>TVzJB&Y^wK&A^C1byAiq zM#`Um0FGYh=jet0OA<==KAjA|7^G?Z(LKxjXI4uQm%`=H$TGi3`pQivxf~i<<`>!5 ooU_as0%ZTSEKBC;cx9XLUtuVuKI-|I^Z)<=07*qoM6N<$g3Pn2od5s; diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/lighter.png b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/images/lighter.png deleted file mode 100755 index 297bb03404f2d7462ee9355aae38f5f5f3e47fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2490 zcmV;r2}SmaP)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2@^>~ zK~!jg?VEdWl+_u=f8X9WA)72QVM!vF1VSK4AZQ?nK}o}NseS3JN$f zgRQMIo!W~OJ6`ZouvAJ_K&eH%O=zU35Dd9+OGJ}EvYTu++57IdU;kJVc9XpY6B?a; zX3k{ZIp=-eC+|7m`<-)kR{+>vQ7sWi9D|5ebEgWz_KIq$s4!>9f*d_|j-lj_V|e1| zv2!Q@e7>PCTvsDT9K#C=07>!<2 zJRT3v{^4m(e0B`AMuXes=AQD^+;C$tPj22q>4H*zdfz>`#KAid3>9xAeo+*W%jE#P zv+pgwyLbU*^X6iX@D|vxdJPV{BV^y=rMIzo>FtA}CzL%H7|@3PC-uR0k{o`MEpT&+ zmiCUwd$DjaD&G5mR^R=5Ugy>A zFL6`pd;osE=`rd~)-ZEc5shchvh}x5aZ~9nJpS;;UjCggyhMFX4IM@k^;K2OnpeX9 zJ+G59W-M>Ndx+<@J`*QB2?^MN1N-(fead7?=HEi6T!B@Box5IR=L;`>Ej{PX zHuTf??pp_V_K#2V&%f=WuDXUP)2>6K(eP;bS}ruV@b7*5sr;ydIrB8I2tIsDgsYdEB~aA*X6k7? zxX|2;qp^|Gwe@`Y#d&IupCC)EqUw`l7)GU&uTKu*U$o?QG#U*z%qZYj8`hDRoCLu8 zhbzgOI5DbLyT^;&?d{E@=<{Loc(HlBWQ@7?YwIarxgyB6oH@guS9eiXI-mWozJlq( z1uEY@fC2%N(MZ*iqs%Lw&3$(-XHs%f#Ci8GF3A_N^~J`q@N(Yec4#`>p8;Rm>`^(w z^()mX);zY6A1}KTOQ(hBpZ+tI2M_vvC6EgOasg^TuSW9u`2L~=xMTvlF=IdirA&q( z01}jz+(`M#6-+Id=Jypvl2wZSngV!x>{xvBuA7QRt)c4kYU--0D3~!Fhr>aA^+`_G z)iHDWG@POs#IMsQgCL+*sYp&si#>KieJ zAZPaXZl!3>9M-SjNX7dfvh?=bdf)$&1YWO*1jqy#ZFVPakM~lt{ns24pi(Mnce*e+ zoV|U5)IWA0uWtapa=C)>xf3{EU4zZ(WX19y(%RC@hySVMd_x1@*}REPr@KGD1PCBr zszd|P3jULJU(P|*6JUEpf1ZUYMN@b5y{gO~R0`R^ zzo2^1b1iYS>vBugsL9qPM&yVTyCwWp(Uo=ev@y*W7rS{ZmOePbh#j}_&X%YtxeZa(=9L5<&(e8Bi z<5wsYm^&^0MKr*8(egMLdIIf9`S}2Jn9Y=xl~T570XoAdF4!DlHH6a}anEJ-cv*VQ z<;7KRgYq-}Q)5qi@;qcECS38JtLDV#Y+3g(n;(3LUp}&dB%O}ct5)I-xFV2%>k11g zTUf@C&yKTa*KVdw^(R50loR*{_b2SKCHeZt4jkLpj^;ZlKOe6sQZ!>aT9uM(b0*;N zdYL_=0IS=B(gj7|CTgIo3w=s5DLNgUE;lDl z=6*ck(9~r1FRqNt5);TzP2p%4ylH~wfExv!+`pk8s}?!j(i+mgrP)GJVGd2L zrifxR3OQ=I9MLCX4Ray;#3LJ#2{HtkfT^vG#S0hk#JUIhwAC2&WDQrS)2nfk*V=iQ!Y2K(sVlqHpM%x^1{ck;y4Kin5jc`W;@8<8AFx4+YWs z?QSo2A}4+Q<6F?#y0F{rget('account/verify_credentials'); - - -//$connection->get('users/show', array('screen_name' => 'abraham')); -//$connection->post('statuses/update', array('status' => date(DATE_RFC822))); -//$connection->post('statuses/destroy', array('id' => 5437877770)); -//$connection->post('friendships/create', array('id' => 9436992)); -//$connection->post('friendships/destroy', array('id' => 9436992)); - -/* Include HTML to display on the page */ -include('html.inc'); diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php deleted file mode 100755 index 4570013b80f..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/OAuth.php +++ /dev/null @@ -1,874 +0,0 @@ -key = $key; - $this->secret = $secret; - $this->callback_url = $callback_url; - } - - function __toString() { - return "OAuthConsumer[key=$this->key,secret=$this->secret]"; - } -} - -class OAuthToken { - // access tokens and request tokens - public $key; - public $secret; - - /** - * key = the token - * secret = the token secret - */ - function __construct($key, $secret) { - $this->key = $key; - $this->secret = $secret; - } - - /** - * generates the basic string serialization of a token that a server - * would respond to request_token and access_token calls with - */ - function to_string() { - return "oauth_token=" . - OAuthUtil::urlencode_rfc3986($this->key) . - "&oauth_token_secret=" . - OAuthUtil::urlencode_rfc3986($this->secret); - } - - function __toString() { - return $this->to_string(); - } -} - -/** - * A class for implementing a Signature Method - * See section 9 ("Signing Requests") in the spec - */ -abstract class OAuthSignatureMethod { - /** - * Needs to return the name of the Signature Method (ie HMAC-SHA1) - * @return string - */ - abstract public function get_name(); - - /** - * Build up the signature - * NOTE: The output of this function MUST NOT be urlencoded. - * the encoding is handled in OAuthRequest when the final - * request is serialized - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @return string - */ - abstract public function build_signature($request, $consumer, $token); - - /** - * Verifies that a given signature is correct - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @param string $signature - * @return bool - */ - public function check_signature($request, $consumer, $token, $signature) { - $built = $this->build_signature($request, $consumer, $token); - return $built == $signature; - } -} - -/** - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] - * where the Signature Base String is the text and the key is the concatenated values (each first - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' - * character (ASCII code 38) even if empty. - * - Chapter 9.2 ("HMAC-SHA1") - */ -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { - function get_name() { - return "HMAC-SHA1"; - } - - public function build_signature($request, $consumer, $token) { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - $key_parts = array( - $consumer->secret, - ($token) ? $token->secret : "" - ); - - $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - - return base64_encode(hash_hmac('sha1', $base_string, $key, true)); - } -} - -/** - * The PLAINTEXT method does not provide any security protection and SHOULD only be used - * over a secure channel such as HTTPS. It does not use the Signature Base String. - * - Chapter 9.4 ("PLAINTEXT") - */ -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { - public function get_name() { - return "PLAINTEXT"; - } - - /** - * oauth_signature is set to the concatenated encoded values of the Consumer Secret and - * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is - * empty. The result MUST be encoded again. - * - Chapter 9.4.1 ("Generating Signatures") - * - * Please note that the second encoding MUST NOT happen in the SignatureMethod, as - * OAuthRequest handles this! - */ - public function build_signature($request, $consumer, $token) { - $key_parts = array( - $consumer->secret, - ($token) ? $token->secret : "" - ); - - $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - $request->base_string = $key; - - return $key; - } -} - -/** - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a - * verified way to the Service Provider, in a manner which is beyond the scope of this - * specification. - * - Chapter 9.3 ("RSA-SHA1") - */ -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { - public function get_name() { - return "RSA-SHA1"; - } - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // (2) fetch via http using a url provided by the requester - // (3) some sort of specific discovery code based on request - // - // Either way should return a string representation of the certificate - protected abstract function fetch_public_cert(&$request); - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // - // Either way should return a string representation of the certificate - protected abstract function fetch_private_cert(&$request); - - public function build_signature($request, $consumer, $token) { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - // Fetch the private key cert based on the request - $cert = $this->fetch_private_cert($request); - - // Pull the private key ID from the certificate - $privatekeyid = openssl_get_privatekey($cert); - - // Sign using the key - $ok = openssl_sign($base_string, $signature, $privatekeyid); - - // Release the key resource - openssl_free_key($privatekeyid); - - return base64_encode($signature); - } - - public function check_signature($request, $consumer, $token, $signature) { - $decoded_sig = base64_decode($signature); - - $base_string = $request->get_signature_base_string(); - - // Fetch the public key cert based on the request - $cert = $this->fetch_public_cert($request); - - // Pull the public key ID from the certificate - $publickeyid = openssl_get_publickey($cert); - - // Check the computed signature against the one passed in the query - $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); - - // Release the key resource - openssl_free_key($publickeyid); - - return $ok == 1; - } -} - -class OAuthRequest { - private $parameters; - private $http_method; - private $http_url; - // for debug purposes - public $base_string; - public static $version = '1.0'; - public static $POST_INPUT = 'php://input'; - - function __construct($http_method, $http_url, $parameters=NULL) { - @$parameters or $parameters = array(); - $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); - $this->parameters = $parameters; - $this->http_method = $http_method; - $this->http_url = $http_url; - } - - - /** - * attempt to build up a request from what was passed to the server - */ - public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { - $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") - ? 'http' - : 'https'; - @$http_url or $http_url = $scheme . - '://' . $_SERVER['HTTP_HOST'] . - ':' . - $_SERVER['SERVER_PORT'] . - $_SERVER['REQUEST_URI']; - @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; - - // We weren't handed any parameters, so let's find the ones relevant to - // this request. - // If you run XML-RPC or similar you should use this to provide your own - // parsed parameter-list - if (!$parameters) { - // Find request headers - $request_headers = OAuthUtil::get_headers(); - - // Parse the query-string to find GET parameters - $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); - - // It's a POST request of the proper content-type, so parse POST - // parameters and add those overriding any duplicates from GET - if ($http_method == "POST" - && @strstr($request_headers["Content-Type"], - "application/x-www-form-urlencoded") - ) { - $post_data = OAuthUtil::parse_parameters( - file_get_contents(self::$POST_INPUT) - ); - $parameters = array_merge($parameters, $post_data); - } - - // We have a Authorization-header with OAuth data. Parse the header - // and add those overriding any duplicates from GET or POST - if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { - $header_parameters = OAuthUtil::split_header( - $request_headers['Authorization'] - ); - $parameters = array_merge($parameters, $header_parameters); - } - - } - - return new OAuthRequest($http_method, $http_url, $parameters); - } - - /** - * pretty much a helper function to set up the request - */ - public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { - @$parameters or $parameters = array(); - $defaults = array("oauth_version" => OAuthRequest::$version, - "oauth_nonce" => OAuthRequest::generate_nonce(), - "oauth_timestamp" => OAuthRequest::generate_timestamp(), - "oauth_consumer_key" => $consumer->key); - if ($token) - $defaults['oauth_token'] = $token->key; - - $parameters = array_merge($defaults, $parameters); - - return new OAuthRequest($http_method, $http_url, $parameters); - } - - public function set_parameter($name, $value, $allow_duplicates = true) { - if ($allow_duplicates && isset($this->parameters[$name])) { - // We have already added parameter(s) with this name, so add to the list - if (is_scalar($this->parameters[$name])) { - // This is the first duplicate, so transform scalar (string) - // into an array so we can add the duplicates - $this->parameters[$name] = array($this->parameters[$name]); - } - - $this->parameters[$name][] = $value; - } else { - $this->parameters[$name] = $value; - } - } - - public function get_parameter($name) { - return isset($this->parameters[$name]) ? $this->parameters[$name] : null; - } - - public function get_parameters() { - return $this->parameters; - } - - public function unset_parameter($name) { - unset($this->parameters[$name]); - } - - /** - * The request parameters, sorted and concatenated into a normalized string. - * @return string - */ - public function get_signable_parameters() { - // Grab all parameters - $params = $this->parameters; - - // Remove oauth_signature if present - // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") - if (isset($params['oauth_signature'])) { - unset($params['oauth_signature']); - } - - return OAuthUtil::build_http_query($params); - } - - /** - * Returns the base string of this request - * - * The base string defined as the method, the url - * and the parameters (normalized), each urlencoded - * and the concated with &. - */ - public function get_signature_base_string() { - $parts = array( - $this->get_normalized_http_method(), - $this->get_normalized_http_url(), - $this->get_signable_parameters() - ); - - $parts = OAuthUtil::urlencode_rfc3986($parts); - - return implode('&', $parts); - } - - /** - * just uppercases the http method - */ - public function get_normalized_http_method() { - return strtoupper($this->http_method); - } - - /** - * parses the url and rebuilds it to be - * scheme://host/path - */ - public function get_normalized_http_url() { - $parts = parse_url($this->http_url); - - $port = @$parts['port']; - $scheme = $parts['scheme']; - $host = $parts['host']; - $path = @$parts['path']; - - $port or $port = ($scheme == 'https') ? '443' : '80'; - - if (($scheme == 'https' && $port != '443') - || ($scheme == 'http' && $port != '80')) { - $host = "$host:$port"; - } - return "$scheme://$host$path"; - } - - /** - * builds a url usable for a GET request - */ - public function to_url() { - $post_data = $this->to_postdata(); - $out = $this->get_normalized_http_url(); - if ($post_data) { - $out .= '?'.$post_data; - } - return $out; - } - - /** - * builds the data one would send in a POST request - */ - public function to_postdata() { - return OAuthUtil::build_http_query($this->parameters); - } - - /** - * builds the Authorization: header - */ - public function to_header($realm=null) { - $first = true; - if($realm) { - $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; - $first = false; - } else - $out = 'Authorization: OAuth'; - - $total = array(); - foreach ($this->parameters as $k => $v) { - if (substr($k, 0, 5) != "oauth") continue; - if (is_array($v)) { - throw new OAuthException('Arrays not supported in headers'); - } - $out .= ($first) ? ' ' : ','; - $out .= OAuthUtil::urlencode_rfc3986($k) . - '="' . - OAuthUtil::urlencode_rfc3986($v) . - '"'; - $first = false; - } - return $out; - } - - public function __toString() { - return $this->to_url(); - } - - - public function sign_request($signature_method, $consumer, $token) { - $this->set_parameter( - "oauth_signature_method", - $signature_method->get_name(), - false - ); - $signature = $this->build_signature($signature_method, $consumer, $token); - $this->set_parameter("oauth_signature", $signature, false); - } - - public function build_signature($signature_method, $consumer, $token) { - $signature = $signature_method->build_signature($this, $consumer, $token); - return $signature; - } - - /** - * util function: current timestamp - */ - private static function generate_timestamp() { - return time(); - } - - /** - * util function: current nonce - */ - private static function generate_nonce() { - $mt = microtime(); - $rand = mt_rand(); - - return md5($mt . $rand); // md5s look nicer than numbers - } -} - -class OAuthServer { - protected $timestamp_threshold = 300; // in seconds, five minutes - protected $version = '1.0'; // hi blaine - protected $signature_methods = array(); - - protected $data_store; - - function __construct($data_store) { - $this->data_store = $data_store; - } - - public function add_signature_method($signature_method) { - $this->signature_methods[$signature_method->get_name()] = - $signature_method; - } - - // high level functions - - /** - * process a request_token request - * returns the request token on success - */ - public function fetch_request_token(&$request) { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // no token required for the initial token request - $token = NULL; - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $callback = $request->get_parameter('oauth_callback'); - $new_token = $this->data_store->new_request_token($consumer, $callback); - - return $new_token; - } - - /** - * process an access_token request - * returns the access token on success - */ - public function fetch_access_token(&$request) { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // requires authorized request token - $token = $this->get_token($request, $consumer, "request"); - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $verifier = $request->get_parameter('oauth_verifier'); - $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); - - return $new_token; - } - - /** - * verify an api call, checks all the parameters - */ - public function verify_request(&$request) { - $this->get_version($request); - $consumer = $this->get_consumer($request); - $token = $this->get_token($request, $consumer, "access"); - $this->check_signature($request, $consumer, $token); - return array($consumer, $token); - } - - // Internals from here - /** - * version 1 - */ - private function get_version(&$request) { - $version = $request->get_parameter("oauth_version"); - if (!$version) { - // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. - // Chapter 7.0 ("Accessing Protected Ressources") - $version = '1.0'; - } - if ($version !== $this->version) { - throw new OAuthException("OAuth version '$version' not supported"); - } - return $version; - } - - /** - * figure out the signature with some defaults - */ - private function get_signature_method(&$request) { - $signature_method = - @$request->get_parameter("oauth_signature_method"); - - if (!$signature_method) { - // According to chapter 7 ("Accessing Protected Ressources") the signature-method - // parameter is required, and we can't just fallback to PLAINTEXT - throw new OAuthException('No signature method parameter. This parameter is required'); - } - - if (!in_array($signature_method, - array_keys($this->signature_methods))) { - throw new OAuthException( - "Signature method '$signature_method' not supported " . - "try one of the following: " . - implode(", ", array_keys($this->signature_methods)) - ); - } - return $this->signature_methods[$signature_method]; - } - - /** - * try to find the consumer for the provided request's consumer key - */ - private function get_consumer(&$request) { - $consumer_key = @$request->get_parameter("oauth_consumer_key"); - if (!$consumer_key) { - throw new OAuthException("Invalid consumer key"); - } - - $consumer = $this->data_store->lookup_consumer($consumer_key); - if (!$consumer) { - throw new OAuthException("Invalid consumer"); - } - - return $consumer; - } - - /** - * try to find the token for the provided request's token key - */ - private function get_token(&$request, $consumer, $token_type="access") { - $token_field = @$request->get_parameter('oauth_token'); - $token = $this->data_store->lookup_token( - $consumer, $token_type, $token_field - ); - if (!$token) { - throw new OAuthException("Invalid $token_type token: $token_field"); - } - return $token; - } - - /** - * all-in-one function to check the signature on a request - * should guess the signature method appropriately - */ - private function check_signature(&$request, $consumer, $token) { - // this should probably be in a different method - $timestamp = @$request->get_parameter('oauth_timestamp'); - $nonce = @$request->get_parameter('oauth_nonce'); - - $this->check_timestamp($timestamp); - $this->check_nonce($consumer, $token, $nonce, $timestamp); - - $signature_method = $this->get_signature_method($request); - - $signature = $request->get_parameter('oauth_signature'); - $valid_sig = $signature_method->check_signature( - $request, - $consumer, - $token, - $signature - ); - - if (!$valid_sig) { - throw new OAuthException("Invalid signature"); - } - } - - /** - * check that the timestamp is new enough - */ - private function check_timestamp($timestamp) { - if( ! $timestamp ) - throw new OAuthException( - 'Missing timestamp parameter. The parameter is required' - ); - - // verify that timestamp is recentish - $now = time(); - if (abs($now - $timestamp) > $this->timestamp_threshold) { - throw new OAuthException( - "Expired timestamp, yours $timestamp, ours $now" - ); - } - } - - /** - * check that the nonce is not repeated - */ - private function check_nonce($consumer, $token, $nonce, $timestamp) { - if( ! $nonce ) - throw new OAuthException( - 'Missing nonce parameter. The parameter is required' - ); - - // verify that the nonce is uniqueish - $found = $this->data_store->lookup_nonce( - $consumer, - $token, - $nonce, - $timestamp - ); - if ($found) { - throw new OAuthException("Nonce already used: $nonce"); - } - } - -} - -class OAuthDataStore { - function lookup_consumer($consumer_key) { - // implement me - } - - function lookup_token($consumer, $token_type, $token) { - // implement me - } - - function lookup_nonce($consumer, $token, $nonce, $timestamp) { - // implement me - } - - function new_request_token($consumer, $callback = null) { - // return a new token attached to this consumer - } - - function new_access_token($token, $consumer, $verifier = null) { - // return a new access token attached to this consumer - // for the user associated with this token if the request token - // is authorized - // should also invalidate the request token - } - -} - -class OAuthUtil { - public static function urlencode_rfc3986($input) { - if (is_array($input)) { - return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); - } else if (is_scalar($input)) { - return str_replace( - '+', - ' ', - str_replace('%7E', '~', rawurlencode($input)) - ); - } else { - return ''; - } -} - - - // This decode function isn't taking into consideration the above - // modifications to the encoding process. However, this method doesn't - // seem to be used anywhere so leaving it as is. - public static function urldecode_rfc3986($string) { - return urldecode($string); - } - - // Utility function for turning the Authorization: header into - // parameters, has to do some unescaping - // Can filter out any non-oauth parameters if needed (default behaviour) - public static function split_header($header, $only_allow_oauth_parameters = true) { - $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; - $offset = 0; - $params = array(); - while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { - $match = $matches[0]; - $header_name = $matches[2][0]; - $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; - if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { - $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); - } - $offset = $match[1] + strlen($match[0]); - } - - if (isset($params['realm'])) { - unset($params['realm']); - } - - return $params; - } - - // helper to try to sort out headers for people who aren't running apache - public static function get_headers() { - if (function_exists('apache_request_headers')) { - // we need this to get the actual Authorization: header - // because apache tends to tell us it doesn't exist - $headers = apache_request_headers(); - - // sanitize the output of apache_request_headers because - // we always want the keys to be Cased-Like-This and arh() - // returns the headers in the same case as they are in the - // request - $out = array(); - foreach( $headers AS $key => $value ) { - $key = str_replace( - " ", - "-", - ucwords(strtolower(str_replace("-", " ", $key))) - ); - $out[$key] = $value; - } - } else { - // otherwise we don't have apache and are just going to have to hope - // that $_SERVER actually contains what we need - $out = array(); - if( isset($_SERVER['CONTENT_TYPE']) ) - $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; - if( isset($_ENV['CONTENT_TYPE']) ) - $out['Content-Type'] = $_ENV['CONTENT_TYPE']; - - foreach ($_SERVER as $key => $value) { - if (substr($key, 0, 5) == "HTTP_") { - // this is chaos, basically it is just there to capitalize the first - // letter of every word that is not an initial HTTP and strip HTTP - // code from przemek - $key = str_replace( - " ", - "-", - ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) - ); - $out[$key] = $value; - } - } - } - return $out; - } - - // This function takes a input like a=b&a=c&d=e and returns the parsed - // parameters like this - // array('a' => array('b','c'), 'd' => 'e') - public static function parse_parameters( $input ) { - if (!isset($input) || !$input) return array(); - - $pairs = explode('&', $input); - - $parsed_parameters = array(); - foreach ($pairs as $pair) { - $split = explode('=', $pair, 2); - $parameter = OAuthUtil::urldecode_rfc3986($split[0]); - $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; - - if (isset($parsed_parameters[$parameter])) { - // We have already recieved parameter(s) with this name, so add to the list - // of parameters with this name - - if (is_scalar($parsed_parameters[$parameter])) { - // This is the first duplicate, so transform scalar (string) into an array - // so we can add the duplicates - $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); - } - - $parsed_parameters[$parameter][] = $value; - } else { - $parsed_parameters[$parameter] = $value; - } - } - return $parsed_parameters; - } - - public static function build_http_query($params) { - if (!$params) return ''; - - // Urlencode both keys and values - $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); - $values = OAuthUtil::urlencode_rfc3986(array_values($params)); - $params = array_combine($keys, $values); - - // Parameters are sorted by name, using lexicographical byte value ordering. - // Ref: Spec: 9.1.1 (1) - uksort($params, 'strcmp'); - - $pairs = array(); - foreach ($params as $parameter => $value) { - if (is_array($value)) { - // If two or more parameters share the same name, they are sorted by their value - // Ref: Spec: 9.1.1 (1) - natsort($value); - foreach ($value as $duplicate_value) { - $pairs[] = $parameter . '=' . $duplicate_value; - } - } else { - $pairs[] = $parameter . '=' . $value; - } - } - // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) - // Each name-value pair is separated by an '&' character (ASCII code 38) - return implode('&', $pairs); - } -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php deleted file mode 100755 index f7fc22bd1ef..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_auth/twitteroauth/twitteroauth.php +++ /dev/null @@ -1,241 +0,0 @@ -http_status; } - function lastAPICall() { return $this->last_api_call; } - - /** - * construct TwitterOAuth object - */ - function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { - $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); - $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); - if (!empty($oauth_token) && !empty($oauth_token_secret)) { - $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); - } else { - $this->token = NULL; - } - } - - - /** - * Get a request_token from Twitter - * - * @returns a key/value array containing oauth_token and oauth_token_secret - */ - function getRequestToken($oauth_callback) { - $parameters = array(); - $parameters['oauth_callback'] = $oauth_callback; - $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * Get the authorize URL - * - * @returns a string - */ - function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { - if (is_array($token)) { - $token = $token['oauth_token']; - } - if (empty($sign_in_with_twitter)) { - return $this->authorizeURL() . "?oauth_token={$token}"; - } else { - return $this->authenticateURL() . "?oauth_token={$token}"; - } - } - - /** - * Exchange request token and secret for an access token and - * secret, to sign API calls. - * - * @returns array("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham") - */ - function getAccessToken($oauth_verifier) { - $parameters = array(); - $parameters['oauth_verifier'] = $oauth_verifier; - $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * One time exchange of username and password for access token and secret. - * - * @returns array("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham", - * "x_auth_expires" => "0") - */ - function getXAuthToken($username, $password) { - $parameters = array(); - $parameters['x_auth_username'] = $username; - $parameters['x_auth_password'] = $password; - $parameters['x_auth_mode'] = 'client_auth'; - $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * GET wrapper for oAuthRequest. - */ - function get($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'GET', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response, true); - } - return $response; - } - - /** - * POST wrapper for oAuthRequest. - */ - function post($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'POST', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * DELETE wrapper for oAuthReqeust. - */ - function delete($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'DELETE', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * Format and sign an OAuth / API request - */ - function oAuthRequest($url, $method, $parameters) { - if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { - $url = "{$this->host}{$url}.{$this->format}"; - } - $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); - $request->sign_request($this->sha1_method, $this->consumer, $this->token); - switch ($method) { - case 'GET': - return $this->http($request->to_url(), 'GET'); - default: - return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); - } - } - - /** - * Make an HTTP request - * - * @return API results - */ - function http($url, $method, $postfields = NULL) { - $this->http_info = array(); - $ci = curl_init(); - /* Curl settings */ - curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); - curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); - curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); - curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); - curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); - curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); - curl_setopt($ci, CURLOPT_HEADER, FALSE); - - switch ($method) { - case 'POST': - curl_setopt($ci, CURLOPT_POST, TRUE); - if (!empty($postfields)) { - curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); - } - break; - case 'DELETE': - curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); - if (!empty($postfields)) { - $url = "{$url}?{$postfields}"; - } - } - - curl_setopt($ci, CURLOPT_URL, $url); - $response = curl_exec($ci); - $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); - $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); - $this->url = $url; - curl_close ($ci); - return $response; - } - - /** - * Get the header info to store. - */ - function getHeader($ch, $header) { - $i = strpos($header, ':'); - if (!empty($i)) { - $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); - $value = trim(substr($header, $i + 2)); - $this->http_header[$key] = $value; - } - return strlen($header); - } -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php deleted file mode 100755 index 4b0a1865afe..00000000000 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/twitter_process.php +++ /dev/null @@ -1,98 +0,0 @@ - $config['properties']['oauth_access_token'], - 'oauth_access_token_secret' => $config['properties']['oauth_access_token_secret'], - 'consumer_key' => $config['properties']['consumer_key'], - 'consumer_secret' => $config['properties']['consumer_secret'], -); -$limit = $config['properties']['max_number_of_tweets']; - -$twitter_user = $_REQUEST['twitter_user']; -$type = 'user_timeline'; - -$tweets_json = request_tweets($settings,$twitter_user,$type); -$tweets = json_decode($tweets_json, true); - -$display = display_tweets($tweets,$limit); -$formatted_display = format_tweets($display); - -echo $formatted_display; - -function request_tweets($settings,$twitter_user,$type){ - $url = 'https://api.twitter.com/1.1/statuses/' . $type .'.json'; - $getfield = "?screen_name=". $twitter_user .""; - $requestMethod = 'GET'; - $twitter = new TwitterAPIExchange($settings); - $tweets_json= $twitter->setGetfield($getfield) - ->buildOauth($url, $requestMethod) - ->performRequest(); - - return $tweets_json; -} - -function format_tweets($display){ - - $html =''; - $html = ""; - - - $html .= "
      "; - $html .= ''; - $html .= ""; - $html .= "
      Twitter Activity
      " . $display['name'] ."
      "; - - foreach($display['tweets'] as $tweet){ - $html .= "
      "; - $html .= "

      ". $tweet."

      "; - $html .= "
      "; - } - return $html . '
      '; - -} - - -function display_tweets($tweets,$limit){ -if(count($tweets) > 0){ - if(count($tweets) < $limit){ - $limit = count($tweets); - } - - $i = 0; - $display_tweets_array = array(); - - $display_tweets_array['name'] = $tweets[$i]['user']['name']; - $display_tweets_array['follow'] = $tweets[$i]['user']['url']; - $display_tweets_array['picture'] = $tweets[$i]['user']['profile_image_url_https']; - - while($i < $limit){ - - - $display_tweets_array['tweets'][] = $tweets[$i]['text']; - - if(count($tweets[$i]['entities']['urls']) != 0){ - - $u = 0; - while($u < count($tweets[$i]['entities']['urls'])){ - $display_tweets_array['tweets'][$i] = str_replace($tweets[$i]['entities']['urls'][0]['url'], "". $tweets[$i]['entities']['urls'][0]['display_url'] ." ",$display_tweets_array['tweets'][$i]); - $u++; - } - - } - $i++; - } - return $display_tweets_array; -}else{ - return false; -} - - - - - - -} diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/vardefs.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/vardefs.php new file mode 100755 index 00000000000..d40a0680322 --- /dev/null +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/vardefs.php @@ -0,0 +1,42 @@ + 'vardefs for example connector', + 'fields' => array ( + 'id' => array ( + 'name' => 'id', + 'vname' => 'LBL_ID', + 'type' => 'id', + 'comment' => 'Unique identifier', + 'hidden' => true, + ), + 'fullname' => array ( + 'name' => 'fullname', + 'vname' => 'LBL_FULL_NAME', + 'hover' => true, + ), + 'firstname' => array ( + 'name' => 'firstname', + 'vname' => 'LBL_FIRST_NAME', + ), + 'lastname' => array ( + 'name' => 'lastname', + 'vname' => 'LBL_LAST_NAME', + 'input' => 'lastname', + 'search' => true, + ), + 'email' => array ( + 'name' => 'email', + 'vname' => 'LBL_EMAIL', + ), + 'state' => array ( + 'name' => 'state', + 'vname' => 'LBL_STATE', + 'options' => 'states_dom', + ), + ) + ); + +?> \ No newline at end of file diff --git a/custom/modules/Connectors/metadata/connectors.php b/custom/modules/Connectors/metadata/connectors.php index 00dc43b8f20..116ecac8943 100755 --- a/custom/modules/Connectors/metadata/connectors.php +++ b/custom/modules/Connectors/metadata/connectors.php @@ -1,5 +1,5 @@ array ( @@ -34,4 +34,31 @@ 3 => 'Opportunities', ), ), + 'ext_rest_facebookAPI' => + array ( + 'id' => 'ext_rest_facebookAPI', + 'name' => 'Facebook', + 'enabled' => true, + 'directory' => 'custom/modules/Connectors/connectors/sources/ext/rest/facebookAPI', + 'eapm' => + array ( + 'enabled' => true, + ), + 'modules' => + array ( + 0 => 'Contacts', + ), + ), + 'ext_rest_twitter' => + array ( + 'id' => 'ext_rest_twitter', + 'name' => 'Twitter', + 'enabled' => true, + 'directory' => 'custom/modules/Connectors/connectors/sources/ext/rest/twitter', + 'eapm' => false, + 'modules' => + array ( + 0 => 'Contacts', + ), + ), ); \ No newline at end of file diff --git a/custom/modules/Connectors/metadata/display_config.php b/custom/modules/Connectors/metadata/display_config.php index 598c422b54b..55d7c607a1a 100755 --- a/custom/modules/Connectors/metadata/display_config.php +++ b/custom/modules/Connectors/metadata/display_config.php @@ -1,25 +1,20 @@ array ( - 'ext_rest_linkedin' => 'ext_rest_linkedin', 'ext_rest_insideview' => 'ext_rest_insideview', + 'ext_rest_twitter' => 'ext_rest_twitter', ), 'Contacts' => array ( - 'ext_rest_linkedin' => 'ext_rest_linkedin', 'ext_rest_insideview' => 'ext_rest_insideview', + 'ext_rest_twitter' => 'ext_rest_twitter', ), 'Leads' => array ( - 'ext_rest_linkedin' => 'ext_rest_linkedin', 'ext_rest_insideview' => 'ext_rest_insideview', ), - 'Prospects' => - array ( - 'ext_rest_linkedin' => 'ext_rest_linkedin', - ), 'Opportunities' => array ( 'ext_rest_insideview' => 'ext_rest_insideview', diff --git a/custom/modules/Connectors/metadata/searchdefs.php b/custom/modules/Connectors/metadata/searchdefs.php new file mode 100755 index 00000000000..4bc70c9d18b --- /dev/null +++ b/custom/modules/Connectors/metadata/searchdefs.php @@ -0,0 +1,28 @@ + + array ( + 'Accounts' => + array ( + ), + 'Contacts' => + array ( + ), + 'Leads' => + array ( + ), + 'Opportunities' => + array ( + ), + ), + 'ext_rest_twitter' => + array ( + 'Accounts' => + array ( + ), + 'Contacts' => + array ( + ), + ), +); \ No newline at end of file From 2bbd429eb2e346f2d114f30a7506a3ec4e9e318d Mon Sep 17 00:00:00 2001 From: Ian Davie Date: Mon, 20 Jan 2014 12:29:23 +0000 Subject: [PATCH 082/223] changes to facebook API. --- .../social/facebook/facebook.class.php | 3 +- custom/include/social/facebook/facebook.js | 29 ++++++------ .../include/social/facebook/facebookapi.php | 44 +++++++------------ 3 files changed, 33 insertions(+), 43 deletions(-) diff --git a/custom/include/social/facebook/facebook.class.php b/custom/include/social/facebook/facebook.class.php index 9b84204d822..a3f246ec233 100755 --- a/custom/include/social/facebook/facebook.class.php +++ b/custom/include/social/facebook/facebook.class.php @@ -27,7 +27,7 @@ function get_my_user(){ function get_my_newsfeed(){ return $this->facebook->api('me/home'); //get my news feed } - function get_other_newsfeed($user, $limit = "50"){ + function get_other_newsfeed($user, $limit = "100"){ return $this->facebook->api('/' . $user . '/feed?limit=' . $limit); } function get_login_url($url){ @@ -56,7 +56,6 @@ function process_feed($story){ break; case "link": return $this->link_type($story); - case "video": break; } } diff --git a/custom/include/social/facebook/facebook.js b/custom/include/social/facebook/facebook.js index 97b86ce8d28..33bcf13e507 100755 --- a/custom/include/social/facebook/facebook.js +++ b/custom/include/social/facebook/facebook.js @@ -25,20 +25,21 @@ $(function() { //Ajax Call username = $("#facebook_username_c").text(); - module = $("#formDetailView input[name=module]").val() - record = $("input[name=record]").val() - social = "facebook"; - url = document.URL; - - $.ajax({ - type: "POST", - url: "index.php?entryPoint=social&social=facebook&username=" + username + "&module=" + module + "&record=" + record, - data: { username: username, social: "facebook", url:url } - }) - .done(function( msg ) { - $("#facebook_feed").html( msg + $("#feed_history_c").html() ); - }); - + if(username){ + module = $("#formDetailView input[name=module]").val(); + record = $("input[name=record]").val(); + social = "facebook"; + url = document.URL; + + $.ajax({ + type: "POST", + url: "index.php?entryPoint=social&social=facebook&username=" + username + "&module=" + module + "&record=" + record, + data: { username: username, social: "facebook", url:url } + }) + .done(function( msg ) { + $("#facebook_feed").html( msg ); + }); + } }); diff --git a/custom/include/social/facebook/facebookapi.php b/custom/include/social/facebook/facebookapi.php index 4cd07f16d38..0e6dcb660a8 100755 --- a/custom/include/social/facebook/facebookapi.php +++ b/custom/include/social/facebook/facebookapi.php @@ -1,34 +1,28 @@ facebook->getUser(); - +//get requested user data. $different_user = $facebook_helper->get_facebook_user($_REQUEST['username']); - +//get the last XX posted. $content = ($facebook_helper->get_other_newsfeed($_REQUEST['username'], "50")); +//check the user is logged in and generate the correct url if logged in or not. if ($user) { - //redirect to url. - //header('Location: http://localhost/suitecrm'); $logoutUrl = $facebook_helper->get_logout_url(); } else { $loginUrl = $facebook_helper->get_login_url($_REQUEST['url']); } -?> - - Logout'; ?> - - Login with Facebook'; ?> - -Logout'; +}else{ + $log = 'Login with Facebook'; +} + + echo '
      '; echo ''; echo ''; @@ -39,18 +33,14 @@ echo ''; foreach($content['data'] as $story){ - echo $facebook_helper->process_feed($story); - } + $results = $facebook_helper->process_feed($story); + if(!empty($results)){ + echo $results; + } +} +echo '
      Facebook Activity' . $log . '
      '; ?> - - - - - +{/literal} + + + +{sugar_getscript file="cache/include/javascript/sugar_grp_yui_widgets.js"} +{sugar_getscript file='include/javascript/dashlets.js'} + +{$chartResources} +{$mySugarChartResources} + +
      +
      +
      + + + + + + + + + {counter assign=hiddenCounter start=0 print=false} + {foreach from=$columns key=colNum item=data} + + {counter} + {/foreach} + +
      + + + {sugar_getimage name="blank.gif" width='40' height='1' border='0'} + + {if !$lock_homepage}{/if} +
      +
        +
      •    
      • + {foreach from=$data.dashlets key=id item=dashlet} +
      • +
        + {$dashlet.script} + {$dashlet.displayHeader} + {$dashlet.display} + {$dashlet.displayFooter} +
        +
      • + {/foreach} +
      •    
      • +
      +
      +
      + + {foreach from=$divPages key=divPageIndex item=divPageNum} + + {/foreach} + + + + + + +
      + From 53525fe5e8ecd7f1c64efbdccf6a1e34a6e8daa2 Mon Sep 17 00:00:00 2001 From: William Rennie Date: Sun, 2 Feb 2014 21:46:28 +0000 Subject: [PATCH 153/223] Started making changes for dashlet configuration on home page. Not all changes pushed as they are not fully working. --- .../Ext/Language/en_us.colourAdmin.php | 5 +- custom/include/MySugar/tpls/MySugar.tpl | 7 +- custom/modules/Administration/colourAdmin.tpl | 8 +- custom/modules/Home/index.php | 254 ++++++++++-------- custom/modules/Home/tpls/Home.tpl | 219 +++++++++++++++ install/suite_install/colourSelector.php | 1 + 6 files changed, 377 insertions(+), 117 deletions(-) create mode 100755 custom/modules/Home/tpls/Home.tpl diff --git a/custom/Extension/modules/Administration/Ext/Language/en_us.colourAdmin.php b/custom/Extension/modules/Administration/Ext/Language/en_us.colourAdmin.php index fdb93c6f48e..31ee6ea739b 100755 --- a/custom/Extension/modules/Administration/Ext/Language/en_us.colourAdmin.php +++ b/custom/Extension/modules/Administration/Ext/Language/en_us.colourAdmin.php @@ -37,4 +37,7 @@ $mod_strings['LBL_COLOUR_ADMIN_DASHHEAD'] = 'Dashlet header colour: '; $mod_strings['LBL_COLOUR_ADMIN_TABS'] = 'Menu contents config'; -$mod_strings['LBL_COLOUR_ADMIN_TABSNUM'] = 'Number of menu items/tabs: '; \ No newline at end of file +$mod_strings['LBL_COLOUR_ADMIN_TABSNUM'] = 'Number of menu items/tabs: '; + +$mod_strings['LBL_DEFAULT_ADMIN_DASHLET'] = 'Dashlet Column Config'; +$mod_strings['LBL_DASHLET_COLUMNS'] = 'Number of dashlet columns: '; \ No newline at end of file diff --git a/custom/include/MySugar/tpls/MySugar.tpl b/custom/include/MySugar/tpls/MySugar.tpl index 8a4a75ae5c4..21aad8c9451 100755 --- a/custom/include/MySugar/tpls/MySugar.tpl +++ b/custom/include/MySugar/tpls/MySugar.tpl @@ -120,10 +120,7 @@ height: 10px; - - - - + + diff --git a/custom/modules/Administration/colourAdmin.tpl b/custom/modules/Administration/colourAdmin.tpl index a406716d6b6..775f70f3de7 100755 --- a/custom/modules/Administration/colourAdmin.tpl +++ b/custom/modules/Administration/colourAdmin.tpl @@ -21,6 +21,13 @@ + + + + + +

      {$MOD.LBL_DEFAULT_ADMIN_DASHLET}

      {$MOD.LBL_DASHLET_COLUMNS}
      + @@ -71,7 +78,6 @@

      {$MOD.LBL_COLOUR_ADMIN_MENU}

      -
      {$BUTTONS}
      diff --git a/custom/modules/Home/index.php b/custom/modules/Home/index.php index c83404b570f..9a99ed1b025 100755 --- a/custom/modules/Home/index.php +++ b/custom/modules/Home/index.php @@ -81,71 +81,103 @@ 'obm_date_end' => 'OutcomeByMonthDashlet', 'obm_ids' => 'OutcomeByMonthDashlet'); - //upgrading from pre-5.0 homepage - $old_columns = $current_user->getPreference('columns', 'home'); - $old_dashlets = $current_user->getPreference('dashlets', 'home'); - - if (isset($old_columns) && !empty($old_columns) && isset($old_dashlets) && !empty($old_dashlets)){ - $columns = $old_columns; - $dashlets = $old_dashlets; - - // resetting old columns and dashlets to have no preference and data - $old_columns = array(); - $old_dashlets = array(); - $current_user->setPreference('columns', $old_columns, 0, 'home'); - $current_user->setPreference('dashlets', $old_dashlets, 0, 'home'); - } - else{ + //upgrading from pre-5.0 homepage + $old_columns = $current_user->getPreference('columns', 'home'); + $old_dashlets = $current_user->getPreference('dashlets', 'home'); + + if (isset($old_columns) && !empty($old_columns) && isset($old_dashlets) && !empty($old_dashlets)){ + $columns = $old_columns; + $dashlets = $old_dashlets; + + // resetting old columns and dashlets to have no preference and data + $old_columns = array(); + $old_dashlets = array(); + $current_user->setPreference('columns', $old_columns, 0, 'home'); + $current_user->setPreference('dashlets', $old_dashlets, 0, 'home'); + } + else{ // This is here to get Sugar dashlets added above the rest $dashlets[create_guid()] = array('className' => 'iFrameDashlet', - 'module' => 'Home', - 'forceColumn' => 0, - 'fileLocation' => $dashletsFiles['iFrameDashlet']['file'], - 'options' => array('titleLabel' => 'Discover SuiteCRM', - 'url' => 'http://www.suitecrm.com', - 'height' => 315, - )); + 'module' => 'Home', + 'forceColumn' => 0, + 'fileLocation' => $dashletsFiles['iFrameDashlet']['file'], + 'options' => array('titleLabel' => 'Discover SuiteCRM', + 'url' => 'http://www.suitecrm.com', + 'height' => 315, + )); $dashlets[create_guid()] = array ('className' => 'SugarFeedDashlet', - 'module' => 'SugarFeed', - 'forceColumn' => 1, - 'fileLocation' => $dashletsFiles['SugarFeedDashlet']['file'], - ); - - foreach($defaultDashlets as $dashletName=>$module){ - // clint - fixes bug #20398 - // only display dashlets that are from visibile modules and that the user has permission to list - $myDashlet = new MySugar($module); - $displayDashlet = $myDashlet->checkDashletDisplay(); - if (isset($dashletsFiles[$dashletName]) && $displayDashlet){ - $options = array(); - $prefsforthisdashlet = array_keys($prefstomove,$dashletName); - foreach ( $prefsforthisdashlet as $pref ) { - $options[$pref] = $current_user->getPreference($pref); - } + 'module' => 'SugarFeed', + 'forceColumn' => 1, + 'fileLocation' => $dashletsFiles['SugarFeedDashlet']['file'], + ); + + foreach($defaultDashlets as $dashletName=>$module){ + // clint - fixes bug #20398 + // only display dashlets that are from visibile modules and that the user has permission to list + $myDashlet = new MySugar($module); + $displayDashlet = $myDashlet->checkDashletDisplay(); + if (isset($dashletsFiles[$dashletName]) && $displayDashlet){ + $options = array(); + $prefsforthisdashlet = array_keys($prefstomove,$dashletName); + foreach ( $prefsforthisdashlet as $pref ) { + $options[$pref] = $current_user->getPreference($pref); + } $dashlets[create_guid()] = array('className' => $dashletName, - 'module' => $module, - 'forceColumn' => 0, - 'fileLocation' => $dashletsFiles[$dashletName]['file'], - 'options' => $options); - } - } + 'module' => $module, + 'forceColumn' => 0, + 'fileLocation' => $dashletsFiles[$dashletName]['file'], + 'options' => $options); + } + } - $count = 0; - $columns = array(); - $columns[0] = array(); - $columns[0]['width'] = '60%'; - $columns[0]['dashlets'] = array(); - $columns[1] = array(); - $columns[1]['width'] = '40%'; - $columns[1]['dashlets'] = array(); + $count = 0; + $columns = array(); + $columns[0] = array(); + $columns[0]['width'] = '33%'; + $columns[0]['dashlets'] = array(); + $columns[1] = array(); + $columns[1]['width'] = '33%'; + $columns[1]['dashlets'] = array(); + $columns[2] = array(); + $columns[2]['width'] = '33%'; + $columns[2]['dashlets'] = array(); + + /* + $count = 0; + $columns = array(); + if($sugar_config['columns'] = '1'){ + $columns[0] = array(); + $columns[0]['width'] = '100%'; + $columns[0]['dashlets'] = array(); + } + if($sugar_config['columns'] = '2'){ + $columns[0] = array(); + $columns[0]['width'] = '60%'; + $columns[0]['dashlets'] = array(); + $columns[1] = array(); + $columns[1]['width'] = '40%'; + $columns[1]['dashlets'] = array(); + } + if($sugar_config['columns'] = '3'){ + $columns[0] = array(); + $columns[0]['width'] = '33%'; + $columns[0]['dashlets'] = array(); + $columns[1] = array(); + $columns[1]['width'] = '33%'; + $columns[1]['dashlets'] = array(); + $columns[2] = array(); + $columns[2]['width'] = '33%'; + $columns[2]['dashlets'] = array(); + } + */ - foreach($dashlets as $guid=>$dashlet) { - if( $dashlet['forceColumn'] == 0 ) array_push($columns[0]['dashlets'], $guid); - else array_push($columns[1]['dashlets'], $guid); - $count++; - } - } + foreach($dashlets as $guid=>$dashlet) { + if( $dashlet['forceColumn'] == 0 ) array_push($columns[0]['dashlets'], $guid); + else array_push($columns[1]['dashlets'], $guid); + $count++; + } + } @@ -174,19 +206,19 @@ $current_user->resetPreferences('Dashboard'); if (empty($pages)){ - $pages = array(); - $pageIndex = 0; - $pages[0]['columns'] = $columns; - $pages[0]['numColumns'] = '2'; - $pages[0]['pageTitleLabel'] = 'LBL_HOME_PAGE_1_NAME'; // "My Sugar" - $pageIndex++; - $current_user->setPreference('pages', $pages, 0, 'Home'); + $pages = array(); + $pageIndex = 0; + $pages[0]['columns'] = $columns; + $pages[0]['numColumns'] = $current_user->getPreference('columns'); + $pages[0]['pageTitleLabel'] = 'LBL_HOME_PAGE_1_NAME'; // "My Sugar" + $pageIndex++; + $current_user->setPreference('pages', $pages, 0, 'Home'); $activePage = 0; } $sugar_smarty = new Sugar_Smarty(); - $activePage = 0; +$activePage = 0; $divPages[] = $activePage; @@ -198,28 +230,28 @@ $display = array(); foreach($pages[$activePage]['columns'] as $colNum => $column) { - if ($colNum == $numCols){ - break; - } + if ($colNum == $numCols){ + break; + } $display[$colNum]['width'] = $column['width']; $display[$colNum]['dashlets'] = array(); foreach($column['dashlets'] as $num => $id) { - // clint - fixes bug #20398 - // only display dashlets that are from visibile modules and that the user has permission to list + // clint - fixes bug #20398 + // only display dashlets that are from visibile modules and that the user has permission to list if(!empty($id) && isset($dashlets[$id]) && is_file($dashlets[$id]['fileLocation'])) { - $module = 'Home'; - if ( !empty($dashletsFiles[$dashlets[$id]['className']]['module']) ) - $module = $dashletsFiles[$dashlets[$id]['className']]['module']; - // Bug 24772 - Look into the user preference for the module the dashlet is a part of in case - // of the Report Chart dashlets. - elseif ( !empty($dashlets[$id]['module']) ) - $module = $dashlets[$id]['module']; - - $myDashlet = new MySugar($module); - - if($myDashlet->checkDashletDisplay()) { - require_once($dashlets[$id]['fileLocation']); - $dashlet = new $dashlets[$id]['className']($id, (isset($dashlets[$id]['options']) ? $dashlets[$id]['options'] : array())); + $module = 'Home'; + if ( !empty($dashletsFiles[$dashlets[$id]['className']]['module']) ) + $module = $dashletsFiles[$dashlets[$id]['className']]['module']; + // Bug 24772 - Look into the user preference for the module the dashlet is a part of in case + // of the Report Chart dashlets. + elseif ( !empty($dashlets[$id]['module']) ) + $module = $dashlets[$id]['module']; + + $myDashlet = new MySugar($module); + + if($myDashlet->checkDashletDisplay()) { + require_once($dashlets[$id]['fileLocation']); + $dashlet = new $dashlets[$id]['className']($id, (isset($dashlets[$id]['options']) ? $dashlets[$id]['options'] : array())); // Need to add support to dynamically display/hide dashlets // If it has a method 'shouldDisplay' we will call it to see if we should display it or not if (method_exists($dashlet,'shouldDisplay')) { @@ -229,30 +261,30 @@ } } - array_push($dashletIds, $id); - - $dashlets = $current_user->getPreference('dashlets', 'Home'); // Using hardcoded 'Home' because DynamicAction.php $_REQUEST['module'] value is always Home - $lvsParams = array(); - if(!empty($dashlets[$id]['sort_options'])){ - $lvsParams = $dashlets[$id]['sort_options']; - } - - $dashlet->process($lvsParams); - try { - $display[$colNum]['dashlets'][$id]['display'] = $dashlet->display(); - $display[$colNum]['dashlets'][$id]['displayHeader'] = $dashlet->getHeader(); - $display[$colNum]['dashlets'][$id]['displayFooter'] = $dashlet->getFooter(); - if($dashlet->hasScript) { - $display[$colNum]['dashlets'][$id]['script'] = $dashlet->displayScript(); - } - } catch (Exception $ex) { - $display[$colNum]['dashlets'][$id]['display'] = $ex->getMessage(); - $display[$colNum]['dashlets'][$id]['displayHeader'] = $dashlet->getHeader(); - $display[$colNum]['dashlets'][$id]['displayFooter'] = $dashlet->getFooter(); - } - } - } - } + array_push($dashletIds, $id); + + $dashlets = $current_user->getPreference('dashlets', 'Home'); // Using hardcoded 'Home' because DynamicAction.php $_REQUEST['module'] value is always Home + $lvsParams = array(); + if(!empty($dashlets[$id]['sort_options'])){ + $lvsParams = $dashlets[$id]['sort_options']; + } + + $dashlet->process($lvsParams); + try { + $display[$colNum]['dashlets'][$id]['display'] = $dashlet->display(); + $display[$colNum]['dashlets'][$id]['displayHeader'] = $dashlet->getHeader(); + $display[$colNum]['dashlets'][$id]['displayFooter'] = $dashlet->getFooter(); + if($dashlet->hasScript) { + $display[$colNum]['dashlets'][$id]['script'] = $dashlet->displayScript(); + } + } catch (Exception $ex) { + $display[$colNum]['dashlets'][$id]['display'] = $ex->getMessage(); + $display[$colNum]['dashlets'][$id]['displayHeader'] = $dashlet->getHeader(); + $display[$colNum]['dashlets'][$id]['displayFooter'] = $dashlet->getFooter(); + } + } + } + } } @@ -293,11 +325,11 @@ $sugar_smarty->assign('chartResources', $resources); $sugar_smarty->assign('mySugarChartResources', $mySugarResources); if (file_exists("custom/include/MySugar/tpls/MySugar.tpl")) { - echo $sugar_smarty->fetch('custom/include/MySugar/tpls/MySugar.tpl'); + echo $sugar_smarty->fetch('custom/include/MySugar/tpls/MySugar.tpl'); } else { - echo $sugar_smarty->fetch('include/MySugar/tpls/MySugar.tpl'); + echo $sugar_smarty->fetch('include/MySugar/tpls/MySugar.tpl'); } //init the quickEdit listeners after the dashlets have loaded on home page the first time echo""; -?> +?> \ No newline at end of file diff --git a/custom/modules/Home/tpls/Home.tpl b/custom/modules/Home/tpls/Home.tpl new file mode 100755 index 00000000000..79bc2673aeb --- /dev/null +++ b/custom/modules/Home/tpls/Home.tpl @@ -0,0 +1,219 @@ +{* + +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + + + + +*} +{literal} + +{/literal} + + + + + + + + + + + + + + + + + + +
      +
      + + + {if $numCols > 2} + + + + {/if} + {if $numCols > 1} + + + {/if} + + + + {counter assign=hiddenCounter start=0 print=false} + {foreach from=$columns key=colNum item=data} + + {counter} + {/foreach} + +
      +   + + {sugar_getimage alt=" " name="blank" ext=".gif" width="15" height="1" other_attributes='border="0" '} + +   + + {sugar_getimage alt=" " name="blank" ext=".gif" width="15" height="1" other_attributes='border="0" '} + + + + {sugar_getimage name="help" ext=".gif" width="13" height="13" alt=$lblLnkHelp other_attributes='align="absmiddle" border="0" '} + + + {$lblLnkHelp} + +
      +
        +
      •    
      • + {foreach from=$data.dashlets key=id item=dashlet} +
      • +
        + {$dashlet.script} + {$dashlet.display} +
        +
      • + {/foreach} +
      •    
      • +
      +
      +
      + + {foreach from=$divPages key=divPageIndex item=divPageNum} + + {/foreach} + + + + + +
      +
      +
      +
      +
      +
      + + +
      + +{if !$lock_homepage} +{literal} + +{/literal} +{/if} \ No newline at end of file diff --git a/install/suite_install/colourSelector.php b/install/suite_install/colourSelector.php index 43579b8e916..d8a9d84454b 100755 --- a/install/suite_install/colourSelector.php +++ b/install/suite_install/colourSelector.php @@ -24,6 +24,7 @@ function install_colourSelector() { if(!isset($sugar_config['colourselector']['modlinkhover'])) $sugar_config['colourselector']['modlinkhover'] = '#ffffff'; if(!isset($sugar_config['colourselector']['cssmenu'])) $sugar_config['colourselector']['cssmenu'] = '#333333'; if(!isset($sugar_config['colourselector']['cssmenulink'])) $sugar_config['colourselector']['cssmenulink'] = '#cccccc'; + if(!isset($sugar_config['columns'])) $sugar_config['columns'] = '3'; ksort($sugar_config); write_array_to_file('sugar_config', $sugar_config, 'config.php'); From 44aac7bdff52a3fa710d34c05e935850ababcf2a Mon Sep 17 00:00:00 2001 From: William Rennie Date: Sun, 2 Feb 2014 22:35:22 +0000 Subject: [PATCH 154/223] Some changes to dashlets modifications. --- custom/modules/Home/index.php | 10 +- custom/modules/Home/tpls/Home.tpl | 219 ----------------------- install/suite_install/colourSelector.php | 2 +- 3 files changed, 6 insertions(+), 225 deletions(-) delete mode 100755 custom/modules/Home/tpls/Home.tpl diff --git a/custom/modules/Home/index.php b/custom/modules/Home/index.php index 9a99ed1b025..ca1634197ad 100755 --- a/custom/modules/Home/index.php +++ b/custom/modules/Home/index.php @@ -133,7 +133,8 @@ $count = 0; $columns = array(); - $columns[0] = array(); + /* + * $columns[0] = array(); $columns[0]['width'] = '33%'; $columns[0]['dashlets'] = array(); $columns[1] = array(); @@ -142,15 +143,14 @@ $columns[2] = array(); $columns[2]['width'] = '33%'; $columns[2]['dashlets'] = array(); + */ - /* - $count = 0; - $columns = array(); if($sugar_config['columns'] = '1'){ $columns[0] = array(); $columns[0]['width'] = '100%'; $columns[0]['dashlets'] = array(); } + if($sugar_config['columns'] = '2'){ $columns[0] = array(); $columns[0]['width'] = '60%'; @@ -159,6 +159,7 @@ $columns[1]['width'] = '40%'; $columns[1]['dashlets'] = array(); } + if($sugar_config['columns'] = '3'){ $columns[0] = array(); $columns[0]['width'] = '33%'; @@ -170,7 +171,6 @@ $columns[2]['width'] = '33%'; $columns[2]['dashlets'] = array(); } - */ foreach($dashlets as $guid=>$dashlet) { if( $dashlet['forceColumn'] == 0 ) array_push($columns[0]['dashlets'], $guid); diff --git a/custom/modules/Home/tpls/Home.tpl b/custom/modules/Home/tpls/Home.tpl deleted file mode 100755 index 79bc2673aeb..00000000000 --- a/custom/modules/Home/tpls/Home.tpl +++ /dev/null @@ -1,219 +0,0 @@ -{* - -/********************************************************************************* - * SugarCRM Community Edition is a customer relationship management program developed by - * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Affero General Public License version 3 as published by the - * Free Software Foundation with the addition of the following permission added - * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK - * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY - * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more - * details. - * - * You should have received a copy of the GNU Affero General Public License along with - * this program; if not, see http://www.gnu.org/licenses or write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA. - * - * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, - * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. - * - * The interactive user interfaces in modified source and object code versions - * of this program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU Affero General Public License version 3. - * - * In accordance with Section 7(b) of the GNU Affero General Public License version 3, - * these Appropriate Legal Notices must retain the display of the "Powered by - * SugarCRM" logo. If the display of the logo is not reasonably feasible for - * technical reasons, the Appropriate Legal Notices must display the words - * "Powered by SugarCRM". - ********************************************************************************/ - - - - -*} -{literal} - -{/literal} - - - - - - - - - - - - - - - - - - -
      -
      - - - {if $numCols > 2} - - - - {/if} - {if $numCols > 1} - - - {/if} - - - - {counter assign=hiddenCounter start=0 print=false} - {foreach from=$columns key=colNum item=data} - - {counter} - {/foreach} - -
      -   - - {sugar_getimage alt=" " name="blank" ext=".gif" width="15" height="1" other_attributes='border="0" '} - -   - - {sugar_getimage alt=" " name="blank" ext=".gif" width="15" height="1" other_attributes='border="0" '} - - - - {sugar_getimage name="help" ext=".gif" width="13" height="13" alt=$lblLnkHelp other_attributes='align="absmiddle" border="0" '} - - - {$lblLnkHelp} - -
      -
        -
      •    
      • - {foreach from=$data.dashlets key=id item=dashlet} -
      • -
        - {$dashlet.script} - {$dashlet.display} -
        -
      • - {/foreach} -
      •    
      • -
      -
      -
      - - {foreach from=$divPages key=divPageIndex item=divPageNum} - - {/foreach} - - - - - -
      -
      -
      -
      -
      -
      - - -
      - -{if !$lock_homepage} -{literal} - -{/literal} -{/if} \ No newline at end of file diff --git a/install/suite_install/colourSelector.php b/install/suite_install/colourSelector.php index d8a9d84454b..78e95d7116c 100755 --- a/install/suite_install/colourSelector.php +++ b/install/suite_install/colourSelector.php @@ -24,7 +24,7 @@ function install_colourSelector() { if(!isset($sugar_config['colourselector']['modlinkhover'])) $sugar_config['colourselector']['modlinkhover'] = '#ffffff'; if(!isset($sugar_config['colourselector']['cssmenu'])) $sugar_config['colourselector']['cssmenu'] = '#333333'; if(!isset($sugar_config['colourselector']['cssmenulink'])) $sugar_config['colourselector']['cssmenulink'] = '#cccccc'; - if(!isset($sugar_config['columns'])) $sugar_config['columns'] = '3'; + if(!isset($sugar_config['columns'])) $sugar_config['columns'] = ''; ksort($sugar_config); write_array_to_file('sugar_config', $sugar_config, 'config.php'); From cd8c2726d3db1d78cff9ba6d17dfdaf9c393cc6e Mon Sep 17 00:00:00 2001 From: William Rennie Date: Sun, 2 Feb 2014 22:46:18 +0000 Subject: [PATCH 155/223] Fixed dashlet issue when no dashlets on right. --- include/MySugar/tpls/MySugar.tpl | 138 +++++++++++++++---------------- 1 file changed, 67 insertions(+), 71 deletions(-) diff --git a/include/MySugar/tpls/MySugar.tpl b/include/MySugar/tpls/MySugar.tpl index 655b66ac88f..df828f90d26 100755 --- a/include/MySugar/tpls/MySugar.tpl +++ b/include/MySugar/tpls/MySugar.tpl @@ -63,77 +63,6 @@ height: 10px; {$chartResources} {$mySugarChartResources} - - - - -
      @@ -194,4 +123,71 @@ mySugarLoader.insert();
      + From d7033ca379e2059dcc2035b11beae67e1f82a323 Mon Sep 17 00:00:00 2001 From: Jim Mackin Date: Mon, 3 Feb 2014 10:29:44 +0000 Subject: [PATCH 156/223] Add AOD Modules. --- .../Ext/Include/AdvancedOpenDiscovery.php | 14 + .../Language/en_us.AdvancedOpenDiscovery.php | 39 + .../Ext/Administration/AODAdmin.php | 40 + .../Ext/Language/en_us.AODAdmin.php | 26 + .../Language/en_us.AdvancedOpenDiscovery.php | 3 + .../Ext/ScheduledTasks/AODScheduler.php | 79 + custom/modules/Administration/AODAdmin.php | 88 + custom/modules/Administration/AODAdmin.tpl | 31 + custom/modules/Home/UnifiedSearch.php | 266 ++ custom/modules/logic_hooks.php | 1 + .../suite_install/AdvancedOpenDiscovery.php | 41 + install/suite_install/suite_install.php | 3 + modules/AOD_Index/AOD_Index.php | 320 +++ modules/AOD_Index/AOD_Index_sugar.php | 80 + modules/AOD_Index/AOD_LogicHooks.php | 35 + .../AOD_IndexDashlet.meta.php | 52 + .../AOD_IndexDashlet/AOD_IndexDashlet.php | 63 + .../AOD_Index/Lib/Zend/Search/Exception.php | 37 + modules/AOD_Index/Lib/Zend/Search/Lucene.php | 1579 ++++++++++++ .../Zend/Search/Lucene/Analysis/Analyzer.php | 175 ++ .../Lucene/Analysis/Analyzer/Common.php | 94 + .../Lucene/Analysis/Analyzer/Common/Text.php | 96 + .../Analyzer/Common/Text/CaseInsensitive.php | 47 + .../Analysis/Analyzer/Common/TextNum.php | 95 + .../Common/TextNum/CaseInsensitive.php | 47 + .../Lucene/Analysis/Analyzer/Common/Utf8.php | 126 + .../Analyzer/Common/Utf8/CaseInsensitive.php | 49 + .../Analysis/Analyzer/Common/Utf8Num.php | 126 + .../Common/Utf8Num/CaseInsensitive.php | 49 + .../Lib/Zend/Search/Lucene/Analysis/Token.php | 166 ++ .../Search/Lucene/Analysis/TokenFilter.php | 47 + .../Lucene/Analysis/TokenFilter/LowerCase.php | 52 + .../Analysis/TokenFilter/LowerCaseUtf8.php | 64 + .../Analysis/TokenFilter/ShortWords.php | 69 + .../Lucene/Analysis/TokenFilter/StopWords.php | 101 + .../Lib/Zend/Search/Lucene/Document.php | 131 + .../Lib/Zend/Search/Lucene/Document/Docx.php | 175 ++ .../Zend/Search/Lucene/Document/Exception.php | 37 + .../Lib/Zend/Search/Lucene/Document/Html.php | 481 ++++ .../Zend/Search/Lucene/Document/OpenXml.php | 129 + .../Lib/Zend/Search/Lucene/Document/Pptx.php | 200 ++ .../Lib/Zend/Search/Lucene/Document/Xlsx.php | 263 ++ .../Lib/Zend/Search/Lucene/Exception.php | 37 + .../AOD_Index/Lib/Zend/Search/Lucene/FSM.php | 443 ++++ .../Lib/Zend/Search/Lucene/FSMAction.php | 66 + .../Lib/Zend/Search/Lucene/Field.php | 226 ++ .../Search/Lucene/Index/DictionaryLoader.php | 268 +++ .../Zend/Search/Lucene/Index/DocsFilter.php | 59 + .../Zend/Search/Lucene/Index/FieldInfo.php | 50 + .../Zend/Search/Lucene/Index/SegmentInfo.php | 2132 +++++++++++++++++ .../Search/Lucene/Index/SegmentMerger.php | 271 +++ .../Search/Lucene/Index/SegmentWriter.php | 634 +++++ .../Index/SegmentWriter/DocumentWriter.php | 230 ++ .../Index/SegmentWriter/StreamWriter.php | 94 + .../Lib/Zend/Search/Lucene/Index/Term.php | 144 ++ .../Lib/Zend/Search/Lucene/Index/TermInfo.php | 80 + .../Lucene/Index/TermsPriorityQueue.php | 49 + .../Lucene/Index/TermsStream/Interface.php | 66 + .../Lib/Zend/Search/Lucene/Index/Writer.php | 841 +++++++ .../Lib/Zend/Search/Lucene/Interface.php | 417 ++++ .../Search/Lucene/Interface/MultiSearcher.php | 25 + .../Lib/Zend/Search/Lucene/LockManager.php | 236 ++ .../Lib/Zend/Search/Lucene/MultiSearcher.php | 992 ++++++++ .../Lib/Zend/Search/Lucene/PriorityQueue.php | 171 ++ .../Lib/Zend/Search/Lucene/Proxy.php | 612 +++++ .../Search/BooleanExpressionRecognizer.php | 278 +++ .../Lucene/Search/Highlighter/Default.php | 94 + .../Lucene/Search/Highlighter/Interface.php | 53 + .../Lib/Zend/Search/Lucene/Search/Query.php | 233 ++ .../Search/Lucene/Search/Query/Boolean.php | 815 +++++++ .../Zend/Search/Lucene/Search/Query/Empty.php | 138 ++ .../Zend/Search/Lucene/Search/Query/Fuzzy.php | 493 ++++ .../Lucene/Search/Query/Insignificant.php | 139 ++ .../Search/Lucene/Search/Query/MultiTerm.php | 668 ++++++ .../Search/Lucene/Search/Query/Phrase.php | 576 +++++ .../Lucene/Search/Query/Preprocessing.php | 127 + .../Search/Query/Preprocessing/Fuzzy.php | 287 +++ .../Search/Query/Preprocessing/Phrase.php | 270 +++ .../Search/Query/Preprocessing/Term.php | 341 +++ .../Zend/Search/Lucene/Search/Query/Range.php | 377 +++ .../Zend/Search/Lucene/Search/Query/Term.php | 228 ++ .../Search/Lucene/Search/Query/Wildcard.php | 362 +++ .../Zend/Search/Lucene/Search/QueryEntry.php | 67 + .../Lucene/Search/QueryEntry/Phrase.php | 116 + .../Lucene/Search/QueryEntry/Subquery.php | 77 + .../Search/Lucene/Search/QueryEntry/Term.php | 130 + .../Zend/Search/Lucene/Search/QueryHit.php | 110 + .../Zend/Search/Lucene/Search/QueryLexer.php | 510 ++++ .../Zend/Search/Lucene/Search/QueryParser.php | 635 +++++ .../Lucene/Search/QueryParserContext.php | 401 ++++ .../Lucene/Search/QueryParserException.php | 41 + .../Zend/Search/Lucene/Search/QueryToken.php | 225 ++ .../Zend/Search/Lucene/Search/Similarity.php | 551 +++++ .../Lucene/Search/Similarity/Default.php | 110 + .../Lib/Zend/Search/Lucene/Search/Weight.php | 85 + .../Search/Lucene/Search/Weight/Boolean.php | 137 ++ .../Search/Lucene/Search/Weight/Empty.php | 57 + .../Search/Lucene/Search/Weight/MultiTerm.php | 139 ++ .../Search/Lucene/Search/Weight/Phrase.php | 108 + .../Zend/Search/Lucene/Search/Weight/Term.php | 125 + .../Zend/Search/Lucene/Storage/Directory.php | 136 ++ .../Lucene/Storage/Directory/Filesystem.php | 363 +++ .../Lib/Zend/Search/Lucene/Storage/File.php | 473 ++++ .../Search/Lucene/Storage/File/Filesystem.php | 229 ++ .../Search/Lucene/Storage/File/Memory.php | 601 +++++ .../Lucene/TermStreamsPriorityQueue.php | 172 ++ modules/AOD_Index/LuceneUtils.php | 320 +++ modules/AOD_Index/PdfParser.php | 337 +++ modules/AOD_Index/controller.php | 40 + modules/AOD_Index/language/en_us.lang.php | 96 + modules/AOD_Index/metadata/SearchFields.php | 54 + .../AOD_Index/metadata/dashletviewdefs.php | 60 + modules/AOD_Index/metadata/detailviewdefs.php | 73 + modules/AOD_Index/metadata/editviewdefs.php | 64 + modules/AOD_Index/metadata/listviewdefs.php | 56 + modules/AOD_Index/metadata/metafiles.php | 52 + modules/AOD_Index/metadata/popupdefs.php | 52 + .../AOD_Index/metadata/quickcreatedefs.php | 60 + modules/AOD_Index/metadata/searchdefs.php | 61 + modules/AOD_Index/metadata/studio.php | 41 + .../AOD_Index/metadata/subpanels/default.php | 73 + modules/AOD_Index/tpls/indexdata.tpl | 13 + modules/AOD_Index/vardefs.php | 92 + modules/AOD_Index/views/view.indexdata.php | 113 + modules/AOD_IndexEvent/AOD_IndexEvent.php | 48 + .../AOD_IndexEvent/AOD_IndexEvent_sugar.php | 80 + .../AOD_IndexEventDashlet.meta.php | 52 + .../AOD_IndexEventDashlet.php | 63 + .../AOD_IndexEvent/language/en_us.lang.php | 71 + .../AOD_IndexEvent/metadata/SearchFields.php | 54 + .../metadata/dashletviewdefs.php | 60 + .../metadata/detailviewdefs.php | 73 + .../AOD_IndexEvent/metadata/editviewdefs.php | 64 + .../AOD_IndexEvent/metadata/listviewdefs.php | 36 + modules/AOD_IndexEvent/metadata/metafiles.php | 52 + modules/AOD_IndexEvent/metadata/popupdefs.php | 52 + .../metadata/quickcreatedefs.php | 60 + .../AOD_IndexEvent/metadata/searchdefs.php | 61 + modules/AOD_IndexEvent/metadata/studio.php | 41 + .../metadata/subpanels/default.php | 73 + modules/AOD_IndexEvent/vardefs.php | 121 + 141 files changed, 27554 insertions(+) create mode 100644 custom/Extension/application/Ext/Include/AdvancedOpenDiscovery.php create mode 100644 custom/Extension/application/Ext/Language/en_us.AdvancedOpenDiscovery.php create mode 100644 custom/Extension/modules/Administration/Ext/Administration/AODAdmin.php create mode 100644 custom/Extension/modules/Administration/Ext/Language/en_us.AODAdmin.php create mode 100644 custom/Extension/modules/Schedulers/Ext/Language/en_us.AdvancedOpenDiscovery.php create mode 100644 custom/Extension/modules/Schedulers/Ext/ScheduledTasks/AODScheduler.php create mode 100644 custom/modules/Administration/AODAdmin.php create mode 100644 custom/modules/Administration/AODAdmin.tpl create mode 100644 custom/modules/Home/UnifiedSearch.php create mode 100644 install/suite_install/AdvancedOpenDiscovery.php create mode 100644 modules/AOD_Index/AOD_Index.php create mode 100644 modules/AOD_Index/AOD_Index_sugar.php create mode 100644 modules/AOD_Index/AOD_LogicHooks.php create mode 100644 modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.meta.php create mode 100644 modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Exception.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text/CaseInsensitive.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum/CaseInsensitive.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8/CaseInsensitive.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num/CaseInsensitive.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Token.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/LowerCase.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/LowerCaseUtf8.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/ShortWords.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/StopWords.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Docx.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Exception.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Html.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document/OpenXml.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Pptx.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Xlsx.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Exception.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/FSM.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/FSMAction.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Field.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DictionaryLoader.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DocsFilter.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/FieldInfo.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentInfo.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentMerger.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/StreamWriter.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/Term.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermInfo.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsPriorityQueue.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsStream/Interface.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Index/Writer.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Interface.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Interface/MultiSearcher.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/LockManager.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/MultiSearcher.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/PriorityQueue.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Proxy.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/BooleanExpressionRecognizer.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Default.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Interface.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Boolean.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Empty.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Fuzzy.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Insignificant.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/MultiTerm.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Phrase.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Fuzzy.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Phrase.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Term.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Range.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Term.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Wildcard.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Phrase.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Subquery.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Term.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryHit.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryLexer.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParser.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserContext.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserException.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryToken.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity/Default.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Boolean.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Empty.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/MultiTerm.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Phrase.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Term.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/Directory.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/Directory/Filesystem.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Filesystem.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Memory.php create mode 100644 modules/AOD_Index/Lib/Zend/Search/Lucene/TermStreamsPriorityQueue.php create mode 100644 modules/AOD_Index/LuceneUtils.php create mode 100644 modules/AOD_Index/PdfParser.php create mode 100644 modules/AOD_Index/controller.php create mode 100644 modules/AOD_Index/language/en_us.lang.php create mode 100644 modules/AOD_Index/metadata/SearchFields.php create mode 100644 modules/AOD_Index/metadata/dashletviewdefs.php create mode 100644 modules/AOD_Index/metadata/detailviewdefs.php create mode 100644 modules/AOD_Index/metadata/editviewdefs.php create mode 100644 modules/AOD_Index/metadata/listviewdefs.php create mode 100644 modules/AOD_Index/metadata/metafiles.php create mode 100644 modules/AOD_Index/metadata/popupdefs.php create mode 100644 modules/AOD_Index/metadata/quickcreatedefs.php create mode 100644 modules/AOD_Index/metadata/searchdefs.php create mode 100644 modules/AOD_Index/metadata/studio.php create mode 100644 modules/AOD_Index/metadata/subpanels/default.php create mode 100644 modules/AOD_Index/tpls/indexdata.tpl create mode 100644 modules/AOD_Index/vardefs.php create mode 100644 modules/AOD_Index/views/view.indexdata.php create mode 100644 modules/AOD_IndexEvent/AOD_IndexEvent.php create mode 100644 modules/AOD_IndexEvent/AOD_IndexEvent_sugar.php create mode 100644 modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.meta.php create mode 100644 modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.php create mode 100644 modules/AOD_IndexEvent/language/en_us.lang.php create mode 100644 modules/AOD_IndexEvent/metadata/SearchFields.php create mode 100644 modules/AOD_IndexEvent/metadata/dashletviewdefs.php create mode 100644 modules/AOD_IndexEvent/metadata/detailviewdefs.php create mode 100644 modules/AOD_IndexEvent/metadata/editviewdefs.php create mode 100644 modules/AOD_IndexEvent/metadata/listviewdefs.php create mode 100644 modules/AOD_IndexEvent/metadata/metafiles.php create mode 100644 modules/AOD_IndexEvent/metadata/popupdefs.php create mode 100644 modules/AOD_IndexEvent/metadata/quickcreatedefs.php create mode 100644 modules/AOD_IndexEvent/metadata/searchdefs.php create mode 100644 modules/AOD_IndexEvent/metadata/studio.php create mode 100644 modules/AOD_IndexEvent/metadata/subpanels/default.php create mode 100644 modules/AOD_IndexEvent/vardefs.php diff --git a/custom/Extension/application/Ext/Include/AdvancedOpenDiscovery.php b/custom/Extension/application/Ext/Include/AdvancedOpenDiscovery.php new file mode 100644 index 00000000000..136235114ba --- /dev/null +++ b/custom/Extension/application/Ext/Include/AdvancedOpenDiscovery.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/custom/Extension/application/Ext/Language/en_us.AdvancedOpenDiscovery.php b/custom/Extension/application/Ext/Language/en_us.AdvancedOpenDiscovery.php new file mode 100644 index 00000000000..7ca23cee4d4 --- /dev/null +++ b/custom/Extension/application/Ext/Language/en_us.AdvancedOpenDiscovery.php @@ -0,0 +1,39 @@ + + */ +$admin_option_defs = array(); +$admin_option_defs['Administration']['aod'] = array( + 'edit', + 'AOD Settings', + 'Change settings for Advanced OpenDiscovery', + './index.php?module=Administration&action=AODAdmin' +); +if (isset($admin_group_header['sagility'])) $admin_option_defs['Administration'] = array_merge((array)$admin_option_defs['Administration'], (array)$admin_group_header['sagility'][3]['Administration']); + +$admin_group_header['sagility'] = array( + 'LBL_SALESAGILITY_ADMIN', + '', + false, + $admin_option_defs, + '' +); +?> \ No newline at end of file diff --git a/custom/Extension/modules/Administration/Ext/Language/en_us.AODAdmin.php b/custom/Extension/modules/Administration/Ext/Language/en_us.AODAdmin.php new file mode 100644 index 00000000000..3ef80666563 --- /dev/null +++ b/custom/Extension/modules/Administration/Ext/Language/en_us.AODAdmin.php @@ -0,0 +1,26 @@ + + */ +$mod_strings['LBL_SALESAGILITY_ADMIN'] = 'Advanced OpenAdmin'; +$mod_strings['LBL_AOD_ADMIN_MANAGE_AOD'] = 'Advanced OpenDiscovery Settings'; +$mod_strings['LBL_AOD_ENABLE'] = 'Enable AOD'; diff --git a/custom/Extension/modules/Schedulers/Ext/Language/en_us.AdvancedOpenDiscovery.php b/custom/Extension/modules/Schedulers/Ext/Language/en_us.AdvancedOpenDiscovery.php new file mode 100644 index 00000000000..cca28d89c3a --- /dev/null +++ b/custom/Extension/modules/Schedulers/Ext/Language/en_us.AdvancedOpenDiscovery.php @@ -0,0 +1,3 @@ + + */ + +$job_strings[] = 'aodIndexUnindexed'; +$job_strings[] = 'aodOptimiseIndex'; + + +/** + * Scheduled job function to index any unindexed beans. + * @return bool + */ +function aodIndexUnindexed(){ + $total = 1; + while($total > 0){ + $total = performLuceneIndexing(); + } + return true; +} + +function aodOptimiseIndex(){ + $index = BeanFactory::getBean("AOD_Index")->getIndex(); + $index->optimise(); + return true; +} + + +function performLuceneIndexing(){ + global $db, $sugar_config; + if(empty($sugar_config['aod']['enable_aod'])){ + return; + } + $index = BeanFactory::getBean("AOD_Index")->getIndex(); + + $beanList = $index->getIndexableModules(); + $total = 0; + foreach($beanList as $beanModule => $beanName){ + $bean = BeanFactory::getBean($beanModule); + if(!$bean || !method_exists($bean,"getTableName") || !$bean->getTableName()){ + continue; + } + $query = "SELECT b.id FROM ".$bean->getTableName()." b LEFT JOIN aod_indexevent ie ON (ie.record_id = b.id AND ie.record_module = '".$beanModule."') WHERE b.deleted = 0 AND (ie.id IS NULL OR ie.date_modified < b.date_modified)"; + $res = $db->limitQuery($query,0,500); + $c = 0; + while($row = $db->fetchByAssoc($res)){ + $c++; + $total++; + $index->index($beanModule, $row['id']); + } + if($c){ + $index->commit(); + $index->optimise(); + } + + } + $index->optimise(); + return $total; +} \ No newline at end of file diff --git a/custom/modules/Administration/AODAdmin.php b/custom/modules/Administration/AODAdmin.php new file mode 100644 index 00000000000..209be8514da --- /dev/null +++ b/custom/modules/Administration/AODAdmin.php @@ -0,0 +1,88 @@ + + */ +if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); + + +global $current_user, $sugar_config; +global $mod_strings; +global $app_list_strings; +global $app_strings; +global $theme; + +if (!is_admin($current_user)) sugar_die("Unauthorized access to administration."); + +require_once('modules/Configurator/Configurator.php'); + + +echo getClassicModuleTitle( + "Administration", + array( + "".translate('LBL_MODULE_NAME','Administration')."", + $mod_strings['LBL_AOD_ADMIN_MANAGE_AOD'], + ), + false +); + +$cfg = new Configurator(); +$sugar_smarty = new Sugar_Smarty(); +$errors = array(); + +if(!array_key_exists('aod',$cfg->config)){ + $cfg->config['aod'] = array( + 'enable_aod' => '', + ); +} +if(isset($_REQUEST['do']) && $_REQUEST['do'] == 'save') { + $cfg->config['aod']['enable_aod'] = !empty($_REQUEST['enable_aod']); + $cfg->saveConfig(); + header('Location: index.php?module=Administration&action=index'); + exit(); +} +$sugar_smarty->assign('MOD', $mod_strings); +$sugar_smarty->assign('APP', $app_strings); +$sugar_smarty->assign('APP_LIST', $app_list_strings); +$sugar_smarty->assign('LANGUAGES', get_languages()); +$sugar_smarty->assign("JAVASCRIPT",get_set_focus_js()); +$sugar_smarty->assign('config', $cfg->config['aod']); +$sugar_smarty->assign('error', $errors); + + +$buttons = << +   +EOQ; + +$sugar_smarty->assign("BUTTONS",$buttons); + +$sugar_smarty->display('custom/modules/Administration/AODAdmin.tpl'); + +$javascript = new javascript(); +$javascript->setFormName('ConfigureSettings'); +echo $javascript->getScript(); diff --git a/custom/modules/Administration/AODAdmin.tpl b/custom/modules/Administration/AODAdmin.tpl new file mode 100644 index 00000000000..07e59855425 --- /dev/null +++ b/custom/modules/Administration/AODAdmin.tpl @@ -0,0 +1,31 @@ + + +
      + + {$error.main} + + + + + +
      + {$BUTTONS} +
      + + + + + + + + + +

      {$MOD.LBL_GENERAL_SETTINGS}

      {$MOD.LBL_AOD_ENABLE}: + +
      +
      + {$BUTTONS} +
      + {$JAVASCRIPT} +
      diff --git a/custom/modules/Home/UnifiedSearch.php b/custom/modules/Home/UnifiedSearch.php new file mode 100644 index 00000000000..15ddf8fdb17 --- /dev/null +++ b/custom/modules/Home/UnifiedSearch.php @@ -0,0 +1,266 @@ + + */ + +$queryString = ! empty($_REQUEST['query_string']) ? $_REQUEST['query_string'] : ''; + +$luceneSearch = !empty($sugar_config['aod']['enable_aod']); + +if(array_key_exists('showGSDiv',$_REQUEST) || !empty($_REQUEST['search_fallback'])){ + //Search from vanilla sugar search or request for the same + $luceneSearch = false; +} + +if(!$luceneSearch){ + if(!empty($sugar_config['aod']['enable_aod'])){ + echo "".translate("LBL_USE_AOD_SEARCH","AOD_Index").""; + } + require "modules/Home/UnifiedSearch.php"; + return; +} +require_once('include/utils.php'); +echo "".translate("LBL_USE_VANILLA_SEARCH","AOD_Index").""; + +$index = BeanFactory::getBean("AOD_Index")->getIndex(); +$hits = array(); +$start = 0; +$amount = 20; +$total = 0; +if(!empty($_REQUEST['start'])){ + $start = $_REQUEST['start']; +} +if(!empty($_REQUEST['total'])){ + $total = $_REQUEST['total']; +} +if(array_key_exists('listViewStartButton',$_REQUEST)){ + $start = 0; +}elseif(array_key_exists('listViewPrevButton',$_REQUEST)){ + $start = max($start - $amount,0); +}elseif(array_key_exists('listViewNextButton',$_REQUEST)){ + $start = min($start + $amount,$total); +}elseif(array_key_exists('listViewEndButton',$_REQUEST)){ + $start = floor($total / $amount) * $amount; +} +if($queryString){ + $res = doSearch($index, $queryString, $start, $amount); + $total = $res['total']; + $hits = $res['hits']; +} + + +?> +
      + + + + ">  +
      + + + + + + + + + + + record_module,$hit->record_id); + echo "" + ."" + ."" + ."" + ."" + ."" + ."" + .""; +} + }else{ + echo ""; + } +?> +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      ".getModuleLabel($bean->module_name)."".$bean->get_summary_text()."".getRecordSummary($bean)."".$bean->date_entered."".$bean->date_modified."".getScoreDisplay($hit)."
      ".translate("LBL_SEARCH_RESULT_EMPTY","AOD_Index")."
      + +module_dir]) ){ + if(file_exists('custom/modules/'.$bean->module_dir.'/metadata/listviewdefs.php')){ + require('custom/modules/'.$bean->module_dir.'/metadata/listviewdefs.php'); + }else if(file_exists('modules/'.$bean->module_dir.'/metadata/listviewdefs.php')){ + require('modules/'.$bean->module_dir.'/metadata/listviewdefs.php'); + } + } + if ( !isset($listViewDefs) || !isset($listViewDefs[$bean->module_dir]) ){ + return $bean->get_summary_text(); + } + $summary = array();; + foreach($listViewDefs[$bean->module_dir] as $key => $entry){ + if(!$entry['default']){ + continue; + } + $key = strtolower($key); + + if(in_array($key,array('date_entered','date_modified','name'))){ + continue; + } + $summary[] = $bean->$key; + } + $summary = array_filter($summary); + return implode(' || ',$summary); +} +function getScoreDisplay($hit){ + return number_format(100*$hit->score,2); +} +function unCamelCase($input, $sep = " "){ + $output = preg_replace(array('/(?<=[^A-Z])([A-Z])/', '/(?<=[^0-9])([0-9])/'), $sep.'$0', $input); + return ucwords($output); +} +function getModuleLabel($module){ + return translate('LBL_MODULE_NAME', $module); +} +function cacheQuery($queryString,$resArray){ + $file = create_cache_directory('modules/AOD_Index/QueryCache/' . md5($queryString)); + $out = serialize($resArray); + sugar_file_put_contents_atomic($file, $out); +} + +function getCorrectMTime($filePath){ + $time = filemtime($filePath); + $isDST = (date('I', $time) == 1); + $systemDST = (date('I') == 1); + $adjustment = 0; + if($isDST == false && $systemDST == true){ + $adjustment = 3600; + }elseif($isDST == true && $systemDST == false){ + $adjustment = -3600; + }else{ + $adjustment = 0; + } + return ($time + $adjustment); +} + +function doSearch($index, $queryString, $start = 0, $amount = 20){ + $cachePath = 'cache/modules/AOD_Index/QueryCache/' . md5($queryString); + if(is_file($cachePath)){ + $mTime = getCorrectMTime($cachePath); + if($mTime > (time() - 5*60)){ + $hits = unserialize(sugar_file_get_contents($cachePath)); + } + } + if(!isset($hits)){ + $tmphits = $index->find($queryString); + $hits = array(); + foreach($tmphits as $hit){ + $newHit = new stdClass; + $newHit->record_module = $hit->record_module; + $newHit->record_id = $hit->record_id; + $newHit->score = $hit->score; + $hits[] = $newHit; + } + //Cache results so pagination is nice and snappy. + cacheQuery($queryString,$hits); + } + + $total = count($hits); + $hits = array_slice($hits,$start,$amount); + $res = array('total'=>$total,'hits' => $hits); + return $res; +} + +function getPaginateHTML($queryString, $start, $amount, $total){ + $first = !$start; + $last = ($start + $amount) > $total; + if($first){ + $startImage = SugarThemeRegistry::current()->getImageURL('start_off.gif'); + $prevImage = SugarThemeRegistry::current()->getImageURL('previous_off.gif'); + }else{ + $startImage = SugarThemeRegistry::current()->getImageURL('start.gif'); + $prevImage = SugarThemeRegistry::current()->getImageURL('previous.gif'); + } + if($last){ + $endImage = SugarThemeRegistry::current()->getImageURL('end_off.gif'); + $nextImage = SugarThemeRegistry::current()->getImageURL('next_off.gif'); + }else{ + $endImage = SugarThemeRegistry::current()->getImageURL('end.gif'); + $nextImage = SugarThemeRegistry::current()->getImageURL('next.gif'); + } + ?> + +
      + + + + + + + + ( - of ) + + +
      + +config['aod'])){ + $cfg->config['aod'] = array('enable_aod'=>true); + } + $cfg->saveConfig(); + + addAODSchedulers(); +} +function addAODSchedulers(){ + require_once('modules/Schedulers/Scheduler.php'); + + $scheduler = new Scheduler(); + if(!count($scheduler->get_full_list('','job = "function::aodIndexUnindexed"'))){ + $scheduler->name = "Perform Lucene Index"; + $scheduler->date_time_start = "2005-01-01 11:15:00"; + $scheduler->date_time_end = null; + $scheduler->job_interval = "0::0::*::*::*"; + $scheduler->job = "function::aodIndexUnindexed"; + $scheduler->status = "Active"; + $scheduler->catch_up = 1; + $scheduler->save(); + } + + + $scheduler = new Scheduler(); + if(!count($scheduler->get_full_list('','job = "function::aodOptimiseIndex"'))){ + $scheduler->name = "Optimise AOD Index"; + $scheduler->date_time_start = "2005-01-01 11:15:00"; + $scheduler->date_time_end = null; + $scheduler->job_interval = "0::*/3::*::*::*"; + $scheduler->job = "function::aodOptimiseIndex"; + $scheduler->status = "Active"; + $scheduler->catch_up = 1; + $scheduler->save(); + } +} \ No newline at end of file diff --git a/install/suite_install/suite_install.php b/install/suite_install/suite_install.php index 2543c5c0e0b..995900863b1 100755 --- a/install/suite_install/suite_install.php +++ b/install/suite_install/suite_install.php @@ -25,6 +25,9 @@ require_once('install/suite_install/AdvancedOpenPortal.php'); install_aop(); +require_once('install/suite_install/AdvancedOpenDiscovery.php'); +install_aod(); + require_once('install/suite_install/AdvancedOpenEvents.php'); install_aoe(); diff --git a/modules/AOD_Index/AOD_Index.php b/modules/AOD_Index/AOD_Index.php new file mode 100644 index 00000000000..01f2c54428c --- /dev/null +++ b/modules/AOD_Index/AOD_Index.php @@ -0,0 +1,320 @@ +getLuceneIndex()->find($queryString); + return $hits; + } + + function optimise(){ + if(!$this->isEnabled()){ + return; + } + global $timedate; + $this->getLuceneIndex()->optimize(); + $this->last_optimised = $timedate->getNow()->asDb(); + $this->save(); + } + + public function getIndex(){ + $indexes = $this->get_full_list(); + if(count($indexes)){ + $index = $indexes[0]; + return $index; + }else{ + $index = new AOD_Index(); + $index->name = "Index"; + $index->location = "modules/AOD_Index/Index/Index"; + $index->save(); + return $index; + } + } + + /** + * @param $revision + * @return bool|Zend_Search_Lucene_Document + */ +private function getDocumentForRevision($revision){ + $path = getDocumentRevisionPath($revision->id); + if(!file_exists($path)){ + return array("error"=>"File not found"); + } + //Convert the file to a lucene document + $mime = $revision->file_mime_type; + switch($mime){ + case 'application/pdf': + $document = createPDFDocument($path); + break; + case 'application/msword': + $document = createDocDocument($path); + break; + case 'application/vnd.oasis.opendocument.text': + $document = createOdtDocument($path); + break; + case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': + $document = createDocXDocument($path); + break; + case 'text/html': + $document = createHTMLDocument($path); + break; + case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': + $document = createXLSXDocument($path); + break; + case 'application/rtf': + $document = createRTFDocument($path); + case 'text/csv': + case 'text/plain': + $document = createTextDocument($path); + break; + case 'application/vnd.openxmlformats-officedocument.presentationml.presentation': + $document = createPPTXDocument($path); + break; + case 'application/vnd.oasis.opendocument.spreadsheet': + case 'application/vnd.ms-powerpoint': + case 'application/vnd.ms-excel': + default: + return array("error"=>"Mime type $mime not supported"); + } + if(!$document){ + return array("error"=>"Failed to parse document"); + } + $document->addField(Zend_Search_Lucene_Field::text("filename",$revision->filename)); + return array("error"=>false,"document"=>$document); +} + + public function getDocumentForBean(SugarBean $bean){ + if($bean->module_name == 'DocumentRevisions'){ + $document = $this->getDocumentForRevision($bean); + }else{ + $document = array("error"=>false,"document"=>new Zend_Search_Lucene_Document()); + } + if($document["error"]){ + return $document; + } + $document["document"]->addField(Zend_Search_Lucene_Field::UnIndexed("aod_id", $bean->module_name." ".$bean->id)); + $document["document"]->addField(Zend_Search_Lucene_Field::UnIndexed("record_id", $bean->id)); + $document["document"]->addField(Zend_Search_Lucene_Field::UnIndexed("record_module", $bean->module_name)); + foreach($GLOBALS['dictionary'][$bean->getObjectName()]['fields'] as $key => $field){ + switch($field['type']){ + case "enum": + $document["document"]->addField(Zend_Search_Lucene_Field::Keyword($key, strtolower($bean->$key))); + break; + + case "multienum": + $vals = unencodeMultienum($bean->$field); + $document["document"]->addField(Zend_Search_Lucene_Field::unStored($key, strtolower(implode(" ",$vals)))); + break; + case "name": + case "phone": + case "html": + case "text": + case "url": + case "varchar": + if(property_exists($bean,$key)){ + $val = strtolower($bean->$key); + }else{ + $val = ''; + } + $field = Zend_Search_Lucene_Field::unStored($key, $val); + if($key == "name"){ + $field->boost = 1.5; + } + $document["document"]->addField($field); + break; + case "address": + case "bool": + case "currency": + case "date": + case "datetimecombo": + case "decimal": + case "float": + case "iframe": + case "int": + case "radioenum": + case "relate": + default: + break; + } + } + + return $document; + } + + private function getIndexEvent($module, $beanId){ + $indexEventBean = BeanFactory::getBean("AOD_IndexEvent"); + $indexEvents = $indexEventBean->get_full_list('',"aod_indexevent.record_id = '".$beanId."' AND aod_indexevent.record_module = '".$module."'"); + if($indexEvents){ + $indexEvent = $indexEvents[0]; + }else{ + $indexEvent = BeanFactory::newBean("AOD_IndexEvent"); + $indexEvent->record_id = $beanId; + $indexEvent->record_module = $module; + } + return $indexEvent; + } + + public function commit(){ + if(!$this->isEnabled()){ + return; + } + $this->getLuceneIndex()->commit(); + } + + public static function isModuleSearchable($module,$beanName){ + $whiteList = array("DocumentRevisions","Cases"); + if(in_array($module,$whiteList)){ + return true; + } + $blackList = array("AOD_IndexEvent","AOD_Index","AOW_Actions","AOW_Conditions","AOW_Processed","SchedulersJobs"); + if(in_array($module,$blackList)){ + return false; + } + $manager = new VardefManager(); + $manager->loadVardef($module, $beanName); + if(empty($GLOBALS['dictionary'][$beanName]['unified_search'])){ + return false; + } + return true; + } + + public function index($module, $beanId){ + try{ + if(!$this->isEnabled()){ + return; + } + $bean_name = $GLOBALS['beanList'][$module]; + if(!$bean_name){ + return false; + } + $bean = new $bean_name(); + if(!$bean || ! $bean instanceof SugarBean){ + return false; + } + + $bean->retrieve($beanId); + if(!$bean){ + return false; + } + + if(!self::isModuleSearchable($module,$bean->getObjectName())){ + return false; + } + + $indexEvent = $this->getIndexEvent($module,$beanId); + $indexEvent->name = $bean->get_summary_text(); + + $document = $this->getDocumentForBean($bean); + //Index name, id, date, filename + if(!$document['error']){ + $this->remove($module,$beanId); + $this->getLuceneIndex()->addDocument($document['document']); + $indexEvent->success = true; + }else{ + $indexEvent->success = false; + $indexEvent->error = $document['error']; + } + $indexEvent->save(); + }catch(Exception $ex){ + $GLOBALS['log']->error($ex->getMessage()); + return false; + } + } + private function getIdForDoc($module, $beanId){ + return $module . " " . $beanId; + } + + private function remove($module, $beanId){ + $idTerm = new Zend_Search_Lucene_Index_Term($this->getIdForDoc($module,$beanId),"aod_id"); + $query = new Zend_Search_Lucene_Search_Query_Term($idTerm); + $hits = $this->getLuceneIndex()->find($query); + foreach ($hits as $hit) { + $this->getLuceneIndex()->delete($hit->id); + } + } + + /** + * Returns a handle on the actual lucene index. + * @return Zend_Search_Lucene_Interface + */ + private function getLuceneIndex(){ + if(!empty($this->index)){ + return $this->index; + } + if(file_exists($this->location)){ + $this->index = new Zend_Search_Lucene($this->location); + }else{ + $this->index = Zend_Search_Lucene::create($this->location); + } + $this->index->setMaxBufferedDocs(64); + //$this->index->setMaxMergeDocs(50); + Zend_Search_Lucene_Search_Query_Fuzzy::setDefaultPrefixLength(1); + $this->index->setMergeFactor(5); + return $this->index; + } + + + public function getIndexableModules(){ + $modules = array(); + $beanList = $GLOBALS['beanList']; + ksort($beanList); + foreach($beanList as $beanModule => $beanName){ + if(self::isModuleSearchable($beanModule,$beanName)){ + $modules[$beanModule] = $beanName; + } + } + return $modules; + } +} +?> \ No newline at end of file diff --git a/modules/AOD_Index/AOD_Index_sugar.php b/modules/AOD_Index/AOD_Index_sugar.php new file mode 100644 index 00000000000..83e1200a422 --- /dev/null +++ b/modules/AOD_Index/AOD_Index_sugar.php @@ -0,0 +1,80 @@ + \ No newline at end of file diff --git a/modules/AOD_Index/AOD_LogicHooks.php b/modules/AOD_Index/AOD_LogicHooks.php new file mode 100644 index 00000000000..6c77ee8a660 --- /dev/null +++ b/modules/AOD_Index/AOD_LogicHooks.php @@ -0,0 +1,35 @@ + + */ +class AOD_LogicHooks{ + + function saveModuleChanges(SugarBean $bean, $event, $arguments){ + if(defined('sugarEntry') && SUGARCRM_IS_INSTALLING){ + return; + } + $index = BeanFactory::getBean("AOD_Index")->getIndex(); + $index->index($bean->module_name,$bean->id); + } + +} \ No newline at end of file diff --git a/modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.meta.php b/modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.meta.php new file mode 100644 index 00000000000..a861471f2fb --- /dev/null +++ b/modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.meta.php @@ -0,0 +1,52 @@ + 'AOD_Index', + 'title' => translate('LBL_HOMEPAGE_TITLE', 'AOD_Index'), + 'description' => 'A customizable view into AOD_Index', + 'icon' => 'icon_AOD_Index_32.gif', + 'category' => 'Module Views'); \ No newline at end of file diff --git a/modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.php b/modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.php new file mode 100644 index 00000000000..ea212130da3 --- /dev/null +++ b/modules/AOD_Index/Dashlets/AOD_IndexDashlet/AOD_IndexDashlet.php @@ -0,0 +1,63 @@ +title = translate('LBL_HOMEPAGE_TITLE', 'AOD_Index'); + + $this->searchFields = $dashletData['AOD_IndexDashlet']['searchFields']; + $this->columns = $dashletData['AOD_IndexDashlet']['columns']; + + $this->seedBean = new AOD_Index(); + } +} \ No newline at end of file diff --git a/modules/AOD_Index/Lib/Zend/Search/Exception.php b/modules/AOD_Index/Lib/Zend/Search/Exception.php new file mode 100644 index 00000000000..c3314d8dfbf --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Exception.php @@ -0,0 +1,37 @@ +getFileObject('segments.gen', false); + + $format = $genFile->readInt(); + if ($format != (int)0xFFFFFFFE) { + throw new Zend_Search_Lucene_Exception('Wrong segments.gen file format'); + } + + $gen1 = $genFile->readLong(); + $gen2 = $genFile->readLong(); + + if ($gen1 == $gen2) { + return $gen1; + } + + usleep(self::GENERATION_RETRIEVE_PAUSE * 1000); + } + + // All passes are failed + throw new Zend_Search_Lucene_Exception('Index is under processing now'); + } catch (Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'is not readable') !== false) { + try { + // Try to open old style segments file + $segmentsFile = $directory->getFileObject('segments', false); + + // It's pre-2.1 index + return 0; + } catch (Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'is not readable') !== false) { + return -1; + } else { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + } else { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + + return -1; + } + + /** + * Get generation number associated with this index instance + * + * The same generation number in pair with document number or query string + * guarantees to give the same result while index retrieving. + * So it may be used for search result caching. + * + * @return integer + */ + public function getGeneration() + { + return $this->_generation; + } + + + /** + * Get segments file name + * + * @param integer $generation + * @return string + */ + public static function getSegmentFileName($generation) + { + if ($generation == 0) { + return 'segments'; + } + + return 'segments_' . base_convert($generation, 10, 36); + } + + /** + * Get index format version + * + * @return integer + */ + public function getFormatVersion() + { + return $this->_formatVersion; + } + + /** + * Set index format version. + * Index is converted to this format at the nearest upfdate time + * + * @param int $formatVersion + * @throws Zend_Search_Lucene_Exception + */ + public function setFormatVersion($formatVersion) + { + if ($formatVersion != self::FORMAT_PRE_2_1 && + $formatVersion != self::FORMAT_2_1 && + $formatVersion != self::FORMAT_2_3) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Unsupported index format'); + } + + $this->_formatVersion = $formatVersion; + } + + /** + * Read segments file for pre-2.1 Lucene index format + * + * @throws Zend_Search_Lucene_Exception + */ + private function _readPre21SegmentsFile() + { + $segmentsFile = $this->_directory->getFileObject('segments'); + + $format = $segmentsFile->readInt(); + + if ($format != (int)0xFFFFFFFF) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong segments file format'); + } + + // read version + $segmentsFile->readLong(); + + // read segment name counter + $segmentsFile->readInt(); + + $segments = $segmentsFile->readInt(); + + $this->_docCount = 0; + + // read segmentInfos + for ($count = 0; $count < $segments; $count++) { + $segName = $segmentsFile->readString(); + $segSize = $segmentsFile->readInt(); + $this->_docCount += $segSize; + + $this->_segmentInfos[$segName] = + new Zend_Search_Lucene_Index_SegmentInfo($this->_directory, + $segName, + $segSize); + } + + // Use 2.1 as a target version. Index will be reorganized at update time. + $this->_formatVersion = self::FORMAT_2_1; + } + + /** + * Read segments file + * + * @throws Zend_Search_Lucene_Exception + */ + private function _readSegmentsFile() + { + $segmentsFile = $this->_directory->getFileObject(self::getSegmentFileName($this->_generation)); + + $format = $segmentsFile->readInt(); + + if ($format == (int)0xFFFFFFFC) { + $this->_formatVersion = self::FORMAT_2_3; + } else if ($format == (int)0xFFFFFFFD) { + $this->_formatVersion = self::FORMAT_2_1; + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Unsupported segments file format'); + } + + // read version + $segmentsFile->readLong(); + + // read segment name counter + $segmentsFile->readInt(); + + $segments = $segmentsFile->readInt(); + + $this->_docCount = 0; + + // read segmentInfos + for ($count = 0; $count < $segments; $count++) { + $segName = $segmentsFile->readString(); + $segSize = $segmentsFile->readInt(); + + // 2.1+ specific properties + $delGen = $segmentsFile->readLong(); + + if ($this->_formatVersion == self::FORMAT_2_3) { + $docStoreOffset = $segmentsFile->readInt(); + + if ($docStoreOffset != (int)0xFFFFFFFF) { + $docStoreSegment = $segmentsFile->readString(); + $docStoreIsCompoundFile = $segmentsFile->readByte(); + + $docStoreOptions = array('offset' => $docStoreOffset, + 'segment' => $docStoreSegment, + 'isCompound' => ($docStoreIsCompoundFile == 1)); + } else { + $docStoreOptions = null; + } + } else { + $docStoreOptions = null; + } + + $hasSingleNormFile = $segmentsFile->readByte(); + $numField = $segmentsFile->readInt(); + + $normGens = array(); + if ($numField != (int)0xFFFFFFFF) { + for ($count1 = 0; $count1 < $numField; $count1++) { + $normGens[] = $segmentsFile->readLong(); + } + + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Separate norm files are not supported. Optimize index to use it with Zend_Search_Lucene.'); + } + + $isCompoundByte = $segmentsFile->readByte(); + + if ($isCompoundByte == 0xFF) { + // The segment is not a compound file + $isCompound = false; + } else if ($isCompoundByte == 0x00) { + // The status is unknown + $isCompound = null; + } else if ($isCompoundByte == 0x01) { + // The segment is a compound file + $isCompound = true; + } + + $this->_docCount += $segSize; + + $this->_segmentInfos[$segName] = + new Zend_Search_Lucene_Index_SegmentInfo($this->_directory, + $segName, + $segSize, + $delGen, + $docStoreOptions, + $hasSingleNormFile, + $isCompound); + } + } + + /** + * Opens the index. + * + * IndexReader constructor needs Directory as a parameter. It should be + * a string with a path to the index folder or a Directory object. + * + * @param Zend_Search_Lucene_Storage_Directory_Filesystem|string $directory + * @throws Zend_Search_Lucene_Exception + */ + public function __construct($directory = null, $create = false) + { + if ($directory === null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Exception('No index directory specified'); + } + + if (is_string($directory)) { + require_once 'Zend/Search/Lucene/Storage/Directory/Filesystem.php'; + $this->_directory = new Zend_Search_Lucene_Storage_Directory_Filesystem($directory); + $this->_closeDirOnExit = true; + } else { + $this->_directory = $directory; + $this->_closeDirOnExit = false; + } + + $this->_segmentInfos = array(); + + // Mark index as "under processing" to prevent other processes from premature index cleaning + Zend_Search_Lucene_LockManager::obtainReadLock($this->_directory); + + $this->_generation = self::getActualGeneration($this->_directory); + + if ($create) { + require_once 'Zend/Search/Lucene/Exception.php'; + try { + Zend_Search_Lucene_LockManager::obtainWriteLock($this->_directory); + } catch (Zend_Search_Lucene_Exception $e) { + Zend_Search_Lucene_LockManager::releaseReadLock($this->_directory); + + if (strpos($e->getMessage(), 'Can\'t obtain exclusive index lock') === false) { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } else { + throw new Zend_Search_Lucene_Exception('Can\'t create index. It\'s under processing now', 0, $e); + } + } + + if ($this->_generation == -1) { + // Directory doesn't contain existing index, start from 1 + $this->_generation = 1; + $nameCounter = 0; + } else { + // Directory contains existing index + $segmentsFile = $this->_directory->getFileObject(self::getSegmentFileName($this->_generation)); + $segmentsFile->seek(12); // 12 = 4 (int, file format marker) + 8 (long, index version) + + $nameCounter = $segmentsFile->readInt(); + $this->_generation++; + } + + require_once 'Zend/Search/Lucene/Index/Writer.php'; + Zend_Search_Lucene_Index_Writer::createIndex($this->_directory, $this->_generation, $nameCounter); + + Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory); + } + + if ($this->_generation == -1) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Index doesn\'t exists in the specified directory.'); + } else if ($this->_generation == 0) { + $this->_readPre21SegmentsFile(); + } else { + $this->_readSegmentsFile(); + } + } + + /** + * Close current index and free resources + */ + private function _close() + { + if ($this->_closed) { + // index is already closed and resources are cleaned up + return; + } + + $this->commit(); + + // Release "under processing" flag + Zend_Search_Lucene_LockManager::releaseReadLock($this->_directory); + + if ($this->_closeDirOnExit) { + $this->_directory->close(); + } + + $this->_directory = null; + $this->_writer = null; + $this->_segmentInfos = null; + + $this->_closed = true; + } + + /** + * Add reference to the index object + * + * @internal + */ + public function addReference() + { + $this->_refCount++; + } + + /** + * Remove reference from the index object + * + * When reference count becomes zero, index is closed and resources are cleaned up + * + * @internal + */ + public function removeReference() + { + $this->_refCount--; + + if ($this->_refCount == 0) { + $this->_close(); + } + } + + /** + * Object destructor + */ + public function __destruct() + { + $this->_close(); + } + + /** + * Returns an instance of Zend_Search_Lucene_Index_Writer for the index + * + * @return Zend_Search_Lucene_Index_Writer + */ + private function _getIndexWriter() + { + if ($this->_writer === null) { + require_once 'Zend/Search/Lucene/Index/Writer.php'; + $this->_writer = new Zend_Search_Lucene_Index_Writer($this->_directory, + $this->_segmentInfos, + $this->_formatVersion); + } + + return $this->_writer; + } + + + /** + * Returns the Zend_Search_Lucene_Storage_Directory instance for this index. + * + * @return Zend_Search_Lucene_Storage_Directory + */ + public function getDirectory() + { + return $this->_directory; + } + + + /** + * Returns the total number of documents in this index (including deleted documents). + * + * @return integer + */ + public function count() + { + return $this->_docCount; + } + + /** + * Returns one greater than the largest possible document number. + * This may be used to, e.g., determine how big to allocate a structure which will have + * an element for every document number in an index. + * + * @return integer + */ + public function maxDoc() + { + return $this->count(); + } + + /** + * Returns the total number of non-deleted documents in this index. + * + * @return integer + */ + public function numDocs() + { + $numDocs = 0; + + foreach ($this->_segmentInfos as $segmentInfo) { + $numDocs += $segmentInfo->numDocs(); + } + + return $numDocs; + } + + /** + * Checks, that document is deleted + * + * @param integer $id + * @return boolean + * @throws Zend_Search_Lucene_Exception Exception is thrown if $id is out of the range + */ + public function isDeleted($id) + { + $this->commit(); + + if ($id >= $this->_docCount) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document id is out of the range.'); + } + + $segmentStartId = 0; + foreach ($this->_segmentInfos as $segmentInfo) { + if ($segmentStartId + $segmentInfo->count() > $id) { + break; + } + + $segmentStartId += $segmentInfo->count(); + } + + return $segmentInfo->isDeleted($id - $segmentStartId); + } + + /** + * Set default search field. + * + * Null means, that search is performed through all fields by default + * + * Default value is null + * + * @param string $fieldName + */ + public static function setDefaultSearchField($fieldName) + { + self::$_defaultSearchField = $fieldName; + } + + /** + * Get default search field. + * + * Null means, that search is performed through all fields by default + * + * @return string + */ + public static function getDefaultSearchField() + { + return self::$_defaultSearchField; + } + + /** + * Set result set limit. + * + * 0 (default) means no limit + * + * @param integer $limit + */ + public static function setResultSetLimit($limit) + { + self::$_resultSetLimit = $limit; + } + + /** + * Get result set limit. + * + * 0 means no limit + * + * @return integer + */ + public static function getResultSetLimit() + { + return self::$_resultSetLimit; + } + + /** + * Set terms per query limit. + * + * 0 means no limit + * + * @param integer $limit + */ + public static function setTermsPerQueryLimit($limit) + { + self::$_termsPerQueryLimit = $limit; + } + + /** + * Get result set limit. + * + * 0 (default) means no limit + * + * @return integer + */ + public static function getTermsPerQueryLimit() + { + return self::$_termsPerQueryLimit; + } + + /** + * Retrieve index maxBufferedDocs option + * + * maxBufferedDocs is a minimal number of documents required before + * the buffered in-memory documents are written into a new Segment + * + * Default value is 10 + * + * @return integer + */ + public function getMaxBufferedDocs() + { + return $this->_getIndexWriter()->maxBufferedDocs; + } + + /** + * Set index maxBufferedDocs option + * + * maxBufferedDocs is a minimal number of documents required before + * the buffered in-memory documents are written into a new Segment + * + * Default value is 10 + * + * @param integer $maxBufferedDocs + */ + public function setMaxBufferedDocs($maxBufferedDocs) + { + $this->_getIndexWriter()->maxBufferedDocs = $maxBufferedDocs; + } + + /** + * Retrieve index maxMergeDocs option + * + * maxMergeDocs is a largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + * Default value is PHP_INT_MAX + * + * @return integer + */ + public function getMaxMergeDocs() + { + return $this->_getIndexWriter()->maxMergeDocs; + } + + /** + * Set index maxMergeDocs option + * + * maxMergeDocs is a largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + * Default value is PHP_INT_MAX + * + * @param integer $maxMergeDocs + */ + public function setMaxMergeDocs($maxMergeDocs) + { + $this->_getIndexWriter()->maxMergeDocs = $maxMergeDocs; + } + + /** + * Retrieve index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @return integer + */ + public function getMergeFactor() + { + return $this->_getIndexWriter()->mergeFactor; + } + + /** + * Set index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @param integer $maxMergeDocs + */ + public function setMergeFactor($mergeFactor) + { + $this->_getIndexWriter()->mergeFactor = $mergeFactor; + } + + /** + * Performs a query against the index and returns an array + * of Zend_Search_Lucene_Search_QueryHit objects. + * Input is a string or Zend_Search_Lucene_Search_Query. + * + * @param Zend_Search_Lucene_Search_QueryParser|string $query + * @return array Zend_Search_Lucene_Search_QueryHit + * @throws Zend_Search_Lucene_Exception + */ + public function find($query) + { + if (is_string($query)) { + require_once 'Zend/Search/Lucene/Search/QueryParser.php'; + + $query = Zend_Search_Lucene_Search_QueryParser::parse($query); + } + + if (!$query instanceof Zend_Search_Lucene_Search_Query) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Query must be a string or Zend_Search_Lucene_Search_Query object'); + } + + $this->commit(); + + $hits = array(); + $scores = array(); + $ids = array(); + + $query = $query->rewrite($this)->optimize($this); + + $query->execute($this); + + $topScore = 0; + + /** Zend_Search_Lucene_Search_QueryHit */ + require_once 'Zend/Search/Lucene/Search/QueryHit.php'; + + foreach ($query->matchedDocs() as $id => $num) { + $docScore = $query->score($id, $this); + if( $docScore != 0 ) { + $hit = new Zend_Search_Lucene_Search_QueryHit($this); + $hit->id = $id; + $hit->score = $docScore; + + $hits[] = $hit; + $ids[] = $id; + $scores[] = $docScore; + + if ($docScore > $topScore) { + $topScore = $docScore; + } + } + + if (self::$_resultSetLimit != 0 && count($hits) >= self::$_resultSetLimit) { + break; + } + } + + if (count($hits) == 0) { + // skip sorting, which may cause a error on empty index + return array(); + } + + if ($topScore > 1) { + foreach ($hits as $hit) { + $hit->score /= $topScore; + } + } + + if (func_num_args() == 1) { + // sort by scores + array_multisort($scores, SORT_DESC, SORT_NUMERIC, + $ids, SORT_ASC, SORT_NUMERIC, + $hits); + } else { + // sort by given field names + + $argList = func_get_args(); + $fieldNames = $this->getFieldNames(); + $sortArgs = array(); + + // PHP 5.3 now expects all arguments to array_multisort be passed by + // reference (if it's invoked through call_user_func_array()); + // since constants can't be passed by reference, create some placeholder variables. + $sortReg = SORT_REGULAR; + $sortAsc = SORT_ASC; + $sortNum = SORT_NUMERIC; + + $sortFieldValues = array(); + + require_once 'Zend/Search/Lucene/Exception.php'; + for ($count = 1; $count < count($argList); $count++) { + $fieldName = $argList[$count]; + + if (!is_string($fieldName)) { + throw new Zend_Search_Lucene_Exception('Field name must be a string.'); + } + + if (strtolower($fieldName) == 'score') { + $sortArgs[] = &$scores; + } else { + if (!in_array($fieldName, $fieldNames)) { + throw new Zend_Search_Lucene_Exception('Wrong field name.'); + } + + if (!isset($sortFieldValues[$fieldName])) { + $valuesArray = array(); + foreach ($hits as $hit) { + try { + $value = $hit->getDocument()->getFieldValue($fieldName); + } catch (Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'not found') === false) { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } else { + $value = null; + } + } + + $valuesArray[] = $value; + } + + // Collect loaded values in $sortFieldValues + // Required for PHP 5.3 which translates references into values when source + // variable is destroyed + $sortFieldValues[$fieldName] = $valuesArray; + } + + $sortArgs[] = &$sortFieldValues[$fieldName]; + } + + if ($count + 1 < count($argList) && is_integer($argList[$count+1])) { + $count++; + $sortArgs[] = &$argList[$count]; + + if ($count + 1 < count($argList) && is_integer($argList[$count+1])) { + $count++; + $sortArgs[] = &$argList[$count]; + } else { + if ($argList[$count] == SORT_ASC || $argList[$count] == SORT_DESC) { + $sortArgs[] = &$sortReg; + } else { + $sortArgs[] = &$sortAsc; + } + } + } else { + $sortArgs[] = &$sortAsc; + $sortArgs[] = &$sortReg; + } + } + + // Sort by id's if values are equal + $sortArgs[] = &$ids; + $sortArgs[] = &$sortAsc; + $sortArgs[] = &$sortNum; + + // Array to be sorted + $sortArgs[] = &$hits; + + // Do sort + call_user_func_array('array_multisort', $sortArgs); + } + + return $hits; + } + + + /** + * Returns a list of all unique field names that exist in this index. + * + * @param boolean $indexed + * @return array + */ + public function getFieldNames($indexed = false) + { + $result = array(); + foreach( $this->_segmentInfos as $segmentInfo ) { + $result = array_merge($result, $segmentInfo->getFields($indexed)); + } + return $result; + } + + + /** + * Returns a Zend_Search_Lucene_Document object for the document + * number $id in this index. + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @return Zend_Search_Lucene_Document + * @throws Zend_Search_Lucene_Exception Exception is thrown if $id is out of the range + */ + public function getDocument($id) + { + if ($id instanceof Zend_Search_Lucene_Search_QueryHit) { + /* @var $id Zend_Search_Lucene_Search_QueryHit */ + $id = $id->id; + } + + if ($id >= $this->_docCount) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document id is out of the range.'); + } + + $segmentStartId = 0; + foreach ($this->_segmentInfos as $segmentInfo) { + if ($segmentStartId + $segmentInfo->count() > $id) { + break; + } + + $segmentStartId += $segmentInfo->count(); + } + + $fdxFile = $segmentInfo->openCompoundFile('.fdx'); + $fdxFile->seek(($id-$segmentStartId)*8, SEEK_CUR); + $fieldValuesPosition = $fdxFile->readLong(); + + $fdtFile = $segmentInfo->openCompoundFile('.fdt'); + $fdtFile->seek($fieldValuesPosition, SEEK_CUR); + $fieldCount = $fdtFile->readVInt(); + + $doc = new Zend_Search_Lucene_Document(); + for ($count = 0; $count < $fieldCount; $count++) { + $fieldNum = $fdtFile->readVInt(); + $bits = $fdtFile->readByte(); + + $fieldInfo = $segmentInfo->getField($fieldNum); + + if (!($bits & 2)) { // Text data + $field = new Zend_Search_Lucene_Field($fieldInfo->name, + $fdtFile->readString(), + 'UTF-8', + true, + $fieldInfo->isIndexed, + $bits & 1 ); + } else { // Binary data + $field = new Zend_Search_Lucene_Field($fieldInfo->name, + $fdtFile->readBinary(), + '', + true, + $fieldInfo->isIndexed, + $bits & 1, + true ); + } + + $doc->addField($field); + } + + return $doc; + } + + + /** + * Returns true if index contain documents with specified term. + * + * Is used for query optimization. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return boolean + */ + public function hasTerm(Zend_Search_Lucene_Index_Term $term) + { + foreach ($this->_segmentInfos as $segInfo) { + if ($segInfo->getTermInfo($term) !== null) { + return true; + } + } + + return false; + } + + /** + * Returns IDs of all documents containing term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termDocs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + $subResults = array(); + $segmentStartDocId = 0; + + foreach ($this->_segmentInfos as $segmentInfo) { + $subResults[] = $segmentInfo->termDocs($term, $segmentStartDocId, $docsFilter); + + $segmentStartDocId += $segmentInfo->count(); + } + + if (count($subResults) == 0) { + return array(); + } else if (count($subResults) == 1) { + // Index is optimized (only one segment) + // Do not perform array reindexing + return reset($subResults); + } else { + $result = call_user_func_array('array_merge', $subResults); + } + + return $result; + } + + /** + * Returns documents filter for all documents containing term. + * + * It performs the same operation as termDocs, but return result as + * Zend_Search_Lucene_Index_DocsFilter object + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return Zend_Search_Lucene_Index_DocsFilter + */ + public function termDocsFilter(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + $segmentStartDocId = 0; + $result = new Zend_Search_Lucene_Index_DocsFilter(); + + foreach ($this->_segmentInfos as $segmentInfo) { + $subResults[] = $segmentInfo->termDocs($term, $segmentStartDocId, $docsFilter); + + $segmentStartDocId += $segmentInfo->count(); + } + + if (count($subResults) == 0) { + return array(); + } else if (count($subResults) == 1) { + // Index is optimized (only one segment) + // Do not perform array reindexing + return reset($subResults); + } else { + $result = call_user_func_array('array_merge', $subResults); + } + + return $result; + } + + + /** + * Returns an array of all term freqs. + * Result array structure: array(docId => freq, ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return integer + */ + public function termFreqs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + $result = array(); + $segmentStartDocId = 0; + foreach ($this->_segmentInfos as $segmentInfo) { + $result += $segmentInfo->termFreqs($term, $segmentStartDocId, $docsFilter); + + $segmentStartDocId += $segmentInfo->count(); + } + + return $result; + } + + /** + * Returns an array of all term positions in the documents. + * Result array structure: array(docId => array(pos1, pos2, ...), ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termPositions(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + $result = array(); + $segmentStartDocId = 0; + foreach ($this->_segmentInfos as $segmentInfo) { + $result += $segmentInfo->termPositions($term, $segmentStartDocId, $docsFilter); + + $segmentStartDocId += $segmentInfo->count(); + } + + return $result; + } + + + /** + * Returns the number of documents in this index containing the $term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return integer + */ + public function docFreq(Zend_Search_Lucene_Index_Term $term) + { + $result = 0; + foreach ($this->_segmentInfos as $segInfo) { + $termInfo = $segInfo->getTermInfo($term); + if ($termInfo !== null) { + $result += $termInfo->docFreq; + } + } + + return $result; + } + + + /** + * Retrive similarity used by index reader + * + * @return Zend_Search_Lucene_Search_Similarity + */ + public function getSimilarity() + { + /** Zend_Search_Lucene_Search_Similarity */ + require_once 'Zend/Search/Lucene/Search/Similarity.php'; + + return Zend_Search_Lucene_Search_Similarity::getDefault(); + } + + + /** + * Returns a normalization factor for "field, document" pair. + * + * @param integer $id + * @param string $fieldName + * @return float + */ + public function norm($id, $fieldName) + { + if ($id >= $this->_docCount) { + return null; + } + + $segmentStartId = 0; + foreach ($this->_segmentInfos as $segInfo) { + if ($segmentStartId + $segInfo->count() > $id) { + break; + } + + $segmentStartId += $segInfo->count(); + } + + if ($segInfo->isDeleted($id - $segmentStartId)) { + return 0; + } + + return $segInfo->norm($id - $segmentStartId, $fieldName); + } + + /** + * Returns true if any documents have been deleted from this index. + * + * @return boolean + */ + public function hasDeletions() + { + foreach ($this->_segmentInfos as $segmentInfo) { + if ($segmentInfo->hasDeletions()) { + return true; + } + } + + return false; + } + + + /** + * Deletes a document from the index. + * $id is an internal document id + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @throws Zend_Search_Lucene_Exception + */ + public function delete($id) + { + if ($id instanceof Zend_Search_Lucene_Search_QueryHit) { + /* @var $id Zend_Search_Lucene_Search_QueryHit */ + $id = $id->id; + } + + if ($id >= $this->_docCount) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document id is out of the range.'); + } + + $segmentStartId = 0; + foreach ($this->_segmentInfos as $segmentInfo) { + if ($segmentStartId + $segmentInfo->count() > $id) { + break; + } + + $segmentStartId += $segmentInfo->count(); + } + $segmentInfo->delete($id - $segmentStartId); + + $this->_hasChanges = true; + } + + + + /** + * Adds a document to this index. + * + * @param Zend_Search_Lucene_Document $document + */ + public function addDocument(Zend_Search_Lucene_Document $document) + { + $this->_getIndexWriter()->addDocument($document); + $this->_docCount++; + + $this->_hasChanges = true; + } + + + /** + * Update document counter + */ + private function _updateDocCount() + { + $this->_docCount = 0; + foreach ($this->_segmentInfos as $segInfo) { + $this->_docCount += $segInfo->count(); + } + } + + /** + * Commit changes resulting from delete() or undeleteAll() operations. + * + * @todo undeleteAll processing. + */ + public function commit() + { + if ($this->_hasChanges) { + $this->_getIndexWriter()->commit(); + + $this->_updateDocCount(); + + $this->_hasChanges = false; + } + } + + + /** + * Optimize index. + * + * Merges all segments into one + */ + public function optimize() + { + // Commit changes if any changes have been made + $this->commit(); + + if (count($this->_segmentInfos) > 1 || $this->hasDeletions()) { + $this->_getIndexWriter()->optimize(); + $this->_updateDocCount(); + } + } + + + /** + * Returns an array of all terms in this index. + * + * @return array + */ + public function terms() + { + $result = array(); + + /** Zend_Search_Lucene_Index_TermsPriorityQueue */ + require_once 'Zend/Search/Lucene/Index/TermsPriorityQueue.php'; + + $segmentInfoQueue = new Zend_Search_Lucene_Index_TermsPriorityQueue(); + + foreach ($this->_segmentInfos as $segmentInfo) { + $segmentInfo->resetTermsStream(); + + // Skip "empty" segments + if ($segmentInfo->currentTerm() !== null) { + $segmentInfoQueue->put($segmentInfo); + } + } + + while (($segmentInfo = $segmentInfoQueue->pop()) !== null) { + if ($segmentInfoQueue->top() === null || + $segmentInfoQueue->top()->currentTerm()->key() != + $segmentInfo->currentTerm()->key()) { + // We got new term + $result[] = $segmentInfo->currentTerm(); + } + + if ($segmentInfo->nextTerm() !== null) { + // Put segment back into the priority queue + $segmentInfoQueue->put($segmentInfo); + } + } + + return $result; + } + + + /** + * Terms stream priority queue object + * + * @var Zend_Search_Lucene_TermStreamsPriorityQueue + */ + private $_termsStream = null; + + /** + * Reset terms stream. + */ + public function resetTermsStream() + { + if ($this->_termsStream === null) { + /** Zend_Search_Lucene_TermStreamsPriorityQueue */ + require_once 'Zend/Search/Lucene/TermStreamsPriorityQueue.php'; + + $this->_termsStream = new Zend_Search_Lucene_TermStreamsPriorityQueue($this->_segmentInfos); + } else { + $this->_termsStream->resetTermsStream(); + } + } + + /** + * Skip terms stream up to the specified term preffix. + * + * Prefix contains fully specified field info and portion of searched term + * + * @param Zend_Search_Lucene_Index_Term $prefix + */ + public function skipTo(Zend_Search_Lucene_Index_Term $prefix) + { + $this->_termsStream->skipTo($prefix); + } + + /** + * Scans terms dictionary and returns next term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function nextTerm() + { + return $this->_termsStream->nextTerm(); + } + + /** + * Returns term in current position + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function currentTerm() + { + return $this->_termsStream->currentTerm(); + } + + /** + * Close terms stream + * + * Should be used for resources clean up if stream is not read up to the end + */ + public function closeTermsStream() + { + $this->_termsStream->closeTermsStream(); + $this->_termsStream = null; + } + + + /************************************************************************* + @todo UNIMPLEMENTED + *************************************************************************/ + /** + * Undeletes all documents currently marked as deleted in this index. + * + * @todo Implementation + */ + public function undeleteAll() + {} +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer.php new file mode 100644 index 00000000000..3d13adb9b77 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer.php @@ -0,0 +1,175 @@ +setInput($data, $encoding); + + $tokenList = array(); + while (($nextToken = $this->nextToken()) !== null) { + $tokenList[] = $nextToken; + } + + return $tokenList; + } + + + /** + * Tokenization stream API + * Set input + * + * @param string $data + */ + public function setInput($data, $encoding = '') + { + $this->_input = $data; + $this->_encoding = $encoding; + $this->reset(); + } + + /** + * Reset token stream + */ + abstract public function reset(); + + /** + * Tokenization stream API + * Get next token + * Returns null at the end of stream + * + * Tokens are returned in UTF-8 (internal Zend_Search_Lucene encoding) + * + * @return Zend_Search_Lucene_Analysis_Token|null + */ + abstract public function nextToken(); + + + + + /** + * Set the default Analyzer implementation used by indexing code. + * + * @param Zend_Search_Lucene_Analysis_Analyzer $similarity + */ + public static function setDefault(Zend_Search_Lucene_Analysis_Analyzer $analyzer) + { + self::$_defaultImpl = $analyzer; + } + + + /** + * Return the default Analyzer implementation used by indexing code. + * + * @return Zend_Search_Lucene_Analysis_Analyzer + */ + public static function getDefault() + { + /** Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive */ + require_once 'Zend/Search/Lucene/Analysis/Analyzer/Common/Text/CaseInsensitive.php'; + + if (!self::$_defaultImpl instanceof Zend_Search_Lucene_Analysis_Analyzer) { + self::$_defaultImpl = new Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive(); + } + + return self::$_defaultImpl; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common.php new file mode 100644 index 00000000000..1aee4fb13a8 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common.php @@ -0,0 +1,94 @@ +_filters[] = $filter; + } + + /** + * Apply filters to the token. Can return null when the token was removed. + * + * @param Zend_Search_Lucene_Analysis_Token $token + * @return Zend_Search_Lucene_Analysis_Token + */ + public function normalize(Zend_Search_Lucene_Analysis_Token $token) + { + foreach ($this->_filters as $filter) { + $token = $filter->normalize($token); + + // resulting token can be null if the filter removes it + if ($token === null) { + return null; + } + } + + return $token; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text.php new file mode 100644 index 00000000000..58f5a6ee7c9 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text.php @@ -0,0 +1,96 @@ +_position = 0; + + if ($this->_input === null) { + return; + } + + // convert input into ascii + if (PHP_OS != 'AIX') { + $this->_input = iconv($this->_encoding, 'ASCII//TRANSLIT', $this->_input); + } + $this->_encoding = 'ASCII'; + } + + /** + * Tokenization stream API + * Get next token + * Returns null at the end of stream + * + * @return Zend_Search_Lucene_Analysis_Token|null + */ + public function nextToken() + { + if ($this->_input === null) { + return null; + } + + + do { + if (! preg_match('/[a-zA-Z]+/', $this->_input, $match, PREG_OFFSET_CAPTURE, $this->_position)) { + // It covers both cases a) there are no matches (preg_match(...) === 0) + // b) error occured (preg_match(...) === FALSE) + return null; + } + + $str = $match[0][0]; + $pos = $match[0][1]; + $endpos = $pos + strlen($str); + + $this->_position = $endpos; + + $token = $this->normalize(new Zend_Search_Lucene_Analysis_Token($str, $pos, $endpos)); + } while ($token === null); // try again if token is skipped + + return $token; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text/CaseInsensitive.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text/CaseInsensitive.php new file mode 100644 index 00000000000..988f49e384b --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Text/CaseInsensitive.php @@ -0,0 +1,47 @@ +addFilter(new Zend_Search_Lucene_Analysis_TokenFilter_LowerCase()); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum.php new file mode 100644 index 00000000000..59233f60774 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum.php @@ -0,0 +1,95 @@ +_position = 0; + + if ($this->_input === null) { + return; + } + + // convert input into ascii + if (PHP_OS != 'AIX') { + $this->_input = iconv($this->_encoding, 'ASCII//TRANSLIT', $this->_input); + } + $this->_encoding = 'ASCII'; + } + + /** + * Tokenization stream API + * Get next token + * Returns null at the end of stream + * + * @return Zend_Search_Lucene_Analysis_Token|null + */ + public function nextToken() + { + if ($this->_input === null) { + return null; + } + + do { + if (! preg_match('/[a-zA-Z0-9]+/', $this->_input, $match, PREG_OFFSET_CAPTURE, $this->_position)) { + // It covers both cases a) there are no matches (preg_match(...) === 0) + // b) error occured (preg_match(...) === FALSE) + return null; + } + + $str = $match[0][0]; + $pos = $match[0][1]; + $endpos = $pos + strlen($str); + + $this->_position = $endpos; + + $token = $this->normalize(new Zend_Search_Lucene_Analysis_Token($str, $pos, $endpos)); + } while ($token === null); // try again if token is skipped + + return $token; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum/CaseInsensitive.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum/CaseInsensitive.php new file mode 100644 index 00000000000..2a52a8c7535 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/TextNum/CaseInsensitive.php @@ -0,0 +1,47 @@ +addFilter(new Zend_Search_Lucene_Analysis_TokenFilter_LowerCase()); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8.php new file mode 100644 index 00000000000..06382624ac3 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8.php @@ -0,0 +1,126 @@ +_position = 0; + $this->_bytePosition = 0; + + // convert input into UTF-8 + if (strcasecmp($this->_encoding, 'utf8' ) != 0 && + strcasecmp($this->_encoding, 'utf-8') != 0 ) { + $this->_input = iconv($this->_encoding, 'UTF-8', $this->_input); + $this->_encoding = 'UTF-8'; + } + } + + /** + * Tokenization stream API + * Get next token + * Returns null at the end of stream + * + * @return Zend_Search_Lucene_Analysis_Token|null + */ + public function nextToken() + { + if ($this->_input === null) { + return null; + } + + do { + if (! preg_match('/[\p{L}]+/u', $this->_input, $match, PREG_OFFSET_CAPTURE, $this->_bytePosition)) { + // It covers both cases a) there are no matches (preg_match(...) === 0) + // b) error occured (preg_match(...) === FALSE) + return null; + } + + // matched string + $matchedWord = $match[0][0]; + + // binary position of the matched word in the input stream + $binStartPos = $match[0][1]; + + // character position of the matched word in the input stream + $startPos = $this->_position + + iconv_strlen(substr($this->_input, + $this->_bytePosition, + $binStartPos - $this->_bytePosition), + 'UTF-8'); + // character postion of the end of matched word in the input stream + $endPos = $startPos + iconv_strlen($matchedWord, 'UTF-8'); + + $this->_bytePosition = $binStartPos + strlen($matchedWord); + $this->_position = $endPos; + + $token = $this->normalize(new Zend_Search_Lucene_Analysis_Token($matchedWord, $startPos, $endPos)); + } while ($token === null); // try again if token is skipped + + return $token; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8/CaseInsensitive.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8/CaseInsensitive.php new file mode 100644 index 00000000000..657a5e996fe --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8/CaseInsensitive.php @@ -0,0 +1,49 @@ +addFilter(new Zend_Search_Lucene_Analysis_TokenFilter_LowerCaseUtf8()); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num.php new file mode 100644 index 00000000000..18267ac28c4 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num.php @@ -0,0 +1,126 @@ +_position = 0; + $this->_bytePosition = 0; + + // convert input into UTF-8 + if (strcasecmp($this->_encoding, 'utf8' ) != 0 && + strcasecmp($this->_encoding, 'utf-8') != 0 ) { + $this->_input = iconv($this->_encoding, 'UTF-8', $this->_input); + $this->_encoding = 'UTF-8'; + } + } + + /** + * Tokenization stream API + * Get next token + * Returns null at the end of stream + * + * @return Zend_Search_Lucene_Analysis_Token|null + */ + public function nextToken() + { + if ($this->_input === null) { + return null; + } + + do { + if (! preg_match('/[\p{L}\p{N}]+/u', $this->_input, $match, PREG_OFFSET_CAPTURE, $this->_bytePosition)) { + // It covers both cases a) there are no matches (preg_match(...) === 0) + // b) error occured (preg_match(...) === FALSE) + return null; + } + + // matched string + $matchedWord = $match[0][0]; + + // binary position of the matched word in the input stream + $binStartPos = $match[0][1]; + + // character position of the matched word in the input stream + $startPos = $this->_position + + iconv_strlen(substr($this->_input, + $this->_bytePosition, + $binStartPos - $this->_bytePosition), + 'UTF-8'); + // character postion of the end of matched word in the input stream + $endPos = $startPos + iconv_strlen($matchedWord, 'UTF-8'); + + $this->_bytePosition = $binStartPos + strlen($matchedWord); + $this->_position = $endPos; + + $token = $this->normalize(new Zend_Search_Lucene_Analysis_Token($matchedWord, $startPos, $endPos)); + } while ($token === null); // try again if token is skipped + + return $token; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num/CaseInsensitive.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num/CaseInsensitive.php new file mode 100644 index 00000000000..72883d2c066 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Analyzer/Common/Utf8Num/CaseInsensitive.php @@ -0,0 +1,49 @@ +addFilter(new Zend_Search_Lucene_Analysis_TokenFilter_LowerCaseUtf8()); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Token.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Token.php new file mode 100644 index 00000000000..a3748b9a846 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/Token.php @@ -0,0 +1,166 @@ +_termText = $text; + $this->_startOffset = $start; + $this->_endOffset = $end; + + $this->_positionIncrement = 1; + } + + + /** + * positionIncrement setter + * + * @param integer $positionIncrement + */ + public function setPositionIncrement($positionIncrement) + { + $this->_positionIncrement = $positionIncrement; + } + + /** + * Returns the position increment of this Token. + * + * @return integer + */ + public function getPositionIncrement() + { + return $this->_positionIncrement; + } + + /** + * Returns the Token's term text. + * + * @return string + */ + public function getTermText() + { + return $this->_termText; + } + + /** + * Sets the Token's term text. + * + * @param string $text + * @return this + */ + public function setTermText($text) + { + $this->_termText = $text; + return $this; + } + + /** + * Returns this Token's starting offset, the position of the first character + * corresponding to this token in the source text. + * + * Note: + * The difference between getEndOffset() and getStartOffset() may not be equal + * to strlen(Zend_Search_Lucene_Analysis_Token::getTermText()), as the term text may have been altered + * by a stemmer or some other filter. + * + * @return integer + */ + public function getStartOffset() + { + return $this->_startOffset; + } + + /** + * Returns this Token's ending offset, one greater than the position of the + * last character corresponding to this token in the source text. + * + * @return integer + */ + public function getEndOffset() + { + return $this->_endOffset; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter.php new file mode 100644 index 00000000000..82d3a59f6c8 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter.php @@ -0,0 +1,47 @@ +setTermText(strtolower($srcToken->getTermText())); + return $srcToken; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/LowerCaseUtf8.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/LowerCaseUtf8.php new file mode 100644 index 00000000000..4f40cb8ef08 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/LowerCaseUtf8.php @@ -0,0 +1,64 @@ +setTermText(mb_strtolower($srcToken->getTermText(), 'UTF-8')); + return $srcToken; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/ShortWords.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/ShortWords.php new file mode 100644 index 00000000000..0ecbb7a9865 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/ShortWords.php @@ -0,0 +1,69 @@ +length = $length; + } + + /** + * Normalize Token or remove it (if null is returned) + * + * @param Zend_Search_Lucene_Analysis_Token $srcToken + * @return Zend_Search_Lucene_Analysis_Token + */ + public function normalize(Zend_Search_Lucene_Analysis_Token $srcToken) { + if (strlen($srcToken->getTermText()) < $this->length) { + return null; + } else { + return $srcToken; + } + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/StopWords.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/StopWords.php new file mode 100644 index 00000000000..f1185259ce9 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Analysis/TokenFilter/StopWords.php @@ -0,0 +1,101 @@ + 1, 'an' => '1'); + * + * We do recommend to provide all words in lowercase and concatenate this class after the lowercase filter. + * + * @category Zend + * @package Zend_Search_Lucene + * @subpackage Analysis + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ + +class Zend_Search_Lucene_Analysis_TokenFilter_StopWords extends Zend_Search_Lucene_Analysis_TokenFilter +{ + /** + * Stop Words + * @var array + */ + private $_stopSet; + + /** + * Constructs new instance of this filter. + * + * @param array $stopwords array (set) of words that will be filtered out + */ + public function __construct($stopwords = array()) { + $this->_stopSet = array_flip($stopwords); + } + + /** + * Normalize Token or remove it (if null is returned) + * + * @param Zend_Search_Lucene_Analysis_Token $srcToken + * @return Zend_Search_Lucene_Analysis_Token + */ + public function normalize(Zend_Search_Lucene_Analysis_Token $srcToken) { + if (array_key_exists($srcToken->getTermText(), $this->_stopSet)) { + return null; + } else { + return $srcToken; + } + } + + /** + * Fills stopwords set from a text file. Each line contains one stopword, lines with '#' in the first + * column are ignored (as comments). + * + * You can call this method one or more times. New stopwords are always added to current set. + * + * @param string $filepath full path for text file with stopwords + * @throws Zend_Search_Exception When the file doesn`t exists or is not readable. + */ + public function loadFromFile($filepath = null) { + if (! $filepath || ! file_exists($filepath)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('You have to provide valid file path'); + } + $fd = fopen($filepath, "r"); + if (! $fd) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Cannot open file ' . $filepath); + } + while (!feof ($fd)) { + $buffer = trim(fgets($fd)); + if (strlen($buffer) > 0 && $buffer[0] != '#') { + $this->_stopSet[$buffer] = 1; + } + } + if (!fclose($fd)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Cannot close file ' . $filepath); + } + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Document.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document.php new file mode 100644 index 00000000000..1dc243b6fca --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document.php @@ -0,0 +1,131 @@ +getFieldValue($offset); + } + + + /** + * Add a field object to this document. + * + * @param Zend_Search_Lucene_Field $field + * @return Zend_Search_Lucene_Document + */ + public function addField(Zend_Search_Lucene_Field $field) + { + $this->_fields[$field->name] = $field; + + return $this; + } + + + /** + * Return an array with the names of the fields in this document. + * + * @return array + */ + public function getFieldNames() + { + return array_keys($this->_fields); + } + + + /** + * Returns Zend_Search_Lucene_Field object for a named field in this document. + * + * @param string $fieldName + * @return Zend_Search_Lucene_Field + */ + public function getField($fieldName) + { + if (!array_key_exists($fieldName, $this->_fields)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception("Field name \"$fieldName\" not found in document."); + } + return $this->_fields[$fieldName]; + } + + + /** + * Returns the string value of a named field in this document. + * + * @see __get() + * @return string + */ + public function getFieldValue($fieldName) + { + return $this->getField($fieldName)->value; + } + + /** + * Returns the string value of a named field in UTF-8 encoding. + * + * @see __get() + * @return string + */ + public function getFieldUtf8Value($fieldName) + { + return $this->getField($fieldName)->getUtf8Value(); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Docx.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Docx.php new file mode 100644 index 00000000000..ff94154cef3 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Docx.php @@ -0,0 +1,175 @@ +open($fileName); + + // Read relations and search for officeDocument + $relationsXml = $package->getFromName('_rels/.rels'); + if ($relationsXml === false) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Invalid archive or corrupted .docx file.'); + } + $relations = simplexml_load_string($relationsXml); + foreach($relations->Relationship as $rel) { + if ($rel ["Type"] == Zend_Search_Lucene_Document_OpenXml::SCHEMA_OFFICEDOCUMENT) { + // Found office document! Read in contents... + //echo "Loading name ". $this->absoluteZipPath(dirname($rel['Target']) + // . '/' + // . basename($rel['Target']))."\n"; + /*print_r($package->getFromName( + $this->absoluteZipPath(dirname($rel['Target']) + . '/' + . basename($rel['Target'])) + )); + echo "\n";*/ + libxml_use_internal_errors(true); + $dom = new DOMDocument("1.0", "UTF-8"); + $dom->strictErrorChecking = false; + $dom->validateOnParse = false; + $dom->recover = true; + $dom->loadXML($package->getFromName( + $this->absoluteZipPath(dirname($rel['Target']) + . '/' + . basename($rel['Target'])) + )); + $contents = simplexml_import_dom($dom); + + libxml_clear_errors(); + libxml_use_internal_errors(false); + + /*$contents = simplexml_load_string($package->getFromName( + $this->absoluteZipPath(dirname($rel['Target']) + . '/' + . basename($rel['Target'])) + ));*/ + + $contents->registerXPathNamespace('w', Zend_Search_Lucene_Document_Docx::SCHEMA_WORDPROCESSINGML); + $paragraphs = $contents->xpath('//w:body/w:p'); + + foreach ($paragraphs as $paragraph) { + $runs = $paragraph->xpath('.//w:r/*[name() = "w:t" or name() = "w:br"]'); + + if ($runs === false) { + // Paragraph doesn't contain any text or breaks + continue; + } + + foreach ($runs as $run) { + if ($run->getName() == 'br') { + // Break element + $documentBody[] = ' '; + } else { + $documentBody[] = (string)$run; + } + } + + // Add space after each paragraph. So they are not bound together. + $documentBody[] = ' '; + } + + break; + } + } + + // Read core properties + $coreProperties = $this->extractMetaData($package); + + // Close file + $package->close(); + + // Store filename + $this->addField(Zend_Search_Lucene_Field::Text('filename', $fileName, 'UTF-8')); + + // Store contents + if ($storeContent) { + $this->addField(Zend_Search_Lucene_Field::Text('contents', implode('', $documentBody), 'UTF-8')); + } else { + $this->addField(Zend_Search_Lucene_Field::UnStored('contents', implode('', $documentBody), 'UTF-8')); + } + + // Store meta data properties + foreach ($coreProperties as $key => $value) { + $this->addField(Zend_Search_Lucene_Field::Text($key, $value, 'UTF-8')); + } + + // Store title (if not present in meta data) + if (! isset($coreProperties['title'])) { + $this->addField(Zend_Search_Lucene_Field::Text('title', $fileName, 'UTF-8')); + } + } + + /** + * Load Docx document from a file + * + * @param string $fileName + * @param boolean $storeContent + * @return Zend_Search_Lucene_Document_Docx + * @throws Zend_Search_Lucene_Document_Exception + */ + public static function loadDocxFile($fileName, $storeContent = false) { + if (!is_readable($fileName)) { + require_once 'Zend/Search/Lucene/Document/Exception.php'; + throw new Zend_Search_Lucene_Document_Exception('Provided file \'' . $fileName . '\' is not readable.'); + } + + return new Zend_Search_Lucene_Document_Docx($fileName, $storeContent); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Exception.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Exception.php new file mode 100644 index 00000000000..8205f2e577f --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Exception.php @@ -0,0 +1,37 @@ +_doc = new DOMDocument(); + $this->_doc->substituteEntities = true; + + if ($isFile) { + $htmlData = file_get_contents($data); + } else { + $htmlData = $data; + } + @$this->_doc->loadHTML($htmlData); + + if ($this->_doc->encoding === null) { + // Document encoding is not recognized + + /** @todo improve HTML vs HTML fragment recognition */ + if (preg_match('/]*>/i', $htmlData, $matches, PREG_OFFSET_CAPTURE)) { + // It's an HTML document + // Add additional HEAD section and recognize document + $htmlTagOffset = $matches[0][1] + strlen($matches[0][0]); + + @$this->_doc->loadHTML(iconv($defaultEncoding, 'UTF-8//IGNORE', substr($htmlData, 0, $htmlTagOffset)) + . '' + . iconv($defaultEncoding, 'UTF-8//IGNORE', substr($htmlData, $htmlTagOffset))); + + // Remove additional HEAD section + $xpath = new DOMXPath($this->_doc); + $head = $xpath->query('/html/head')->item(0); + $head->parentNode->removeChild($head); + } else { + // It's an HTML fragment + @$this->_doc->loadHTML('' + . iconv($defaultEncoding, 'UTF-8//IGNORE', $htmlData) + . ''); + } + + } + /** @todo Add correction of wrong HTML encoding recognition processing + * The case is: + * Content-type HTTP-EQUIV meta tag is presented, but ISO-8859-5 encoding is actually used, + * even $this->_doc->encoding demonstrates another recognized encoding + */ + + $xpath = new DOMXPath($this->_doc); + + $docTitle = ''; + $titleNodes = $xpath->query('/html/head/title'); + foreach ($titleNodes as $titleNode) { + // title should always have only one entry, but we process all nodeset entries + $docTitle .= $titleNode->nodeValue . ' '; + } + $this->addField(Zend_Search_Lucene_Field::Text('title', $docTitle, 'UTF-8')); + + $metaNodes = $xpath->query('/html/head/meta[@name]'); + foreach ($metaNodes as $metaNode) { + $this->addField(Zend_Search_Lucene_Field::Text($metaNode->getAttribute('name'), + $metaNode->getAttribute('content'), + 'UTF-8')); + } + + $docBody = ''; + $bodyNodes = $xpath->query('/html/body'); + foreach ($bodyNodes as $bodyNode) { + // body should always have only one entry, but we process all nodeset entries + $this->_retrieveNodeText($bodyNode, $docBody); + } + if ($storeContent) { + $this->addField(Zend_Search_Lucene_Field::Text('contents', $docBody, 'UTF-8')); + } else { + $this->addField(Zend_Search_Lucene_Field::UnStored('contents', $docBody, 'UTF-8')); + } + + $linkNodes = $this->_doc->getElementsByTagName('a'); + foreach ($linkNodes as $linkNode) { + if (($href = $linkNode->getAttribute('href')) != '' && + (!self::$_excludeNoFollowLinks || strtolower($linkNode->getAttribute('rel')) != 'nofollow' ) + ) { + $this->_links[] = $href; + } + } + $linkNodes = $this->_doc->getElementsByTagName('area'); + foreach ($linkNodes as $linkNode) { + if (($href = $linkNode->getAttribute('href')) != '' && + (!self::$_excludeNoFollowLinks || strtolower($linkNode->getAttribute('rel')) != 'nofollow' ) + ) { + $this->_links[] = $href; + } + } + $this->_links = array_unique($this->_links); + + $linkNodes = $xpath->query('/html/head/link'); + foreach ($linkNodes as $linkNode) { + if (($href = $linkNode->getAttribute('href')) != '') { + $this->_headerLinks[] = $href; + } + } + $this->_headerLinks = array_unique($this->_headerLinks); + } + + /** + * Set exclude nofollow links flag + * + * @param boolean $newValue + */ + public static function setExcludeNoFollowLinks($newValue) + { + self::$_excludeNoFollowLinks = $newValue; + } + + /** + * Get exclude nofollow links flag + * + * @return boolean + */ + public static function getExcludeNoFollowLinks() + { + return self::$_excludeNoFollowLinks; + } + + /** + * Get node text + * + * We should exclude scripts, which may be not included into comment tags, CDATA sections, + * + * @param DOMNode $node + * @param string &$text + */ + private function _retrieveNodeText(DOMNode $node, &$text) + { + if ($node->nodeType == XML_TEXT_NODE) { + $text .= $node->nodeValue; + if(!in_array($node->parentNode->tagName, $this->_inlineTags)) { + $text .= ' '; + } + } else if ($node->nodeType == XML_ELEMENT_NODE && $node->nodeName != 'script') { + foreach ($node->childNodes as $childNode) { + $this->_retrieveNodeText($childNode, $text); + } + } + } + + /** + * Get document HREF links + * + * @return array + */ + public function getLinks() + { + return $this->_links; + } + + /** + * Get document header links + * + * @return array + */ + public function getHeaderLinks() + { + return $this->_headerLinks; + } + + /** + * Load HTML document from a string + * + * @param string $data + * @param boolean $storeContent + * @param string $defaultEncoding HTML encoding, is used if it's not specified using Content-type HTTP-EQUIV meta tag. + * @return Zend_Search_Lucene_Document_Html + */ + public static function loadHTML($data, $storeContent = false, $defaultEncoding = '') + { + return new Zend_Search_Lucene_Document_Html($data, false, $storeContent, $defaultEncoding); + } + + /** + * Load HTML document from a file + * + * @param string $file + * @param boolean $storeContent + * @param string $defaultEncoding HTML encoding, is used if it's not specified using Content-type HTTP-EQUIV meta tag. + * @return Zend_Search_Lucene_Document_Html + */ + public static function loadHTMLFile($file, $storeContent = false, $defaultEncoding = '') + { + return new Zend_Search_Lucene_Document_Html($file, true, $storeContent, $defaultEncoding); + } + + + /** + * Highlight text in text node + * + * @param DOMText $node + * @param array $wordsToHighlight + * @param callback $callback Callback method, used to transform (highlighting) text. + * @param array $params Array of additionall callback parameters (first non-optional parameter is a text to transform) + * @throws Zend_Search_Lucene_Exception + */ + protected function _highlightTextNode(DOMText $node, $wordsToHighlight, $callback, $params) + { + /** Zend_Search_Lucene_Analysis_Analyzer */ + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + + $analyzer = Zend_Search_Lucene_Analysis_Analyzer::getDefault(); + $analyzer->setInput($node->nodeValue, 'UTF-8'); + + $matchedTokens = array(); + + while (($token = $analyzer->nextToken()) !== null) { + if (isset($wordsToHighlight[$token->getTermText()])) { + $matchedTokens[] = $token; + } + } + + if (count($matchedTokens) == 0) { + return; + } + + $matchedTokens = array_reverse($matchedTokens); + + foreach ($matchedTokens as $token) { + // Cut text after matched token + $node->splitText($token->getEndOffset()); + + // Cut matched node + $matchedWordNode = $node->splitText($token->getStartOffset()); + + // Retrieve HTML string representation for highlihted word + $fullCallbackparamsList = $params; + array_unshift($fullCallbackparamsList, $matchedWordNode->nodeValue); + $highlightedWordNodeSetHtml = call_user_func_array($callback, $fullCallbackparamsList); + + // Transform HTML string to a DOM representation and automatically transform retrieved string + // into valid XHTML (It's automatically done by loadHTML() method) + $highlightedWordNodeSetDomDocument = new DOMDocument('1.0', 'UTF-8'); + $success = @$highlightedWordNodeSetDomDocument-> + loadHTML('' + . $highlightedWordNodeSetHtml + . ''); + if (!$success) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception("Error occured while loading highlighted text fragment: '$highlightedWordNodeSetHtml'."); + } + $highlightedWordNodeSetXpath = new DOMXPath($highlightedWordNodeSetDomDocument); + $highlightedWordNodeSet = $highlightedWordNodeSetXpath->query('/html/body')->item(0)->childNodes; + + for ($count = 0; $count < $highlightedWordNodeSet->length; $count++) { + $nodeToImport = $highlightedWordNodeSet->item($count); + $node->parentNode->insertBefore($this->_doc->importNode($nodeToImport, true /* deep copy */), + $matchedWordNode); + } + + $node->parentNode->removeChild($matchedWordNode); + } + } + + + /** + * highlight words in content of the specified node + * + * @param DOMNode $contextNode + * @param array $wordsToHighlight + * @param callback $callback Callback method, used to transform (highlighting) text. + * @param array $params Array of additionall callback parameters (first non-optional parameter is a text to transform) + */ + protected function _highlightNodeRecursive(DOMNode $contextNode, $wordsToHighlight, $callback, $params) + { + $textNodes = array(); + + if (!$contextNode->hasChildNodes()) { + return; + } + + foreach ($contextNode->childNodes as $childNode) { + if ($childNode->nodeType == XML_TEXT_NODE) { + // process node later to leave childNodes structure untouched + $textNodes[] = $childNode; + } else { + // Process node if it's not a script node + if ($childNode->nodeName != 'script') { + $this->_highlightNodeRecursive($childNode, $wordsToHighlight, $callback, $params); + } + } + } + + foreach ($textNodes as $textNode) { + $this->_highlightTextNode($textNode, $wordsToHighlight, $callback, $params); + } + } + + /** + * Standard callback method used to highlight words. + * + * @param string $stringToHighlight + * @return string + * @internal + */ + public function applyColour($stringToHighlight, $colour) + { + return '' . $stringToHighlight . ''; + } + + /** + * Highlight text with specified color + * + * @param string|array $words + * @param string $colour + * @return string + */ + public function highlight($words, $colour = '#66ffff') + { + return $this->highlightExtended($words, array($this, 'applyColour'), array($colour)); + } + + + + /** + * Highlight text using specified View helper or callback function. + * + * @param string|array $words Words to highlight. Words could be organized using the array or string. + * @param callback $callback Callback method, used to transform (highlighting) text. + * @param array $params Array of additionall callback parameters passed through into it + * (first non-optional parameter is an HTML fragment for highlighting) + * @return string + * @throws Zend_Search_Lucene_Exception + */ + public function highlightExtended($words, $callback, $params = array()) + { + /** Zend_Search_Lucene_Analysis_Analyzer */ + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + + if (!is_array($words)) { + $words = array($words); + } + + $wordsToHighlightList = array(); + $analyzer = Zend_Search_Lucene_Analysis_Analyzer::getDefault(); + foreach ($words as $wordString) { + $wordsToHighlightList[] = $analyzer->tokenize($wordString); + } + $wordsToHighlight = call_user_func_array('array_merge', $wordsToHighlightList); + + if (count($wordsToHighlight) == 0) { + return $this->_doc->saveHTML(); + } + + $wordsToHighlightFlipped = array(); + foreach ($wordsToHighlight as $id => $token) { + $wordsToHighlightFlipped[$token->getTermText()] = $id; + } + + if (!is_callable($callback)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('$viewHelper parameter must be a View Helper name, View Helper object or callback.'); + } + + $xpath = new DOMXPath($this->_doc); + + $matchedNodes = $xpath->query("/html/body"); + foreach ($matchedNodes as $matchedNode) { + $this->_highlightNodeRecursive($matchedNode, $wordsToHighlightFlipped, $callback, $params); + } + } + + + /** + * Get HTML + * + * @return string + */ + public function getHTML() + { + return $this->_doc->saveHTML(); + } + + /** + * Get HTML body + * + * @return string + */ + public function getHtmlBody() + { + $xpath = new DOMXPath($this->_doc); + $bodyNodes = $xpath->query('/html/body')->item(0)->childNodes; + + $outputFragments = array(); + for ($count = 0; $count < $bodyNodes->length; $count++) { + $outputFragments[] = $this->_doc->saveXML($bodyNodes->item($count)); + } + + return implode($outputFragments); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/OpenXml.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/OpenXml.php new file mode 100644 index 00000000000..89772f11e7e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/OpenXml.php @@ -0,0 +1,129 @@ +getFromName("_rels/.rels")); + foreach ($relations->Relationship as $rel) { + if ($rel["Type"] == Zend_Search_Lucene_Document_OpenXml::SCHEMA_COREPROPERTIES) { + // Found core properties! Read in contents... + $contents = simplexml_load_string( + $package->getFromName(dirname($rel["Target"]) . "/" . basename($rel["Target"])) + ); + + foreach ($contents->children(Zend_Search_Lucene_Document_OpenXml::SCHEMA_DUBLINCORE) as $child) { + $coreProperties[$child->getName()] = (string)$child; + } + foreach ($contents->children(Zend_Search_Lucene_Document_OpenXml::SCHEMA_COREPROPERTIES) as $child) { + $coreProperties[$child->getName()] = (string)$child; + } + foreach ($contents->children(Zend_Search_Lucene_Document_OpenXml::SCHEMA_DUBLINCORETERMS) as $child) { + $coreProperties[$child->getName()] = (string)$child; + } + } + } + + return $coreProperties; + } + + /** + * Determine absolute zip path + * + * @param string $path + * @return string + */ + protected function absoluteZipPath($path) { + $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); + $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); + $absolutes = array(); + foreach ($parts as $part) { + if ('.' == $part) continue; + if ('..' == $part) { + array_pop($absolutes); + } else { + $absolutes[] = $part; + } + } + return implode('/', $absolutes); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Pptx.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Pptx.php new file mode 100644 index 00000000000..95c089c7e75 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Pptx.php @@ -0,0 +1,200 @@ +open($fileName); + + // Read relations and search for officeDocument + $relationsXml = $package->getFromName('_rels/.rels'); + if ($relationsXml === false) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Invalid archive or corrupted .pptx file.'); + } + $relations = simplexml_load_string($relationsXml); + foreach ($relations->Relationship as $rel) { + if ($rel["Type"] == Zend_Search_Lucene_Document_OpenXml::SCHEMA_OFFICEDOCUMENT) { + // Found office document! Search for slides... + $slideRelations = simplexml_load_string($package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/_rels/" . basename($rel["Target"]) . ".rels")) ); + foreach ($slideRelations->Relationship as $slideRel) { + if ($slideRel["Type"] == Zend_Search_Lucene_Document_Pptx::SCHEMA_SLIDERELATION) { + // Found slide! + $slides[ str_replace( 'rId', '', (string)$slideRel["Id"] ) ] = simplexml_load_string( + $package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($slideRel["Target"]) . "/" . basename($slideRel["Target"])) ) + ); + + // Search for slide notes + $slideNotesRelations = simplexml_load_string($package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($slideRel["Target"]) . "/_rels/" . basename($slideRel["Target"]) . ".rels")) ); + foreach ($slideNotesRelations->Relationship as $slideNoteRel) { + if ($slideNoteRel["Type"] == Zend_Search_Lucene_Document_Pptx::SCHEMA_SLIDENOTESRELATION) { + // Found slide notes! + $slideNotes[ str_replace( 'rId', '', (string)$slideRel["Id"] ) ] = simplexml_load_string( + $package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($slideRel["Target"]) . "/" . dirname($slideNoteRel["Target"]) . "/" . basename($slideNoteRel["Target"])) ) + ); + + break; + } + } + } + } + + break; + } + } + + // Sort slides + ksort($slides); + ksort($slideNotes); + + // Extract contents from slides + foreach ($slides as $slideKey => $slide) { + // Register namespaces + $slide->registerXPathNamespace("p", Zend_Search_Lucene_Document_Pptx::SCHEMA_PRESENTATIONML); + $slide->registerXPathNamespace("a", Zend_Search_Lucene_Document_Pptx::SCHEMA_DRAWINGML); + + // Fetch all text + $textElements = $slide->xpath('//a:t'); + foreach ($textElements as $textElement) { + $documentBody[] = (string)$textElement; + } + + // Extract contents from slide notes + if (isset($slideNotes[$slideKey])) { + // Fetch slide note + $slideNote = $slideNotes[$slideKey]; + + // Register namespaces + $slideNote->registerXPathNamespace("p", Zend_Search_Lucene_Document_Pptx::SCHEMA_PRESENTATIONML); + $slideNote->registerXPathNamespace("a", Zend_Search_Lucene_Document_Pptx::SCHEMA_DRAWINGML); + + // Fetch all text + $textElements = $slideNote->xpath('//a:t'); + foreach ($textElements as $textElement) { + $documentBody[] = (string)$textElement; + } + } + } + + // Read core properties + $coreProperties = $this->extractMetaData($package); + + // Close file + $package->close(); + + // Store filename + $this->addField(Zend_Search_Lucene_Field::Text('filename', $fileName, 'UTF-8')); + + // Store contents + if ($storeContent) { + $this->addField(Zend_Search_Lucene_Field::Text('contents', implode(' ', $documentBody), 'UTF-8')); + } else { + $this->addField(Zend_Search_Lucene_Field::UnStored('contents', implode(' ', $documentBody), 'UTF-8')); + } + + // Store meta data properties + foreach ($coreProperties as $key => $value) + { + $this->addField(Zend_Search_Lucene_Field::Text($key, $value, 'UTF-8')); + } + + // Store title (if not present in meta data) + if (!isset($coreProperties['title'])) + { + $this->addField(Zend_Search_Lucene_Field::Text('title', $fileName, 'UTF-8')); + } + } + + /** + * Load Pptx document from a file + * + * @param string $fileName + * @param boolean $storeContent + * @return Zend_Search_Lucene_Document_Pptx + */ + public static function loadPptxFile($fileName, $storeContent = false) + { + return new Zend_Search_Lucene_Document_Pptx($fileName, $storeContent); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Xlsx.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Xlsx.php new file mode 100644 index 00000000000..f554229d81e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Document/Xlsx.php @@ -0,0 +1,263 @@ +open($fileName); + + // Read relations and search for officeDocument + $relationsXml = $package->getFromName('_rels/.rels'); + if ($relationsXml === false) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Invalid archive or corrupted .xlsx file.'); + } + $relations = simplexml_load_string($relationsXml); + foreach ($relations->Relationship as $rel) { + if ($rel["Type"] == Zend_Search_Lucene_Document_OpenXml::SCHEMA_OFFICEDOCUMENT) { + // Found office document! Read relations for workbook... + $workbookRelations = simplexml_load_string($package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/_rels/" . basename($rel["Target"]) . ".rels")) ); + $workbookRelations->registerXPathNamespace("rel", Zend_Search_Lucene_Document_OpenXml::SCHEMA_RELATIONSHIP); + + // Read shared strings + $sharedStringsPath = $workbookRelations->xpath("rel:Relationship[@Type='" . Zend_Search_Lucene_Document_Xlsx::SCHEMA_SHAREDSTRINGS . "']"); + $sharedStringsPath = (string)$sharedStringsPath[0]['Target']; + $xmlStrings = simplexml_load_string($package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/" . $sharedStringsPath)) ); + if (isset($xmlStrings) && isset($xmlStrings->si)) { + foreach ($xmlStrings->si as $val) { + if (isset($val->t)) { + $sharedStrings[] = (string)$val->t; + } elseif (isset($val->r)) { + $sharedStrings[] = $this->_parseRichText($val); + } + } + } + + // Loop relations for workbook and extract worksheets... + foreach ($workbookRelations->Relationship as $workbookRelation) { + if ($workbookRelation["Type"] == Zend_Search_Lucene_Document_Xlsx::SCHEMA_WORKSHEETRELATION) { + $worksheets[ str_replace( 'rId', '', (string)$workbookRelation["Id"]) ] = simplexml_load_string( + $package->getFromName( $this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($workbookRelation["Target"]) . "/" . basename($workbookRelation["Target"])) ) + ); + } + } + + break; + } + } + + // Sort worksheets + ksort($worksheets); + + // Extract contents from worksheets + foreach ($worksheets as $sheetKey => $worksheet) { + foreach ($worksheet->sheetData->row as $row) { + foreach ($row->c as $c) { + // Determine data type + $dataType = (string)$c["t"]; + switch ($dataType) { + case "s": + // Value is a shared string + if ((string)$c->v != '') { + $value = $sharedStrings[intval($c->v)]; + } else { + $value = ''; + } + + break; + + case "b": + // Value is boolean + $value = (string)$c->v; + if ($value == '0') { + $value = false; + } else if ($value == '1') { + $value = true; + } else { + $value = (bool)$c->v; + } + + break; + + case "inlineStr": + // Value is rich text inline + $value = $this->_parseRichText($c->is); + + break; + + case "e": + // Value is an error message + if ((string)$c->v != '') { + $value = (string)$c->v; + } else { + $value = ''; + } + + break; + + default: + // Value is a string + $value = (string)$c->v; + + // Check for numeric values + if (is_numeric($value) && $dataType != 's') { + if ($value == (int)$value) $value = (int)$value; + elseif ($value == (float)$value) $value = (float)$value; + elseif ($value == (double)$value) $value = (double)$value; + } + } + + $documentBody[] = $value; + } + } + } + + // Read core properties + $coreProperties = $this->extractMetaData($package); + + // Close file + $package->close(); + + // Store filename + $this->addField(Zend_Search_Lucene_Field::Text('filename', $fileName, 'UTF-8')); + + // Store contents + if ($storeContent) { + $this->addField(Zend_Search_Lucene_Field::Text('contents', implode(' ', $documentBody), 'UTF-8')); + } else { + $this->addField(Zend_Search_Lucene_Field::UnStored('contents', implode(' ', $documentBody), 'UTF-8')); + } + + // Store meta data properties + foreach ($coreProperties as $key => $value) + { + $this->addField(Zend_Search_Lucene_Field::Text($key, $value, 'UTF-8')); + } + + // Store title (if not present in meta data) + if (!isset($coreProperties['title'])) + { + $this->addField(Zend_Search_Lucene_Field::Text('title', $fileName, 'UTF-8')); + } + } + + /** + * Parse rich text XML + * + * @param SimpleXMLElement $is + * @return string + */ + private function _parseRichText($is = null) { + $value = array(); + + if (isset($is->t)) { + $value[] = (string)$is->t; + } else { + foreach ($is->r as $run) { + $value[] = (string)$run->t; + } + } + + return implode('', $value); + } + + /** + * Load Xlsx document from a file + * + * @param string $fileName + * @param boolean $storeContent + * @return Zend_Search_Lucene_Document_Xlsx + */ + public static function loadXlsxFile($fileName, $storeContent = false) + { + return new Zend_Search_Lucene_Document_Xlsx($fileName, $storeContent); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Exception.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Exception.php new file mode 100644 index 00000000000..5e7635b3ade --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Exception.php @@ -0,0 +1,37 @@ + targetState + * + * @var array + */ + private $_rules = array(); + + /** + * List of entry actions + * Each action executes when entering the state + * + * [state] => action + * + * @var array + */ + private $_entryActions = array(); + + /** + * List of exit actions + * Each action executes when exiting the state + * + * [state] => action + * + * @var array + */ + private $_exitActions = array(); + + /** + * List of input actions + * Each action executes when entering the state + * + * [state][input] => action + * + * @var array + */ + private $_inputActions = array(); + + /** + * List of input actions + * Each action executes when entering the state + * + * [state1][state2] => action + * + * @var array + */ + private $_transitionActions = array(); + + /** + * Finite State machine constructor + * + * $states is an array of integers or strings with a list of possible machine states + * constructor treats fist list element as a sturt state (assignes it to $_current state). + * It may be reassigned by setState() call. + * States list may be empty and can be extended later by addState() or addStates() calls. + * + * $inputAphabet is the same as $states, but represents input alphabet + * it also may be extended later by addInputSymbols() or addInputSymbol() calls. + * + * $rules parameter describes FSM transitions and has a structure: + * array( array(sourseState, input, targetState[, inputAction]), + * array(sourseState, input, targetState[, inputAction]), + * array(sourseState, input, targetState[, inputAction]), + * ... + * ) + * Rules also can be added later by addRules() and addRule() calls. + * + * FSM actions are very flexible and may be defined by addEntryAction(), addExitAction(), + * addInputAction() and addTransitionAction() calls. + * + * @param array $states + * @param array $inputAphabet + * @param array $rules + */ + public function __construct($states = array(), $inputAphabet = array(), $rules = array()) + { + $this->addStates($states); + $this->addInputSymbols($inputAphabet); + $this->addRules($rules); + } + + /** + * Add states to the state machine + * + * @param array $states + */ + public function addStates($states) + { + foreach ($states as $state) { + $this->addState($state); + } + } + + /** + * Add state to the state machine + * + * @param integer|string $state + */ + public function addState($state) + { + $this->_states[$state] = $state; + + if ($this->_currentState === null) { + $this->_currentState = $state; + } + } + + /** + * Set FSM state. + * No any action is invoked + * + * @param integer|string $state + * @throws Zend_Search_Exception + */ + public function setState($state) + { + if (!isset($this->_states[$state])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('State \'' . $state . '\' is not on of the possible FSM states.'); + } + + $this->_currentState = $state; + } + + /** + * Get FSM state. + * + * @return integer|string $state|null + */ + public function getState() + { + return $this->_currentState; + } + + /** + * Add symbols to the input alphabet + * + * @param array $inputAphabet + */ + public function addInputSymbols($inputAphabet) + { + foreach ($inputAphabet as $inputSymbol) { + $this->addInputSymbol($inputSymbol); + } + } + + /** + * Add symbol to the input alphabet + * + * @param integer|string $inputSymbol + */ + public function addInputSymbol($inputSymbol) + { + $this->_inputAphabet[$inputSymbol] = $inputSymbol; + } + + + /** + * Add transition rules + * + * array structure: + * array( array(sourseState, input, targetState[, inputAction]), + * array(sourseState, input, targetState[, inputAction]), + * array(sourseState, input, targetState[, inputAction]), + * ... + * ) + * + * @param array $rules + */ + public function addRules($rules) + { + foreach ($rules as $rule) { + $this->addrule($rule[0], $rule[1], $rule[2], isset($rule[3])?$rule[3]:null); + } + } + + /** + * Add symbol to the input alphabet + * + * @param integer|string $sourceState + * @param integer|string $input + * @param integer|string $targetState + * @param Zend_Search_Lucene_FSMAction|null $inputAction + * @throws Zend_Search_Exception + */ + public function addRule($sourceState, $input, $targetState, $inputAction = null) + { + if (!isset($this->_states[$sourceState])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined source state (' . $sourceState . ').'); + } + if (!isset($this->_states[$targetState])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined target state (' . $targetState . ').'); + } + if (!isset($this->_inputAphabet[$input])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined input symbol (' . $input . ').'); + } + + if (!isset($this->_rules[$sourceState])) { + $this->_rules[$sourceState] = array(); + } + if (isset($this->_rules[$sourceState][$input])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Rule for {state,input} pair (' . $sourceState . ', '. $input . ') is already defined.'); + } + + $this->_rules[$sourceState][$input] = $targetState; + + + if ($inputAction !== null) { + $this->addInputAction($sourceState, $input, $inputAction); + } + } + + + /** + * Add state entry action. + * Several entry actions are allowed. + * Action execution order is defined by addEntryAction() calls + * + * @param integer|string $state + * @param Zend_Search_Lucene_FSMAction $action + */ + public function addEntryAction($state, Zend_Search_Lucene_FSMAction $action) + { + if (!isset($this->_states[$state])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined state (' . $state. ').'); + } + + if (!isset($this->_entryActions[$state])) { + $this->_entryActions[$state] = array(); + } + + $this->_entryActions[$state][] = $action; + } + + /** + * Add state exit action. + * Several exit actions are allowed. + * Action execution order is defined by addEntryAction() calls + * + * @param integer|string $state + * @param Zend_Search_Lucene_FSMAction $action + */ + public function addExitAction($state, Zend_Search_Lucene_FSMAction $action) + { + if (!isset($this->_states[$state])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined state (' . $state. ').'); + } + + if (!isset($this->_exitActions[$state])) { + $this->_exitActions[$state] = array(); + } + + $this->_exitActions[$state][] = $action; + } + + /** + * Add input action (defined by {state, input} pair). + * Several input actions are allowed. + * Action execution order is defined by addInputAction() calls + * + * @param integer|string $state + * @param integer|string $input + * @param Zend_Search_Lucene_FSMAction $action + */ + public function addInputAction($state, $inputSymbol, Zend_Search_Lucene_FSMAction $action) + { + if (!isset($this->_states[$state])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined state (' . $state. ').'); + } + if (!isset($this->_inputAphabet[$inputSymbol])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined input symbol (' . $inputSymbol. ').'); + } + + if (!isset($this->_inputActions[$state])) { + $this->_inputActions[$state] = array(); + } + if (!isset($this->_inputActions[$state][$inputSymbol])) { + $this->_inputActions[$state][$inputSymbol] = array(); + } + + $this->_inputActions[$state][$inputSymbol][] = $action; + } + + /** + * Add transition action (defined by {state, input} pair). + * Several transition actions are allowed. + * Action execution order is defined by addTransitionAction() calls + * + * @param integer|string $sourceState + * @param integer|string $targetState + * @param Zend_Search_Lucene_FSMAction $action + */ + public function addTransitionAction($sourceState, $targetState, Zend_Search_Lucene_FSMAction $action) + { + if (!isset($this->_states[$sourceState])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined source state (' . $sourceState. ').'); + } + if (!isset($this->_states[$targetState])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('Undefined source state (' . $targetState. ').'); + } + + if (!isset($this->_transitionActions[$sourceState])) { + $this->_transitionActions[$sourceState] = array(); + } + if (!isset($this->_transitionActions[$sourceState][$targetState])) { + $this->_transitionActions[$sourceState][$targetState] = array(); + } + + $this->_transitionActions[$sourceState][$targetState][] = $action; + } + + + /** + * Process an input + * + * @param mixed $input + * @throws Zend_Search_Exception + */ + public function process($input) + { + if (!isset($this->_rules[$this->_currentState])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('There is no any rule for current state (' . $this->_currentState . ').'); + } + if (!isset($this->_rules[$this->_currentState][$input])) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('There is no any rule for {current state, input} pair (' . $this->_currentState . ', ' . $input . ').'); + } + + $sourceState = $this->_currentState; + $targetState = $this->_rules[$this->_currentState][$input]; + + if ($sourceState != $targetState && isset($this->_exitActions[$sourceState])) { + foreach ($this->_exitActions[$sourceState] as $action) { + $action->doAction(); + } + } + if (isset($this->_inputActions[$sourceState]) && + isset($this->_inputActions[$sourceState][$input])) { + foreach ($this->_inputActions[$sourceState][$input] as $action) { + $action->doAction(); + } + } + + + $this->_currentState = $targetState; + + if (isset($this->_transitionActions[$sourceState]) && + isset($this->_transitionActions[$sourceState][$targetState])) { + foreach ($this->_transitionActions[$sourceState][$targetState] as $action) { + $action->doAction(); + } + } + if ($sourceState != $targetState && isset($this->_entryActions[$targetState])) { + foreach ($this->_entryActions[$targetState] as $action) { + $action->doAction(); + } + } + } + + public function reset() + { + if (count($this->_states) == 0) { + require_once 'Zend/Search/Exception.php'; + throw new Zend_Search_Exception('There is no any state defined for FSM.'); + } + + $this->_currentState = $this->_states[0]; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/FSMAction.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/FSMAction.php new file mode 100644 index 00000000000..94383bfa46e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/FSMAction.php @@ -0,0 +1,66 @@ +_object = $object; + $this->_method = $method; + } + + public function doAction() + { + $methodName = $this->_method; + $this->_object->$methodName(); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Field.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Field.php new file mode 100644 index 00000000000..1c58ca1eaed --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Field.php @@ -0,0 +1,226 @@ +name = $name; + $this->value = $value; + + if (!$isBinary) { + $this->encoding = $encoding; + $this->isTokenized = $isTokenized; + } else { + $this->encoding = ''; + $this->isTokenized = false; + } + + $this->isStored = $isStored; + $this->isIndexed = $isIndexed; + $this->isBinary = $isBinary; + + $this->storeTermVector = false; + $this->boost = 1.0; + } + + + /** + * Constructs a String-valued Field that is not tokenized, but is indexed + * and stored. Useful for non-text fields, e.g. date or url. + * + * @param string $name + * @param string $value + * @param string $encoding + * @return Zend_Search_Lucene_Field + */ + public static function keyword($name, $value, $encoding = '') + { + return new self($name, $value, $encoding, true, true, false); + } + + + /** + * Constructs a String-valued Field that is not tokenized nor indexed, + * but is stored in the index, for return with hits. + * + * @param string $name + * @param string $value + * @param string $encoding + * @return Zend_Search_Lucene_Field + */ + public static function unIndexed($name, $value, $encoding = '') + { + return new self($name, $value, $encoding, true, false, false); + } + + + /** + * Constructs a Binary String valued Field that is not tokenized nor indexed, + * but is stored in the index, for return with hits. + * + * @param string $name + * @param string $value + * @param string $encoding + * @return Zend_Search_Lucene_Field + */ + public static function binary($name, $value) + { + return new self($name, $value, '', true, false, false, true); + } + + /** + * Constructs a String-valued Field that is tokenized and indexed, + * and is stored in the index, for return with hits. Useful for short text + * fields, like "title" or "subject". Term vector will not be stored for this field. + * + * @param string $name + * @param string $value + * @param string $encoding + * @return Zend_Search_Lucene_Field + */ + public static function text($name, $value, $encoding = '') + { + return new self($name, $value, $encoding, true, true, true); + } + + + /** + * Constructs a String-valued Field that is tokenized and indexed, + * but that is not stored in the index. + * + * @param string $name + * @param string $value + * @param string $encoding + * @return Zend_Search_Lucene_Field + */ + public static function unStored($name, $value, $encoding = '') + { + return new self($name, $value, $encoding, false, true, true); + } + + /** + * Get field value in UTF-8 encoding + * + * @return string + */ + public function getUtf8Value() + { + if (strcasecmp($this->encoding, 'utf8' ) == 0 || + strcasecmp($this->encoding, 'utf-8') == 0 ) { + return $this->value; + } else { + + return (PHP_OS != 'AIX') ? iconv($this->encoding, 'UTF-8', $this->value) : iconv('ISO8859-1', 'UTF-8', $this->value); + } + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DictionaryLoader.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DictionaryLoader.php new file mode 100644 index 00000000000..8f282d03814 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DictionaryLoader.php @@ -0,0 +1,268 @@ +.tii index file data and + * returns two arrays - term and tremInfo lists. + * + * See Zend_Search_Lucene_Index_SegmintInfo class for details + * + * @param string $data + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public static function load($data) + { + $termDictionary = array(); + $termInfos = array(); + $pos = 0; + + // $tiVersion = $tiiFile->readInt(); + $tiVersion = ord($data[0]) << 24 | ord($data[1]) << 16 | ord($data[2]) << 8 | ord($data[3]); + $pos += 4; + if ($tiVersion != (int)0xFFFFFFFE /* pre-2.1 format */ && + $tiVersion != (int)0xFFFFFFFD /* 2.1+ format */) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong TermInfoIndexFile file format'); + } + + // $indexTermCount = $tiiFile->readLong(); + if (PHP_INT_SIZE > 4) { + $indexTermCount = ord($data[$pos]) << 56 | + ord($data[$pos+1]) << 48 | + ord($data[$pos+2]) << 40 | + ord($data[$pos+3]) << 32 | + ord($data[$pos+4]) << 24 | + ord($data[$pos+5]) << 16 | + ord($data[$pos+6]) << 8 | + ord($data[$pos+7]); + } else { + if ((ord($data[$pos]) != 0) || + (ord($data[$pos+1]) != 0) || + (ord($data[$pos+2]) != 0) || + (ord($data[$pos+3]) != 0) || + ((ord($data[$pos+4]) & 0x80) != 0)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Largest supported segment size (for 32-bit mode) is 2Gb'); + } + + $indexTermCount = ord($data[$pos+4]) << 24 | + ord($data[$pos+5]) << 16 | + ord($data[$pos+6]) << 8 | + ord($data[$pos+7]); + } + $pos += 8; + + // $tiiFile->readInt(); // IndexInterval + $pos += 4; + + // $skipInterval = $tiiFile->readInt(); + $skipInterval = ord($data[$pos]) << 24 | ord($data[$pos+1]) << 16 | ord($data[$pos+2]) << 8 | ord($data[$pos+3]); + $pos += 4; + if ($indexTermCount < 1) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong number of terms in a term dictionary index'); + } + + if ($tiVersion == (int)0xFFFFFFFD /* 2.1+ format */) { + /* Skip MaxSkipLevels value */ + $pos += 4; + } + + $prevTerm = ''; + $freqPointer = 0; + $proxPointer = 0; + $indexPointer = 0; + for ($count = 0; $count < $indexTermCount; $count++) { + //$termPrefixLength = $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $termPrefixLength = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $termPrefixLength |= ($nbyte & 0x7F) << $shift; + } + + // $termSuffix = $tiiFile->readString(); + $nbyte = ord($data[$pos++]); + $len = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $len |= ($nbyte & 0x7F) << $shift; + } + if ($len == 0) { + $termSuffix = ''; + } else { + $termSuffix = substr($data, $pos, $len); + $pos += $len; + for ($count1 = 0; $count1 < $len; $count1++ ) { + if (( ord($termSuffix[$count1]) & 0xC0 ) == 0xC0) { + $addBytes = 1; + if (ord($termSuffix[$count1]) & 0x20 ) { + $addBytes++; + + // Never used for Java Lucene created index. + // Java2 doesn't encode strings in four bytes + if (ord($termSuffix[$count1]) & 0x10 ) { + $addBytes++; + } + } + $termSuffix .= substr($data, $pos, $addBytes); + $pos += $addBytes; + $len += $addBytes; + + // Check for null character. Java2 encodes null character + // in two bytes. + if (ord($termSuffix[$count1]) == 0xC0 && + ord($termSuffix[$count1+1]) == 0x80 ) { + $termSuffix[$count1] = 0; + $termSuffix = substr($termSuffix,0,$count1+1) + . substr($termSuffix,$count1+2); + } + $count1 += $addBytes; + } + } + } + + // $termValue = Zend_Search_Lucene_Index_Term::getPrefix($prevTerm, $termPrefixLength) . $termSuffix; + $pb = 0; $pc = 0; + while ($pb < strlen($prevTerm) && $pc < $termPrefixLength) { + $charBytes = 1; + if ((ord($prevTerm[$pb]) & 0xC0) == 0xC0) { + $charBytes++; + if (ord($prevTerm[$pb]) & 0x20 ) { + $charBytes++; + if (ord($prevTerm[$pb]) & 0x10 ) { + $charBytes++; + } + } + } + + if ($pb + $charBytes > strlen($data)) { + // wrong character + break; + } + + $pc++; + $pb += $charBytes; + } + $termValue = substr($prevTerm, 0, $pb) . $termSuffix; + + // $termFieldNum = $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $termFieldNum = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $termFieldNum |= ($nbyte & 0x7F) << $shift; + } + + // $docFreq = $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $docFreq = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $docFreq |= ($nbyte & 0x7F) << $shift; + } + + // $freqPointer += $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $vint = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $vint |= ($nbyte & 0x7F) << $shift; + } + $freqPointer += $vint; + + // $proxPointer += $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $vint = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $vint |= ($nbyte & 0x7F) << $shift; + } + $proxPointer += $vint; + + if( $docFreq >= $skipInterval ) { + // $skipDelta = $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $vint = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $vint |= ($nbyte & 0x7F) << $shift; + } + $skipDelta = $vint; + } else { + $skipDelta = 0; + } + + // $indexPointer += $tiiFile->readVInt(); + $nbyte = ord($data[$pos++]); + $vint = $nbyte & 0x7F; + for ($shift=7; ($nbyte & 0x80) != 0; $shift += 7) { + $nbyte = ord($data[$pos++]); + $vint |= ($nbyte & 0x7F) << $shift; + } + $indexPointer += $vint; + + + // $this->_termDictionary[] = new Zend_Search_Lucene_Index_Term($termValue, $termFieldNum); + $termDictionary[] = array($termFieldNum, $termValue); + + $termInfos[] = + // new Zend_Search_Lucene_Index_TermInfo($docFreq, $freqPointer, $proxPointer, $skipDelta, $indexPointer); + array($docFreq, $freqPointer, $proxPointer, $skipDelta, $indexPointer); + + $prevTerm = $termValue; + } + + // Check special index entry mark + if ($termDictionary[0][0] != (int)0xFFFFFFFF) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong TermInfoIndexFile file format'); + } + + if (PHP_INT_SIZE > 4) { + // Treat 64-bit 0xFFFFFFFF as -1 + $termDictionary[0][0] = -1; + } + + return array($termDictionary, $termInfos); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DocsFilter.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DocsFilter.php new file mode 100644 index 00000000000..58492dacf73 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/DocsFilter.php @@ -0,0 +1,59 @@ + => array( => , + * => , + * => , + * ... ), + * => array( => , + * => , + * => , + * ... ), + * => array( => , + * => , + * => , + * ... ), + * ... + * ) + * + * @var array + */ + public $segmentFilters = array(); +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/FieldInfo.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/FieldInfo.php new file mode 100644 index 00000000000..e85d5007b91 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/FieldInfo.php @@ -0,0 +1,50 @@ +name = $name; + $this->isIndexed = $isIndexed; + $this->number = $number; + $this->storeTermVector = $storeTermVector; + $this->normsOmitted = $normsOmitted; + $this->payloadsStored = $payloadsStored; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentInfo.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentInfo.php new file mode 100644 index 00000000000..33c766b726e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentInfo.php @@ -0,0 +1,2132 @@ + $termValue + * [1] -> $termFieldNum + * + * Corresponding Zend_Search_Lucene_Index_TermInfo object stored in the $_termDictionaryInfos + * + * @var array + */ + private $_termDictionary; + + /** + * Term Dictionary Index TermInfos + * + * Array of arrays (Zend_Search_Lucene_Index_TermInfo objects are represented as arrays because + * of performance considerations) + * [0] -> $docFreq + * [1] -> $freqPointer + * [2] -> $proxPointer + * [3] -> $skipOffset + * [4] -> $indexPointer + * + * @var array + */ + private $_termDictionaryInfos; + + /** + * Segment fields. Array of Zend_Search_Lucene_Index_FieldInfo objects for this segment + * + * @var array + */ + private $_fields; + + /** + * Field positions in a dictionary. + * (Term dictionary contains filelds ordered by names) + * + * @var array + */ + private $_fieldsDicPositions; + + + /** + * Associative array where the key is the file name and the value is data offset + * in a compound segment file (.csf). + * + * @var array + */ + private $_segFiles; + + /** + * Associative array where the key is the file name and the value is file size (.csf). + * + * @var array + */ + private $_segFileSizes; + + /** + * Delete file generation number + * + * -2 means autodetect latest delete generation + * -1 means 'there is no delete file' + * 0 means pre-2.1 format delete file + * X specifies used delete file + * + * @var integer + */ + private $_delGen; + + /** + * Segment has single norms file + * + * If true then one .nrm file is used for all fields + * Otherwise .fN files are used + * + * @var boolean + */ + private $_hasSingleNormFile; + + /** + * Use compound segment file (*.cfs) to collect all other segment files + * (excluding .del files) + * + * @var boolean + */ + private $_isCompound; + + + /** + * File system adapter. + * + * @var Zend_Search_Lucene_Storage_Directory_Filesystem + */ + private $_directory; + + /** + * Normalization factors. + * An array fieldName => normVector + * normVector is a binary string. + * Each byte corresponds to an indexed document in a segment and + * encodes normalization factor (float value, encoded by + * Zend_Search_Lucene_Search_Similarity::encodeNorm()) + * + * @var array + */ + private $_norms = array(); + + /** + * List of deleted documents. + * bitset if bitset extension is loaded or array otherwise. + * + * @var mixed + */ + private $_deleted = null; + + /** + * $this->_deleted update flag + * + * @var boolean + */ + private $_deletedDirty = false; + + /** + * True if segment uses shared doc store + * + * @var boolean + */ + private $_usesSharedDocStore; + + /* + * Shared doc store options. + * It's an assotiative array with the following items: + * - 'offset' => $docStoreOffset The starting document in the shared doc store files where this segment's documents begin + * - 'segment' => $docStoreSegment The name of the segment that has the shared doc store files. + * - 'isCompound' => $docStoreIsCompoundFile True, if compound file format is used for the shared doc store files (.cfx file). + */ + private $_sharedDocStoreOptions; + + + /** + * Zend_Search_Lucene_Index_SegmentInfo constructor + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @param string $name + * @param integer $docCount + * @param integer $delGen + * @param array|null $docStoreOptions + * @param boolean $hasSingleNormFile + * @param boolean $isCompound + */ + public function __construct(Zend_Search_Lucene_Storage_Directory $directory, $name, $docCount, $delGen = 0, $docStoreOptions = null, $hasSingleNormFile = false, $isCompound = null) + { + $this->_directory = $directory; + $this->_name = $name; + $this->_docCount = $docCount; + + if ($docStoreOptions !== null) { + $this->_usesSharedDocStore = true; + $this->_sharedDocStoreOptions = $docStoreOptions; + + if ($docStoreOptions['isCompound']) { + $cfxFile = $this->_directory->getFileObject($docStoreOptions['segment'] . '.cfx'); + $cfxFilesCount = $cfxFile->readVInt(); + + $cfxFiles = array(); + $cfxFileSizes = array(); + + for ($count = 0; $count < $cfxFilesCount; $count++) { + $dataOffset = $cfxFile->readLong(); + if ($count != 0) { + $cfxFileSizes[$fileName] = $dataOffset - end($cfxFiles); + } + $fileName = $cfxFile->readString(); + $cfxFiles[$fileName] = $dataOffset; + } + if ($count != 0) { + $cfxFileSizes[$fileName] = $this->_directory->fileLength($docStoreOptions['segment'] . '.cfx') - $dataOffset; + } + + $this->_sharedDocStoreOptions['files'] = $cfxFiles; + $this->_sharedDocStoreOptions['fileSizes'] = $cfxFileSizes; + } + } + + $this->_hasSingleNormFile = $hasSingleNormFile; + $this->_delGen = $delGen; + $this->_termDictionary = null; + + + if ($isCompound !== null) { + $this->_isCompound = $isCompound; + } else { + // It's a pre-2.1 segment or isCompound is set to 'unknown' + // Detect if segment uses compound file + require_once 'Zend/Search/Lucene/Exception.php'; + try { + // Try to open compound file + $this->_directory->getFileObject($name . '.cfs'); + + // Compound file is found + $this->_isCompound = true; + } catch (Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'is not readable') !== false) { + // Compound file is not found or is not readable + $this->_isCompound = false; + } else { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + } + + $this->_segFiles = array(); + if ($this->_isCompound) { + $cfsFile = $this->_directory->getFileObject($name . '.cfs'); + $segFilesCount = $cfsFile->readVInt(); + + for ($count = 0; $count < $segFilesCount; $count++) { + $dataOffset = $cfsFile->readLong(); + if ($count != 0) { + $this->_segFileSizes[$fileName] = $dataOffset - end($this->_segFiles); + } + $fileName = $cfsFile->readString(); + $this->_segFiles[$fileName] = $dataOffset; + } + if ($count != 0) { + $this->_segFileSizes[$fileName] = $this->_directory->fileLength($name . '.cfs') - $dataOffset; + } + } + + $fnmFile = $this->openCompoundFile('.fnm'); + $fieldsCount = $fnmFile->readVInt(); + $fieldNames = array(); + $fieldNums = array(); + $this->_fields = array(); + + for ($count=0; $count < $fieldsCount; $count++) { + $fieldName = $fnmFile->readString(); + $fieldBits = $fnmFile->readByte(); + $this->_fields[$count] = new Zend_Search_Lucene_Index_FieldInfo($fieldName, + $fieldBits & 0x01 /* field is indexed */, + $count, + $fieldBits & 0x02 /* termvectors are stored */, + $fieldBits & 0x10 /* norms are omitted */, + $fieldBits & 0x20 /* payloads are stored */); + if ($fieldBits & 0x10) { + // norms are omitted for the indexed field + $this->_norms[$count] = str_repeat(chr(Zend_Search_Lucene_Search_Similarity::encodeNorm(1.0)), $docCount); + } + + $fieldNums[$count] = $count; + $fieldNames[$count] = $fieldName; + } + array_multisort($fieldNames, SORT_ASC, SORT_REGULAR, $fieldNums); + $this->_fieldsDicPositions = array_flip($fieldNums); + + if ($this->_delGen == -2) { + // SegmentInfo constructor is invoked from index writer + // Autodetect current delete file generation number + $this->_delGen = $this->_detectLatestDelGen(); + } + + // Load deletions + $this->_deleted = $this->_loadDelFile(); + } + + /** + * Load detetions file + * + * Returns bitset or an array depending on bitset extension availability + * + * @return mixed + * @throws Zend_Search_Lucene_Exception + */ + private function _loadDelFile() + { + if ($this->_delGen == -1) { + // There is no delete file for this segment + return null; + } else if ($this->_delGen == 0) { + // It's a segment with pre-2.1 format delete file + // Try to load deletions file + return $this->_loadPre21DelFile(); + } else { + // It's 2.1+ format deleteions file + return $this->_load21DelFile(); + } + } + + /** + * Load pre-2.1 detetions file + * + * Returns bitset or an array depending on bitset extension availability + * + * @return mixed + * @throws Zend_Search_Lucene_Exception + */ + private function _loadPre21DelFile() + { + require_once 'Zend/Search/Lucene/Exception.php'; + try { + // '.del' files always stored in a separate file + // Segment compound is not used + $delFile = $this->_directory->getFileObject($this->_name . '.del'); + + $byteCount = $delFile->readInt(); + $byteCount = ceil($byteCount/8); + $bitCount = $delFile->readInt(); + + if ($bitCount == 0) { + $delBytes = ''; + } else { + $delBytes = $delFile->readBytes($byteCount); + } + + if (extension_loaded('bitset')) { + return $delBytes; + } else { + $deletions = array(); + for ($count = 0; $count < $byteCount; $count++) { + $byte = ord($delBytes[$count]); + for ($bit = 0; $bit < 8; $bit++) { + if ($byte & (1<<$bit)) { + $deletions[$count*8 + $bit] = 1; + } + } + } + + return $deletions; + } + } catch(Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'is not readable') === false) { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + // There is no deletion file + $this->_delGen = -1; + + return null; + } + } + + /** + * Load 2.1+ format detetions file + * + * Returns bitset or an array depending on bitset extension availability + * + * @return mixed + */ + private function _load21DelFile() + { + $delFile = $this->_directory->getFileObject($this->_name . '_' . base_convert($this->_delGen, 10, 36) . '.del'); + + $format = $delFile->readInt(); + + if ($format == (int)0xFFFFFFFF) { + if (extension_loaded('bitset')) { + $deletions = bitset_empty(); + } else { + $deletions = array(); + } + + $byteCount = $delFile->readInt(); + $bitCount = $delFile->readInt(); + + $delFileSize = $this->_directory->fileLength($this->_name . '_' . base_convert($this->_delGen, 10, 36) . '.del'); + $byteNum = 0; + + do { + $dgap = $delFile->readVInt(); + $nonZeroByte = $delFile->readByte(); + + $byteNum += $dgap; + + + if (extension_loaded('bitset')) { + for ($bit = 0; $bit < 8; $bit++) { + if ($nonZeroByte & (1<<$bit)) { + bitset_incl($deletions, $byteNum*8 + $bit); + } + } + return $deletions; + } else { + for ($bit = 0; $bit < 8; $bit++) { + if ($nonZeroByte & (1<<$bit)) { + $deletions[$byteNum*8 + $bit] = 1; + } + } + return (count($deletions) > 0) ? $deletions : null; + } + + } while ($delFile->tell() < $delFileSize); + } else { + // $format is actually byte count + $byteCount = ceil($format/8); + $bitCount = $delFile->readInt(); + + if ($bitCount == 0) { + $delBytes = ''; + } else { + $delBytes = $delFile->readBytes($byteCount); + } + + if (extension_loaded('bitset')) { + return $delBytes; + } else { + $deletions = array(); + for ($count = 0; $count < $byteCount; $count++) { + $byte = ord($delBytes[$count]); + for ($bit = 0; $bit < 8; $bit++) { + if ($byte & (1<<$bit)) { + $deletions[$count*8 + $bit] = 1; + } + } + } + + return (count($deletions) > 0) ? $deletions : null; + } + } + } + + /** + * Opens index file stoted within compound index file + * + * @param string $extension + * @param boolean $shareHandler + * @throws Zend_Search_Lucene_Exception + * @return Zend_Search_Lucene_Storage_File + */ + public function openCompoundFile($extension, $shareHandler = true) + { + if (($extension == '.fdx' || $extension == '.fdt') && $this->_usesSharedDocStore) { + $fdxFName = $this->_sharedDocStoreOptions['segment'] . '.fdx'; + $fdtFName = $this->_sharedDocStoreOptions['segment'] . '.fdt'; + + if (!$this->_sharedDocStoreOptions['isCompound']) { + $fdxFile = $this->_directory->getFileObject($fdxFName, $shareHandler); + $fdxFile->seek($this->_sharedDocStoreOptions['offset']*8, SEEK_CUR); + + if ($extension == '.fdx') { + // '.fdx' file is requested + return $fdxFile; + } else { + // '.fdt' file is requested + $fdtStartOffset = $fdxFile->readLong(); + + $fdtFile = $this->_directory->getFileObject($fdtFName, $shareHandler); + $fdtFile->seek($fdtStartOffset, SEEK_CUR); + + return $fdtFile; + } + } + + if( !isset($this->_sharedDocStoreOptions['files'][$fdxFName]) ) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Shared doc storage segment compound file doesn\'t contain ' + . $fdxFName . ' file.' ); + } + if( !isset($this->_sharedDocStoreOptions['files'][$fdtFName]) ) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Shared doc storage segment compound file doesn\'t contain ' + . $fdtFName . ' file.' ); + } + + // Open shared docstore segment file + $cfxFile = $this->_directory->getFileObject($this->_sharedDocStoreOptions['segment'] . '.cfx', $shareHandler); + // Seek to the start of '.fdx' file within compound file + $cfxFile->seek($this->_sharedDocStoreOptions['files'][$fdxFName]); + // Seek to the start of current segment documents section + $cfxFile->seek($this->_sharedDocStoreOptions['offset']*8, SEEK_CUR); + + if ($extension == '.fdx') { + // '.fdx' file is requested + return $cfxFile; + } else { + // '.fdt' file is requested + $fdtStartOffset = $cfxFile->readLong(); + + // Seek to the start of '.fdt' file within compound file + $cfxFile->seek($this->_sharedDocStoreOptions['files'][$fdtFName]); + // Seek to the start of current segment documents section + $cfxFile->seek($fdtStartOffset, SEEK_CUR); + + return $fdtFile; + } + } + + $filename = $this->_name . $extension; + + if (!$this->_isCompound) { + return $this->_directory->getFileObject($filename, $shareHandler); + } + + if( !isset($this->_segFiles[$filename]) ) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Segment compound file doesn\'t contain ' + . $filename . ' file.' ); + } + + $file = $this->_directory->getFileObject($this->_name . '.cfs', $shareHandler); + $file->seek($this->_segFiles[$filename]); + return $file; + } + + /** + * Get compound file length + * + * @param string $extension + * @return integer + */ + public function compoundFileLength($extension) + { + if (($extension == '.fdx' || $extension == '.fdt') && $this->_usesSharedDocStore) { + $filename = $this->_sharedDocStoreOptions['segment'] . $extension; + + if (!$this->_sharedDocStoreOptions['isCompound']) { + return $this->_directory->fileLength($filename); + } + + if( !isset($this->_sharedDocStoreOptions['fileSizes'][$filename]) ) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Shared doc store compound file doesn\'t contain ' + . $filename . ' file.' ); + } + + return $this->_sharedDocStoreOptions['fileSizes'][$filename]; + } + + + $filename = $this->_name . $extension; + + // Try to get common file first + if ($this->_directory->fileExists($filename)) { + return $this->_directory->fileLength($filename); + } + + if( !isset($this->_segFileSizes[$filename]) ) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Index compound file doesn\'t contain ' + . $filename . ' file.' ); + } + + return $this->_segFileSizes[$filename]; + } + + /** + * Returns field index or -1 if field is not found + * + * @param string $fieldName + * @return integer + */ + public function getFieldNum($fieldName) + { + foreach( $this->_fields as $field ) { + if( $field->name == $fieldName ) { + return $field->number; + } + } + + return -1; + } + + /** + * Returns field info for specified field + * + * @param integer $fieldNum + * @return Zend_Search_Lucene_Index_FieldInfo + */ + public function getField($fieldNum) + { + return $this->_fields[$fieldNum]; + } + + /** + * Returns array of fields. + * if $indexed parameter is true, then returns only indexed fields. + * + * @param boolean $indexed + * @return array + */ + public function getFields($indexed = false) + { + $result = array(); + foreach( $this->_fields as $field ) { + if( (!$indexed) || $field->isIndexed ) { + $result[ $field->name ] = $field->name; + } + } + return $result; + } + + /** + * Returns array of FieldInfo objects. + * + * @return array + */ + public function getFieldInfos() + { + return $this->_fields; + } + + /** + * Returns actual deletions file generation number. + * + * @return integer + */ + public function getDelGen() + { + return $this->_delGen; + } + + /** + * Returns the total number of documents in this segment (including deleted documents). + * + * @return integer + */ + public function count() + { + return $this->_docCount; + } + + /** + * Returns number of deleted documents. + * + * @return integer + */ + private function _deletedCount() + { + if ($this->_deleted === null) { + return 0; + } + + if (extension_loaded('bitset')) { + return count(bitset_to_array($this->_deleted)); + } else { + return count($this->_deleted); + } + } + + /** + * Returns the total number of non-deleted documents in this segment. + * + * @return integer + */ + public function numDocs() + { + if ($this->hasDeletions()) { + return $this->_docCount - $this->_deletedCount(); + } else { + return $this->_docCount; + } + } + + /** + * Get field position in a fields dictionary + * + * @param integer $fieldNum + * @return integer + */ + private function _getFieldPosition($fieldNum) { + // Treat values which are not in a translation table as a 'direct value' + return isset($this->_fieldsDicPositions[$fieldNum]) ? + $this->_fieldsDicPositions[$fieldNum] : $fieldNum; + } + + /** + * Return segment name + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + + /** + * TermInfo cache + * + * Size is 1024. + * Numbers are used instead of class constants because of performance considerations + * + * @var array + */ + private $_termInfoCache = array(); + + private function _cleanUpTermInfoCache() + { + // Clean 256 term infos + foreach ($this->_termInfoCache as $key => $termInfo) { + unset($this->_termInfoCache[$key]); + + // leave 768 last used term infos + if (count($this->_termInfoCache) == 768) { + break; + } + } + } + + /** + * Load terms dictionary index + * + * @throws Zend_Search_Lucene_Exception + */ + private function _loadDictionaryIndex() + { + // Check, if index is already serialized + if ($this->_directory->fileExists($this->_name . '.sti')) { + // Load serialized dictionary index data + $stiFile = $this->_directory->getFileObject($this->_name . '.sti'); + $stiFileData = $stiFile->readBytes($this->_directory->fileLength($this->_name . '.sti')); + + // Load dictionary index data + if (($unserializedData = @unserialize($stiFileData)) !== false) { + list($this->_termDictionary, $this->_termDictionaryInfos) = $unserializedData; + return; + } + } + + // Load data from .tii file and generate .sti file + + // Prefetch dictionary index data + $tiiFile = $this->openCompoundFile('.tii'); + $tiiFileData = $tiiFile->readBytes($this->compoundFileLength('.tii')); + + /** Zend_Search_Lucene_Index_DictionaryLoader */ + require_once 'Zend/Search/Lucene/Index/DictionaryLoader.php'; + + // Load dictionary index data + list($this->_termDictionary, $this->_termDictionaryInfos) = + Zend_Search_Lucene_Index_DictionaryLoader::load($tiiFileData); + + $stiFileData = serialize(array($this->_termDictionary, $this->_termDictionaryInfos)); + $stiFile = $this->_directory->createFile($this->_name . '.sti'); + $stiFile->writeBytes($stiFileData); + } + + /** + * Scans terms dictionary and returns term info + * + * @param Zend_Search_Lucene_Index_Term $term + * @return Zend_Search_Lucene_Index_TermInfo + */ + public function getTermInfo(Zend_Search_Lucene_Index_Term $term) + { + $termKey = $term->key(); + if (isset($this->_termInfoCache[$termKey])) { + $termInfo = $this->_termInfoCache[$termKey]; + + // Move termInfo to the end of cache + unset($this->_termInfoCache[$termKey]); + $this->_termInfoCache[$termKey] = $termInfo; + + return $termInfo; + } + + + if ($this->_termDictionary === null) { + $this->_loadDictionaryIndex(); + } + + $searchField = $this->getFieldNum($term->field); + + if ($searchField == -1) { + return null; + } + $searchDicField = $this->_getFieldPosition($searchField); + + // search for appropriate value in dictionary + $lowIndex = 0; + $highIndex = count($this->_termDictionary)-1; + while ($highIndex >= $lowIndex) { + // $mid = ($highIndex - $lowIndex)/2; + $mid = ($highIndex + $lowIndex) >> 1; + $midTerm = $this->_termDictionary[$mid]; + + $fieldNum = $this->_getFieldPosition($midTerm[0] /* field */); + $delta = $searchDicField - $fieldNum; + if ($delta == 0) { + $delta = strcmp($term->text, $midTerm[1] /* text */); + } + + if ($delta < 0) { + $highIndex = $mid-1; + } elseif ($delta > 0) { + $lowIndex = $mid+1; + } else { + // return $this->_termDictionaryInfos[$mid]; // We got it! + $a = $this->_termDictionaryInfos[$mid]; + $termInfo = new Zend_Search_Lucene_Index_TermInfo($a[0], $a[1], $a[2], $a[3], $a[4]); + + // Put loaded termInfo into cache + $this->_termInfoCache[$termKey] = $termInfo; + + return $termInfo; + } + } + + if ($highIndex == -1) { + // Term is out of the dictionary range + return null; + } + + $prevPosition = $highIndex; + $prevTerm = $this->_termDictionary[$prevPosition]; + $prevTermInfo = $this->_termDictionaryInfos[$prevPosition]; + + $tisFile = $this->openCompoundFile('.tis'); + $tiVersion = $tisFile->readInt(); + if ($tiVersion != (int)0xFFFFFFFE /* pre-2.1 format */ && + $tiVersion != (int)0xFFFFFFFD /* 2.1+ format */) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong TermInfoFile file format'); + } + + $termCount = $tisFile->readLong(); + $indexInterval = $tisFile->readInt(); + $skipInterval = $tisFile->readInt(); + if ($tiVersion == (int)0xFFFFFFFD /* 2.1+ format */) { + $maxSkipLevels = $tisFile->readInt(); + } + + $tisFile->seek($prevTermInfo[4] /* indexPointer */ - (($tiVersion == (int)0xFFFFFFFD)? 24 : 20) /* header size*/, SEEK_CUR); + + $termValue = $prevTerm[1] /* text */; + $termFieldNum = $prevTerm[0] /* field */; + $freqPointer = $prevTermInfo[1] /* freqPointer */; + $proxPointer = $prevTermInfo[2] /* proxPointer */; + for ($count = $prevPosition*$indexInterval + 1; + $count <= $termCount && + ( $this->_getFieldPosition($termFieldNum) < $searchDicField || + ($this->_getFieldPosition($termFieldNum) == $searchDicField && + strcmp($termValue, $term->text) < 0) ); + $count++) { + $termPrefixLength = $tisFile->readVInt(); + $termSuffix = $tisFile->readString(); + $termFieldNum = $tisFile->readVInt(); + $termValue = Zend_Search_Lucene_Index_Term::getPrefix($termValue, $termPrefixLength) . $termSuffix; + + $docFreq = $tisFile->readVInt(); + $freqPointer += $tisFile->readVInt(); + $proxPointer += $tisFile->readVInt(); + if( $docFreq >= $skipInterval ) { + $skipOffset = $tisFile->readVInt(); + } else { + $skipOffset = 0; + } + } + + if ($termFieldNum == $searchField && $termValue == $term->text) { + $termInfo = new Zend_Search_Lucene_Index_TermInfo($docFreq, $freqPointer, $proxPointer, $skipOffset); + } else { + $termInfo = null; + } + + // Put loaded termInfo into cache + $this->_termInfoCache[$termKey] = $termInfo; + + if (count($this->_termInfoCache) == 1024) { + $this->_cleanUpTermInfoCache(); + } + + return $termInfo; + } + + /** + * Returns IDs of all the documents containing term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @param integer $shift + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termDocs(Zend_Search_Lucene_Index_Term $term, $shift = 0, $docsFilter = null) + { + $termInfo = $this->getTermInfo($term); + + if (!$termInfo instanceof Zend_Search_Lucene_Index_TermInfo) { + if ($docsFilter !== null && $docsFilter instanceof Zend_Search_Lucene_Index_DocsFilter) { + $docsFilter->segmentFilters[$this->_name] = array(); + } + return array(); + } + + $frqFile = $this->openCompoundFile('.frq'); + $frqFile->seek($termInfo->freqPointer,SEEK_CUR); + $docId = 0; + $result = array(); + + if ($docsFilter !== null) { + if (!$docsFilter instanceof Zend_Search_Lucene_Index_DocsFilter) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Documents filter must be an instance of Zend_Search_Lucene_Index_DocsFilter or null.'); + } + + if (isset($docsFilter->segmentFilters[$this->_name])) { + // Filter already has some data for the current segment + + // Make short name for the filter (which doesn't need additional dereferencing) + $filter = &$docsFilter->segmentFilters[$this->_name]; + + // Check if filter is not empty + if (count($filter) == 0) { + return array(); + } + + if ($this->_docCount/count($filter) < self::FULL_SCAN_VS_FETCH_BOUNDARY) { + // Perform fetching +// --------------------------------------------------------------- + $updatedFilterData = array(); + + for( $count=0; $count < $termInfo->docFreq; $count++ ) { + $docDelta = $frqFile->readVInt(); + if( $docDelta % 2 == 1 ) { + $docId += ($docDelta-1)/2; + } else { + $docId += $docDelta/2; + // read freq + $frqFile->readVInt(); + } + + if (isset($filter[$docId])) { + $result[] = $shift + $docId; + $updatedFilterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } + } + $docsFilter->segmentFilters[$this->_name] = $updatedFilterData; +// --------------------------------------------------------------- + } else { + // Perform full scan + $updatedFilterData = array(); + + for( $count=0; $count < $termInfo->docFreq; $count++ ) { + $docDelta = $frqFile->readVInt(); + if( $docDelta % 2 == 1 ) { + $docId += ($docDelta-1)/2; + } else { + $docId += $docDelta/2; + // read freq + $frqFile->readVInt(); + } + + if (isset($filter[$docId])) { + $result[] = $shift + $docId; + $updatedFilterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } + } + $docsFilter->segmentFilters[$this->_name] = $updatedFilterData; + } + } else { + // Filter is present, but doesn't has data for the current segment yet + $filterData = array(); + for( $count=0; $count < $termInfo->docFreq; $count++ ) { + $docDelta = $frqFile->readVInt(); + if( $docDelta % 2 == 1 ) { + $docId += ($docDelta-1)/2; + } else { + $docId += $docDelta/2; + // read freq + $frqFile->readVInt(); + } + + $result[] = $shift + $docId; + $filterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } + $docsFilter->segmentFilters[$this->_name] = $filterData; + } + } else { + for( $count=0; $count < $termInfo->docFreq; $count++ ) { + $docDelta = $frqFile->readVInt(); + if( $docDelta % 2 == 1 ) { + $docId += ($docDelta-1)/2; + } else { + $docId += $docDelta/2; + // read freq + $frqFile->readVInt(); + } + + $result[] = $shift + $docId; + } + } + + return $result; + } + + /** + * Returns term freqs array. + * Result array structure: array(docId => freq, ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param integer $shift + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return Zend_Search_Lucene_Index_TermInfo + */ + public function termFreqs(Zend_Search_Lucene_Index_Term $term, $shift = 0, $docsFilter = null) + { + $termInfo = $this->getTermInfo($term); + + if (!$termInfo instanceof Zend_Search_Lucene_Index_TermInfo) { + if ($docsFilter !== null && $docsFilter instanceof Zend_Search_Lucene_Index_DocsFilter) { + $docsFilter->segmentFilters[$this->_name] = array(); + } + return array(); + } + + $frqFile = $this->openCompoundFile('.frq'); + $frqFile->seek($termInfo->freqPointer,SEEK_CUR); + $result = array(); + $docId = 0; + + $result = array(); + + if ($docsFilter !== null) { + if (!$docsFilter instanceof Zend_Search_Lucene_Index_DocsFilter) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Documents filter must be an instance of Zend_Search_Lucene_Index_DocsFilter or null.'); + } + + if (isset($docsFilter->segmentFilters[$this->_name])) { + // Filter already has some data for the current segment + + // Make short name for the filter (which doesn't need additional dereferencing) + $filter = &$docsFilter->segmentFilters[$this->_name]; + + // Check if filter is not empty + if (count($filter) == 0) { + return array(); + } + + + if ($this->_docCount/count($filter) < self::FULL_SCAN_VS_FETCH_BOUNDARY) { + // Perform fetching +// --------------------------------------------------------------- + $updatedFilterData = array(); + + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + if (isset($filter[$docId])) { + $result[$shift + $docId] = 1; + $updatedFilterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } + } else { + $docId += $docDelta/2; + $freq = $frqFile->readVInt(); + if (isset($filter[$docId])) { + $result[$shift + $docId] = $freq; + $updatedFilterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } + } + } + $docsFilter->segmentFilters[$this->_name] = $updatedFilterData; +// --------------------------------------------------------------- + } else { + // Perform full scan + $updatedFilterData = array(); + + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + if (isset($filter[$docId])) { + $result[$shift + $docId] = 1; + $updatedFilterData[$docId] = 1; // 1 is just some constant value, so we don't need additional var dereference here + } + } else { + $docId += $docDelta/2; + $freq = $frqFile->readVInt(); + if (isset($filter[$docId])) { + $result[$shift + $docId] = $freq; + $updatedFilterData[$docId] = 1; // 1 is just some constant value, so we don't need additional var dereference here + } + } + } + $docsFilter->segmentFilters[$this->_name] = $updatedFilterData; + } + } else { + // Filter doesn't has data for current segment + $filterData = array(); + + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + $result[$shift + $docId] = 1; + $filterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } else { + $docId += $docDelta/2; + $result[$shift + $docId] = $frqFile->readVInt(); + $filterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + } + } + + $docsFilter->segmentFilters[$this->_name] = $filterData; + } + } else { + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + $result[$shift + $docId] = 1; + } else { + $docId += $docDelta/2; + $result[$shift + $docId] = $frqFile->readVInt(); + } + } + } + + return $result; + } + + /** + * Returns term positions array. + * Result array structure: array(docId => array(pos1, pos2, ...), ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param integer $shift + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return Zend_Search_Lucene_Index_TermInfo + */ + public function termPositions(Zend_Search_Lucene_Index_Term $term, $shift = 0, $docsFilter = null) + { + $termInfo = $this->getTermInfo($term); + + if (!$termInfo instanceof Zend_Search_Lucene_Index_TermInfo) { + if ($docsFilter !== null && $docsFilter instanceof Zend_Search_Lucene_Index_DocsFilter) { + $docsFilter->segmentFilters[$this->_name] = array(); + } + return array(); + } + + $frqFile = $this->openCompoundFile('.frq'); + $frqFile->seek($termInfo->freqPointer,SEEK_CUR); + + $docId = 0; + $freqs = array(); + + + if ($docsFilter !== null) { + if (!$docsFilter instanceof Zend_Search_Lucene_Index_DocsFilter) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Documents filter must be an instance of Zend_Search_Lucene_Index_DocsFilter or null.'); + } + + if (isset($docsFilter->segmentFilters[$this->_name])) { + // Filter already has some data for the current segment + + // Make short name for the filter (which doesn't need additional dereferencing) + $filter = &$docsFilter->segmentFilters[$this->_name]; + + // Check if filter is not empty + if (count($filter) == 0) { + return array(); + } + + if ($this->_docCount/count($filter) < self::FULL_SCAN_VS_FETCH_BOUNDARY) { + // Perform fetching +// --------------------------------------------------------------- + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + $freqs[$docId] = 1; + } else { + $docId += $docDelta/2; + $freqs[$docId] = $frqFile->readVInt(); + } + } + + $updatedFilterData = array(); + $result = array(); + $prxFile = $this->openCompoundFile('.prx'); + $prxFile->seek($termInfo->proxPointer, SEEK_CUR); + foreach ($freqs as $docId => $freq) { + $termPosition = 0; + $positions = array(); + + // we have to read .prx file to get right position for next doc + // even filter doesn't match current document + for ($count = 0; $count < $freq; $count++ ) { + $termPosition += $prxFile->readVInt(); + $positions[] = $termPosition; + } + + // Include into updated filter and into result only if doc is matched by filter + if (isset($filter[$docId])) { + $updatedFilterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + $result[$shift + $docId] = $positions; + } + } + + $docsFilter->segmentFilters[$this->_name] = $updatedFilterData; +// --------------------------------------------------------------- + } else { + // Perform full scan + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + $freqs[$docId] = 1; + } else { + $docId += $docDelta/2; + $freqs[$docId] = $frqFile->readVInt(); + } + } + + $updatedFilterData = array(); + $result = array(); + $prxFile = $this->openCompoundFile('.prx'); + $prxFile->seek($termInfo->proxPointer, SEEK_CUR); + foreach ($freqs as $docId => $freq) { + $termPosition = 0; + $positions = array(); + + // we have to read .prx file to get right position for next doc + // even filter doesn't match current document + for ($count = 0; $count < $freq; $count++ ) { + $termPosition += $prxFile->readVInt(); + $positions[] = $termPosition; + } + + // Include into updated filter and into result only if doc is matched by filter + if (isset($filter[$docId])) { + $updatedFilterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + $result[$shift + $docId] = $positions; + } + } + + $docsFilter->segmentFilters[$this->_name] = $updatedFilterData; + } + } else { + // Filter doesn't has data for current segment + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + $freqs[$docId] = 1; + } else { + $docId += $docDelta/2; + $freqs[$docId] = $frqFile->readVInt(); + } + } + + $filterData = array(); + $result = array(); + $prxFile = $this->openCompoundFile('.prx'); + $prxFile->seek($termInfo->proxPointer, SEEK_CUR); + foreach ($freqs as $docId => $freq) { + $filterData[$docId] = 1; // 1 is just a some constant value, so we don't need additional var dereference here + + $termPosition = 0; + $positions = array(); + + for ($count = 0; $count < $freq; $count++ ) { + $termPosition += $prxFile->readVInt(); + $positions[] = $termPosition; + } + + $result[$shift + $docId] = $positions; + } + + $docsFilter->segmentFilters[$this->_name] = $filterData; + } + } else { + for ($count = 0; $count < $termInfo->docFreq; $count++) { + $docDelta = $frqFile->readVInt(); + if ($docDelta % 2 == 1) { + $docId += ($docDelta-1)/2; + $freqs[$docId] = 1; + } else { + $docId += $docDelta/2; + $freqs[$docId] = $frqFile->readVInt(); + } + } + + $result = array(); + $prxFile = $this->openCompoundFile('.prx'); + $prxFile->seek($termInfo->proxPointer, SEEK_CUR); + foreach ($freqs as $docId => $freq) { + $termPosition = 0; + $positions = array(); + + for ($count = 0; $count < $freq; $count++ ) { + $termPosition += $prxFile->readVInt(); + $positions[] = $termPosition; + } + + $result[$shift + $docId] = $positions; + } + } + + return $result; + } + + /** + * Load normalizatin factors from an index file + * + * @param integer $fieldNum + * @throws Zend_Search_Lucene_Exception + */ + private function _loadNorm($fieldNum) + { + if ($this->_hasSingleNormFile) { + $normfFile = $this->openCompoundFile('.nrm'); + + $header = $normfFile->readBytes(3); + $headerFormatVersion = $normfFile->readByte(); + + if ($header != 'NRM' || $headerFormatVersion != (int)0xFF) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong norms file format.'); + } + + foreach ($this->_fields as $fNum => $fieldInfo) { + if ($fieldInfo->isIndexed) { + $this->_norms[$fNum] = $normfFile->readBytes($this->_docCount); + } + } + } else { + $fFile = $this->openCompoundFile('.f' . $fieldNum); + $this->_norms[$fieldNum] = $fFile->readBytes($this->_docCount); + } + } + + /** + * Returns normalization factor for specified documents + * + * @param integer $id + * @param string $fieldName + * @return float + */ + public function norm($id, $fieldName) + { + $fieldNum = $this->getFieldNum($fieldName); + + if ( !($this->_fields[$fieldNum]->isIndexed) ) { + return null; + } + + if (!isset($this->_norms[$fieldNum])) { + $this->_loadNorm($fieldNum); + } + + return Zend_Search_Lucene_Search_Similarity::decodeNorm( ord($this->_norms[$fieldNum][$id]) ); + } + + /** + * Returns norm vector, encoded in a byte string + * + * @param string $fieldName + * @return string + */ + public function normVector($fieldName) + { + $fieldNum = $this->getFieldNum($fieldName); + + if ($fieldNum == -1 || !($this->_fields[$fieldNum]->isIndexed)) { + $similarity = Zend_Search_Lucene_Search_Similarity::getDefault(); + + return str_repeat(chr($similarity->encodeNorm( $similarity->lengthNorm($fieldName, 0) )), + $this->_docCount); + } + + if (!isset($this->_norms[$fieldNum])) { + $this->_loadNorm($fieldNum); + } + + return $this->_norms[$fieldNum]; + } + + + /** + * Returns true if any documents have been deleted from this index segment. + * + * @return boolean + */ + public function hasDeletions() + { + return $this->_deleted !== null; + } + + + /** + * Returns true if segment has single norms file. + * + * @return boolean + */ + public function hasSingleNormFile() + { + return $this->_hasSingleNormFile ? true : false; + } + + /** + * Returns true if segment is stored using compound segment file. + * + * @return boolean + */ + public function isCompound() + { + return $this->_isCompound; + } + + /** + * Deletes a document from the index segment. + * $id is an internal document id + * + * @param integer + */ + public function delete($id) + { + $this->_deletedDirty = true; + + if (extension_loaded('bitset')) { + if ($this->_deleted === null) { + $this->_deleted = bitset_empty($id); + } + bitset_incl($this->_deleted, $id); + } else { + if ($this->_deleted === null) { + $this->_deleted = array(); + } + + $this->_deleted[$id] = 1; + } + } + + /** + * Checks, that document is deleted + * + * @param integer + * @return boolean + */ + public function isDeleted($id) + { + if ($this->_deleted === null) { + return false; + } + + if (extension_loaded('bitset')) { + return bitset_in($this->_deleted, $id); + } else { + return isset($this->_deleted[$id]); + } + } + + /** + * Detect latest delete generation + * + * Is actualy used from writeChanges() method or from the constructor if it's invoked from + * Index writer. In both cases index write lock is already obtained, so we shouldn't care + * about it + * + * @return integer + */ + private function _detectLatestDelGen() + { + $delFileList = array(); + foreach ($this->_directory->fileList() as $file) { + if ($file == $this->_name . '.del') { + // Matches .del file name + $delFileList[] = 0; + } else if (preg_match('/^' . $this->_name . '_([a-zA-Z0-9]+)\.del$/i', $file, $matches)) { + // Matches _NNN.del file names + $delFileList[] = (int)base_convert($matches[1], 36, 10); + } + } + + if (count($delFileList) == 0) { + // There is no deletions file for current segment in the directory + // Set deletions file generation number to 1 + return -1; + } else { + // There are some deletions files for current segment in the directory + // Set deletions file generation number to the highest nuber + return max($delFileList); + } + } + + /** + * Write changes if it's necessary. + * + * This method must be invoked only from the Writer _updateSegments() method, + * so index Write lock has to be already obtained. + * + * @internal + * @throws Zend_Search_Lucene_Exceptions + */ + public function writeChanges() + { + // Get new generation number + $latestDelGen = $this->_detectLatestDelGen(); + + if (!$this->_deletedDirty) { + // There was no deletions by current process + + if ($latestDelGen == $this->_delGen) { + // Delete file hasn't been updated by any concurrent process + return; + } else if ($latestDelGen > $this->_delGen) { + // Delete file has been updated by some concurrent process + // Reload deletions file + $this->_delGen = $latestDelGen; + $this->_deleted = $this->_loadDelFile(); + + return; + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Delete file processing workflow is corrupted for the segment \'' . $this->_name . '\'.'); + } + } + + if ($latestDelGen > $this->_delGen) { + // Merge current deletions with latest deletions file + $this->_delGen = $latestDelGen; + + $latestDelete = $this->_loadDelFile(); + + if (extension_loaded('bitset')) { + $this->_deleted = bitset_union($this->_deleted, $latestDelete); + } else { + $this->_deleted += $latestDelete; + } + } + + if (extension_loaded('bitset')) { + $delBytes = $this->_deleted; + $bitCount = count(bitset_to_array($delBytes)); + } else { + $byteCount = floor($this->_docCount/8)+1; + $delBytes = str_repeat(chr(0), $byteCount); + for ($count = 0; $count < $byteCount; $count++) { + $byte = 0; + for ($bit = 0; $bit < 8; $bit++) { + if (isset($this->_deleted[$count*8 + $bit])) { + $byte |= (1<<$bit); + } + } + $delBytes[$count] = chr($byte); + } + $bitCount = count($this->_deleted); + } + + if ($this->_delGen == -1) { + // Set delete file generation number to 1 + $this->_delGen = 1; + } else { + // Increase delete file generation number by 1 + $this->_delGen++; + } + + $delFile = $this->_directory->createFile($this->_name . '_' . base_convert($this->_delGen, 10, 36) . '.del'); + $delFile->writeInt($this->_docCount); + $delFile->writeInt($bitCount); + $delFile->writeBytes($delBytes); + + $this->_deletedDirty = false; + } + + + /** + * Term Dictionary File object for stream like terms reading + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_tisFile = null; + + /** + * Actual offset of the .tis file data + * + * @var integer + */ + private $_tisFileOffset; + + /** + * Frequencies File object for stream like terms reading + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_frqFile = null; + + /** + * Actual offset of the .frq file data + * + * @var integer + */ + private $_frqFileOffset; + + /** + * Positions File object for stream like terms reading + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_prxFile = null; + + /** + * Actual offset of the .prx file in the compound file + * + * @var integer + */ + private $_prxFileOffset; + + + /** + * Actual number of terms in term stream + * + * @var integer + */ + private $_termCount = 0; + + /** + * Overall number of terms in term stream + * + * @var integer + */ + private $_termNum = 0; + + /** + * Segment index interval + * + * @var integer + */ + private $_indexInterval; + + /** + * Segment skip interval + * + * @var integer + */ + private $_skipInterval; + + /** + * Last TermInfo in a terms stream + * + * @var Zend_Search_Lucene_Index_TermInfo + */ + private $_lastTermInfo = null; + + /** + * Last Term in a terms stream + * + * @var Zend_Search_Lucene_Index_Term + */ + private $_lastTerm = null; + + /** + * Map of the document IDs + * Used to get new docID after removing deleted documents. + * It's not very effective from memory usage point of view, + * but much more faster, then other methods + * + * @var array|null + */ + private $_docMap = null; + + /** + * An array of all term positions in the documents. + * Array structure: array( docId => array( pos1, pos2, ...), ...) + * + * Is set to null if term positions loading has to be skipped + * + * @var array|null + */ + private $_lastTermPositions; + + + /** + * Terms scan mode + * + * Values: + * + * self::SM_TERMS_ONLY - terms are scanned, no additional info is retrieved + * self::SM_FULL_INFO - terms are scanned, frequency and position info is retrieved + * self::SM_MERGE_INFO - terms are scanned, frequency and position info is retrieved + * document numbers are compacted (shifted if segment has deleted documents) + * + * @var integer + */ + private $_termsScanMode; + + /** Scan modes */ + const SM_TERMS_ONLY = 0; // terms are scanned, no additional info is retrieved + const SM_FULL_INFO = 1; // terms are scanned, frequency and position info is retrieved + const SM_MERGE_INFO = 2; // terms are scanned, frequency and position info is retrieved + // document numbers are compacted (shifted if segment contains deleted documents) + + /** + * Reset terms stream + * + * $startId - id for the fist document + * $compact - remove deleted documents + * + * Returns start document id for the next segment + * + * @param integer $startId + * @param integer $mode + * @throws Zend_Search_Lucene_Exception + * @return integer + */ + public function resetTermsStream(/** $startId = 0, $mode = self::SM_TERMS_ONLY */) + { + /** + * SegmentInfo->resetTermsStream() method actually takes two optional parameters: + * $startId (default value is 0) + * $mode (default value is self::SM_TERMS_ONLY) + */ + $argList = func_get_args(); + if (count($argList) > 2) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong number of arguments'); + } else if (count($argList) == 2) { + $startId = $argList[0]; + $mode = $argList[1]; + } else if (count($argList) == 1) { + $startId = $argList[0]; + $mode = self::SM_TERMS_ONLY; + } else { + $startId = 0; + $mode = self::SM_TERMS_ONLY; + } + + if ($this->_tisFile !== null) { + $this->_tisFile = null; + } + + $this->_tisFile = $this->openCompoundFile('.tis', false); + $this->_tisFileOffset = $this->_tisFile->tell(); + + $tiVersion = $this->_tisFile->readInt(); + if ($tiVersion != (int)0xFFFFFFFE /* pre-2.1 format */ && + $tiVersion != (int)0xFFFFFFFD /* 2.1+ format */) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong TermInfoFile file format'); + } + + $this->_termCount = + $this->_termNum = $this->_tisFile->readLong(); // Read terms count + $this->_indexInterval = $this->_tisFile->readInt(); // Read Index interval + $this->_skipInterval = $this->_tisFile->readInt(); // Read skip interval + if ($tiVersion == (int)0xFFFFFFFD /* 2.1+ format */) { + $maxSkipLevels = $this->_tisFile->readInt(); + } + + if ($this->_frqFile !== null) { + $this->_frqFile = null; + } + if ($this->_prxFile !== null) { + $this->_prxFile = null; + } + $this->_docMap = array(); + + $this->_lastTerm = new Zend_Search_Lucene_Index_Term('', -1); + $this->_lastTermInfo = new Zend_Search_Lucene_Index_TermInfo(0, 0, 0, 0); + $this->_lastTermPositions = null; + + $this->_termsScanMode = $mode; + + switch ($mode) { + case self::SM_TERMS_ONLY: + // Do nothing + break; + + case self::SM_FULL_INFO: + // break intentionally omitted + case self::SM_MERGE_INFO: + $this->_frqFile = $this->openCompoundFile('.frq', false); + $this->_frqFileOffset = $this->_frqFile->tell(); + + $this->_prxFile = $this->openCompoundFile('.prx', false); + $this->_prxFileOffset = $this->_prxFile->tell(); + + for ($count = 0; $count < $this->_docCount; $count++) { + if (!$this->isDeleted($count)) { + $this->_docMap[$count] = $startId + (($mode == self::SM_MERGE_INFO) ? count($this->_docMap) : $count); + } + } + break; + + default: + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong terms scaning mode specified.'); + break; + } + + // Calculate next segment start id (since $this->_docMap structure may be cleaned by $this->nextTerm() call) + $nextSegmentStartId = $startId + (($mode == self::SM_MERGE_INFO) ? count($this->_docMap) : $this->_docCount); + $this->nextTerm(); + + return $nextSegmentStartId; + } + + + /** + * Skip terms stream up to the specified term preffix. + * + * Prefix contains fully specified field info and portion of searched term + * + * @param Zend_Search_Lucene_Index_Term $prefix + * @throws Zend_Search_Lucene_Exception + */ + public function skipTo(Zend_Search_Lucene_Index_Term $prefix) + { + if ($this->_termDictionary === null) { + $this->_loadDictionaryIndex(); + } + + $searchField = $this->getFieldNum($prefix->field); + + if ($searchField == -1) { + /** + * Field is not presented in this segment + * Go to the end of dictionary + */ + $this->_tisFile = null; + $this->_frqFile = null; + $this->_prxFile = null; + + $this->_lastTerm = null; + $this->_lastTermInfo = null; + $this->_lastTermPositions = null; + + return; + } + $searchDicField = $this->_getFieldPosition($searchField); + + // search for appropriate value in dictionary + $lowIndex = 0; + $highIndex = count($this->_termDictionary)-1; + while ($highIndex >= $lowIndex) { + // $mid = ($highIndex - $lowIndex)/2; + $mid = ($highIndex + $lowIndex) >> 1; + $midTerm = $this->_termDictionary[$mid]; + + $fieldNum = $this->_getFieldPosition($midTerm[0] /* field */); + $delta = $searchDicField - $fieldNum; + if ($delta == 0) { + $delta = strcmp($prefix->text, $midTerm[1] /* text */); + } + + if ($delta < 0) { + $highIndex = $mid-1; + } elseif ($delta > 0) { + $lowIndex = $mid+1; + } else { + // We have reached term we are looking for + break; + } + } + + if ($highIndex == -1) { + // Term is out of the dictionary range + $this->_tisFile = null; + $this->_frqFile = null; + $this->_prxFile = null; + + $this->_lastTerm = null; + $this->_lastTermInfo = null; + $this->_lastTermPositions = null; + + return; + } + + $prevPosition = $highIndex; + $prevTerm = $this->_termDictionary[$prevPosition]; + $prevTermInfo = $this->_termDictionaryInfos[$prevPosition]; + + if ($this->_tisFile === null) { + // The end of terms stream is reached and terms dictionary file is closed + // Perform mini-reset operation + $this->_tisFile = $this->openCompoundFile('.tis', false); + + if ($this->_termsScanMode == self::SM_FULL_INFO || $this->_termsScanMode == self::SM_MERGE_INFO) { + $this->_frqFile = $this->openCompoundFile('.frq', false); + $this->_prxFile = $this->openCompoundFile('.prx', false); + } + } + $this->_tisFile->seek($this->_tisFileOffset + $prevTermInfo[4], SEEK_SET); + + $this->_lastTerm = new Zend_Search_Lucene_Index_Term($prevTerm[1] /* text */, + ($prevTerm[0] == -1) ? '' : $this->_fields[$prevTerm[0] /* field */]->name); + $this->_lastTermInfo = new Zend_Search_Lucene_Index_TermInfo($prevTermInfo[0] /* docFreq */, + $prevTermInfo[1] /* freqPointer */, + $prevTermInfo[2] /* proxPointer */, + $prevTermInfo[3] /* skipOffset */); + $this->_termCount = $this->_termNum - $prevPosition*$this->_indexInterval; + + if ($highIndex == 0) { + // skip start entry + $this->nextTerm(); + } else if ($prefix->field == $this->_lastTerm->field && $prefix->text == $this->_lastTerm->text) { + // We got exact match in the dictionary index + + if ($this->_termsScanMode == self::SM_FULL_INFO || $this->_termsScanMode == self::SM_MERGE_INFO) { + $this->_lastTermPositions = array(); + + $this->_frqFile->seek($this->_lastTermInfo->freqPointer + $this->_frqFileOffset, SEEK_SET); + $freqs = array(); $docId = 0; + for( $count = 0; $count < $this->_lastTermInfo->docFreq; $count++ ) { + $docDelta = $this->_frqFile->readVInt(); + if( $docDelta % 2 == 1 ) { + $docId += ($docDelta-1)/2; + $freqs[ $docId ] = 1; + } else { + $docId += $docDelta/2; + $freqs[ $docId ] = $this->_frqFile->readVInt(); + } + } + + $this->_prxFile->seek($this->_lastTermInfo->proxPointer + $this->_prxFileOffset, SEEK_SET); + foreach ($freqs as $docId => $freq) { + $termPosition = 0; $positions = array(); + + for ($count = 0; $count < $freq; $count++ ) { + $termPosition += $this->_prxFile->readVInt(); + $positions[] = $termPosition; + } + + if (isset($this->_docMap[$docId])) { + $this->_lastTermPositions[$this->_docMap[$docId]] = $positions; + } + } + } + + return; + } + + // Search term matching specified prefix + while ($this->_lastTerm !== null) { + if ( strcmp($this->_lastTerm->field, $prefix->field) > 0 || + ($prefix->field == $this->_lastTerm->field && strcmp($this->_lastTerm->text, $prefix->text) >= 0) ) { + // Current term matches or greate than the pattern + return; + } + + $this->nextTerm(); + } + } + + + /** + * Scans terms dictionary and returns next term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function nextTerm() + { + if ($this->_tisFile === null || $this->_termCount == 0) { + $this->_lastTerm = null; + $this->_lastTermInfo = null; + $this->_lastTermPositions = null; + $this->_docMap = null; + + // may be necessary for "empty" segment + $this->_tisFile = null; + $this->_frqFile = null; + $this->_prxFile = null; + + return null; + } + + $termPrefixLength = $this->_tisFile->readVInt(); + $termSuffix = $this->_tisFile->readString(); + $termFieldNum = $this->_tisFile->readVInt(); + $termValue = Zend_Search_Lucene_Index_Term::getPrefix($this->_lastTerm->text, $termPrefixLength) . $termSuffix; + + $this->_lastTerm = new Zend_Search_Lucene_Index_Term($termValue, $this->_fields[$termFieldNum]->name); + + $docFreq = $this->_tisFile->readVInt(); + $freqPointer = $this->_lastTermInfo->freqPointer + $this->_tisFile->readVInt(); + $proxPointer = $this->_lastTermInfo->proxPointer + $this->_tisFile->readVInt(); + if ($docFreq >= $this->_skipInterval) { + $skipOffset = $this->_tisFile->readVInt(); + } else { + $skipOffset = 0; + } + + $this->_lastTermInfo = new Zend_Search_Lucene_Index_TermInfo($docFreq, $freqPointer, $proxPointer, $skipOffset); + + + if ($this->_termsScanMode == self::SM_FULL_INFO || $this->_termsScanMode == self::SM_MERGE_INFO) { + $this->_lastTermPositions = array(); + + $this->_frqFile->seek($this->_lastTermInfo->freqPointer + $this->_frqFileOffset, SEEK_SET); + $freqs = array(); $docId = 0; + for( $count = 0; $count < $this->_lastTermInfo->docFreq; $count++ ) { + $docDelta = $this->_frqFile->readVInt(); + if( $docDelta % 2 == 1 ) { + $docId += ($docDelta-1)/2; + $freqs[ $docId ] = 1; + } else { + $docId += $docDelta/2; + $freqs[ $docId ] = $this->_frqFile->readVInt(); + } + } + + $this->_prxFile->seek($this->_lastTermInfo->proxPointer + $this->_prxFileOffset, SEEK_SET); + foreach ($freqs as $docId => $freq) { + $termPosition = 0; $positions = array(); + + for ($count = 0; $count < $freq; $count++ ) { + $termPosition += $this->_prxFile->readVInt(); + $positions[] = $termPosition; + } + + if (isset($this->_docMap[$docId])) { + $this->_lastTermPositions[$this->_docMap[$docId]] = $positions; + } + } + } + + $this->_termCount--; + if ($this->_termCount == 0) { + $this->_tisFile = null; + $this->_frqFile = null; + $this->_prxFile = null; + } + + return $this->_lastTerm; + } + + /** + * Close terms stream + * + * Should be used for resources clean up if stream is not read up to the end + */ + public function closeTermsStream() + { + $this->_tisFile = null; + $this->_frqFile = null; + $this->_prxFile = null; + + $this->_lastTerm = null; + $this->_lastTermInfo = null; + $this->_lastTermPositions = null; + + $this->_docMap = null; + } + + + /** + * Returns term in current position + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function currentTerm() + { + return $this->_lastTerm; + } + + + /** + * Returns an array of all term positions in the documents. + * Return array structure: array( docId => array( pos1, pos2, ...), ...) + * + * @return array + */ + public function currentTermPositions() + { + return $this->_lastTermPositions; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentMerger.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentMerger.php new file mode 100644 index 00000000000..109f2f62db8 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentMerger.php @@ -0,0 +1,271 @@ +][] => + * + * @var array + */ + private $_fieldsMap = array(); + + + + /** + * Object constructor. + * + * Creates new segment merger with $directory as target to merge segments into + * and $name as a name of new segment + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @param string $name + */ + public function __construct($directory, $name) + { + /** Zend_Search_Lucene_Index_SegmentWriter_StreamWriter */ + require_once 'Zend/Search/Lucene/Index/SegmentWriter/StreamWriter.php'; + $this->_writer = new Zend_Search_Lucene_Index_SegmentWriter_StreamWriter($directory, $name); + } + + + /** + * Add segmnet to a collection of segments to be merged + * + * @param Zend_Search_Lucene_Index_SegmentInfo $segment + */ + public function addSource(Zend_Search_Lucene_Index_SegmentInfo $segmentInfo) + { + $this->_segmentInfos[$segmentInfo->getName()] = $segmentInfo; + } + + + /** + * Do merge. + * + * Returns number of documents in newly created segment + * + * @return Zend_Search_Lucene_Index_SegmentInfo + * @throws Zend_Search_Lucene_Exception + */ + public function merge() + { + if ($this->_mergeDone) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Merge is already done.'); + } + + if (count($this->_segmentInfos) < 1) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wrong number of segments to be merged (' + . count($this->_segmentInfos) + . ').'); + } + + $this->_mergeFields(); + $this->_mergeNorms(); + $this->_mergeStoredFields(); + $this->_mergeTerms(); + + $this->_mergeDone = true; + + return $this->_writer->close(); + } + + + /** + * Merge fields information + */ + private function _mergeFields() + { + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + foreach ($segmentInfo->getFieldInfos() as $fieldInfo) { + $this->_fieldsMap[$segName][$fieldInfo->number] = $this->_writer->addFieldInfo($fieldInfo); + } + } + } + + /** + * Merge field's normalization factors + */ + private function _mergeNorms() + { + foreach ($this->_writer->getFieldInfos() as $fieldInfo) { + if ($fieldInfo->isIndexed) { + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + if ($segmentInfo->hasDeletions()) { + $srcNorm = $segmentInfo->normVector($fieldInfo->name); + $norm = ''; + $docs = $segmentInfo->count(); + for ($count = 0; $count < $docs; $count++) { + if (!$segmentInfo->isDeleted($count)) { + $norm .= $srcNorm[$count]; + } + } + $this->_writer->addNorm($fieldInfo->name, $norm); + } else { + $this->_writer->addNorm($fieldInfo->name, $segmentInfo->normVector($fieldInfo->name)); + } + } + } + } + } + + /** + * Merge fields information + */ + private function _mergeStoredFields() + { + $this->_docCount = 0; + + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + $fdtFile = $segmentInfo->openCompoundFile('.fdt'); + + for ($count = 0; $count < $segmentInfo->count(); $count++) { + $fieldCount = $fdtFile->readVInt(); + $storedFields = array(); + + for ($count2 = 0; $count2 < $fieldCount; $count2++) { + $fieldNum = $fdtFile->readVInt(); + $bits = $fdtFile->readByte(); + $fieldInfo = $segmentInfo->getField($fieldNum); + + if (!($bits & 2)) { // Text data + $storedFields[] = + new Zend_Search_Lucene_Field($fieldInfo->name, + $fdtFile->readString(), + 'UTF-8', + true, + $fieldInfo->isIndexed, + $bits & 1 ); + } else { // Binary data + $storedFields[] = + new Zend_Search_Lucene_Field($fieldInfo->name, + $fdtFile->readBinary(), + '', + true, + $fieldInfo->isIndexed, + $bits & 1, + true); + } + } + + if (!$segmentInfo->isDeleted($count)) { + $this->_docCount++; + $this->_writer->addStoredFields($storedFields); + } + } + } + } + + + /** + * Merge fields information + */ + private function _mergeTerms() + { + /** Zend_Search_Lucene_Index_TermsPriorityQueue */ + require_once 'Zend/Search/Lucene/Index/TermsPriorityQueue.php'; + + $segmentInfoQueue = new Zend_Search_Lucene_Index_TermsPriorityQueue(); + + $segmentStartId = 0; + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + $segmentStartId = $segmentInfo->resetTermsStream($segmentStartId, Zend_Search_Lucene_Index_SegmentInfo::SM_MERGE_INFO); + + // Skip "empty" segments + if ($segmentInfo->currentTerm() !== null) { + $segmentInfoQueue->put($segmentInfo); + } + } + + $this->_writer->initializeDictionaryFiles(); + + $termDocs = array(); + while (($segmentInfo = $segmentInfoQueue->pop()) !== null) { + // Merge positions array + $termDocs += $segmentInfo->currentTermPositions(); + + if ($segmentInfoQueue->top() === null || + $segmentInfoQueue->top()->currentTerm()->key() != + $segmentInfo->currentTerm()->key()) { + // We got new term + ksort($termDocs, SORT_NUMERIC); + + // Add term if it's contained in any document + if (count($termDocs) > 0) { + $this->_writer->addTerm($segmentInfo->currentTerm(), $termDocs); + } + $termDocs = array(); + } + + $segmentInfo->nextTerm(); + // check, if segment dictionary is finished + if ($segmentInfo->currentTerm() !== null) { + // Put segment back into the priority queue + $segmentInfoQueue->put($segmentInfo); + } + } + + $this->_writer->closeDictionaryFiles(); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter.php new file mode 100644 index 00000000000..d80d2cc6dba --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter.php @@ -0,0 +1,634 @@ + normVector + * normVector is a binary string. + * Each byte corresponds to an indexed document in a segment and + * encodes normalization factor (float value, encoded by + * Zend_Search_Lucene_Search_Similarity::encodeNorm()) + * + * @var array + */ + protected $_norms = array(); + + + /** + * '.fdx' file - Stored Fields, the field index. + * + * @var Zend_Search_Lucene_Storage_File + */ + protected $_fdxFile = null; + + /** + * '.fdt' file - Stored Fields, the field data. + * + * @var Zend_Search_Lucene_Storage_File + */ + protected $_fdtFile = null; + + + /** + * Object constructor. + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @param string $name + */ + public function __construct(Zend_Search_Lucene_Storage_Directory $directory, $name) + { + $this->_directory = $directory; + $this->_name = $name; + } + + + /** + * Add field to the segment + * + * Returns actual field number + * + * @param Zend_Search_Lucene_Field $field + * @return integer + */ + public function addField(Zend_Search_Lucene_Field $field) + { + if (!isset($this->_fields[$field->name])) { + $fieldNumber = count($this->_fields); + $this->_fields[$field->name] = + new Zend_Search_Lucene_Index_FieldInfo($field->name, + $field->isIndexed, + $fieldNumber, + $field->storeTermVector); + + return $fieldNumber; + } else { + $this->_fields[$field->name]->isIndexed |= $field->isIndexed; + $this->_fields[$field->name]->storeTermVector |= $field->storeTermVector; + + return $this->_fields[$field->name]->number; + } + } + + /** + * Add fieldInfo to the segment + * + * Returns actual field number + * + * @param Zend_Search_Lucene_Index_FieldInfo $fieldInfo + * @return integer + */ + public function addFieldInfo(Zend_Search_Lucene_Index_FieldInfo $fieldInfo) + { + if (!isset($this->_fields[$fieldInfo->name])) { + $fieldNumber = count($this->_fields); + $this->_fields[$fieldInfo->name] = + new Zend_Search_Lucene_Index_FieldInfo($fieldInfo->name, + $fieldInfo->isIndexed, + $fieldNumber, + $fieldInfo->storeTermVector); + + return $fieldNumber; + } else { + $this->_fields[$fieldInfo->name]->isIndexed |= $fieldInfo->isIndexed; + $this->_fields[$fieldInfo->name]->storeTermVector |= $fieldInfo->storeTermVector; + + return $this->_fields[$fieldInfo->name]->number; + } + } + + /** + * Returns array of FieldInfo objects. + * + * @return array + */ + public function getFieldInfos() + { + return $this->_fields; + } + + /** + * Add stored fields information + * + * @param array $storedFields array of Zend_Search_Lucene_Field objects + */ + public function addStoredFields($storedFields) + { + if (!isset($this->_fdxFile)) { + $this->_fdxFile = $this->_directory->createFile($this->_name . '.fdx'); + $this->_fdtFile = $this->_directory->createFile($this->_name . '.fdt'); + + $this->_files[] = $this->_name . '.fdx'; + $this->_files[] = $this->_name . '.fdt'; + } + + $this->_fdxFile->writeLong($this->_fdtFile->tell()); + $this->_fdtFile->writeVInt(count($storedFields)); + foreach ($storedFields as $field) { + $this->_fdtFile->writeVInt($this->_fields[$field->name]->number); + $fieldBits = ($field->isTokenized ? 0x01 : 0x00) | + ($field->isBinary ? 0x02 : 0x00) | + 0x00; /* 0x04 - third bit, compressed (ZLIB) */ + $this->_fdtFile->writeByte($fieldBits); + if ($field->isBinary) { + $this->_fdtFile->writeVInt(strlen($field->value)); + $this->_fdtFile->writeBytes($field->value); + } else { + $this->_fdtFile->writeString($field->getUtf8Value()); + } + } + + $this->_docCount++; + } + + /** + * Returns the total number of documents in this segment. + * + * @return integer + */ + public function count() + { + return $this->_docCount; + } + + /** + * Return segment name + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Dump Field Info (.fnm) segment file + */ + protected function _dumpFNM() + { + $fnmFile = $this->_directory->createFile($this->_name . '.fnm'); + $fnmFile->writeVInt(count($this->_fields)); + + $nrmFile = $this->_directory->createFile($this->_name . '.nrm'); + // Write header + $nrmFile->writeBytes('NRM'); + // Write format specifier + $nrmFile->writeByte((int)0xFF); + + foreach ($this->_fields as $field) { + $fnmFile->writeString($field->name); + $fnmFile->writeByte(($field->isIndexed ? 0x01 : 0x00) | + ($field->storeTermVector ? 0x02 : 0x00) +// not supported yet 0x04 /* term positions are stored with the term vectors */ | +// not supported yet 0x08 /* term offsets are stored with the term vectors */ | + ); + + if ($field->isIndexed) { + // pre-2.1 index mode (not used now) + // $normFileName = $this->_name . '.f' . $field->number; + // $fFile = $this->_directory->createFile($normFileName); + // $fFile->writeBytes($this->_norms[$field->name]); + // $this->_files[] = $normFileName; + + $nrmFile->writeBytes($this->_norms[$field->name]); + } + } + + $this->_files[] = $this->_name . '.fnm'; + $this->_files[] = $this->_name . '.nrm'; + } + + + + /** + * Term Dictionary file + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_tisFile = null; + + /** + * Term Dictionary index file + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_tiiFile = null; + + /** + * Frequencies file + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_frqFile = null; + + /** + * Positions file + * + * @var Zend_Search_Lucene_Storage_File + */ + private $_prxFile = null; + + /** + * Number of written terms + * + * @var integer + */ + private $_termCount; + + + /** + * Last saved term + * + * @var Zend_Search_Lucene_Index_Term + */ + private $_prevTerm; + + /** + * Last saved term info + * + * @var Zend_Search_Lucene_Index_TermInfo + */ + private $_prevTermInfo; + + /** + * Last saved index term + * + * @var Zend_Search_Lucene_Index_Term + */ + private $_prevIndexTerm; + + /** + * Last saved index term info + * + * @var Zend_Search_Lucene_Index_TermInfo + */ + private $_prevIndexTermInfo; + + /** + * Last term dictionary file position + * + * @var integer + */ + private $_lastIndexPosition; + + /** + * Create dicrionary, frequency and positions files and write necessary headers + */ + public function initializeDictionaryFiles() + { + $this->_tisFile = $this->_directory->createFile($this->_name . '.tis'); + $this->_tisFile->writeInt((int)0xFFFFFFFD); + $this->_tisFile->writeLong(0 /* dummy data for terms count */); + $this->_tisFile->writeInt(self::$indexInterval); + $this->_tisFile->writeInt(self::$skipInterval); + $this->_tisFile->writeInt(self::$maxSkipLevels); + + $this->_tiiFile = $this->_directory->createFile($this->_name . '.tii'); + $this->_tiiFile->writeInt((int)0xFFFFFFFD); + $this->_tiiFile->writeLong(0 /* dummy data for terms count */); + $this->_tiiFile->writeInt(self::$indexInterval); + $this->_tiiFile->writeInt(self::$skipInterval); + $this->_tiiFile->writeInt(self::$maxSkipLevels); + + /** Dump dictionary header */ + $this->_tiiFile->writeVInt(0); // preffix length + $this->_tiiFile->writeString(''); // suffix + $this->_tiiFile->writeInt((int)0xFFFFFFFF); // field number + $this->_tiiFile->writeByte((int)0x0F); + $this->_tiiFile->writeVInt(0); // DocFreq + $this->_tiiFile->writeVInt(0); // FreqDelta + $this->_tiiFile->writeVInt(0); // ProxDelta + $this->_tiiFile->writeVInt(24); // IndexDelta + + $this->_frqFile = $this->_directory->createFile($this->_name . '.frq'); + $this->_prxFile = $this->_directory->createFile($this->_name . '.prx'); + + $this->_files[] = $this->_name . '.tis'; + $this->_files[] = $this->_name . '.tii'; + $this->_files[] = $this->_name . '.frq'; + $this->_files[] = $this->_name . '.prx'; + + $this->_prevTerm = null; + $this->_prevTermInfo = null; + $this->_prevIndexTerm = null; + $this->_prevIndexTermInfo = null; + $this->_lastIndexPosition = 24; + $this->_termCount = 0; + + } + + /** + * Add term + * + * Term positions is an array( docId => array(pos1, pos2, pos3, ...), ... ) + * + * @param Zend_Search_Lucene_Index_Term $termEntry + * @param array $termDocs + */ + public function addTerm($termEntry, $termDocs) + { + $freqPointer = $this->_frqFile->tell(); + $proxPointer = $this->_prxFile->tell(); + + $prevDoc = 0; + foreach ($termDocs as $docId => $termPositions) { + $docDelta = ($docId - $prevDoc)*2; + $prevDoc = $docId; + if (count($termPositions) > 1) { + $this->_frqFile->writeVInt($docDelta); + $this->_frqFile->writeVInt(count($termPositions)); + } else { + $this->_frqFile->writeVInt($docDelta + 1); + } + + $prevPosition = 0; + foreach ($termPositions as $position) { + $this->_prxFile->writeVInt($position - $prevPosition); + $prevPosition = $position; + } + } + + if (count($termDocs) >= self::$skipInterval) { + /** + * @todo Write Skip Data to a freq file. + * It's not used now, but make index more optimal + */ + $skipOffset = $this->_frqFile->tell() - $freqPointer; + } else { + $skipOffset = 0; + } + + $term = new Zend_Search_Lucene_Index_Term($termEntry->text, + $this->_fields[$termEntry->field]->number); + $termInfo = new Zend_Search_Lucene_Index_TermInfo(count($termDocs), + $freqPointer, $proxPointer, $skipOffset); + + $this->_dumpTermDictEntry($this->_tisFile, $this->_prevTerm, $term, $this->_prevTermInfo, $termInfo); + + if (($this->_termCount + 1) % self::$indexInterval == 0) { + $this->_dumpTermDictEntry($this->_tiiFile, $this->_prevIndexTerm, $term, $this->_prevIndexTermInfo, $termInfo); + + $indexPosition = $this->_tisFile->tell(); + $this->_tiiFile->writeVInt($indexPosition - $this->_lastIndexPosition); + $this->_lastIndexPosition = $indexPosition; + + } + $this->_termCount++; + } + + /** + * Close dictionary + */ + public function closeDictionaryFiles() + { + $this->_tisFile->seek(4); + $this->_tisFile->writeLong($this->_termCount); + + $this->_tiiFile->seek(4); + // + 1 is used to count an additional special index entry (empty term at the start of the list) + $this->_tiiFile->writeLong(($this->_termCount - $this->_termCount % self::$indexInterval)/self::$indexInterval + 1); + } + + + /** + * Dump Term Dictionary segment file entry. + * Used to write entry to .tis or .tii files + * + * @param Zend_Search_Lucene_Storage_File $dicFile + * @param Zend_Search_Lucene_Index_Term $prevTerm + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_TermInfo $prevTermInfo + * @param Zend_Search_Lucene_Index_TermInfo $termInfo + */ + protected function _dumpTermDictEntry(Zend_Search_Lucene_Storage_File $dicFile, + &$prevTerm, Zend_Search_Lucene_Index_Term $term, + &$prevTermInfo, Zend_Search_Lucene_Index_TermInfo $termInfo) + { + if (isset($prevTerm) && $prevTerm->field == $term->field) { + $matchedBytes = 0; + $maxBytes = min(strlen($prevTerm->text), strlen($term->text)); + while ($matchedBytes < $maxBytes && + $prevTerm->text[$matchedBytes] == $term->text[$matchedBytes]) { + $matchedBytes++; + } + + // Calculate actual matched UTF-8 pattern + $prefixBytes = 0; + $prefixChars = 0; + while ($prefixBytes < $matchedBytes) { + $charBytes = 1; + if ((ord($term->text[$prefixBytes]) & 0xC0) == 0xC0) { + $charBytes++; + if (ord($term->text[$prefixBytes]) & 0x20 ) { + $charBytes++; + if (ord($term->text[$prefixBytes]) & 0x10 ) { + $charBytes++; + } + } + } + + if ($prefixBytes + $charBytes > $matchedBytes) { + // char crosses matched bytes boundary + // skip char + break; + } + + $prefixChars++; + $prefixBytes += $charBytes; + } + + // Write preffix length + $dicFile->writeVInt($prefixChars); + // Write suffix + $dicFile->writeString(substr($term->text, $prefixBytes)); + } else { + // Write preffix length + $dicFile->writeVInt(0); + // Write suffix + $dicFile->writeString($term->text); + } + // Write field number + $dicFile->writeVInt($term->field); + // DocFreq (the count of documents which contain the term) + $dicFile->writeVInt($termInfo->docFreq); + + $prevTerm = $term; + + if (!isset($prevTermInfo)) { + // Write FreqDelta + $dicFile->writeVInt($termInfo->freqPointer); + // Write ProxDelta + $dicFile->writeVInt($termInfo->proxPointer); + } else { + // Write FreqDelta + $dicFile->writeVInt($termInfo->freqPointer - $prevTermInfo->freqPointer); + // Write ProxDelta + $dicFile->writeVInt($termInfo->proxPointer - $prevTermInfo->proxPointer); + } + // Write SkipOffset - it's not 0 when $termInfo->docFreq > self::$skipInterval + if ($termInfo->skipOffset != 0) { + $dicFile->writeVInt($termInfo->skipOffset); + } + + $prevTermInfo = $termInfo; + } + + + /** + * Generate compound index file + */ + protected function _generateCFS() + { + $cfsFile = $this->_directory->createFile($this->_name . '.cfs'); + $cfsFile->writeVInt(count($this->_files)); + + $dataOffsetPointers = array(); + foreach ($this->_files as $fileName) { + $dataOffsetPointers[$fileName] = $cfsFile->tell(); + $cfsFile->writeLong(0); // write dummy data + $cfsFile->writeString($fileName); + } + + foreach ($this->_files as $fileName) { + // Get actual data offset + $dataOffset = $cfsFile->tell(); + // Seek to the data offset pointer + $cfsFile->seek($dataOffsetPointers[$fileName]); + // Write actual data offset value + $cfsFile->writeLong($dataOffset); + // Seek back to the end of file + $cfsFile->seek($dataOffset); + + $dataFile = $this->_directory->getFileObject($fileName); + + $byteCount = $this->_directory->fileLength($fileName); + while ($byteCount > 0) { + $data = $dataFile->readBytes(min($byteCount, 131072 /*128Kb*/)); + $byteCount -= strlen($data); + $cfsFile->writeBytes($data); + } + + $this->_directory->deleteFile($fileName); + } + } + + + /** + * Close segment, write it to disk and return segment info + * + * @return Zend_Search_Lucene_Index_SegmentInfo + */ + abstract public function close(); +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php new file mode 100644 index 00000000000..82bf51a8f0f --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php @@ -0,0 +1,230 @@ +_termDocs = array(); + $this->_termDictionary = array(); + } + + + /** + * Adds a document to this segment. + * + * @param Zend_Search_Lucene_Document $document + * @throws Zend_Search_Lucene_Exception + */ + public function addDocument(Zend_Search_Lucene_Document $document) + { + /** Zend_Search_Lucene_Search_Similarity */ + require_once 'Zend/Search/Lucene/Search/Similarity.php'; + + $storedFields = array(); + $docNorms = array(); + $similarity = Zend_Search_Lucene_Search_Similarity::getDefault(); + + foreach ($document->getFieldNames() as $fieldName) { + $field = $document->getField($fieldName); + + if ($field->storeTermVector) { + /** + * @todo term vector storing support + */ + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Store term vector functionality is not supported yet.'); + } + + if ($field->isIndexed) { + if ($field->isTokenized) { + /** Zend_Search_Lucene_Analysis_Analyzer */ + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + + $analyzer = Zend_Search_Lucene_Analysis_Analyzer::getDefault(); + $analyzer->setInput($field->value, $field->encoding); + + $position = 0; + $tokenCounter = 0; + while (($token = $analyzer->nextToken()) !== null) { + $tokenCounter++; + + $term = new Zend_Search_Lucene_Index_Term($token->getTermText(), $field->name); + $termKey = $term->key(); + + if (!isset($this->_termDictionary[$termKey])) { + // New term + $this->_termDictionary[$termKey] = $term; + $this->_termDocs[$termKey] = array(); + $this->_termDocs[$termKey][$this->_docCount] = array(); + } else if (!isset($this->_termDocs[$termKey][$this->_docCount])) { + // Existing term, but new term entry + $this->_termDocs[$termKey][$this->_docCount] = array(); + } + $position += $token->getPositionIncrement(); + $this->_termDocs[$termKey][$this->_docCount][] = $position; + } + + if ($tokenCounter == 0) { + // Field contains empty value. Treat it as non-indexed and non-tokenized + $field = clone($field); + $field->isIndexed = $field->isTokenized = false; + } else { + $docNorms[$field->name] = chr($similarity->encodeNorm( $similarity->lengthNorm($field->name, + $tokenCounter)* + $document->boost* + $field->boost )); + } + } else if (($fieldUtf8Value = $field->getUtf8Value()) == '') { + // Field contains empty value. Treat it as non-indexed and non-tokenized + $field = clone($field); + $field->isIndexed = $field->isTokenized = false; + } else { + $term = new Zend_Search_Lucene_Index_Term($fieldUtf8Value, $field->name); + $termKey = $term->key(); + + if (!isset($this->_termDictionary[$termKey])) { + // New term + $this->_termDictionary[$termKey] = $term; + $this->_termDocs[$termKey] = array(); + $this->_termDocs[$termKey][$this->_docCount] = array(); + } else if (!isset($this->_termDocs[$termKey][$this->_docCount])) { + // Existing term, but new term entry + $this->_termDocs[$termKey][$this->_docCount] = array(); + } + $this->_termDocs[$termKey][$this->_docCount][] = 0; // position + + $docNorms[$field->name] = chr($similarity->encodeNorm( $similarity->lengthNorm($field->name, 1)* + $document->boost* + $field->boost )); + } + } + + if ($field->isStored) { + $storedFields[] = $field; + } + + $this->addField($field); + } + + foreach ($this->_fields as $fieldName => $field) { + if (!$field->isIndexed) { + continue; + } + + if (!isset($this->_norms[$fieldName])) { + $this->_norms[$fieldName] = str_repeat(chr($similarity->encodeNorm( $similarity->lengthNorm($fieldName, 0) )), + $this->_docCount); + } + + if (isset($docNorms[$fieldName])){ + $this->_norms[$fieldName] .= $docNorms[$fieldName]; + } else { + $this->_norms[$fieldName] .= chr($similarity->encodeNorm( $similarity->lengthNorm($fieldName, 0) )); + } + } + + $this->addStoredFields($storedFields); + } + + + /** + * Dump Term Dictionary (.tis) and Term Dictionary Index (.tii) segment files + */ + protected function _dumpDictionary() + { + ksort($this->_termDictionary, SORT_STRING); + + $this->initializeDictionaryFiles(); + + foreach ($this->_termDictionary as $termId => $term) { + $this->addTerm($term, $this->_termDocs[$termId]); + } + + $this->closeDictionaryFiles(); + } + + + /** + * Close segment, write it to disk and return segment info + * + * @return Zend_Search_Lucene_Index_SegmentInfo + */ + public function close() + { + if ($this->_docCount == 0) { + return null; + } + + $this->_dumpFNM(); + $this->_dumpDictionary(); + + $this->_generateCFS(); + + /** Zend_Search_Lucene_Index_SegmentInfo */ + require_once 'Zend/Search/Lucene/Index/SegmentInfo.php'; + + return new Zend_Search_Lucene_Index_SegmentInfo($this->_directory, + $this->_name, + $this->_docCount, + -1, + null, + true, + true); + } + +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/StreamWriter.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/StreamWriter.php new file mode 100644 index 00000000000..d972378944a --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/SegmentWriter/StreamWriter.php @@ -0,0 +1,94 @@ +_fdxFile = $this->_directory->createFile($this->_name . '.fdx'); + $this->_fdtFile = $this->_directory->createFile($this->_name . '.fdt'); + + $this->_files[] = $this->_name . '.fdx'; + $this->_files[] = $this->_name . '.fdt'; + } + + public function addNorm($fieldName, $normVector) + { + if (isset($this->_norms[$fieldName])) { + $this->_norms[$fieldName] .= $normVector; + } else { + $this->_norms[$fieldName] = $normVector; + } + } + + /** + * Close segment, write it to disk and return segment info + * + * @return Zend_Search_Lucene_Index_SegmentInfo + */ + public function close() + { + if ($this->_docCount == 0) { + return null; + } + + $this->_dumpFNM(); + $this->_generateCFS(); + + /** Zend_Search_Lucene_Index_SegmentInfo */ + require_once 'Zend/Search/Lucene/Index/SegmentInfo.php'; + + return new Zend_Search_Lucene_Index_SegmentInfo($this->_directory, + $this->_name, + $this->_docCount, + -1, + null, + true, + true); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/Term.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/Term.php new file mode 100644 index 00000000000..99c18311835 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/Term.php @@ -0,0 +1,144 @@ +field = ($field === null)? Zend_Search_Lucene::getDefaultSearchField() : $field; + $this->text = $text; + } + + + /** + * Returns term key + * + * @return string + */ + public function key() + { + return $this->field . chr(0) . $this->text; + } + + /** + * Get term prefix + * + * @param string $str + * @param integer $length + * @return string + */ + public static function getPrefix($str, $length) + { + $prefixBytes = 0; + $prefixChars = 0; + while ($prefixBytes < strlen($str) && $prefixChars < $length) { + $charBytes = 1; + if ((ord($str[$prefixBytes]) & 0xC0) == 0xC0) { + $charBytes++; + if (ord($str[$prefixBytes]) & 0x20 ) { + $charBytes++; + if (ord($str[$prefixBytes]) & 0x10 ) { + $charBytes++; + } + } + } + + if ($prefixBytes + $charBytes > strlen($str)) { + // wrong character + break; + } + + $prefixChars++; + $prefixBytes += $charBytes; + } + + return substr($str, 0, $prefixBytes); + } + + /** + * Get UTF-8 string length + * + * @param string $str + * @return string + */ + public static function getLength($str) + { + $bytes = 0; + $chars = 0; + while ($bytes < strlen($str)) { + $charBytes = 1; + if ((ord($str[$bytes]) & 0xC0) == 0xC0) { + $charBytes++; + if (ord($str[$bytes]) & 0x20 ) { + $charBytes++; + if (ord($str[$bytes]) & 0x10 ) { + $charBytes++; + } + } + } + + if ($bytes + $charBytes > strlen($str)) { + // wrong character + break; + } + + $chars++; + $bytes += $charBytes; + } + + return $chars; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermInfo.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermInfo.php new file mode 100644 index 00000000000..58641af9290 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermInfo.php @@ -0,0 +1,80 @@ +docFreq = $docFreq; + $this->freqPointer = $freqPointer; + $this->proxPointer = $proxPointer; + $this->skipOffset = $skipOffset; + $this->indexPointer = $indexPointer; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsPriorityQueue.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsPriorityQueue.php new file mode 100644 index 00000000000..a55e89656c8 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsPriorityQueue.php @@ -0,0 +1,49 @@ +currentTerm()->key(), $termsStream2->currentTerm()->key()) < 0; + } + +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsStream/Interface.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsStream/Interface.php new file mode 100644 index 00000000000..11a460cc5ab --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Index/TermsStream/Interface.php @@ -0,0 +1,66 @@ + 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @var integer + */ + public $mergeFactor = 10; + + /** + * File system adapter. + * + * @var Zend_Search_Lucene_Storage_Directory + */ + private $_directory = null; + + + /** + * Changes counter. + * + * @var integer + */ + private $_versionUpdate = 0; + + /** + * List of the segments, created by index writer + * Array of Zend_Search_Lucene_Index_SegmentInfo objects + * + * @var array + */ + private $_newSegments = array(); + + /** + * List of segments to be deleted on commit + * + * @var array + */ + private $_segmentsToDelete = array(); + + /** + * Current segment to add documents + * + * @var Zend_Search_Lucene_Index_SegmentWriter_DocumentWriter + */ + private $_currentSegment = null; + + /** + * Array of Zend_Search_Lucene_Index_SegmentInfo objects for this index. + * + * It's a reference to the corresponding Zend_Search_Lucene::$_segmentInfos array + * + * @var array Zend_Search_Lucene_Index_SegmentInfo + */ + private $_segmentInfos; + + /** + * Index target format version + * + * @var integer + */ + private $_targetFormatVersion; + + /** + * List of indexfiles extensions + * + * @var array + */ + private static $_indexExtensions = array('.cfs' => '.cfs', + '.cfx' => '.cfx', + '.fnm' => '.fnm', + '.fdx' => '.fdx', + '.fdt' => '.fdt', + '.tis' => '.tis', + '.tii' => '.tii', + '.frq' => '.frq', + '.prx' => '.prx', + '.tvx' => '.tvx', + '.tvd' => '.tvd', + '.tvf' => '.tvf', + '.del' => '.del', + '.sti' => '.sti' ); + + + /** + * Create empty index + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @param integer $generation + * @param integer $nameCount + */ + public static function createIndex(Zend_Search_Lucene_Storage_Directory $directory, $generation, $nameCount) + { + if ($generation == 0) { + // Create index in pre-2.1 mode + foreach ($directory->fileList() as $file) { + if ($file == 'deletable' || + $file == 'segments' || + isset(self::$_indexExtensions[ substr($file, strlen($file)-4)]) || + preg_match('/\.f\d+$/i', $file) /* matches .f file names */) { + $directory->deleteFile($file); + } + } + + $segmentsFile = $directory->createFile('segments'); + $segmentsFile->writeInt((int)0xFFFFFFFF); + + // write version (initialized by current time) + $segmentsFile->writeLong(round(microtime(true))); + + // write name counter + $segmentsFile->writeInt($nameCount); + // write segment counter + $segmentsFile->writeInt(0); + + $deletableFile = $directory->createFile('deletable'); + // write counter + $deletableFile->writeInt(0); + } else { + $genFile = $directory->createFile('segments.gen'); + + $genFile->writeInt((int)0xFFFFFFFE); + // Write generation two times + $genFile->writeLong($generation); + $genFile->writeLong($generation); + + $segmentsFile = $directory->createFile(Zend_Search_Lucene::getSegmentFileName($generation)); + $segmentsFile->writeInt((int)0xFFFFFFFD); + + // write version (initialized by current time) + $segmentsFile->writeLong(round(microtime(true))); + + // write name counter + $segmentsFile->writeInt($nameCount); + // write segment counter + $segmentsFile->writeInt(0); + } + } + + /** + * Open the index for writing + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @param array $segmentInfos + * @param integer $targetFormatVersion + * @param Zend_Search_Lucene_Storage_File $cleanUpLock + */ + public function __construct(Zend_Search_Lucene_Storage_Directory $directory, &$segmentInfos, $targetFormatVersion) + { + $this->_directory = $directory; + $this->_segmentInfos = &$segmentInfos; + $this->_targetFormatVersion = $targetFormatVersion; + } + + /** + * Adds a document to this index. + * + * @param Zend_Search_Lucene_Document $document + */ + public function addDocument(Zend_Search_Lucene_Document $document) + { + /** Zend_Search_Lucene_Index_SegmentWriter_DocumentWriter */ + require_once 'Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php'; + + if ($this->_currentSegment === null) { + $this->_currentSegment = + new Zend_Search_Lucene_Index_SegmentWriter_DocumentWriter($this->_directory, $this->_newSegmentName()); + } + $this->_currentSegment->addDocument($document); + + if ($this->_currentSegment->count() >= $this->maxBufferedDocs) { + $this->commit(); + } + + $this->_maybeMergeSegments(); + + $this->_versionUpdate++; + } + + + /** + * Check if we have anything to merge + * + * @return boolean + */ + private function _hasAnythingToMerge() + { + $segmentSizes = array(); + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + $segmentSizes[$segName] = $segmentInfo->count(); + } + + $mergePool = array(); + $poolSize = 0; + $sizeToMerge = $this->maxBufferedDocs; + asort($segmentSizes, SORT_NUMERIC); + foreach ($segmentSizes as $segName => $size) { + // Check, if segment comes into a new merging block + while ($size >= $sizeToMerge) { + // Merge previous block if it's large enough + if ($poolSize >= $sizeToMerge) { + return true; + } + $mergePool = array(); + $poolSize = 0; + + $sizeToMerge *= $this->mergeFactor; + + if ($sizeToMerge > $this->maxMergeDocs) { + return false; + } + } + + $mergePool[] = $this->_segmentInfos[$segName]; + $poolSize += $size; + } + + if ($poolSize >= $sizeToMerge) { + return true; + } + + return false; + } + + /** + * Merge segments if necessary + */ + private function _maybeMergeSegments() + { + if (Zend_Search_Lucene_LockManager::obtainOptimizationLock($this->_directory) === false) { + return; + } + + if (!$this->_hasAnythingToMerge()) { + Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory); + return; + } + + // Update segments list to be sure all segments are not merged yet by another process + // + // Segment merging functionality is concentrated in this class and surrounded + // by optimization lock obtaining/releasing. + // _updateSegments() refreshes segments list from the latest index generation. + // So only new segments can be added to the index while we are merging some already existing + // segments. + // Newly added segments will be also included into the index by the _updateSegments() call + // either by another process or by the current process with the commit() call at the end of _mergeSegments() method. + // That's guaranteed by the serialisation of _updateSegments() execution using exclusive locks. + $this->_updateSegments(); + + // Perform standard auto-optimization procedure + $segmentSizes = array(); + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + $segmentSizes[$segName] = $segmentInfo->count(); + } + + $mergePool = array(); + $poolSize = 0; + $sizeToMerge = $this->maxBufferedDocs; + asort($segmentSizes, SORT_NUMERIC); + foreach ($segmentSizes as $segName => $size) { + // Check, if segment comes into a new merging block + while ($size >= $sizeToMerge) { + // Merge previous block if it's large enough + if ($poolSize >= $sizeToMerge) { + $this->_mergeSegments($mergePool); + } + $mergePool = array(); + $poolSize = 0; + + $sizeToMerge *= $this->mergeFactor; + + if ($sizeToMerge > $this->maxMergeDocs) { + Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory); + return; + } + } + + $mergePool[] = $this->_segmentInfos[$segName]; + $poolSize += $size; + } + + if ($poolSize >= $sizeToMerge) { + $this->_mergeSegments($mergePool); + } + + Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory); + } + + /** + * Merge specified segments + * + * $segments is an array of SegmentInfo objects + * + * @param array $segments + */ + private function _mergeSegments($segments) + { + $newName = $this->_newSegmentName(); + + /** Zend_Search_Lucene_Index_SegmentMerger */ + require_once 'Zend/Search/Lucene/Index/SegmentMerger.php'; + $merger = new Zend_Search_Lucene_Index_SegmentMerger($this->_directory, + $newName); + foreach ($segments as $segmentInfo) { + $merger->addSource($segmentInfo); + $this->_segmentsToDelete[$segmentInfo->getName()] = $segmentInfo->getName(); + } + + $newSegment = $merger->merge(); + if ($newSegment !== null) { + $this->_newSegments[$newSegment->getName()] = $newSegment; + } + + $this->commit(); + } + + /** + * Update segments file by adding current segment to a list + * + * @throws Zend_Search_Lucene_Exception + */ + private function _updateSegments() + { + // Get an exclusive index lock + Zend_Search_Lucene_LockManager::obtainWriteLock($this->_directory); + + // Write down changes for the segments + foreach ($this->_segmentInfos as $segInfo) { + $segInfo->writeChanges(); + } + + + $generation = Zend_Search_Lucene::getActualGeneration($this->_directory); + $segmentsFile = $this->_directory->getFileObject(Zend_Search_Lucene::getSegmentFileName($generation), false); + $newSegmentFile = $this->_directory->createFile(Zend_Search_Lucene::getSegmentFileName(++$generation), false); + + try { + $genFile = $this->_directory->getFileObject('segments.gen', false); + } catch (Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'is not readable') !== false) { + $genFile = $this->_directory->createFile('segments.gen'); + } else { + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + + $genFile->writeInt((int)0xFFFFFFFE); + // Write generation (first copy) + $genFile->writeLong($generation); + + try { + // Write format marker + if ($this->_targetFormatVersion == Zend_Search_Lucene::FORMAT_2_1) { + $newSegmentFile->writeInt((int)0xFFFFFFFD); + } else if ($this->_targetFormatVersion == Zend_Search_Lucene::FORMAT_2_3) { + $newSegmentFile->writeInt((int)0xFFFFFFFC); + } + + // Read src file format identifier + $format = $segmentsFile->readInt(); + if ($format == (int)0xFFFFFFFF) { + $srcFormat = Zend_Search_Lucene::FORMAT_PRE_2_1; + } else if ($format == (int)0xFFFFFFFD) { + $srcFormat = Zend_Search_Lucene::FORMAT_2_1; + } else if ($format == (int)0xFFFFFFFC) { + $srcFormat = Zend_Search_Lucene::FORMAT_2_3; + } else { + throw new Zend_Search_Lucene_Exception('Unsupported segments file format'); + } + + $version = $segmentsFile->readLong() + $this->_versionUpdate; + $this->_versionUpdate = 0; + $newSegmentFile->writeLong($version); + + // Write segment name counter + $newSegmentFile->writeInt($segmentsFile->readInt()); + + // Get number of segments offset + $numOfSegmentsOffset = $newSegmentFile->tell(); + // Write dummy data (segment counter) + $newSegmentFile->writeInt(0); + + // Read number of segemnts + $segmentsCount = $segmentsFile->readInt(); + + $segments = array(); + for ($count = 0; $count < $segmentsCount; $count++) { + $segName = $segmentsFile->readString(); + $segSize = $segmentsFile->readInt(); + + if ($srcFormat == Zend_Search_Lucene::FORMAT_PRE_2_1) { + // pre-2.1 index format + $delGen = 0; + $hasSingleNormFile = false; + $numField = (int)0xFFFFFFFF; + $isCompoundByte = 0; + $docStoreOptions = null; + } else { + $delGen = $segmentsFile->readLong(); + + if ($srcFormat == Zend_Search_Lucene::FORMAT_2_3) { + $docStoreOffset = $segmentsFile->readInt(); + + if ($docStoreOffset != (int)0xFFFFFFFF) { + $docStoreSegment = $segmentsFile->readString(); + $docStoreIsCompoundFile = $segmentsFile->readByte(); + + $docStoreOptions = array('offset' => $docStoreOffset, + 'segment' => $docStoreSegment, + 'isCompound' => ($docStoreIsCompoundFile == 1)); + } else { + $docStoreOptions = null; + } + } else { + $docStoreOptions = null; + } + + $hasSingleNormFile = $segmentsFile->readByte(); + $numField = $segmentsFile->readInt(); + + $normGens = array(); + if ($numField != (int)0xFFFFFFFF) { + for ($count1 = 0; $count1 < $numField; $count1++) { + $normGens[] = $segmentsFile->readLong(); + } + } + $isCompoundByte = $segmentsFile->readByte(); + } + + if (!in_array($segName, $this->_segmentsToDelete)) { + // Load segment if necessary + if (!isset($this->_segmentInfos[$segName])) { + if ($isCompoundByte == 0xFF) { + // The segment is not a compound file + $isCompound = false; + } else if ($isCompoundByte == 0x00) { + // The status is unknown + $isCompound = null; + } else if ($isCompoundByte == 0x01) { + // The segment is a compound file + $isCompound = true; + } + + /** Zend_Search_Lucene_Index_SegmentInfo */ + require_once 'Zend/Search/Lucene/Index/SegmentInfo.php'; + $this->_segmentInfos[$segName] = + new Zend_Search_Lucene_Index_SegmentInfo($this->_directory, + $segName, + $segSize, + $delGen, + $docStoreOptions, + $hasSingleNormFile, + $isCompound); + } else { + // Retrieve actual deletions file generation number + $delGen = $this->_segmentInfos[$segName]->getDelGen(); + } + + $newSegmentFile->writeString($segName); + $newSegmentFile->writeInt($segSize); + $newSegmentFile->writeLong($delGen); + if ($this->_targetFormatVersion == Zend_Search_Lucene::FORMAT_2_3) { + if ($docStoreOptions !== null) { + $newSegmentFile->writeInt($docStoreOffset); + $newSegmentFile->writeString($docStoreSegment); + $newSegmentFile->writeByte($docStoreIsCompoundFile); + } else { + // Set DocStoreOffset to -1 + $newSegmentFile->writeInt((int)0xFFFFFFFF); + } + } else if ($docStoreOptions !== null) { + // Release index write lock + Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory); + + throw new Zend_Search_Lucene_Exception('Index conversion to lower format version is not supported.'); + } + + $newSegmentFile->writeByte($hasSingleNormFile); + $newSegmentFile->writeInt($numField); + if ($numField != (int)0xFFFFFFFF) { + foreach ($normGens as $normGen) { + $newSegmentFile->writeLong($normGen); + } + } + $newSegmentFile->writeByte($isCompoundByte); + + $segments[$segName] = $segSize; + } + } + $segmentsFile->close(); + + $segmentsCount = count($segments) + count($this->_newSegments); + + foreach ($this->_newSegments as $segName => $segmentInfo) { + $newSegmentFile->writeString($segName); + $newSegmentFile->writeInt($segmentInfo->count()); + + // delete file generation: -1 (there is no delete file yet) + $newSegmentFile->writeInt((int)0xFFFFFFFF);$newSegmentFile->writeInt((int)0xFFFFFFFF); + if ($this->_targetFormatVersion == Zend_Search_Lucene::FORMAT_2_3) { + // docStoreOffset: -1 (segment doesn't use shared doc store) + $newSegmentFile->writeInt((int)0xFFFFFFFF); + } + // HasSingleNormFile + $newSegmentFile->writeByte($segmentInfo->hasSingleNormFile()); + // NumField + $newSegmentFile->writeInt((int)0xFFFFFFFF); + // IsCompoundFile + $newSegmentFile->writeByte($segmentInfo->isCompound() ? 1 : -1); + + $segments[$segmentInfo->getName()] = $segmentInfo->count(); + $this->_segmentInfos[$segName] = $segmentInfo; + } + $this->_newSegments = array(); + + $newSegmentFile->seek($numOfSegmentsOffset); + $newSegmentFile->writeInt($segmentsCount); // Update segments count + $newSegmentFile->close(); + } catch (Exception $e) { + /** Restore previous index generation */ + $generation--; + $genFile->seek(4, SEEK_SET); + // Write generation number twice + $genFile->writeLong($generation); $genFile->writeLong($generation); + + // Release index write lock + Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory); + + // Throw the exception + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + + // Write generation (second copy) + $genFile->writeLong($generation); + + + // Check if another update or read process is not running now + // If yes, skip clean-up procedure + if (Zend_Search_Lucene_LockManager::escalateReadLock($this->_directory)) { + /** + * Clean-up directory + */ + $filesToDelete = array(); + $filesTypes = array(); + $filesNumbers = array(); + + // list of .del files of currently used segments + // each segment can have several generations of .del files + // only last should not be deleted + $delFiles = array(); + + foreach ($this->_directory->fileList() as $file) { + if ($file == 'deletable') { + // 'deletable' file + $filesToDelete[] = $file; + $filesTypes[] = 0; // delete this file first, since it's not used starting from Lucene v2.1 + $filesNumbers[] = 0; + } else if ($file == 'segments') { + // 'segments' file + $filesToDelete[] = $file; + $filesTypes[] = 1; // second file to be deleted "zero" version of segments file (Lucene pre-2.1) + $filesNumbers[] = 0; + } else if (preg_match('/^segments_[a-zA-Z0-9]+$/i', $file)) { + // 'segments_xxx' file + // Check if it's not a just created generation file + if ($file != Zend_Search_Lucene::getSegmentFileName($generation)) { + $filesToDelete[] = $file; + $filesTypes[] = 2; // first group of files for deletions + $filesNumbers[] = (int)base_convert(substr($file, 9), 36, 10); // ordered by segment generation numbers + } + } else if (preg_match('/(^_([a-zA-Z0-9]+))\.f\d+$/i', $file, $matches)) { + // one of per segment files ('.f') + // Check if it's not one of the segments in the current segments set + if (!isset($segments[$matches[1]])) { + $filesToDelete[] = $file; + $filesTypes[] = 3; // second group of files for deletions + $filesNumbers[] = (int)base_convert($matches[2], 36, 10); // order by segment number + } + } else if (preg_match('/(^_([a-zA-Z0-9]+))(_([a-zA-Z0-9]+))\.del$/i', $file, $matches)) { + // one of per segment files ('_.del' where is '_') + // Check if it's not one of the segments in the current segments set + if (!isset($segments[$matches[1]])) { + $filesToDelete[] = $file; + $filesTypes[] = 3; // second group of files for deletions + $filesNumbers[] = (int)base_convert($matches[2], 36, 10); // order by segment number + } else { + $segmentNumber = (int)base_convert($matches[2], 36, 10); + $delGeneration = (int)base_convert($matches[4], 36, 10); + if (!isset($delFiles[$segmentNumber])) { + $delFiles[$segmentNumber] = array(); + } + $delFiles[$segmentNumber][$delGeneration] = $file; + } + } else if (isset(self::$_indexExtensions[substr($file, strlen($file)-4)])) { + // one of per segment files ('.') + $segmentName = substr($file, 0, strlen($file) - 4); + // Check if it's not one of the segments in the current segments set + if (!isset($segments[$segmentName]) && + ($this->_currentSegment === null || $this->_currentSegment->getName() != $segmentName)) { + $filesToDelete[] = $file; + $filesTypes[] = 3; // second group of files for deletions + $filesNumbers[] = (int)base_convert(substr($file, 1 /* skip '_' */, strlen($file)-5), 36, 10); // order by segment number + } + } + } + + $maxGenNumber = 0; + // process .del files of currently used segments + foreach ($delFiles as $segmentNumber => $segmentDelFiles) { + ksort($delFiles[$segmentNumber], SORT_NUMERIC); + array_pop($delFiles[$segmentNumber]); // remove last delete file generation from candidates for deleting + + end($delFiles[$segmentNumber]); + $lastGenNumber = key($delFiles[$segmentNumber]); + if ($lastGenNumber > $maxGenNumber) { + $maxGenNumber = $lastGenNumber; + } + } + foreach ($delFiles as $segmentNumber => $segmentDelFiles) { + foreach ($segmentDelFiles as $delGeneration => $file) { + $filesToDelete[] = $file; + $filesTypes[] = 4; // third group of files for deletions + $filesNumbers[] = $segmentNumber*$maxGenNumber + $delGeneration; // order by , pair + } + } + + // Reorder files for deleting + array_multisort($filesTypes, SORT_ASC, SORT_NUMERIC, + $filesNumbers, SORT_ASC, SORT_NUMERIC, + $filesToDelete, SORT_ASC, SORT_STRING); + + foreach ($filesToDelete as $file) { + try { + /** Skip shared docstore segments deleting */ + /** @todo Process '.cfx' files to check if them are already unused */ + if (substr($file, strlen($file)-4) != '.cfx') { + $this->_directory->deleteFile($file); + } + } catch (Zend_Search_Lucene_Exception $e) { + if (strpos($e->getMessage(), 'Can\'t delete file') === false) { + // That's not "file is under processing or already deleted" exception + // Pass it through + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + } + + // Return read lock into the previous state + Zend_Search_Lucene_LockManager::deEscalateReadLock($this->_directory); + } else { + // Only release resources if another index reader is running now + foreach ($this->_segmentsToDelete as $segName) { + foreach (self::$_indexExtensions as $ext) { + $this->_directory->purgeFile($segName . $ext); + } + } + } + + // Clean-up _segmentsToDelete container + $this->_segmentsToDelete = array(); + + + // Release index write lock + Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory); + + // Remove unused segments from segments list + foreach ($this->_segmentInfos as $segName => $segmentInfo) { + if (!isset($segments[$segName])) { + unset($this->_segmentInfos[$segName]); + } + } + } + + /** + * Commit current changes + */ + public function commit() + { + if ($this->_currentSegment !== null) { + $newSegment = $this->_currentSegment->close(); + if ($newSegment !== null) { + $this->_newSegments[$newSegment->getName()] = $newSegment; + } + $this->_currentSegment = null; + } + + $this->_updateSegments(); + } + + + /** + * Merges the provided indexes into this index. + * + * @param array $readers + * @return void + */ + public function addIndexes($readers) + { + /** + * @todo implementation + */ + } + + /** + * Merges all segments together into new one + * + * Returns true on success and false if another optimization or auto-optimization process + * is running now + * + * @return boolean + */ + public function optimize() + { + if (Zend_Search_Lucene_LockManager::obtainOptimizationLock($this->_directory) === false) { + return false; + } + + // Update segments list to be sure all segments are not merged yet by another process + // + // Segment merging functionality is concentrated in this class and surrounded + // by optimization lock obtaining/releasing. + // _updateSegments() refreshes segments list from the latest index generation. + // So only new segments can be added to the index while we are merging some already existing + // segments. + // Newly added segments will be also included into the index by the _updateSegments() call + // either by another process or by the current process with the commit() call at the end of _mergeSegments() method. + // That's guaranteed by the serialisation of _updateSegments() execution using exclusive locks. + $this->_updateSegments(); + + $this->_mergeSegments($this->_segmentInfos); + + Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory); + + return true; + } + + /** + * Get name for new segment + * + * @return string + */ + private function _newSegmentName() + { + Zend_Search_Lucene_LockManager::obtainWriteLock($this->_directory); + + $generation = Zend_Search_Lucene::getActualGeneration($this->_directory); + $segmentsFile = $this->_directory->getFileObject(Zend_Search_Lucene::getSegmentFileName($generation), false); + + $segmentsFile->seek(12); // 12 = 4 (int, file format marker) + 8 (long, index version) + $segmentNameCounter = $segmentsFile->readInt(); + + $segmentsFile->seek(12); // 12 = 4 (int, file format marker) + 8 (long, index version) + $segmentsFile->writeInt($segmentNameCounter + 1); + + // Flash output to guarantee that wrong value will not be loaded between unlock and + // return (which calls $segmentsFile destructor) + $segmentsFile->flush(); + + Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory); + + return '_' . base_convert($segmentNameCounter, 10, 36); + } + +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Interface.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Interface.php new file mode 100644 index 00000000000..84deeb64b66 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Interface.php @@ -0,0 +1,417 @@ + 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @return integer + */ + public function getMergeFactor(); + + /** + * Set index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @param integer $maxMergeDocs + */ + public function setMergeFactor($mergeFactor); + + /** + * Performs a query against the index and returns an array + * of Zend_Search_Lucene_Search_QueryHit objects. + * Input is a string or Zend_Search_Lucene_Search_Query. + * + * @param mixed $query + * @return array Zend_Search_Lucene_Search_QueryHit + * @throws Zend_Search_Lucene_Exception + */ + public function find($query); + + /** + * Returns a list of all unique field names that exist in this index. + * + * @param boolean $indexed + * @return array + */ + public function getFieldNames($indexed = false); + + /** + * Returns a Zend_Search_Lucene_Document object for the document + * number $id in this index. + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @return Zend_Search_Lucene_Document + */ + public function getDocument($id); + + /** + * Returns true if index contain documents with specified term. + * + * Is used for query optimization. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return boolean + */ + public function hasTerm(Zend_Search_Lucene_Index_Term $term); + + /** + * Returns IDs of all the documents containing term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termDocs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null); + + /** + * Returns documents filter for all documents containing term. + * + * It performs the same operation as termDocs, but return result as + * Zend_Search_Lucene_Index_DocsFilter object + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return Zend_Search_Lucene_Index_DocsFilter + */ + public function termDocsFilter(Zend_Search_Lucene_Index_Term $term, $docsFilter = null); + + /** + * Returns an array of all term freqs. + * Return array structure: array( docId => freq, ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return integer + */ + public function termFreqs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null); + + /** + * Returns an array of all term positions in the documents. + * Return array structure: array( docId => array( pos1, pos2, ...), ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termPositions(Zend_Search_Lucene_Index_Term $term, $docsFilter = null); + + /** + * Returns the number of documents in this index containing the $term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return integer + */ + public function docFreq(Zend_Search_Lucene_Index_Term $term); + + /** + * Retrive similarity used by index reader + * + * @return Zend_Search_Lucene_Search_Similarity + */ + public function getSimilarity(); + + /** + * Returns a normalization factor for "field, document" pair. + * + * @param integer $id + * @param string $fieldName + * @return float + */ + public function norm($id, $fieldName); + + /** + * Returns true if any documents have been deleted from this index. + * + * @return boolean + */ + public function hasDeletions(); + + /** + * Deletes a document from the index. + * $id is an internal document id + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @throws Zend_Search_Lucene_Exception + */ + public function delete($id); + + /** + * Adds a document to this index. + * + * @param Zend_Search_Lucene_Document $document + */ + public function addDocument(Zend_Search_Lucene_Document $document); + + /** + * Commit changes resulting from delete() or undeleteAll() operations. + */ + public function commit(); + + /** + * Optimize index. + * + * Merges all segments into one + */ + public function optimize(); + + /** + * Returns an array of all terms in this index. + * + * @return array + */ + public function terms(); + + /** + * Undeletes all documents currently marked as deleted in this index. + */ + public function undeleteAll(); + + + /** + * Add reference to the index object + * + * @internal + */ + public function addReference(); + + /** + * Remove reference from the index object + * + * When reference count becomes zero, index is closed and resources are cleaned up + * + * @internal + */ + public function removeReference(); +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Interface/MultiSearcher.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Interface/MultiSearcher.php new file mode 100644 index 00000000000..ad085d326b6 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Interface/MultiSearcher.php @@ -0,0 +1,25 @@ +createFile(self::WRITE_LOCK_FILE); + if (!$lock->lock(LOCK_EX)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Can\'t obtain exclusive index lock'); + } + return $lock; + } + + /** + * Release exclusive write lock + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + */ + public static function releaseWriteLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->getFileObject(self::WRITE_LOCK_FILE); + $lock->unlock(); + } + + /** + * Obtain the exclusive "read escalation/de-escalation" lock + * + * Required to protect the escalate/de-escalate read lock process + * on GFS (and potentially other) mounted filesystems. + * + * Why we need this: + * While GFS supports cluster-wide locking via flock(), it's + * implementation isn't quite what it should be. The locking + * semantics that work consistently on a local filesystem tend to + * fail on GFS mounted filesystems. This appears to be a design defect + * in the implementation of GFS. How this manifests itself is that + * conditional promotion of a shared lock to exclusive will always + * fail, lock release requests are honored but not immediately + * processed (causing erratic failures of subsequent conditional + * requests) and the releasing of the exclusive lock before the + * shared lock is set when a lock is demoted (which can open a window + * of opportunity for another process to gain an exclusive lock when + * it shoudln't be allowed to). + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + * @return Zend_Search_Lucene_Storage_File + * @throws Zend_Search_Lucene_Exception + */ + private static function _startReadLockProcessing(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->createFile(self::READ_LOCK_PROCESSING_LOCK_FILE); + if (!$lock->lock(LOCK_EX)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Can\'t obtain exclusive lock for the read lock processing file'); + } + return $lock; + } + + /** + * Release the exclusive "read escalation/de-escalation" lock + * + * Required to protect the escalate/de-escalate read lock process + * on GFS (and potentially other) mounted filesystems. + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + */ + private static function _stopReadLockProcessing(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->getFileObject(self::READ_LOCK_PROCESSING_LOCK_FILE); + $lock->unlock(); + } + + + /** + * Obtain shared read lock on the index + * + * It doesn't block other read or update processes, but prevent index from the premature cleaning-up + * + * @param Zend_Search_Lucene_Storage_Directory $defaultLockDirectory + * @return Zend_Search_Lucene_Storage_File + * @throws Zend_Search_Lucene_Exception + */ + public static function obtainReadLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->createFile(self::READ_LOCK_FILE); + if (!$lock->lock(LOCK_SH)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Can\'t obtain shared reading index lock'); + } + return $lock; + } + + /** + * Release shared read lock + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + */ + public static function releaseReadLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->getFileObject(self::READ_LOCK_FILE); + $lock->unlock(); + } + + /** + * Escalate Read lock to exclusive level + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + * @return boolean + */ + public static function escalateReadLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + self::_startReadLockProcessing($lockDirectory); + + $lock = $lockDirectory->getFileObject(self::READ_LOCK_FILE); + + // First, release the shared lock for the benefit of GFS since + // it will fail the conditional request to promote the lock to + // "exclusive" while the shared lock is held (even when we are + // the only holder). + $lock->unlock(); + + // GFS is really poor. While the above "unlock" returns, GFS + // doesn't clean up it's tables right away (which will potentially + // cause the conditional locking for the "exclusive" lock to fail. + // We will retry the conditional lock request several times on a + // failure to get past this. The performance hit is negligible + // in the grand scheme of things and only will occur with GFS + // filesystems or if another local process has the shared lock + // on local filesystems. + for ($retries = 0; $retries < 10; $retries++) { + if ($lock->lock(LOCK_EX, true)) { + // Exclusive lock is obtained! + self::_stopReadLockProcessing($lockDirectory); + return true; + } + + // wait 1 microsecond + usleep(1); + } + + // Restore lock state + $lock->lock(LOCK_SH); + + self::_stopReadLockProcessing($lockDirectory); + return false; + } + + /** + * De-escalate Read lock to shared level + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + */ + public static function deEscalateReadLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->getFileObject(self::READ_LOCK_FILE); + $lock->lock(LOCK_SH); + } + + /** + * Obtain exclusive optimization lock on the index + * + * Returns lock object on success and false otherwise (doesn't block execution) + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + * @return mixed + */ + public static function obtainOptimizationLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->createFile(self::OPTIMIZATION_LOCK_FILE); + if (!$lock->lock(LOCK_EX, true)) { + return false; + } + return $lock; + } + + /** + * Release exclusive optimization lock + * + * @param Zend_Search_Lucene_Storage_Directory $lockDirectory + */ + public static function releaseOptimizationLock(Zend_Search_Lucene_Storage_Directory $lockDirectory) + { + $lock = $lockDirectory->getFileObject(self::OPTIMIZATION_LOCK_FILE); + $lock->unlock(); + } + +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/MultiSearcher.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/MultiSearcher.php new file mode 100644 index 00000000000..809a0bfdbaa --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/MultiSearcher.php @@ -0,0 +1,992 @@ +_indices = $indices; + + foreach ($this->_indices as $index) { + if (!$index instanceof Zend_Search_Lucene_Interface) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('sub-index objects have to implement Zend_Search_Lucene_Interface.'); + } + } + } + + /** + * Add index for searching. + * + * @param Zend_Search_Lucene_Interface $index + */ + public function addIndex(Zend_Search_Lucene_Interface $index) + { + $this->_indices[] = $index; + } + + + /** + * Get current generation number + * + * Returns generation number + * 0 means pre-2.1 index format + * -1 means there are no segments files. + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public static function getActualGeneration(Zend_Search_Lucene_Storage_Directory $directory) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception("Generation number can't be retrieved for multi-searcher"); + } + + /** + * Get segments file name + * + * @param integer $generation + * @return string + */ + public static function getSegmentFileName($generation) + { + return Zend_Search_Lucene::getSegmentFileName($generation); + } + + /** + * Get index format version + * + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public function getFormatVersion() + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception("Format version can't be retrieved for multi-searcher"); + } + + /** + * Set index format version. + * Index is converted to this format at the nearest upfdate time + * + * @param int $formatVersion + */ + public function setFormatVersion($formatVersion) + { + foreach ($this->_indices as $index) { + $index->setFormatVersion($formatVersion); + } + } + + /** + * Returns the Zend_Search_Lucene_Storage_Directory instance for this index. + * + * @return Zend_Search_Lucene_Storage_Directory + */ + public function getDirectory() + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception("Index directory can't be retrieved for multi-searcher"); + } + + /** + * Returns the total number of documents in this index (including deleted documents). + * + * @return integer + */ + public function count() + { + $count = 0; + + foreach ($this->_indices as $index) { + $count += $index->count(); + } + + return $count; + } + + /** + * Returns one greater than the largest possible document number. + * This may be used to, e.g., determine how big to allocate a structure which will have + * an element for every document number in an index. + * + * @return integer + */ + public function maxDoc() + { + return $this->count(); + } + + /** + * Returns the total number of non-deleted documents in this index. + * + * @return integer + */ + public function numDocs() + { + $docs = 0; + + foreach ($this->_indices as $index) { + $docs += $index->numDocs(); + } + + return $docs; + } + + /** + * Checks, that document is deleted + * + * @param integer $id + * @return boolean + * @throws Zend_Search_Lucene_Exception Exception is thrown if $id is out of the range + */ + public function isDeleted($id) + { + foreach ($this->_indices as $index) { + $indexCount = $index->count(); + + if ($indexCount > $id) { + return $index->isDeleted($id); + } + + $id -= $indexCount; + } + + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document id is out of the range.'); + } + + /** + * Set default search field. + * + * Null means, that search is performed through all fields by default + * + * Default value is null + * + * @param string $fieldName + */ + public static function setDefaultSearchField($fieldName) + { + foreach ($this->_indices as $index) { + $index->setDefaultSearchField($fieldName); + } + } + + + /** + * Get default search field. + * + * Null means, that search is performed through all fields by default + * + * @return string + * @throws Zend_Search_Lucene_Exception + */ + public static function getDefaultSearchField() + { + if (count($this->_indices) == 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices list is empty'); + } + + $defaultSearchField = reset($this->_indices)->getDefaultSearchField(); + + foreach ($this->_indices as $index) { + if ($index->getDefaultSearchField() !== $defaultSearchField) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices have different default search field.'); + } + } + + return $defaultSearchField; + } + + /** + * Set result set limit. + * + * 0 (default) means no limit + * + * @param integer $limit + */ + public static function setResultSetLimit($limit) + { + foreach ($this->_indices as $index) { + $index->setResultSetLimit($limit); + } + } + + /** + * Set result set limit. + * + * 0 means no limit + * + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public static function getResultSetLimit() + { + if (count($this->_indices) == 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices list is empty'); + } + + $defaultResultSetLimit = reset($this->_indices)->getResultSetLimit(); + + foreach ($this->_indices as $index) { + if ($index->getResultSetLimit() !== $defaultResultSetLimit) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices have different default search field.'); + } + } + + return $defaultResultSetLimit; + } + + /** + * Retrieve index maxBufferedDocs option + * + * maxBufferedDocs is a minimal number of documents required before + * the buffered in-memory documents are written into a new Segment + * + * Default value is 10 + * + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public function getMaxBufferedDocs() + { + if (count($this->_indices) == 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices list is empty'); + } + + $maxBufferedDocs = reset($this->_indices)->getMaxBufferedDocs(); + + foreach ($this->_indices as $index) { + if ($index->getMaxBufferedDocs() !== $maxBufferedDocs) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices have different default search field.'); + } + } + + return $maxBufferedDocs; + } + + /** + * Set index maxBufferedDocs option + * + * maxBufferedDocs is a minimal number of documents required before + * the buffered in-memory documents are written into a new Segment + * + * Default value is 10 + * + * @param integer $maxBufferedDocs + */ + public function setMaxBufferedDocs($maxBufferedDocs) + { + foreach ($this->_indices as $index) { + $index->setMaxBufferedDocs($maxBufferedDocs); + } + } + + /** + * Retrieve index maxMergeDocs option + * + * maxMergeDocs is a largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + * Default value is PHP_INT_MAX + * + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public function getMaxMergeDocs() + { + if (count($this->_indices) == 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices list is empty'); + } + + $maxMergeDocs = reset($this->_indices)->getMaxMergeDocs(); + + foreach ($this->_indices as $index) { + if ($index->getMaxMergeDocs() !== $maxMergeDocs) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices have different default search field.'); + } + } + + return $maxMergeDocs; + } + + /** + * Set index maxMergeDocs option + * + * maxMergeDocs is a largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + * Default value is PHP_INT_MAX + * + * @param integer $maxMergeDocs + */ + public function setMaxMergeDocs($maxMergeDocs) + { + foreach ($this->_indices as $index) { + $index->setMaxMergeDocs($maxMergeDocs); + } + } + + /** + * Retrieve index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public function getMergeFactor() + { + if (count($this->_indices) == 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices list is empty'); + } + + $mergeFactor = reset($this->_indices)->getMergeFactor(); + + foreach ($this->_indices as $index) { + if ($index->getMergeFactor() !== $mergeFactor) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices have different default search field.'); + } + } + + return $mergeFactor; + } + + /** + * Set index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @param integer $maxMergeDocs + */ + public function setMergeFactor($mergeFactor) + { + foreach ($this->_indices as $index) { + $index->setMaxMergeDocs($mergeFactor); + } + } + + /** + * Performs a query against the index and returns an array + * of Zend_Search_Lucene_Search_QueryHit objects. + * Input is a string or Zend_Search_Lucene_Search_Query. + * + * @param mixed $query + * @return array Zend_Search_Lucene_Search_QueryHit + * @throws Zend_Search_Lucene_Exception + */ + public function find($query) + { + if (count($this->_indices) == 0) { + return array(); + } + + $hitsList = array(); + + $indexShift = 0; + foreach ($this->_indices as $index) { + $hits = $index->find($query); + + if ($indexShift != 0) { + foreach ($hits as $hit) { + $hit->id += $indexShift; + } + } + + $indexShift += $index->count(); + $hitsList[] = $hits; + } + + /** @todo Implement advanced sorting */ + + return call_user_func_array('array_merge', $hitsList); + } + + /** + * Returns a list of all unique field names that exist in this index. + * + * @param boolean $indexed + * @return array + */ + public function getFieldNames($indexed = false) + { + $fieldNamesList = array(); + + foreach ($this->_indices as $index) { + $fieldNamesList[] = $index->getFieldNames($indexed); + } + + return array_unique(call_user_func_array('array_merge', $fieldNamesList)); + } + + /** + * Returns a Zend_Search_Lucene_Document object for the document + * number $id in this index. + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @return Zend_Search_Lucene_Document + * @throws Zend_Search_Lucene_Exception Exception is thrown if $id is out of the range + */ + public function getDocument($id) + { + if ($id instanceof Zend_Search_Lucene_Search_QueryHit) { + /* @var $id Zend_Search_Lucene_Search_QueryHit */ + $id = $id->id; + } + + foreach ($this->_indices as $index) { + $indexCount = $index->count(); + + if ($indexCount > $id) { + return $index->getDocument($id); + } + + $id -= $indexCount; + } + + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document id is out of the range.'); + } + + /** + * Returns true if index contain documents with specified term. + * + * Is used for query optimization. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return boolean + */ + public function hasTerm(Zend_Search_Lucene_Index_Term $term) + { + foreach ($this->_indices as $index) { + if ($index->hasTerm($term)) { + return true; + } + } + + return false; + } + + /** + * Returns IDs of all the documents containing term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function termDocs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + if ($docsFilter != null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document filters could not used with multi-searcher'); + } + + $docsList = array(); + + $indexShift = 0; + foreach ($this->_indices as $index) { + $docs = $index->termDocs($term); + + if ($indexShift != 0) { + foreach ($docs as $id => $docId) { + $docs[$id] += $indexShift; + } + } + + $indexShift += $index->count(); + $docsList[] = $docs; + } + + return call_user_func_array('array_merge', $docsList); + } + + /** + * Returns documents filter for all documents containing term. + * + * It performs the same operation as termDocs, but return result as + * Zend_Search_Lucene_Index_DocsFilter object + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return Zend_Search_Lucene_Index_DocsFilter + * @throws Zend_Search_Lucene_Exception + */ + public function termDocsFilter(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document filters could not used with multi-searcher'); + } + + /** + * Returns an array of all term freqs. + * Return array structure: array( docId => freq, ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public function termFreqs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + if ($docsFilter != null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document filters could not used with multi-searcher'); + } + + $freqsList = array(); + + $indexShift = 0; + foreach ($this->_indices as $index) { + $freqs = $index->termFreqs($term); + + if ($indexShift != 0) { + $freqsShifted = array(); + + foreach ($freqs as $docId => $freq) { + $freqsShifted[$docId + $indexShift] = $freq; + } + $freqs = $freqsShifted; + } + + $indexShift += $index->count(); + $freqsList[] = $freqs; + } + + return call_user_func_array('array_merge', $freqsList); + } + + /** + * Returns an array of all term positions in the documents. + * Return array structure: array( docId => array( pos1, pos2, ...), ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function termPositions(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + if ($docsFilter != null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document filters could not used with multi-searcher'); + } + + $termPositionsList = array(); + + $indexShift = 0; + foreach ($this->_indices as $index) { + $termPositions = $index->termPositions($term); + + if ($indexShift != 0) { + $termPositionsShifted = array(); + + foreach ($termPositions as $docId => $positions) { + $termPositions[$docId + $indexShift] = $positions; + } + $termPositions = $termPositionsShifted; + } + + $indexShift += $index->count(); + $termPositionsList[] = $termPositions; + } + + return call_user_func_array('array_merge', $termPositions); + } + + /** + * Returns the number of documents in this index containing the $term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return integer + */ + public function docFreq(Zend_Search_Lucene_Index_Term $term) + { + $docFreq = 0; + + foreach ($this->_indices as $index) { + $docFreq += $index->docFreq($term); + } + + return $docFreq; + } + + /** + * Retrive similarity used by index reader + * + * @return Zend_Search_Lucene_Search_Similarity + * @throws Zend_Search_Lucene_Exception + */ + public function getSimilarity() + { + if (count($this->_indices) == 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices list is empty'); + } + + $similarity = reset($this->_indices)->getSimilarity(); + + foreach ($this->_indices as $index) { + if ($index->getSimilarity() !== $similarity) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Indices have different similarity.'); + } + } + + return $similarity; + } + + /** + * Returns a normalization factor for "field, document" pair. + * + * @param integer $id + * @param string $fieldName + * @return float + */ + public function norm($id, $fieldName) + { + foreach ($this->_indices as $index) { + $indexCount = $index->count(); + + if ($indexCount > $id) { + return $index->norm($id, $fieldName); + } + + $id -= $indexCount; + } + + return null; + } + + /** + * Returns true if any documents have been deleted from this index. + * + * @return boolean + */ + public function hasDeletions() + { + foreach ($this->_indices as $index) { + if ($index->hasDeletions()) { + return true; + } + } + + return false; + } + + /** + * Deletes a document from the index. + * $id is an internal document id + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @throws Zend_Search_Lucene_Exception + */ + public function delete($id) + { + foreach ($this->_indices as $index) { + $indexCount = $index->count(); + + if ($indexCount > $id) { + $index->delete($id); + return; + } + + $id -= $indexCount; + } + + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Document id is out of the range.'); + } + + + /** + * Callback used to choose target index for new documents + * + * Function/method signature: + * Zend_Search_Lucene_Interface callbackFunction(Zend_Search_Lucene_Document $document, array $indices); + * + * null means "default documents distributing algorithm" + * + * @var callback + */ + protected $_documentDistributorCallBack = null; + + /** + * Set callback for choosing target index. + * + * @param callback $callback + * @throws Zend_Search_Lucene_Exception + */ + public function setDocumentDistributorCallback($callback) + { + if ($callback !== null && !is_callable($callback)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('$callback parameter must be a valid callback.'); + } + + $this->_documentDistributorCallBack = $callback; + } + + /** + * Get callback for choosing target index. + * + * @return callback + */ + public function getDocumentDistributorCallback() + { + return $this->_documentDistributorCallBack; + } + + /** + * Adds a document to this index. + * + * @param Zend_Search_Lucene_Document $document + * @throws Zend_Search_Lucene_Exception + */ + public function addDocument(Zend_Search_Lucene_Document $document) + { + if ($this->_documentDistributorCallBack !== null) { + $index = call_user_func($this->_documentDistributorCallBack, $document, $this->_indices); + } else { + $index = $this->_indices[array_rand($this->_indices)]; + } + + $index->addDocument($document); + } + + /** + * Commit changes resulting from delete() or undeleteAll() operations. + */ + public function commit() + { + foreach ($this->_indices as $index) { + $index->commit(); + } + } + + /** + * Optimize index. + * + * Merges all segments into one + */ + public function optimize() + { + foreach ($this->_indices as $index) { + $index->optimise(); + } + } + + /** + * Returns an array of all terms in this index. + * + * @return array + */ + public function terms() + { + $termsList = array(); + + foreach ($this->_indices as $index) { + $termsList[] = $index->terms(); + } + + return array_unique(call_user_func_array('array_merge', $termsList)); + } + + + /** + * Terms stream priority queue object + * + * @var Zend_Search_Lucene_TermStreamsPriorityQueue + */ + private $_termsStream = null; + + /** + * Reset terms stream. + */ + public function resetTermsStream() + { + if ($this->_termsStream === null) { + /** Zend_Search_Lucene_TermStreamsPriorityQueue */ + require_once 'Zend/Search/Lucene/TermStreamsPriorityQueue.php'; + + $this->_termsStream = new Zend_Search_Lucene_TermStreamsPriorityQueue($this->_indices); + } else { + $this->_termsStream->resetTermsStream(); + } + } + + /** + * Skip terms stream up to specified term preffix. + * + * Prefix contains fully specified field info and portion of searched term + * + * @param Zend_Search_Lucene_Index_Term $prefix + */ + public function skipTo(Zend_Search_Lucene_Index_Term $prefix) + { + $this->_termsStream->skipTo($prefix); + } + + /** + * Scans terms dictionary and returns next term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function nextTerm() + { + return $this->_termsStream->nextTerm(); + } + + /** + * Returns term in current position + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function currentTerm() + { + return $this->_termsStream->currentTerm(); + } + + /** + * Close terms stream + * + * Should be used for resources clean up if stream is not read up to the end + */ + public function closeTermsStream() + { + $this->_termsStream->closeTermsStream(); + $this->_termsStream = null; + } + + + /** + * Undeletes all documents currently marked as deleted in this index. + */ + public function undeleteAll() + { + foreach ($this->_indices as $index) { + $index->undeleteAll(); + } + } + + + /** + * Add reference to the index object + * + * @internal + */ + public function addReference() + { + // Do nothing, since it's never referenced by indices + } + + /** + * Remove reference from the index object + * + * When reference count becomes zero, index is closed and resources are cleaned up + * + * @internal + */ + public function removeReference() + { + // Do nothing, since it's never referenced by indices + } +} + +/** + * This class is provided for backwards-compatibility (See ZF-12067) + * + * @category Zend + * @package Zend_Search_Lucene + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ +class Zend_Search_Lucene_Interface_MultiSearcher + extends Zend_Search_Lucene_MultiSearcher +{ +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/PriorityQueue.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/PriorityQueue.php new file mode 100644 index 00000000000..ffa168c6d09 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/PriorityQueue.php @@ -0,0 +1,171 @@ +_heap); + $parentId = ($nodeId-1) >> 1; // floor( ($nodeId-1)/2 ) + + while ($nodeId != 0 && $this->_less($element, $this->_heap[$parentId])) { + // Move parent node down + $this->_heap[$nodeId] = $this->_heap[$parentId]; + + // Move pointer to the next level of tree + $nodeId = $parentId; + $parentId = ($nodeId-1) >> 1; // floor( ($nodeId-1)/2 ) + } + + // Put new node into the tree + $this->_heap[$nodeId] = $element; + } + + + /** + * Return least element of the queue + * + * Constant time + * + * @return mixed + */ + public function top() + { + if (count($this->_heap) == 0) { + return null; + } + + return $this->_heap[0]; + } + + + /** + * Removes and return least element of the queue + * + * O(log(N)) time + * + * @return mixed + */ + public function pop() + { + if (count($this->_heap) == 0) { + return null; + } + + $top = $this->_heap[0]; + $lastId = count($this->_heap) - 1; + + /** + * Find appropriate position for last node + */ + $nodeId = 0; // Start from a top + $childId = 1; // First child + + // Choose smaller child + if ($lastId > 2 && $this->_less($this->_heap[2], $this->_heap[1])) { + $childId = 2; + } + + while ($childId < $lastId && + $this->_less($this->_heap[$childId], $this->_heap[$lastId]) + ) { + // Move child node up + $this->_heap[$nodeId] = $this->_heap[$childId]; + + $nodeId = $childId; // Go down + $childId = ($nodeId << 1) + 1; // First child + + // Choose smaller child + if (($childId+1) < $lastId && + $this->_less($this->_heap[$childId+1], $this->_heap[$childId]) + ) { + $childId++; + } + } + + // Move last element to the new position + $this->_heap[$nodeId] = $this->_heap[$lastId]; + unset($this->_heap[$lastId]); + + return $top; + } + + + /** + * Clear queue + */ + public function clear() + { + $this->_heap = array(); + } + + + /** + * Compare elements + * + * Returns true, if $el1 is less than $el2; else otherwise + * + * @param mixed $el1 + * @param mixed $el2 + * @return boolean + */ + abstract protected function _less($el1, $el2); +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Proxy.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Proxy.php new file mode 100644 index 00000000000..b25f01d77dd --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Proxy.php @@ -0,0 +1,612 @@ +_index = $index; + $this->_index->addReference(); + } + + /** + * Object destructor + */ + public function __destruct() + { + if ($this->_index !== null) { + // This code is invoked if Zend_Search_Lucene_Interface object constructor throws an exception + $this->_index->removeReference(); + } + $this->_index = null; + } + + /** + * Get current generation number + * + * Returns generation number + * 0 means pre-2.1 index format + * -1 means there are no segments files. + * + * @param Zend_Search_Lucene_Storage_Directory $directory + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public static function getActualGeneration(Zend_Search_Lucene_Storage_Directory $directory) + { + Zend_Search_Lucene::getActualGeneration($directory); + } + + /** + * Get segments file name + * + * @param integer $generation + * @return string + */ + public static function getSegmentFileName($generation) + { + Zend_Search_Lucene::getSegmentFileName($generation); + } + + /** + * Get index format version + * + * @return integer + */ + public function getFormatVersion() + { + return $this->_index->getFormatVersion(); + } + + /** + * Set index format version. + * Index is converted to this format at the nearest upfdate time + * + * @param int $formatVersion + * @throws Zend_Search_Lucene_Exception + */ + public function setFormatVersion($formatVersion) + { + $this->_index->setFormatVersion($formatVersion); + } + + /** + * Returns the Zend_Search_Lucene_Storage_Directory instance for this index. + * + * @return Zend_Search_Lucene_Storage_Directory + */ + public function getDirectory() + { + return $this->_index->getDirectory(); + } + + /** + * Returns the total number of documents in this index (including deleted documents). + * + * @return integer + */ + public function count() + { + return $this->_index->count(); + } + + /** + * Returns one greater than the largest possible document number. + * This may be used to, e.g., determine how big to allocate a structure which will have + * an element for every document number in an index. + * + * @return integer + */ + public function maxDoc() + { + return $this->_index->maxDoc(); + } + + /** + * Returns the total number of non-deleted documents in this index. + * + * @return integer + */ + public function numDocs() + { + return $this->_index->numDocs(); + } + + /** + * Checks, that document is deleted + * + * @param integer $id + * @return boolean + * @throws Zend_Search_Lucene_Exception Exception is thrown if $id is out of the range + */ + public function isDeleted($id) + { + return $this->_index->isDeleted($id); + } + + /** + * Set default search field. + * + * Null means, that search is performed through all fields by default + * + * Default value is null + * + * @param string $fieldName + */ + public static function setDefaultSearchField($fieldName) + { + Zend_Search_Lucene::setDefaultSearchField($fieldName); + } + + /** + * Get default search field. + * + * Null means, that search is performed through all fields by default + * + * @return string + */ + public static function getDefaultSearchField() + { + return Zend_Search_Lucene::getDefaultSearchField(); + } + + /** + * Set result set limit. + * + * 0 (default) means no limit + * + * @param integer $limit + */ + public static function setResultSetLimit($limit) + { + Zend_Search_Lucene::setResultSetLimit($limit); + } + + /** + * Set result set limit. + * + * 0 means no limit + * + * @return integer + */ + public static function getResultSetLimit() + { + return Zend_Search_Lucene::getResultSetLimit(); + } + + /** + * Retrieve index maxBufferedDocs option + * + * maxBufferedDocs is a minimal number of documents required before + * the buffered in-memory documents are written into a new Segment + * + * Default value is 10 + * + * @return integer + */ + public function getMaxBufferedDocs() + { + return $this->_index->getMaxBufferedDocs(); + } + + /** + * Set index maxBufferedDocs option + * + * maxBufferedDocs is a minimal number of documents required before + * the buffered in-memory documents are written into a new Segment + * + * Default value is 10 + * + * @param integer $maxBufferedDocs + */ + public function setMaxBufferedDocs($maxBufferedDocs) + { + $this->_index->setMaxBufferedDocs($maxBufferedDocs); + } + + + /** + * Retrieve index maxMergeDocs option + * + * maxMergeDocs is a largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + * Default value is PHP_INT_MAX + * + * @return integer + */ + public function getMaxMergeDocs() + { + return $this->_index->getMaxMergeDocs(); + } + + /** + * Set index maxMergeDocs option + * + * maxMergeDocs is a largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + * Default value is PHP_INT_MAX + * + * @param integer $maxMergeDocs + */ + public function setMaxMergeDocs($maxMergeDocs) + { + $this->_index->setMaxMergeDocs($maxMergeDocs); + } + + + /** + * Retrieve index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @return integer + */ + public function getMergeFactor() + { + return $this->_index->getMergeFactor(); + } + + /** + * Set index mergeFactor option + * + * mergeFactor determines how often segment indices are merged by addDocument(). + * With smaller values, less RAM is used while indexing, + * and searches on unoptimized indices are faster, + * but indexing speed is slower. + * With larger values, more RAM is used during indexing, + * and while searches on unoptimized indices are slower, + * indexing is faster. + * Thus larger values (> 10) are best for batch index creation, + * and smaller values (< 10) for indices that are interactively maintained. + * + * Default value is 10 + * + * @param integer $maxMergeDocs + */ + public function setMergeFactor($mergeFactor) + { + $this->_index->setMergeFactor($mergeFactor); + } + + /** + * Performs a query against the index and returns an array + * of Zend_Search_Lucene_Search_QueryHit objects. + * Input is a string or Zend_Search_Lucene_Search_Query. + * + * @param mixed $query + * @return array Zend_Search_Lucene_Search_QueryHit + * @throws Zend_Search_Lucene_Exception + */ + public function find($query) + { + // actual parameter list + $parameters = func_get_args(); + + // invoke $this->_index->find() method with specified parameters + return call_user_func_array(array(&$this->_index, 'find'), $parameters); + } + + /** + * Returns a list of all unique field names that exist in this index. + * + * @param boolean $indexed + * @return array + */ + public function getFieldNames($indexed = false) + { + return $this->_index->getFieldNames($indexed); + } + + /** + * Returns a Zend_Search_Lucene_Document object for the document + * number $id in this index. + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @return Zend_Search_Lucene_Document + */ + public function getDocument($id) + { + return $this->_index->getDocument($id); + } + + /** + * Returns true if index contain documents with specified term. + * + * Is used for query optimization. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return boolean + */ + public function hasTerm(Zend_Search_Lucene_Index_Term $term) + { + return $this->_index->hasTerm($term); + } + + /** + * Returns IDs of all the documents containing term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termDocs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + return $this->_index->termDocs($term, $docsFilter); + } + + /** + * Returns documents filter for all documents containing term. + * + * It performs the same operation as termDocs, but return result as + * Zend_Search_Lucene_Index_DocsFilter object + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return Zend_Search_Lucene_Index_DocsFilter + */ + public function termDocsFilter(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + return $this->_index->termDocsFilter($term, $docsFilter); + } + + /** + * Returns an array of all term freqs. + * Return array structure: array( docId => freq, ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return integer + */ + public function termFreqs(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + return $this->_index->termFreqs($term, $docsFilter); + } + + /** + * Returns an array of all term positions in the documents. + * Return array structure: array( docId => array( pos1, pos2, ...), ...) + * + * @param Zend_Search_Lucene_Index_Term $term + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @return array + */ + public function termPositions(Zend_Search_Lucene_Index_Term $term, $docsFilter = null) + { + return $this->_index->termPositions($term, $docsFilter); + } + + /** + * Returns the number of documents in this index containing the $term. + * + * @param Zend_Search_Lucene_Index_Term $term + * @return integer + */ + public function docFreq(Zend_Search_Lucene_Index_Term $term) + { + return $this->_index->docFreq($term); + } + + /** + * Retrive similarity used by index reader + * + * @return Zend_Search_Lucene_Search_Similarity + */ + public function getSimilarity() + { + return $this->_index->getSimilarity(); + } + + /** + * Returns a normalization factor for "field, document" pair. + * + * @param integer $id + * @param string $fieldName + * @return float + */ + public function norm($id, $fieldName) + { + return $this->_index->norm($id, $fieldName); + } + + /** + * Returns true if any documents have been deleted from this index. + * + * @return boolean + */ + public function hasDeletions() + { + return $this->_index->hasDeletions(); + } + + /** + * Deletes a document from the index. + * $id is an internal document id + * + * @param integer|Zend_Search_Lucene_Search_QueryHit $id + * @throws Zend_Search_Lucene_Exception + */ + public function delete($id) + { + return $this->_index->delete($id); + } + + /** + * Adds a document to this index. + * + * @param Zend_Search_Lucene_Document $document + */ + public function addDocument(Zend_Search_Lucene_Document $document) + { + $this->_index->addDocument($document); + } + + /** + * Commit changes resulting from delete() or undeleteAll() operations. + */ + public function commit() + { + $this->_index->commit(); + } + + /** + * Optimize index. + * + * Merges all segments into one + */ + public function optimize() + { + $this->_index->optimize(); + } + + /** + * Returns an array of all terms in this index. + * + * @return array + */ + public function terms() + { + return $this->_index->terms(); + } + + + /** + * Reset terms stream. + */ + public function resetTermsStream() + { + $this->_index->resetTermsStream(); + } + + /** + * Skip terms stream up to specified term preffix. + * + * Prefix contains fully specified field info and portion of searched term + * + * @param Zend_Search_Lucene_Index_Term $prefix + */ + public function skipTo(Zend_Search_Lucene_Index_Term $prefix) + { + return $this->_index->skipTo($prefix); + } + + /** + * Scans terms dictionary and returns next term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function nextTerm() + { + return $this->_index->nextTerm(); + } + + /** + * Returns term in current position + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function currentTerm() + { + return $this->_index->currentTerm(); + } + + /** + * Close terms stream + * + * Should be used for resources clean up if stream is not read up to the end + */ + public function closeTermsStream() + { + $this->_index->closeTermsStream(); + } + + + /** + * Undeletes all documents currently marked as deleted in this index. + */ + public function undeleteAll() + { + return $this->_index->undeleteAll(); + } + + /** + * Add reference to the index object + * + * @internal + */ + public function addReference() + { + return $this->_index->addReference(); + } + + /** + * Remove reference from the index object + * + * When reference count becomes zero, index is closed and resources are cleaned up + * + * @internal + */ + public function removeReference() + { + return $this->_index->removeReference(); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/BooleanExpressionRecognizer.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/BooleanExpressionRecognizer.php new file mode 100644 index 00000000000..4dc28931880 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/BooleanExpressionRecognizer.php @@ -0,0 +1,278 @@ +, ) + * + * So, it has a structure: + * array( array( array(, ), // first literal of first conjuction + * array(, ), // second literal of first conjuction + * ... + * array(, ) + * ), // end of first conjuction + * array( array(, ), // first literal of second conjuction + * array(, ), // second literal of second conjuction + * ... + * array(, ) + * ), // end of second conjuction + * ... + * ) // end of structure + * + * @var array + */ + private $_conjunctions = array(); + + /** + * Current conjuction + * + * @var array + */ + private $_currentConjunction = array(); + + + /** + * Object constructor + */ + public function __construct() + { + parent::__construct( array(self::ST_START, + self::ST_LITERAL, + self::ST_NOT_OPERATOR, + self::ST_AND_OPERATOR, + self::ST_OR_OPERATOR), + array(self::IN_LITERAL, + self::IN_NOT_OPERATOR, + self::IN_AND_OPERATOR, + self::IN_OR_OPERATOR)); + + $emptyOperatorAction = new Zend_Search_Lucene_FSMAction($this, 'emptyOperatorAction'); + $emptyNotOperatorAction = new Zend_Search_Lucene_FSMAction($this, 'emptyNotOperatorAction'); + + $this->addRules(array( array(self::ST_START, self::IN_LITERAL, self::ST_LITERAL), + array(self::ST_START, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR), + + array(self::ST_LITERAL, self::IN_AND_OPERATOR, self::ST_AND_OPERATOR), + array(self::ST_LITERAL, self::IN_OR_OPERATOR, self::ST_OR_OPERATOR), + array(self::ST_LITERAL, self::IN_LITERAL, self::ST_LITERAL, $emptyOperatorAction), + array(self::ST_LITERAL, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR, $emptyNotOperatorAction), + + array(self::ST_NOT_OPERATOR, self::IN_LITERAL, self::ST_LITERAL), + + array(self::ST_AND_OPERATOR, self::IN_LITERAL, self::ST_LITERAL), + array(self::ST_AND_OPERATOR, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR), + + array(self::ST_OR_OPERATOR, self::IN_LITERAL, self::ST_LITERAL), + array(self::ST_OR_OPERATOR, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR), + )); + + $notOperatorAction = new Zend_Search_Lucene_FSMAction($this, 'notOperatorAction'); + $orOperatorAction = new Zend_Search_Lucene_FSMAction($this, 'orOperatorAction'); + $literalAction = new Zend_Search_Lucene_FSMAction($this, 'literalAction'); + + + $this->addEntryAction(self::ST_NOT_OPERATOR, $notOperatorAction); + $this->addEntryAction(self::ST_OR_OPERATOR, $orOperatorAction); + $this->addEntryAction(self::ST_LITERAL, $literalAction); + } + + + /** + * Process next operator. + * + * Operators are defined by class constants: IN_AND_OPERATOR, IN_OR_OPERATOR and IN_NOT_OPERATOR + * + * @param integer $operator + */ + public function processOperator($operator) + { + $this->process($operator); + } + + /** + * Process expression literal. + * + * @param integer $operator + */ + public function processLiteral($literal) + { + $this->_literal = $literal; + + $this->process(self::IN_LITERAL); + } + + /** + * Finish an expression and return result + * + * Result is a set of boolean query conjunctions + * + * Each conjunction is an array of conjunction elements + * Each conjunction element is presented with two-elements array: + * array(, ) + * + * So, it has a structure: + * array( array( array(, ), // first literal of first conjuction + * array(, ), // second literal of first conjuction + * ... + * array(, ) + * ), // end of first conjuction + * array( array(, ), // first literal of second conjuction + * array(, ), // second literal of second conjuction + * ... + * array(, ) + * ), // end of second conjuction + * ... + * ) // end of structure + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function finishExpression() + { + if ($this->getState() != self::ST_LITERAL) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Literal expected.'); + } + + $this->_conjunctions[] = $this->_currentConjunction; + + return $this->_conjunctions; + } + + + + /********************************************************************* + * Actions implementation + *********************************************************************/ + + /** + * default (omitted) operator processing + */ + public function emptyOperatorAction() + { + /** Zend_Search_Lucene_Search_QueryParser */ + require_once 'Zend/Search/Lucene/Search/QueryParser.php'; + + if (Zend_Search_Lucene_Search_QueryParser::getDefaultOperator() == Zend_Search_Lucene_Search_QueryParser::B_AND) { + // Do nothing + } else { + $this->orOperatorAction(); + } + + // Process literal + $this->literalAction(); + } + + /** + * default (omitted) + NOT operator processing + */ + public function emptyNotOperatorAction() + { + /** Zend_Search_Lucene_Search_QueryParser */ + require_once 'Zend/Search/Lucene/Search/QueryParser.php'; + + if (Zend_Search_Lucene_Search_QueryParser::getDefaultOperator() == Zend_Search_Lucene_Search_QueryParser::B_AND) { + // Do nothing + } else { + $this->orOperatorAction(); + } + + // Process NOT operator + $this->notOperatorAction(); + } + + + /** + * NOT operator processing + */ + public function notOperatorAction() + { + $this->_negativeLiteral = true; + } + + /** + * OR operator processing + * Close current conjunction + */ + public function orOperatorAction() + { + $this->_conjunctions[] = $this->_currentConjunction; + $this->_currentConjunction = array(); + } + + /** + * Literal processing + */ + public function literalAction() + { + // Add literal to the current conjunction + $this->_currentConjunction[] = array($this->_literal, !$this->_negativeLiteral); + + // Switch off negative signal + $this->_negativeLiteral = false; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Default.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Default.php new file mode 100644 index 00000000000..d7f7883ae32 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Default.php @@ -0,0 +1,94 @@ +_doc = $document; + } + + /** + * Get document for highlighting. + * + * @return Zend_Search_Lucene_Document_Html $document + */ + public function getDocument() + { + return $this->_doc; + } + + /** + * Highlight specified words + * + * @param string|array $words Words to highlight. They could be organized using the array or string. + */ + public function highlight($words) + { + $color = $this->_highlightColors[$this->_currentColorIndex]; + $this->_currentColorIndex = ($this->_currentColorIndex + 1) % count($this->_highlightColors); + + $this->_doc->highlight($words, $color); + } + +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Interface.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Interface.php new file mode 100644 index 00000000000..274f4f14d2a --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Highlighter/Interface.php @@ -0,0 +1,53 @@ +_boost; + } + + /** + * Sets the boost for this query clause to $boost. + * + * @param float $boost + */ + public function setBoost($boost) + { + $this->_boost = $boost; + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + abstract public function score($docId, Zend_Search_Lucene_Interface $reader); + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + */ + abstract public function matchedDocs(); + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * Query specific implementation + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + */ + abstract public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null); + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + */ + abstract public function createWeight(Zend_Search_Lucene_Interface $reader); + + /** + * Constructs an initializes a Weight for a _top-level_query_. + * + * @param Zend_Search_Lucene_Interface $reader + */ + protected function _initWeight(Zend_Search_Lucene_Interface $reader) + { + // Check, that it's a top-level query and query weight is not initialized yet. + if ($this->_weight !== null) { + return $this->_weight; + } + + $this->createWeight($reader); + $sum = $this->_weight->sumOfSquaredWeights(); + $queryNorm = $reader->getSimilarity()->queryNorm($sum); + $this->_weight->normalize($queryNorm); + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + abstract public function rewrite(Zend_Search_Lucene_Interface $index); + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + abstract public function optimize(Zend_Search_Lucene_Interface $index); + + /** + * Reset query, so it can be reused within other queries or + * with other indeces + */ + public function reset() + { + $this->_weight = null; + } + + + /** + * Print a query + * + * @return string + */ + abstract public function __toString(); + + /** + * Return query terms + * + * @return array + */ + abstract public function getQueryTerms(); + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + abstract protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter); + + /** + * Highlight matches in $inputHTML + * + * @param string $inputHTML + * @param string $defaultEncoding HTML encoding, is used if it's not specified using Content-type HTTP-EQUIV meta tag. + * @param Zend_Search_Lucene_Search_Highlighter_Interface|null $highlighter + * @return string + */ + public function highlightMatches($inputHTML, $defaultEncoding = '', $highlighter = null) + { + if ($highlighter === null) { + require_once 'Zend/Search/Lucene/Search/Highlighter/Default.php'; + $highlighter = new Zend_Search_Lucene_Search_Highlighter_Default(); + } + + /** Zend_Search_Lucene_Document_Html */ + require_once 'Zend/Search/Lucene/Document/Html.php'; + + $doc = Zend_Search_Lucene_Document_Html::loadHTML($inputHTML, false, $defaultEncoding); + $highlighter->setDocument($doc); + + $this->_highlightMatches($highlighter); + + return $doc->getHTML(); + } + + /** + * Highlight matches in $inputHtmlFragment and return it (without HTML header and body tag) + * + * @param string $inputHtmlFragment + * @param string $encoding Input HTML string encoding + * @param Zend_Search_Lucene_Search_Highlighter_Interface|null $highlighter + * @return string + */ + public function htmlFragmentHighlightMatches($inputHtmlFragment, $encoding = 'UTF-8', $highlighter = null) + { + if ($highlighter === null) { + require_once 'Zend/Search/Lucene/Search/Highlighter/Default.php'; + $highlighter = new Zend_Search_Lucene_Search_Highlighter_Default(); + } + + $inputHTML = '' + . iconv($encoding, 'UTF-8//IGNORE', $inputHtmlFragment) . ''; + + /** Zend_Search_Lucene_Document_Html */ + require_once 'Zend/Search/Lucene/Document/Html.php'; + + $doc = Zend_Search_Lucene_Document_Html::loadHTML($inputHTML); + $highlighter->setDocument($doc); + + $this->_highlightMatches($highlighter); + + return $doc->getHtmlBody(); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Boolean.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Boolean.php new file mode 100644 index 00000000000..5f2112431b4 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Boolean.php @@ -0,0 +1,815 @@ +_subqueries = $subqueries; + + $this->_signs = null; + // Check if all subqueries are required + if (is_array($signs)) { + foreach ($signs as $sign ) { + if ($sign !== true) { + $this->_signs = $signs; + break; + } + } + } + } + } + + + /** + * Add a $subquery (Zend_Search_Lucene_Search_Query) to this query. + * + * The sign is specified as: + * TRUE - subquery is required + * FALSE - subquery is prohibited + * NULL - subquery is neither prohibited, nor required + * + * @param Zend_Search_Lucene_Search_Query $subquery + * @param boolean|null $sign + * @return void + */ + public function addSubquery(Zend_Search_Lucene_Search_Query $subquery, $sign=null) { + if ($sign !== true || $this->_signs !== null) { // Skip, if all subqueries are required + if ($this->_signs === null) { // Check, If all previous subqueries are required + $this->_signs = array(); + foreach ($this->_subqueries as $prevSubquery) { + $this->_signs[] = true; + } + } + $this->_signs[] = $sign; + } + + $this->_subqueries[] = $subquery; + } + + /** + * Re-write queries into primitive queries + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + $query->setBoost($this->getBoost()); + + foreach ($this->_subqueries as $subqueryId => $subquery) { + $query->addSubquery($subquery->rewrite($index), + ($this->_signs === null)? true : $this->_signs[$subqueryId]); + } + + return $query; + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + $subqueries = array(); + $signs = array(); + + // Optimize all subqueries + foreach ($this->_subqueries as $id => $subquery) { + $subqueries[] = $subquery->optimize($index); + $signs[] = ($this->_signs === null)? true : $this->_signs[$id]; + } + + // Remove insignificant subqueries + foreach ($subqueries as $id => $subquery) { + if ($subquery instanceof Zend_Search_Lucene_Search_Query_Insignificant) { + // Insignificant subquery has to be removed anyway + unset($subqueries[$id]); + unset($signs[$id]); + } + } + if (count($subqueries) == 0) { + // Boolean query doesn't has non-insignificant subqueries + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + // Check if all non-insignificant subqueries are prohibited + $allProhibited = true; + foreach ($signs as $sign) { + if ($sign !== false) { + $allProhibited = false; + break; + } + } + if ($allProhibited) { + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + + + // Check for empty subqueries + foreach ($subqueries as $id => $subquery) { + if ($subquery instanceof Zend_Search_Lucene_Search_Query_Empty) { + if ($signs[$id] === true) { + // Matching is required, but is actually empty + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } else { + // Matching is optional or prohibited, but is empty + // Remove it from subqueries and signs list + unset($subqueries[$id]); + unset($signs[$id]); + } + } + } + + // Check, if reduced subqueries list is empty + if (count($subqueries) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + // Check if all non-empty subqueries are prohibited + $allProhibited = true; + foreach ($signs as $sign) { + if ($sign !== false) { + $allProhibited = false; + break; + } + } + if ($allProhibited) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + + // Check, if reduced subqueries list has only one entry + if (count($subqueries) == 1) { + // It's a query with only one required or optional clause + // (it's already checked, that it's not a prohibited clause) + + if ($this->getBoost() == 1) { + return reset($subqueries); + } + + $optimizedQuery = clone reset($subqueries); + $optimizedQuery->setBoost($optimizedQuery->getBoost()*$this->getBoost()); + + return $optimizedQuery; + } + + + // Prepare first candidate for optimized query + $optimizedQuery = new Zend_Search_Lucene_Search_Query_Boolean($subqueries, $signs); + $optimizedQuery->setBoost($this->getBoost()); + + + $terms = array(); + $tsigns = array(); + $boostFactors = array(); + + // Try to decompose term and multi-term subqueries + foreach ($subqueries as $id => $subquery) { + if ($subquery instanceof Zend_Search_Lucene_Search_Query_Term) { + $terms[] = $subquery->getTerm(); + $tsigns[] = $signs[$id]; + $boostFactors[] = $subquery->getBoost(); + + // remove subquery from a subqueries list + unset($subqueries[$id]); + unset($signs[$id]); + } else if ($subquery instanceof Zend_Search_Lucene_Search_Query_MultiTerm) { + $subTerms = $subquery->getTerms(); + $subSigns = $subquery->getSigns(); + + if ($signs[$id] === true) { + // It's a required multi-term subquery. + // Something like '... +(+term1 -term2 term3 ...) ...' + + // Multi-term required subquery can be decomposed only if it contains + // required terms and doesn't contain prohibited terms: + // ... +(+term1 term2 ...) ... => ... +term1 term2 ... + // + // Check this + $hasRequired = false; + $hasProhibited = false; + if ($subSigns === null) { + // All subterms are required + $hasRequired = true; + } else { + foreach ($subSigns as $sign) { + if ($sign === true) { + $hasRequired = true; + } else if ($sign === false) { + $hasProhibited = true; + break; + } + } + } + // Continue if subquery has prohibited terms or doesn't have required terms + if ($hasProhibited || !$hasRequired) { + continue; + } + + foreach ($subTerms as $termId => $term) { + $terms[] = $term; + $tsigns[] = ($subSigns === null)? true : $subSigns[$termId]; + $boostFactors[] = $subquery->getBoost(); + } + + // remove subquery from a subqueries list + unset($subqueries[$id]); + unset($signs[$id]); + + } else { // $signs[$id] === null || $signs[$id] === false + // It's an optional or prohibited multi-term subquery. + // Something like '... (+term1 -term2 term3 ...) ...' + // or + // something like '... -(+term1 -term2 term3 ...) ...' + + // Multi-term optional and required subqueries can be decomposed + // only if all terms are optional. + // + // Check if all terms are optional. + $onlyOptional = true; + if ($subSigns === null) { + // All subterms are required + $onlyOptional = false; + } else { + foreach ($subSigns as $sign) { + if ($sign !== null) { + $onlyOptional = false; + break; + } + } + } + + // Continue if non-optional terms are presented in this multi-term subquery + if (!$onlyOptional) { + continue; + } + + foreach ($subTerms as $termId => $term) { + $terms[] = $term; + $tsigns[] = ($signs[$id] === null)? null /* optional */ : + false /* prohibited */; + $boostFactors[] = $subquery->getBoost(); + } + + // remove subquery from a subqueries list + unset($subqueries[$id]); + unset($signs[$id]); + } + } + } + + + // Check, if there are no decomposed subqueries + if (count($terms) == 0 ) { + // return prepared candidate + return $optimizedQuery; + } + + + // Check, if all subqueries have been decomposed and all terms has the same boost factor + if (count($subqueries) == 0 && count(array_unique($boostFactors)) == 1) { + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $optimizedQuery = new Zend_Search_Lucene_Search_Query_MultiTerm($terms, $tsigns); + $optimizedQuery->setBoost(reset($boostFactors)*$this->getBoost()); + + return $optimizedQuery; + } + + + // This boolean query can't be transformed to Term/MultiTerm query and still contains + // several subqueries + + // Separate prohibited terms + $prohibitedTerms = array(); + foreach ($terms as $id => $term) { + if ($tsigns[$id] === false) { + $prohibitedTerms[] = $term; + + unset($terms[$id]); + unset($tsigns[$id]); + unset($boostFactors[$id]); + } + } + + if (count($terms) == 1) { + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $clause = new Zend_Search_Lucene_Search_Query_Term(reset($terms)); + $clause->setBoost(reset($boostFactors)); + + $subqueries[] = $clause; + $signs[] = reset($tsigns); + + // Clear terms list + $terms = array(); + } else if (count($terms) > 1 && count(array_unique($boostFactors)) == 1) { + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $clause = new Zend_Search_Lucene_Search_Query_MultiTerm($terms, $tsigns); + $clause->setBoost(reset($boostFactors)); + + $subqueries[] = $clause; + // Clause sign is 'required' if clause contains required terms. 'Optional' otherwise. + $signs[] = (in_array(true, $tsigns))? true : null; + + // Clear terms list + $terms = array(); + } + + if (count($prohibitedTerms) == 1) { + // (boost factors are not significant for prohibited clauses) + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $subqueries[] = new Zend_Search_Lucene_Search_Query_Term(reset($prohibitedTerms)); + $signs[] = false; + + // Clear prohibited terms list + $prohibitedTerms = array(); + } else if (count($prohibitedTerms) > 1) { + // prepare signs array + $prohibitedSigns = array(); + foreach ($prohibitedTerms as $id => $term) { + // all prohibited term are grouped as optional into multi-term query + $prohibitedSigns[$id] = null; + } + + // (boost factors are not significant for prohibited clauses) + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $subqueries[] = new Zend_Search_Lucene_Search_Query_MultiTerm($prohibitedTerms, $prohibitedSigns); + // Clause sign is 'prohibited' + $signs[] = false; + + // Clear terms list + $prohibitedTerms = array(); + } + + /** @todo Group terms with the same boost factors together */ + + // Check, that all terms are processed + // Replace candidate for optimized query + if (count($terms) == 0 && count($prohibitedTerms) == 0) { + $optimizedQuery = new Zend_Search_Lucene_Search_Query_Boolean($subqueries, $signs); + $optimizedQuery->setBoost($this->getBoost()); + } + + return $optimizedQuery; + } + + /** + * Returns subqueries + * + * @return array + */ + public function getSubqueries() + { + return $this->_subqueries; + } + + + /** + * Return subqueries signs + * + * @return array + */ + public function getSigns() + { + return $this->_signs; + } + + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Search/Weight/Boolean.php'; + $this->_weight = new Zend_Search_Lucene_Search_Weight_Boolean($this, $reader); + return $this->_weight; + } + + + /** + * Calculate result vector for Conjunction query + * (like ' AND AND ') + */ + private function _calculateConjunctionResult() + { + $this->_resVector = null; + + if (count($this->_subqueries) == 0) { + $this->_resVector = array(); + } + + $resVectors = array(); + $resVectorsSizes = array(); + $resVectorsIds = array(); // is used to prevent arrays comparison + foreach ($this->_subqueries as $subqueryId => $subquery) { + $resVectors[] = $subquery->matchedDocs(); + $resVectorsSizes[] = count(end($resVectors)); + $resVectorsIds[] = $subqueryId; + } + // sort resvectors in order of subquery cardinality increasing + array_multisort($resVectorsSizes, SORT_ASC, SORT_NUMERIC, + $resVectorsIds, SORT_ASC, SORT_NUMERIC, + $resVectors); + + foreach ($resVectors as $nextResVector) { + if($this->_resVector === null) { + $this->_resVector = $nextResVector; + } else { + //$this->_resVector = array_intersect_key($this->_resVector, $nextResVector); + + /** + * This code is used as workaround for array_intersect_key() slowness problem. + */ + $updatedVector = array(); + foreach ($this->_resVector as $id => $value) { + if (isset($nextResVector[$id])) { + $updatedVector[$id] = $value; + } + } + $this->_resVector = $updatedVector; + } + + if (count($this->_resVector) == 0) { + // Empty result set, we don't need to check other terms + break; + } + } + + // ksort($this->_resVector, SORT_NUMERIC); + // Used algorithm doesn't change elements order + } + + + /** + * Calculate result vector for non Conjunction query + * (like ' AND AND NOT OR ') + */ + private function _calculateNonConjunctionResult() + { + $requiredVectors = array(); + $requiredVectorsSizes = array(); + $requiredVectorsIds = array(); // is used to prevent arrays comparison + + $optional = array(); + + foreach ($this->_subqueries as $subqueryId => $subquery) { + if ($this->_signs[$subqueryId] === true) { + // required + $requiredVectors[] = $subquery->matchedDocs(); + $requiredVectorsSizes[] = count(end($requiredVectors)); + $requiredVectorsIds[] = $subqueryId; + } elseif ($this->_signs[$subqueryId] === false) { + // prohibited + // Do nothing. matchedDocs() may include non-matching id's + // Calculating prohibited vector may take significant time, but do not affect the result + // Skipped. + } else { + // neither required, nor prohibited + // array union + $optional += $subquery->matchedDocs(); + } + } + + // sort resvectors in order of subquery cardinality increasing + array_multisort($requiredVectorsSizes, SORT_ASC, SORT_NUMERIC, + $requiredVectorsIds, SORT_ASC, SORT_NUMERIC, + $requiredVectors); + + $required = null; + foreach ($requiredVectors as $nextResVector) { + if($required === null) { + $required = $nextResVector; + } else { + //$required = array_intersect_key($required, $nextResVector); + + /** + * This code is used as workaround for array_intersect_key() slowness problem. + */ + $updatedVector = array(); + foreach ($required as $id => $value) { + if (isset($nextResVector[$id])) { + $updatedVector[$id] = $value; + } + } + $required = $updatedVector; + } + + if (count($required) == 0) { + // Empty result set, we don't need to check other terms + break; + } + } + + + if ($required !== null) { + $this->_resVector = &$required; + } else { + $this->_resVector = &$optional; + } + + ksort($this->_resVector, SORT_NUMERIC); + } + + + /** + * Score calculator for conjunction queries (all subqueries are required) + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function _conjunctionScore($docId, Zend_Search_Lucene_Interface $reader) + { + if ($this->_coord === null) { + $this->_coord = $reader->getSimilarity()->coord(count($this->_subqueries), + count($this->_subqueries) ); + } + + $score = 0; + + foreach ($this->_subqueries as $subquery) { + $subscore = $subquery->score($docId, $reader); + + if ($subscore == 0) { + return 0; + } + + $score += $subquery->score($docId, $reader) * $this->_coord; + } + + return $score * $this->_coord * $this->getBoost(); + } + + + /** + * Score calculator for non conjunction queries (not all subqueries are required) + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function _nonConjunctionScore($docId, Zend_Search_Lucene_Interface $reader) + { + if ($this->_coord === null) { + $this->_coord = array(); + + $maxCoord = 0; + foreach ($this->_signs as $sign) { + if ($sign !== false /* not prohibited */) { + $maxCoord++; + } + } + + for ($count = 0; $count <= $maxCoord; $count++) { + $this->_coord[$count] = $reader->getSimilarity()->coord($count, $maxCoord); + } + } + + $score = 0; + $matchedSubqueries = 0; + foreach ($this->_subqueries as $subqueryId => $subquery) { + $subscore = $subquery->score($docId, $reader); + + // Prohibited + if ($this->_signs[$subqueryId] === false && $subscore != 0) { + return 0; + } + + // is required, but doen't match + if ($this->_signs[$subqueryId] === true && $subscore == 0) { + return 0; + } + + if ($subscore != 0) { + $matchedSubqueries++; + $score += $subscore; + } + } + + return $score * $this->_coord[$matchedSubqueries] * $this->getBoost(); + } + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + // Initialize weight if it's not done yet + $this->_initWeight($reader); + + if ($docsFilter === null) { + // Create local documents filter if it's not provided by upper query + require_once 'Zend/Search/Lucene/Index/DocsFilter.php'; + $docsFilter = new Zend_Search_Lucene_Index_DocsFilter(); + } + + foreach ($this->_subqueries as $subqueryId => $subquery) { + if ($this->_signs == null || $this->_signs[$subqueryId] === true) { + // Subquery is required + $subquery->execute($reader, $docsFilter); + } else { + $subquery->execute($reader); + } + } + + if ($this->_signs === null) { + $this->_calculateConjunctionResult(); + } else { + $this->_calculateNonConjunctionResult(); + } + } + + + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + */ + public function matchedDocs() + { + return $this->_resVector; + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + if (isset($this->_resVector[$docId])) { + if ($this->_signs === null) { + return $this->_conjunctionScore($docId, $reader); + } else { + return $this->_nonConjunctionScore($docId, $reader); + } + } else { + return 0; + } + } + + /** + * Return query terms + * + * @return array + */ + public function getQueryTerms() + { + $terms = array(); + + foreach ($this->_subqueries as $id => $subquery) { + if ($this->_signs === null || $this->_signs[$id] !== false) { + $terms = array_merge($terms, $subquery->getQueryTerms()); + } + } + + return $terms; + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + foreach ($this->_subqueries as $id => $subquery) { + if ($this->_signs === null || $this->_signs[$id] !== false) { + $subquery->_highlightMatches($highlighter); + } + } + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + + $query = ''; + + foreach ($this->_subqueries as $id => $subquery) { + if ($id != 0) { + $query .= ' '; + } + + if ($this->_signs === null || $this->_signs[$id] === true) { + $query .= '+'; + } else if ($this->_signs[$id] === false) { + $query .= '-'; + } + + $query .= '(' . $subquery->__toString() . ')'; + } + + if ($this->getBoost() != 1) { + $query = '(' . $query . ')^' . round($this->getBoost(), 4); + } + + return $query; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Empty.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Empty.php new file mode 100644 index 00000000000..b0b6ff3b385 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Empty.php @@ -0,0 +1,138 @@ +'; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Fuzzy.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Fuzzy.php new file mode 100644 index 00000000000..8670476849c --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Fuzzy.php @@ -0,0 +1,493 @@ += 1) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('minimumSimilarity cannot be greater than or equal to 1'); + } + if ($prefixLength < 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('prefixLength cannot be less than 0'); + } + + $this->_term = $term; + $this->_minimumSimilarity = $minimumSimilarity; + $this->_prefixLength = ($prefixLength !== null)? $prefixLength : self::$_defaultPrefixLength; + } + + /** + * Get default non-fuzzy prefix length + * + * @return integer + */ + public static function getDefaultPrefixLength() + { + return self::$_defaultPrefixLength; + } + + /** + * Set default non-fuzzy prefix length + * + * @param integer $defaultPrefixLength + */ + public static function setDefaultPrefixLength($defaultPrefixLength) + { + self::$_defaultPrefixLength = $defaultPrefixLength; + } + + /** + * Calculate maximum distance for specified word length + * + * @param integer $prefixLength + * @param integer $termLength + * @param integer $length + * @return integer + */ + private function _calculateMaxDistance($prefixLength, $termLength, $length) + { + $this->_maxDistances[$length] = (int) ((1 - $this->_minimumSimilarity)*(min($termLength, $length) + $prefixLength)); + return $this->_maxDistances[$length]; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + * @throws Zend_Search_Lucene_Exception + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + $this->_matches = array(); + $this->_scores = array(); + $this->_termKeys = array(); + + if ($this->_term->field === null) { + // Search through all fields + $fields = $index->getFieldNames(true /* indexed fields list */); + } else { + $fields = array($this->_term->field); + } + + require_once 'Zend/Search/Lucene/Index/Term.php'; + $prefix = Zend_Search_Lucene_Index_Term::getPrefix($this->_term->text, $this->_prefixLength); + $prefixByteLength = strlen($prefix); + $prefixUtf8Length = Zend_Search_Lucene_Index_Term::getLength($prefix); + + $termLength = Zend_Search_Lucene_Index_Term::getLength($this->_term->text); + + $termRest = substr($this->_term->text, $prefixByteLength); + // we calculate length of the rest in bytes since levenshtein() is not UTF-8 compatible + $termRestLength = strlen($termRest); + + $scaleFactor = 1/(1 - $this->_minimumSimilarity); + + require_once 'Zend/Search/Lucene.php'; + $maxTerms = Zend_Search_Lucene::getTermsPerQueryLimit(); + foreach ($fields as $field) { + $index->resetTermsStream(); + + require_once 'Zend/Search/Lucene/Index/Term.php'; + if ($prefix != '') { + $index->skipTo(new Zend_Search_Lucene_Index_Term($prefix, $field)); + + while ($index->currentTerm() !== null && + $index->currentTerm()->field == $field && + substr($index->currentTerm()->text, 0, $prefixByteLength) == $prefix) { + // Calculate similarity + $target = substr($index->currentTerm()->text, $prefixByteLength); + + $maxDistance = isset($this->_maxDistances[strlen($target)])? + $this->_maxDistances[strlen($target)] : + $this->_calculateMaxDistance($prefixUtf8Length, $termRestLength, strlen($target)); + + if ($termRestLength == 0) { + // we don't have anything to compare. That means if we just add + // the letters for current term we get the new word + $similarity = (($prefixUtf8Length == 0)? 0 : 1 - strlen($target)/$prefixUtf8Length); + } else if (strlen($target) == 0) { + $similarity = (($prefixUtf8Length == 0)? 0 : 1 - $termRestLength/$prefixUtf8Length); + } else if ($maxDistance < abs($termRestLength - strlen($target))){ + //just adding the characters of term to target or vice-versa results in too many edits + //for example "pre" length is 3 and "prefixes" length is 8. We can see that + //given this optimal circumstance, the edit distance cannot be less than 5. + //which is 8-3 or more precisesly abs(3-8). + //if our maximum edit distance is 4, then we can discard this word + //without looking at it. + $similarity = 0; + } else { + $similarity = 1 - levenshtein($termRest, $target)/($prefixUtf8Length + min($termRestLength, strlen($target))); + } + + if ($similarity > $this->_minimumSimilarity) { + $this->_matches[] = $index->currentTerm(); + $this->_termKeys[] = $index->currentTerm()->key(); + $this->_scores[] = ($similarity - $this->_minimumSimilarity)*$scaleFactor; + + if ($maxTerms != 0 && count($this->_matches) > $maxTerms) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + } + + $index->nextTerm(); + } + } else { + $index->skipTo(new Zend_Search_Lucene_Index_Term('', $field)); + + while ($index->currentTerm() !== null && $index->currentTerm()->field == $field) { + // Calculate similarity + $target = $index->currentTerm()->text; + + $maxDistance = isset($this->_maxDistances[strlen($target)])? + $this->_maxDistances[strlen($target)] : + $this->_calculateMaxDistance(0, $termRestLength, strlen($target)); + + if ($maxDistance < abs($termRestLength - strlen($target))){ + //just adding the characters of term to target or vice-versa results in too many edits + //for example "pre" length is 3 and "prefixes" length is 8. We can see that + //given this optimal circumstance, the edit distance cannot be less than 5. + //which is 8-3 or more precisesly abs(3-8). + //if our maximum edit distance is 4, then we can discard this word + //without looking at it. + $similarity = 0; + } else { + $similarity = 1 - levenshtein($termRest, $target)/min($termRestLength, strlen($target)); + } + + if ($similarity > $this->_minimumSimilarity) { + $this->_matches[] = $index->currentTerm(); + $this->_termKeys[] = $index->currentTerm()->key(); + $this->_scores[] = ($similarity - $this->_minimumSimilarity)*$scaleFactor; + + if ($maxTerms != 0 && count($this->_matches) > $maxTerms) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + } + + $index->nextTerm(); + } + } + + $index->closeTermsStream(); + } + + if (count($this->_matches) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } else if (count($this->_matches) == 1) { + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + return new Zend_Search_Lucene_Search_Query_Term(reset($this->_matches)); + } else { + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $rewrittenQuery = new Zend_Search_Lucene_Search_Query_Boolean(); + + array_multisort($this->_scores, SORT_DESC, SORT_NUMERIC, + $this->_termKeys, SORT_ASC, SORT_STRING, + $this->_matches); + + $termCount = 0; + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + foreach ($this->_matches as $id => $matchedTerm) { + $subquery = new Zend_Search_Lucene_Search_Query_Term($matchedTerm); + $subquery->setBoost($this->_scores[$id]); + + $rewrittenQuery->addSubquery($subquery); + + $termCount++; + if ($termCount >= self::MAX_CLAUSE_COUNT) { + break; + } + } + + return $rewrittenQuery; + } + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Fuzzy query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Return query terms + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function getQueryTerms() + { + if ($this->_matches === null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Search or rewrite operations have to be performed before.'); + } + + return $this->_matches; + } + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + * @throws Zend_Search_Lucene_Exception + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Fuzzy query should not be directly used for search. Use $query->rewrite($index)'); + } + + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @throws Zend_Search_Lucene_Exception + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Fuzzy query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function matchedDocs() + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Fuzzy query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + * @throws Zend_Search_Lucene_Exception + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Fuzzy query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + $words = array(); + + require_once 'Zend/Search/Lucene/Index/Term.php'; + $prefix = Zend_Search_Lucene_Index_Term::getPrefix($this->_term->text, $this->_prefixLength); + $prefixByteLength = strlen($prefix); + $prefixUtf8Length = Zend_Search_Lucene_Index_Term::getLength($prefix); + + $termLength = Zend_Search_Lucene_Index_Term::getLength($this->_term->text); + + $termRest = substr($this->_term->text, $prefixByteLength); + // we calculate length of the rest in bytes since levenshtein() is not UTF-8 compatible + $termRestLength = strlen($termRest); + + $scaleFactor = 1/(1 - $this->_minimumSimilarity); + + $docBody = $highlighter->getDocument()->getFieldUtf8Value('body'); + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($docBody, 'UTF-8'); + foreach ($tokens as $token) { + $termText = $token->getTermText(); + + if (substr($termText, 0, $prefixByteLength) == $prefix) { + // Calculate similarity + $target = substr($termText, $prefixByteLength); + + $maxDistance = isset($this->_maxDistances[strlen($target)])? + $this->_maxDistances[strlen($target)] : + $this->_calculateMaxDistance($prefixUtf8Length, $termRestLength, strlen($target)); + + if ($termRestLength == 0) { + // we don't have anything to compare. That means if we just add + // the letters for current term we get the new word + $similarity = (($prefixUtf8Length == 0)? 0 : 1 - strlen($target)/$prefixUtf8Length); + } else if (strlen($target) == 0) { + $similarity = (($prefixUtf8Length == 0)? 0 : 1 - $termRestLength/$prefixUtf8Length); + } else if ($maxDistance < abs($termRestLength - strlen($target))){ + //just adding the characters of term to target or vice-versa results in too many edits + //for example "pre" length is 3 and "prefixes" length is 8. We can see that + //given this optimal circumstance, the edit distance cannot be less than 5. + //which is 8-3 or more precisesly abs(3-8). + //if our maximum edit distance is 4, then we can discard this word + //without looking at it. + $similarity = 0; + } else { + $similarity = 1 - levenshtein($termRest, $target)/($prefixUtf8Length + min($termRestLength, strlen($target))); + } + + if ($similarity > $this->_minimumSimilarity) { + $words[] = $termText; + } + } + } + + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + return (($this->_term->field === null)? '' : $this->_term->field . ':') + . $this->_term->text . '~' + . (($this->_minimumSimilarity != self::DEFAULT_MIN_SIMILARITY)? round($this->_minimumSimilarity, 4) : '') + . (($this->getBoost() != 1)? '^' . round($this->getBoost(), 4) : ''); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Insignificant.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Insignificant.php new file mode 100644 index 00000000000..cb06b23f071 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Insignificant.php @@ -0,0 +1,139 @@ +'; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/MultiTerm.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/MultiTerm.php new file mode 100644 index 00000000000..2626744f99e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/MultiTerm.php @@ -0,0 +1,668 @@ + (docId => freq, ...) + * term2Id => (docId => freq, ...) + * + * @var array + */ + private $_termsFreqs = array(); + + + /** + * A score factor based on the fraction of all query terms + * that a document contains. + * float for conjunction queries + * array of float for non conjunction queries + * + * @var mixed + */ + private $_coord = null; + + + /** + * Terms weights + * array of Zend_Search_Lucene_Search_Weight + * + * @var array + */ + private $_weights = array(); + + + /** + * Class constructor. Create a new multi-term query object. + * + * if $signs array is omitted then all terms are required + * it differs from addTerm() behavior, but should never be used + * + * @param array $terms Array of Zend_Search_Lucene_Index_Term objects + * @param array $signs Array of signs. Sign is boolean|null. + * @throws Zend_Search_Lucene_Exception + */ + public function __construct($terms = null, $signs = null) + { + if (is_array($terms)) { + require_once 'Zend/Search/Lucene.php'; + if (count($terms) > Zend_Search_Lucene::getTermsPerQueryLimit()) { + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + + $this->_terms = $terms; + + $this->_signs = null; + // Check if all terms are required + if (is_array($signs)) { + foreach ($signs as $sign ) { + if ($sign !== true) { + $this->_signs = $signs; + break; + } + } + } + } + } + + + /** + * Add a $term (Zend_Search_Lucene_Index_Term) to this query. + * + * The sign is specified as: + * TRUE - term is required + * FALSE - term is prohibited + * NULL - term is neither prohibited, nor required + * + * @param Zend_Search_Lucene_Index_Term $term + * @param boolean|null $sign + * @return void + */ + public function addTerm(Zend_Search_Lucene_Index_Term $term, $sign = null) { + if ($sign !== true || $this->_signs !== null) { // Skip, if all terms are required + if ($this->_signs === null) { // Check, If all previous terms are required + $this->_signs = array(); + foreach ($this->_terms as $prevTerm) { + $this->_signs[] = true; + } + } + $this->_signs[] = $sign; + } + + $this->_terms[] = $term; + } + + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + if (count($this->_terms) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + // Check, that all fields are qualified + $allQualified = true; + foreach ($this->_terms as $term) { + if ($term->field === null) { + $allQualified = false; + break; + } + } + + if ($allQualified) { + return $this; + } else { + /** transform multiterm query to boolean and apply rewrite() method to subqueries. */ + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + $query->setBoost($this->getBoost()); + + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + foreach ($this->_terms as $termId => $term) { + $subquery = new Zend_Search_Lucene_Search_Query_Term($term); + + $query->addSubquery($subquery->rewrite($index), + ($this->_signs === null)? true : $this->_signs[$termId]); + } + + return $query; + } + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + $terms = $this->_terms; + $signs = $this->_signs; + + foreach ($terms as $id => $term) { + if (!$index->hasTerm($term)) { + if ($signs === null || $signs[$id] === true) { + // Term is required + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } else { + // Term is optional or prohibited + // Remove it from terms and signs list + unset($terms[$id]); + unset($signs[$id]); + } + } + } + + // Check if all presented terms are prohibited + $allProhibited = true; + if ($signs === null) { + $allProhibited = false; + } else { + foreach ($signs as $sign) { + if ($sign !== false) { + $allProhibited = false; + break; + } + } + } + if ($allProhibited) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + /** + * @todo make an optimization for repeated terms + * (they may have different signs) + */ + + if (count($terms) == 1) { + // It's already checked, that it's not a prohibited term + + // It's one term query with one required or optional element + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $optimizedQuery = new Zend_Search_Lucene_Search_Query_Term(reset($terms)); + $optimizedQuery->setBoost($this->getBoost()); + + return $optimizedQuery; + } + + if (count($terms) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + $optimizedQuery = new Zend_Search_Lucene_Search_Query_MultiTerm($terms, $signs); + $optimizedQuery->setBoost($this->getBoost()); + return $optimizedQuery; + } + + + /** + * Returns query term + * + * @return array + */ + public function getTerms() + { + return $this->_terms; + } + + + /** + * Return terms signs + * + * @return array + */ + public function getSigns() + { + return $this->_signs; + } + + + /** + * Set weight for specified term + * + * @param integer $num + * @param Zend_Search_Lucene_Search_Weight_Term $weight + */ + public function setWeight($num, $weight) + { + $this->_weights[$num] = $weight; + } + + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Search/Weight/MultiTerm.php'; + $this->_weight = new Zend_Search_Lucene_Search_Weight_MultiTerm($this, $reader); + return $this->_weight; + } + + + /** + * Calculate result vector for Conjunction query + * (like '+something +another') + * + * @param Zend_Search_Lucene_Interface $reader + */ + private function _calculateConjunctionResult(Zend_Search_Lucene_Interface $reader) + { + $this->_resVector = null; + + if (count($this->_terms) == 0) { + $this->_resVector = array(); + } + + // Order terms by selectivity + $docFreqs = array(); + $ids = array(); + foreach ($this->_terms as $id => $term) { + $docFreqs[] = $reader->docFreq($term); + $ids[] = $id; // Used to keep original order for terms with the same selectivity and omit terms comparison + } + array_multisort($docFreqs, SORT_ASC, SORT_NUMERIC, + $ids, SORT_ASC, SORT_NUMERIC, + $this->_terms); + + require_once 'Zend/Search/Lucene/Index/DocsFilter.php'; + $docsFilter = new Zend_Search_Lucene_Index_DocsFilter(); + foreach ($this->_terms as $termId => $term) { + $termDocs = $reader->termDocs($term, $docsFilter); + } + // Treat last retrieved docs vector as a result set + // (filter collects data for other terms) + $this->_resVector = array_flip($termDocs); + + foreach ($this->_terms as $termId => $term) { + $this->_termsFreqs[$termId] = $reader->termFreqs($term, $docsFilter); + } + + // ksort($this->_resVector, SORT_NUMERIC); + // Docs are returned ordered. Used algorithms doesn't change elements order. + } + + + /** + * Calculate result vector for non Conjunction query + * (like '+something -another') + * + * @param Zend_Search_Lucene_Interface $reader + */ + private function _calculateNonConjunctionResult(Zend_Search_Lucene_Interface $reader) + { + $requiredVectors = array(); + $requiredVectorsSizes = array(); + $requiredVectorsIds = array(); // is used to prevent arrays comparison + + $optional = array(); + $prohibited = array(); + + foreach ($this->_terms as $termId => $term) { + $termDocs = array_flip($reader->termDocs($term)); + + if ($this->_signs[$termId] === true) { + // required + $requiredVectors[] = $termDocs; + $requiredVectorsSizes[] = count($termDocs); + $requiredVectorsIds[] = $termId; + } elseif ($this->_signs[$termId] === false) { + // prohibited + // array union + $prohibited += $termDocs; + } else { + // neither required, nor prohibited + // array union + $optional += $termDocs; + } + + $this->_termsFreqs[$termId] = $reader->termFreqs($term); + } + + // sort resvectors in order of subquery cardinality increasing + array_multisort($requiredVectorsSizes, SORT_ASC, SORT_NUMERIC, + $requiredVectorsIds, SORT_ASC, SORT_NUMERIC, + $requiredVectors); + + $required = null; + foreach ($requiredVectors as $nextResVector) { + if($required === null) { + $required = $nextResVector; + } else { + //$required = array_intersect_key($required, $nextResVector); + + /** + * This code is used as workaround for array_intersect_key() slowness problem. + */ + $updatedVector = array(); + foreach ($required as $id => $value) { + if (isset($nextResVector[$id])) { + $updatedVector[$id] = $value; + } + } + $required = $updatedVector; + } + + if (count($required) == 0) { + // Empty result set, we don't need to check other terms + break; + } + } + + if ($required !== null) { + $this->_resVector = $required; + } else { + $this->_resVector = $optional; + } + + if (count($prohibited) != 0) { + // $this->_resVector = array_diff_key($this->_resVector, $prohibited); + + /** + * This code is used as workaround for array_diff_key() slowness problem. + */ + if (count($this->_resVector) < count($prohibited)) { + $updatedVector = $this->_resVector; + foreach ($this->_resVector as $id => $value) { + if (isset($prohibited[$id])) { + unset($updatedVector[$id]); + } + } + $this->_resVector = $updatedVector; + } else { + $updatedVector = $this->_resVector; + foreach ($prohibited as $id => $value) { + unset($updatedVector[$id]); + } + $this->_resVector = $updatedVector; + } + } + + ksort($this->_resVector, SORT_NUMERIC); + } + + + /** + * Score calculator for conjunction queries (all terms are required) + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function _conjunctionScore($docId, Zend_Search_Lucene_Interface $reader) + { + if ($this->_coord === null) { + $this->_coord = $reader->getSimilarity()->coord(count($this->_terms), + count($this->_terms) ); + } + + $score = 0.0; + + foreach ($this->_terms as $termId => $term) { + /** + * We don't need to check that term freq is not 0 + * Score calculation is performed only for matched docs + */ + $score += $reader->getSimilarity()->tf($this->_termsFreqs[$termId][$docId]) * + $this->_weights[$termId]->getValue() * + $reader->norm($docId, $term->field); + } + + return $score * $this->_coord * $this->getBoost(); + } + + + /** + * Score calculator for non conjunction queries (not all terms are required) + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function _nonConjunctionScore($docId, $reader) + { + if ($this->_coord === null) { + $this->_coord = array(); + + $maxCoord = 0; + foreach ($this->_signs as $sign) { + if ($sign !== false /* not prohibited */) { + $maxCoord++; + } + } + + for ($count = 0; $count <= $maxCoord; $count++) { + $this->_coord[$count] = $reader->getSimilarity()->coord($count, $maxCoord); + } + } + + $score = 0.0; + $matchedTerms = 0; + foreach ($this->_terms as $termId=>$term) { + // Check if term is + if ($this->_signs[$termId] !== false && // not prohibited + isset($this->_termsFreqs[$termId][$docId]) // matched + ) { + $matchedTerms++; + + /** + * We don't need to check that term freq is not 0 + * Score calculation is performed only for matched docs + */ + $score += + $reader->getSimilarity()->tf($this->_termsFreqs[$termId][$docId]) * + $this->_weights[$termId]->getValue() * + $reader->norm($docId, $term->field); + } + } + + return $score * $this->_coord[$matchedTerms] * $this->getBoost(); + } + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + if ($this->_signs === null) { + $this->_calculateConjunctionResult($reader); + } else { + $this->_calculateNonConjunctionResult($reader); + } + + // Initialize weight if it's not done yet + $this->_initWeight($reader); + } + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + */ + public function matchedDocs() + { + return $this->_resVector; + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + if (isset($this->_resVector[$docId])) { + if ($this->_signs === null) { + return $this->_conjunctionScore($docId, $reader); + } else { + return $this->_nonConjunctionScore($docId, $reader); + } + } else { + return 0; + } + } + + /** + * Return query terms + * + * @return array + */ + public function getQueryTerms() + { + if ($this->_signs === null) { + return $this->_terms; + } + + $terms = array(); + + foreach ($this->_signs as $id => $sign) { + if ($sign !== false) { + $terms[] = $this->_terms[$id]; + } + } + + return $terms; + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + $words = array(); + + if ($this->_signs === null) { + foreach ($this->_terms as $term) { + $words[] = $term->text; + } + } else { + foreach ($this->_signs as $id => $sign) { + if ($sign !== false) { + $words[] = $this->_terms[$id]->text; + } + } + } + + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + + $query = ''; + + foreach ($this->_terms as $id => $term) { + if ($id != 0) { + $query .= ' '; + } + + if ($this->_signs === null || $this->_signs[$id] === true) { + $query .= '+'; + } else if ($this->_signs[$id] === false) { + $query .= '-'; + } + + if ($term->field !== null) { + $query .= $term->field . ':'; + } + $query .= $term->text; + } + + if ($this->getBoost() != 1) { + $query = '(' . $query . ')^' . round($this->getBoost(), 4); + } + + return $query; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Phrase.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Phrase.php new file mode 100644 index 00000000000..ddd892e0893 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Phrase.php @@ -0,0 +1,576 @@ + (docId => array( pos1, pos2, ... ), ...) + * term2Id => (docId => array( pos1, pos2, ... ), ...) + * + * @var array + */ + private $_termsPositions = array(); + + /** + * Class constructor. Create a new prase query. + * + * @param string $field Field to search. + * @param array $terms Terms to search Array of strings. + * @param array $offsets Relative term positions. Array of integers. + * @throws Zend_Search_Lucene_Exception + */ + public function __construct($terms = null, $offsets = null, $field = null) + { + $this->_slop = 0; + + if (is_array($terms)) { + $this->_terms = array(); + require_once 'Zend/Search/Lucene/Index/Term.php'; + foreach ($terms as $termId => $termText) { + $this->_terms[$termId] = ($field !== null)? new Zend_Search_Lucene_Index_Term($termText, $field): + new Zend_Search_Lucene_Index_Term($termText); + } + } else if ($terms === null) { + $this->_terms = array(); + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('terms argument must be array of strings or null'); + } + + if (is_array($offsets)) { + if (count($this->_terms) != count($offsets)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('terms and offsets arguments must have the same size.'); + } + $this->_offsets = $offsets; + } else if ($offsets === null) { + $this->_offsets = array(); + foreach ($this->_terms as $termId => $term) { + $position = count($this->_offsets); + $this->_offsets[$termId] = $position; + } + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('offsets argument must be array of strings or null'); + } + } + + /** + * Set slop + * + * @param integer $slop + */ + public function setSlop($slop) + { + $this->_slop = $slop; + } + + + /** + * Get slop + * + * @return integer + */ + public function getSlop() + { + return $this->_slop; + } + + + /** + * Adds a term to the end of the query phrase. + * The relative position of the term is specified explicitly or the one immediately + * after the last term added. + * + * @param Zend_Search_Lucene_Index_Term $term + * @param integer $position + */ + public function addTerm(Zend_Search_Lucene_Index_Term $term, $position = null) { + if ((count($this->_terms) != 0)&&(end($this->_terms)->field != $term->field)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('All phrase terms must be in the same field: ' . + $term->field . ':' . $term->text); + } + + $this->_terms[] = $term; + if ($position !== null) { + $this->_offsets[] = $position; + } else if (count($this->_offsets) != 0) { + $this->_offsets[] = end($this->_offsets) + 1; + } else { + $this->_offsets[] = 0; + } + } + + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + if (count($this->_terms) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } else if ($this->_terms[0]->field !== null) { + return $this; + } else { + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + $query->setBoost($this->getBoost()); + + foreach ($index->getFieldNames(true) as $fieldName) { + $subquery = new Zend_Search_Lucene_Search_Query_Phrase(); + $subquery->setSlop($this->getSlop()); + + require_once 'Zend/Search/Lucene/Index/Term.php'; + foreach ($this->_terms as $termId => $term) { + $qualifiedTerm = new Zend_Search_Lucene_Index_Term($term->text, $fieldName); + + $subquery->addTerm($qualifiedTerm, $this->_offsets[$termId]); + } + + $query->addSubquery($subquery); + } + + return $query; + } + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + // Check, that index contains all phrase terms + foreach ($this->_terms as $term) { + if (!$index->hasTerm($term)) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + } + + if (count($this->_terms) == 1) { + // It's one term query + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $optimizedQuery = new Zend_Search_Lucene_Search_Query_Term(reset($this->_terms)); + $optimizedQuery->setBoost($this->getBoost()); + + return $optimizedQuery; + } + + if (count($this->_terms) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + + return $this; + } + + /** + * Returns query term + * + * @return array + */ + public function getTerms() + { + return $this->_terms; + } + + + /** + * Set weight for specified term + * + * @param integer $num + * @param Zend_Search_Lucene_Search_Weight_Term $weight + */ + public function setWeight($num, $weight) + { + $this->_weights[$num] = $weight; + } + + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Search/Weight/Phrase.php'; + $this->_weight = new Zend_Search_Lucene_Search_Weight_Phrase($this, $reader); + return $this->_weight; + } + + + /** + * Score calculator for exact phrase queries (terms sequence is fixed) + * + * @param integer $docId + * @return float + */ + public function _exactPhraseFreq($docId) + { + $freq = 0; + + // Term Id with lowest cardinality + $lowCardTermId = null; + + // Calculate $lowCardTermId + foreach ($this->_terms as $termId => $term) { + if ($lowCardTermId === null || + count($this->_termsPositions[$termId][$docId]) < + count($this->_termsPositions[$lowCardTermId][$docId]) ) { + $lowCardTermId = $termId; + } + } + + // Walk through positions of the term with lowest cardinality + foreach ($this->_termsPositions[$lowCardTermId][$docId] as $lowCardPos) { + // We expect phrase to be found + $freq++; + + // Walk through other terms + foreach ($this->_terms as $termId => $term) { + if ($termId != $lowCardTermId) { + $expectedPosition = $lowCardPos + + ($this->_offsets[$termId] - + $this->_offsets[$lowCardTermId]); + + if (!in_array($expectedPosition, $this->_termsPositions[$termId][$docId])) { + $freq--; // Phrase wasn't found. + break; + } + } + } + } + + return $freq; + } + + /** + * Score calculator for sloppy phrase queries (terms sequence is fixed) + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function _sloppyPhraseFreq($docId, Zend_Search_Lucene_Interface $reader) + { + $freq = 0; + + $phraseQueue = array(); + $phraseQueue[0] = array(); // empty phrase + $lastTerm = null; + + // Walk through the terms to create phrases. + foreach ($this->_terms as $termId => $term) { + $queueSize = count($phraseQueue); + $firstPass = true; + + // Walk through the term positions. + // Each term position produces a set of phrases. + foreach ($this->_termsPositions[$termId][$docId] as $termPosition ) { + if ($firstPass) { + for ($count = 0; $count < $queueSize; $count++) { + $phraseQueue[$count][$termId] = $termPosition; + } + } else { + for ($count = 0; $count < $queueSize; $count++) { + if ($lastTerm !== null && + abs( $termPosition - $phraseQueue[$count][$lastTerm] - + ($this->_offsets[$termId] - $this->_offsets[$lastTerm])) > $this->_slop) { + continue; + } + + $newPhraseId = count($phraseQueue); + $phraseQueue[$newPhraseId] = $phraseQueue[$count]; + $phraseQueue[$newPhraseId][$termId] = $termPosition; + } + + } + + $firstPass = false; + } + $lastTerm = $termId; + } + + + foreach ($phraseQueue as $phrasePos) { + $minDistance = null; + + for ($shift = -$this->_slop; $shift <= $this->_slop; $shift++) { + $distance = 0; + $start = reset($phrasePos) - reset($this->_offsets) + $shift; + + foreach ($this->_terms as $termId => $term) { + $distance += abs($phrasePos[$termId] - $this->_offsets[$termId] - $start); + + if($distance > $this->_slop) { + break; + } + } + + if ($minDistance === null || $distance < $minDistance) { + $minDistance = $distance; + } + } + + if ($minDistance <= $this->_slop) { + $freq += $reader->getSimilarity()->sloppyFreq($minDistance); + } + } + + return $freq; + } + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + $this->_resVector = null; + + if (count($this->_terms) == 0) { + $this->_resVector = array(); + } + + $resVectors = array(); + $resVectorsSizes = array(); + $resVectorsIds = array(); // is used to prevent arrays comparison + foreach ($this->_terms as $termId => $term) { + $resVectors[] = array_flip($reader->termDocs($term)); + $resVectorsSizes[] = count(end($resVectors)); + $resVectorsIds[] = $termId; + + $this->_termsPositions[$termId] = $reader->termPositions($term); + } + // sort resvectors in order of subquery cardinality increasing + array_multisort($resVectorsSizes, SORT_ASC, SORT_NUMERIC, + $resVectorsIds, SORT_ASC, SORT_NUMERIC, + $resVectors); + + foreach ($resVectors as $nextResVector) { + if($this->_resVector === null) { + $this->_resVector = $nextResVector; + } else { + //$this->_resVector = array_intersect_key($this->_resVector, $nextResVector); + + /** + * This code is used as workaround for array_intersect_key() slowness problem. + */ + $updatedVector = array(); + foreach ($this->_resVector as $id => $value) { + if (isset($nextResVector[$id])) { + $updatedVector[$id] = $value; + } + } + $this->_resVector = $updatedVector; + } + + if (count($this->_resVector) == 0) { + // Empty result set, we don't need to check other terms + break; + } + } + + // ksort($this->_resVector, SORT_NUMERIC); + // Docs are returned ordered. Used algorithm doesn't change elements order. + + // Initialize weight if it's not done yet + $this->_initWeight($reader); + } + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + */ + public function matchedDocs() + { + return $this->_resVector; + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + if (isset($this->_resVector[$docId])) { + if ($this->_slop == 0) { + $freq = $this->_exactPhraseFreq($docId); + } else { + $freq = $this->_sloppyPhraseFreq($docId, $reader); + } + + if ($freq != 0) { + $tf = $reader->getSimilarity()->tf($freq); + $weight = $this->_weight->getValue(); + $norm = $reader->norm($docId, reset($this->_terms)->field); + + return $tf * $weight * $norm * $this->getBoost(); + } + + // Included in result, but culculated freq is zero + return 0; + } else { + return 0; + } + } + + /** + * Return query terms + * + * @return array + */ + public function getQueryTerms() + { + return $this->_terms; + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + $words = array(); + foreach ($this->_terms as $term) { + $words[] = $term->text; + } + + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + if (isset($this->_terms[0]) && $this->_terms[0]->field !== null) { + $query = $this->_terms[0]->field . ':'; + } else { + $query = ''; + } + + $query .= '"'; + + foreach ($this->_terms as $id => $term) { + if ($id != 0) { + $query .= ' '; + } + $query .= $term->text; + } + + $query .= '"'; + + if ($this->_slop != 0) { + $query .= '~' . $this->_slop; + } + + if ($this->getBoost() != 1) { + $query .= '^' . round($this->getBoost(), 4); + } + + return $query; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing.php new file mode 100644 index 00000000000..af6250baff4 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing.php @@ -0,0 +1,127 @@ +_word = $word; + $this->_encoding = $encoding; + $this->_field = $fieldName; + $this->_minimumSimilarity = $minimumSimilarity; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + if ($this->_field === null) { + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + + $hasInsignificantSubqueries = false; + + require_once 'Zend/Search/Lucene.php'; + if (Zend_Search_Lucene::getDefaultSearchField() === null) { + $searchFields = $index->getFieldNames(true); + } else { + $searchFields = array(Zend_Search_Lucene::getDefaultSearchField()); + } + + require_once 'Zend/Search/Lucene/Search/Query/Preprocessing/Fuzzy.php'; + foreach ($searchFields as $fieldName) { + $subquery = new Zend_Search_Lucene_Search_Query_Preprocessing_Fuzzy($this->_word, + $this->_encoding, + $fieldName, + $this->_minimumSimilarity); + + $rewrittenSubquery = $subquery->rewrite($index); + + if ( !($rewrittenSubquery instanceof Zend_Search_Lucene_Search_Query_Insignificant || + $rewrittenSubquery instanceof Zend_Search_Lucene_Search_Query_Empty) ) { + $query->addSubquery($rewrittenSubquery); + } + + if ($rewrittenSubquery instanceof Zend_Search_Lucene_Search_Query_Insignificant) { + $hasInsignificantSubqueries = true; + } + } + + $subqueries = $query->getSubqueries(); + + if (count($subqueries) == 0) { + $this->_matches = array(); + if ($hasInsignificantSubqueries) { + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } else { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + } + + if (count($subqueries) == 1) { + $query = reset($subqueries); + } + + $query->setBoost($this->getBoost()); + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + // ------------------------------------- + // Recognize exact term matching (it corresponds to Keyword fields stored in the index) + // encoding is not used since we expect binary matching + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($this->_word, $this->_field); + if ($index->hasTerm($term)) { + require_once 'Zend/Search/Lucene/Search/Query/Fuzzy.php'; + $query = new Zend_Search_Lucene_Search_Query_Fuzzy($term, $this->_minimumSimilarity); + $query->setBoost($this->getBoost()); + + // Get rewritten query. Important! It also fills terms matching container. + $rewrittenQuery = $query->rewrite($index); + $this->_matches = $query->getQueryTerms(); + + return $rewrittenQuery; + } + + + // ------------------------------------- + // Recognize wildcard queries + + /** @todo check for PCRE unicode support may be performed through Zend_Environment in some future */ + if (@preg_match('/\pL/u', 'a') == 1) { + $subPatterns = preg_split('/[*?]/u', iconv($this->_encoding, 'UTF-8', $this->_word)); + } else { + $subPatterns = preg_split('/[*?]/', $this->_word); + } + if (count($subPatterns) > 1) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Fuzzy search doesn\'t support wildcards (except within Keyword fields).'); + } + + + // ------------------------------------- + // Recognize one-term multi-term and "insignificant" queries + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_word, $this->_encoding); + + if (count($tokens) == 0) { + $this->_matches = array(); + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + + if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($tokens[0]->getTermText(), $this->_field); + require_once 'Zend/Search/Lucene/Search/Query/Fuzzy.php'; + $query = new Zend_Search_Lucene_Search_Query_Fuzzy($term, $this->_minimumSimilarity); + $query->setBoost($this->getBoost()); + + // Get rewritten query. Important! It also fills terms matching container. + $rewrittenQuery = $query->rewrite($index); + $this->_matches = $query->getQueryTerms(); + + return $rewrittenQuery; + } + + // Word is tokenized into several tokens + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Fuzzy search is supported only for non-multiple word terms'); + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + /** Skip fields detection. We don't need it, since we expect all fields presented in the HTML body and don't differentiate them */ + + /** Skip exact term matching recognition, keyword fields highlighting is not supported */ + + // ------------------------------------- + // Recognize wildcard queries + + /** @todo check for PCRE unicode support may be performed through Zend_Environment in some future */ + if (@preg_match('/\pL/u', 'a') == 1) { + $subPatterns = preg_split('/[*?]/u', iconv($this->_encoding, 'UTF-8', $this->_word)); + } else { + $subPatterns = preg_split('/[*?]/', $this->_word); + } + if (count($subPatterns) > 1) { + // Do nothing + return; + } + + + // ------------------------------------- + // Recognize one-term multi-term and "insignificant" queries + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_word, $this->_encoding); + if (count($tokens) == 0) { + // Do nothing + return; + } + if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($tokens[0]->getTermText(), $this->_field); + require_once 'Zend/Search/Lucene/Search/Query/Fuzzy.php'; + $query = new Zend_Search_Lucene_Search_Query_Fuzzy($term, $this->_minimumSimilarity); + + $query->_highlightMatches($highlighter); + return; + } + + // Word is tokenized into several tokens + // But fuzzy search is supported only for non-multiple word terms + // Do nothing + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + if ($this->_field !== null) { + $query = $this->_field . ':'; + } else { + $query = ''; + } + + $query .= $this->_word; + + if ($this->getBoost() != 1) { + $query .= '^' . round($this->getBoost(), 4); + } + + return $query; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Phrase.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Phrase.php new file mode 100644 index 00000000000..0c9f2cd9e18 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Phrase.php @@ -0,0 +1,270 @@ +_phrase = $phrase; + $this->_phraseEncoding = $phraseEncoding; + $this->_field = $fieldName; + } + + /** + * Set slop + * + * @param integer $slop + */ + public function setSlop($slop) + { + $this->_slop = $slop; + } + + + /** + * Get slop + * + * @return integer + */ + public function getSlop() + { + return $this->_slop; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { +// Allow to use wildcards within phrases +// They are either removed by text analyzer or used as a part of keyword for keyword fields +// +// if (strpos($this->_phrase, '?') !== false || strpos($this->_phrase, '*') !== false) { +// require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; +// throw new Zend_Search_Lucene_Search_QueryParserException('Wildcards are only allowed in a single terms.'); +// } + + // Split query into subqueries if field name is not specified + if ($this->_field === null) { + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + $query->setBoost($this->getBoost()); + + require_once 'Zend/Search/Lucene.php'; + if (Zend_Search_Lucene::getDefaultSearchField() === null) { + $searchFields = $index->getFieldNames(true); + } else { + $searchFields = array(Zend_Search_Lucene::getDefaultSearchField()); + } + + foreach ($searchFields as $fieldName) { + $subquery = new Zend_Search_Lucene_Search_Query_Preprocessing_Phrase($this->_phrase, + $this->_phraseEncoding, + $fieldName); + $subquery->setSlop($this->getSlop()); + + $query->addSubquery($subquery->rewrite($index)); + } + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + // Recognize exact term matching (it corresponds to Keyword fields stored in the index) + // encoding is not used since we expect binary matching + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($this->_phrase, $this->_field); + if ($index->hasTerm($term)) { + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $query = new Zend_Search_Lucene_Search_Query_Term($term); + $query->setBoost($this->getBoost()); + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + + // tokenize phrase using current analyzer and process it as a phrase query + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_phrase, $this->_phraseEncoding); + + if (count($tokens) == 0) { + $this->_matches = array(); + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + + if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($tokens[0]->getTermText(), $this->_field); + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $query = new Zend_Search_Lucene_Search_Query_Term($term); + $query->setBoost($this->getBoost()); + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + //It's non-trivial phrase query + $position = -1; + require_once 'Zend/Search/Lucene/Search/Query/Phrase.php'; + $query = new Zend_Search_Lucene_Search_Query_Phrase(); + require_once 'Zend/Search/Lucene/Index/Term.php'; + foreach ($tokens as $token) { + $position += $token->getPositionIncrement(); + $term = new Zend_Search_Lucene_Index_Term($token->getTermText(), $this->_field); + $query->addTerm($term, $position); + $query->setSlop($this->getSlop()); + } + $this->_matches = $query->getQueryTerms(); + return $query; + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + /** Skip fields detection. We don't need it, since we expect all fields presented in the HTML body and don't differentiate them */ + + /** Skip exact term matching recognition, keyword fields highlighting is not supported */ + + /** Skip wildcard queries recognition. Supported wildcards are removed by text analyzer */ + + + // tokenize phrase using current analyzer and process it as a phrase query + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_phrase, $this->_phraseEncoding); + + if (count($tokens) == 0) { + // Do nothing + return; + } + + if (count($tokens) == 1) { + $highlighter->highlight($tokens[0]->getTermText()); + return; + } + + //It's non-trivial phrase query + $words = array(); + foreach ($tokens as $token) { + $words[] = $token->getTermText(); + } + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + if ($this->_field !== null) { + $query = $this->_field . ':'; + } else { + $query = ''; + } + + $query .= '"' . $this->_phrase . '"'; + + if ($this->_slop != 0) { + $query .= '~' . $this->_slop; + } + + if ($this->getBoost() != 1) { + $query .= '^' . round($this->getBoost(), 4); + } + + return $query; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Term.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Term.php new file mode 100644 index 00000000000..573aabbedbe --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Preprocessing/Term.php @@ -0,0 +1,341 @@ +_word = $word; + $this->_encoding = $encoding; + $this->_field = $fieldName; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + if ($this->_field === null) { + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $query = new Zend_Search_Lucene_Search_Query_MultiTerm(); + $query->setBoost($this->getBoost()); + + $hasInsignificantSubqueries = false; + + require_once 'Zend/Search/Lucene.php'; + if (Zend_Search_Lucene::getDefaultSearchField() === null) { + $searchFields = $index->getFieldNames(true); + } else { + $searchFields = array(Zend_Search_Lucene::getDefaultSearchField()); + } + + require_once 'Zend/Search/Lucene/Search/Query/Preprocessing/Term.php'; + foreach ($searchFields as $fieldName) { + $subquery = new Zend_Search_Lucene_Search_Query_Preprocessing_Term($this->_word, + $this->_encoding, + $fieldName); + $rewrittenSubquery = $subquery->rewrite($index); + foreach ($rewrittenSubquery->getQueryTerms() as $term) { + $query->addTerm($term); + } + + if ($rewrittenSubquery instanceof Zend_Search_Lucene_Search_Query_Insignificant) { + $hasInsignificantSubqueries = true; + } + } + + if (count($query->getTerms()) == 0) { + $this->_matches = array(); + if ($hasInsignificantSubqueries) { + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } else { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + } + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + // ------------------------------------- + // Recognize exact term matching (it corresponds to Keyword fields stored in the index) + // encoding is not used since we expect binary matching + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($this->_word, $this->_field); + if ($index->hasTerm($term)) { + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $query = new Zend_Search_Lucene_Search_Query_Term($term); + $query->setBoost($this->getBoost()); + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + + // ------------------------------------- + // Recognize wildcard queries + + /** @todo check for PCRE unicode support may be performed through Zend_Environment in some future */ + if (@preg_match('/\pL/u', 'a') == 1) { + $word = iconv($this->_encoding, 'UTF-8', $this->_word); + $wildcardsPattern = '/[*?]/u'; + $subPatternsEncoding = 'UTF-8'; + } else { + $word = $this->_word; + $wildcardsPattern = '/[*?]/'; + $subPatternsEncoding = $this->_encoding; + } + + $subPatterns = preg_split($wildcardsPattern, $word, -1, PREG_SPLIT_OFFSET_CAPTURE); + + if (count($subPatterns) > 1) { + // Wildcard query is recognized + + $pattern = ''; + + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + foreach ($subPatterns as $id => $subPattern) { + // Append corresponding wildcard character to the pattern before each sub-pattern (except first) + if ($id != 0) { + $pattern .= $word[ $subPattern[1] - 1 ]; + } + + // Check if each subputtern is a single word in terms of current analyzer + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($subPattern[0], $subPatternsEncoding); + if (count($tokens) > 1) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Wildcard search is supported only for non-multiple word terms'); + } + foreach ($tokens as $token) { + $pattern .= $token->getTermText(); + } + } + + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($pattern, $this->_field); + require_once 'Zend/Search/Lucene/Search/Query/Wildcard.php'; + $query = new Zend_Search_Lucene_Search_Query_Wildcard($term); + $query->setBoost($this->getBoost()); + + // Get rewritten query. Important! It also fills terms matching container. + $rewrittenQuery = $query->rewrite($index); + $this->_matches = $query->getQueryTerms(); + + return $rewrittenQuery; + } + + + // ------------------------------------- + // Recognize one-term multi-term and "insignificant" queries + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_word, $this->_encoding); + + if (count($tokens) == 0) { + $this->_matches = array(); + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + + if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($tokens[0]->getTermText(), $this->_field); + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + $query = new Zend_Search_Lucene_Search_Query_Term($term); + $query->setBoost($this->getBoost()); + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + //It's not insignificant or one term query + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $query = new Zend_Search_Lucene_Search_Query_MultiTerm(); + + /** + * @todo Process $token->getPositionIncrement() to support stemming, synonyms and other + * analizer design features + */ + require_once 'Zend/Search/Lucene/Index/Term.php'; + foreach ($tokens as $token) { + $term = new Zend_Search_Lucene_Index_Term($token->getTermText(), $this->_field); + $query->addTerm($term, true); // all subterms are required + } + + $query->setBoost($this->getBoost()); + + $this->_matches = $query->getQueryTerms(); + return $query; + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + /** Skip fields detection. We don't need it, since we expect all fields presented in the HTML body and don't differentiate them */ + + /** Skip exact term matching recognition, keyword fields highlighting is not supported */ + + // ------------------------------------- + // Recognize wildcard queries + /** @todo check for PCRE unicode support may be performed through Zend_Environment in some future */ + if (@preg_match('/\pL/u', 'a') == 1) { + $word = iconv($this->_encoding, 'UTF-8', $this->_word); + $wildcardsPattern = '/[*?]/u'; + $subPatternsEncoding = 'UTF-8'; + } else { + $word = $this->_word; + $wildcardsPattern = '/[*?]/'; + $subPatternsEncoding = $this->_encoding; + } + $subPatterns = preg_split($wildcardsPattern, $word, -1, PREG_SPLIT_OFFSET_CAPTURE); + if (count($subPatterns) > 1) { + // Wildcard query is recognized + + $pattern = ''; + + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + foreach ($subPatterns as $id => $subPattern) { + // Append corresponding wildcard character to the pattern before each sub-pattern (except first) + if ($id != 0) { + $pattern .= $word[ $subPattern[1] - 1 ]; + } + + // Check if each subputtern is a single word in terms of current analyzer + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($subPattern[0], $subPatternsEncoding); + if (count($tokens) > 1) { + // Do nothing (nothing is highlighted) + return; + } + foreach ($tokens as $token) { + $pattern .= $token->getTermText(); + } + } + + require_once 'Zend/Search/Lucene/Index/Term.php'; + $term = new Zend_Search_Lucene_Index_Term($pattern, $this->_field); + require_once 'Zend/Search/Lucene/Search/Query/Wildcard.php'; + $query = new Zend_Search_Lucene_Search_Query_Wildcard($term); + + $query->_highlightMatches($highlighter); + return; + } + + + // ------------------------------------- + // Recognize one-term multi-term and "insignificant" queries + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_word, $this->_encoding); + + if (count($tokens) == 0) { + // Do nothing + return; + } + + if (count($tokens) == 1) { + $highlighter->highlight($tokens[0]->getTermText()); + return; + } + + //It's not insignificant or one term query + $words = array(); + foreach ($tokens as $token) { + $words[] = $token->getTermText(); + } + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + if ($this->_field !== null) { + $query = $this->_field . ':'; + } else { + $query = ''; + } + + $query .= $this->_word; + + if ($this->getBoost() != 1) { + $query .= '^' . round($this->getBoost(), 4); + } + + return $query; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Range.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Range.php new file mode 100644 index 00000000000..1d989ad7c3f --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Range.php @@ -0,0 +1,377 @@ +field != $upperTerm->field) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Both terms must be for the same field'); + } + + $this->_field = ($lowerTerm !== null)? $lowerTerm->field : $upperTerm->field; + $this->_lowerTerm = $lowerTerm; + $this->_upperTerm = $upperTerm; + $this->_inclusive = $inclusive; + } + + /** + * Get query field name + * + * @return string|null + */ + public function getField() + { + return $this->_field; + } + + /** + * Get lower term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function getLowerTerm() + { + return $this->_lowerTerm; + } + + /** + * Get upper term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function getUpperTerm() + { + return $this->_upperTerm; + } + + /** + * Get upper term + * + * @return boolean + */ + public function isInclusive() + { + return $this->_inclusive; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + $this->_matches = array(); + + if ($this->_field === null) { + // Search through all fields + $fields = $index->getFieldNames(true /* indexed fields list */); + } else { + $fields = array($this->_field); + } + + require_once 'Zend/Search/Lucene.php'; + $maxTerms = Zend_Search_Lucene::getTermsPerQueryLimit(); + foreach ($fields as $field) { + $index->resetTermsStream(); + + require_once 'Zend/Search/Lucene/Index/Term.php'; + if ($this->_lowerTerm !== null) { + $lowerTerm = new Zend_Search_Lucene_Index_Term($this->_lowerTerm->text, $field); + + $index->skipTo($lowerTerm); + + if (!$this->_inclusive && + $index->currentTerm() == $lowerTerm) { + // Skip lower term + $index->nextTerm(); + } + } else { + $index->skipTo(new Zend_Search_Lucene_Index_Term('', $field)); + } + + + if ($this->_upperTerm !== null) { + // Walk up to the upper term + $upperTerm = new Zend_Search_Lucene_Index_Term($this->_upperTerm->text, $field); + + while ($index->currentTerm() !== null && + $index->currentTerm()->field == $field && + strcmp($index->currentTerm()->text, $upperTerm->text) < 0) { + $this->_matches[] = $index->currentTerm(); + + if ($maxTerms != 0 && count($this->_matches) > $maxTerms) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + + $index->nextTerm(); + } + + if ($this->_inclusive && $index->currentTerm() == $upperTerm) { + // Include upper term into result + $this->_matches[] = $upperTerm; + } + } else { + // Walk up to the end of field data + while ($index->currentTerm() !== null && $index->currentTerm()->field == $field) { + $this->_matches[] = $index->currentTerm(); + + if ($maxTerms != 0 && count($this->_matches) > $maxTerms) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + + $index->nextTerm(); + } + } + + $index->closeTermsStream(); + } + + if (count($this->_matches) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } else if (count($this->_matches) == 1) { + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + return new Zend_Search_Lucene_Search_Query_Term(reset($this->_matches)); + } else { + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $rewrittenQuery = new Zend_Search_Lucene_Search_Query_MultiTerm(); + + foreach ($this->_matches as $matchedTerm) { + $rewrittenQuery->addTerm($matchedTerm); + } + + return $rewrittenQuery; + } + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Range query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Return query terms + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function getQueryTerms() + { + if ($this->_matches === null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Search or rewrite operations have to be performed before.'); + } + + return $this->_matches; + } + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + * @throws Zend_Search_Lucene_Exception + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Range query should not be directly used for search. Use $query->rewrite($index)'); + } + + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @throws Zend_Search_Lucene_Exception + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Range query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function matchedDocs() + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Range query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + * @throws Zend_Search_Lucene_Exception + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Range query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + $words = array(); + + $docBody = $highlighter->getDocument()->getFieldUtf8Value('body'); + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($docBody, 'UTF-8'); + + $lowerTermText = ($this->_lowerTerm !== null)? $this->_lowerTerm->text : null; + $upperTermText = ($this->_upperTerm !== null)? $this->_upperTerm->text : null; + + if ($this->_inclusive) { + foreach ($tokens as $token) { + $termText = $token->getTermText(); + if (($lowerTermText == null || $lowerTermText <= $termText) && + ($upperTermText == null || $termText <= $upperTermText)) { + $words[] = $termText; + } + } + } else { + foreach ($tokens as $token) { + $termText = $token->getTermText(); + if (($lowerTermText == null || $lowerTermText < $termText) && + ($upperTermText == null || $termText < $upperTermText)) { + $words[] = $termText; + } + } + } + + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + return (($this->_field === null)? '' : $this->_field . ':') + . (($this->_inclusive)? '[' : '{') + . (($this->_lowerTerm !== null)? $this->_lowerTerm->text : 'null') + . ' TO ' + . (($this->_upperTerm !== null)? $this->_upperTerm->text : 'null') + . (($this->_inclusive)? ']' : '}') + . (($this->getBoost() != 1)? '^' . round($this->getBoost(), 4) : ''); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Term.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Term.php new file mode 100644 index 00000000000..bdc279fcdd3 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Term.php @@ -0,0 +1,228 @@ + freq, ...) + * + * @var array + */ + private $_termFreqs; + + + /** + * Zend_Search_Lucene_Search_Query_Term constructor + * + * @param Zend_Search_Lucene_Index_Term $term + * @param boolean $sign + */ + public function __construct(Zend_Search_Lucene_Index_Term $term) + { + $this->_term = $term; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + if ($this->_term->field != null) { + return $this; + } else { + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $query = new Zend_Search_Lucene_Search_Query_MultiTerm(); + $query->setBoost($this->getBoost()); + + require_once 'Zend/Search/Lucene/Index/Term.php'; + foreach ($index->getFieldNames(true) as $fieldName) { + $term = new Zend_Search_Lucene_Index_Term($this->_term->text, $fieldName); + + $query->addTerm($term); + } + + return $query->rewrite($index); + } + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + // Check, that index contains specified term + if (!$index->hasTerm($this->_term)) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } + + return $this; + } + + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Search/Weight/Term.php'; + $this->_weight = new Zend_Search_Lucene_Search_Weight_Term($this->_term, $this, $reader); + return $this->_weight; + } + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + $this->_docVector = array_flip($reader->termDocs($this->_term, $docsFilter)); + $this->_termFreqs = $reader->termFreqs($this->_term, $docsFilter); + + // Initialize weight if it's not done yet + $this->_initWeight($reader); + } + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + */ + public function matchedDocs() + { + return $this->_docVector; + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + if (isset($this->_docVector[$docId])) { + return $reader->getSimilarity()->tf($this->_termFreqs[$docId]) * + $this->_weight->getValue() * + $reader->norm($docId, $this->_term->field) * + $this->getBoost(); + } else { + return 0; + } + } + + /** + * Return query terms + * + * @return array + */ + public function getQueryTerms() + { + return array($this->_term); + } + + /** + * Return query term + * + * @return Zend_Search_Lucene_Index_Term + */ + public function getTerm() + { + return $this->_term; + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + $highlighter->highlight($this->_term->text); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + if ($this->_term->field !== null) { + $query = $this->_term->field . ':'; + } else { + $query = ''; + } + + $query .= $this->_term->text; + + if ($this->getBoost() != 1) { + $query = $query . '^' . round($this->getBoost(), 4); + } + + return $query; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Wildcard.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Wildcard.php new file mode 100644 index 00000000000..62e25660e7c --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Query/Wildcard.php @@ -0,0 +1,362 @@ +_pattern = $pattern; + } + + /** + * Get minimum prefix length + * + * @return integer + */ + public static function getMinPrefixLength() + { + return self::$_minPrefixLength; + } + + /** + * Set minimum prefix length + * + * @param integer $minPrefixLength + */ + public static function setMinPrefixLength($minPrefixLength) + { + self::$_minPrefixLength = $minPrefixLength; + } + + /** + * Get terms prefix + * + * @param string $word + * @return string + */ + private static function _getPrefix($word) + { + $questionMarkPosition = strpos($word, '?'); + $astrericPosition = strpos($word, '*'); + + if ($questionMarkPosition !== false) { + if ($astrericPosition !== false) { + return substr($word, 0, min($questionMarkPosition, $astrericPosition)); + } + + return substr($word, 0, $questionMarkPosition); + } else if ($astrericPosition !== false) { + return substr($word, 0, $astrericPosition); + } + + return $word; + } + + /** + * Re-write query into primitive queries in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + * @throws Zend_Search_Lucene_Exception + */ + public function rewrite(Zend_Search_Lucene_Interface $index) + { + $this->_matches = array(); + + if ($this->_pattern->field === null) { + // Search through all fields + $fields = $index->getFieldNames(true /* indexed fields list */); + } else { + $fields = array($this->_pattern->field); + } + + $prefix = self::_getPrefix($this->_pattern->text); + $prefixLength = strlen($prefix); + $matchExpression = '/^' . str_replace(array('\\?', '\\*'), array('.', '.*') , preg_quote($this->_pattern->text, '/')) . '$/'; + + if ($prefixLength < self::$_minPrefixLength) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('At least ' . self::$_minPrefixLength . ' non-wildcard characters are required at the beginning of pattern.'); + } + + /** @todo check for PCRE unicode support may be performed through Zend_Environment in some future */ + if (@preg_match('/\pL/u', 'a') == 1) { + // PCRE unicode support is turned on + // add Unicode modifier to the match expression + $matchExpression .= 'u'; + } + + $maxTerms = Zend_Search_Lucene::getTermsPerQueryLimit(); + foreach ($fields as $field) { + $index->resetTermsStream(); + + require_once 'Zend/Search/Lucene/Index/Term.php'; + if ($prefix != '') { + $index->skipTo(new Zend_Search_Lucene_Index_Term($prefix, $field)); + + while ($index->currentTerm() !== null && + $index->currentTerm()->field == $field && + substr($index->currentTerm()->text, 0, $prefixLength) == $prefix) { + if (preg_match($matchExpression, $index->currentTerm()->text) === 1) { + $this->_matches[] = $index->currentTerm(); + + if ($maxTerms != 0 && count($this->_matches) > $maxTerms) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + } + + $index->nextTerm(); + } + } else { + $index->skipTo(new Zend_Search_Lucene_Index_Term('', $field)); + + while ($index->currentTerm() !== null && $index->currentTerm()->field == $field) { + if (preg_match($matchExpression, $index->currentTerm()->text) === 1) { + $this->_matches[] = $index->currentTerm(); + + if ($maxTerms != 0 && count($this->_matches) > $maxTerms) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Terms per query limit is reached.'); + } + } + + $index->nextTerm(); + } + } + + $index->closeTermsStream(); + } + + if (count($this->_matches) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Empty.php'; + return new Zend_Search_Lucene_Search_Query_Empty(); + } else if (count($this->_matches) == 1) { + require_once 'Zend/Search/Lucene/Search/Query/Term.php'; + return new Zend_Search_Lucene_Search_Query_Term(reset($this->_matches)); + } else { + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $rewrittenQuery = new Zend_Search_Lucene_Search_Query_MultiTerm(); + + foreach ($this->_matches as $matchedTerm) { + $rewrittenQuery->addTerm($matchedTerm); + } + + return $rewrittenQuery; + } + } + + /** + * Optimize query in the context of specified index + * + * @param Zend_Search_Lucene_Interface $index + * @return Zend_Search_Lucene_Search_Query + */ + public function optimize(Zend_Search_Lucene_Interface $index) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wildcard query should not be directly used for search. Use $query->rewrite($index)'); + } + + + /** + * Returns query pattern + * + * @return Zend_Search_Lucene_Index_Term + */ + public function getPattern() + { + return $this->_pattern; + } + + + /** + * Return query terms + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function getQueryTerms() + { + if ($this->_matches === null) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Search has to be performed first to get matched terms'); + } + + return $this->_matches; + } + + /** + * Constructs an appropriate Weight implementation for this query. + * + * @param Zend_Search_Lucene_Interface $reader + * @return Zend_Search_Lucene_Search_Weight + * @throws Zend_Search_Lucene_Exception + */ + public function createWeight(Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wildcard query should not be directly used for search. Use $query->rewrite($index)'); + } + + + /** + * Execute query in context of index reader + * It also initializes necessary internal structures + * + * @param Zend_Search_Lucene_Interface $reader + * @param Zend_Search_Lucene_Index_DocsFilter|null $docsFilter + * @throws Zend_Search_Lucene_Exception + */ + public function execute(Zend_Search_Lucene_Interface $reader, $docsFilter = null) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wildcard query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Get document ids likely matching the query + * + * It's an array with document ids as keys (performance considerations) + * + * @return array + * @throws Zend_Search_Lucene_Exception + */ + public function matchedDocs() + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wildcard query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Score specified document + * + * @param integer $docId + * @param Zend_Search_Lucene_Interface $reader + * @return float + * @throws Zend_Search_Lucene_Exception + */ + public function score($docId, Zend_Search_Lucene_Interface $reader) + { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Wildcard query should not be directly used for search. Use $query->rewrite($index)'); + } + + /** + * Query specific matches highlighting + * + * @param Zend_Search_Lucene_Search_Highlighter_Interface $highlighter Highlighter object (also contains doc for highlighting) + */ + protected function _highlightMatches(Zend_Search_Lucene_Search_Highlighter_Interface $highlighter) + { + $words = array(); + + $matchExpression = '/^' . str_replace(array('\\?', '\\*'), array('.', '.*') , preg_quote($this->_pattern->text, '/')) . '$/'; + if (@preg_match('/\pL/u', 'a') == 1) { + // PCRE unicode support is turned on + // add Unicode modifier to the match expression + $matchExpression .= 'u'; + } + + $docBody = $highlighter->getDocument()->getFieldUtf8Value('body'); + require_once 'Zend/Search/Lucene/Analysis/Analyzer.php'; + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($docBody, 'UTF-8'); + foreach ($tokens as $token) { + if (preg_match($matchExpression, $token->getTermText()) === 1) { + $words[] = $token->getTermText(); + } + } + + $highlighter->highlight($words); + } + + /** + * Print a query + * + * @return string + */ + public function __toString() + { + // It's used only for query visualisation, so we don't care about characters escaping + if ($this->_pattern->field !== null) { + $query = $this->_pattern->field . ':'; + } else { + $query = ''; + } + + $query .= $this->_pattern->text; + + if ($this->getBoost() != 1) { + $query = $query . '^' . round($this->getBoost(), 4); + } + + return $query; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry.php new file mode 100644 index 00000000000..249ba70f309 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry.php @@ -0,0 +1,67 @@ +_boost *= $boostFactor; + } + + +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Phrase.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Phrase.php new file mode 100644 index 00000000000..f7bae2e718b --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Phrase.php @@ -0,0 +1,116 @@ +_phrase = $phrase; + $this->_field = $field; + } + + /** + * Process modifier ('~') + * + * @param mixed $parameter + */ + public function processFuzzyProximityModifier($parameter = null) + { + $this->_proximityQuery = true; + + if ($parameter !== null) { + $this->_wordsDistance = $parameter; + } + } + + /** + * Transform entry to a subquery + * + * @param string $encoding + * @return Zend_Search_Lucene_Search_Query + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function getQuery($encoding) + { + /** Zend_Search_Lucene_Search_Query_Preprocessing_Phrase */ + require_once 'Zend/Search/Lucene/Search/Query/Preprocessing/Phrase.php'; + $query = new Zend_Search_Lucene_Search_Query_Preprocessing_Phrase($this->_phrase, + $encoding, + ($this->_field !== null)? + iconv($encoding, 'UTF-8', $this->_field) : + null); + + if ($this->_proximityQuery) { + $query->setSlop($this->_wordsDistance); + } + + $query->setBoost($this->_boost); + + return $query; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Subquery.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Subquery.php new file mode 100644 index 00000000000..84b0bec7e2e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Subquery.php @@ -0,0 +1,77 @@ +_query = $query; + } + + /** + * Process modifier ('~') + * + * @param mixed $parameter + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function processFuzzyProximityModifier($parameter = null) + { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('\'~\' sign must follow term or phrase'); + } + + + /** + * Transform entry to a subquery + * + * @param string $encoding + * @return Zend_Search_Lucene_Search_Query + */ + public function getQuery($encoding) + { + $this->_query->setBoost($this->_boost); + + return $this->_query; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Term.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Term.php new file mode 100644 index 00000000000..f9387d549fc --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryEntry/Term.php @@ -0,0 +1,130 @@ +_term = $term; + $this->_field = $field; + } + + /** + * Process modifier ('~') + * + * @param mixed $parameter + */ + public function processFuzzyProximityModifier($parameter = null) + { + $this->_fuzzyQuery = true; + + if ($parameter !== null) { + $this->_similarity = $parameter; + } else { + /** Zend_Search_Lucene_Search_Query_Fuzzy */ + require_once 'Zend/Search/Lucene/Search/Query/Fuzzy.php'; + $this->_similarity = Zend_Search_Lucene_Search_Query_Fuzzy::DEFAULT_MIN_SIMILARITY; + } + } + + /** + * Transform entry to a subquery + * + * @param string $encoding + * @return Zend_Search_Lucene_Search_Query + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function getQuery($encoding) + { + if ($this->_fuzzyQuery) { + /** Zend_Search_Lucene_Search_Query_Preprocessing_Fuzzy */ + require_once 'Zend/Search/Lucene/Search/Query/Preprocessing/Fuzzy.php'; + $query = new Zend_Search_Lucene_Search_Query_Preprocessing_Fuzzy($this->_term, + $encoding, + ($this->_field !== null)? + iconv($encoding, 'UTF-8', $this->_field) : + null, + $this->_similarity + ); + $query->setBoost($this->_boost); + return $query; + } + + + /** Zend_Search_Lucene_Search_Query_Preprocessing_Term */ + require_once 'Zend/Search/Lucene/Search/Query/Preprocessing/Term.php'; + $query = new Zend_Search_Lucene_Search_Query_Preprocessing_Term($this->_term, + $encoding, + ($this->_field !== null)? + iconv($encoding, 'UTF-8', $this->_field) : + null + ); + $query->setBoost($this->_boost); + return $query; + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryHit.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryHit.php new file mode 100644 index 00000000000..b9434e35ff3 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryHit.php @@ -0,0 +1,110 @@ +_index = new Zend_Search_Lucene_Proxy($index); + } + + + /** + * Convenience function for getting fields from the document + * associated with this hit. + * + * @param string $offset + * @return string + */ + public function __get($offset) + { + return $this->getDocument()->getFieldValue($offset); + } + + + /** + * Return the document object for this hit + * + * @return Zend_Search_Lucene_Document + */ + public function getDocument() + { + if (!$this->_document instanceof Zend_Search_Lucene_Document) { + $this->_document = $this->_index->getDocument($this->id); + } + + return $this->_document; + } + + + /** + * Return the index object for this hit + * + * @return Zend_Search_Lucene_Interface + */ + public function getIndex() + { + return $this->_index; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryLexer.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryLexer.php new file mode 100644 index 00000000000..530fe52b90e --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryLexer.php @@ -0,0 +1,510 @@ +addRules(array( array(self::ST_WHITE_SPACE, self::IN_WHITE_SPACE, self::ST_WHITE_SPACE), + array(self::ST_WHITE_SPACE, self::IN_SYNT_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_WHITE_SPACE, self::IN_MUTABLE_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_WHITE_SPACE, self::IN_LEXEME_MODIFIER, self::ST_LEXEME_MODIFIER), + array(self::ST_WHITE_SPACE, self::IN_ESCAPE_CHAR, self::ST_ESCAPED_CHAR), + array(self::ST_WHITE_SPACE, self::IN_QUOTE, self::ST_QUOTED_LEXEME), + array(self::ST_WHITE_SPACE, self::IN_DECIMAL_POINT, self::ST_LEXEME), + array(self::ST_WHITE_SPACE, self::IN_ASCII_DIGIT, self::ST_LEXEME), + array(self::ST_WHITE_SPACE, self::IN_CHAR, self::ST_LEXEME) + )); + $this->addRules(array( array(self::ST_SYNT_LEXEME, self::IN_WHITE_SPACE, self::ST_WHITE_SPACE), + array(self::ST_SYNT_LEXEME, self::IN_SYNT_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_SYNT_LEXEME, self::IN_MUTABLE_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_SYNT_LEXEME, self::IN_LEXEME_MODIFIER, self::ST_LEXEME_MODIFIER), + array(self::ST_SYNT_LEXEME, self::IN_ESCAPE_CHAR, self::ST_ESCAPED_CHAR), + array(self::ST_SYNT_LEXEME, self::IN_QUOTE, self::ST_QUOTED_LEXEME), + array(self::ST_SYNT_LEXEME, self::IN_DECIMAL_POINT, self::ST_LEXEME), + array(self::ST_SYNT_LEXEME, self::IN_ASCII_DIGIT, self::ST_LEXEME), + array(self::ST_SYNT_LEXEME, self::IN_CHAR, self::ST_LEXEME) + )); + $this->addRules(array( array(self::ST_LEXEME, self::IN_WHITE_SPACE, self::ST_WHITE_SPACE), + array(self::ST_LEXEME, self::IN_SYNT_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_LEXEME, self::IN_MUTABLE_CHAR, self::ST_LEXEME), + array(self::ST_LEXEME, self::IN_LEXEME_MODIFIER, self::ST_LEXEME_MODIFIER), + array(self::ST_LEXEME, self::IN_ESCAPE_CHAR, self::ST_ESCAPED_CHAR), + + // IN_QUOTE not allowed + array(self::ST_LEXEME, self::IN_QUOTE, self::ST_ERROR, $quoteWithinLexemeErrorAction), + + array(self::ST_LEXEME, self::IN_DECIMAL_POINT, self::ST_LEXEME), + array(self::ST_LEXEME, self::IN_ASCII_DIGIT, self::ST_LEXEME), + array(self::ST_LEXEME, self::IN_CHAR, self::ST_LEXEME) + )); + $this->addRules(array( array(self::ST_QUOTED_LEXEME, self::IN_WHITE_SPACE, self::ST_QUOTED_LEXEME), + array(self::ST_QUOTED_LEXEME, self::IN_SYNT_CHAR, self::ST_QUOTED_LEXEME), + array(self::ST_QUOTED_LEXEME, self::IN_MUTABLE_CHAR, self::ST_QUOTED_LEXEME), + array(self::ST_QUOTED_LEXEME, self::IN_LEXEME_MODIFIER, self::ST_QUOTED_LEXEME), + array(self::ST_QUOTED_LEXEME, self::IN_ESCAPE_CHAR, self::ST_ESCAPED_QCHAR), + array(self::ST_QUOTED_LEXEME, self::IN_QUOTE, self::ST_WHITE_SPACE), + array(self::ST_QUOTED_LEXEME, self::IN_DECIMAL_POINT, self::ST_QUOTED_LEXEME), + array(self::ST_QUOTED_LEXEME, self::IN_ASCII_DIGIT, self::ST_QUOTED_LEXEME), + array(self::ST_QUOTED_LEXEME, self::IN_CHAR, self::ST_QUOTED_LEXEME) + )); + $this->addRules(array( array(self::ST_ESCAPED_CHAR, self::IN_WHITE_SPACE, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_SYNT_CHAR, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_MUTABLE_CHAR, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_LEXEME_MODIFIER, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_ESCAPE_CHAR, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_QUOTE, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_DECIMAL_POINT, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_ASCII_DIGIT, self::ST_LEXEME), + array(self::ST_ESCAPED_CHAR, self::IN_CHAR, self::ST_LEXEME) + )); + $this->addRules(array( array(self::ST_ESCAPED_QCHAR, self::IN_WHITE_SPACE, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_SYNT_CHAR, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_MUTABLE_CHAR, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_LEXEME_MODIFIER, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_ESCAPE_CHAR, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_QUOTE, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_DECIMAL_POINT, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_ASCII_DIGIT, self::ST_QUOTED_LEXEME), + array(self::ST_ESCAPED_QCHAR, self::IN_CHAR, self::ST_QUOTED_LEXEME) + )); + $this->addRules(array( array(self::ST_LEXEME_MODIFIER, self::IN_WHITE_SPACE, self::ST_WHITE_SPACE), + array(self::ST_LEXEME_MODIFIER, self::IN_SYNT_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_LEXEME_MODIFIER, self::IN_MUTABLE_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_LEXEME_MODIFIER, self::IN_LEXEME_MODIFIER, self::ST_LEXEME_MODIFIER), + + // IN_ESCAPE_CHAR not allowed + array(self::ST_LEXEME_MODIFIER, self::IN_ESCAPE_CHAR, self::ST_ERROR, $lexemeModifierErrorAction), + + // IN_QUOTE not allowed + array(self::ST_LEXEME_MODIFIER, self::IN_QUOTE, self::ST_ERROR, $lexemeModifierErrorAction), + + + array(self::ST_LEXEME_MODIFIER, self::IN_DECIMAL_POINT, self::ST_MANTISSA), + array(self::ST_LEXEME_MODIFIER, self::IN_ASCII_DIGIT, self::ST_NUMBER), + + // IN_CHAR not allowed + array(self::ST_LEXEME_MODIFIER, self::IN_CHAR, self::ST_ERROR, $lexemeModifierErrorAction), + )); + $this->addRules(array( array(self::ST_NUMBER, self::IN_WHITE_SPACE, self::ST_WHITE_SPACE), + array(self::ST_NUMBER, self::IN_SYNT_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_NUMBER, self::IN_MUTABLE_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_NUMBER, self::IN_LEXEME_MODIFIER, self::ST_LEXEME_MODIFIER), + + // IN_ESCAPE_CHAR not allowed + array(self::ST_NUMBER, self::IN_ESCAPE_CHAR, self::ST_ERROR, $wrongNumberErrorAction), + + // IN_QUOTE not allowed + array(self::ST_NUMBER, self::IN_QUOTE, self::ST_ERROR, $wrongNumberErrorAction), + + array(self::ST_NUMBER, self::IN_DECIMAL_POINT, self::ST_MANTISSA), + array(self::ST_NUMBER, self::IN_ASCII_DIGIT, self::ST_NUMBER), + + // IN_CHAR not allowed + array(self::ST_NUMBER, self::IN_CHAR, self::ST_ERROR, $wrongNumberErrorAction), + )); + $this->addRules(array( array(self::ST_MANTISSA, self::IN_WHITE_SPACE, self::ST_WHITE_SPACE), + array(self::ST_MANTISSA, self::IN_SYNT_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_MANTISSA, self::IN_MUTABLE_CHAR, self::ST_SYNT_LEXEME), + array(self::ST_MANTISSA, self::IN_LEXEME_MODIFIER, self::ST_LEXEME_MODIFIER), + + // IN_ESCAPE_CHAR not allowed + array(self::ST_MANTISSA, self::IN_ESCAPE_CHAR, self::ST_ERROR, $wrongNumberErrorAction), + + // IN_QUOTE not allowed + array(self::ST_MANTISSA, self::IN_QUOTE, self::ST_ERROR, $wrongNumberErrorAction), + + // IN_DECIMAL_POINT not allowed + array(self::ST_MANTISSA, self::IN_DECIMAL_POINT, self::ST_ERROR, $wrongNumberErrorAction), + + array(self::ST_MANTISSA, self::IN_ASCII_DIGIT, self::ST_MANTISSA), + + // IN_CHAR not allowed + array(self::ST_MANTISSA, self::IN_CHAR, self::ST_ERROR, $wrongNumberErrorAction), + )); + + + /** Actions */ + $syntaxLexemeAction = new Zend_Search_Lucene_FSMAction($this, 'addQuerySyntaxLexeme'); + $lexemeModifierAction = new Zend_Search_Lucene_FSMAction($this, 'addLexemeModifier'); + $addLexemeAction = new Zend_Search_Lucene_FSMAction($this, 'addLexeme'); + $addQuotedLexemeAction = new Zend_Search_Lucene_FSMAction($this, 'addQuotedLexeme'); + $addNumberLexemeAction = new Zend_Search_Lucene_FSMAction($this, 'addNumberLexeme'); + $addLexemeCharAction = new Zend_Search_Lucene_FSMAction($this, 'addLexemeChar'); + + + /** Syntax lexeme */ + $this->addEntryAction(self::ST_SYNT_LEXEME, $syntaxLexemeAction); + // Two lexemes in succession + $this->addTransitionAction(self::ST_SYNT_LEXEME, self::ST_SYNT_LEXEME, $syntaxLexemeAction); + + + /** Lexeme */ + $this->addEntryAction(self::ST_LEXEME, $addLexemeCharAction); + $this->addTransitionAction(self::ST_LEXEME, self::ST_LEXEME, $addLexemeCharAction); + // ST_ESCAPED_CHAR => ST_LEXEME transition is covered by ST_LEXEME entry action + + $this->addTransitionAction(self::ST_LEXEME, self::ST_WHITE_SPACE, $addLexemeAction); + $this->addTransitionAction(self::ST_LEXEME, self::ST_SYNT_LEXEME, $addLexemeAction); + $this->addTransitionAction(self::ST_LEXEME, self::ST_QUOTED_LEXEME, $addLexemeAction); + $this->addTransitionAction(self::ST_LEXEME, self::ST_LEXEME_MODIFIER, $addLexemeAction); + $this->addTransitionAction(self::ST_LEXEME, self::ST_NUMBER, $addLexemeAction); + $this->addTransitionAction(self::ST_LEXEME, self::ST_MANTISSA, $addLexemeAction); + + + /** Quoted lexeme */ + // We don't need entry action (skeep quote) + $this->addTransitionAction(self::ST_QUOTED_LEXEME, self::ST_QUOTED_LEXEME, $addLexemeCharAction); + $this->addTransitionAction(self::ST_ESCAPED_QCHAR, self::ST_QUOTED_LEXEME, $addLexemeCharAction); + // Closing quote changes state to the ST_WHITE_SPACE other states are not used + $this->addTransitionAction(self::ST_QUOTED_LEXEME, self::ST_WHITE_SPACE, $addQuotedLexemeAction); + + + /** Lexeme modifier */ + $this->addEntryAction(self::ST_LEXEME_MODIFIER, $lexemeModifierAction); + + + /** Number */ + $this->addEntryAction(self::ST_NUMBER, $addLexemeCharAction); + $this->addEntryAction(self::ST_MANTISSA, $addLexemeCharAction); + $this->addTransitionAction(self::ST_NUMBER, self::ST_NUMBER, $addLexemeCharAction); + // ST_NUMBER => ST_MANTISSA transition is covered by ST_MANTISSA entry action + $this->addTransitionAction(self::ST_MANTISSA, self::ST_MANTISSA, $addLexemeCharAction); + + $this->addTransitionAction(self::ST_NUMBER, self::ST_WHITE_SPACE, $addNumberLexemeAction); + $this->addTransitionAction(self::ST_NUMBER, self::ST_SYNT_LEXEME, $addNumberLexemeAction); + $this->addTransitionAction(self::ST_NUMBER, self::ST_LEXEME_MODIFIER, $addNumberLexemeAction); + $this->addTransitionAction(self::ST_MANTISSA, self::ST_WHITE_SPACE, $addNumberLexemeAction); + $this->addTransitionAction(self::ST_MANTISSA, self::ST_SYNT_LEXEME, $addNumberLexemeAction); + $this->addTransitionAction(self::ST_MANTISSA, self::ST_LEXEME_MODIFIER, $addNumberLexemeAction); + } + + + + + /** + * Translate input char to an input symbol of state machine + * + * @param string $char + * @return integer + */ + private function _translateInput($char) + { + if (strpos(self::QUERY_WHITE_SPACE_CHARS, $char) !== false) { return self::IN_WHITE_SPACE; + } else if (strpos(self::QUERY_SYNT_CHARS, $char) !== false) { return self::IN_SYNT_CHAR; + } else if (strpos(self::QUERY_MUTABLE_CHARS, $char) !== false) { return self::IN_MUTABLE_CHAR; + } else if (strpos(self::QUERY_LEXEMEMODIFIER_CHARS, $char) !== false) { return self::IN_LEXEME_MODIFIER; + } else if (strpos(self::QUERY_ASCIIDIGITS_CHARS, $char) !== false) { return self::IN_ASCII_DIGIT; + } else if ($char === '"' ) { return self::IN_QUOTE; + } else if ($char === '.' ) { return self::IN_DECIMAL_POINT; + } else if ($char === '\\') { return self::IN_ESCAPE_CHAR; + } else { return self::IN_CHAR; + } + } + + + /** + * This method is used to tokenize query string into lexemes + * + * @param string $inputString + * @param string $encoding + * @return array + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function tokenize($inputString, $encoding) + { + $this->reset(); + + $this->_lexemes = array(); + $this->_queryString = array(); + + if (PHP_OS == 'AIX' && $encoding == '') { + $encoding = 'ISO8859-1'; + } + $strLength = iconv_strlen($inputString, $encoding); + + // Workaround for iconv_substr bug + $inputString .= ' '; + + for ($count = 0; $count < $strLength; $count++) { + $this->_queryString[$count] = iconv_substr($inputString, $count, 1, $encoding); + } + + for ($this->_queryStringPosition = 0; + $this->_queryStringPosition < count($this->_queryString); + $this->_queryStringPosition++) { + $this->process($this->_translateInput($this->_queryString[$this->_queryStringPosition])); + } + + $this->process(self::IN_WHITE_SPACE); + + if ($this->getState() != self::ST_WHITE_SPACE) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Unexpected end of query'); + } + + $this->_queryString = null; + + return $this->_lexemes; + } + + + + /********************************************************************* + * Actions implementation + * + * Actions affect on recognized lexemes list + *********************************************************************/ + + /** + * Add query syntax lexeme + * + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function addQuerySyntaxLexeme() + { + $lexeme = $this->_queryString[$this->_queryStringPosition]; + + // Process two char lexemes + if (strpos(self::QUERY_DOUBLECHARLEXEME_CHARS, $lexeme) !== false) { + // increase current position in a query string + $this->_queryStringPosition++; + + // check, + if ($this->_queryStringPosition == count($this->_queryString) || + $this->_queryString[$this->_queryStringPosition] != $lexeme) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Two chars lexeme expected. ' . $this->_positionMsg()); + } + + // duplicate character + $lexeme .= $lexeme; + } + + $token = new Zend_Search_Lucene_Search_QueryToken( + Zend_Search_Lucene_Search_QueryToken::TC_SYNTAX_ELEMENT, + $lexeme, + $this->_queryStringPosition); + + // Skip this lexeme if it's a field indicator ':' and treat previous as 'field' instead of 'word' + if ($token->type == Zend_Search_Lucene_Search_QueryToken::TT_FIELD_INDICATOR) { + $token = array_pop($this->_lexemes); + if ($token === null || $token->type != Zend_Search_Lucene_Search_QueryToken::TT_WORD) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Field mark \':\' must follow field name. ' . $this->_positionMsg()); + } + + $token->type = Zend_Search_Lucene_Search_QueryToken::TT_FIELD; + } + + $this->_lexemes[] = $token; + } + + /** + * Add lexeme modifier + */ + public function addLexemeModifier() + { + $this->_lexemes[] = new Zend_Search_Lucene_Search_QueryToken( + Zend_Search_Lucene_Search_QueryToken::TC_SYNTAX_ELEMENT, + $this->_queryString[$this->_queryStringPosition], + $this->_queryStringPosition); + } + + + /** + * Add lexeme + */ + public function addLexeme() + { + $this->_lexemes[] = new Zend_Search_Lucene_Search_QueryToken( + Zend_Search_Lucene_Search_QueryToken::TC_WORD, + $this->_currentLexeme, + $this->_queryStringPosition - 1); + + $this->_currentLexeme = ''; + } + + /** + * Add quoted lexeme + */ + public function addQuotedLexeme() + { + $this->_lexemes[] = new Zend_Search_Lucene_Search_QueryToken( + Zend_Search_Lucene_Search_QueryToken::TC_PHRASE, + $this->_currentLexeme, + $this->_queryStringPosition); + + $this->_currentLexeme = ''; + } + + /** + * Add number lexeme + */ + public function addNumberLexeme() + { + $this->_lexemes[] = new Zend_Search_Lucene_Search_QueryToken( + Zend_Search_Lucene_Search_QueryToken::TC_NUMBER, + $this->_currentLexeme, + $this->_queryStringPosition - 1); + $this->_currentLexeme = ''; + } + + /** + * Extend lexeme by one char + */ + public function addLexemeChar() + { + $this->_currentLexeme .= $this->_queryString[$this->_queryStringPosition]; + } + + + /** + * Position message + * + * @return string + */ + private function _positionMsg() + { + return 'Position is ' . $this->_queryStringPosition . '.'; + } + + + /********************************************************************* + * Syntax errors actions + *********************************************************************/ + public function lexModifierErrException() + { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Lexeme modifier character can be followed only by number, white space or query syntax element. ' . $this->_positionMsg()); + } + public function quoteWithinLexemeErrException() + { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Quote within lexeme must be escaped by \'\\\' char. ' . $this->_positionMsg()); + } + public function wrongNumberErrException() + { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Wrong number syntax.' . $this->_positionMsg()); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParser.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParser.php new file mode 100644 index 00000000000..ba6a8c65633 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParser.php @@ -0,0 +1,635 @@ +addRules( + array(array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_WORD, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PHRASE, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FIELD, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_REQUIRED, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PROHIBITED, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FUZZY_PROX_MARK, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_BOOSTING_MARK, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_RANGE_INCL_START, self::ST_CLOSEDINT_RQ_START), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_RANGE_EXCL_START, self::ST_OPENEDINT_RQ_START), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_START, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_END, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_AND_LEXEME, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_OR_LEXEME, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NOT_LEXEME, self::ST_COMMON_QUERY_ELEMENT), + array(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NUMBER, self::ST_COMMON_QUERY_ELEMENT) + )); + $this->addRules( + array(array(self::ST_CLOSEDINT_RQ_START, Zend_Search_Lucene_Search_QueryToken::TT_WORD, self::ST_CLOSEDINT_RQ_FIRST_TERM), + array(self::ST_CLOSEDINT_RQ_FIRST_TERM, Zend_Search_Lucene_Search_QueryToken::TT_TO_LEXEME, self::ST_CLOSEDINT_RQ_TO_TERM), + array(self::ST_CLOSEDINT_RQ_TO_TERM, Zend_Search_Lucene_Search_QueryToken::TT_WORD, self::ST_CLOSEDINT_RQ_LAST_TERM), + array(self::ST_CLOSEDINT_RQ_LAST_TERM, Zend_Search_Lucene_Search_QueryToken::TT_RANGE_INCL_END, self::ST_COMMON_QUERY_ELEMENT) + )); + $this->addRules( + array(array(self::ST_OPENEDINT_RQ_START, Zend_Search_Lucene_Search_QueryToken::TT_WORD, self::ST_OPENEDINT_RQ_FIRST_TERM), + array(self::ST_OPENEDINT_RQ_FIRST_TERM, Zend_Search_Lucene_Search_QueryToken::TT_TO_LEXEME, self::ST_OPENEDINT_RQ_TO_TERM), + array(self::ST_OPENEDINT_RQ_TO_TERM, Zend_Search_Lucene_Search_QueryToken::TT_WORD, self::ST_OPENEDINT_RQ_LAST_TERM), + array(self::ST_OPENEDINT_RQ_LAST_TERM, Zend_Search_Lucene_Search_QueryToken::TT_RANGE_EXCL_END, self::ST_COMMON_QUERY_ELEMENT) + )); + + + + $addTermEntryAction = new Zend_Search_Lucene_FSMAction($this, 'addTermEntry'); + $addPhraseEntryAction = new Zend_Search_Lucene_FSMAction($this, 'addPhraseEntry'); + $setFieldAction = new Zend_Search_Lucene_FSMAction($this, 'setField'); + $setSignAction = new Zend_Search_Lucene_FSMAction($this, 'setSign'); + $setFuzzyProxAction = new Zend_Search_Lucene_FSMAction($this, 'processFuzzyProximityModifier'); + $processModifierParameterAction = new Zend_Search_Lucene_FSMAction($this, 'processModifierParameter'); + $subqueryStartAction = new Zend_Search_Lucene_FSMAction($this, 'subqueryStart'); + $subqueryEndAction = new Zend_Search_Lucene_FSMAction($this, 'subqueryEnd'); + $logicalOperatorAction = new Zend_Search_Lucene_FSMAction($this, 'logicalOperator'); + $openedRQFirstTermAction = new Zend_Search_Lucene_FSMAction($this, 'openedRQFirstTerm'); + $openedRQLastTermAction = new Zend_Search_Lucene_FSMAction($this, 'openedRQLastTerm'); + $closedRQFirstTermAction = new Zend_Search_Lucene_FSMAction($this, 'closedRQFirstTerm'); + $closedRQLastTermAction = new Zend_Search_Lucene_FSMAction($this, 'closedRQLastTerm'); + + + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_WORD, $addTermEntryAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PHRASE, $addPhraseEntryAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FIELD, $setFieldAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_REQUIRED, $setSignAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_PROHIBITED, $setSignAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_FUZZY_PROX_MARK, $setFuzzyProxAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NUMBER, $processModifierParameterAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_START, $subqueryStartAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_SUBQUERY_END, $subqueryEndAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_AND_LEXEME, $logicalOperatorAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_OR_LEXEME, $logicalOperatorAction); + $this->addInputAction(self::ST_COMMON_QUERY_ELEMENT, Zend_Search_Lucene_Search_QueryToken::TT_NOT_LEXEME, $logicalOperatorAction); + + $this->addEntryAction(self::ST_OPENEDINT_RQ_FIRST_TERM, $openedRQFirstTermAction); + $this->addEntryAction(self::ST_OPENEDINT_RQ_LAST_TERM, $openedRQLastTermAction); + $this->addEntryAction(self::ST_CLOSEDINT_RQ_FIRST_TERM, $closedRQFirstTermAction); + $this->addEntryAction(self::ST_CLOSEDINT_RQ_LAST_TERM, $closedRQLastTermAction); + + + require_once 'Zend/Search/Lucene/Search/QueryLexer.php'; + $this->_lexer = new Zend_Search_Lucene_Search_QueryLexer(); + } + + /** + * Get query parser instance + * + * @return Zend_Search_Lucene_Search_QueryParser + */ + private static function _getInstance() + { + if (self::$_instance === null) { + self::$_instance = new self(); + } + return self::$_instance; + } + + /** + * Set query string default encoding + * + * @param string $encoding + */ + public static function setDefaultEncoding($encoding) + { + self::_getInstance()->_defaultEncoding = $encoding; + } + + /** + * Get query string default encoding + * + * @return string + */ + public static function getDefaultEncoding() + { + return self::_getInstance()->_defaultEncoding; + } + + /** + * Set default boolean operator + * + * @param integer $operator + */ + public static function setDefaultOperator($operator) + { + self::_getInstance()->_defaultOperator = $operator; + } + + /** + * Get default boolean operator + * + * @return integer + */ + public static function getDefaultOperator() + { + return self::_getInstance()->_defaultOperator; + } + + /** + * Turn on 'suppress query parser exceptions' mode. + */ + public static function suppressQueryParsingExceptions() + { + self::_getInstance()->_suppressQueryParsingExceptions = true; + } + /** + * Turn off 'suppress query parser exceptions' mode. + */ + public static function dontSuppressQueryParsingExceptions() + { + self::_getInstance()->_suppressQueryParsingExceptions = false; + } + /** + * Check 'suppress query parser exceptions' mode. + * @return boolean + */ + public static function queryParsingExceptionsSuppressed() + { + return self::_getInstance()->_suppressQueryParsingExceptions; + } + + + /** + * Escape keyword to force it to be parsed as one term + * + * @param string $keyword + * @return string + */ + public static function escape($keyword) + { + return '\\' . implode('\\', str_split($keyword)); + } + + /** + * Parses a query string + * + * @param string $strQuery + * @param string $encoding + * @return Zend_Search_Lucene_Search_Query + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public static function parse($strQuery, $encoding = null) + { + self::_getInstance(); + + // Reset FSM if previous parse operation didn't return it into a correct state + self::$_instance->reset(); + + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + try { + require_once 'Zend/Search/Lucene/Search/QueryParserContext.php'; + + self::$_instance->_encoding = ($encoding !== null) ? $encoding : self::$_instance->_defaultEncoding; + self::$_instance->_lastToken = null; + self::$_instance->_context = new Zend_Search_Lucene_Search_QueryParserContext(self::$_instance->_encoding); + self::$_instance->_contextStack = array(); + self::$_instance->_tokens = self::$_instance->_lexer->tokenize($strQuery, self::$_instance->_encoding); + + // Empty query + if (count(self::$_instance->_tokens) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + + + foreach (self::$_instance->_tokens as $token) { + try { + self::$_instance->_currentToken = $token; + self::$_instance->process($token->type); + + self::$_instance->_lastToken = $token; + } catch (Exception $e) { + if (strpos($e->getMessage(), 'There is no any rule for') !== false) { + throw new Zend_Search_Lucene_Search_QueryParserException( 'Syntax error at char position ' . $token->position . '.', 0, $e); + } + + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + + if (count(self::$_instance->_contextStack) != 0) { + throw new Zend_Search_Lucene_Search_QueryParserException('Syntax Error: mismatched parentheses, every opening must have closing.' ); + } + + return self::$_instance->_context->getQuery(); + } catch (Zend_Search_Lucene_Search_QueryParserException $e) { + if (self::$_instance->_suppressQueryParsingExceptions) { + $queryTokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($strQuery, self::$_instance->_encoding); + + require_once 'Zend/Search/Lucene/Search/Query/MultiTerm.php'; + $query = new Zend_Search_Lucene_Search_Query_MultiTerm(); + $termsSign = (self::$_instance->_defaultOperator == self::B_AND) ? true /* required term */ : + null /* optional term */; + + require_once 'Zend/Search/Lucene/Index/Term.php'; + foreach ($queryTokens as $token) { + $query->addTerm(new Zend_Search_Lucene_Index_Term($token->getTermText()), $termsSign); + } + + + return $query; + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e); + } + } + } + + /********************************************************************* + * Actions implementation + * + * Actions affect on recognized lexemes list + *********************************************************************/ + + /** + * Add term to a query + */ + public function addTermEntry() + { + require_once 'Zend/Search/Lucene/Search/QueryEntry/Term.php'; + $entry = new Zend_Search_Lucene_Search_QueryEntry_Term($this->_currentToken->text, $this->_context->getField()); + $this->_context->addEntry($entry); + } + + /** + * Add phrase to a query + */ + public function addPhraseEntry() + { + require_once 'Zend/Search/Lucene/Search/QueryEntry/Phrase.php'; + $entry = new Zend_Search_Lucene_Search_QueryEntry_Phrase($this->_currentToken->text, $this->_context->getField()); + $this->_context->addEntry($entry); + } + + /** + * Set entry field + */ + public function setField() + { + $this->_context->setNextEntryField($this->_currentToken->text); + } + + /** + * Set entry sign + */ + public function setSign() + { + $this->_context->setNextEntrySign($this->_currentToken->type); + } + + + /** + * Process fuzzy search/proximity modifier - '~' + */ + public function processFuzzyProximityModifier() + { + $this->_context->processFuzzyProximityModifier(); + } + + /** + * Process modifier parameter + * + * @throws Zend_Search_Lucene_Exception + */ + public function processModifierParameter() + { + if ($this->_lastToken === null) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Lexeme modifier parameter must follow lexeme modifier. Char position 0.' ); + } + + switch ($this->_lastToken->type) { + case Zend_Search_Lucene_Search_QueryToken::TT_FUZZY_PROX_MARK: + $this->_context->processFuzzyProximityModifier($this->_currentToken->text); + break; + + case Zend_Search_Lucene_Search_QueryToken::TT_BOOSTING_MARK: + $this->_context->boost($this->_currentToken->text); + break; + + default: + // It's not a user input exception + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Lexeme modifier parameter must follow lexeme modifier. Char position 0.' ); + } + } + + + /** + * Start subquery + */ + public function subqueryStart() + { + require_once 'Zend/Search/Lucene/Search/QueryParserContext.php'; + + $this->_contextStack[] = $this->_context; + $this->_context = new Zend_Search_Lucene_Search_QueryParserContext($this->_encoding, $this->_context->getField()); + } + + /** + * End subquery + */ + public function subqueryEnd() + { + if (count($this->_contextStack) == 0) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Syntax Error: mismatched parentheses, every opening must have closing. Char position ' . $this->_currentToken->position . '.' ); + } + + $query = $this->_context->getQuery(); + $this->_context = array_pop($this->_contextStack); + + require_once 'Zend/Search/Lucene/Search/QueryEntry/Subquery.php'; + $this->_context->addEntry(new Zend_Search_Lucene_Search_QueryEntry_Subquery($query)); + } + + /** + * Process logical operator + */ + public function logicalOperator() + { + $this->_context->addLogicalOperator($this->_currentToken->type); + } + + /** + * Process first range query term (opened interval) + */ + public function openedRQFirstTerm() + { + $this->_rqFirstTerm = $this->_currentToken->text; + } + + /** + * Process last range query term (opened interval) + * + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function openedRQLastTerm() + { + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_rqFirstTerm, $this->_encoding); + if (count($tokens) > 1) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Range query boundary terms must be non-multiple word terms'); + } else if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $from = new Zend_Search_Lucene_Index_Term(reset($tokens)->getTermText(), $this->_context->getField()); + } else { + $from = null; + } + + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_currentToken->text, $this->_encoding); + if (count($tokens) > 1) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Range query boundary terms must be non-multiple word terms'); + } else if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $to = new Zend_Search_Lucene_Index_Term(reset($tokens)->getTermText(), $this->_context->getField()); + } else { + $to = null; + } + + if ($from === null && $to === null) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('At least one range query boundary term must be non-empty term'); + } + + require_once 'Zend/Search/Lucene/Search/Query/Range.php'; + $rangeQuery = new Zend_Search_Lucene_Search_Query_Range($from, $to, false); + require_once 'Zend/Search/Lucene/Search/QueryEntry/Subquery.php'; + $entry = new Zend_Search_Lucene_Search_QueryEntry_Subquery($rangeQuery); + $this->_context->addEntry($entry); + } + + /** + * Process first range query term (closed interval) + */ + public function closedRQFirstTerm() + { + $this->_rqFirstTerm = $this->_currentToken->text; + } + + /** + * Process last range query term (closed interval) + * + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function closedRQLastTerm() + { + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_rqFirstTerm, $this->_encoding); + if (count($tokens) > 1) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Range query boundary terms must be non-multiple word terms'); + } else if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $from = new Zend_Search_Lucene_Index_Term(reset($tokens)->getTermText(), $this->_context->getField()); + } else { + $from = null; + } + + $tokens = Zend_Search_Lucene_Analysis_Analyzer::getDefault()->tokenize($this->_currentToken->text, $this->_encoding); + if (count($tokens) > 1) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Range query boundary terms must be non-multiple word terms'); + } else if (count($tokens) == 1) { + require_once 'Zend/Search/Lucene/Index/Term.php'; + $to = new Zend_Search_Lucene_Index_Term(reset($tokens)->getTermText(), $this->_context->getField()); + } else { + $to = null; + } + + if ($from === null && $to === null) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('At least one range query boundary term must be non-empty term'); + } + + require_once 'Zend/Search/Lucene/Search/Query/Range.php'; + $rangeQuery = new Zend_Search_Lucene_Search_Query_Range($from, $to, true); + require_once 'Zend/Search/Lucene/Search/QueryEntry/Subquery.php'; + $entry = new Zend_Search_Lucene_Search_QueryEntry_Subquery($rangeQuery); + $this->_context->addEntry($entry); + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserContext.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserContext.php new file mode 100644 index 00000000000..0b1884e7b4c --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserContext.php @@ -0,0 +1,401 @@ +_encoding = $encoding; + $this->_defaultField = $defaultField; + } + + + /** + * Get context default field + * + * @return string|null + */ + public function getField() + { + return ($this->_nextEntryField !== null) ? $this->_nextEntryField : $this->_defaultField; + } + + /** + * Set field for next entry + * + * @param string $field + */ + public function setNextEntryField($field) + { + $this->_nextEntryField = $field; + } + + + /** + * Set sign for next entry + * + * @param integer $sign + * @throws Zend_Search_Lucene_Exception + */ + public function setNextEntrySign($sign) + { + if ($this->_mode === self::GM_BOOLEAN) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('It\'s not allowed to mix boolean and signs styles in the same subquery.'); + } + + $this->_mode = self::GM_SIGNS; + + if ($sign == Zend_Search_Lucene_Search_QueryToken::TT_REQUIRED) { + $this->_nextEntrySign = true; + } else if ($sign == Zend_Search_Lucene_Search_QueryToken::TT_PROHIBITED) { + $this->_nextEntrySign = false; + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Unrecognized sign type.'); + } + } + + + /** + * Add entry to a query + * + * @param Zend_Search_Lucene_Search_QueryEntry $entry + */ + public function addEntry(Zend_Search_Lucene_Search_QueryEntry $entry) + { + if ($this->_mode !== self::GM_BOOLEAN) { + $this->_signs[] = $this->_nextEntrySign; + } + + $this->_entries[] = $entry; + + $this->_nextEntryField = null; + $this->_nextEntrySign = null; + } + + + /** + * Process fuzzy search or proximity search modifier + * + * @throws Zend_Search_Lucene_Search_QueryParserException + */ + public function processFuzzyProximityModifier($parameter = null) + { + // Check, that modifier has came just after word or phrase + if ($this->_nextEntryField !== null || $this->_nextEntrySign !== null) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('\'~\' modifier must follow word or phrase.'); + } + + $lastEntry = array_pop($this->_entries); + + if (!$lastEntry instanceof Zend_Search_Lucene_Search_QueryEntry) { + // there are no entries or last entry is boolean operator + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('\'~\' modifier must follow word or phrase.'); + } + + $lastEntry->processFuzzyProximityModifier($parameter); + + $this->_entries[] = $lastEntry; + } + + /** + * Set boost factor to the entry + * + * @param float $boostFactor + */ + public function boost($boostFactor) + { + // Check, that modifier has came just after word or phrase + if ($this->_nextEntryField !== null || $this->_nextEntrySign !== null) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('\'^\' modifier must follow word, phrase or subquery.'); + } + + $lastEntry = array_pop($this->_entries); + + if (!$lastEntry instanceof Zend_Search_Lucene_Search_QueryEntry) { + // there are no entries or last entry is boolean operator + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('\'^\' modifier must follow word, phrase or subquery.'); + } + + $lastEntry->boost($boostFactor); + + $this->_entries[] = $lastEntry; + } + + /** + * Process logical operator + * + * @param integer $operator + */ + public function addLogicalOperator($operator) + { + if ($this->_mode === self::GM_SIGNS) { + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('It\'s not allowed to mix boolean and signs styles in the same subquery.'); + } + + $this->_mode = self::GM_BOOLEAN; + + $this->_entries[] = $operator; + } + + + /** + * Generate 'signs style' query from the context + * '+term1 term2 -term3 +() ...' + * + * @return Zend_Search_Lucene_Search_Query + */ + public function _signStyleExpressionQuery() + { + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + + require_once 'Zend/Search/Lucene/Search/QueryParser.php'; + if (Zend_Search_Lucene_Search_QueryParser::getDefaultOperator() == Zend_Search_Lucene_Search_QueryParser::B_AND) { + $defaultSign = true; // required + } else { + // Zend_Search_Lucene_Search_QueryParser::B_OR + $defaultSign = null; // optional + } + + foreach ($this->_entries as $entryId => $entry) { + $sign = ($this->_signs[$entryId] !== null) ? $this->_signs[$entryId] : $defaultSign; + $query->addSubquery($entry->getQuery($this->_encoding), $sign); + } + + return $query; + } + + + /** + * Generate 'boolean style' query from the context + * 'term1 and term2 or term3 and () and not ()' + * + * @return Zend_Search_Lucene_Search_Query + * @throws Zend_Search_Lucene + */ + private function _booleanExpressionQuery() + { + /** + * We treat each level of an expression as a boolean expression in + * a Disjunctive Normal Form + * + * AND operator has higher precedence than OR + * + * Thus logical query is a disjunction of one or more conjunctions of + * one or more query entries + */ + + require_once 'Zend/Search/Lucene/Search/BooleanExpressionRecognizer.php'; + $expressionRecognizer = new Zend_Search_Lucene_Search_BooleanExpressionRecognizer(); + + require_once 'Zend/Search/Lucene/Exception.php'; + try { + foreach ($this->_entries as $entry) { + if ($entry instanceof Zend_Search_Lucene_Search_QueryEntry) { + $expressionRecognizer->processLiteral($entry); + } else { + switch ($entry) { + case Zend_Search_Lucene_Search_QueryToken::TT_AND_LEXEME: + $expressionRecognizer->processOperator(Zend_Search_Lucene_Search_BooleanExpressionRecognizer::IN_AND_OPERATOR); + break; + + case Zend_Search_Lucene_Search_QueryToken::TT_OR_LEXEME: + $expressionRecognizer->processOperator(Zend_Search_Lucene_Search_BooleanExpressionRecognizer::IN_OR_OPERATOR); + break; + + case Zend_Search_Lucene_Search_QueryToken::TT_NOT_LEXEME: + $expressionRecognizer->processOperator(Zend_Search_Lucene_Search_BooleanExpressionRecognizer::IN_NOT_OPERATOR); + break; + + default: + throw new Zend_Search_Lucene('Boolean expression error. Unknown operator type.'); + } + } + } + + $conjuctions = $expressionRecognizer->finishExpression(); + } catch (Zend_Search_Exception $e) { + // throw new Zend_Search_Lucene_Search_QueryParserException('Boolean expression error. Error message: \'' . + // $e->getMessage() . '\'.' ); + // It's query syntax error message and it should be user friendly. So FSM message is omitted + require_once 'Zend/Search/Lucene/Search/QueryParserException.php'; + throw new Zend_Search_Lucene_Search_QueryParserException('Boolean expression error.', 0, $e); + } + + // Remove 'only negative' conjunctions + foreach ($conjuctions as $conjuctionId => $conjuction) { + $nonNegativeEntryFound = false; + + foreach ($conjuction as $conjuctionEntry) { + if ($conjuctionEntry[1]) { + $nonNegativeEntryFound = true; + break; + } + } + + if (!$nonNegativeEntryFound) { + unset($conjuctions[$conjuctionId]); + } + } + + + $subqueries = array(); + foreach ($conjuctions as $conjuction) { + // Check, if it's a one term conjuction + if (count($conjuction) == 1) { + $subqueries[] = $conjuction[0][0]->getQuery($this->_encoding); + } else { + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $subquery = new Zend_Search_Lucene_Search_Query_Boolean(); + + foreach ($conjuction as $conjuctionEntry) { + $subquery->addSubquery($conjuctionEntry[0]->getQuery($this->_encoding), $conjuctionEntry[1]); + } + + $subqueries[] = $subquery; + } + } + + if (count($subqueries) == 0) { + require_once 'Zend/Search/Lucene/Search/Query/Insignificant.php'; + return new Zend_Search_Lucene_Search_Query_Insignificant(); + } + + if (count($subqueries) == 1) { + return $subqueries[0]; + } + + + require_once 'Zend/Search/Lucene/Search/Query/Boolean.php'; + $query = new Zend_Search_Lucene_Search_Query_Boolean(); + + foreach ($subqueries as $subquery) { + // Non-requirered entry/subquery + $query->addSubquery($subquery); + } + + return $query; + } + + /** + * Generate query from current context + * + * @return Zend_Search_Lucene_Search_Query + */ + public function getQuery() + { + if ($this->_mode === self::GM_BOOLEAN) { + return $this->_booleanExpressionQuery(); + } else { + return $this->_signStyleExpressionQuery(); + } + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserException.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserException.php new file mode 100644 index 00000000000..5790f336245 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/QueryParserException.php @@ -0,0 +1,41 @@ + or field:() pairs + const TT_FIELD_INDICATOR = 3; // ':' + const TT_REQUIRED = 4; // '+' + const TT_PROHIBITED = 5; // '-' + const TT_FUZZY_PROX_MARK = 6; // '~' + const TT_BOOSTING_MARK = 7; // '^' + const TT_RANGE_INCL_START = 8; // '[' + const TT_RANGE_INCL_END = 9; // ']' + const TT_RANGE_EXCL_START = 10; // '{' + const TT_RANGE_EXCL_END = 11; // '}' + const TT_SUBQUERY_START = 12; // '(' + const TT_SUBQUERY_END = 13; // ')' + const TT_AND_LEXEME = 14; // 'AND' or 'and' + const TT_OR_LEXEME = 15; // 'OR' or 'or' + const TT_NOT_LEXEME = 16; // 'NOT' or 'not' + const TT_TO_LEXEME = 17; // 'TO' or 'to' + const TT_NUMBER = 18; // Number, like: 10, 0.8, .64, .... + + + /** + * Returns all possible lexeme types. + * It's used for syntax analyzer state machine initialization + * + * @return array + */ + public static function getTypes() + { + return array( self::TT_WORD, + self::TT_PHRASE, + self::TT_FIELD, + self::TT_FIELD_INDICATOR, + self::TT_REQUIRED, + self::TT_PROHIBITED, + self::TT_FUZZY_PROX_MARK, + self::TT_BOOSTING_MARK, + self::TT_RANGE_INCL_START, + self::TT_RANGE_INCL_END, + self::TT_RANGE_EXCL_START, + self::TT_RANGE_EXCL_END, + self::TT_SUBQUERY_START, + self::TT_SUBQUERY_END, + self::TT_AND_LEXEME, + self::TT_OR_LEXEME, + self::TT_NOT_LEXEME, + self::TT_TO_LEXEME, + self::TT_NUMBER + ); + } + + + /** + * TokenCategories + */ + const TC_WORD = 0; // Word + const TC_PHRASE = 1; // Phrase (one or several quoted words) + const TC_NUMBER = 2; // Nubers, which are used with syntax elements. Ex. roam~0.8 + const TC_SYNTAX_ELEMENT = 3; // + - ( ) [ ] { } ! || && ~ ^ + + + /** + * Token type. + * + * @var integer + */ + public $type; + + /** + * Token text. + * + * @var integer + */ + public $text; + + /** + * Token position within query. + * + * @var integer + */ + public $position; + + + /** + * IndexReader constructor needs token type and token text as a parameters. + * + * @param integer $tokenCategory + * @param string $tokText + * @param integer $position + */ + public function __construct($tokenCategory, $tokenText, $position) + { + $this->text = $tokenText; + $this->position = $position + 1; // Start from 1 + + switch ($tokenCategory) { + case self::TC_WORD: + if ( strtolower($tokenText) == 'and') { + $this->type = self::TT_AND_LEXEME; + } else if (strtolower($tokenText) == 'or') { + $this->type = self::TT_OR_LEXEME; + } else if (strtolower($tokenText) == 'not') { + $this->type = self::TT_NOT_LEXEME; + } else if (strtolower($tokenText) == 'to') { + $this->type = self::TT_TO_LEXEME; + } else { + $this->type = self::TT_WORD; + } + break; + + case self::TC_PHRASE: + $this->type = self::TT_PHRASE; + break; + + case self::TC_NUMBER: + $this->type = self::TT_NUMBER; + break; + + case self::TC_SYNTAX_ELEMENT: + switch ($tokenText) { + case ':': + $this->type = self::TT_FIELD_INDICATOR; + break; + + case '+': + $this->type = self::TT_REQUIRED; + break; + + case '-': + $this->type = self::TT_PROHIBITED; + break; + + case '~': + $this->type = self::TT_FUZZY_PROX_MARK; + break; + + case '^': + $this->type = self::TT_BOOSTING_MARK; + break; + + case '[': + $this->type = self::TT_RANGE_INCL_START; + break; + + case ']': + $this->type = self::TT_RANGE_INCL_END; + break; + + case '{': + $this->type = self::TT_RANGE_EXCL_START; + break; + + case '}': + $this->type = self::TT_RANGE_EXCL_END; + break; + + case '(': + $this->type = self::TT_SUBQUERY_START; + break; + + case ')': + $this->type = self::TT_SUBQUERY_END; + break; + + case '!': + $this->type = self::TT_NOT_LEXEME; + break; + + case '&&': + $this->type = self::TT_AND_LEXEME; + break; + + case '||': + $this->type = self::TT_OR_LEXEME; + break; + + default: + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Unrecognized query syntax lexeme: \'' . $tokenText . '\''); + } + break; + + case self::TC_NUMBER: + $this->type = self::TT_NUMBER; + + default: + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Unrecognized lexeme type: \'' . $tokenCategory . '\''); + } + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity.php new file mode 100644 index 00000000000..700c0d82d95 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity.php @@ -0,0 +1,551 @@ + 0.0, + 1 => 5.820766E-10, + 2 => 6.9849193E-10, + 3 => 8.1490725E-10, + 4 => 9.313226E-10, + 5 => 1.1641532E-9, + 6 => 1.3969839E-9, + 7 => 1.6298145E-9, + 8 => 1.8626451E-9, + 9 => 2.3283064E-9, + 10 => 2.7939677E-9, + 11 => 3.259629E-9, + 12 => 3.7252903E-9, + 13 => 4.656613E-9, + 14 => 5.5879354E-9, + 15 => 6.519258E-9, + 16 => 7.4505806E-9, + 17 => 9.313226E-9, + 18 => 1.1175871E-8, + 19 => 1.3038516E-8, + 20 => 1.4901161E-8, + 21 => 1.8626451E-8, + 22 => 2.2351742E-8, + 23 => 2.6077032E-8, + 24 => 2.9802322E-8, + 25 => 3.7252903E-8, + 26 => 4.4703484E-8, + 27 => 5.2154064E-8, + 28 => 5.9604645E-8, + 29 => 7.4505806E-8, + 30 => 8.940697E-8, + 31 => 1.0430813E-7, + 32 => 1.1920929E-7, + 33 => 1.4901161E-7, + 34 => 1.7881393E-7, + 35 => 2.0861626E-7, + 36 => 2.3841858E-7, + 37 => 2.9802322E-7, + 38 => 3.5762787E-7, + 39 => 4.172325E-7, + 40 => 4.7683716E-7, + 41 => 5.9604645E-7, + 42 => 7.1525574E-7, + 43 => 8.34465E-7, + 44 => 9.536743E-7, + 45 => 1.1920929E-6, + 46 => 1.4305115E-6, + 47 => 1.66893E-6, + 48 => 1.9073486E-6, + 49 => 2.3841858E-6, + 50 => 2.861023E-6, + 51 => 3.33786E-6, + 52 => 3.8146973E-6, + 53 => 4.7683716E-6, + 54 => 5.722046E-6, + 55 => 6.67572E-6, + 56 => 7.6293945E-6, + 57 => 9.536743E-6, + 58 => 1.1444092E-5, + 59 => 1.335144E-5, + 60 => 1.5258789E-5, + 61 => 1.9073486E-5, + 62 => 2.2888184E-5, + 63 => 2.670288E-5, + 64 => 3.0517578E-5, + 65 => 3.8146973E-5, + 66 => 4.5776367E-5, + 67 => 5.340576E-5, + 68 => 6.1035156E-5, + 69 => 7.6293945E-5, + 70 => 9.1552734E-5, + 71 => 1.0681152E-4, + 72 => 1.2207031E-4, + 73 => 1.5258789E-4, + 74 => 1.8310547E-4, + 75 => 2.1362305E-4, + 76 => 2.4414062E-4, + 77 => 3.0517578E-4, + 78 => 3.6621094E-4, + 79 => 4.272461E-4, + 80 => 4.8828125E-4, + 81 => 6.1035156E-4, + 82 => 7.324219E-4, + 83 => 8.544922E-4, + 84 => 9.765625E-4, + 85 => 0.0012207031, + 86 => 0.0014648438, + 87 => 0.0017089844, + 88 => 0.001953125, + 89 => 0.0024414062, + 90 => 0.0029296875, + 91 => 0.0034179688, + 92 => 0.00390625, + 93 => 0.0048828125, + 94 => 0.005859375, + 95 => 0.0068359375, + 96 => 0.0078125, + 97 => 0.009765625, + 98 => 0.01171875, + 99 => 0.013671875, + 100 => 0.015625, + 101 => 0.01953125, + 102 => 0.0234375, + 103 => 0.02734375, + 104 => 0.03125, + 105 => 0.0390625, + 106 => 0.046875, + 107 => 0.0546875, + 108 => 0.0625, + 109 => 0.078125, + 110 => 0.09375, + 111 => 0.109375, + 112 => 0.125, + 113 => 0.15625, + 114 => 0.1875, + 115 => 0.21875, + 116 => 0.25, + 117 => 0.3125, + 118 => 0.375, + 119 => 0.4375, + 120 => 0.5, + 121 => 0.625, + 122 => 0.75, + 123 => 0.875, + 124 => 1.0, + 125 => 1.25, + 126 => 1.5, + 127 => 1.75, + 128 => 2.0, + 129 => 2.5, + 130 => 3.0, + 131 => 3.5, + 132 => 4.0, + 133 => 5.0, + 134 => 6.0, + 135 => 7.0, + 136 => 8.0, + 137 => 10.0, + 138 => 12.0, + 139 => 14.0, + 140 => 16.0, + 141 => 20.0, + 142 => 24.0, + 143 => 28.0, + 144 => 32.0, + 145 => 40.0, + 146 => 48.0, + 147 => 56.0, + 148 => 64.0, + 149 => 80.0, + 150 => 96.0, + 151 => 112.0, + 152 => 128.0, + 153 => 160.0, + 154 => 192.0, + 155 => 224.0, + 156 => 256.0, + 157 => 320.0, + 158 => 384.0, + 159 => 448.0, + 160 => 512.0, + 161 => 640.0, + 162 => 768.0, + 163 => 896.0, + 164 => 1024.0, + 165 => 1280.0, + 166 => 1536.0, + 167 => 1792.0, + 168 => 2048.0, + 169 => 2560.0, + 170 => 3072.0, + 171 => 3584.0, + 172 => 4096.0, + 173 => 5120.0, + 174 => 6144.0, + 175 => 7168.0, + 176 => 8192.0, + 177 => 10240.0, + 178 => 12288.0, + 179 => 14336.0, + 180 => 16384.0, + 181 => 20480.0, + 182 => 24576.0, + 183 => 28672.0, + 184 => 32768.0, + 185 => 40960.0, + 186 => 49152.0, + 187 => 57344.0, + 188 => 65536.0, + 189 => 81920.0, + 190 => 98304.0, + 191 => 114688.0, + 192 => 131072.0, + 193 => 163840.0, + 194 => 196608.0, + 195 => 229376.0, + 196 => 262144.0, + 197 => 327680.0, + 198 => 393216.0, + 199 => 458752.0, + 200 => 524288.0, + 201 => 655360.0, + 202 => 786432.0, + 203 => 917504.0, + 204 => 1048576.0, + 205 => 1310720.0, + 206 => 1572864.0, + 207 => 1835008.0, + 208 => 2097152.0, + 209 => 2621440.0, + 210 => 3145728.0, + 211 => 3670016.0, + 212 => 4194304.0, + 213 => 5242880.0, + 214 => 6291456.0, + 215 => 7340032.0, + 216 => 8388608.0, + 217 => 1.048576E7, + 218 => 1.2582912E7, + 219 => 1.4680064E7, + 220 => 1.6777216E7, + 221 => 2.097152E7, + 222 => 2.5165824E7, + 223 => 2.9360128E7, + 224 => 3.3554432E7, + 225 => 4.194304E7, + 226 => 5.0331648E7, + 227 => 5.8720256E7, + 228 => 6.7108864E7, + 229 => 8.388608E7, + 230 => 1.00663296E8, + 231 => 1.17440512E8, + 232 => 1.34217728E8, + 233 => 1.6777216E8, + 234 => 2.01326592E8, + 235 => 2.34881024E8, + 236 => 2.68435456E8, + 237 => 3.3554432E8, + 238 => 4.02653184E8, + 239 => 4.69762048E8, + 240 => 5.3687091E8, + 241 => 6.7108864E8, + 242 => 8.0530637E8, + 243 => 9.395241E8, + 244 => 1.07374182E9, + 245 => 1.34217728E9, + 246 => 1.61061274E9, + 247 => 1.87904819E9, + 248 => 2.14748365E9, + 249 => 2.68435456E9, + 250 => 3.22122547E9, + 251 => 3.75809638E9, + 252 => 4.2949673E9, + 253 => 5.3687091E9, + 254 => 6.4424509E9, + 255 => 7.5161928E9 ); + + + /** + * Set the default Similarity implementation used by indexing and search + * code. + * + * @param Zend_Search_Lucene_Search_Similarity $similarity + */ + public static function setDefault(Zend_Search_Lucene_Search_Similarity $similarity) + { + self::$_defaultImpl = $similarity; + } + + + /** + * Return the default Similarity implementation used by indexing and search + * code. + * + * @return Zend_Search_Lucene_Search_Similarity + */ + public static function getDefault() + { + if (!self::$_defaultImpl instanceof Zend_Search_Lucene_Search_Similarity) { + require_once 'Zend/Search/Lucene/Search/Similarity/Default.php'; + self::$_defaultImpl = new Zend_Search_Lucene_Search_Similarity_Default(); + } + + return self::$_defaultImpl; + } + + + /** + * Computes the normalization value for a field given the total number of + * terms contained in a field. These values, together with field boosts, are + * stored in an index and multipled into scores for hits on each field by the + * search code. + * + * Matches in longer fields are less precise, so implemenations of this + * method usually return smaller values when 'numTokens' is large, + * and larger values when 'numTokens' is small. + * + * That these values are computed under + * IndexWriter::addDocument(Document) and stored then using + * encodeNorm(float). Thus they have limited precision, and documents + * must be re-indexed if this method is altered. + * + * fieldName - name of field + * numTokens - the total number of tokens contained in fields named + * 'fieldName' of 'doc'. + * Returns a normalization factor for hits on this field of this document + * + * @param string $fieldName + * @param integer $numTokens + * @return float + */ + abstract public function lengthNorm($fieldName, $numTokens); + + /** + * Computes the normalization value for a query given the sum of the squared + * weights of each of the query terms. This value is then multipled into the + * weight of each query term. + * + * This does not affect ranking, but rather just attempts to make scores + * from different queries comparable. + * + * sumOfSquaredWeights - the sum of the squares of query term weights + * Returns a normalization factor for query weights + * + * @param float $sumOfSquaredWeights + * @return float + */ + abstract public function queryNorm($sumOfSquaredWeights); + + + /** + * Decodes a normalization factor stored in an index. + * + * @param integer $byte + * @return float + */ + public static function decodeNorm($byte) + { + return self::$_normTable[$byte & 0xFF]; + } + + + /** + * Encodes a normalization factor for storage in an index. + * + * The encoding uses a five-bit exponent and three-bit mantissa, thus + * representing values from around 7x10^9 to 2x10^-9 with about one + * significant decimal digit of accuracy. Zero is also represented. + * Negative numbers are rounded up to zero. Values too large to represent + * are rounded down to the largest representable value. Positive values too + * small to represent are rounded up to the smallest positive representable + * value. + * + * @param float $f + * @return integer + */ + static function encodeNorm($f) + { + return self::_floatToByte($f); + } + + /** + * Float to byte conversion + * + * @param integer $b + * @return float + */ + private static function _floatToByte($f) + { + // round negatives up to zero + if ($f <= 0.0) { + return 0; + } + + // search for appropriate value + $lowIndex = 0; + $highIndex = 255; + while ($highIndex >= $lowIndex) { + // $mid = ($highIndex - $lowIndex)/2; + $mid = ($highIndex + $lowIndex) >> 1; + $delta = $f - self::$_normTable[$mid]; + + if ($delta < 0) { + $highIndex = $mid-1; + } elseif ($delta > 0) { + $lowIndex = $mid+1; + } else { + return $mid; // We got it! + } + } + + // round to closest value + if ($highIndex != 255 && + $f - self::$_normTable[$highIndex] > self::$_normTable[$highIndex+1] - $f ) { + return $highIndex + 1; + } else { + return $highIndex; + } + } + + + /** + * Computes a score factor based on a term or phrase's frequency in a + * document. This value is multiplied by the idf(Term, Searcher) + * factor for each term in the query and these products are then summed to + * form the initial score for a document. + * + * Terms and phrases repeated in a document indicate the topic of the + * document, so implementations of this method usually return larger values + * when 'freq' is large, and smaller values when 'freq' + * is small. + * + * freq - the frequency of a term within a document + * Returns a score factor based on a term's within-document frequency + * + * @param float $freq + * @return float + */ + abstract public function tf($freq); + + /** + * Computes the amount of a sloppy phrase match, based on an edit distance. + * This value is summed for each sloppy phrase match in a document to form + * the frequency that is passed to tf(float). + * + * A phrase match with a small edit distance to a document passage more + * closely matches the document, so implementations of this method usually + * return larger values when the edit distance is small and smaller values + * when it is large. + * + * distance - the edit distance of this sloppy phrase match + * Returns the frequency increment for this match + * + * @param integer $distance + * @return float + */ + abstract public function sloppyFreq($distance); + + + /** + * Computes a score factor for a simple term or a phrase. + * + * The default implementation is: + * return idfFreq(searcher.docFreq(term), searcher.maxDoc()); + * + * input - the term in question or array of terms + * reader - reader the document collection being searched + * Returns a score factor for the term + * + * @param mixed $input + * @param Zend_Search_Lucene_Interface $reader + * @return a score factor for the term + */ + public function idf($input, Zend_Search_Lucene_Interface $reader) + { + if (!is_array($input)) { + return $this->idfFreq($reader->docFreq($input), $reader->count()); + } else { + $idf = 0.0; + foreach ($input as $term) { + $idf += $this->idfFreq($reader->docFreq($term), $reader->count()); + } + return $idf; + } + } + + /** + * Computes a score factor based on a term's document frequency (the number + * of documents which contain the term). This value is multiplied by the + * tf(int) factor for each term in the query and these products are + * then summed to form the initial score for a document. + * + * Terms that occur in fewer documents are better indicators of topic, so + * implemenations of this method usually return larger values for rare terms, + * and smaller values for common terms. + * + * docFreq - the number of documents which contain the term + * numDocs - the total number of documents in the collection + * Returns a score factor based on the term's document frequency + * + * @param integer $docFreq + * @param integer $numDocs + * @return float + */ + abstract public function idfFreq($docFreq, $numDocs); + + /** + * Computes a score factor based on the fraction of all query terms that a + * document contains. This value is multiplied into scores. + * + * The presence of a large portion of the query terms indicates a better + * match with the query, so implemenations of this method usually return + * larger values when the ratio between these parameters is large and smaller + * values when the ratio between them is small. + * + * overlap - the number of query terms matched in the document + * maxOverlap - the total number of terms in the query + * Returns a score factor based on term overlap with the query + * + * @param integer $overlap + * @param integer $maxOverlap + * @return float + */ + abstract public function coord($overlap, $maxOverlap); +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity/Default.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity/Default.php new file mode 100644 index 00000000000..15ba3bb6dec --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Similarity/Default.php @@ -0,0 +1,110 @@ +createWeight(). + * The sumOfSquaredWeights() method is then called on the top-level + * query to compute the query normalization factor Similarity->queryNorm(float). + * This factor is then passed to normalize(float). At this point the weighting + * is complete. + * + * @category Zend + * @package Zend_Search_Lucene + * @subpackage Search + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ +abstract class Zend_Search_Lucene_Search_Weight +{ + /** + * Normalization factor. + * This value is stored only for query expanation purpose and not used in any other place + * + * @var float + */ + protected $_queryNorm; + + /** + * Weight value + * + * Weight value may be initialized in sumOfSquaredWeights() or normalize() + * because they both are invoked either in Query::_initWeight (for top-level query) or + * in corresponding methods of parent query's weights + * + * @var float + */ + protected $_value; + + + /** + * The weight for this query. + * + * @return float + */ + public function getValue() + { + return $this->_value; + } + + /** + * The sum of squared weights of contained query clauses. + * + * @return float + */ + abstract public function sumOfSquaredWeights(); + + /** + * Assigns the query normalization factor to this. + * + * @param float $norm + */ + abstract public function normalize($norm); +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Boolean.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Boolean.php new file mode 100644 index 00000000000..a831c6cafc9 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Boolean.php @@ -0,0 +1,137 @@ +_query = $query; + $this->_reader = $reader; + $this->_weights = array(); + + $signs = $query->getSigns(); + + foreach ($query->getSubqueries() as $num => $subquery) { + if ($signs === null || $signs[$num] === null || $signs[$num]) { + $this->_weights[$num] = $subquery->createWeight($reader); + } + } + } + + + /** + * The weight for this query + * Standard Weight::$_value is not used for boolean queries + * + * @return float + */ + public function getValue() + { + return $this->_query->getBoost(); + } + + + /** + * The sum of squared weights of contained query clauses. + * + * @return float + */ + public function sumOfSquaredWeights() + { + $sum = 0; + foreach ($this->_weights as $weight) { + // sum sub weights + $sum += $weight->sumOfSquaredWeights(); + } + + // boost each sub-weight + $sum *= $this->_query->getBoost() * $this->_query->getBoost(); + + // check for empty query (like '-something -another') + if ($sum == 0) { + $sum = 1.0; + } + return $sum; + } + + + /** + * Assigns the query normalization factor to this. + * + * @param float $queryNorm + */ + public function normalize($queryNorm) + { + // incorporate boost + $queryNorm *= $this->_query->getBoost(); + + foreach ($this->_weights as $weight) { + $weight->normalize($queryNorm); + } + } +} + + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Empty.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Empty.php new file mode 100644 index 00000000000..0ad8de86299 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Empty.php @@ -0,0 +1,57 @@ +_query = $query; + $this->_reader = $reader; + $this->_weights = array(); + + $signs = $query->getSigns(); + + foreach ($query->getTerms() as $id => $term) { + if ($signs === null || $signs[$id] === null || $signs[$id]) { + require_once 'Zend/Search/Lucene/Search/Weight/Term.php'; + $this->_weights[$id] = new Zend_Search_Lucene_Search_Weight_Term($term, $query, $reader); + $query->setWeight($id, $this->_weights[$id]); + } + } + } + + + /** + * The weight for this query + * Standard Weight::$_value is not used for boolean queries + * + * @return float + */ + public function getValue() + { + return $this->_query->getBoost(); + } + + + /** + * The sum of squared weights of contained query clauses. + * + * @return float + */ + public function sumOfSquaredWeights() + { + $sum = 0; + foreach ($this->_weights as $weight) { + // sum sub weights + $sum += $weight->sumOfSquaredWeights(); + } + + // boost each sub-weight + $sum *= $this->_query->getBoost() * $this->_query->getBoost(); + + // check for empty query (like '-something -another') + if ($sum == 0) { + $sum = 1.0; + } + return $sum; + } + + + /** + * Assigns the query normalization factor to this. + * + * @param float $queryNorm + */ + public function normalize($queryNorm) + { + // incorporate boost + $queryNorm *= $this->_query->getBoost(); + + foreach ($this->_weights as $weight) { + $weight->normalize($queryNorm); + } + } +} + + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Phrase.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Phrase.php new file mode 100644 index 00000000000..31701491873 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Phrase.php @@ -0,0 +1,108 @@ +_query = $query; + $this->_reader = $reader; + } + + /** + * The sum of squared weights of contained query clauses. + * + * @return float + */ + public function sumOfSquaredWeights() + { + // compute idf + $this->_idf = $this->_reader->getSimilarity()->idf($this->_query->getTerms(), $this->_reader); + + // compute query weight + $this->_queryWeight = $this->_idf * $this->_query->getBoost(); + + // square it + return $this->_queryWeight * $this->_queryWeight; + } + + + /** + * Assigns the query normalization factor to this. + * + * @param float $queryNorm + */ + public function normalize($queryNorm) + { + $this->_queryNorm = $queryNorm; + + // normalize query weight + $this->_queryWeight *= $queryNorm; + + // idf for documents + $this->_value = $this->_queryWeight * $this->_idf; + } +} + + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Term.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Term.php new file mode 100644 index 00000000000..77af66e2f3d --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Search/Weight/Term.php @@ -0,0 +1,125 @@ +_term = $term; + $this->_query = $query; + $this->_reader = $reader; + } + + + /** + * The sum of squared weights of contained query clauses. + * + * @return float + */ + public function sumOfSquaredWeights() + { + // compute idf + $this->_idf = $this->_reader->getSimilarity()->idf($this->_term, $this->_reader); + + // compute query weight + $this->_queryWeight = $this->_idf * $this->_query->getBoost(); + + // square it + return $this->_queryWeight * $this->_queryWeight; + } + + + /** + * Assigns the query normalization factor to this. + * + * @param float $queryNorm + */ + public function normalize($queryNorm) + { + $this->_queryNorm = $queryNorm; + + // normalize query weight + $this->_queryWeight *= $queryNorm; + + // idf for documents + $this->_value = $this->_queryWeight * $this->_idf; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/Directory.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/Directory.php new file mode 100644 index 00000000000..c1689d23843 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/Directory.php @@ -0,0 +1,136 @@ + Zend_Search_Lucene_Storage_File object + * + * @var array + * @throws Zend_Search_Lucene_Exception + */ + protected $_fileHandlers; + + /** + * Default file permissions + * + * @var integer + */ + protected static $_defaultFilePermissions = 0666; + + + /** + * Get default file permissions + * + * @return integer + */ + public static function getDefaultFilePermissions() + { + return self::$_defaultFilePermissions; + } + + /** + * Set default file permissions + * + * @param integer $mode + */ + public static function setDefaultFilePermissions($mode) + { + self::$_defaultFilePermissions = $mode; + } + + + /** + * Utility function to recursive directory creation + * + * @param string $dir + * @param integer $mode + * @param boolean $recursive + * @return boolean + */ + + public static function mkdirs($dir, $mode = 0777, $recursive = true) + { + if (($dir === null) || $dir === '') { + return false; + } + if (is_dir($dir) || $dir === '/') { + return true; + } + if (self::mkdirs(dirname($dir), $mode, $recursive)) { + return mkdir($dir, $mode); + } + return false; + } + + + /** + * Object constructor + * Checks if $path is a directory or tries to create it. + * + * @param string $path + * @throws Zend_Search_Lucene_Exception + */ + public function __construct($path) + { + if (!is_dir($path)) { + if (file_exists($path)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Path exists, but it\'s not a directory'); + } else { + if (!self::mkdirs($path)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception("Can't create directory '$path'."); + } + } + } + $this->_dirPath = $path; + $this->_fileHandlers = array(); + } + + + /** + * Closes the store. + * + * @return void + */ + public function close() + { + foreach ($this->_fileHandlers as $fileObject) { + $fileObject->close(); + } + + $this->_fileHandlers = array(); + } + + + /** + * Returns an array of strings, one for each file in the directory. + * + * @return array + */ + public function fileList() + { + $result = array(); + + $dirContent = opendir( $this->_dirPath ); + while (($file = readdir($dirContent)) !== false) { + if (($file == '..')||($file == '.')) continue; + + if( !is_dir($this->_dirPath . '/' . $file) ) { + $result[] = $file; + } + } + closedir($dirContent); + + return $result; + } + + /** + * Creates a new, empty file in the directory with the given $filename. + * + * @param string $filename + * @return Zend_Search_Lucene_Storage_File + * @throws Zend_Search_Lucene_Exception + */ + public function createFile($filename) + { + if (isset($this->_fileHandlers[$filename])) { + $this->_fileHandlers[$filename]->close(); + } + unset($this->_fileHandlers[$filename]); + require_once 'Zend/Search/Lucene/Storage/File/Filesystem.php'; + $this->_fileHandlers[$filename] = new Zend_Search_Lucene_Storage_File_Filesystem($this->_dirPath . '/' . $filename, 'w+b'); + + // Set file permissions, but don't care about any possible failures, since file may be already + // created by anther user which has to care about right permissions + @chmod($this->_dirPath . '/' . $filename, self::$_defaultFilePermissions); + + return $this->_fileHandlers[$filename]; + } + + + /** + * Removes an existing $filename in the directory. + * + * @param string $filename + * @return void + * @throws Zend_Search_Lucene_Exception + */ + public function deleteFile($filename) + { + if (isset($this->_fileHandlers[$filename])) { + $this->_fileHandlers[$filename]->close(); + } + unset($this->_fileHandlers[$filename]); + + global $php_errormsg; + $trackErrors = ini_get('track_errors'); + ini_set('track_errors', '1'); + if (!@unlink($this->_dirPath . '/' . $filename)) { + ini_set('track_errors', $trackErrors); + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Can\'t delete file: ' . $php_errormsg); + } + ini_set('track_errors', $trackErrors); + } + + /** + * Purge file if it's cached by directory object + * + * Method is used to prevent 'too many open files' error + * + * @param string $filename + * @return void + */ + public function purgeFile($filename) + { + if (isset($this->_fileHandlers[$filename])) { + $this->_fileHandlers[$filename]->close(); + } + unset($this->_fileHandlers[$filename]); + } + + + /** + * Returns true if a file with the given $filename exists. + * + * @param string $filename + * @return boolean + */ + public function fileExists($filename) + { + return isset($this->_fileHandlers[$filename]) || + file_exists($this->_dirPath . '/' . $filename); + } + + + /** + * Returns the length of a $filename in the directory. + * + * @param string $filename + * @return integer + */ + public function fileLength($filename) + { + if (isset( $this->_fileHandlers[$filename] )) { + return $this->_fileHandlers[$filename]->size(); + } + return filesize($this->_dirPath .'/'. $filename); + } + + + /** + * Returns the UNIX timestamp $filename was last modified. + * + * @param string $filename + * @return integer + */ + public function fileModified($filename) + { + return filemtime($this->_dirPath .'/'. $filename); + } + + + /** + * Renames an existing file in the directory. + * + * @param string $from + * @param string $to + * @return void + * @throws Zend_Search_Lucene_Exception + */ + public function renameFile($from, $to) + { + global $php_errormsg; + + if (isset($this->_fileHandlers[$from])) { + $this->_fileHandlers[$from]->close(); + } + unset($this->_fileHandlers[$from]); + + if (isset($this->_fileHandlers[$to])) { + $this->_fileHandlers[$to]->close(); + } + unset($this->_fileHandlers[$to]); + + if (file_exists($this->_dirPath . '/' . $to)) { + if (!unlink($this->_dirPath . '/' . $to)) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Delete operation failed'); + } + } + + $trackErrors = ini_get('track_errors'); + ini_set('track_errors', '1'); + + $success = @rename($this->_dirPath . '/' . $from, $this->_dirPath . '/' . $to); + if (!$success) { + ini_set('track_errors', $trackErrors); + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception($php_errormsg); + } + + ini_set('track_errors', $trackErrors); + + return $success; + } + + + /** + * Sets the modified time of $filename to now. + * + * @param string $filename + * @return void + */ + public function touchFile($filename) + { + return touch($this->_dirPath .'/'. $filename); + } + + + /** + * Returns a Zend_Search_Lucene_Storage_File object for a given $filename in the directory. + * + * If $shareHandler option is true, then file handler can be shared between File Object + * requests. It speed-ups performance, but makes problems with file position. + * Shared handler are good for short atomic requests. + * Non-shared handlers are useful for stream file reading (especial for compound files). + * + * @param string $filename + * @param boolean $shareHandler + * @return Zend_Search_Lucene_Storage_File + */ + public function getFileObject($filename, $shareHandler = true) + { + $fullFilename = $this->_dirPath . '/' . $filename; + + require_once 'Zend/Search/Lucene/Storage/File/Filesystem.php'; + if (!$shareHandler) { + return new Zend_Search_Lucene_Storage_File_Filesystem($fullFilename); + } + + if (isset( $this->_fileHandlers[$filename] )) { + $this->_fileHandlers[$filename]->seek(0); + return $this->_fileHandlers[$filename]; + } + + $this->_fileHandlers[$filename] = new Zend_Search_Lucene_Storage_File_Filesystem($fullFilename); + return $this->_fileHandlers[$filename]; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File.php new file mode 100644 index 00000000000..6a473299377 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File.php @@ -0,0 +1,473 @@ +_fread(1)); + } + + /** + * Writes a byte to the end of the file. + * + * @param integer $byte + */ + public function writeByte($byte) + { + return $this->_fwrite(chr($byte), 1); + } + + /** + * Read num bytes from the current position in the file + * and advances the file pointer. + * + * @param integer $num + * @return string + */ + public function readBytes($num) + { + return $this->_fread($num); + } + + /** + * Writes num bytes of data (all, if $num===null) to the end + * of the string. + * + * @param string $data + * @param integer $num + */ + public function writeBytes($data, $num=null) + { + $this->_fwrite($data, $num); + } + + + /** + * Reads an integer from the current position in the file + * and advances the file pointer. + * + * @return integer + */ + public function readInt() + { + $str = $this->_fread(4); + + return ord($str[0]) << 24 | + ord($str[1]) << 16 | + ord($str[2]) << 8 | + ord($str[3]); + } + + + /** + * Writes an integer to the end of file. + * + * @param integer $value + */ + public function writeInt($value) + { + settype($value, 'integer'); + $this->_fwrite( chr($value>>24 & 0xFF) . + chr($value>>16 & 0xFF) . + chr($value>>8 & 0xFF) . + chr($value & 0xFF), 4 ); + } + + + /** + * Returns a long integer from the current position in the file + * and advances the file pointer. + * + * @return integer|float + * @throws Zend_Search_Lucene_Exception + */ + public function readLong() + { + /** + * Check, that we work in 64-bit mode. + * fseek() uses long for offset. Thus, largest index segment file size in 32bit mode is 2Gb + */ + if (PHP_INT_SIZE > 4) { + $str = $this->_fread(8); + + return ord($str[0]) << 56 | + ord($str[1]) << 48 | + ord($str[2]) << 40 | + ord($str[3]) << 32 | + ord($str[4]) << 24 | + ord($str[5]) << 16 | + ord($str[6]) << 8 | + ord($str[7]); + } else { + return $this->readLong32Bit(); + } + } + + /** + * Writes long integer to the end of file + * + * @param integer $value + * @throws Zend_Search_Lucene_Exception + */ + public function writeLong($value) + { + /** + * Check, that we work in 64-bit mode. + * fseek() and ftell() use long for offset. Thus, largest index segment file size in 32bit mode is 2Gb + */ + if (PHP_INT_SIZE > 4) { + settype($value, 'integer'); + $this->_fwrite( chr($value>>56 & 0xFF) . + chr($value>>48 & 0xFF) . + chr($value>>40 & 0xFF) . + chr($value>>32 & 0xFF) . + chr($value>>24 & 0xFF) . + chr($value>>16 & 0xFF) . + chr($value>>8 & 0xFF) . + chr($value & 0xFF), 8 ); + } else { + $this->writeLong32Bit($value); + } + } + + + /** + * Returns a long integer from the current position in the file, + * advances the file pointer and return it as float (for 32-bit platforms). + * + * @return integer|float + * @throws Zend_Search_Lucene_Exception + */ + public function readLong32Bit() + { + $wordHigh = $this->readInt(); + $wordLow = $this->readInt(); + + if ($wordHigh & (int)0x80000000) { + // It's a negative value since the highest bit is set + if ($wordHigh == (int)0xFFFFFFFF && ($wordLow & (int)0x80000000)) { + return $wordLow; + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Long integers lower than -2147483648 (0x80000000) are not supported on 32-bit platforms.'); + } + + } + + if ($wordLow < 0) { + // Value is large than 0x7FFF FFFF. Represent low word as float. + $wordLow &= 0x7FFFFFFF; + $wordLow += (float)0x80000000; + } + + if ($wordHigh == 0) { + // Return value as integer if possible + return $wordLow; + } + + return $wordHigh*(float)0x100000000/* 0x00000001 00000000 */ + $wordLow; + } + + + /** + * Writes long integer to the end of file (32-bit platforms implementation) + * + * @param integer|float $value + * @throws Zend_Search_Lucene_Exception + */ + public function writeLong32Bit($value) + { + if ($value < (int)0x80000000) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Long integers lower than -2147483648 (0x80000000) are not supported on 32-bit platforms.'); + } + + if ($value < 0) { + $wordHigh = (int)0xFFFFFFFF; + $wordLow = (int)$value; + } else { + $wordHigh = (int)($value/(float)0x100000000/* 0x00000001 00000000 */); + $wordLow = $value - $wordHigh*(float)0x100000000/* 0x00000001 00000000 */; + + if ($wordLow > 0x7FFFFFFF) { + // Highest bit of low word is set. Translate it to the corresponding negative integer value + $wordLow -= 0x80000000; + $wordLow |= 0x80000000; + } + } + + $this->writeInt($wordHigh); + $this->writeInt($wordLow); + } + + + /** + * Returns a variable-length integer from the current + * position in the file and advances the file pointer. + * + * @return integer + */ + public function readVInt() + { + $nextByte = ord($this->_fread(1)); + $val = $nextByte & 0x7F; + + for ($shift=7; ($nextByte & 0x80) != 0; $shift += 7) { + $nextByte = ord($this->_fread(1)); + $val |= ($nextByte & 0x7F) << $shift; + } + return $val; + } + + /** + * Writes a variable-length integer to the end of file. + * + * @param integer $value + */ + public function writeVInt($value) + { + settype($value, 'integer'); + while ($value > 0x7F) { + $this->_fwrite(chr( ($value & 0x7F)|0x80 )); + $value >>= 7; + } + $this->_fwrite(chr($value)); + } + + + /** + * Reads a string from the current position in the file + * and advances the file pointer. + * + * @return string + */ + public function readString() + { + $strlen = $this->readVInt(); + if ($strlen == 0) { + return ''; + } else { + /** + * This implementation supports only Basic Multilingual Plane + * (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support + * "supplementary characters" (characters whose code points are + * greater than 0xFFFF) + * Java 2 represents these characters as a pair of char (16-bit) + * values, the first from the high-surrogates range (0xD800-0xDBFF), + * the second from the low-surrogates range (0xDC00-0xDFFF). Then + * they are encoded as usual UTF-8 characters in six bytes. + * Standard UTF-8 representation uses four bytes for supplementary + * characters. + */ + + $str_val = $this->_fread($strlen); + + for ($count = 0; $count < $strlen; $count++ ) { + if (( ord($str_val[$count]) & 0xC0 ) == 0xC0) { + $addBytes = 1; + if (ord($str_val[$count]) & 0x20 ) { + $addBytes++; + + // Never used. Java2 doesn't encode strings in four bytes + if (ord($str_val[$count]) & 0x10 ) { + $addBytes++; + } + } + $str_val .= $this->_fread($addBytes); + $strlen += $addBytes; + + // Check for null character. Java2 encodes null character + // in two bytes. + if (ord($str_val[$count]) == 0xC0 && + ord($str_val[$count+1]) == 0x80 ) { + $str_val[$count] = 0; + $str_val = substr($str_val,0,$count+1) + . substr($str_val,$count+2); + } + $count += $addBytes; + } + } + + return $str_val; + } + } + + /** + * Writes a string to the end of file. + * + * @param string $str + * @throws Zend_Search_Lucene_Exception + */ + public function writeString($str) + { + /** + * This implementation supports only Basic Multilingual Plane + * (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support + * "supplementary characters" (characters whose code points are + * greater than 0xFFFF) + * Java 2 represents these characters as a pair of char (16-bit) + * values, the first from the high-surrogates range (0xD800-0xDBFF), + * the second from the low-surrogates range (0xDC00-0xDFFF). Then + * they are encoded as usual UTF-8 characters in six bytes. + * Standard UTF-8 representation uses four bytes for supplementary + * characters. + */ + + // convert input to a string before iterating string characters + settype($str, 'string'); + + $chars = $strlen = strlen($str); + $containNullChars = false; + + for ($count = 0; $count < $strlen; $count++ ) { + /** + * String is already in Java 2 representation. + * We should only calculate actual string length and replace + * \x00 by \xC0\x80 + */ + if ((ord($str[$count]) & 0xC0) == 0xC0) { + $addBytes = 1; + if (ord($str[$count]) & 0x20 ) { + $addBytes++; + + // Never used. Java2 doesn't encode strings in four bytes + // and we dont't support non-BMP characters + if (ord($str[$count]) & 0x10 ) { + $addBytes++; + } + } + $chars -= $addBytes; + + if (ord($str[$count]) == 0 ) { + $containNullChars = true; + } + $count += $addBytes; + } + } + + if ($chars < 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Invalid UTF-8 string'); + } + + $this->writeVInt($chars); + if ($containNullChars) { + $this->_fwrite(str_replace($str, "\x00", "\xC0\x80")); + } else { + $this->_fwrite($str); + } + } + + + /** + * Reads binary data from the current position in the file + * and advances the file pointer. + * + * @return string + */ + public function readBinary() + { + return $this->_fread($this->readVInt()); + } +} diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Filesystem.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Filesystem.php new file mode 100644 index 00000000000..24132c97693 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Filesystem.php @@ -0,0 +1,229 @@ +_fileHandle = @fopen($filename, $mode); + if ($this->_fileHandle === false) { + ini_set('track_errors', $trackErrors); + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception($php_errormsg); + } + + ini_set('track_errors', $trackErrors); + } + + /** + * Sets the file position indicator and advances the file pointer. + * The new position, measured in bytes from the beginning of the file, + * is obtained by adding offset to the position specified by whence, + * whose values are defined as follows: + * SEEK_SET - Set position equal to offset bytes. + * SEEK_CUR - Set position to current location plus offset. + * SEEK_END - Set position to end-of-file plus offset. (To move to + * a position before the end-of-file, you need to pass a negative value + * in offset.) + * SEEK_CUR is the only supported offset type for compound files + * + * Upon success, returns 0; otherwise, returns -1 + * + * @param integer $offset + * @param integer $whence + * @return integer + */ + public function seek($offset, $whence=SEEK_SET) + { + return fseek($this->_fileHandle, $offset, $whence); + } + + + /** + * Get file position. + * + * @return integer + */ + public function tell() + { + return ftell($this->_fileHandle); + } + + /** + * Flush output. + * + * Returns true on success or false on failure. + * + * @return boolean + */ + public function flush() + { + return fflush($this->_fileHandle); + } + + /** + * Close File object + */ + public function close() + { + if ($this->_fileHandle !== null ) { + @fclose($this->_fileHandle); + $this->_fileHandle = null; + } + } + + /** + * Get the size of the already opened file + * + * @return integer + */ + public function size() + { + $position = ftell($this->_fileHandle); + fseek($this->_fileHandle, 0, SEEK_END); + $size = ftell($this->_fileHandle); + fseek($this->_fileHandle,$position); + + return $size; + } + + /** + * Read a $length bytes from the file and advance the file pointer. + * + * @param integer $length + * @return string + */ + protected function _fread($length=1) + { + if ($length == 0) { + return ''; + } + + if ($length < 1024) { + return fread($this->_fileHandle, $length); + } + + $data = ''; + while ($length > 0 && !feof($this->_fileHandle)) { + $nextBlock = fread($this->_fileHandle, $length); + if ($nextBlock === false) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception( "Error occured while file reading." ); + } + + $data .= $nextBlock; + $length -= strlen($nextBlock); + } + if ($length != 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception( "Error occured while file reading." ); + } + + return $data; + } + + + /** + * Writes $length number of bytes (all, if $length===null) to the end + * of the file. + * + * @param string $data + * @param integer $length + */ + protected function _fwrite($data, $length=null) + { + if ($length === null ) { + fwrite($this->_fileHandle, $data); + } else { + fwrite($this->_fileHandle, $data, $length); + } + } + + /** + * Lock file + * + * Lock type may be a LOCK_SH (shared lock) or a LOCK_EX (exclusive lock) + * + * @param integer $lockType + * @param boolean $nonBlockingLock + * @return boolean + */ + public function lock($lockType, $nonBlockingLock = false) + { + if ($nonBlockingLock) { + return flock($this->_fileHandle, $lockType | LOCK_NB); + } else { + return flock($this->_fileHandle, $lockType); + } + } + + /** + * Unlock file + * + * Returns true on success + * + * @return boolean + */ + public function unlock() + { + if ($this->_fileHandle !== null ) { + return flock($this->_fileHandle, LOCK_UN); + } else { + return true; + } + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Memory.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Memory.php new file mode 100644 index 00000000000..648e2253b10 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/Storage/File/Memory.php @@ -0,0 +1,601 @@ +_data = $data; + } + + /** + * Reads $length number of bytes at the current position in the + * file and advances the file pointer. + * + * @param integer $length + * @return string + */ + protected function _fread($length = 1) + { + $returnValue = substr($this->_data, $this->_position, $length); + $this->_position += $length; + return $returnValue; + } + + + /** + * Sets the file position indicator and advances the file pointer. + * The new position, measured in bytes from the beginning of the file, + * is obtained by adding offset to the position specified by whence, + * whose values are defined as follows: + * SEEK_SET - Set position equal to offset bytes. + * SEEK_CUR - Set position to current location plus offset. + * SEEK_END - Set position to end-of-file plus offset. (To move to + * a position before the end-of-file, you need to pass a negative value + * in offset.) + * Upon success, returns 0; otherwise, returns -1 + * + * @param integer $offset + * @param integer $whence + * @return integer + */ + public function seek($offset, $whence=SEEK_SET) + { + switch ($whence) { + case SEEK_SET: + $this->_position = $offset; + break; + + case SEEK_CUR: + $this->_position += $offset; + break; + + case SEEK_END: + $this->_position = strlen($this->_data); + $this->_position += $offset; + break; + + default: + break; + } + } + + /** + * Get file position. + * + * @return integer + */ + public function tell() + { + return $this->_position; + } + + /** + * Flush output. + * + * Returns true on success or false on failure. + * + * @return boolean + */ + public function flush() + { + // Do nothing + + return true; + } + + /** + * Writes $length number of bytes (all, if $length===null) to the end + * of the file. + * + * @param string $data + * @param integer $length + */ + protected function _fwrite($data, $length=null) + { + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + if ($length !== null) { + $this->_data .= substr($data, 0, $length); + } else { + $this->_data .= $data; + } + + $this->_position = strlen($this->_data); + } + + /** + * Lock file + * + * Lock type may be a LOCK_SH (shared lock) or a LOCK_EX (exclusive lock) + * + * @param integer $lockType + * @return boolean + */ + public function lock($lockType, $nonBlockinLock = false) + { + // Memory files can't be shared + // do nothing + + return true; + } + + /** + * Unlock file + */ + public function unlock() + { + // Memory files can't be shared + // do nothing + } + + /** + * Reads a byte from the current position in the file + * and advances the file pointer. + * + * @return integer + */ + public function readByte() + { + return ord($this->_data[$this->_position++]); + } + + /** + * Writes a byte to the end of the file. + * + * @param integer $byte + */ + public function writeByte($byte) + { + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + $this->_data .= chr($byte); + $this->_position = strlen($this->_data); + + return 1; + } + + /** + * Read num bytes from the current position in the file + * and advances the file pointer. + * + * @param integer $num + * @return string + */ + public function readBytes($num) + { + $returnValue = substr($this->_data, $this->_position, $num); + $this->_position += $num; + + return $returnValue; + } + + /** + * Writes num bytes of data (all, if $num===null) to the end + * of the string. + * + * @param string $data + * @param integer $num + */ + public function writeBytes($data, $num=null) + { + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + if ($num !== null) { + $this->_data .= substr($data, 0, $num); + } else { + $this->_data .= $data; + } + + $this->_position = strlen($this->_data); + } + + + /** + * Reads an integer from the current position in the file + * and advances the file pointer. + * + * @return integer + */ + public function readInt() + { + $str = substr($this->_data, $this->_position, 4); + $this->_position += 4; + + return ord($str[0]) << 24 | + ord($str[1]) << 16 | + ord($str[2]) << 8 | + ord($str[3]); + } + + + /** + * Writes an integer to the end of file. + * + * @param integer $value + */ + public function writeInt($value) + { + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + settype($value, 'integer'); + $this->_data .= chr($value>>24 & 0xFF) . + chr($value>>16 & 0xFF) . + chr($value>>8 & 0xFF) . + chr($value & 0xFF); + + $this->_position = strlen($this->_data); + } + + + /** + * Returns a long integer from the current position in the file + * and advances the file pointer. + * + * @return integer + * @throws Zend_Search_Lucene_Exception + */ + public function readLong() + { + /** + * Check, that we work in 64-bit mode. + * fseek() uses long for offset. Thus, largest index segment file size in 32bit mode is 2Gb + */ + if (PHP_INT_SIZE > 4) { + $str = substr($this->_data, $this->_position, 8); + $this->_position += 8; + + return ord($str[0]) << 56 | + ord($str[1]) << 48 | + ord($str[2]) << 40 | + ord($str[3]) << 32 | + ord($str[4]) << 24 | + ord($str[5]) << 16 | + ord($str[6]) << 8 | + ord($str[7]); + } else { + return $this->readLong32Bit(); + } + } + + /** + * Writes long integer to the end of file + * + * @param integer $value + * @throws Zend_Search_Lucene_Exception + */ + public function writeLong($value) + { + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + /** + * Check, that we work in 64-bit mode. + * fseek() and ftell() use long for offset. Thus, largest index segment file size in 32bit mode is 2Gb + */ + if (PHP_INT_SIZE > 4) { + settype($value, 'integer'); + $this->_data .= chr($value>>56 & 0xFF) . + chr($value>>48 & 0xFF) . + chr($value>>40 & 0xFF) . + chr($value>>32 & 0xFF) . + chr($value>>24 & 0xFF) . + chr($value>>16 & 0xFF) . + chr($value>>8 & 0xFF) . + chr($value & 0xFF); + } else { + $this->writeLong32Bit($value); + } + + $this->_position = strlen($this->_data); + } + + + /** + * Returns a long integer from the current position in the file, + * advances the file pointer and return it as float (for 32-bit platforms). + * + * @return integer|float + * @throws Zend_Search_Lucene_Exception + */ + public function readLong32Bit() + { + $wordHigh = $this->readInt(); + $wordLow = $this->readInt(); + + if ($wordHigh & (int)0x80000000) { + // It's a negative value since the highest bit is set + if ($wordHigh == (int)0xFFFFFFFF && ($wordLow & (int)0x80000000)) { + return $wordLow; + } else { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Long integers lower than -2147483648 (0x80000000) are not supported on 32-bit platforms.'); + } + + } + + if ($wordLow < 0) { + // Value is large than 0x7FFF FFFF. Represent low word as float. + $wordLow &= 0x7FFFFFFF; + $wordLow += (float)0x80000000; + } + + if ($wordHigh == 0) { + // Return value as integer if possible + return $wordLow; + } + + return $wordHigh*(float)0x100000000/* 0x00000001 00000000 */ + $wordLow; + } + + + /** + * Writes long integer to the end of file (32-bit platforms implementation) + * + * @param integer|float $value + * @throws Zend_Search_Lucene_Exception + */ + public function writeLong32Bit($value) + { + if ($value < (int)0x80000000) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Long integers lower than -2147483648 (0x80000000) are not supported on 32-bit platforms.'); + } + + if ($value < 0) { + $wordHigh = (int)0xFFFFFFFF; + $wordLow = (int)$value; + } else { + $wordHigh = (int)($value/(float)0x100000000/* 0x00000001 00000000 */); + $wordLow = $value - $wordHigh*(float)0x100000000/* 0x00000001 00000000 */; + + if ($wordLow > 0x7FFFFFFF) { + // Highest bit of low word is set. Translate it to the corresponding negative integer value + $wordLow -= 0x80000000; + $wordLow |= 0x80000000; + } + } + + $this->writeInt($wordHigh); + $this->writeInt($wordLow); + } + + /** + * Returns a variable-length integer from the current + * position in the file and advances the file pointer. + * + * @return integer + */ + public function readVInt() + { + $nextByte = ord($this->_data[$this->_position++]); + $val = $nextByte & 0x7F; + + for ($shift=7; ($nextByte & 0x80) != 0; $shift += 7) { + $nextByte = ord($this->_data[$this->_position++]); + $val |= ($nextByte & 0x7F) << $shift; + } + return $val; + } + + /** + * Writes a variable-length integer to the end of file. + * + * @param integer $value + */ + public function writeVInt($value) + { + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + settype($value, 'integer'); + while ($value > 0x7F) { + $this->_data .= chr( ($value & 0x7F)|0x80 ); + $value >>= 7; + } + $this->_data .= chr($value); + + $this->_position = strlen($this->_data); + } + + + /** + * Reads a string from the current position in the file + * and advances the file pointer. + * + * @return string + */ + public function readString() + { + $strlen = $this->readVInt(); + if ($strlen == 0) { + return ''; + } else { + /** + * This implementation supports only Basic Multilingual Plane + * (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support + * "supplementary characters" (characters whose code points are + * greater than 0xFFFF) + * Java 2 represents these characters as a pair of char (16-bit) + * values, the first from the high-surrogates range (0xD800-0xDBFF), + * the second from the low-surrogates range (0xDC00-0xDFFF). Then + * they are encoded as usual UTF-8 characters in six bytes. + * Standard UTF-8 representation uses four bytes for supplementary + * characters. + */ + + $str_val = substr($this->_data, $this->_position, $strlen); + $this->_position += $strlen; + + for ($count = 0; $count < $strlen; $count++ ) { + if (( ord($str_val[$count]) & 0xC0 ) == 0xC0) { + $addBytes = 1; + if (ord($str_val[$count]) & 0x20 ) { + $addBytes++; + + // Never used. Java2 doesn't encode strings in four bytes + if (ord($str_val[$count]) & 0x10 ) { + $addBytes++; + } + } + $str_val .= substr($this->_data, $this->_position, $addBytes); + $this->_position += $addBytes; + $strlen += $addBytes; + + // Check for null character. Java2 encodes null character + // in two bytes. + if (ord($str_val[$count]) == 0xC0 && + ord($str_val[$count+1]) == 0x80 ) { + $str_val[$count] = 0; + $str_val = substr($str_val,0,$count+1) + . substr($str_val,$count+2); + } + $count += $addBytes; + } + } + + return $str_val; + } + } + + /** + * Writes a string to the end of file. + * + * @param string $str + * @throws Zend_Search_Lucene_Exception + */ + public function writeString($str) + { + /** + * This implementation supports only Basic Multilingual Plane + * (BMP) characters (from 0x0000 to 0xFFFF) and doesn't support + * "supplementary characters" (characters whose code points are + * greater than 0xFFFF) + * Java 2 represents these characters as a pair of char (16-bit) + * values, the first from the high-surrogates range (0xD800-0xDBFF), + * the second from the low-surrogates range (0xDC00-0xDFFF). Then + * they are encoded as usual UTF-8 characters in six bytes. + * Standard UTF-8 representation uses four bytes for supplementary + * characters. + */ + + // We do not need to check if file position points to the end of "file". + // Only append operation is supported now + + // convert input to a string before iterating string characters + settype($str, 'string'); + + $chars = $strlen = strlen($str); + $containNullChars = false; + + for ($count = 0; $count < $strlen; $count++ ) { + /** + * String is already in Java 2 representation. + * We should only calculate actual string length and replace + * \x00 by \xC0\x80 + */ + if ((ord($str[$count]) & 0xC0) == 0xC0) { + $addBytes = 1; + if (ord($str[$count]) & 0x20 ) { + $addBytes++; + + // Never used. Java2 doesn't encode strings in four bytes + // and we dont't support non-BMP characters + if (ord($str[$count]) & 0x10 ) { + $addBytes++; + } + } + $chars -= $addBytes; + + if (ord($str[$count]) == 0 ) { + $containNullChars = true; + } + $count += $addBytes; + } + } + + if ($chars < 0) { + require_once 'Zend/Search/Lucene/Exception.php'; + throw new Zend_Search_Lucene_Exception('Invalid UTF-8 string'); + } + + $this->writeVInt($chars); + if ($containNullChars) { + $this->_data .= str_replace($str, "\x00", "\xC0\x80"); + + } else { + $this->_data .= $str; + } + + $this->_position = strlen($this->_data); + } + + + /** + * Reads binary data from the current position in the file + * and advances the file pointer. + * + * @return string + */ + public function readBinary() + { + $length = $this->readVInt(); + $returnValue = substr($this->_data, $this->_position, $length); + $this->_position += $length; + return $returnValue; + } +} + diff --git a/modules/AOD_Index/Lib/Zend/Search/Lucene/TermStreamsPriorityQueue.php b/modules/AOD_Index/Lib/Zend/Search/Lucene/TermStreamsPriorityQueue.php new file mode 100644 index 00000000000..5a58af59541 --- /dev/null +++ b/modules/AOD_Index/Lib/Zend/Search/Lucene/TermStreamsPriorityQueue.php @@ -0,0 +1,172 @@ +_termStreams = $termStreams; + + $this->resetTermsStream(); + } + + /** + * Reset terms stream. + */ + public function resetTermsStream() + { + /** Zend_Search_Lucene_Index_TermsPriorityQueue */ + require_once 'Zend/Search/Lucene/Index/TermsPriorityQueue.php'; + + $this->_termsStreamQueue = new Zend_Search_Lucene_Index_TermsPriorityQueue(); + + foreach ($this->_termStreams as $termStream) { + $termStream->resetTermsStream(); + + // Skip "empty" containers + if ($termStream->currentTerm() !== null) { + $this->_termsStreamQueue->put($termStream); + } + } + + $this->nextTerm(); + } + + /** + * Skip terms stream up to the specified term preffix. + * + * Prefix contains fully specified field info and portion of searched term + * + * @param Zend_Search_Lucene_Index_Term $prefix + */ + public function skipTo(Zend_Search_Lucene_Index_Term $prefix) + { + $this->_termsStreamQueue = new Zend_Search_Lucene_Index_TermsPriorityQueue(); + + foreach ($this->_termStreams as $termStream) { + $termStream->skipTo($prefix); + + if ($termStream->currentTerm() !== null) { + $this->_termsStreamQueue->put($termStream); + } + } + + return $this->nextTerm(); + } + + /** + * Scans term streams and returns next term + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function nextTerm() + { + while (($termStream = $this->_termsStreamQueue->pop()) !== null) { + if ($this->_termsStreamQueue->top() === null || + $this->_termsStreamQueue->top()->currentTerm()->key() != + $termStream->currentTerm()->key()) { + // We got new term + $this->_lastTerm = $termStream->currentTerm(); + + if ($termStream->nextTerm() !== null) { + // Put segment back into the priority queue + $this->_termsStreamQueue->put($termStream); + } + + return $this->_lastTerm; + } + + if ($termStream->nextTerm() !== null) { + // Put segment back into the priority queue + $this->_termsStreamQueue->put($termStream); + } + } + + // End of stream + $this->_lastTerm = null; + + return null; + } + + /** + * Returns term in current position + * + * @return Zend_Search_Lucene_Index_Term|null + */ + public function currentTerm() + { + return $this->_lastTerm; + } + + /** + * Close terms stream + * + * Should be used for resources clean up if stream is not read up to the end + */ + public function closeTermsStream() + { + while (($termStream = $this->_termsStreamQueue->pop()) !== null) { + $termStream->closeTermsStream(); + } + + $this->_termsStreamQueue = null; + $this->_lastTerm = null; + } +} diff --git a/modules/AOD_Index/LuceneUtils.php b/modules/AOD_Index/LuceneUtils.php new file mode 100644 index 00000000000..686a44d9a59 --- /dev/null +++ b/modules/AOD_Index/LuceneUtils.php @@ -0,0 +1,320 @@ + + */ + + + +function requireLucene(){ + set_include_path(get_include_path() . PATH_SEPARATOR . "modules/AOD_Index/Lib"); + require_once('Zend/Search/Lucene.php'); +} + +function getDocumentRevisionPath($revisionId){ + return "upload/$revisionId"; +} + +/** + * Given a path to a PPTX document returns a lucene document with filename and contents set. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createPPTXDocument($path){ + $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($path); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + return $doc; +} + +/** + * Given a path to a XLSX document returns a lucene document with filename and contents set. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createXLSXDocument($path){ + $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($path); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + return $doc; +} +/** + * Given a path to a HTML document returns a lucene document with filename and contents set. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createHTMLDocument($path){ + $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($path); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + return $doc; +} +/** + * Given a path to a DocX document returns a lucene document with filename and contents set. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createDocXDocument($path){ + $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($path); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + return $doc; +} + +/** + * Given a path to a Doc document returns a lucene document with filename and contents set. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createDocDocument($path){ + $fileHandle = fopen($path, "r"); + $line = @fread($fileHandle, filesize($path)); + $lines = explode(chr(0x0D),$line); + $outtext = ""; + foreach($lines as $thisline) + { + $pos = strpos($thisline, chr(0x00)); + if (($pos !== FALSE)||(strlen($thisline)==0)) + { + } else { + $outtext .= $thisline." "; + } + } + $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext); + + $doc = new Zend_Search_Lucene_Document(); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $outtext)); + fclose($fileHandle); + return $doc; +} + +/** + * Given a path to a PDF document returns a lucene document with filename and contents set. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createPDFDocument($path){ + require_once('PdfParser.php'); + $text = PdfParser::parseFile($path); + $doc = new Zend_Search_Lucene_Document(); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $text)); + return $doc; +} + +/** + * Given a path to an ODT doc returns a lucene document with contents and filename set. + * @param $path + * @return bool|Zend_Search_Lucene_Document + */ +function createOdtDocument($path){ + if(!is_file($path)){ + return false; + } + $doc = new Zend_Search_Lucene_Document(); + $documentBody = array(); + $coreProperties = array(); + $package = new ZipArchive(); + $package->open($path); + $contents = simplexml_load_string($package->getFromName("content.xml")); + $paragraphs = $contents->xpath('//text:*'); + foreach ($paragraphs as $paragraph) { + $documentBody[] = (string)$paragraph; + $documentBody[] = ' '; + } + // Close file + $package->close(); + $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', implode(' ', $documentBody), 'UTF-8')); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + return $doc; +} + +/** + * Given a path to a plain text doc returns a lucene document with $filename and $contents set appropriately. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createTextDocument($path){ + $doc = new Zend_Search_Lucene_Document(); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', file_get_contents($path))); + return $doc; +} + + +/** + * Given the path to an rtf document returns a lucene document with $filename and $contents set appropriately. + * @param $path + * @return Zend_Search_Lucene_Document + */ +function createRTFDocument($path){ + $doc = new Zend_Search_Lucene_Document(); + $doc->addField(Zend_Search_Lucene_Field::Text('filename', basename($path))); + $contents = rtf2text($path); + //print_r($contents); + $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents)); + return $doc; +} + +function rtf_isPlainText($s) { + $arrfailAt = array("*", "fonttbl", "colortbl", "datastore", "themedata"); + for ($i = 0; $i < count($arrfailAt); $i++) + if (!empty($s[$arrfailAt[$i]])) return false; + return true; +} + +function rtf2text($filename) { + // Read the data from the input file. + $text = file_get_contents($filename); + if (!strlen($text)) + return ""; + + // Create empty stack array. + $document = ""; + $stack = array(); + $j = -1; + // Read the data character-by- character… + for ($i = 0, $len = strlen($text); $i < $len; $i++) { + $c = $text[$i]; + + // Depending on current character select the further actions. + switch ($c) { + // the most important key word backslash + case "\\": + // read next character + $nc = $text[$i + 1]; + + // If it is another backslash or nonbreaking space or hyphen, + // then the character is plain text and add it to the output stream. + if ($nc == '\\' && rtf_isPlainText($stack[$j])) $document .= '\\'; + elseif ($nc == '~' && rtf_isPlainText($stack[$j])) $document .= ' '; + elseif ($nc == '_' && rtf_isPlainText($stack[$j])) $document .= '-'; + // If it is an asterisk mark, add it to the stack. + elseif ($nc == '*') $stack[$j]["*"] = true; + // If it is a single quote, read next two characters that are the hexadecimal notation + // of a character we should add to the output stream. + elseif ($nc == "'") { + $hex = substr($text, $i + 2, 2); + if (rtf_isPlainText($stack[$j])) + $document .= html_entity_decode("&#".hexdec($hex).";"); + //Shift the pointer. + $i += 2; + // Since, we’ve found the alphabetic character, the next characters are control word + // and, possibly, some digit parameter. + } elseif ($nc >= 'a' && $nc <= 'z' || $nc >= 'A' && $nc <= 'Z') { + $word = ""; + $param = null; + + // Start reading characters after the backslash. + for ($k = $i + 1, $m = 0; $k < strlen($text); $k++, $m++) { + $nc = $text[$k]; + // If the current character is a letter and there were no digits before it, + // then we’re still reading the control word. If there were digits, we should stop + // since we reach the end of the control word. + if ($nc >= 'a' && $nc <= 'z' || $nc >= 'A' && $nc <= 'Z') { + if (empty($param)) + $word .= $nc; + else + break; + // If it is a digit, store the parameter. + } elseif ($nc >= '0' && $nc <= '9') + $param .= $nc; + // Since minus sign may occur only before a digit parameter, check whether + // $param is empty. Otherwise, we reach the end of the control word. + elseif ($nc == '-') { + if (empty($param)) + $param .= $nc; + else + break; + } else + break; + } + // Shift the pointer on the number of read characters. + $i += $m - 1; + + // Start analyzing what we’ve read. We are interested mostly in control words. + $toText = ""; + switch (strtolower($word)) { + // If the control word is "u", then its parameter is the decimal notation of the + // Unicode character that should be added to the output stream. + // We need to check whether the stack contains \ucN control word. If it does, + // we should remove the N characters from the output stream. + case "u": + $toText .= html_entity_decode("&#x".dechex($param).";"); + $ucDelta = @$stack[$j]["uc"]; + if ($ucDelta > 0) + $i += $ucDelta; + break; + // Select line feeds, spaces and tabs. + case "par": case "page": case "column": case "line": case "lbr": + $toText .= "\n"; + break; + case "emspace": case "enspace": case "qmspace": + $toText .= " "; + break; + case "tab": $toText .= "\t"; break; + // Add current date and time instead of corresponding labels. + case "chdate": $toText .= date("m.d.Y"); break; + case "chdpl": $toText .= date("l, j F Y"); break; + case "chdpa": $toText .= date("D, j M Y"); break; + case "chtime": $toText .= date("H:i:s"); break; + // Replace some reserved characters to their html analogs. + case "emdash": $toText .= html_entity_decode("—"); break; + case "endash": $toText .= html_entity_decode("–"); break; + case "bullet": $toText .= html_entity_decode("•"); break; + case "lquote": $toText .= html_entity_decode("‘"); break; + case "rquote": $toText .= html_entity_decode("’"); break; + case "ldblquote": $toText .= html_entity_decode("«"); break; + case "rdblquote": $toText .= html_entity_decode("»"); break; + // Add all other to the control words stack. If a control word + // does not include parameters, set ¶m to true. + default: + $stack[$j][strtolower($word)] = empty($param) ? true : $param; + break; + } + // Add data to the output stream if required. + if (rtf_isPlainText($stack[$j])) + $document .= $toText; + } + + $i++; + break; + // If we read the opening brace {, then new subgroup starts and we add + // new array stack element and write the data from previous stack element to it. + case "{": + array_push($stack, $stack[$j++]); + break; + // If we read the closing brace }, then we reach the end of subgroup and should remove + // the last stack element. + case "}": + array_pop($stack); + $j--; + break; + // Skip “trash”. + case '\0': case '\r': case '\f': case '\n': break; + // Add other data to the output stream if required. + default: + if (rtf_isPlainText($stack[$j])) + $document .= $c; + break; + } + } + // Return result. + return $document; +} \ No newline at end of file diff --git a/modules/AOD_Index/PdfParser.php b/modules/AOD_Index/PdfParser.php new file mode 100644 index 00000000000..9a942d4d1fb --- /dev/null +++ b/modules/AOD_Index/PdfParser.php @@ -0,0 +1,337 @@ + + * @date : 2013-08-08 + * + * References : + * - http://www.mactech.com/articles/mactech/Vol.15/15.09/PDFIntro/index.html + * - http://framework.zend.com/issues/secure/attachment/12512/Pdf.php + * - http://www.php.net/manual/en/ref.pdf.php#74211 + */ +class PdfParser +{ + /** + * Parse PDF file + * + * @param string $filename + * @return string + */ + public static function parseFile($filename) + { + $content = file_get_contents($filename); + + return self::extractText($content); + } + + /** + * Parse PDF content + * + * @param string $content + * @return string + */ + public static function parseContent($content) + { + return self::extractText($content); + } + + /** + * Convert a PDF into text. + * + * @param string $filename The filename to extract the data from. + * @return string The extracted text from the PDF + */ + protected static function extractText($data) + { + /** + * Split apart the PDF document into sections. We will address each + * section separately. + */ + $a_obj = self::getDataArray($data, 'obj', 'endobj'); + $j = 0; + $a_chunks = array(); + + /** + * Attempt to extract each part of the PDF document into a 'filter' + * element and a 'data' element. This can then be used to decode the + * data. + */ + foreach ($a_obj as $obj) { + $a_filter = self::getDataArray($obj, '<<', '>>'); + + if (is_array($a_filter) && isset($a_filter[0])) { + $a_chunks[$j]['filter'] = $a_filter[0]; + $a_data = self::getDataArray($obj, 'stream', 'endstream'); + + if (is_array($a_data) && isset($a_data[0])) { + $a_chunks[$j]['data'] = trim(substr($a_data[0], strlen('stream'), strlen($a_data[0]) - strlen('stream') - strlen('endstream'))); + } + + $j++; + } + } + + $result_data = null; + + // decode the chunks + foreach ($a_chunks as $chunk) { + // Look at each chunk decide if we can decode it by looking at the contents of the filter + if (isset($chunk['data'])) { + + // look at the filter to find out which encoding has been used + if (strpos($chunk['filter'], 'FlateDecode') !== false) { + // Use gzuncompress but suppress error messages. + $data =@ gzuncompress($chunk['data']); + } else { + $data = $chunk['data']; + } + + if (trim($data) != '') { + // If we got data then attempt to extract it. + $result_data .= ' ' . self::extractTextElements($data); + } + } + } + + /** + * Make sure we don't have large blocks of white space before and after + * our string. Also extract alphanumerical information to reduce + * redundant data. + */ + if (trim($result_data) == '') { + return null; + } else { + // Optimize hyphened words + $result_data = preg_replace('/\s*-[\r\n]+\s*/', '', $result_data); + $result_data = preg_replace('/\s+/', ' ', $result_data); + + return $result_data; + } + } + + protected static function extractTextElements($content) + { + if (strpos($content, '/CIDInit') === 0) { + return ''; + } + + $text = ''; + $lines = explode("\n", $content); + + foreach ($lines as $line) { + $line = trim($line); + $matches = array(); + + // Parse each lines to extract command and operator values + if (preg_match('/^(?.*[\)\] ])(?[a-z]+[\*]?)$/i', $line, $matches)) { + $command = trim($matches['command']); + + // Convert octal encoding + $found_octal_values = array(); + preg_match_all('/\\\\([0-9]{3})/', $command, $found_octal_values); + + foreach($found_octal_values[0] as $value) { + $octal = substr($value, 1); + + if (intval($octal) < 40) { + // Skips non printable chars + $command = str_replace($value, '', $command); + } else { + $command = str_replace($value, chr(octdec($octal)), $command); + } + } + // Removes encoded new lines, tabs, ... + $command = preg_replace('/\\\\[\r\n]/', '', $command); + $command = preg_replace('/\\\\[rnftb ]/', ' ', $command); + // Force UTF-8 charset + $encoding = mb_detect_encoding($command, array('ASCII', 'UTF-8', 'Windows-1252', 'ISO-8859-1')); + if (strtoupper($encoding) != 'UTF-8') { + if ($decoded = @iconv('CP1252', 'UTF-8//TRANSLIT//IGNORE', $command)) { + $command = $decoded; + } + } + // Removes leading spaces + $operator = trim($matches['operator']); + } else { + $command = $line; + $operator = ''; + } + + // Handle main operators + switch ($operator) { + // Set character spacing. + case 'Tc': + break; + + // Move text current point. + case 'Td': + $values = explode(' ', $command); + $y = array_pop($values); + $x = array_pop($values); + if ($x > 0) { + $text .= ' '; + } + if ($y < 0) { + $text .= ' '; + } + break; + + // Move text current point and set leading. + case 'TD': + $values = explode(' ', $command); + $y = array_pop($values); + if ($y < 0) { + $text .= "\n"; + } + break; + + // Set font name and size. + case 'Tf': + $text.= ' '; + break; + + // Display text, allowing individual character positioning + case 'TJ': + $start = mb_strpos($command, '[', null, 'UTF-8') + 1; + $end = mb_strrpos($command, ']', null, 'UTF-8'); + $text.= self::parseTextCommand(mb_substr($command, $start, $end - $start, 'UTF-8')); + break; + + // Display text. + case 'Tj': + $start = mb_strpos($command, '(', null, 'UTF-8') + 1; + $end = mb_strrpos($command, ')', null, 'UTF-8'); + $text.= mb_substr($command, $start, $end - $start, 'UTF-8'); // Removes round brackets + break; + + // Set leading. + case 'TL': + + // Set text matrix. + case 'Tm': +// $text.= ' '; + break; + + // Set text rendering mode. + case 'Tr': + break; + + // Set super/subscripting text rise. + case 'Ts': + break; + + // Set text spacing. + case 'Tw': + break; + + // Set horizontal scaling. + case 'Tz': + break; + + // Move to start of next line. + case 'T*': + $text.= "\n"; + break; + + // Internal use + case 'g': + case 'gs': + case 're': + case 'f': + // Begin text + case 'BT': + // End text + case 'ET': + break; + + case '': + break; + + default: + } + } + + $text = str_replace(array('\\(', '\\)'), array('(', ')'), $text); + + return $text; + } + + /** + * Strip out the text from a small chunk of data. + * + * @param string $text + * @param int $font_size Currently not used + * + * @return string + */ + protected static function parseTextCommand($text, $font_size = 0) { + + $result = ''; + $cur_start_pos = 0; + + while (($cur_start_text = mb_strpos($text, '(', $cur_start_pos, 'UTF-8')) !== false) { + // New text element found + if ($cur_start_text - $cur_start_pos > 8) { + $spacing = ' '; + } else { + $spacing_size = mb_substr($text, $cur_start_pos, $cur_start_text - $cur_start_pos, 'UTF-8'); + + if ($spacing_size < -50) { + $spacing = ' '; + } else { + $spacing = ''; + } + } + $cur_start_text++; + + $start_search_end = $cur_start_text; + while (($cur_start_pos = mb_strpos($text, ')', $start_search_end, 'UTF-8')) !== false) { + if (mb_substr($text, $cur_start_pos - 1, 1, 'UTF-8') != '\\') { + break; + } + $start_search_end = $cur_start_pos + 1; + } + + // something wrong happened + if ($cur_start_pos === false) { + break; + } + + // Add to result + $result .= $spacing . mb_substr($text, $cur_start_text, $cur_start_pos - $cur_start_text, 'UTF-8'); + $cur_start_pos++; + } + + return $result; + } + + /** + * Convert a section of data into an array, separated by the start and end words. + * + * @param string $data The data. + * @param string $start_word The start of each section of data. + * @param string $end_word The end of each section of data. + * @return array The array of data. + */ + protected static function getDataArray($data, $start_word, $end_word) + { + $start = 0; + $end = 0; + $a_results = array(); + + while ($start !== false && $end !== false) { + $start = strpos($data, $start_word, $end); + $end = strpos($data, $end_word, $start); + + if ($end !== false && $start !== false) { + // data is between start and end + $a_results[] = substr($data, $start, $end - $start + strlen($end_word)); + } + } + + return $a_results; + } +} diff --git a/modules/AOD_Index/controller.php b/modules/AOD_Index/controller.php new file mode 100644 index 00000000000..6c5cf555377 --- /dev/null +++ b/modules/AOD_Index/controller.php @@ -0,0 +1,40 @@ + + */ +if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); + +class AOD_IndexController extends SugarController { + + protected $action_remap = array('index'=>'indexdata'); + + function action_indexdata() { + $this->view = 'indexdata'; + } + function action_optimise(){ + set_time_limit(6000); + $index = BeanFactory::getBean("AOD_Index")->getIndex(); + $index->optimise(); + SugarApplication::redirect('index.php?module=AOD_Index'); + } +} \ No newline at end of file diff --git a/modules/AOD_Index/language/en_us.lang.php b/modules/AOD_Index/language/en_us.lang.php new file mode 100644 index 00000000000..2b135798b40 --- /dev/null +++ b/modules/AOD_Index/language/en_us.lang.php @@ -0,0 +1,96 @@ + 'Assigned User Id', + 'LBL_ASSIGNED_TO_NAME' => 'Assigned to', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Date Created', + 'LBL_DATE_MODIFIED' => 'Date Modified', + 'LBL_MODIFIED' => 'Modified By', + 'LBL_MODIFIED_ID' => 'Modified By Id', + 'LBL_MODIFIED_NAME' => 'Modified By Name', + 'LBL_CREATED' => 'Created By', + 'LBL_CREATED_ID' => 'Created By Id', + 'LBL_DESCRIPTION' => 'Description', + 'LBL_DELETED' => 'Deleted', + 'LBL_NAME' => 'Name', + 'LBL_CREATED_USER' => 'Created by User', + 'LBL_MODIFIED_USER' => 'Modified by User', + 'LBL_LIST_NAME' => 'Name', + 'LBL_EDIT_BUTTON' => 'Edit', + 'LBL_REMOVE' => 'Remove', + 'LBL_LIST_FORM_TITLE' => 'Index List', + 'LBL_MODULE_NAME' => 'Index', + 'LBL_MODULE_TITLE' => 'Index', + 'LBL_HOMEPAGE_TITLE' => 'My Index', + 'LNK_NEW_RECORD' => 'Create Index', + 'LNK_LIST' => 'View Index', + 'LNK_IMPORT_AOD_INDEX' => 'Import Index', + 'LBL_SEARCH_FORM_TITLE' => 'Search Index', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'View History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Activities', + 'LBL_AOD_INDEX_SUBPANEL_TITLE' => 'Index', + 'LBL_NEW_FORM_TITLE' => 'New Index', + 'LBL_LAST_OPTIMISED' => 'Last Optimised', + 'LBL_LOCATION' => 'Location', + 'LBL_SEARCH_DOCUMENTS' => 'Search Documents', + 'LBL_SEARCH_BUTTON' => 'Search', + 'LBL_SEARCH_QUERY_PLACEHOLDER' => 'Enter search...', + 'LBL_INDEX_STATS' => 'Index stats', + 'LBL_SEARCH_LABEL' => "Term", + 'LBL_OPTIMISE_NOW' => "Optimise now", + 'LBL_TOTAL_RECORDS' => 'Total records', + 'LBL_INDEXED_RECORDS' => 'Indexed records', + 'LBL_UNINDEXED_RECORDS' => 'Unindexed records', + 'LBL_FAILED_RECORDS' => 'Failed records', + 'LBL_LAST_OPTIMISED' => 'Last optimised', + 'LBL_INDEX_FILES' => 'Index file count', + 'LBL_SEARCH_RESULT_SCORE' => 'Search Score', + 'LBL_SEARCH_RESULT_MODULE' => 'Module', + 'LBL_SEARCH_RESULT_NAME' => 'Name', + 'LBL_SEARCH_RESULT_DATE_CREATED' => 'Date Created', + 'LBL_SEARCH_RESULT_DATE_MODIFIED' => 'Date Modified', + 'LBL_SEARCH_RESULT_EMPTY' => 'No results', + 'LBL_SEARCH_RESULT_SUMMARY' => 'Summary', + 'LBL_FAILED_INDEX_MODULE' => 'Module', + 'LBL_FAILED_INDEX_NAME' => 'Name', + 'LBL_FAILED_INDEX_DATE' => 'Date', + 'LBL_FAILED_INDEX_ERROR' => 'Error', + 'LBL_NEVER_OPTIMISED' => 'Never', + 'LBL_USE_AOD_SEARCH' => 'Use Advanced OpenDiscovery Search', + 'LBL_USE_VANILLA_SEARCH' => 'Use standard SugarCRM search', +); \ No newline at end of file diff --git a/modules/AOD_Index/metadata/SearchFields.php b/modules/AOD_Index/metadata/SearchFields.php new file mode 100644 index 00000000000..29ad95c2673 --- /dev/null +++ b/modules/AOD_Index/metadata/SearchFields.php @@ -0,0 +1,54 @@ + array( 'query_type'=>'default'), + 'current_user_only'=> array('query_type'=>'default','db_field'=>array('assigned_user_id'),'my_items'=>true, 'vname' => 'LBL_CURRENT_USER_FILTER', 'type' => 'bool'), + 'assigned_user_id'=> array('query_type'=>'default'), + + //Range Search Support + 'range_date_entered' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'start_range_date_entered' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'end_range_date_entered' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'range_date_modified' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'start_range_date_modified' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'end_range_date_modified' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + //Range Search Support + ); +?> diff --git a/modules/AOD_Index/metadata/dashletviewdefs.php b/modules/AOD_Index/metadata/dashletviewdefs.php new file mode 100644 index 00000000000..d24c1065175 --- /dev/null +++ b/modules/AOD_Index/metadata/dashletviewdefs.php @@ -0,0 +1,60 @@ + array('default' => ''), + 'date_modified' => array('default' => ''), + 'assigned_user_id' => array('type' => 'assigned_user_name', + 'default' => $current_user->name)); +$dashletData['AOD_IndexDashlet']['columns'] = array( 'name' => array('width' => '40', + 'label' => 'LBL_LIST_NAME', + 'link' => true, + 'default' => true), + 'date_entered' => array('width' => '15', + 'label' => 'LBL_DATE_ENTERED', + 'default' => true), + 'date_modified' => array('width' => '15', + 'label' => 'LBL_DATE_MODIFIED'), + 'created_by' => array('width' => '8', + 'label' => 'LBL_CREATED'), + 'assigned_user_name' => array('width' => '8', + 'label' => 'LBL_LIST_ASSIGNED_USER'), + ); \ No newline at end of file diff --git a/modules/AOD_Index/metadata/detailviewdefs.php b/modules/AOD_Index/metadata/detailviewdefs.php new file mode 100644 index 00000000000..d64ec451d22 --- /dev/null +++ b/modules/AOD_Index/metadata/detailviewdefs.php @@ -0,0 +1,73 @@ + array('form' => array('buttons'=>array('EDIT', 'DUPLICATE', 'DELETE', 'FIND_DUPLICATES', + )), + 'maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + +'panels' =>array ( + + array ( + 'name', + 'assigned_user_name', + ), + + array ( + array ( + 'name' => 'date_entered', + 'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value}', + 'label' => 'LBL_DATE_ENTERED', + ), + array ( + 'name' => 'date_modified', + 'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}', + 'label' => 'LBL_DATE_MODIFIED', + ), + ), + + array ( + 'description', + ), +) +); +?> \ No newline at end of file diff --git a/modules/AOD_Index/metadata/editviewdefs.php b/modules/AOD_Index/metadata/editviewdefs.php new file mode 100644 index 00000000000..93b2971c4ba --- /dev/null +++ b/modules/AOD_Index/metadata/editviewdefs.php @@ -0,0 +1,64 @@ + array('maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + + + 'panels' =>array ( + 'default' => + array ( + + array ( + 'name', + 'assigned_user_name', + ), + + array ( + 'description', + ), + ), + +), + +); +?> \ No newline at end of file diff --git a/modules/AOD_Index/metadata/listviewdefs.php b/modules/AOD_Index/metadata/listviewdefs.php new file mode 100644 index 00000000000..dfcea2b2fb3 --- /dev/null +++ b/modules/AOD_Index/metadata/listviewdefs.php @@ -0,0 +1,56 @@ + array( + 'width' => '32', + 'label' => 'LBL_NAME', + 'default' => true, + 'link' => true), + 'ASSIGNED_USER_NAME' => array( + 'width' => '9', + 'label' => 'LBL_ASSIGNED_TO_NAME', + 'module' => 'Employees', + 'id' => 'ASSIGNED_USER_ID', + 'default' => true), + +); +?> diff --git a/modules/AOD_Index/metadata/metafiles.php b/modules/AOD_Index/metadata/metafiles.php new file mode 100644 index 00000000000..ef936d120df --- /dev/null +++ b/modules/AOD_Index/metadata/metafiles.php @@ -0,0 +1,52 @@ + 'modules/' . $module_name . '/metadata/detailviewdefs.php', + 'editviewdefs' => 'modules/' . $module_name . '/metadata/editviewdefs.php', + 'listviewdefs' => 'modules/' . $module_name . '/metadata/listviewdefs.php', + 'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php', + 'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php', + 'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php', + ); +?> diff --git a/modules/AOD_Index/metadata/popupdefs.php b/modules/AOD_Index/metadata/popupdefs.php new file mode 100644 index 00000000000..d52e8c29183 --- /dev/null +++ b/modules/AOD_Index/metadata/popupdefs.php @@ -0,0 +1,52 @@ + $module_name, + 'varName' => $object_name, + 'orderBy' => $_module_name.'.name', + 'whereClauses' => + array('name' => $_module_name . '.name', + ), + 'searchInputs'=> array($_module_name. '_number', 'name', 'priority','status'), + + ); +?> + + \ No newline at end of file diff --git a/modules/AOD_Index/metadata/quickcreatedefs.php b/modules/AOD_Index/metadata/quickcreatedefs.php new file mode 100644 index 00000000000..211fa13a69b --- /dev/null +++ b/modules/AOD_Index/metadata/quickcreatedefs.php @@ -0,0 +1,60 @@ + array('maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + + + 'panels' =>array ( + 'default' => + array ( + + array ( + 'name', + 'assigned_user_name', + ), + ), + +), + +); +?> \ No newline at end of file diff --git a/modules/AOD_Index/metadata/searchdefs.php b/modules/AOD_Index/metadata/searchdefs.php new file mode 100644 index 00000000000..7f2d552d275 --- /dev/null +++ b/modules/AOD_Index/metadata/searchdefs.php @@ -0,0 +1,61 @@ + array( + 'maxColumns' => '3', + 'maxColumnsBasic' => '4', + 'widths' => array('label' => '10', 'field' => '30'), + ), + 'layout' => array( + 'basic_search' => array( + 'name', + array('name'=>'current_user_only', 'label'=>'LBL_CURRENT_USER_FILTER', 'type'=>'bool'), + ), + 'advanced_search' => array( + 'name', + array('name' => 'assigned_user_id', 'label' => 'LBL_ASSIGNED_TO', 'type' => 'enum', 'function' => array('name' => 'get_user_array', 'params' => array(false))), + ), + ), + ); +?> diff --git a/modules/AOD_Index/metadata/studio.php b/modules/AOD_Index/metadata/studio.php new file mode 100644 index 00000000000..23074ff4141 --- /dev/null +++ b/modules/AOD_Index/metadata/studio.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/modules/AOD_Index/metadata/subpanels/default.php b/modules/AOD_Index/metadata/subpanels/default.php new file mode 100644 index 00000000000..1c907a4ae5e --- /dev/null +++ b/modules/AOD_Index/metadata/subpanels/default.php @@ -0,0 +1,73 @@ + array( + array('widget_class' => 'SubPanelTopCreateButton'), + array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => $module_name), + ), + + 'where' => '', + + 'list_fields' => array( + 'name'=>array( + 'vname' => 'LBL_NAME', + 'widget_class' => 'SubPanelDetailViewLink', + 'width' => '45%', + ), + 'date_modified'=>array( + 'vname' => 'LBL_DATE_MODIFIED', + 'width' => '45%', + ), + 'edit_button'=>array( + 'vname' => 'LBL_EDIT_BUTTON', + 'widget_class' => 'SubPanelEditButton', + 'module' => $module_name, + 'width' => '4%', + ), + 'remove_button'=>array( + 'vname' => 'LBL_REMOVE', + 'widget_class' => 'SubPanelRemoveButton', + 'module' => $module_name, + 'width' => '5%', + ), + ), +); + +?> \ No newline at end of file diff --git a/modules/AOD_Index/tpls/indexdata.tpl b/modules/AOD_Index/tpls/indexdata.tpl new file mode 100644 index 00000000000..5a3818b7e94 --- /dev/null +++ b/modules/AOD_Index/tpls/indexdata.tpl @@ -0,0 +1,13 @@ + + + + + + + + + + +
      +

      {$MOD.LBL_INDEX_STATS}

      +
      {$MOD.LBL_TOTAL_RECORDS}{$revisionCount}
      {$MOD.LBL_INDEXED_RECORDS}{$indexedCount}
      {$MOD.LBL_UNINDEXED_RECORDS}{$revisionCount-$indexedCount}
      {$MOD.LBL_FAILED_RECORDS}{$failedCount}
      {$MOD.LBL_INDEX_FILES}{$indexFiles}
      {$MOD.LBL_LAST_OPTIMISED}{$index->last_optimised|default:$MOD.LBL_NEVER_OPTIMISED}
      diff --git a/modules/AOD_Index/vardefs.php b/modules/AOD_Index/vardefs.php new file mode 100644 index 00000000000..c5ba39949af --- /dev/null +++ b/modules/AOD_Index/vardefs.php @@ -0,0 +1,92 @@ +'aod_index', + 'audited'=>true, + 'duplicate_merge'=>true, + 'fields'=>array ( + 'last_optimised' => + array ( + 'required' => false, + 'name' => 'last_optimised', + 'vname' => 'LBL_LAST_OPTIMISED', + 'type' => 'datetimecombo', + 'massupdate' => 0, + 'no_default' => false, + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'size' => '20', + 'enable_range_search' => false, + 'dbType' => 'datetime', + ), + 'location' => + array ( + 'required' => false, + 'name' => 'location', + 'vname' => 'LBL_LOCATION', + 'type' => 'varchar', + 'massupdate' => 0, + 'no_default' => false, + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'len' => '255', + 'size' => '20', + ), +), + 'relationships'=>array ( +), + 'optimistic_locking'=>true, + 'unified_search'=>false, + ); +if (!class_exists('VardefManager')){ + require_once('include/SugarObjects/VardefManager.php'); +} +VardefManager::createVardef('AOD_Index','AOD_Index', array('basic','assignable')); \ No newline at end of file diff --git a/modules/AOD_Index/views/view.indexdata.php b/modules/AOD_Index/views/view.indexdata.php new file mode 100644 index 00000000000..27e2c3884d1 --- /dev/null +++ b/modules/AOD_Index/views/view.indexdata.php @@ -0,0 +1,113 @@ + + */ +if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); + +require_once('include/MVC/View/SugarView.php'); +require_once('include/MVC/View/views/view.list.php'); + +class AOD_IndexViewIndexData extends SugarView { + + public function __construct() { + parent::SugarView(); + } + /** + * display the form + */ + public function display(){ + global $db, $timedate, $current_language; + parent::display(); + + $index = BeanFactory::getBean("AOD_Index"); + $index = $index->getIndex(); + + + $beanList = $index->getIndexableModules(); + + $moduleCounts = array(); + + foreach($beanList as $beanModule => $beanName){ + $bean = BeanFactory::getBean($beanModule); + if(!$bean || !method_exists($bean,"getTableName") || !$bean->getTableName()){ + continue; + } + $query = "SELECT COUNT(DISTINCT b.id) FROM ".$bean->getTableName()." b WHERE b.deleted = 0"; + $moduleCounts[$beanModule] = $db->getOne($query); + } + + + $revisionCount = array_sum($moduleCounts); + $indexedCount = $db->getOne("SELECT COUNT(*) FROM aod_indexevent WHERE deleted = 0 AND success = 1"); + $failedCount = $db->getOne("SELECT COUNT(*) FROM aod_indexevent WHERE deleted = 0 AND success = 0"); + + $indexFiles = count(glob($index->location."/*.cfs")); + + $this->ss->assign("revisionCount",$revisionCount); + $this->ss->assign("indexedCount",$indexedCount); + $this->ss->assign("failedCount",$failedCount); + $this->ss->assign("index",$index); + $this->ss->assign("indexFiles",$indexFiles); + echo $this->ss->fetch('modules/AOD_Index/tpls/indexdata.tpl'); + + + + + if($failedCount){ + + + $seed = BeanFactory::newBean("AOD_IndexEvent"); + + $lv = new ListViewSmarty(); + $lv->lvd->additionalDetails = false; + $mod_strings = return_module_language($current_language, $seed->module_dir); + + require('modules/'.$seed->module_dir.'/metadata/listviewdefs.php'); + + if(file_exists('custom/modules/'.$seed->module_dir.'/metadata/listviewdefs.php')) + { + require('custom/modules/'.$seed->module_dir.'/metadata/listviewdefs.php'); + } + + $lv->displayColumns = $listViewDefs[$seed->module_dir]; + + $lv->quickViewLinks = false; + $lv->export = false; + $lv->mergeduplicates = false; + $lv->multiSelect = false; + $lv->delete = false; + $lv->select = false; + $lv->showMassupdateFields = false; + $lv->email = false; + + $lv->setup($seed, 'include/ListView/ListViewNoMassUpdate.tpl', 'success = 0', '', 0, 10); + + echo '

      ' . get_form_header($GLOBALS['mod_strings']['LBL_FAILED_RECORDS'] . ' (' . $lv->data['pageData']['offsets']['total'] . ')', '', false); + if($lv->data['pageData']['offsets']['total'] == 0) { + echo "No data"; + } else { + echo $lv->display(); + } + } + } +} \ No newline at end of file diff --git a/modules/AOD_IndexEvent/AOD_IndexEvent.php b/modules/AOD_IndexEvent/AOD_IndexEvent.php new file mode 100644 index 00000000000..2757df39978 --- /dev/null +++ b/modules/AOD_IndexEvent/AOD_IndexEvent.php @@ -0,0 +1,48 @@ + \ No newline at end of file diff --git a/modules/AOD_IndexEvent/AOD_IndexEvent_sugar.php b/modules/AOD_IndexEvent/AOD_IndexEvent_sugar.php new file mode 100644 index 00000000000..86d1a7dbea0 --- /dev/null +++ b/modules/AOD_IndexEvent/AOD_IndexEvent_sugar.php @@ -0,0 +1,80 @@ + \ No newline at end of file diff --git a/modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.meta.php b/modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.meta.php new file mode 100644 index 00000000000..1d764100e0a --- /dev/null +++ b/modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.meta.php @@ -0,0 +1,52 @@ + 'AOD_IndexEvent', + 'title' => translate('LBL_HOMEPAGE_TITLE', 'AOD_IndexEvent'), + 'description' => 'A customizable view into AOD_IndexEvent', + 'icon' => 'icon_AOD_IndexEvent_32.gif', + 'category' => 'Module Views'); \ No newline at end of file diff --git a/modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.php b/modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.php new file mode 100644 index 00000000000..cd8808196d2 --- /dev/null +++ b/modules/AOD_IndexEvent/Dashlets/AOD_IndexEventDashlet/AOD_IndexEventDashlet.php @@ -0,0 +1,63 @@ +title = translate('LBL_HOMEPAGE_TITLE', 'AOD_IndexEvent'); + + $this->searchFields = $dashletData['AOD_IndexEventDashlet']['searchFields']; + $this->columns = $dashletData['AOD_IndexEventDashlet']['columns']; + + $this->seedBean = new AOD_IndexEvent(); + } +} \ No newline at end of file diff --git a/modules/AOD_IndexEvent/language/en_us.lang.php b/modules/AOD_IndexEvent/language/en_us.lang.php new file mode 100644 index 00000000000..68087b468c9 --- /dev/null +++ b/modules/AOD_IndexEvent/language/en_us.lang.php @@ -0,0 +1,71 @@ + 'Assigned User Id', + 'LBL_ASSIGNED_TO_NAME' => 'Assigned to', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Date Created', + 'LBL_DATE_MODIFIED' => 'Date Modified', + 'LBL_MODIFIED' => 'Modified By', + 'LBL_MODIFIED_ID' => 'Modified By Id', + 'LBL_MODIFIED_NAME' => 'Modified By Name', + 'LBL_CREATED' => 'Created By', + 'LBL_CREATED_ID' => 'Created By Id', + 'LBL_DESCRIPTION' => 'Description', + 'LBL_DELETED' => 'Deleted', + 'LBL_NAME' => 'Name', + 'LBL_CREATED_USER' => 'Created by User', + 'LBL_MODIFIED_USER' => 'Modified by User', + 'LBL_LIST_NAME' => 'Name', + 'LBL_EDIT_BUTTON' => 'Edit', + 'LBL_REMOVE' => 'Remove', + 'LBL_LIST_FORM_TITLE' => 'Index Event List', + 'LBL_MODULE_NAME' => 'Index Event', + 'LBL_MODULE_TITLE' => 'Index Event', + 'LBL_HOMEPAGE_TITLE' => 'My Index Event', + 'LNK_NEW_RECORD' => 'Create Index Event', + 'LNK_LIST' => 'View Index Event', + 'LNK_IMPORT_AOD_INDEXEVENT' => 'Import Index Event', + 'LBL_SEARCH_FORM_TITLE' => 'Search Index Event', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'View History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Activities', + 'LBL_AOD_INDEXEVENT_SUBPANEL_TITLE' => 'Index Event', + 'LBL_NEW_FORM_TITLE' => 'New Index Event', + 'LBL_ERROR' => 'Error', + 'LBL_SUCCESS' => 'Success', + 'LBL_RECORD_MODULE' => 'Success', +); \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/SearchFields.php b/modules/AOD_IndexEvent/metadata/SearchFields.php new file mode 100644 index 00000000000..1379885b51e --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/SearchFields.php @@ -0,0 +1,54 @@ + array( 'query_type'=>'default'), + 'current_user_only'=> array('query_type'=>'default','db_field'=>array('assigned_user_id'),'my_items'=>true, 'vname' => 'LBL_CURRENT_USER_FILTER', 'type' => 'bool'), + 'assigned_user_id'=> array('query_type'=>'default'), + + //Range Search Support + 'range_date_entered' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'start_range_date_entered' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'end_range_date_entered' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'range_date_modified' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'start_range_date_modified' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + 'end_range_date_modified' => array ('query_type' => 'default', 'enable_range_search' => true, 'is_date_field' => true), + //Range Search Support + ); +?> diff --git a/modules/AOD_IndexEvent/metadata/dashletviewdefs.php b/modules/AOD_IndexEvent/metadata/dashletviewdefs.php new file mode 100644 index 00000000000..932dfcc2331 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/dashletviewdefs.php @@ -0,0 +1,60 @@ + array('default' => ''), + 'date_modified' => array('default' => ''), + 'assigned_user_id' => array('type' => 'assigned_user_name', + 'default' => $current_user->name)); +$dashletData['AOD_IndexEventDashlet']['columns'] = array( 'name' => array('width' => '40', + 'label' => 'LBL_LIST_NAME', + 'link' => true, + 'default' => true), + 'date_entered' => array('width' => '15', + 'label' => 'LBL_DATE_ENTERED', + 'default' => true), + 'date_modified' => array('width' => '15', + 'label' => 'LBL_DATE_MODIFIED'), + 'created_by' => array('width' => '8', + 'label' => 'LBL_CREATED'), + 'assigned_user_name' => array('width' => '8', + 'label' => 'LBL_LIST_ASSIGNED_USER'), + ); \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/detailviewdefs.php b/modules/AOD_IndexEvent/metadata/detailviewdefs.php new file mode 100644 index 00000000000..7e61cd608a0 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/detailviewdefs.php @@ -0,0 +1,73 @@ + array('form' => array('buttons'=>array('EDIT', 'DUPLICATE', 'DELETE', 'FIND_DUPLICATES', + )), + 'maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + +'panels' =>array ( + + array ( + 'name', + 'assigned_user_name', + ), + + array ( + array ( + 'name' => 'date_entered', + 'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value}', + 'label' => 'LBL_DATE_ENTERED', + ), + array ( + 'name' => 'date_modified', + 'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}', + 'label' => 'LBL_DATE_MODIFIED', + ), + ), + + array ( + 'description', + ), +) +); +?> \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/editviewdefs.php b/modules/AOD_IndexEvent/metadata/editviewdefs.php new file mode 100644 index 00000000000..49f62005250 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/editviewdefs.php @@ -0,0 +1,64 @@ + array('maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + + + 'panels' =>array ( + 'default' => + array ( + + array ( + 'name', + 'assigned_user_name', + ), + + array ( + 'description', + ), + ), + +), + +); +?> \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/listviewdefs.php b/modules/AOD_IndexEvent/metadata/listviewdefs.php new file mode 100644 index 00000000000..7b96d5110ad --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/listviewdefs.php @@ -0,0 +1,36 @@ + + array ( + 'type' => 'varchar', + 'label' => 'LBL_RECORD_MODULE', + 'width' => '10%', + 'default' => true, + ), + 'NAME' => + array ( + 'width' => '30%', + 'label' => 'LBL_NAME', + 'default' => true, + 'link' => true, + 'customCode' => '{$NAME}', + ), + 'DATE_MODIFIED' => + array ( + 'type' => 'datetime', + 'label' => 'LBL_DATE_MODIFIED', + 'width' => '10%', + 'default' => true, + ), + 'ERROR' => + array ( + 'type' => 'varchar', + 'label' => 'LBL_ERROR', + 'width' => '50%', + 'default' => true, + ), + ); +?> diff --git a/modules/AOD_IndexEvent/metadata/metafiles.php b/modules/AOD_IndexEvent/metadata/metafiles.php new file mode 100644 index 00000000000..fc73a0accb9 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/metafiles.php @@ -0,0 +1,52 @@ + 'modules/' . $module_name . '/metadata/detailviewdefs.php', + 'editviewdefs' => 'modules/' . $module_name . '/metadata/editviewdefs.php', + 'listviewdefs' => 'modules/' . $module_name . '/metadata/listviewdefs.php', + 'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php', + 'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php', + 'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php', + ); +?> diff --git a/modules/AOD_IndexEvent/metadata/popupdefs.php b/modules/AOD_IndexEvent/metadata/popupdefs.php new file mode 100644 index 00000000000..4dfe591c038 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/popupdefs.php @@ -0,0 +1,52 @@ + $module_name, + 'varName' => $object_name, + 'orderBy' => $_module_name.'.name', + 'whereClauses' => + array('name' => $_module_name . '.name', + ), + 'searchInputs'=> array($_module_name. '_number', 'name', 'priority','status'), + + ); +?> + + \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/quickcreatedefs.php b/modules/AOD_IndexEvent/metadata/quickcreatedefs.php new file mode 100644 index 00000000000..a316338541c --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/quickcreatedefs.php @@ -0,0 +1,60 @@ + array('maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + + + 'panels' =>array ( + 'default' => + array ( + + array ( + 'name', + 'assigned_user_name', + ), + ), + +), + +); +?> \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/searchdefs.php b/modules/AOD_IndexEvent/metadata/searchdefs.php new file mode 100644 index 00000000000..8231bf75c74 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/searchdefs.php @@ -0,0 +1,61 @@ + array( + 'maxColumns' => '3', + 'maxColumnsBasic' => '4', + 'widths' => array('label' => '10', 'field' => '30'), + ), + 'layout' => array( + 'basic_search' => array( + 'name', + array('name'=>'current_user_only', 'label'=>'LBL_CURRENT_USER_FILTER', 'type'=>'bool'), + ), + 'advanced_search' => array( + 'name', + array('name' => 'assigned_user_id', 'label' => 'LBL_ASSIGNED_TO', 'type' => 'enum', 'function' => array('name' => 'get_user_array', 'params' => array(false))), + ), + ), + ); +?> diff --git a/modules/AOD_IndexEvent/metadata/studio.php b/modules/AOD_IndexEvent/metadata/studio.php new file mode 100644 index 00000000000..23074ff4141 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/studio.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/modules/AOD_IndexEvent/metadata/subpanels/default.php b/modules/AOD_IndexEvent/metadata/subpanels/default.php new file mode 100644 index 00000000000..7c9addf7da4 --- /dev/null +++ b/modules/AOD_IndexEvent/metadata/subpanels/default.php @@ -0,0 +1,73 @@ + array( + array('widget_class' => 'SubPanelTopCreateButton'), + array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => $module_name), + ), + + 'where' => '', + + 'list_fields' => array( + 'name'=>array( + 'vname' => 'LBL_NAME', + 'widget_class' => 'SubPanelDetailViewLink', + 'width' => '45%', + ), + 'date_modified'=>array( + 'vname' => 'LBL_DATE_MODIFIED', + 'width' => '45%', + ), + 'edit_button'=>array( + 'vname' => 'LBL_EDIT_BUTTON', + 'widget_class' => 'SubPanelEditButton', + 'module' => $module_name, + 'width' => '4%', + ), + 'remove_button'=>array( + 'vname' => 'LBL_REMOVE', + 'widget_class' => 'SubPanelRemoveButton', + 'module' => $module_name, + 'width' => '5%', + ), + ), +); + +?> \ No newline at end of file diff --git a/modules/AOD_IndexEvent/vardefs.php b/modules/AOD_IndexEvent/vardefs.php new file mode 100644 index 00000000000..fdb56d8837d --- /dev/null +++ b/modules/AOD_IndexEvent/vardefs.php @@ -0,0 +1,121 @@ +'aod_indexevent', + 'audited'=>true, + 'duplicate_merge'=>true, + 'fields'=>array ( + 'error' => + array ( + 'required' => false, + 'name' => 'error', + 'vname' => 'LBL_ERROR', + 'type' => 'varchar', + 'massupdate' => 0, + 'no_default' => false, + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'len' => '255', + 'size' => '20', + ), + 'success' => + array ( + 'required' => false, + 'name' => 'success', + 'vname' => 'LBL_SUCCESS', + 'type' => 'bool', + 'massupdate' => 0, + 'default' => '0', + 'no_default' => false, + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'len' => '255', + 'size' => '20', + ), + 'record_id' => array ( + 'name' => 'record_id', + 'type' => 'id', + 'reportable' => false, + 'vname' => 'LBL_RECORD_ID', + ), + 'record_module' => array ( + 'required' => false, + 'name' => 'record_module', + 'vname' => 'LBL_RECORD_MODULE', + 'type' => 'varchar', + 'massupdate' => 0, + 'no_default' => false, + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'len' => '255', + 'size' => '20', + ), +), + 'relationships'=>array ( +), + 'indices' => array ( + array('name' =>'idx_record_module' , 'type'=>'index' , 'fields'=>array('record_module')), + array('name' =>'idx_record_id', 'type' =>'index', 'fields'=>array('record_id')), + ), + 'optimistic_locking'=>true, + 'unified_search'=>false, + ); +if (!class_exists('VardefManager')){ + require_once('include/SugarObjects/VardefManager.php'); +} +VardefManager::createVardef('AOD_IndexEvent','AOD_IndexEvent', array('basic','assignable')); \ No newline at end of file From 6924940ef199ea4f5b2432e49e46619fb69c9ac2 Mon Sep 17 00:00:00 2001 From: Lewis Jessett Date: Mon, 3 Feb 2014 12:27:09 +0000 Subject: [PATCH 157/223] Fixed formatting for SugarFeed, Fixed Formatting with module feed. --- .../Vardefs/sugarfield_facebook_user_c.php | 5 - .../Ext/Vardefs/sugarfield_twitter_user_c.php | 2 +- .../Vardefs/sugarfield_facebookAPI_user_c.php | 5 - .../Vardefs/sugarfield_facebook_user_c.php | 5 - .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 - .../Vardefs/sugarfield_facebook_user_c.php | 5 - .../Ext/Vardefs/sugarfield_twitter_user_c.php | 2 +- .../entry_point_registry.ext.php | 10 +- .../application/Ext/Include/modules.ext.php | 112 +-- .../Ext/Language/en_us.lang.ext.php | 594 +++++++------- .../Ext/Language/es_es.lang.ext.php | 296 +++---- .../Ext/Language/ru_ru.lang.ext.php | 768 +++++++++--------- .../TableDictionary/tabledictionary.ext.php | 30 +- custom/include/social/get_feed_data.php | 7 +- custom/include/social/language/en_us.lang.php | 12 - .../include/social/twitter/twitter_helper.php | 66 +- custom/include/social/twitter/twitterapi.php | 30 +- .../Accounts/metadata/detailviewdefs.php | 242 ++++++ .../Accounts/metadata/editviewdefs.php | 9 - .../sources/ext/rest/facebook/mapping.php | 8 +- .../sources/ext/rest/insideview/mapping.php | 2 +- .../sources/ext/rest/linkedin/mapping.php | 2 +- .../sources/ext/rest/twitter/mapping.php | 5 +- custom/modules/Connectors/controller.php | 1 - .../Connectors/metadata/connectors.php | 2 +- .../Connectors/metadata/display_config.php | 5 +- .../Connectors/metadata/searchdefs.php | 12 +- .../modules/Contacts/language/en_us.lang.php | 13 - .../Contacts/metadata/detailviewdefs.php | 24 +- .../Contacts/metadata/editviewdefs.php | 221 ----- .../modules/Leads/metadata/detailviewdefs.php | 31 +- .../modules/Leads/metadata/editviewdefs.php | 15 +- .../Opportunities/metadata/detailviewdefs.php | 2 +- 33 files changed, 1244 insertions(+), 1304 deletions(-) delete mode 100755 custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebookAPI_user_c.php delete mode 100755 custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/include/social/language/en_us.lang.php create mode 100755 custom/modules/Accounts/metadata/detailviewdefs.php delete mode 100755 custom/modules/Contacts/language/en_us.lang.php delete mode 100755 custom/modules/Contacts/metadata/editviewdefs.php diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index 2e555d5d08d..00000000000 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php index 751b6993fec..381f4c4932b 100755 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php +++ b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebookAPI_user_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebookAPI_user_c.php deleted file mode 100755 index 8c3820b4859..00000000000 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebookAPI_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index 3dc306aa25b..00000000000 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 19814869aa6..00000000000 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index bb04ea1c889..00000000000 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php index 96587034ee2..ff4c81b4605 100755 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php +++ b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php b/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php index e1ccad19bb9..f25584926c7 100755 --- a/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php +++ b/custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php @@ -1,15 +1,15 @@ 'modules/FP_events/responseEntryPoint.php', + 'auth' => false + ); $entry_point_registry['QuickCRMgetConfig'] = array( 'file' => 'custom/QuickCRM/getConfig.php', 'auth' => false ); - - $entry_point_registry['responseEntryPoint'] = array( - 'file' => 'modules/FP_events/responseEntryPoint.php', - 'auth' => false - ); ?> \ No newline at end of file diff --git a/custom/application/Ext/Include/modules.ext.php b/custom/application/Ext/Include/modules.ext.php index 36b1f1e3733..7b467c6ea47 100755 --- a/custom/application/Ext/Include/modules.ext.php +++ b/custom/application/Ext/Include/modules.ext.php @@ -2,6 +2,20 @@ //WARNING: The contents of this file are auto-generated + //WARNING: The contents of this file are auto-generated +$beanList['AOP_Case_Events'] = 'AOP_Case_Events'; +$beanFiles['AOP_Case_Events'] = 'modules/AOP_Case_Events/AOP_Case_Events.php'; +$modules_exempt_from_availability_check['AOP_Case_Events'] = 'AOP_Case_Events'; +$report_include_modules['AOP_Case_Events'] = 'AOP_Case_Events'; +$modInvisList[] = 'AOP_Case_Events'; +$beanList['AOP_Case_Updates'] = 'AOP_Case_Updates'; +$beanFiles['AOP_Case_Updates'] = 'modules/AOP_Case_Updates/AOP_Case_Updates.php'; +$modules_exempt_from_availability_check['AOP_Case_Updates'] = 'AOP_Case_Updates'; +$report_include_modules['AOP_Case_Updates'] = 'AOP_Case_Updates'; +$modInvisList[] = 'AOP_Case_Updates'; + + + //WARNING: The contents of this file are auto-generated $beanList['jjwg_Maps'] = 'jjwg_Maps'; $beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; @@ -18,27 +32,6 @@ - //WARNING: The contents of this file are auto-generated -$beanList['SecurityGroups'] = 'SecurityGroup'; -$beanFiles['SecurityGroup'] = 'modules/SecurityGroups/SecurityGroup.php'; -$moduleList[] = 'SecurityGroups'; - - - - //WARNING: The contents of this file are auto-generated -$beanList['AOP_Case_Events'] = 'AOP_Case_Events'; -$beanFiles['AOP_Case_Events'] = 'modules/AOP_Case_Events/AOP_Case_Events.php'; -$modules_exempt_from_availability_check['AOP_Case_Events'] = 'AOP_Case_Events'; -$report_include_modules['AOP_Case_Events'] = 'AOP_Case_Events'; -$modInvisList[] = 'AOP_Case_Events'; -$beanList['AOP_Case_Updates'] = 'AOP_Case_Updates'; -$beanFiles['AOP_Case_Updates'] = 'modules/AOP_Case_Updates/AOP_Case_Updates.php'; -$modules_exempt_from_availability_check['AOP_Case_Updates'] = 'AOP_Case_Updates'; -$report_include_modules['AOP_Case_Updates'] = 'AOP_Case_Updates'; -$modInvisList[] = 'AOP_Case_Updates'; - - - //WARNING: The contents of this file are auto-generated $beanList['AOS_Contracts'] = 'AOS_Contracts'; $beanFiles['AOS_Contracts'] = 'modules/AOS_Contracts/AOS_Contracts.php'; @@ -71,31 +64,6 @@ - //WARNING: The contents of this file are auto-generated -$beanList['jjwg_Maps'] = 'jjwg_Maps'; -$beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; -$moduleList[] = 'jjwg_Maps'; -$beanList['jjwg_Markers'] = 'jjwg_Markers'; -$beanFiles['jjwg_Markers'] = 'modules/jjwg_Markers/jjwg_Markers.php'; -$moduleList[] = 'jjwg_Markers'; -$beanList['jjwg_Areas'] = 'jjwg_Areas'; -$beanFiles['jjwg_Areas'] = 'modules/jjwg_Areas/jjwg_Areas.php'; -$moduleList[] = 'jjwg_Areas'; -$beanList['jjwg_Address_Cache'] = 'jjwg_Address_Cache'; -$beanFiles['jjwg_Address_Cache'] = 'modules/jjwg_Address_Cache/jjwg_Address_Cache.php'; -$moduleList[] = 'jjwg_Address_Cache'; - - - - //WARNING: The contents of this file are auto-generated -$beanList['Calls_Reschedule'] = 'Calls_Reschedule'; -$beanFiles['Calls_Reschedule'] = 'modules/Calls_Reschedule/Calls_Reschedule.php'; -$modules_exempt_from_availability_check['Calls_Reschedule'] = 'Calls_Reschedule'; -$report_include_modules['Calls_Reschedule'] = 'Calls_Reschedule'; -$modInvisList[] = 'Calls_Reschedule'; - - - //WARNING: The contents of this file are auto-generated $beanList['AOR_Reports'] = 'AOR_Report'; $beanFiles['AOR_Report'] = 'modules/AOR_Reports/AOR_Report.php'; @@ -118,6 +86,48 @@ + //WARNING: The contents of this file are auto-generated +$beanList['SecurityGroups'] = 'SecurityGroup'; +$beanFiles['SecurityGroup'] = 'modules/SecurityGroups/SecurityGroup.php'; +$moduleList[] = 'SecurityGroups'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['Calls_Reschedule'] = 'Calls_Reschedule'; +$beanFiles['Calls_Reschedule'] = 'modules/Calls_Reschedule/Calls_Reschedule.php'; +$modules_exempt_from_availability_check['Calls_Reschedule'] = 'Calls_Reschedule'; +$report_include_modules['Calls_Reschedule'] = 'Calls_Reschedule'; +$modInvisList[] = 'Calls_Reschedule'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['FP_events'] = 'FP_events'; +$beanFiles['FP_events'] = 'modules/FP_events/FP_events.php'; +$moduleList[] = 'FP_events'; +$beanList['FP_Event_Locations'] = 'FP_Event_Locations'; +$beanFiles['FP_Event_Locations'] = 'modules/FP_Event_Locations/FP_Event_Locations.php'; +$moduleList[] = 'FP_Event_Locations'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['jjwg_Maps'] = 'jjwg_Maps'; +$beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; +$moduleList[] = 'jjwg_Maps'; +$beanList['jjwg_Markers'] = 'jjwg_Markers'; +$beanFiles['jjwg_Markers'] = 'modules/jjwg_Markers/jjwg_Markers.php'; +$moduleList[] = 'jjwg_Markers'; +$beanList['jjwg_Areas'] = 'jjwg_Areas'; +$beanFiles['jjwg_Areas'] = 'modules/jjwg_Areas/jjwg_Areas.php'; +$moduleList[] = 'jjwg_Areas'; +$beanList['jjwg_Address_Cache'] = 'jjwg_Address_Cache'; +$beanFiles['jjwg_Address_Cache'] = 'modules/jjwg_Address_Cache/jjwg_Address_Cache.php'; +$moduleList[] = 'jjwg_Address_Cache'; + + + //WARNING: The contents of this file are auto-generated $beanList['AOW_Actions'] = 'AOW_Action'; $beanFiles['AOW_Action'] = 'modules/AOW_Actions/AOW_Action.php'; @@ -139,14 +149,4 @@ $modInvisList[] = 'AOW_Conditions'; - - //WARNING: The contents of this file are auto-generated -$beanList['FP_events'] = 'FP_events'; -$beanFiles['FP_events'] = 'modules/FP_events/FP_events.php'; -$moduleList[] = 'FP_events'; -$beanList['FP_Event_Locations'] = 'FP_Event_Locations'; -$beanFiles['FP_Event_Locations'] = 'modules/FP_Event_Locations/FP_Event_Locations.php'; -$moduleList[] = 'FP_Event_Locations'; - - ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/en_us.lang.ext.php b/custom/application/Ext/Language/en_us.lang.ext.php index 5424dbfaedd..1131939b3d2 100755 --- a/custom/application/Ext/Language/en_us.lang.ext.php +++ b/custom/application/Ext/Language/en_us.lang.ext.php @@ -2,6 +2,184 @@ //WARNING: The contents of this file are auto-generated +/** + * @package SuiteCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$app_strings['LBL_QUICK_ACCOUNT'] = 'Create Account'; +$app_strings['LBL_QUICK_CONTACT'] = 'Create Contact'; +$app_strings['LBL_QUICK_OPPORTUNITY'] = 'Create Opportunity'; +$app_strings['LBL_QUICK_LEAD'] = 'Create Lead'; +$app_strings['LBL_QUICK_DOCUMENT'] = 'Create Document'; +$app_strings['LBL_QUICK_CALL'] = 'Log Call'; +$app_strings['LBL_QUICK_TASK'] = 'Create Task'; + +/** + * Social Feed Language Strings. + */ + +$app_strings['FACEBOOK_USER_C'] = 'Facebook'; +$app_strings['TWITTER_USER_C'] = 'Twitter'; +$app_strings['LBL_FACEBOOK_USER_C'] = 'Facebook User'; +$app_strings['LBL_TWITTER_USER_C'] = 'Twitter User'; +$app_strings['LBL_PANEL_SOCIAL_FEED'] = 'Social Feed Details'; + +/** + * Advanced OpenWorkflow, Automating SugarCRM. + * @package Advanced OpenWorkflow for SugarCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + + +$app_list_strings['moduleList']['AOW_WorkFlow'] = 'WorkFlow'; +$app_list_strings['moduleList']['AOW_Conditions'] = 'WorkFlow Conditions'; +$app_list_strings['moduleList']['AOW_Processed'] = 'Process Audit'; +$app_list_strings['moduleList']['AOW_Actions'] = 'WorkFlow Actions'; +$app_list_strings['aow_status_list']['Active'] = 'Active'; +$app_list_strings['aow_status_list']['Inactive'] = 'Inactive'; +$app_list_strings['aow_operator_list']['Equal_To'] = 'Equal To'; +$app_list_strings['aow_operator_list']['Not_Equal_To'] = 'Not Equal To'; +$app_list_strings['aow_operator_list']['Greater_Than'] = 'Greater Than'; +$app_list_strings['aow_operator_list']['Less_Than'] = 'Less Than'; +$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = 'Greater Than or Equal To'; +$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = 'Less Than or Equal To'; +$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aow_process_status_list']['Complete'] = 'Complete'; +$app_list_strings['aow_process_status_list']['Running'] = 'Running'; +$app_list_strings['aow_process_status_list']['Pending'] = 'Pending'; +$app_list_strings['aow_process_status_list']['Failed'] = 'Failed'; +$app_list_strings['aow_condition_operator_list']['And'] = 'And'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'OR'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'OR'; +$app_list_strings['aow_condition_type_list']['Value'] = 'Value'; +$app_list_strings['aow_condition_type_list']['Field'] = 'Field'; +$app_list_strings['aow_condition_type_list']['Date'] = 'Date'; +$app_list_strings['aow_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aow_action_type_list']['Value'] = 'Value'; +$app_list_strings['aow_action_type_list']['Field'] = 'Field'; +$app_list_strings['aow_action_type_list']['Date'] = 'Date'; +$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Round Robin'; +$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Least Busy'; +$app_list_strings['aow_action_type_list']['Random'] = 'Random'; +$app_list_strings['aow_rel_action_type_list']['Value'] = 'Value'; +$app_list_strings['aow_rel_action_type_list']['Field'] = 'Field'; +$app_list_strings['aow_date_type_list'][''] = ''; +$app_list_strings['aow_date_type_list']['minute'] = 'Minutes'; +$app_list_strings['aow_date_type_list']['hour'] = 'Hours'; +$app_list_strings['aow_date_type_list']['day'] = 'Days'; +$app_list_strings['aow_date_type_list']['week'] = 'Weeks'; +$app_list_strings['aow_date_type_list']['month'] = 'Months'; +$app_list_strings['aow_date_type_list']['business_hours'] = 'Business Hours'; +$app_list_strings['aow_date_options']['now'] = 'Now'; +$app_list_strings['aow_date_options']['field'] = 'This Field'; +$app_list_strings['aow_date_operator']['now'] = ''; +$app_list_strings['aow_date_operator']['plus'] = '+'; +$app_list_strings['aow_date_operator']['minus'] = '-'; +$app_list_strings['aow_assign_options']['all'] = 'ALL Users'; +$app_list_strings['aow_assign_options']['role'] = 'ALL Users in Role'; +$app_list_strings['aow_assign_options']['security_group'] = 'ALL Users in Security Group'; +$app_list_strings['aow_email_type_list']['Email Address'] = 'Email'; +$app_list_strings['aow_email_type_list']['Record Email'] = 'Record Email'; +$app_list_strings['aow_email_type_list']['Specify User'] = 'User'; +$app_list_strings['aow_email_type_list']['Related Field'] = 'Related Field'; + + + + +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + + +$app_list_strings['moduleList']['FP_events'] = 'Events'; +$app_list_strings['moduleList']['FP_Event_Locations'] = 'Locations'; +$app_list_strings['invite_template_list'][''] = ''; + +$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invited'; +$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'Not Invited'; +$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Attended'; +$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'Not Attended'; +$app_list_strings['fp_event_status_dom']['Accepted'] = 'Accepted'; +$app_list_strings['fp_event_status_dom']['Declined'] = 'Declined'; +$app_list_strings['fp_event_status_dom']['No Response'] = 'No Response'; + +$app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; +$app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; +$app_strings['LBL_LISTVIEW_OPTION_CURRENT'] = 'Select This Page'; +$app_strings['LBL_LISTVIEW_OPTION_ENTIRE'] = 'Select All'; +$app_strings['LBL_LISTVIEW_NONE'] = 'Deselect All'; + $app_strings['LBL_MAP'] = 'Map'; $app_strings['LBL_MAPS'] = 'Maps'; @@ -577,37 +755,6 @@ $app_list_strings['marker_image_list']['world_heritage_site'] = 'World Heritage Site'; $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; - -/** - * Extensions to SugarCRM - * @package Reschedule for SugarCRM - * @subpackage Products - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - -$mod_strings = array ( - 'TWITTER_USER_C' => 'Twitter User', - 'FACEBOOK_USER_C' => 'Facebook User', -); - - $app_list_strings["moduleList"]["SecurityGroups"] = 'Security Groups Management'; @@ -683,275 +830,11 @@ $app_list_strings['aor_function_list']['MAX'] = 'Maximum'; $app_list_strings['aor_function_list']['SUM'] = 'Sum'; $app_list_strings['aor_function_list']['AVG'] = 'Average'; - -/** - * Social Feed Language Strings. - */ - -$app_strings['FACEBOOK_USER_C'] = 'Facebook'; -$app_strings['TWITTER_USER_C'] = 'Twitter'; -$app_strings['LBL_FACEBOOK_USER_C'] = 'Facebook User'; -$app_strings['LBL_TWITTER_USER_C'] = 'Twitter User'; -$app_strings['LBL_PANEL_SOCIAL_FEED'] = 'Social Feed Details'; /** + * Products, Quotations & Invoices modules. * Extensions to SugarCRM - * @package Reschedule for SugarCRM - * @subpackage Products - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - -$mod_strings = array ( - 'TWITTER_USER_C' => 'Twitter User', - 'FACEBOOK_USER_C' => 'Facebook User', -); - - - - -/** - * - * @package Advanced OpenPortal - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - - -$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Case Events'; -$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Case Updates'; -$app_list_strings['moduleList']['AOP_Case_Events'] = 'Case Events'; -$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Case Updates'; -$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Please reply above this line =========='; - -$app_list_strings['case_state_dom'] = - array ( - 'Open' => 'Open', - 'Closed' => 'Closed', - ); -$app_list_strings['case_state_default_key'] = 'Open'; -$app_list_strings['case_status_default_key'] = 'Open_New'; -$app_list_strings['case_status_dom'] = - array ( - 'Open_New' => 'New', - 'Open_Assigned' => 'Assigned', - 'Closed_Closed' => 'Closed', - 'Open_Pending Input' => 'Pending Input', - 'Closed_Rejected' => 'Rejected', - 'Closed_Duplicate' => 'Duplicate', - ); - -$app_list_strings['aop_distribution_method'] = - array ( - 'singleUser' => 'Single User', - 'roundRobin' => 'Round Robin', - 'leastBusy' => 'Least Busy', - ); - -/** - * Advanced OpenWorkflow, Automating SugarCRM. - * @package Advanced OpenWorkflow for SugarCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author SalesAgility - */ - - -$app_list_strings['moduleList']['AOW_WorkFlow'] = 'WorkFlow'; -$app_list_strings['moduleList']['AOW_Conditions'] = 'WorkFlow Conditions'; -$app_list_strings['moduleList']['AOW_Processed'] = 'Process Audit'; -$app_list_strings['moduleList']['AOW_Actions'] = 'WorkFlow Actions'; -$app_list_strings['aow_status_list']['Active'] = 'Active'; -$app_list_strings['aow_status_list']['Inactive'] = 'Inactive'; -$app_list_strings['aow_operator_list']['Equal_To'] = 'Equal To'; -$app_list_strings['aow_operator_list']['Not_Equal_To'] = 'Not Equal To'; -$app_list_strings['aow_operator_list']['Greater_Than'] = 'Greater Than'; -$app_list_strings['aow_operator_list']['Less_Than'] = 'Less Than'; -$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = 'Greater Than or Equal To'; -$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = 'Less Than or Equal To'; -$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; -$app_list_strings['aow_process_status_list']['Complete'] = 'Complete'; -$app_list_strings['aow_process_status_list']['Running'] = 'Running'; -$app_list_strings['aow_process_status_list']['Pending'] = 'Pending'; -$app_list_strings['aow_process_status_list']['Failed'] = 'Failed'; -$app_list_strings['aow_condition_operator_list']['And'] = 'And'; -$app_list_strings['aow_condition_operator_list']['OR'] = 'OR'; -$app_list_strings['aow_condition_operator_list']['OR'] = 'OR'; -$app_list_strings['aow_condition_type_list']['Value'] = 'Value'; -$app_list_strings['aow_condition_type_list']['Field'] = 'Field'; -$app_list_strings['aow_condition_type_list']['Date'] = 'Date'; -$app_list_strings['aow_condition_type_list']['Multi'] = 'Multiple'; -$app_list_strings['aow_action_type_list']['Value'] = 'Value'; -$app_list_strings['aow_action_type_list']['Field'] = 'Field'; -$app_list_strings['aow_action_type_list']['Date'] = 'Date'; -$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Round Robin'; -$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Least Busy'; -$app_list_strings['aow_action_type_list']['Random'] = 'Random'; -$app_list_strings['aow_rel_action_type_list']['Value'] = 'Value'; -$app_list_strings['aow_rel_action_type_list']['Field'] = 'Field'; -$app_list_strings['aow_date_type_list'][''] = ''; -$app_list_strings['aow_date_type_list']['minute'] = 'Minutes'; -$app_list_strings['aow_date_type_list']['hour'] = 'Hours'; -$app_list_strings['aow_date_type_list']['day'] = 'Days'; -$app_list_strings['aow_date_type_list']['week'] = 'Weeks'; -$app_list_strings['aow_date_type_list']['month'] = 'Months'; -$app_list_strings['aow_date_type_list']['business_hours'] = 'Business Hours'; -$app_list_strings['aow_date_options']['now'] = 'Now'; -$app_list_strings['aow_date_options']['field'] = 'This Field'; -$app_list_strings['aow_date_operator']['now'] = ''; -$app_list_strings['aow_date_operator']['plus'] = '+'; -$app_list_strings['aow_date_operator']['minus'] = '-'; -$app_list_strings['aow_assign_options']['all'] = 'ALL Users'; -$app_list_strings['aow_assign_options']['role'] = 'ALL Users in Role'; -$app_list_strings['aow_assign_options']['security_group'] = 'ALL Users in Security Group'; -$app_list_strings['aow_email_type_list']['Email Address'] = 'Email'; -$app_list_strings['aow_email_type_list']['Record Email'] = 'Record Email'; -$app_list_strings['aow_email_type_list']['Specify User'] = 'User'; -$app_list_strings['aow_email_type_list']['Related Field'] = 'Related Field'; - - - - -/********************************************************************************* - * SugarCRM Community Edition is a customer relationship management program developed by - * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Affero General Public License version 3 as published by the - * Free Software Foundation with the addition of the following permission added - * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK - * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY - * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more - * details. - * - * You should have received a copy of the GNU Affero General Public License along with - * this program; if not, see http://www.gnu.org/licenses or write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA. - * - * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, - * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. - * - * The interactive user interfaces in modified source and object code versions - * of this program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU Affero General Public License version 3. - * - * In accordance with Section 7(b) of the GNU Affero General Public License version 3, - * these Appropriate Legal Notices must retain the display of the "Powered by - * SugarCRM" logo. If the display of the logo is not reasonably feasible for - * technical reasons, the Appropriate Legal Notices must display the words - * "Powered by SugarCRM". - ********************************************************************************/ - - -$app_list_strings['moduleList']['FP_events'] = 'Events'; -$app_list_strings['moduleList']['FP_Event_Locations'] = 'Locations'; -$app_list_strings['invite_template_list'][''] = ''; - -$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invited'; -$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'Not Invited'; -$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Attended'; -$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'Not Attended'; -$app_list_strings['fp_event_status_dom']['Accepted'] = 'Accepted'; -$app_list_strings['fp_event_status_dom']['Declined'] = 'Declined'; -$app_list_strings['fp_event_status_dom']['No Response'] = 'No Response'; - -$app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; -$app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; -$app_strings['LBL_LISTVIEW_OPTION_CURRENT'] = 'Select This Page'; -$app_strings['LBL_LISTVIEW_OPTION_ENTIRE'] = 'Select All'; -$app_strings['LBL_LISTVIEW_NONE'] = 'Deselect All'; - -/** - * @package SuiteCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - -$app_strings['LBL_QUICK_ACCOUNT'] = 'Create Account'; -$app_strings['LBL_QUICK_CONTACT'] = 'Create Contact'; -$app_strings['LBL_QUICK_OPPORTUNITY'] = 'Create Opportunity'; -$app_strings['LBL_QUICK_LEAD'] = 'Create Lead'; -$app_strings['LBL_QUICK_DOCUMENT'] = 'Create Document'; -$app_strings['LBL_QUICK_CALL'] = 'Log Call'; -$app_strings['LBL_QUICK_TASK'] = 'Create Task'; - -/** - * Products, Quotations & Invoices modules. - * Extensions to SugarCRM - * @package Advanced OpenSales for SugarCRM + * @package Advanced OpenSales for SugarCRM * @subpackage Products * @copyright SalesAgility Ltd http://www.salesagility.com * @@ -1055,4 +938,121 @@ $app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo templates found.\nPlease go to the PDF templates module and create one'; + +/** + * + * @package Advanced OpenPortal + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + + +$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Case Events'; +$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Case Updates'; +$app_list_strings['moduleList']['AOP_Case_Events'] = 'Case Events'; +$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Case Updates'; +$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Please reply above this line =========='; + +$app_list_strings['case_state_dom'] = + array ( + 'Open' => 'Open', + 'Closed' => 'Closed', + ); +$app_list_strings['case_state_default_key'] = 'Open'; +$app_list_strings['case_status_default_key'] = 'Open_New'; +$app_list_strings['case_status_dom'] = + array ( + 'Open_New' => 'New', + 'Open_Assigned' => 'Assigned', + 'Closed_Closed' => 'Closed', + 'Open_Pending Input' => 'Pending Input', + 'Closed_Rejected' => 'Rejected', + 'Closed_Duplicate' => 'Duplicate', + ); + +$app_list_strings['aop_distribution_method'] = + array ( + 'singleUser' => 'Single User', + 'roundRobin' => 'Round Robin', + 'leastBusy' => 'Least Busy', + ); + +/** + * Extensions to SugarCRM + * @package Reschedule for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$mod_strings = array ( + 'TWITTER_USER_C' => 'Twitter User', + 'FACEBOOK_USER_C' => 'Facebook User', +); + + + +/** + * Extensions to SugarCRM + * @package Reschedule for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$mod_strings = array ( + 'TWITTER_USER_C' => 'Twitter User', + 'FACEBOOK_USER_C' => 'Facebook User', +); + + + ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/es_es.lang.ext.php b/custom/application/Ext/Language/es_es.lang.ext.php index b00be1a0279..ba939598df3 100755 --- a/custom/application/Ext/Language/es_es.lang.ext.php +++ b/custom/application/Ext/Language/es_es.lang.ext.php @@ -1,100 +1,6 @@ - */ - -$app_list_strings['call_reschedule_dom'][''] = ''; -$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Fuera de la Oficina'; -$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'En una reunion'; - -$app_strings['LBL_RESCHEDULE_LABEL'] = 'Replanificar'; -$app_strings['LBL_RESCHEDULE_TITLE'] = 'Por favor ingrese los datos de la Replanificación'; -$app_strings['LBL_RESCHEDULE_DATE'] = 'Fecha:'; -$app_strings['LBL_RESCHEDULE_REASON'] = 'Razón:'; -$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Por favor seleccione una fecha válida'; -$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Por favor seleccione una razón'; - -$app_strings['LBL_RESCHEDULE_PANEL'] = 'Replanificar'; -$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Historial de Intentos de Llamada'; -$app_strings['LBL_RESCHEDULE_COUNT'] = 'Intentos de Llamada'; - - - - -/********************************************************************************* - * SugarCRM Community Edition is a customer relationship management program developed by - * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Affero General Public License version 3 as published by the - * Free Software Foundation with the addition of the following permission added - * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK - * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY - * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more - * details. - * - * You should have received a copy of the GNU Affero General Public License along with - * this program; if not, see http://www.gnu.org/licenses or write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA. - * - * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, - * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. - * - * The interactive user interfaces in modified source and object code versions - * of this program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU Affero General Public License version 3. - * - * In accordance with Section 7(b) of the GNU Affero General Public License version 3, - * these Appropriate Legal Notices must retain the display of the "Powered by - * SugarCRM" logo. If the display of the logo is not reasonably feasible for - * technical reasons, the Appropriate Legal Notices must display the words - * "Powered by SugarCRM". - ********************************************************************************/ - - -$app_list_strings['moduleList']['FP_events'] = 'Eventos'; -$app_list_strings['moduleList']['FP_Event_Locations'] = 'Ubicaciones'; -$app_list_strings['invite_template_list'][''] = ''; - -$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invitado'; -$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'No Invitado'; -$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Asistió'; -$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'No Asistió'; -$app_list_strings['fp_event_status_dom']['Accepted'] = 'Aceptado'; -$app_list_strings['fp_event_status_dom']['Declined'] = 'Rechazado'; -$app_list_strings['fp_event_status_dom']['No Response'] = 'Sin Respuesta'; - -$app_strings['LBL_STATUS_EVENT'] = 'Estado de Invitación'; -$app_strings['LBL_ACCEPT_STATUS'] = 'Estado de Aceptación'; - $app_strings['LBL_MAP'] = 'Mapa'; @@ -438,60 +344,6 @@ $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; -/** - * - * @package Advanced OpenPortal - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - - -$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Eventos de Casos'; -$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Actualizaciones de Casos'; -$app_list_strings['moduleList']['AOP_Case_Events'] = 'Eventos de Casos'; -$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Actualizaciones de Casos'; -$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Por favor responda por encima de esta linea =========='; - -$app_list_strings['case_state_dom'] = - array ( - 'Open' => 'Abierto', - 'Closed' => 'Cerrado', - ); -$app_list_strings['case_state_default_key'] = 'Open'; -$app_list_strings['case_status_default_key'] = 'Open_New'; -$app_list_strings['case_status_dom'] = - array ( - 'Open_New' => 'Nuevo', - 'Open_Assigned' => 'Asignado', - 'Closed_Closed' => 'Cerrado', - 'Open_Pending Input' => 'Pendiente de Información', - 'Closed_Rejected' => 'Rechazado', - 'Closed_Duplicate' => 'Duplicado', - ); - - -$app_list_strings["moduleList"]["SecurityGroups"] = 'Administración de Grupos de Seguridad'; -$app_strings['LBL_LOGIN_AS'] = "Conexin como "; -$app_strings['LBL_LOGOUT_AS'] = "Cerrar sesin como "; - - - /** * Advanced OpenReports, SugarCRM Reporting. * @package Advanced OpenReports for SugarCRM @@ -560,6 +412,147 @@ $app_list_strings['aor_function_list']['SUM'] = 'Suma'; $app_list_strings['aor_function_list']['AVG'] = 'Promedio'; +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + + +$app_list_strings['moduleList']['FP_events'] = 'Eventos'; +$app_list_strings['moduleList']['FP_Event_Locations'] = 'Ubicaciones'; +$app_list_strings['invite_template_list'][''] = ''; + +$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invitado'; +$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'No Invitado'; +$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Asistió'; +$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'No Asistió'; +$app_list_strings['fp_event_status_dom']['Accepted'] = 'Aceptado'; +$app_list_strings['fp_event_status_dom']['Declined'] = 'Rechazado'; +$app_list_strings['fp_event_status_dom']['No Response'] = 'Sin Respuesta'; + +$app_strings['LBL_STATUS_EVENT'] = 'Estado de Invitación'; +$app_strings['LBL_ACCEPT_STATUS'] = 'Estado de Aceptación'; + + +/** + * Extensions to SugarCRM + * @package Reschedule for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$app_list_strings['call_reschedule_dom'][''] = ''; +$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Fuera de la Oficina'; +$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'En una reunion'; + +$app_strings['LBL_RESCHEDULE_LABEL'] = 'Replanificar'; +$app_strings['LBL_RESCHEDULE_TITLE'] = 'Por favor ingrese los datos de la Replanificación'; +$app_strings['LBL_RESCHEDULE_DATE'] = 'Fecha:'; +$app_strings['LBL_RESCHEDULE_REASON'] = 'Razón:'; +$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Por favor seleccione una fecha válida'; +$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Por favor seleccione una razón'; + +$app_strings['LBL_RESCHEDULE_PANEL'] = 'Replanificar'; +$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Historial de Intentos de Llamada'; +$app_strings['LBL_RESCHEDULE_COUNT'] = 'Intentos de Llamada'; + + + + +/** + * + * @package Advanced OpenPortal + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + + +$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Eventos de Casos'; +$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Actualizaciones de Casos'; +$app_list_strings['moduleList']['AOP_Case_Events'] = 'Eventos de Casos'; +$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Actualizaciones de Casos'; +$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Por favor responda por encima de esta linea =========='; + +$app_list_strings['case_state_dom'] = + array ( + 'Open' => 'Abierto', + 'Closed' => 'Cerrado', + ); +$app_list_strings['case_state_default_key'] = 'Open'; +$app_list_strings['case_status_default_key'] = 'Open_New'; +$app_list_strings['case_status_dom'] = + array ( + 'Open_New' => 'Nuevo', + 'Open_Assigned' => 'Asignado', + 'Closed_Closed' => 'Cerrado', + 'Open_Pending Input' => 'Pendiente de Información', + 'Closed_Rejected' => 'Rechazado', + 'Closed_Duplicate' => 'Duplicado', + ); + /** * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM @@ -1098,4 +1091,11 @@ $app_list_strings['marker_image_list']['world_heritage_site'] = 'Patrimonio de la Humanidad'; $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; + + +$app_list_strings["moduleList"]["SecurityGroups"] = 'Administración de Grupos de Seguridad'; +$app_strings['LBL_LOGIN_AS'] = "Conexin como "; +$app_strings['LBL_LOGOUT_AS'] = "Cerrar sesin como "; + + ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/ru_ru.lang.ext.php b/custom/application/Ext/Language/ru_ru.lang.ext.php index a3f888b3010..0a9b3e70739 100755 --- a/custom/application/Ext/Language/ru_ru.lang.ext.php +++ b/custom/application/Ext/Language/ru_ru.lang.ext.php @@ -2,6 +2,136 @@ //WARNING: The contents of this file are auto-generated +/** + * Advanced OpenReports, SugarCRM Reporting. + * @package Advanced OpenReports for SugarCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + + +$app_list_strings['moduleList']['AOR_Reports'] = 'Отчёты'; +$app_list_strings['moduleList']['AOR_Conditions'] = 'Условия отчёта'; +$app_list_strings['moduleList']['AOR_Charts'] = 'Диаграммы отчета'; +$app_list_strings['moduleList']['AOR_Fields'] = 'Поля отчета'; + +$app_list_strings['aor_operator_list']['Equal_To'] = '='; +$app_list_strings['aor_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aor_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aor_operator_list']['Less_Than'] = '<'; +$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = '<='; + +$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; + +$app_list_strings['aor_condition_operator_list']['And'] = 'И'; +$app_list_strings['aor_condition_operator_list']['OR'] = 'ИЛИ'; + +$app_list_strings['aor_condition_type_list']['Value'] = 'Значение'; +$app_list_strings['aor_condition_type_list']['Field'] = 'Поле'; +$app_list_strings['aor_condition_type_list']['Date'] = 'Дата'; +$app_list_strings['aor_condition_type_list']['Multi'] = 'Мультивыбор'; + +$app_list_strings['aor_date_type_list'][''] = ''; +$app_list_strings['aor_date_type_list']['minute'] = 'мин.'; +$app_list_strings['aor_date_type_list']['hour'] = 'час.'; +$app_list_strings['aor_date_type_list']['day'] = 'дн.'; +$app_list_strings['aor_date_type_list']['week'] = 'нед.'; +$app_list_strings['aor_date_type_list']['month'] = 'мес.'; +$app_list_strings['aor_date_type_list']['business_hours'] = 'рабочих часов'; + +$app_list_strings['aor_date_options']['now'] = 'Сейчас'; +$app_list_strings['aor_date_options']['field'] = 'Это поле'; + +$app_list_strings['aor_date_operator']['now'] = ''; +$app_list_strings['aor_date_operator']['plus'] = '+'; +$app_list_strings['aor_date_operator']['minus'] = '-'; +$app_list_strings['aor_sort_operator'][''] = ''; +$app_list_strings['aor_sort_operator']['ASC'] = 'Восходящая'; +$app_list_strings['aor_sort_operator']['DESC'] = 'Нисходящая'; + +$app_list_strings['aor_function_list'][''] = ''; +$app_list_strings['aor_function_list']['COUNT'] = 'КОЛИЧЕСТВО'; +$app_list_strings['aor_function_list']['MIN'] = 'МИНИМУМ'; +$app_list_strings['aor_function_list']['MAX'] = 'МАКСИМУМ'; +$app_list_strings['aor_function_list']['SUM'] = 'СУММА'; +$app_list_strings['aor_function_list']['AVG'] = 'СРЕДНЕЕ'; + +/** + * + * @package Advanced OpenPortal + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + + +$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'События обращения'; +$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Обновления обращения'; +$app_list_strings['moduleList']['AOP_Case_Events'] = 'События обращения'; +$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Обновления обращения'; +$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Please reply above this line =========='; + +$app_list_strings['case_state_dom'] = + array ( + 'Open' => 'Открыто', + 'Closed' => 'Закрыто', + ); +$app_list_strings['case_state_default_key'] = 'Open'; +$app_list_strings['case_status_default_key'] = 'Open_New'; +$app_list_strings['case_status_dom'] = + array ( + 'Open_New' => 'Новое', + 'Open_Assigned' => 'Назначенное', + 'Closed_Closed' => 'Закрытое', + 'Open_Pending Input' => 'Ожидание решения', + 'Closed_Rejected' => 'Отклонённое', + 'Closed_Duplicate' => 'Продублированное', + ); + + $app_list_strings['aop_distribution_method'] = + array ( + 'singleUser' => 'Указанный пользователь', + 'roundRobin' => 'В цикле', + 'leastBusy' => 'Наименее занятой', + ); + /** * @package SuiteCRM * @copyright SalesAgility Ltd http://www.salesagility.com @@ -31,6 +161,146 @@ $app_strings['LBL_QUICK_DOCUMENT'] = 'Создать документ'; $app_strings['LBL_QUICK_CALL'] = 'Назначить звонок'; $app_strings['LBL_QUICK_TASK'] = 'Создать задачу'; + +/** + * Extensions to SugarCRM + * @package Reschedule for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$app_list_strings['call_reschedule_dom'][''] = ''; +$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Сотрудник отсутствует'; +$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'Сотрудник занят'; + +$app_strings['LBL_RESCHEDULE_LABEL'] = 'Звонок откладывается'; +$app_strings['LBL_RESCHEDULE_TITLE'] = 'Заполните следующие поля:'; +$app_strings['LBL_RESCHEDULE_DATE'] = 'Дата:'; +$app_strings['LBL_RESCHEDULE_REASON'] = 'Причина:'; +$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Укажите правильную дату'; +$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Укажите причину, по которой звонок отложен'; + +$app_strings['LBL_RESCHEDULE_PANEL'] = 'Отложенные звонки'; +$app_strings['LBL_RESCHEDULE_HISTORY'] = 'История дозвона'; +$app_strings['LBL_RESCHEDULE_COUNT'] = 'Попыток дозвона'; +$app_strings['LBL_RESCHEDULE'] = 'Отложить звонок'; + + + + +/** + * Advanced OpenWorkflow, Automating SugarCRM. + * @package Advanced OpenWorkflow for SugarCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + + +$app_list_strings['moduleList']['AOW_WorkFlow'] = 'Процессы'; +$app_list_strings['moduleList']['AOW_Conditions'] = 'Условия'; +$app_list_strings['moduleList']['AOW_Processed'] = 'Контроль процессов'; +$app_list_strings['moduleList']['AOW_Actions'] = 'Действия'; + +$app_list_strings['aow_status_list']['Active'] = 'Активен'; +$app_list_strings['aow_status_list']['Inactive'] = 'Не активен'; + +$app_list_strings['aow_operator_list']['Equal_To'] = '='; +$app_list_strings['aow_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aow_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aow_operator_list']['Less_Than'] = '>'; +$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = '<='; + +$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; + +$app_list_strings['aow_process_status_list']['Complete'] = 'Завершён'; +$app_list_strings['aow_process_status_list']['Running'] = 'Выполняется'; +$app_list_strings['aow_process_status_list']['Pending'] = 'В ожидании'; +$app_list_strings['aow_process_status_list']['Failed'] = 'Ошибка выполнения'; + +$app_list_strings['aow_condition_operator_list']['And'] = 'И'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'ИЛИ'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'ИЛИ'; + +$app_list_strings['aow_condition_type_list']['Value'] = 'Значение'; +$app_list_strings['aow_condition_type_list']['Field'] = 'Поле'; +$app_list_strings['aow_condition_type_list']['Date'] = 'Дата'; +$app_list_strings['aow_condition_type_list']['Multi'] = 'Мультивыбор'; + +$app_list_strings['aow_action_type_list']['Value'] = 'Значение'; +$app_list_strings['aow_action_type_list']['Field'] = 'Поле'; +$app_list_strings['aow_action_type_list']['Date'] = 'Дата'; +$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Назначение в цикле'; +$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Назначение наименее занятого'; +$app_list_strings['aow_action_type_list']['Random'] = 'Случайное назначение'; + +$app_list_strings['aow_rel_action_type_list']['Value'] = 'Значение'; +$app_list_strings['aow_rel_action_type_list']['Field'] = 'Поле'; + +$app_list_strings['aow_date_type_list'][''] = ''; +$app_list_strings['aow_date_type_list']['minute'] = 'минут'; +$app_list_strings['aow_date_type_list']['hour'] = 'часов'; +$app_list_strings['aow_date_type_list']['day'] = 'дней'; +$app_list_strings['aow_date_type_list']['week'] = 'недель'; +$app_list_strings['aow_date_type_list']['month'] = 'месяцев'; +$app_list_strings['aow_date_type_list']['business_hours'] = 'рабочих часов'; + +$app_list_strings['aow_date_options']['now'] = 'Сейчас'; +$app_list_strings['aow_date_options']['field'] = 'Это поле'; + +$app_list_strings['aow_date_operator']['now'] = ''; +$app_list_strings['aow_date_operator']['plus'] = '+'; +$app_list_strings['aow_date_operator']['minus'] = '-'; + +$app_list_strings['aow_assign_options']['all'] = 'ВСЕ пользователи'; +$app_list_strings['aow_assign_options']['role'] = 'ВСЕ пользователи роли'; +$app_list_strings['aow_assign_options']['security_group'] = 'ВСЕ пользователи из Группы'; + +$app_list_strings['aow_email_type_list']['Email Address'] = 'Вручную'; +$app_list_strings['aow_email_type_list']['Record Email'] = 'Отобранной записи'; +$app_list_strings['aow_email_type_list']['Specify User'] = 'Пользователя'; +$app_list_strings['aow_email_type_list']['Related Field'] = 'Связанного модуля'; + + + /********************************************************************************* * SugarCRM Community Edition is a customer relationship management program developed by @@ -546,272 +816,121 @@ $app_list_strings['marker_image_list']['hotel_4_stars'] = 'Отель, 4 звезды'; $app_list_strings['marker_image_list']['hotel_5_stars'] = 'Отель, 5 звёзд'; $app_list_strings['marker_image_list']['hotel'] = 'Отель'; -$app_list_strings['marker_image_list']['work_office'] = 'Офис'; -$app_list_strings['marker_image_list']['pagoda'] = 'Пагода'; -$app_list_strings['marker_image_list']['monument'] = 'Памятник'; -$app_list_strings['marker_image_list']['panoramic'] = 'Панорама'; -$app_list_strings['marker_image_list']['hairsalon'] = 'Парикмахерская'; -$app_list_strings['marker_image_list']['park'] = 'Парк'; -$app_list_strings['marker_image_list']['disabled_parking'] = 'Парковка для инвалидов'; -$app_list_strings['marker_image_list']['parking'] = 'Парковка'; -$app_list_strings['marker_image_list']['steam_train'] = 'Паровоз'; -$app_list_strings['marker_image_list']['regroup'] = 'Перегруппировка'; -$app_list_strings['marker_image_list']['park_and_ride'] = 'Перехватывающая парковка'; -$app_list_strings['marker_image_list']['picnic'] = 'Пикник'; -$app_list_strings['marker_image_list']['beach'] = 'Пляж'; -$app_list_strings['marker_image_list']['turn_left'] = 'Повернуть налево'; -$app_list_strings['marker_image_list']['turn_right'] = 'Повернуть направо'; -$app_list_strings['marker_image_list']['gifts'] = 'Подарки'; -$app_list_strings['marker_image_list']['train'] = 'Поезд'; -$app_list_strings['marker_image_list']['monday'] = 'Понедельник'; -$app_list_strings['marker_image_list']['port'] = 'Порт'; -$app_list_strings['marker_image_list']['places_visited'] = 'Посещённые места'; -$app_list_strings['marker_image_list']['embassy'] = 'Посольство'; -$app_list_strings['marker_image_list']['postal'] = 'Почта'; -$app_list_strings['marker_image_list']['laundromat'] = 'Прачечная самообслуживания'; -$app_list_strings['marker_image_list']['fast_food'] = 'Предприятие быстрого питания'; -$app_list_strings['marker_image_list']['grocery'] = 'Продовольственный магазин'; -$app_list_strings['marker_image_list']['car_rental'] = 'Прокат автомобилей'; -$app_list_strings['marker_image_list']['public_art'] = 'Публичное искусство'; -$app_list_strings['marker_image_list']['friday'] = 'Пятница'; -$app_list_strings['marker_image_list']['restaurant_african'] = 'Ресторан (Африканский)'; -$app_list_strings['marker_image_list']['restaurant_greek'] = 'Ресторан (Греческий)'; -$app_list_strings['marker_image_list']['restaurant_gourmet'] = 'Ресторан (для гурманов)'; -$app_list_strings['marker_image_list']['restaurant_indian'] = 'Ресторан (Индийский)'; -$app_list_strings['marker_image_list']['restaurant_italian'] = 'Ресторан (Итальянский)'; -$app_list_strings['marker_image_list']['restaurant_kebab'] = 'Ресторан (Кебаб)'; -$app_list_strings['marker_image_list']['restaurant_chinese'] = 'Ресторан (Китайский)'; -$app_list_strings['marker_image_list']['restaurant_korean'] = 'Ресторан (Корейский)'; -$app_list_strings['marker_image_list']['restaurant_mexican'] = 'Ресторан (Мексиканский)'; -$app_list_strings['marker_image_list']['restaurant_barbecue'] = 'Ресторан (Мясной)'; -$app_list_strings['marker_image_list']['restaurant_romantic'] = 'Ресторан (Романтический)'; -$app_list_strings['marker_image_list']['restaurant_fish_chips'] = 'Ресторан (Рыбные чипсы)'; -$app_list_strings['marker_image_list']['restaurant_fish'] = 'Ресторан (Рыбный)'; -$app_list_strings['marker_image_list']['restaurant_mediterranean'] = 'Ресторан (Средиземноморский)'; -$app_list_strings['marker_image_list']['restaurant_thai'] = 'Ресторан (Тайский)'; -$app_list_strings['marker_image_list']['restaurant_turkish'] = 'Ресторан (Турецкий)'; -$app_list_strings['marker_image_list']['restaurant_buffet'] = 'Ресторан (Шведский стол)'; -$app_list_strings['marker_image_list']['restaurant_japanese'] = 'Ресторан (Японский)'; -$app_list_strings['marker_image_list']['restaurant'] = 'Ресторан'; -$app_list_strings['marker_image_list']['taxiway'] = 'Рулёжная дорожка'; -$app_list_strings['marker_image_list']['garden'] = 'Сад'; -$app_list_strings['marker_image_list']['stoplight'] = 'Светофор'; -$app_list_strings['marker_image_list']['agriculture'] = 'Сельское хозяйство'; -$app_list_strings['marker_image_list']['synagogue'] = 'Синагога'; -$app_list_strings['marker_image_list']['vespa'] = 'Скутер'; -$app_list_strings['marker_image_list']['snow'] = 'Снег'; -$app_list_strings['marker_image_list']['sun'] = 'Солнце'; -$app_list_strings['marker_image_list']['expert'] = 'Специалист'; -$app_list_strings['marker_image_list']['liquor'] = 'Спиртные напитки'; -$app_list_strings['marker_image_list']['wednesday'] = 'Среда'; -$app_list_strings['marker_image_list']['stadium'] = 'Стадион'; -$app_list_strings['marker_image_list']['statue'] = 'Статуя'; -$app_list_strings['marker_image_list']['stop'] = 'Стоп'; -$app_list_strings['marker_image_list']['construction'] = 'Строительство'; -$app_list_strings['marker_image_list']['satursday'] = 'Суббота'; -$app_list_strings['marker_image_list']['court'] = 'Суд'; -$app_list_strings['marker_image_list']['supermarket'] = 'Супермаркет'; -$app_list_strings['marker_image_list']['taxi'] = 'Такси'; -$app_list_strings['marker_image_list']['customs'] = 'Таможня'; -$app_list_strings['marker_image_list']['tapas'] = 'Тапас'; -$app_list_strings['marker_image_list']['theater'] = 'Театр'; -$app_list_strings['marker_image_list']['text'] = 'Текст'; -$app_list_strings['marker_image_list']['telephone'] = 'Телефон'; -$app_list_strings['marker_image_list']['toll_station'] = 'Телефонная станция'; -$app_list_strings['marker_image_list']['theme_park'] = 'Тематический парк'; -$app_list_strings['marker_image_list']['terrace'] = 'Терраса'; -$app_list_strings['marker_image_list']['shopping_mall'] = 'Торговый пассаж'; -$app_list_strings['marker_image_list']['tram'] = 'Трамвай'; -$app_list_strings['marker_image_list']['toilets'] = 'Туалет'; -$app_list_strings['marker_image_list']['tunnel'] = 'Туннель'; -$app_list_strings['marker_image_list']['deptartment_store'] = 'Универсальный магазин'; -$app_list_strings['marker_image_list']['university'] = 'Университет'; -$app_list_strings['marker_image_list']['factory'] = 'Фабрика'; -$app_list_strings['marker_image_list']['festival'] = 'Фестиваль'; -$app_list_strings['marker_image_list']['fountain'] = 'Фонтан'; -$app_list_strings['marker_image_list']['photo'] = 'Фото'; -$app_list_strings['marker_image_list']['cable_car'] = 'Фуникулёр'; -$app_list_strings['marker_image_list']['fjord'] = 'Фьорд'; -$app_list_strings['marker_image_list']['hostel'] = 'Хостел'; -$app_list_strings['marker_image_list']['church'] = 'Церковь'; -$app_list_strings['marker_image_list']['teahouse'] = 'Чайный домик'; -$app_list_strings['marker_image_list']['chapel'] = 'Часовня'; -$app_list_strings['marker_image_list']['thursday'] = 'Четверг'; -$app_list_strings['marker_image_list']['school'] = 'Школа'; -$app_list_strings['marker_image_list']['highway'] = 'Шоссе'; -$app_list_strings['marker_image_list']['power_substation'] = 'Электрическая подстанция'; -$app_list_strings['marker_image_list']['power_plant'] = 'Электростанция'; -$app_list_strings['marker_image_list']['justice'] = 'Юстиция'; -$app_list_strings['marker_image_list']['days_dim'] = 'Dim(Вс)'; -$app_list_strings['marker_image_list']['days_dom'] = 'Dom(Вс)'; -$app_list_strings['marker_image_list']['days_jeu'] = 'Jeu(Чт)'; -$app_list_strings['marker_image_list']['days_jue'] = 'Jue(Чт)'; -$app_list_strings['marker_image_list']['days_lun'] = 'Lun(Пн)'; -$app_list_strings['marker_image_list']['days_mar'] = 'Mar(Вт)'; -$app_list_strings['marker_image_list']['days_mer'] = 'Mer(Ср)'; -$app_list_strings['marker_image_list']['days_mie'] = 'Mie(Ср)'; -$app_list_strings['marker_image_list']['days_qua'] = 'Qua(Ср)'; -$app_list_strings['marker_image_list']['days_qui'] = 'Qui(Чт)'; -$app_list_strings['marker_image_list']['days_sab'] = 'Sab(Сб)'; -$app_list_strings['marker_image_list']['days_sam'] = 'Sam(Сб)'; -$app_list_strings['marker_image_list']['days_seg'] = 'Seg(Пн)'; -$app_list_strings['marker_image_list']['days_sex'] = 'Sex(Пт)'; -$app_list_strings['marker_image_list']['days_ter'] = 'Ter(Вт)'; -$app_list_strings['marker_image_list']['days_ven'] = 'Ven(Пт)'; -$app_list_strings['marker_image_list']['days_vie'] = 'Vie(Пт)'; -$app_list_strings['marker_image_list']['wifi'] = 'Wi-Fi'; - - -/** - * Advanced OpenWorkflow, Automating SugarCRM. - * @package Advanced OpenWorkflow for SugarCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author SalesAgility - */ - - -$app_list_strings['moduleList']['AOW_WorkFlow'] = 'Процессы'; -$app_list_strings['moduleList']['AOW_Conditions'] = 'Условия'; -$app_list_strings['moduleList']['AOW_Processed'] = 'Контроль процессов'; -$app_list_strings['moduleList']['AOW_Actions'] = 'Действия'; - -$app_list_strings['aow_status_list']['Active'] = 'Активен'; -$app_list_strings['aow_status_list']['Inactive'] = 'Не активен'; - -$app_list_strings['aow_operator_list']['Equal_To'] = '='; -$app_list_strings['aow_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aow_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aow_operator_list']['Less_Than'] = '>'; -$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = '<='; - -$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; - -$app_list_strings['aow_process_status_list']['Complete'] = 'Завершён'; -$app_list_strings['aow_process_status_list']['Running'] = 'Выполняется'; -$app_list_strings['aow_process_status_list']['Pending'] = 'В ожидании'; -$app_list_strings['aow_process_status_list']['Failed'] = 'Ошибка выполнения'; - -$app_list_strings['aow_condition_operator_list']['And'] = 'И'; -$app_list_strings['aow_condition_operator_list']['OR'] = 'ИЛИ'; -$app_list_strings['aow_condition_operator_list']['OR'] = 'ИЛИ'; - -$app_list_strings['aow_condition_type_list']['Value'] = 'Значение'; -$app_list_strings['aow_condition_type_list']['Field'] = 'Поле'; -$app_list_strings['aow_condition_type_list']['Date'] = 'Дата'; -$app_list_strings['aow_condition_type_list']['Multi'] = 'Мультивыбор'; - -$app_list_strings['aow_action_type_list']['Value'] = 'Значение'; -$app_list_strings['aow_action_type_list']['Field'] = 'Поле'; -$app_list_strings['aow_action_type_list']['Date'] = 'Дата'; -$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Назначение в цикле'; -$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Назначение наименее занятого'; -$app_list_strings['aow_action_type_list']['Random'] = 'Случайное назначение'; - -$app_list_strings['aow_rel_action_type_list']['Value'] = 'Значение'; -$app_list_strings['aow_rel_action_type_list']['Field'] = 'Поле'; - -$app_list_strings['aow_date_type_list'][''] = ''; -$app_list_strings['aow_date_type_list']['minute'] = 'минут'; -$app_list_strings['aow_date_type_list']['hour'] = 'часов'; -$app_list_strings['aow_date_type_list']['day'] = 'дней'; -$app_list_strings['aow_date_type_list']['week'] = 'недель'; -$app_list_strings['aow_date_type_list']['month'] = 'месяцев'; -$app_list_strings['aow_date_type_list']['business_hours'] = 'рабочих часов'; - -$app_list_strings['aow_date_options']['now'] = 'Сейчас'; -$app_list_strings['aow_date_options']['field'] = 'Это поле'; - -$app_list_strings['aow_date_operator']['now'] = ''; -$app_list_strings['aow_date_operator']['plus'] = '+'; -$app_list_strings['aow_date_operator']['minus'] = '-'; - -$app_list_strings['aow_assign_options']['all'] = 'ВСЕ пользователи'; -$app_list_strings['aow_assign_options']['role'] = 'ВСЕ пользователи роли'; -$app_list_strings['aow_assign_options']['security_group'] = 'ВСЕ пользователи из Группы'; - -$app_list_strings['aow_email_type_list']['Email Address'] = 'Вручную'; -$app_list_strings['aow_email_type_list']['Record Email'] = 'Отобранной записи'; -$app_list_strings['aow_email_type_list']['Specify User'] = 'Пользователя'; -$app_list_strings['aow_email_type_list']['Related Field'] = 'Связанного модуля'; - - - - -/** - * - * @package Advanced OpenPortal - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - - -$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'События обращения'; -$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Обновления обращения'; -$app_list_strings['moduleList']['AOP_Case_Events'] = 'События обращения'; -$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Обновления обращения'; -$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Please reply above this line =========='; +$app_list_strings['marker_image_list']['work_office'] = 'Офис'; +$app_list_strings['marker_image_list']['pagoda'] = 'Пагода'; +$app_list_strings['marker_image_list']['monument'] = 'Памятник'; +$app_list_strings['marker_image_list']['panoramic'] = 'Панорама'; +$app_list_strings['marker_image_list']['hairsalon'] = 'Парикмахерская'; +$app_list_strings['marker_image_list']['park'] = 'Парк'; +$app_list_strings['marker_image_list']['disabled_parking'] = 'Парковка для инвалидов'; +$app_list_strings['marker_image_list']['parking'] = 'Парковка'; +$app_list_strings['marker_image_list']['steam_train'] = 'Паровоз'; +$app_list_strings['marker_image_list']['regroup'] = 'Перегруппировка'; +$app_list_strings['marker_image_list']['park_and_ride'] = 'Перехватывающая парковка'; +$app_list_strings['marker_image_list']['picnic'] = 'Пикник'; +$app_list_strings['marker_image_list']['beach'] = 'Пляж'; +$app_list_strings['marker_image_list']['turn_left'] = 'Повернуть налево'; +$app_list_strings['marker_image_list']['turn_right'] = 'Повернуть направо'; +$app_list_strings['marker_image_list']['gifts'] = 'Подарки'; +$app_list_strings['marker_image_list']['train'] = 'Поезд'; +$app_list_strings['marker_image_list']['monday'] = 'Понедельник'; +$app_list_strings['marker_image_list']['port'] = 'Порт'; +$app_list_strings['marker_image_list']['places_visited'] = 'Посещённые места'; +$app_list_strings['marker_image_list']['embassy'] = 'Посольство'; +$app_list_strings['marker_image_list']['postal'] = 'Почта'; +$app_list_strings['marker_image_list']['laundromat'] = 'Прачечная самообслуживания'; +$app_list_strings['marker_image_list']['fast_food'] = 'Предприятие быстрого питания'; +$app_list_strings['marker_image_list']['grocery'] = 'Продовольственный магазин'; +$app_list_strings['marker_image_list']['car_rental'] = 'Прокат автомобилей'; +$app_list_strings['marker_image_list']['public_art'] = 'Публичное искусство'; +$app_list_strings['marker_image_list']['friday'] = 'Пятница'; +$app_list_strings['marker_image_list']['restaurant_african'] = 'Ресторан (Африканский)'; +$app_list_strings['marker_image_list']['restaurant_greek'] = 'Ресторан (Греческий)'; +$app_list_strings['marker_image_list']['restaurant_gourmet'] = 'Ресторан (для гурманов)'; +$app_list_strings['marker_image_list']['restaurant_indian'] = 'Ресторан (Индийский)'; +$app_list_strings['marker_image_list']['restaurant_italian'] = 'Ресторан (Итальянский)'; +$app_list_strings['marker_image_list']['restaurant_kebab'] = 'Ресторан (Кебаб)'; +$app_list_strings['marker_image_list']['restaurant_chinese'] = 'Ресторан (Китайский)'; +$app_list_strings['marker_image_list']['restaurant_korean'] = 'Ресторан (Корейский)'; +$app_list_strings['marker_image_list']['restaurant_mexican'] = 'Ресторан (Мексиканский)'; +$app_list_strings['marker_image_list']['restaurant_barbecue'] = 'Ресторан (Мясной)'; +$app_list_strings['marker_image_list']['restaurant_romantic'] = 'Ресторан (Романтический)'; +$app_list_strings['marker_image_list']['restaurant_fish_chips'] = 'Ресторан (Рыбные чипсы)'; +$app_list_strings['marker_image_list']['restaurant_fish'] = 'Ресторан (Рыбный)'; +$app_list_strings['marker_image_list']['restaurant_mediterranean'] = 'Ресторан (Средиземноморский)'; +$app_list_strings['marker_image_list']['restaurant_thai'] = 'Ресторан (Тайский)'; +$app_list_strings['marker_image_list']['restaurant_turkish'] = 'Ресторан (Турецкий)'; +$app_list_strings['marker_image_list']['restaurant_buffet'] = 'Ресторан (Шведский стол)'; +$app_list_strings['marker_image_list']['restaurant_japanese'] = 'Ресторан (Японский)'; +$app_list_strings['marker_image_list']['restaurant'] = 'Ресторан'; +$app_list_strings['marker_image_list']['taxiway'] = 'Рулёжная дорожка'; +$app_list_strings['marker_image_list']['garden'] = 'Сад'; +$app_list_strings['marker_image_list']['stoplight'] = 'Светофор'; +$app_list_strings['marker_image_list']['agriculture'] = 'Сельское хозяйство'; +$app_list_strings['marker_image_list']['synagogue'] = 'Синагога'; +$app_list_strings['marker_image_list']['vespa'] = 'Скутер'; +$app_list_strings['marker_image_list']['snow'] = 'Снег'; +$app_list_strings['marker_image_list']['sun'] = 'Солнце'; +$app_list_strings['marker_image_list']['expert'] = 'Специалист'; +$app_list_strings['marker_image_list']['liquor'] = 'Спиртные напитки'; +$app_list_strings['marker_image_list']['wednesday'] = 'Среда'; +$app_list_strings['marker_image_list']['stadium'] = 'Стадион'; +$app_list_strings['marker_image_list']['statue'] = 'Статуя'; +$app_list_strings['marker_image_list']['stop'] = 'Стоп'; +$app_list_strings['marker_image_list']['construction'] = 'Строительство'; +$app_list_strings['marker_image_list']['satursday'] = 'Суббота'; +$app_list_strings['marker_image_list']['court'] = 'Суд'; +$app_list_strings['marker_image_list']['supermarket'] = 'Супермаркет'; +$app_list_strings['marker_image_list']['taxi'] = 'Такси'; +$app_list_strings['marker_image_list']['customs'] = 'Таможня'; +$app_list_strings['marker_image_list']['tapas'] = 'Тапас'; +$app_list_strings['marker_image_list']['theater'] = 'Театр'; +$app_list_strings['marker_image_list']['text'] = 'Текст'; +$app_list_strings['marker_image_list']['telephone'] = 'Телефон'; +$app_list_strings['marker_image_list']['toll_station'] = 'Телефонная станция'; +$app_list_strings['marker_image_list']['theme_park'] = 'Тематический парк'; +$app_list_strings['marker_image_list']['terrace'] = 'Терраса'; +$app_list_strings['marker_image_list']['shopping_mall'] = 'Торговый пассаж'; +$app_list_strings['marker_image_list']['tram'] = 'Трамвай'; +$app_list_strings['marker_image_list']['toilets'] = 'Туалет'; +$app_list_strings['marker_image_list']['tunnel'] = 'Туннель'; +$app_list_strings['marker_image_list']['deptartment_store'] = 'Универсальный магазин'; +$app_list_strings['marker_image_list']['university'] = 'Университет'; +$app_list_strings['marker_image_list']['factory'] = 'Фабрика'; +$app_list_strings['marker_image_list']['festival'] = 'Фестиваль'; +$app_list_strings['marker_image_list']['fountain'] = 'Фонтан'; +$app_list_strings['marker_image_list']['photo'] = 'Фото'; +$app_list_strings['marker_image_list']['cable_car'] = 'Фуникулёр'; +$app_list_strings['marker_image_list']['fjord'] = 'Фьорд'; +$app_list_strings['marker_image_list']['hostel'] = 'Хостел'; +$app_list_strings['marker_image_list']['church'] = 'Церковь'; +$app_list_strings['marker_image_list']['teahouse'] = 'Чайный домик'; +$app_list_strings['marker_image_list']['chapel'] = 'Часовня'; +$app_list_strings['marker_image_list']['thursday'] = 'Четверг'; +$app_list_strings['marker_image_list']['school'] = 'Школа'; +$app_list_strings['marker_image_list']['highway'] = 'Шоссе'; +$app_list_strings['marker_image_list']['power_substation'] = 'Электрическая подстанция'; +$app_list_strings['marker_image_list']['power_plant'] = 'Электростанция'; +$app_list_strings['marker_image_list']['justice'] = 'Юстиция'; +$app_list_strings['marker_image_list']['days_dim'] = 'Dim(Вс)'; +$app_list_strings['marker_image_list']['days_dom'] = 'Dom(Вс)'; +$app_list_strings['marker_image_list']['days_jeu'] = 'Jeu(Чт)'; +$app_list_strings['marker_image_list']['days_jue'] = 'Jue(Чт)'; +$app_list_strings['marker_image_list']['days_lun'] = 'Lun(Пн)'; +$app_list_strings['marker_image_list']['days_mar'] = 'Mar(Вт)'; +$app_list_strings['marker_image_list']['days_mer'] = 'Mer(Ср)'; +$app_list_strings['marker_image_list']['days_mie'] = 'Mie(Ср)'; +$app_list_strings['marker_image_list']['days_qua'] = 'Qua(Ср)'; +$app_list_strings['marker_image_list']['days_qui'] = 'Qui(Чт)'; +$app_list_strings['marker_image_list']['days_sab'] = 'Sab(Сб)'; +$app_list_strings['marker_image_list']['days_sam'] = 'Sam(Сб)'; +$app_list_strings['marker_image_list']['days_seg'] = 'Seg(Пн)'; +$app_list_strings['marker_image_list']['days_sex'] = 'Sex(Пт)'; +$app_list_strings['marker_image_list']['days_ter'] = 'Ter(Вт)'; +$app_list_strings['marker_image_list']['days_ven'] = 'Ven(Пт)'; +$app_list_strings['marker_image_list']['days_vie'] = 'Vie(Пт)'; +$app_list_strings['marker_image_list']['wifi'] = 'Wi-Fi'; -$app_list_strings['case_state_dom'] = - array ( - 'Open' => 'Открыто', - 'Closed' => 'Закрыто', - ); -$app_list_strings['case_state_default_key'] = 'Open'; -$app_list_strings['case_status_default_key'] = 'Open_New'; -$app_list_strings['case_status_dom'] = - array ( - 'Open_New' => 'Новое', - 'Open_Assigned' => 'Назначенное', - 'Closed_Closed' => 'Закрытое', - 'Open_Pending Input' => 'Ожидание решения', - 'Closed_Rejected' => 'Отклонённое', - 'Closed_Duplicate' => 'Продублированное', - ); - - $app_list_strings['aop_distribution_method'] = - array ( - 'singleUser' => 'Указанный пользователь', - 'roundRobin' => 'В цикле', - 'leastBusy' => 'Наименее занятой', - ); /** * Products, Quotations & Invoices modules. @@ -942,123 +1061,4 @@ $app_strings['LBL_NO_TEMPLATE'] = 'ОШИБКА\nШаблоны не обнаружены.\nОткройте модуль PDF-шаблонов и создайте необходимый шаблон.'; - -/** - * Advanced OpenReports, SugarCRM Reporting. - * @package Advanced OpenReports for SugarCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author SalesAgility - */ - - -$app_list_strings['moduleList']['AOR_Reports'] = 'Отчёты'; -$app_list_strings['moduleList']['AOR_Conditions'] = 'Условия отчёта'; -$app_list_strings['moduleList']['AOR_Charts'] = 'Диаграммы отчета'; -$app_list_strings['moduleList']['AOR_Fields'] = 'Поля отчета'; - -$app_list_strings['aor_operator_list']['Equal_To'] = '='; -$app_list_strings['aor_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aor_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aor_operator_list']['Less_Than'] = '<'; -$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = '<='; - -$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; - -$app_list_strings['aor_condition_operator_list']['And'] = 'И'; -$app_list_strings['aor_condition_operator_list']['OR'] = 'ИЛИ'; - -$app_list_strings['aor_condition_type_list']['Value'] = 'Значение'; -$app_list_strings['aor_condition_type_list']['Field'] = 'Поле'; -$app_list_strings['aor_condition_type_list']['Date'] = 'Дата'; -$app_list_strings['aor_condition_type_list']['Multi'] = 'Мультивыбор'; - -$app_list_strings['aor_date_type_list'][''] = ''; -$app_list_strings['aor_date_type_list']['minute'] = 'мин.'; -$app_list_strings['aor_date_type_list']['hour'] = 'час.'; -$app_list_strings['aor_date_type_list']['day'] = 'дн.'; -$app_list_strings['aor_date_type_list']['week'] = 'нед.'; -$app_list_strings['aor_date_type_list']['month'] = 'мес.'; -$app_list_strings['aor_date_type_list']['business_hours'] = 'рабочих часов'; - -$app_list_strings['aor_date_options']['now'] = 'Сейчас'; -$app_list_strings['aor_date_options']['field'] = 'Это поле'; - -$app_list_strings['aor_date_operator']['now'] = ''; -$app_list_strings['aor_date_operator']['plus'] = '+'; -$app_list_strings['aor_date_operator']['minus'] = '-'; -$app_list_strings['aor_sort_operator'][''] = ''; -$app_list_strings['aor_sort_operator']['ASC'] = 'Восходящая'; -$app_list_strings['aor_sort_operator']['DESC'] = 'Нисходящая'; - -$app_list_strings['aor_function_list'][''] = ''; -$app_list_strings['aor_function_list']['COUNT'] = 'КОЛИЧЕСТВО'; -$app_list_strings['aor_function_list']['MIN'] = 'МИНИМУМ'; -$app_list_strings['aor_function_list']['MAX'] = 'МАКСИМУМ'; -$app_list_strings['aor_function_list']['SUM'] = 'СУММА'; -$app_list_strings['aor_function_list']['AVG'] = 'СРЕДНЕЕ'; - -/** - * Extensions to SugarCRM - * @package Reschedule for SugarCRM - * @subpackage Products - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - -$app_list_strings['call_reschedule_dom'][''] = ''; -$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Сотрудник отсутствует'; -$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'Сотрудник занят'; - -$app_strings['LBL_RESCHEDULE_LABEL'] = 'Звонок откладывается'; -$app_strings['LBL_RESCHEDULE_TITLE'] = 'Заполните следующие поля:'; -$app_strings['LBL_RESCHEDULE_DATE'] = 'Дата:'; -$app_strings['LBL_RESCHEDULE_REASON'] = 'Причина:'; -$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Укажите правильную дату'; -$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Укажите причину, по которой звонок отложен'; - -$app_strings['LBL_RESCHEDULE_PANEL'] = 'Отложенные звонки'; -$app_strings['LBL_RESCHEDULE_HISTORY'] = 'История дозвона'; -$app_strings['LBL_RESCHEDULE_COUNT'] = 'Попыток дозвона'; -$app_strings['LBL_RESCHEDULE'] = 'Отложить звонок'; - - - ?> \ No newline at end of file diff --git a/custom/application/Ext/TableDictionary/tabledictionary.ext.php b/custom/application/Ext/TableDictionary/tabledictionary.ext.php index 64915ed19fb..5e5d2f18ef6 100755 --- a/custom/application/Ext/TableDictionary/tabledictionary.ext.php +++ b/custom/application/Ext/TableDictionary/tabledictionary.ext.php @@ -3,77 +3,77 @@ //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_fp_event_delegates_1MetaData.php'); +include('custom/metadata/aos_contracts_documentsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_defaultsMetaData.php'); +include('custom/metadata/aow_processed_aow_actionsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_recordsMetaData.php'); +include('custom/metadata/aos_quotes_aos_invoicesMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_aos_invoicesMetaData.php'); +include('custom/metadata/jjwg_maps_jjwg_markersMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/jjwg_maps_jjwg_areasMetaData.php'); +include('custom/metadata/fp_events_fp_event_delegates_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_fp_event_locations_1MetaData.php'); +include('custom/metadata/fp_events_prospects_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/jjwg_maps_jjwg_markersMetaData.php'); +include('custom/metadata/jjwg_maps_jjwg_areasMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aow_processed_aow_actionsMetaData.php'); +include('custom/metadata/aos_quotes_aos_contractsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_prospects_1MetaData.php'); +include('custom/metadata/securitygroups_usersMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_usersMetaData.php'); +include('custom/metadata/fp_event_locations_fp_events_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_contracts_documentsMetaData.php'); +include('custom/metadata/securitygroups_acl_rolesMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_acl_rolesMetaData.php'); +include('custom/metadata/securitygroups_recordsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_aos_contractsMetaData.php'); +include('custom/metadata/fp_events_fp_event_locations_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_projectMetaData.php'); +include('custom/metadata/securitygroups_defaultsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_event_locations_fp_events_1MetaData.php'); +include('custom/metadata/aos_quotes_projectMetaData.php'); ?> \ No newline at end of file diff --git a/custom/include/social/get_feed_data.php b/custom/include/social/get_feed_data.php index e05343fc4e5..7d0d75d9c14 100755 --- a/custom/include/social/get_feed_data.php +++ b/custom/include/social/get_feed_data.php @@ -72,9 +72,10 @@ while ($i < count($tweets)) { if(!isset($tweets[$i]['retweet_status'])){ - if (count($tweets[$i]['entities']['urls'][0]['url']) > 0) { - $tweets[$i]['text'] = replace_urls($db, $tweets[$i]); - } + $limit = 110; + + $tweets[$i]['text'] = format_feed_tweets($db, $tweets[$i],$limit); + if (count($tweets[$i]['entities']['hashtags']) > 0) { $tweets[$i]['text'] = replace_hashtags($db, $tweets[$i]); } diff --git a/custom/include/social/language/en_us.lang.php b/custom/include/social/language/en_us.lang.php deleted file mode 100755 index 7edaf152c4c..00000000000 --- a/custom/include/social/language/en_us.lang.php +++ /dev/null @@ -1,12 +0,0 @@ - 'Twitter User', - 'FACEBOOK_USER_C' => 'Facebook User', -); \ No newline at end of file diff --git a/custom/include/social/twitter/twitter_helper.php b/custom/include/social/twitter/twitter_helper.php index dc8f4211e33..a80b2a25b6c 100755 --- a/custom/include/social/twitter/twitter_helper.php +++ b/custom/include/social/twitter/twitter_helper.php @@ -1,8 +1,9 @@ query($query); while ($row = $db->fetchByAssoc($results)) { @@ -12,33 +13,32 @@ function check_enabled($db,$type){ } -function replace_urls($db,$array) +function format_feed_tweets($db, $array, $limit) { - $i = 0; - $count = count($array['entities']['urls']); + if (strlen($array['text']) > $limit) { + $array['text'] = '

      ' . substr($array['text'], 0, $limit) . '. . .
      View in Twitter

      '; - while($i < $count) { + } else { + $array['text'] = '

      ' . $array['text'] . '
      View in Twitter

      '; - $array['text'] = str_replace($array['entities']['urls'][$i]['url'], "" . $array['entities']['urls'][$i]['display_url'] . "", $array['text']); - $array['text'] = $db->quote( $array['text']); - $i++; } - return $array['text']; + $array['text'] = $db->quote($array['text']); + return $array['text']; } -function replace_hashtags($db,$array) +function replace_hashtags($db, $array) { $i = 0; $count = count($array['entities']['hashtags']); - while($i < $count) { + while ($i < $count) { - $array['text'] = str_replace('#'. $array['entities']['hashtags'][$i]['text'], "" . "#" . $array['entities']['hashtags'][$i]['text']. "", $array['text']); + $array['text'] = str_replace('#' . $array['entities']['hashtags'][$i]['text'], "" . "#" . $array['entities']['hashtags'][$i]['text'] . "", $array['text']); $i++; } @@ -46,15 +46,15 @@ function replace_hashtags($db,$array) } -function replace_users($db,$array) +function replace_users($db, $array) { $i = 0; $count = count($array['entities']['user_mentions']); - while($i < $count) { + while ($i < $count) { - $array['text'] = str_replace('@'. $array['entities']['user_mentions'][$i]['screen_name'], "" . "@" . $array['entities']['user_mentions'][$i]['screen_name']. "", $array['text']); + $array['text'] = str_replace('@' . $array['entities']['user_mentions'][$i]['screen_name'], "" . "@" . $array['entities']['user_mentions'][$i]['screen_name'] . "", $array['text']); $i++; } @@ -63,7 +63,8 @@ function replace_users($db,$array) } -function duplicate_check($db,$text,$date){ +function duplicate_check($db, $text, $date) +{ $sql_check = "SELECT * FROM sugarfeed WHERE description = '" . $text . "' AND date_entered = '" . $date . "'"; $results = $db->query($sql_check); @@ -76,7 +77,8 @@ function duplicate_check($db,$text,$date){ return false; } -function check_auth($url){ +function check_auth($url) +{ $url = $url . "/custom/include/social/twitter/twitter_auth/callback.php"; @@ -92,26 +94,26 @@ function check_auth($url){ ); - /* Build TwitterOAuth object with client credentials. */ - $connection = new TwitterOAuth($settings['consumer_key'], $settings['consumer_secret']); + /* Build TwitterOAuth object with client credentials. */ + $connection = new TwitterOAuth($settings['consumer_key'], $settings['consumer_secret']); - /* Get temporary credentials. */ - $request_token = $connection->getRequestToken($url); + /* Get temporary credentials. */ + $request_token = $connection->getRequestToken($url); - /* Save temporary credentials to session. */ - $_SESSION['oauth_token'] = $token = $request_token['oauth_token']; - $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; + /* Save temporary credentials to session. */ + $_SESSION['oauth_token'] = $token = $request_token['oauth_token']; + $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; - $html =''; + $html = ''; - /* Build authorize URL and redirect user to Twitter. */ - $url = $connection->getAuthorizeURL($token); - $html = "Log into Twitter"; + /* Build authorize URL and redirect user to Twitter. */ + $url = $connection->getAuthorizeURL($token); + $html = "Log into Twitter"; - $_REQUEST['html'] = $html; - $_REQUEST['request_token'] = $request_token; + $_REQUEST['html'] = $html; + $_REQUEST['request_token'] = $request_token; - return $connection; + return $connection; } \ No newline at end of file diff --git a/custom/include/social/twitter/twitterapi.php b/custom/include/social/twitter/twitterapi.php index 6a776bd3219..3db560ed550 100755 --- a/custom/include/social/twitter/twitterapi.php +++ b/custom/include/social/twitter/twitterapi.php @@ -13,7 +13,7 @@ require('custom/modules/Connectors/connectors/sources/ext/rest/twitter/config.php'); require('custom/include/social/twitter/twitter_helper.php'); -global $sugar_config; +global $sugar_config, $db; /* * Pull in connector settings for creating the authentication between Suite and Twitter. @@ -44,12 +44,13 @@ /* If method is set change API call made. Test is called by default. */ $tweets = $connection->get('statuses/user_timeline', array('screen_name' => $_REQUEST['twitter_user'])); -$formatted_display = format_tweets($tweets); +$formatted_display = format_tweets($db,$tweets); echo $formatted_display; -function format_tweets($tweets){ +function format_tweets($db,$tweets){ + $i = 0; $html =''; @@ -61,19 +62,26 @@ function format_tweets($tweets){ $html .= "" ."@". $tweets[0]['user']['screen_name'] .""; $html .= ""; - while($i < count($tweets)){ - $u = 0; - $count = count($tweets[$i]['entities']['urls']); - while($u < $count) { - $tweets[$i]['text'] = str_replace($tweets[$i]['entities']['urls'][$u]['url'], "". $tweets[$i]['entities']['urls'][$u]['display_url'] ." ",$tweets[$i]['text']); - $u++; + foreach($tweets as $tweet){ + + $limit = 255; + + $tweet['text'] = format_feed_tweets($db,$tweet, $limit); + + if (count($tweet['entities']['hashtags']) > 0) { + $tweets['text'] = replace_hashtags($db, $tweet); } - $html .= "
      "; - $html .= "

      ". $tweets[$i]['text']."

      "; + if (count($tweet['entities']['user_mentions']) > 0) { + $tweet['text'] = replace_users($db, $tweet); + } + + $html .= "
      "; + $html .= "

      ". $tweet['text']."

      "; $html .= "
      "; $i++; } + return $html . '
      '; } \ No newline at end of file diff --git a/custom/modules/Accounts/metadata/detailviewdefs.php b/custom/modules/Accounts/metadata/detailviewdefs.php new file mode 100755 index 00000000000..787dc6b9e48 --- /dev/null +++ b/custom/modules/Accounts/metadata/detailviewdefs.php @@ -0,0 +1,242 @@ + + array ( + 'DetailView' => + array ( + 'templateMeta' => + array ( + 'form' => + array ( + 'buttons' => + array ( + 0 => 'EDIT', + 1 => 'DUPLICATE', + 2 => 'DELETE', + 3 => 'FIND_DUPLICATES', + ), + ), + 'maxColumns' => '2', + 'widths' => + array ( + 0 => + array ( + 'label' => '10', + 'field' => '30', + ), + 1 => + array ( + 'label' => '10', + 'field' => '30', + ), + ), + 'includes' => + array ( + 0 => + array ( + 'file' => 'modules/Accounts/Account.js', + ), + ), + ), + 'panels' => + array ( + 'lbl_account_information' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'name', + 'comment' => 'Name of the Company', + 'label' => 'LBL_NAME', + 'displayParams' => + array ( + 'enableConnectors' => true, + 'module' => 'Accounts', + 'connectors' => + array ( + 0 => 'ext_rest_linkedin', + ), + ), + ), + 1 => + array ( + 'name' => 'phone_office', + 'comment' => 'The office phone number', + 'label' => 'LBL_PHONE_OFFICE', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'website', + 'type' => 'link', + 'label' => 'LBL_WEBSITE', + 'displayParams' => + array ( + 'link_target' => '_blank', + ), + ), + 1 => + array ( + 'name' => 'phone_fax', + 'comment' => 'The fax phone number of this company', + 'label' => 'LBL_FAX', + ), + ), + 2 => + array ( + 0 => + array ( + 'name' => 'billing_address_street', + 'label' => 'LBL_BILLING_ADDRESS', + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'billing', + ), + ), + 1 => + array ( + 'name' => 'shipping_address_street', + 'label' => 'LBL_SHIPPING_ADDRESS', + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'shipping', + ), + ), + ), + 3 => + array ( + 0 => + array ( + 'name' => 'email1', + 'studio' => 'false', + 'label' => 'LBL_EMAIL', + ), + ), + 4 => + array ( + 0 => + array ( + 'name' => 'description', + 'comment' => 'Full text of the note', + 'label' => 'LBL_DESCRIPTION', + ), + ), + ), + 'LBL_PANEL_ADVANCED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'account_type', + 'comment' => 'The Company is of this type', + 'label' => 'LBL_TYPE', + ), + 1 => + array ( + 'name' => 'industry', + 'comment' => 'The company belongs in this industry', + 'label' => 'LBL_INDUSTRY', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'annual_revenue', + 'comment' => 'Annual revenue for this company', + 'label' => 'LBL_ANNUAL_REVENUE', + ), + 1 => + array ( + 'name' => 'employees', + 'comment' => 'Number of employees, varchar to accomodate for both number (100) or range (50-100)', + 'label' => 'LBL_EMPLOYEES', + ), + ), + 2 => + array ( + 0 => + array ( + 'name' => 'sic_code', + 'comment' => 'SIC code of the account', + 'label' => 'LBL_SIC_CODE', + ), + 1 => + array ( + 'name' => 'ticker_symbol', + 'comment' => 'The stock trading (ticker) symbol for the company', + 'label' => 'LBL_TICKER_SYMBOL', + ), + ), + 3 => + array ( + 0 => + array ( + 'name' => 'parent_name', + 'label' => 'LBL_MEMBER_OF', + ), + 1 => + array ( + 'name' => 'ownership', + 'comment' => '', + 'label' => 'LBL_OWNERSHIP', + ), + ), + 4 => + array ( + 0 => 'campaign_name', + 1 => + array ( + 'name' => 'rating', + 'comment' => 'An arbitrary rating for this company for use in comparisons with others', + 'label' => 'LBL_RATING', + ), + ), + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'assigned_user_name', + 'label' => 'LBL_ASSIGNED_TO', + ), + 1 => + array ( + 'name' => 'date_modified', + 'label' => 'LBL_DATE_MODIFIED', + 'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'date_entered', + 'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value}', + ), + ), + ), + 'LBL_PANEL_SOCIAL_FEED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'twitter_user_c', + 'label' => 'LBL_TWITTER_USER_C', + ), + ), + ), + ), + ), + ), +); \ No newline at end of file diff --git a/custom/modules/Accounts/metadata/editviewdefs.php b/custom/modules/Accounts/metadata/editviewdefs.php index a6d10ca0aa2..f5f4a494534 100755 --- a/custom/modules/Accounts/metadata/editviewdefs.php +++ b/custom/modules/Accounts/metadata/editviewdefs.php @@ -116,10 +116,6 @@ 'name' => 'description', 'label' => 'LBL_DESCRIPTION', ), - 1 => - array ( - 'name' => 'twitter_user_c', - ), ), ), 'LBL_PANEL_ADVANCED' => @@ -166,11 +162,6 @@ 0 => array ( 0 => - array ( - 'name' => 'facebook_user_c', - 'label' => 'LBL_FACEBOOK_USER_C', - ), - 1 => array ( 'name' => 'twitter_user_c', 'label' => 'LBL_TWITTER_USER_C', diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php index 147d5f8d2c3..b4058f99b10 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php @@ -1,13 +1,7 @@ array ( - 'Accounts' => - array ( - ), - 'Contacts' => - array ( - ), ), ); \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php index 25b82e86ff7..56d635d69a1 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php index 870e5122e17..8b5d240ab66 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php index 256e97f28aa..206c4bafef3 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php @@ -1,10 +1,13 @@ array ( 'Accounts' => array ( ), + 'Leads' => + array ( + ), ), ); \ No newline at end of file diff --git a/custom/modules/Connectors/controller.php b/custom/modules/Connectors/controller.php index 7ac54881f55..ed85de20b10 100755 --- a/custom/modules/Connectors/controller.php +++ b/custom/modules/Connectors/controller.php @@ -308,7 +308,6 @@ function add_social_field($module, $field_name) $layout[$module] = $field_name; require_once('ModuleInstall/ModuleInstaller.php'); - require_once('custom/include/social/Language/en_us.lang.php'); $moduleInstaller = new ModuleInstaller(); $moduleInstaller->install_custom_fields($field); //$moduleInstaller->addFieldsToLayout($layout); diff --git a/custom/modules/Connectors/metadata/connectors.php b/custom/modules/Connectors/metadata/connectors.php index 0a755249c03..e3708455ae3 100755 --- a/custom/modules/Connectors/metadata/connectors.php +++ b/custom/modules/Connectors/metadata/connectors.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/metadata/display_config.php b/custom/modules/Connectors/metadata/display_config.php index 8d3a9a1bf4d..86aa10e9283 100755 --- a/custom/modules/Connectors/metadata/display_config.php +++ b/custom/modules/Connectors/metadata/display_config.php @@ -1,21 +1,20 @@ array ( 'ext_rest_insideview' => 'ext_rest_insideview', 'ext_rest_linkedin' => 'ext_rest_linkedin', - 'ext_rest_facebook' => 'ext_rest_facebook', 'ext_rest_twitter' => 'ext_rest_twitter', ), 'Contacts' => array ( 'ext_rest_insideview' => 'ext_rest_insideview', - 'ext_rest_facebook' => 'ext_rest_facebook', ), 'Leads' => array ( 'ext_rest_insideview' => 'ext_rest_insideview', + 'ext_rest_twitter' => 'ext_rest_twitter', ), 'Opportunities' => array ( diff --git a/custom/modules/Connectors/metadata/searchdefs.php b/custom/modules/Connectors/metadata/searchdefs.php index b2a2cb7f334..0f90ba51c1e 100755 --- a/custom/modules/Connectors/metadata/searchdefs.php +++ b/custom/modules/Connectors/metadata/searchdefs.php @@ -1,5 +1,5 @@ array ( @@ -22,18 +22,12 @@ array ( ), ), - 'ext_rest_facebook' => + 'ext_rest_twitter' => array ( 'Accounts' => array ( ), - 'Contacts' => - array ( - ), - ), - 'ext_rest_twitter' => - array ( - 'Accounts' => + 'Leads' => array ( ), ), diff --git a/custom/modules/Contacts/language/en_us.lang.php b/custom/modules/Contacts/language/en_us.lang.php deleted file mode 100755 index 4c0d058cdf3..00000000000 --- a/custom/modules/Contacts/language/en_us.lang.php +++ /dev/null @@ -1,13 +0,0 @@ - 'Twitter User', - 'FACEBOOK_USER_C' => 'Facebook User', -); \ No newline at end of file diff --git a/custom/modules/Contacts/metadata/detailviewdefs.php b/custom/modules/Contacts/metadata/detailviewdefs.php index 77f4d74d1c6..ec2693c89f1 100755 --- a/custom/modules/Contacts/metadata/detailviewdefs.php +++ b/custom/modules/Contacts/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( @@ -151,28 +151,6 @@ 'comment' => 'Full text of the note', 'label' => 'LBL_DESCRIPTION', ), - 1 => - array ( - 'name' => 'twitter_user_c', - ), - ), - 7 => - array ( - 0 => - array ( - 'name' => 'facebookAPI_user_c', - ), - 1 => - array ( - 'name' => 'twitter_user_c', - ), - ), - 8 => - array ( - 0 => - array ( - 'name' => 'facebook_user_c', - ), ), ), 'LBL_PANEL_ADVANCED' => diff --git a/custom/modules/Contacts/metadata/editviewdefs.php b/custom/modules/Contacts/metadata/editviewdefs.php deleted file mode 100755 index 3ed41d7a6e1..00000000000 --- a/custom/modules/Contacts/metadata/editviewdefs.php +++ /dev/null @@ -1,221 +0,0 @@ - - array ( - 'templateMeta' => - array ( - 'form' => - array ( - 'hidden' => - array ( - 0 => '', - 1 => '', - 2 => '', - 3 => '', - 4 => '', - ), - ), - 'maxColumns' => '2', - 'widths' => - array ( - 0 => - array ( - 'label' => '10', - 'field' => '30', - ), - 1 => - array ( - 'label' => '10', - 'field' => '30', - ), - ), - ), - 'panels' => - array ( - 'lbl_contact_information' => - array ( - 0 => - array ( - 0 => - array ( - 'name' => 'first_name', - 'customCode' => '{html_options name="salutation" id="salutation" options=$fields.salutation.options selected=$fields.salutation.value} ', - ), - ), - 1 => - array ( - 0 => - array ( - 'name' => 'last_name', - ), - 1 => - array ( - 'name' => 'phone_work', - 'comment' => 'Work phone number of the contact', - 'label' => 'LBL_OFFICE_PHONE', - ), - ), - 2 => - array ( - 0 => - array ( - 'name' => 'title', - 'comment' => 'The title of the contact', - 'label' => 'LBL_TITLE', - ), - 1 => - array ( - 'name' => 'phone_mobile', - 'comment' => 'Mobile phone number of the contact', - 'label' => 'LBL_MOBILE_PHONE', - ), - ), - 3 => - array ( - 0 => 'department', - 1 => - array ( - 'name' => 'phone_fax', - 'comment' => 'Contact fax number', - 'label' => 'LBL_FAX_PHONE', - ), - ), - 4 => - array ( - 0 => - array ( - 'name' => 'account_name', - 'displayParams' => - array ( - 'key' => 'billing', - 'copy' => 'primary', - 'billingKey' => 'primary', - 'additionalFields' => - array ( - 'phone_office' => 'phone_work', - ), - ), - ), - ), - 5 => - array ( - 0 => - array ( - 'name' => 'primary_address_street', - 'hideLabel' => true, - 'type' => 'address', - 'displayParams' => - array ( - 'key' => 'primary', - 'rows' => 2, - 'cols' => 30, - 'maxlength' => 150, - ), - ), - 1 => - array ( - 'name' => 'alt_address_street', - 'hideLabel' => true, - 'type' => 'address', - 'displayParams' => - array ( - 'key' => 'alt', - 'copy' => 'primary', - 'rows' => 2, - 'cols' => 30, - 'maxlength' => 150, - ), - ), - ), - 6 => - array ( - 0 => - array ( - 'name' => 'email1', - 'studio' => 'false', - 'label' => 'LBL_EMAIL_ADDRESS', - ), - ), - 7 => - array ( - 0 => - array ( - 'name' => 'description', - 'label' => 'LBL_DESCRIPTION', - ), - 1 => - array ( - 'name' => 'twitter_user_c', - ), - ), - 8 => - array ( - 0 => - array ( - 'name' => 'facebookAPI_user_c', - ), - 1 => - array ( - 'name' => 'twitter_user_c', - ), - ), - 9 => - array ( - 0 => - array ( - 'name' => 'facebook_user_c', - ), - ), - ), - 'LBL_PANEL_ADVANCED' => - array ( - 0 => - array ( - 0 => - array ( - 'name' => 'report_to_name', - 'label' => 'LBL_REPORTS_TO', - ), - 1 => - array ( - 'name' => 'sync_contact', - 'comment' => 'Synch to outlook? (Meta-Data only)', - 'label' => 'LBL_SYNC_CONTACT', - ), - ), - 1 => - array ( - 0 => - array ( - 'name' => 'lead_source', - 'comment' => 'How did the contact come about', - 'label' => 'LBL_LEAD_SOURCE', - ), - 1 => - array ( - 'name' => 'do_not_call', - 'comment' => 'An indicator of whether contact can be called', - 'label' => 'LBL_DO_NOT_CALL', - ), - ), - 2 => - array ( - 0 => 'campaign_name', - ), - ), - 'LBL_PANEL_ASSIGNMENT' => - array ( - 0 => - array ( - 0 => - array ( - 'name' => 'assigned_user_name', - 'label' => 'LBL_ASSIGNED_TO_NAME', - ), - ), - ), - ), - ), -); -?> diff --git a/custom/modules/Leads/metadata/detailviewdefs.php b/custom/modules/Leads/metadata/detailviewdefs.php index 79c5f3b2fdc..4dd6997eef4 100755 --- a/custom/modules/Leads/metadata/detailviewdefs.php +++ b/custom/modules/Leads/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( @@ -51,10 +51,6 @@ ), ), ), - 'AOS_GENLET' => - array ( - 'customCode' => '', - ), ), 'headerTpl' => 'modules/Leads/tpls/DetailViewHeader.tpl', ), @@ -108,9 +104,6 @@ 0 => array ( 'name' => 'account_name', - 'displayParams' => - array ( - ), ), 1 => 'website', ), @@ -144,17 +137,6 @@ 6 => array ( 0 => 'description', - 1 => - array ( - 'name' => 'twitteruser_c_user_c', - ), - ), - 7 => - array ( - 0 => - array ( - 'name' => 'facebookAPI_user_c', - ), ), ), 'LBL_PANEL_ADVANCED' => @@ -209,6 +191,17 @@ ), ), ), + 'LBL_PANEL_SOCIAL_FEED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'twitter_user_c', + 'label' => 'LBL_TWITTER_USER_C', + ), + ), + ), ), ), ), diff --git a/custom/modules/Leads/metadata/editviewdefs.php b/custom/modules/Leads/metadata/editviewdefs.php index 52f1aaa6c4f..9d613c15467 100755 --- a/custom/modules/Leads/metadata/editviewdefs.php +++ b/custom/modules/Leads/metadata/editviewdefs.php @@ -111,10 +111,6 @@ 7 => array ( 0 => 'description', - 1 => - array ( - 'name' => 'twitter_user_c', - ), ), ), 'LBL_PANEL_ADVANCED' => @@ -157,6 +153,17 @@ ), ), ), + 'LBL_PANEL_SOCIAL_FEED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'twitter_user_c', + 'label' => 'LBL_TWITTER_USER_C', + ), + ), + ), ), ), ); diff --git a/custom/modules/Opportunities/metadata/detailviewdefs.php b/custom/modules/Opportunities/metadata/detailviewdefs.php index f33cf9c7a5e..ef6da5b1a86 100755 --- a/custom/modules/Opportunities/metadata/detailviewdefs.php +++ b/custom/modules/Opportunities/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( From fb8a454c491ae835f26227a34e25cb3bd71ddde9 Mon Sep 17 00:00:00 2001 From: Lewis Jessett Date: Mon, 3 Feb 2014 17:00:53 +0000 Subject: [PATCH 158/223] Reformatting - Facebook feed. --- .../Vardefs/sugarfield_facebook_user_c.php | 5 + .../social/facebook/facebook.class.php | 105 ++++++--- .../include/social/facebook/facebookapi.php | 41 ++-- custom/include/social/get_feed_data.php | 22 +- .../include/social/twitter/twitter_helper.php | 4 +- custom/include/social/twitter/twitterapi.php | 2 +- .../Accounts/metadata/detailviewdefs.php | 7 +- .../Accounts/metadata/editviewdefs.php | 5 + .../sources/ext/rest/facebook/mapping.php | 11 +- .../sources/ext/rest/insideview/mapping.php | 2 +- .../sources/ext/rest/linkedin/mapping.php | 2 +- .../sources/ext/rest/twitter/mapping.php | 2 +- .../Connectors/metadata/connectors.php | 2 +- .../Connectors/metadata/display_config.php | 5 +- .../Connectors/metadata/searchdefs.php | 14 +- .../Contacts/metadata/detailviewdefs.php | 13 +- .../Contacts/metadata/editviewdefs.php | 210 ++++++++++++++++++ .../modules/Leads/metadata/detailviewdefs.php | 7 +- .../modules/Leads/metadata/editviewdefs.php | 5 + .../Opportunities/metadata/detailviewdefs.php | 2 +- 20 files changed, 382 insertions(+), 84 deletions(-) create mode 100755 custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php create mode 100755 custom/modules/Contacts/metadata/editviewdefs.php diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php new file mode 100755 index 00000000000..0b2398d89b2 --- /dev/null +++ b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/custom/include/social/facebook/facebook.class.php b/custom/include/social/facebook/facebook.class.php index 010bff0b3e2..bc4255185a9 100755 --- a/custom/include/social/facebook/facebook.class.php +++ b/custom/include/social/facebook/facebook.class.php @@ -57,60 +57,95 @@ function process_feed($story){ case "link": return $this->link_type($story); break; + case "video": + return $this->video_type($story); + break; } } - function photo_status($story){ - $string = ' - -
      - - -
      - - -
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      - '; + function photo_status($story){ + $string .= "
      "; + $string .= '
      ' .$story['from']['name'] . '
      '; + $string .= ''; + $string .= ''; + $string .= '

      ' .$story['story'] .'

      '; + $string .= '

      ' .$story['message'] .'

      '; + $string .= "
      "; return $string; } function status($story){ - $string = ' - -
      - - ' . ' -
      - -
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      + $to_name = $this->get_to($story); + + $string .= "
      "; + $string .= '
      ' .$story['from']['name'] . '
      '; + + if($story['status_type'] == 'approved_friend'){ + $string .= ''; + $string .= ''; + }else{ + $string .= ''; + $string .= ''; + } - '; + $string .= ''; + $string .= '

      ' .$story['story'] .'

      '; + $string .= '

      ' .$story['message'] .'

      '; + $string .= "
      "; + return $string; + + } function link_type($story){ - $string = ' - -
      - '; - if($story['name']){ - $string .= ''; - }else{ - $string .= ''; - } - - $string .= ' -
      - -
      ' . date("y/m/d H:m", strtotime($story['updated_time'])) . '
      - '; + $string .= "
      "; + $string .= '
      ' . $story['message'] . '
      '; + + $string .= ''; + $string .= '' .$story['description'] .''; + $string .= '

      ' . $story['caption'] . '

      '; + $string .= "
      "; + return $string; + } + + function video_type($story){ + + $string = ''; + $string .= "
      "; + $string .= '
      ' . $story['from']['name'] .' Shared a video with '. $story['message'] . '
      '; + + $string .= ''; + $string .= '' .$story['description'] .''; + $string .= '

      ' . $story['caption'] . '

      '; + $string .= "
      "; return $string; } + + function get_to($story){ + + $value = ''; + + foreach($story as $field => $value){ + if(isset($story[$field]['data'][0]['name'])){ + $value = $story['data']['0']['name']; + break; + } + if($field == 'to'){ + $value = $story['data']['0']['name']; + + break; + } + } + + return $value; + + } } ?> \ No newline at end of file diff --git a/custom/include/social/facebook/facebookapi.php b/custom/include/social/facebook/facebookapi.php index 4d21a896294..cc86a74a318 100755 --- a/custom/include/social/facebook/facebookapi.php +++ b/custom/include/social/facebook/facebookapi.php @@ -21,33 +21,28 @@ }else{ $log = 'Login with Facebook'; } +$html .= "
      "; +$html .= ""; +$html .= ""; +$html .= "

      Facebook Feed

      "; +$html .= "".$different_user['first_name'] . " " . $different_user['last_name'] . "
      "; -echo '
      '; -echo ''; -echo ''; -echo ''; -echo ''; -echo ''; foreach($content['data'] as $story){ - $results = $facebook_helper->process_feed($story); + if(!empty($results)){ - echo $results; + $html . $results; } } -echo '
      Facebook Activity' . $log . '
      ' . $different_user['first_name'] . ' ' . $different_user['last_name'] . ' (' . $different_user['username'] .')
      - ' . $different_user['gender']. '
      - ' . $different_user['location']['name'] . '
      '; -?> - \ No newline at end of file + +foreach($content['data'] as $story){ + + $html .= "
      "; + $results = $facebook_helper->process_feed($story); + $html .= "

      ". $results."

      "; + $html .= "
      "; + + +} +echo $html; \ No newline at end of file diff --git a/custom/include/social/get_feed_data.php b/custom/include/social/get_feed_data.php index 7d0d75d9c14..c7e817621b4 100755 --- a/custom/include/social/get_feed_data.php +++ b/custom/include/social/get_feed_data.php @@ -70,9 +70,9 @@ if (empty($tweets['errors'])) { while ($i < count($tweets)) { - if(!isset($tweets[$i]['retweet_status'])){ - $limit = 110; + + $limit = 104; $tweets[$i]['text'] = format_feed_tweets($db, $tweets[$i],$limit); @@ -115,7 +115,7 @@ } } } - } + } $facebook_enabled = check_enabled($db, 'facebook'); @@ -236,32 +236,30 @@ function guid_maker() function generate_stream($stream) { - if($stream['from']['name'] = 'Jemma Moss'){ - $vare = "asd"; - } + //if simple post switch ($stream['type']) { case "": $string[1] = "" . $stream['from']['name'] . " - " . substr($stream['message'], 0, 100); break; case "link"; - $string[0] = ""; + $string[0] = ""; if (!empty($stream['name'])) { - $string[1] = $stream['from']['name'] . " - " . $stream['name'] . ""; + $string[1] = '' . $stream['from']['name']. '

      ' . $stream['name'] . '

      ' . 'View article'; } else { //must be an article - $string[1] = $stream['from']['name'] . " likes an article"; + $string[1] = '' . $stream['from']['name']. '' . " likes an article"; } break; case "status": // - $string[0] = ""; + $string[0] = ""; if (!empty($stream['story'])) { - $string[1] = $stream['from']['name'] . " - " . substr($stream['story'], 0, 100) . ""; + $string[1] = '' . $stream['from']['name']. '

      ' . substr($stream['story'], 0, 100) . "

      View post on Facebook"; } else { //wall post. - $string[1] = $stream['from']['name'] . " - " . substr($stream['message'], 0, 100) . ""; + $string[1] = '' . $stream['from']['name'] . '

      ' . substr($stream['message'], 0, 100) . "

      View post on Facebook"; } break; case "photos": diff --git a/custom/include/social/twitter/twitter_helper.php b/custom/include/social/twitter/twitter_helper.php index a80b2a25b6c..62a6b237dc7 100755 --- a/custom/include/social/twitter/twitter_helper.php +++ b/custom/include/social/twitter/twitter_helper.php @@ -17,10 +17,10 @@ function format_feed_tweets($db, $array, $limit) { if (strlen($array['text']) > $limit) { - $array['text'] = '

      ' . substr($array['text'], 0, $limit) . '. . .
      View in Twitter

      '; + $array['text'] = '

      ' . substr($array['text'], 0, $limit) . '. . .
      View full Tweet

      '; } else { - $array['text'] = '

      ' . $array['text'] . '
      View in Twitter

      '; + $array['text'] = '

      ' . $array['text'] . '
      View on Twitter

      '; } diff --git a/custom/include/social/twitter/twitterapi.php b/custom/include/social/twitter/twitterapi.php index 3db560ed550..26380bf3018 100755 --- a/custom/include/social/twitter/twitterapi.php +++ b/custom/include/social/twitter/twitterapi.php @@ -54,7 +54,7 @@ function format_tweets($db,$tweets){ $i = 0; $html =''; - $html = ""; +// $html = ""; $html .= "
      "; diff --git a/custom/modules/Accounts/metadata/detailviewdefs.php b/custom/modules/Accounts/metadata/detailviewdefs.php index 787dc6b9e48..e2397cb7046 100755 --- a/custom/modules/Accounts/metadata/detailviewdefs.php +++ b/custom/modules/Accounts/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( @@ -234,6 +234,11 @@ 'name' => 'twitter_user_c', 'label' => 'LBL_TWITTER_USER_C', ), + 1 => + array ( + 'name' => 'facebook_user_c', + 'label' => 'LBL_FACEBOOK_USER_C', + ), ), ), ), diff --git a/custom/modules/Accounts/metadata/editviewdefs.php b/custom/modules/Accounts/metadata/editviewdefs.php index f5f4a494534..4b9e629d3ef 100755 --- a/custom/modules/Accounts/metadata/editviewdefs.php +++ b/custom/modules/Accounts/metadata/editviewdefs.php @@ -166,6 +166,11 @@ 'name' => 'twitter_user_c', 'label' => 'LBL_TWITTER_USER_C', ), + 1 => + array ( + 'name' => 'facebook_user_c', + 'label' => 'LBL_FACEBOOK_USER_C', + ), ), ), ), diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php index b4058f99b10..61949facce2 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/facebook/mapping.php @@ -1,7 +1,16 @@ array ( + 'Accounts' => + array ( + ), + 'Contacts' => + array ( + ), + 'Leads' => + array ( + ), ), ); \ No newline at end of file diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php index 56d635d69a1..9d2d9081151 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php index 8b5d240ab66..dd2e7d8bddd 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php index 206c4bafef3..79f204af7f9 100755 --- a/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php +++ b/custom/modules/Connectors/connectors/sources/ext/rest/twitter/mapping.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/metadata/connectors.php b/custom/modules/Connectors/metadata/connectors.php index e3708455ae3..8f63f07c1ae 100755 --- a/custom/modules/Connectors/metadata/connectors.php +++ b/custom/modules/Connectors/metadata/connectors.php @@ -1,5 +1,5 @@ array ( diff --git a/custom/modules/Connectors/metadata/display_config.php b/custom/modules/Connectors/metadata/display_config.php index 86aa10e9283..daaf0a29831 100755 --- a/custom/modules/Connectors/metadata/display_config.php +++ b/custom/modules/Connectors/metadata/display_config.php @@ -1,20 +1,23 @@ array ( 'ext_rest_insideview' => 'ext_rest_insideview', 'ext_rest_linkedin' => 'ext_rest_linkedin', 'ext_rest_twitter' => 'ext_rest_twitter', + 'ext_rest_facebook' => 'ext_rest_facebook', ), 'Contacts' => array ( 'ext_rest_insideview' => 'ext_rest_insideview', + 'ext_rest_facebook' => 'ext_rest_facebook', ), 'Leads' => array ( 'ext_rest_insideview' => 'ext_rest_insideview', 'ext_rest_twitter' => 'ext_rest_twitter', + 'ext_rest_facebook' => 'ext_rest_facebook', ), 'Opportunities' => array ( diff --git a/custom/modules/Connectors/metadata/searchdefs.php b/custom/modules/Connectors/metadata/searchdefs.php index 0f90ba51c1e..8ace80c8bfa 100755 --- a/custom/modules/Connectors/metadata/searchdefs.php +++ b/custom/modules/Connectors/metadata/searchdefs.php @@ -1,5 +1,5 @@ array ( @@ -31,4 +31,16 @@ array ( ), ), + 'ext_rest_facebook' => + array ( + 'Accounts' => + array ( + ), + 'Contacts' => + array ( + ), + 'Leads' => + array ( + ), + ), ); \ No newline at end of file diff --git a/custom/modules/Contacts/metadata/detailviewdefs.php b/custom/modules/Contacts/metadata/detailviewdefs.php index ec2693c89f1..859b7dcb246 100755 --- a/custom/modules/Contacts/metadata/detailviewdefs.php +++ b/custom/modules/Contacts/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( @@ -219,6 +219,17 @@ ), ), ), + 'LBL_PANEL_SOCIAL_FEED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'facebook_user_c', + 'label' => 'LBL_FACEBOOK_USER_C', + ), + ), + ), ), ), ), diff --git a/custom/modules/Contacts/metadata/editviewdefs.php b/custom/modules/Contacts/metadata/editviewdefs.php new file mode 100755 index 00000000000..6de25741e53 --- /dev/null +++ b/custom/modules/Contacts/metadata/editviewdefs.php @@ -0,0 +1,210 @@ + + array ( + 'templateMeta' => + array ( + 'form' => + array ( + 'hidden' => + array ( + 0 => '', + 1 => '', + 2 => '', + 3 => '', + 4 => '', + ), + ), + 'maxColumns' => '2', + 'widths' => + array ( + 0 => + array ( + 'label' => '10', + 'field' => '30', + ), + 1 => + array ( + 'label' => '10', + 'field' => '30', + ), + ), + ), + 'panels' => + array ( + 'lbl_contact_information' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'first_name', + 'customCode' => '{html_options name="salutation" id="salutation" options=$fields.salutation.options selected=$fields.salutation.value} ', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'last_name', + ), + 1 => + array ( + 'name' => 'phone_work', + 'comment' => 'Work phone number of the contact', + 'label' => 'LBL_OFFICE_PHONE', + ), + ), + 2 => + array ( + 0 => + array ( + 'name' => 'title', + 'comment' => 'The title of the contact', + 'label' => 'LBL_TITLE', + ), + 1 => + array ( + 'name' => 'phone_mobile', + 'comment' => 'Mobile phone number of the contact', + 'label' => 'LBL_MOBILE_PHONE', + ), + ), + 3 => + array ( + 0 => 'department', + 1 => + array ( + 'name' => 'phone_fax', + 'comment' => 'Contact fax number', + 'label' => 'LBL_FAX_PHONE', + ), + ), + 4 => + array ( + 0 => + array ( + 'name' => 'account_name', + 'displayParams' => + array ( + 'key' => 'billing', + 'copy' => 'primary', + 'billingKey' => 'primary', + 'additionalFields' => + array ( + 'phone_office' => 'phone_work', + ), + ), + ), + ), + 5 => + array ( + 0 => + array ( + 'name' => 'primary_address_street', + 'hideLabel' => true, + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'primary', + 'rows' => 2, + 'cols' => 30, + 'maxlength' => 150, + ), + ), + 1 => + array ( + 'name' => 'alt_address_street', + 'hideLabel' => true, + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'alt', + 'copy' => 'primary', + 'rows' => 2, + 'cols' => 30, + 'maxlength' => 150, + ), + ), + ), + 6 => + array ( + 0 => + array ( + 'name' => 'email1', + 'studio' => 'false', + 'label' => 'LBL_EMAIL_ADDRESS', + ), + ), + 7 => + array ( + 0 => + array ( + 'name' => 'description', + 'label' => 'LBL_DESCRIPTION', + ), + ), + ), + 'LBL_PANEL_ADVANCED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'report_to_name', + 'label' => 'LBL_REPORTS_TO', + ), + 1 => + array ( + 'name' => 'sync_contact', + 'comment' => 'Synch to outlook? (Meta-Data only)', + 'label' => 'LBL_SYNC_CONTACT', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'lead_source', + 'comment' => 'How did the contact come about', + 'label' => 'LBL_LEAD_SOURCE', + ), + 1 => + array ( + 'name' => 'do_not_call', + 'comment' => 'An indicator of whether contact can be called', + 'label' => 'LBL_DO_NOT_CALL', + ), + ), + 2 => + array ( + 0 => 'campaign_name', + ), + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'assigned_user_name', + 'label' => 'LBL_ASSIGNED_TO_NAME', + ), + ), + ), + 'LBL_PANEL_SOCIAL_FEED' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'facebook_user_c', + 'label' => 'LBL_FACEBOOK_USER_C', + ), + ), + ), + ), + ), +); +?> diff --git a/custom/modules/Leads/metadata/detailviewdefs.php b/custom/modules/Leads/metadata/detailviewdefs.php index 4dd6997eef4..0bf050fd72d 100755 --- a/custom/modules/Leads/metadata/detailviewdefs.php +++ b/custom/modules/Leads/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( @@ -200,6 +200,11 @@ 'name' => 'twitter_user_c', 'label' => 'LBL_TWITTER_USER_C', ), + 1 => + array ( + 'name' => 'facebook_user_c', + 'label' => 'LBL_FACEBOOK_USER_C', + ), ), ), ), diff --git a/custom/modules/Leads/metadata/editviewdefs.php b/custom/modules/Leads/metadata/editviewdefs.php index 9d613c15467..e37c1d32eda 100755 --- a/custom/modules/Leads/metadata/editviewdefs.php +++ b/custom/modules/Leads/metadata/editviewdefs.php @@ -162,6 +162,11 @@ 'name' => 'twitter_user_c', 'label' => 'LBL_TWITTER_USER_C', ), + 1 => + array ( + 'name' => 'facebook_user_c', + 'label' => 'LBL_FACEBOOK_USER_C', + ), ), ), ), diff --git a/custom/modules/Opportunities/metadata/detailviewdefs.php b/custom/modules/Opportunities/metadata/detailviewdefs.php index ef6da5b1a86..71a20ee7c50 100755 --- a/custom/modules/Opportunities/metadata/detailviewdefs.php +++ b/custom/modules/Opportunities/metadata/detailviewdefs.php @@ -1,5 +1,5 @@ array ( From 1d1aca4016a8c3f186ff25a8271672d6e340c474 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 3 Feb 2014 19:24:00 -0800 Subject: [PATCH 159/223] removed warning on unnecessary parameter --- custom/include/social/hooks.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom/include/social/hooks.php b/custom/include/social/hooks.php index 449cb29ce64..aaf0e0eab8a 100755 --- a/custom/include/social/hooks.php +++ b/custom/include/social/hooks.php @@ -9,7 +9,7 @@ class hooks{ - function load_js($bean, $event, $arguments){ + function load_js($event, $arguments){ $mapping = ''; if($_REQUEST['action'] == 'DetailView'){ From e1a4c4e9d34de73a3b8758afe35e4723e4a4a9e0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 3 Feb 2014 20:12:59 -0800 Subject: [PATCH 160/223] 7.1beta --- .../application/Ext/Include/modules.ext.php | 154 +-- .../Ext/Language/en_us.lang.ext.php | 622 +++++----- .../Ext/Language/es_es.lang.ext.php | 1044 ++++++++--------- .../TableDictionary/tabledictionary.ext.php | 26 +- index.php | 4 - 5 files changed, 950 insertions(+), 900 deletions(-) diff --git a/custom/application/Ext/Include/modules.ext.php b/custom/application/Ext/Include/modules.ext.php index 7b467c6ea47..f83301d3856 100755 --- a/custom/application/Ext/Include/modules.ext.php +++ b/custom/application/Ext/Include/modules.ext.php @@ -2,6 +2,30 @@ //WARNING: The contents of this file are auto-generated + //WARNING: The contents of this file are auto-generated +$beanList['FP_events'] = 'FP_events'; +$beanFiles['FP_events'] = 'modules/FP_events/FP_events.php'; +$moduleList[] = 'FP_events'; +$beanList['FP_Event_Locations'] = 'FP_Event_Locations'; +$beanFiles['FP_Event_Locations'] = 'modules/FP_Event_Locations/FP_Event_Locations.php'; +$moduleList[] = 'FP_Event_Locations'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['AOD_IndexEvent'] = 'AOD_IndexEvent'; +$beanFiles['AOD_IndexEvent'] = 'modules/AOD_IndexEvent/AOD_IndexEvent.php'; +$modules_exempt_from_availability_check['AOD_IndexEvent'] = 'AOD_IndexEvent'; +$report_include_modules['AOD_IndexEvent'] = 'AOD_IndexEvent'; +$modInvisList[] = 'AOD_IndexEvent'; +$beanList['AOD_Index'] = 'AOD_Index'; +$beanFiles['AOD_Index'] = 'modules/AOD_Index/AOD_Index.php'; +$modules_exempt_from_availability_check['AOD_Index'] = 'AOD_Index'; +$report_include_modules['AOD_Index'] = 'AOD_Index'; +$modInvisList[] = 'AOD_Index'; + + + //WARNING: The contents of this file are auto-generated $beanList['AOP_Case_Events'] = 'AOP_Case_Events'; $beanFiles['AOP_Case_Events'] = 'modules/AOP_Case_Events/AOP_Case_Events.php'; @@ -17,18 +41,24 @@ //WARNING: The contents of this file are auto-generated -$beanList['jjwg_Maps'] = 'jjwg_Maps'; -$beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; -$moduleList[] = 'jjwg_Maps'; -$beanList['jjwg_Markers'] = 'jjwg_Markers'; -$beanFiles['jjwg_Markers'] = 'modules/jjwg_Markers/jjwg_Markers.php'; -$moduleList[] = 'jjwg_Markers'; -$beanList['jjwg_Areas'] = 'jjwg_Areas'; -$beanFiles['jjwg_Areas'] = 'modules/jjwg_Areas/jjwg_Areas.php'; -$moduleList[] = 'jjwg_Areas'; -$beanList['jjwg_Address_Cache'] = 'jjwg_Address_Cache'; -$beanFiles['jjwg_Address_Cache'] = 'modules/jjwg_Address_Cache/jjwg_Address_Cache.php'; -$moduleList[] = 'jjwg_Address_Cache'; +$beanList['AOR_Reports'] = 'AOR_Report'; +$beanFiles['AOR_Report'] = 'modules/AOR_Reports/AOR_Report.php'; +$moduleList[] = 'AOR_Reports'; +$beanList['AOR_Fields'] = 'AOR_Field'; +$beanFiles['AOR_Field'] = 'modules/AOR_Fields/AOR_Field.php'; +$modules_exempt_from_availability_check['AOR_Fields'] = 'AOR_Fields'; +$report_include_modules['AOR_Fields'] = 'AOR_Fields'; +$modInvisList[] = 'AOR_Fields'; +$beanList['AOR_Charts'] = 'AOR_Chart'; +$beanFiles['AOR_Chart'] = 'modules/AOR_Charts/AOR_Chart.php'; +$modules_exempt_from_availability_check['AOR_Charts'] = 'AOR_Charts'; +$report_include_modules['AOR_Charts'] = 'AOR_Charts'; +$modInvisList[] = 'AOR_Charts'; +$beanList['AOR_Conditions'] = 'AOR_Condition'; +$beanFiles['AOR_Condition'] = 'modules/AOR_Conditions/AOR_Condition.php'; +$modules_exempt_from_availability_check['AOR_Conditions'] = 'AOR_Conditions'; +$report_include_modules['AOR_Conditions'] = 'AOR_Conditions'; +$modInvisList[] = 'AOR_Conditions'; @@ -65,50 +95,40 @@ //WARNING: The contents of this file are auto-generated -$beanList['AOR_Reports'] = 'AOR_Report'; -$beanFiles['AOR_Report'] = 'modules/AOR_Reports/AOR_Report.php'; -$moduleList[] = 'AOR_Reports'; -$beanList['AOR_Fields'] = 'AOR_Field'; -$beanFiles['AOR_Field'] = 'modules/AOR_Fields/AOR_Field.php'; -$modules_exempt_from_availability_check['AOR_Fields'] = 'AOR_Fields'; -$report_include_modules['AOR_Fields'] = 'AOR_Fields'; -$modInvisList[] = 'AOR_Fields'; -$beanList['AOR_Charts'] = 'AOR_Chart'; -$beanFiles['AOR_Chart'] = 'modules/AOR_Charts/AOR_Chart.php'; -$modules_exempt_from_availability_check['AOR_Charts'] = 'AOR_Charts'; -$report_include_modules['AOR_Charts'] = 'AOR_Charts'; -$modInvisList[] = 'AOR_Charts'; -$beanList['AOR_Conditions'] = 'AOR_Condition'; -$beanFiles['AOR_Condition'] = 'modules/AOR_Conditions/AOR_Condition.php'; -$modules_exempt_from_availability_check['AOR_Conditions'] = 'AOR_Conditions'; -$report_include_modules['AOR_Conditions'] = 'AOR_Conditions'; -$modInvisList[] = 'AOR_Conditions'; - - - - //WARNING: The contents of this file are auto-generated -$beanList['SecurityGroups'] = 'SecurityGroup'; -$beanFiles['SecurityGroup'] = 'modules/SecurityGroups/SecurityGroup.php'; -$moduleList[] = 'SecurityGroups'; - - - - //WARNING: The contents of this file are auto-generated -$beanList['Calls_Reschedule'] = 'Calls_Reschedule'; -$beanFiles['Calls_Reschedule'] = 'modules/Calls_Reschedule/Calls_Reschedule.php'; -$modules_exempt_from_availability_check['Calls_Reschedule'] = 'Calls_Reschedule'; -$report_include_modules['Calls_Reschedule'] = 'Calls_Reschedule'; -$modInvisList[] = 'Calls_Reschedule'; +$beanList['AOW_Actions'] = 'AOW_Action'; +$beanFiles['AOW_Action'] = 'modules/AOW_Actions/AOW_Action.php'; +$modules_exempt_from_availability_check['AOW_Actions'] = 'AOW_Actions'; +$report_include_modules['AOW_Actions'] = 'AOW_Actions'; +$modInvisList[] = 'AOW_Actions'; +$beanList['AOW_WorkFlow'] = 'AOW_WorkFlow'; +$beanFiles['AOW_WorkFlow'] = 'modules/AOW_WorkFlow/AOW_WorkFlow.php'; +$moduleList[] = 'AOW_WorkFlow'; +$beanList['AOW_Processed'] = 'AOW_Processed'; +$beanFiles['AOW_Processed'] = 'modules/AOW_Processed/AOW_Processed.php'; +$modules_exempt_from_availability_check['AOW_Processed'] = 'AOW_Processed'; +$report_include_modules['AOW_Processed'] = 'AOW_Processed'; +$modInvisList[] = 'AOW_Processed'; +$beanList['AOW_Conditions'] = 'AOW_Condition'; +$beanFiles['AOW_Condition'] = 'modules/AOW_Conditions/AOW_Condition.php'; +$modules_exempt_from_availability_check['AOW_Conditions'] = 'AOW_Conditions'; +$report_include_modules['AOW_Conditions'] = 'AOW_Conditions'; +$modInvisList[] = 'AOW_Conditions'; //WARNING: The contents of this file are auto-generated -$beanList['FP_events'] = 'FP_events'; -$beanFiles['FP_events'] = 'modules/FP_events/FP_events.php'; -$moduleList[] = 'FP_events'; -$beanList['FP_Event_Locations'] = 'FP_Event_Locations'; -$beanFiles['FP_Event_Locations'] = 'modules/FP_Event_Locations/FP_Event_Locations.php'; -$moduleList[] = 'FP_Event_Locations'; +$beanList['jjwg_Maps'] = 'jjwg_Maps'; +$beanFiles['jjwg_Maps'] = 'modules/jjwg_Maps/jjwg_Maps.php'; +$moduleList[] = 'jjwg_Maps'; +$beanList['jjwg_Markers'] = 'jjwg_Markers'; +$beanFiles['jjwg_Markers'] = 'modules/jjwg_Markers/jjwg_Markers.php'; +$moduleList[] = 'jjwg_Markers'; +$beanList['jjwg_Areas'] = 'jjwg_Areas'; +$beanFiles['jjwg_Areas'] = 'modules/jjwg_Areas/jjwg_Areas.php'; +$moduleList[] = 'jjwg_Areas'; +$beanList['jjwg_Address_Cache'] = 'jjwg_Address_Cache'; +$beanFiles['jjwg_Address_Cache'] = 'modules/jjwg_Address_Cache/jjwg_Address_Cache.php'; +$moduleList[] = 'jjwg_Address_Cache'; @@ -129,24 +149,18 @@ //WARNING: The contents of this file are auto-generated -$beanList['AOW_Actions'] = 'AOW_Action'; -$beanFiles['AOW_Action'] = 'modules/AOW_Actions/AOW_Action.php'; -$modules_exempt_from_availability_check['AOW_Actions'] = 'AOW_Actions'; -$report_include_modules['AOW_Actions'] = 'AOW_Actions'; -$modInvisList[] = 'AOW_Actions'; -$beanList['AOW_WorkFlow'] = 'AOW_WorkFlow'; -$beanFiles['AOW_WorkFlow'] = 'modules/AOW_WorkFlow/AOW_WorkFlow.php'; -$moduleList[] = 'AOW_WorkFlow'; -$beanList['AOW_Processed'] = 'AOW_Processed'; -$beanFiles['AOW_Processed'] = 'modules/AOW_Processed/AOW_Processed.php'; -$modules_exempt_from_availability_check['AOW_Processed'] = 'AOW_Processed'; -$report_include_modules['AOW_Processed'] = 'AOW_Processed'; -$modInvisList[] = 'AOW_Processed'; -$beanList['AOW_Conditions'] = 'AOW_Condition'; -$beanFiles['AOW_Condition'] = 'modules/AOW_Conditions/AOW_Condition.php'; -$modules_exempt_from_availability_check['AOW_Conditions'] = 'AOW_Conditions'; -$report_include_modules['AOW_Conditions'] = 'AOW_Conditions'; -$modInvisList[] = 'AOW_Conditions'; +$beanList['Calls_Reschedule'] = 'Calls_Reschedule'; +$beanFiles['Calls_Reschedule'] = 'modules/Calls_Reschedule/Calls_Reschedule.php'; +$modules_exempt_from_availability_check['Calls_Reschedule'] = 'Calls_Reschedule'; +$report_include_modules['Calls_Reschedule'] = 'Calls_Reschedule'; +$modInvisList[] = 'Calls_Reschedule'; + + + + //WARNING: The contents of this file are auto-generated +$beanList['SecurityGroups'] = 'SecurityGroup'; +$beanFiles['SecurityGroup'] = 'modules/SecurityGroups/SecurityGroup.php'; +$moduleList[] = 'SecurityGroups'; ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/en_us.lang.ext.php b/custom/application/Ext/Language/en_us.lang.ext.php index 1131939b3d2..4867c48584b 100755 --- a/custom/application/Ext/Language/en_us.lang.ext.php +++ b/custom/application/Ext/Language/en_us.lang.ext.php @@ -2,8 +2,103 @@ //WARNING: The contents of this file are auto-generated +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + + +$app_list_strings['moduleList']['FP_events'] = 'Events'; +$app_list_strings['moduleList']['FP_Event_Locations'] = 'Locations'; +$app_list_strings['invite_template_list'][''] = ''; + +$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invited'; +$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'Not Invited'; +$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Attended'; +$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'Not Attended'; +$app_list_strings['fp_event_status_dom']['Accepted'] = 'Accepted'; +$app_list_strings['fp_event_status_dom']['Declined'] = 'Declined'; +$app_list_strings['fp_event_status_dom']['No Response'] = 'No Response'; + +$app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; +$app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; +$app_strings['LBL_LISTVIEW_OPTION_CURRENT'] = 'Select This Page'; +$app_strings['LBL_LISTVIEW_OPTION_ENTIRE'] = 'Select All'; +$app_strings['LBL_LISTVIEW_NONE'] = 'Deselect All'; + +/********************************************************************************* + * SugarCRM Community Edition is a customer relationship management program developed by + * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Affero General Public License version 3 as published by the + * Free Software Foundation with the addition of the following permission added + * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK + * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY + * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with + * this program; if not, see http://www.gnu.org/licenses or write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA. + * + * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, + * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * SugarCRM" logo. If the display of the logo is not reasonably feasible for + * technical reasons, the Appropriate Legal Notices must display the words + * "Powered by SugarCRM". + ********************************************************************************/ + + +$app_list_strings['moduleList']['AOD_IndexEvent'] = 'Index Event'; +$app_list_strings['moduleList']['AOD_Index'] = 'Index'; + + /** - * @package SuiteCRM + * + * @package Advanced OpenPortal * @copyright SalesAgility Ltd http://www.salesagility.com * * This program is free software; you can redistribute it and/or modify @@ -24,23 +119,212 @@ * @author Salesagility Ltd */ -$app_strings['LBL_QUICK_ACCOUNT'] = 'Create Account'; -$app_strings['LBL_QUICK_CONTACT'] = 'Create Contact'; -$app_strings['LBL_QUICK_OPPORTUNITY'] = 'Create Opportunity'; -$app_strings['LBL_QUICK_LEAD'] = 'Create Lead'; -$app_strings['LBL_QUICK_DOCUMENT'] = 'Create Document'; -$app_strings['LBL_QUICK_CALL'] = 'Log Call'; -$app_strings['LBL_QUICK_TASK'] = 'Create Task'; + +$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Case Events'; +$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Case Updates'; +$app_list_strings['moduleList']['AOP_Case_Events'] = 'Case Events'; +$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Case Updates'; +$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Please reply above this line =========='; + +$app_list_strings['case_state_dom'] = + array ( + 'Open' => 'Open', + 'Closed' => 'Closed', + ); +$app_list_strings['case_state_default_key'] = 'Open'; +$app_list_strings['case_status_default_key'] = 'Open_New'; +$app_list_strings['case_status_dom'] = + array ( + 'Open_New' => 'New', + 'Open_Assigned' => 'Assigned', + 'Closed_Closed' => 'Closed', + 'Open_Pending Input' => 'Pending Input', + 'Closed_Rejected' => 'Rejected', + 'Closed_Duplicate' => 'Duplicate', + ); + +$app_list_strings['aop_distribution_method'] = + array ( + 'singleUser' => 'Single User', + 'roundRobin' => 'Round Robin', + 'leastBusy' => 'Least Busy', + ); /** - * Social Feed Language Strings. + * Advanced OpenReports, SugarCRM Reporting. + * @package Advanced OpenReports for SugarCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility */ -$app_strings['FACEBOOK_USER_C'] = 'Facebook'; -$app_strings['TWITTER_USER_C'] = 'Twitter'; -$app_strings['LBL_FACEBOOK_USER_C'] = 'Facebook User'; -$app_strings['LBL_TWITTER_USER_C'] = 'Twitter User'; -$app_strings['LBL_PANEL_SOCIAL_FEED'] = 'Social Feed Details'; + +$app_list_strings['moduleList']['AOR_Reports'] = 'Reports'; +$app_list_strings['moduleList']['AOR_Conditions'] = 'Report Conditions'; +$app_list_strings['moduleList']['AOR_Charts'] = 'Report Charts'; +$app_list_strings['moduleList']['AOR_Fields'] = 'Report Fields'; +$app_list_strings['aor_operator_list']['Equal_To'] = 'Equal To'; +$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'Not Equal To'; +$app_list_strings['aor_operator_list']['Greater_Than'] = 'Greater Than'; +$app_list_strings['aor_operator_list']['Less_Than'] = 'Less Than'; +$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Greater Than or Equal To'; +$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Less Than or Equal To'; +$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aor_condition_operator_list']['And'] = 'And'; +$app_list_strings['aor_condition_operator_list']['OR'] = 'OR'; +$app_list_strings['aor_condition_type_list']['Value'] = 'Value'; +$app_list_strings['aor_condition_type_list']['Field'] = 'Field'; +$app_list_strings['aor_condition_type_list']['Date'] = 'Date'; +$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aor_date_type_list'][''] = ''; +$app_list_strings['aor_date_type_list']['minute'] = 'Minutes'; +$app_list_strings['aor_date_type_list']['hour'] = 'Hours'; +$app_list_strings['aor_date_type_list']['day'] = 'Days'; +$app_list_strings['aor_date_type_list']['week'] = 'Weeks'; +$app_list_strings['aor_date_type_list']['month'] = 'Months'; +$app_list_strings['aor_date_type_list']['business_hours'] = 'Business Hours'; +$app_list_strings['aor_date_options']['now'] = 'Now'; +$app_list_strings['aor_date_options']['field'] = 'This Field'; +$app_list_strings['aor_date_operator']['now'] = ''; +$app_list_strings['aor_date_operator']['plus'] = '+'; +$app_list_strings['aor_date_operator']['minus'] = '-'; +$app_list_strings['aor_sort_operator'][''] = ''; +$app_list_strings['aor_sort_operator']['ASC'] = 'Ascending'; +$app_list_strings['aor_sort_operator']['DESC'] = 'Descending'; +$app_list_strings['aor_function_list'][''] = ''; +$app_list_strings['aor_function_list']['COUNT'] = 'Count'; +$app_list_strings['aor_function_list']['MIN'] = 'Minimum'; +$app_list_strings['aor_function_list']['MAX'] = 'Maximum'; +$app_list_strings['aor_function_list']['SUM'] = 'Sum'; +$app_list_strings['aor_function_list']['AVG'] = 'Average'; + +/** + * Products, Quotations & Invoices modules. + * Extensions to SugarCRM + * @package Advanced OpenSales for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$app_list_strings['moduleList']['AOS_Contracts'] = 'Contracts'; +$app_list_strings['moduleList']['AOS_Invoices'] = 'Invoices'; +$app_list_strings['moduleList']['AOS_PDF_Templates'] = 'PDF Templates'; +$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Product Categories'; +$app_list_strings['moduleList']['AOS_Products'] = 'Products'; +$app_list_strings['moduleList']['AOS_Products_Quotes'] = 'Line Items'; +$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Line Item Groups'; +$app_list_strings['moduleList']['AOS_Quotes'] = 'Quotes'; +$app_list_strings['aos_quotes_type_dom'][''] = ''; +$app_list_strings['aos_quotes_type_dom']['Analyst'] = 'Analyst'; +$app_list_strings['aos_quotes_type_dom']['Competitor'] = 'Competitor'; +$app_list_strings['aos_quotes_type_dom']['Customer'] = 'Customer'; +$app_list_strings['aos_quotes_type_dom']['Integrator'] = 'Integrator'; +$app_list_strings['aos_quotes_type_dom']['Investor'] = 'Investor'; +$app_list_strings['aos_quotes_type_dom']['Partner'] = 'Partner'; +$app_list_strings['aos_quotes_type_dom']['Press'] = 'Press'; +$app_list_strings['aos_quotes_type_dom']['Prospect'] = 'Prospect'; +$app_list_strings['aos_quotes_type_dom']['Reseller'] = 'Reseller'; +$app_list_strings['aos_quotes_type_dom']['Other'] = 'Other'; +$app_list_strings['template_ddown_c_list'][''] = ''; +$app_list_strings['quote_stage_dom']['Draft'] = 'Draft'; +$app_list_strings['quote_stage_dom']['Negotiation'] = 'Negotiation'; +$app_list_strings['quote_stage_dom']['Delivered'] = 'Delivered'; +$app_list_strings['quote_stage_dom']['On Hold'] = 'On Hold'; +$app_list_strings['quote_stage_dom']['Confirmed'] = 'Confirmed'; +$app_list_strings['quote_stage_dom']['Closed Accepted'] = 'Closed Accepted'; +$app_list_strings['quote_stage_dom']['Closed Lost'] = 'Closed Lost'; +$app_list_strings['quote_stage_dom']['Closed Dead'] = 'Closed Dead'; +$app_list_strings['quote_term_dom']['Net 15'] = 'Nett 15'; +$app_list_strings['quote_term_dom']['Net 30'] = 'Nett 30'; +$app_list_strings['quote_term_dom'][''] = ''; +$app_list_strings['approval_status_dom']['Approved'] = 'Approved'; +$app_list_strings['approval_status_dom']['Not Approved'] = 'Not Approved'; +$app_list_strings['approval_status_dom'][''] = ''; +$app_list_strings['vat_list']['0.0'] = '0%'; +$app_list_strings['vat_list']['5.0'] = '5%'; +$app_list_strings['vat_list']['7.5'] = '7.5%'; +$app_list_strings['vat_list']['17.5'] = '17.5%'; +$app_list_strings['vat_list']['20.0'] = '20%'; +$app_list_strings['discount_list']['Percentage'] = 'Pct'; +$app_list_strings['discount_list']['Amount'] = 'Amt'; +$app_list_strings['aos_invoices_type_dom'][''] = ''; +$app_list_strings['aos_invoices_type_dom']['Analyst'] = 'Analyst'; +$app_list_strings['aos_invoices_type_dom']['Competitor'] = 'Competitor'; +$app_list_strings['aos_invoices_type_dom']['Customer'] = 'Customer'; +$app_list_strings['aos_invoices_type_dom']['Integrator'] = 'Integrator'; +$app_list_strings['aos_invoices_type_dom']['Investor'] = 'Investor'; +$app_list_strings['aos_invoices_type_dom']['Partner'] = 'Partner'; +$app_list_strings['aos_invoices_type_dom']['Press'] = 'Press'; +$app_list_strings['aos_invoices_type_dom']['Prospect'] = 'Prospect'; +$app_list_strings['aos_invoices_type_dom']['Reseller'] = 'Reseller'; +$app_list_strings['aos_invoices_type_dom']['Other'] = 'Other'; +$app_list_strings['invoice_status_dom']['Paid'] = 'Paid'; +$app_list_strings['invoice_status_dom']['Unpaid'] = 'Unpaid'; +$app_list_strings['invoice_status_dom']['Cancelled'] = 'Cancelled'; +$app_list_strings['invoice_status_dom'][''] = ''; +$app_list_strings['quote_invoice_status_dom']['Not Invoiced'] = 'Not Invoiced'; +$app_list_strings['quote_invoice_status_dom']['Invoiced'] = 'Invoiced'; +$app_list_strings['product_code_dom']['XXXX'] = 'XXXX'; +$app_list_strings['product_code_dom']['YYYY'] = 'YYYY'; +$app_list_strings['product_category_dom']['Laptops'] = 'Laptops'; +$app_list_strings['product_category_dom']['Desktops'] = 'Desktops'; +$app_list_strings['product_category_dom'][''] = ''; +$app_list_strings['product_type_dom']['Good'] = 'Good'; +$app_list_strings['product_type_dom']['Service'] = 'Service'; +$app_list_strings['product_quote_parent_type_dom']['AOS_Quotes'] = 'Quotes'; +$app_list_strings['product_quote_parent_type_dom']['AOS_Invoices'] = 'Invoices'; +$app_list_strings['pdf_template_type_dom']['AOS_Quotes'] = 'Quotes'; +$app_list_strings['pdf_template_type_dom']['AOS_Invoices'] = 'Invoices'; +$app_list_strings['pdf_template_type_dom']['Accounts'] = 'Accounts'; +$app_list_strings['pdf_template_type_dom']['Contacts'] = 'Contacts'; +$app_list_strings['pdf_template_type_dom']['Leads'] = 'Leads'; +$app_list_strings['pdf_template_sample_dom'][''] = ''; +$app_list_strings['contract_status_list']['Not Started'] = 'Not Started'; +$app_list_strings['contract_status_list']['In Progress'] = 'In Progress'; +$app_list_strings['contract_status_list']['Signed'] = 'Signed'; +$app_list_strings['contract_type_list']['Type'] = 'Type'; +$app_strings['LBL_GENERATE_LETTER'] = 'Generate Letter'; +$app_strings['LBL_SELECT_TEMPLATE'] = 'Please Select a Template'; +$app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo templates found.\nPlease go to the PDF templates module and create one'; + + /** * Advanced OpenWorkflow, Automating SugarCRM. @@ -119,66 +403,12 @@ $app_list_strings['aow_assign_options']['role'] = 'ALL Users in Role'; $app_list_strings['aow_assign_options']['security_group'] = 'ALL Users in Security Group'; $app_list_strings['aow_email_type_list']['Email Address'] = 'Email'; -$app_list_strings['aow_email_type_list']['Record Email'] = 'Record Email'; -$app_list_strings['aow_email_type_list']['Specify User'] = 'User'; -$app_list_strings['aow_email_type_list']['Related Field'] = 'Related Field'; - - - - -/********************************************************************************* - * SugarCRM Community Edition is a customer relationship management program developed by - * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Affero General Public License version 3 as published by the - * Free Software Foundation with the addition of the following permission added - * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK - * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY - * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more - * details. - * - * You should have received a copy of the GNU Affero General Public License along with - * this program; if not, see http://www.gnu.org/licenses or write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA. - * - * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, - * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. - * - * The interactive user interfaces in modified source and object code versions - * of this program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU Affero General Public License version 3. - * - * In accordance with Section 7(b) of the GNU Affero General Public License version 3, - * these Appropriate Legal Notices must retain the display of the "Powered by - * SugarCRM" logo. If the display of the logo is not reasonably feasible for - * technical reasons, the Appropriate Legal Notices must display the words - * "Powered by SugarCRM". - ********************************************************************************/ - - -$app_list_strings['moduleList']['FP_events'] = 'Events'; -$app_list_strings['moduleList']['FP_Event_Locations'] = 'Locations'; -$app_list_strings['invite_template_list'][''] = ''; - -$app_list_strings['fp_event_invite_status_dom']['Invited'] = 'Invited'; -$app_list_strings['fp_event_invite_status_dom']['Not Invited'] = 'Not Invited'; -$app_list_strings['fp_event_invite_status_dom']['Attended'] = 'Attended'; -$app_list_strings['fp_event_invite_status_dom']['Not Attended'] = 'Not Attended'; -$app_list_strings['fp_event_status_dom']['Accepted'] = 'Accepted'; -$app_list_strings['fp_event_status_dom']['Declined'] = 'Declined'; -$app_list_strings['fp_event_status_dom']['No Response'] = 'No Response'; +$app_list_strings['aow_email_type_list']['Record Email'] = 'Record Email'; +$app_list_strings['aow_email_type_list']['Specify User'] = 'User'; +$app_list_strings['aow_email_type_list']['Related Field'] = 'Related Field'; + + -$app_strings['LBL_STATUS_EVENT'] = 'Invite Status'; -$app_strings['LBL_ACCEPT_STATUS'] = 'Accept Status'; -$app_strings['LBL_LISTVIEW_OPTION_CURRENT'] = 'Select This Page'; -$app_strings['LBL_LISTVIEW_OPTION_ENTIRE'] = 'Select All'; -$app_strings['LBL_LISTVIEW_NONE'] = 'Deselect All'; $app_strings['LBL_MAP'] = 'Map'; @@ -755,86 +985,10 @@ $app_list_strings['marker_image_list']['world_heritage_site'] = 'World Heritage Site'; $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; - - -$app_list_strings["moduleList"]["SecurityGroups"] = 'Security Groups Management'; -$app_strings['LBL_LOGIN_AS'] = "Login as "; -$app_strings['LBL_LOGOUT_AS'] = "Logout as "; - - - -/** - * Advanced OpenReports, SugarCRM Reporting. - * @package Advanced OpenReports for SugarCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author SalesAgility - */ - - -$app_list_strings['moduleList']['AOR_Reports'] = 'Reports'; -$app_list_strings['moduleList']['AOR_Conditions'] = 'Report Conditions'; -$app_list_strings['moduleList']['AOR_Charts'] = 'Report Charts'; -$app_list_strings['moduleList']['AOR_Fields'] = 'Report Fields'; -$app_list_strings['aor_operator_list']['Equal_To'] = 'Equal To'; -$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'Not Equal To'; -$app_list_strings['aor_operator_list']['Greater_Than'] = 'Greater Than'; -$app_list_strings['aor_operator_list']['Less_Than'] = 'Less Than'; -$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Greater Than or Equal To'; -$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Less Than or Equal To'; -$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; -$app_list_strings['aor_condition_operator_list']['And'] = 'And'; -$app_list_strings['aor_condition_operator_list']['OR'] = 'OR'; -$app_list_strings['aor_condition_type_list']['Value'] = 'Value'; -$app_list_strings['aor_condition_type_list']['Field'] = 'Field'; -$app_list_strings['aor_condition_type_list']['Date'] = 'Date'; -$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; -$app_list_strings['aor_date_type_list'][''] = ''; -$app_list_strings['aor_date_type_list']['minute'] = 'Minutes'; -$app_list_strings['aor_date_type_list']['hour'] = 'Hours'; -$app_list_strings['aor_date_type_list']['day'] = 'Days'; -$app_list_strings['aor_date_type_list']['week'] = 'Weeks'; -$app_list_strings['aor_date_type_list']['month'] = 'Months'; -$app_list_strings['aor_date_type_list']['business_hours'] = 'Business Hours'; -$app_list_strings['aor_date_options']['now'] = 'Now'; -$app_list_strings['aor_date_options']['field'] = 'This Field'; -$app_list_strings['aor_date_operator']['now'] = ''; -$app_list_strings['aor_date_operator']['plus'] = '+'; -$app_list_strings['aor_date_operator']['minus'] = '-'; -$app_list_strings['aor_sort_operator'][''] = ''; -$app_list_strings['aor_sort_operator']['ASC'] = 'Ascending'; -$app_list_strings['aor_sort_operator']['DESC'] = 'Descending'; -$app_list_strings['aor_function_list'][''] = ''; -$app_list_strings['aor_function_list']['COUNT'] = 'Count'; -$app_list_strings['aor_function_list']['MIN'] = 'Minimum'; -$app_list_strings['aor_function_list']['MAX'] = 'Maximum'; -$app_list_strings['aor_function_list']['SUM'] = 'Sum'; -$app_list_strings['aor_function_list']['AVG'] = 'Average'; /** - * Products, Quotations & Invoices modules. * Extensions to SugarCRM - * @package Advanced OpenSales for SugarCRM + * @package Reschedule for SugarCRM * @subpackage Products * @copyright SalesAgility Ltd http://www.salesagility.com * @@ -856,142 +1010,20 @@ * @author Salesagility Ltd */ -$app_list_strings['moduleList']['AOS_Contracts'] = 'Contracts'; -$app_list_strings['moduleList']['AOS_Invoices'] = 'Invoices'; -$app_list_strings['moduleList']['AOS_PDF_Templates'] = 'PDF Templates'; -$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Product Categories'; -$app_list_strings['moduleList']['AOS_Products'] = 'Products'; -$app_list_strings['moduleList']['AOS_Products_Quotes'] = 'Line Items'; -$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Line Item Groups'; -$app_list_strings['moduleList']['AOS_Quotes'] = 'Quotes'; -$app_list_strings['aos_quotes_type_dom'][''] = ''; -$app_list_strings['aos_quotes_type_dom']['Analyst'] = 'Analyst'; -$app_list_strings['aos_quotes_type_dom']['Competitor'] = 'Competitor'; -$app_list_strings['aos_quotes_type_dom']['Customer'] = 'Customer'; -$app_list_strings['aos_quotes_type_dom']['Integrator'] = 'Integrator'; -$app_list_strings['aos_quotes_type_dom']['Investor'] = 'Investor'; -$app_list_strings['aos_quotes_type_dom']['Partner'] = 'Partner'; -$app_list_strings['aos_quotes_type_dom']['Press'] = 'Press'; -$app_list_strings['aos_quotes_type_dom']['Prospect'] = 'Prospect'; -$app_list_strings['aos_quotes_type_dom']['Reseller'] = 'Reseller'; -$app_list_strings['aos_quotes_type_dom']['Other'] = 'Other'; -$app_list_strings['template_ddown_c_list'][''] = ''; -$app_list_strings['quote_stage_dom']['Draft'] = 'Draft'; -$app_list_strings['quote_stage_dom']['Negotiation'] = 'Negotiation'; -$app_list_strings['quote_stage_dom']['Delivered'] = 'Delivered'; -$app_list_strings['quote_stage_dom']['On Hold'] = 'On Hold'; -$app_list_strings['quote_stage_dom']['Confirmed'] = 'Confirmed'; -$app_list_strings['quote_stage_dom']['Closed Accepted'] = 'Closed Accepted'; -$app_list_strings['quote_stage_dom']['Closed Lost'] = 'Closed Lost'; -$app_list_strings['quote_stage_dom']['Closed Dead'] = 'Closed Dead'; -$app_list_strings['quote_term_dom']['Net 15'] = 'Nett 15'; -$app_list_strings['quote_term_dom']['Net 30'] = 'Nett 30'; -$app_list_strings['quote_term_dom'][''] = ''; -$app_list_strings['approval_status_dom']['Approved'] = 'Approved'; -$app_list_strings['approval_status_dom']['Not Approved'] = 'Not Approved'; -$app_list_strings['approval_status_dom'][''] = ''; -$app_list_strings['vat_list']['0.0'] = '0%'; -$app_list_strings['vat_list']['5.0'] = '5%'; -$app_list_strings['vat_list']['7.5'] = '7.5%'; -$app_list_strings['vat_list']['17.5'] = '17.5%'; -$app_list_strings['vat_list']['20.0'] = '20%'; -$app_list_strings['discount_list']['Percentage'] = 'Pct'; -$app_list_strings['discount_list']['Amount'] = 'Amt'; -$app_list_strings['aos_invoices_type_dom'][''] = ''; -$app_list_strings['aos_invoices_type_dom']['Analyst'] = 'Analyst'; -$app_list_strings['aos_invoices_type_dom']['Competitor'] = 'Competitor'; -$app_list_strings['aos_invoices_type_dom']['Customer'] = 'Customer'; -$app_list_strings['aos_invoices_type_dom']['Integrator'] = 'Integrator'; -$app_list_strings['aos_invoices_type_dom']['Investor'] = 'Investor'; -$app_list_strings['aos_invoices_type_dom']['Partner'] = 'Partner'; -$app_list_strings['aos_invoices_type_dom']['Press'] = 'Press'; -$app_list_strings['aos_invoices_type_dom']['Prospect'] = 'Prospect'; -$app_list_strings['aos_invoices_type_dom']['Reseller'] = 'Reseller'; -$app_list_strings['aos_invoices_type_dom']['Other'] = 'Other'; -$app_list_strings['invoice_status_dom']['Paid'] = 'Paid'; -$app_list_strings['invoice_status_dom']['Unpaid'] = 'Unpaid'; -$app_list_strings['invoice_status_dom']['Cancelled'] = 'Cancelled'; -$app_list_strings['invoice_status_dom'][''] = ''; -$app_list_strings['quote_invoice_status_dom']['Not Invoiced'] = 'Not Invoiced'; -$app_list_strings['quote_invoice_status_dom']['Invoiced'] = 'Invoiced'; -$app_list_strings['product_code_dom']['XXXX'] = 'XXXX'; -$app_list_strings['product_code_dom']['YYYY'] = 'YYYY'; -$app_list_strings['product_category_dom']['Laptops'] = 'Laptops'; -$app_list_strings['product_category_dom']['Desktops'] = 'Desktops'; -$app_list_strings['product_category_dom'][''] = ''; -$app_list_strings['product_type_dom']['Good'] = 'Good'; -$app_list_strings['product_type_dom']['Service'] = 'Service'; -$app_list_strings['product_quote_parent_type_dom']['AOS_Quotes'] = 'Quotes'; -$app_list_strings['product_quote_parent_type_dom']['AOS_Invoices'] = 'Invoices'; -$app_list_strings['pdf_template_type_dom']['AOS_Quotes'] = 'Quotes'; -$app_list_strings['pdf_template_type_dom']['AOS_Invoices'] = 'Invoices'; -$app_list_strings['pdf_template_type_dom']['Accounts'] = 'Accounts'; -$app_list_strings['pdf_template_type_dom']['Contacts'] = 'Contacts'; -$app_list_strings['pdf_template_type_dom']['Leads'] = 'Leads'; -$app_list_strings['pdf_template_sample_dom'][''] = ''; -$app_list_strings['contract_status_list']['Not Started'] = 'Not Started'; -$app_list_strings['contract_status_list']['In Progress'] = 'In Progress'; -$app_list_strings['contract_status_list']['Signed'] = 'Signed'; -$app_list_strings['contract_type_list']['Type'] = 'Type'; -$app_strings['LBL_GENERATE_LETTER'] = 'Generate Letter'; -$app_strings['LBL_SELECT_TEMPLATE'] = 'Please Select a Template'; -$app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo templates found.\nPlease go to the PDF templates module and create one'; +$mod_strings = array ( + 'TWITTER_USER_C' => 'Twitter User', + 'FACEBOOK_USER_C' => 'Facebook User', +); -/** - * - * @package Advanced OpenPortal - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ -$app_list_strings['moduleList']['AOP_AOP_Case_Events'] = 'Case Events'; -$app_list_strings['moduleList']['AOP_AOP_Case_Updates'] = 'Case Updates'; -$app_list_strings['moduleList']['AOP_Case_Events'] = 'Case Events'; -$app_list_strings['moduleList']['AOP_Case_Updates'] = 'Case Updates'; -$app_strings['LBL_AOP_EMAIL_REPLY_DELIMITER'] = '========== Please reply above this line =========='; +$app_list_strings["moduleList"]["SecurityGroups"] = 'Security Groups Management'; +$app_strings['LBL_LOGIN_AS'] = "Login as "; +$app_strings['LBL_LOGOUT_AS'] = "Logout as "; -$app_list_strings['case_state_dom'] = - array ( - 'Open' => 'Open', - 'Closed' => 'Closed', - ); -$app_list_strings['case_state_default_key'] = 'Open'; -$app_list_strings['case_status_default_key'] = 'Open_New'; -$app_list_strings['case_status_dom'] = - array ( - 'Open_New' => 'New', - 'Open_Assigned' => 'Assigned', - 'Closed_Closed' => 'Closed', - 'Open_Pending Input' => 'Pending Input', - 'Closed_Rejected' => 'Rejected', - 'Closed_Duplicate' => 'Duplicate', - ); -$app_list_strings['aop_distribution_method'] = - array ( - 'singleUser' => 'Single User', - 'roundRobin' => 'Round Robin', - 'leastBusy' => 'Least Busy', - ); /** * Extensions to SugarCRM @@ -1023,13 +1055,21 @@ ); - + /** - * Extensions to SugarCRM - * @package Reschedule for SugarCRM - * @subpackage Products + * Social Feed Language Strings. + */ + +$app_strings['FACEBOOK_USER_C'] = 'Facebook'; +$app_strings['TWITTER_USER_C'] = 'Twitter'; +$app_strings['LBL_FACEBOOK_USER_C'] = 'Facebook User'; +$app_strings['LBL_TWITTER_USER_C'] = 'Twitter User'; +$app_strings['LBL_PANEL_SOCIAL_FEED'] = 'Social Feed Details'; + +/** + * @package SuiteCRM * @copyright SalesAgility Ltd http://www.salesagility.com - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation; either version 3 of the License, or @@ -1048,11 +1088,11 @@ * @author Salesagility Ltd */ -$mod_strings = array ( - 'TWITTER_USER_C' => 'Twitter User', - 'FACEBOOK_USER_C' => 'Facebook User', -); - - - +$app_strings['LBL_QUICK_ACCOUNT'] = 'Create Account'; +$app_strings['LBL_QUICK_CONTACT'] = 'Create Contact'; +$app_strings['LBL_QUICK_OPPORTUNITY'] = 'Create Opportunity'; +$app_strings['LBL_QUICK_LEAD'] = 'Create Lead'; +$app_strings['LBL_QUICK_DOCUMENT'] = 'Create Document'; +$app_strings['LBL_QUICK_CALL'] = 'Log Call'; +$app_strings['LBL_QUICK_TASK'] = 'Create Task'; ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/es_es.lang.ext.php b/custom/application/Ext/Language/es_es.lang.ext.php index ba939598df3..b827929ffeb 100755 --- a/custom/application/Ext/Language/es_es.lang.ext.php +++ b/custom/application/Ext/Language/es_es.lang.ext.php @@ -2,416 +2,6 @@ //WARNING: The contents of this file are auto-generated - -$app_strings['LBL_MAP'] = 'Mapa'; -$app_strings['LBL_MAPS'] = 'Mapas'; - -$app_strings['LBL_JJWG_MAPS_LNG'] = 'Longitud'; -$app_strings['LBL_JJWG_MAPS_LAT'] = 'Latitud'; -$app_strings['LBL_JJWG_MAPS_GEOCODE_STATUS'] = 'Geocode Estado'; -$app_strings['LBL_JJWG_MAPS_ADDRESS'] = 'Dirección'; -$app_strings['LBL_BUG_FIX'] = 'Bug Fix'; - -$app_list_strings['moduleList']['jjwg_Maps'] = 'Mapas'; -$app_list_strings['moduleList']['jjwg_Markers'] = 'Marcadores de Mapa'; -$app_list_strings['moduleList']['jjwg_Areas'] = 'Map Áreas'; -$app_list_strings['moduleList']['jjwg_Address_Cache'] = 'Mapa de Caché'; - -$app_list_strings['map_unit_type_list']['mi'] = 'Miles'; -$app_list_strings['map_unit_type_list']['km'] = 'Kilómetros'; -// Plural -$app_list_strings['map_module_type_list']['Cases'] = 'Casos'; -$app_list_strings['map_module_type_list']['Leads'] = 'Cliente Potencial'; -$app_list_strings['map_module_type_list']['Contacts'] = 'Contactos'; -$app_list_strings['map_module_type_list']['Accounts'] = 'Cuentas'; -$app_list_strings['map_module_type_list']['Opportunities'] = 'Oportunidades'; -$app_list_strings['map_module_type_list']['Meetings'] = 'Reuniones'; -$app_list_strings['map_module_type_list']['Project'] = 'Proyectos'; -$app_list_strings['map_module_type_list']['Prospects'] = 'Público Objetivo'; -// Signular -$app_list_strings['map_relate_type_list']['Cases'] = 'Caso'; -$app_list_strings['map_relate_type_list']['Leads'] = 'Cliente Potencial'; -$app_list_strings['map_relate_type_list']['Contacts'] = 'Contacto'; -$app_list_strings['map_relate_type_list']['Accounts'] = 'Cuenta'; -$app_list_strings['map_relate_type_list']['Opportunities'] = 'Oportunidad'; -$app_list_strings['map_relate_type_list']['Meetings'] = 'Reunión'; -$app_list_strings['map_relate_type_list']['Project'] = 'Proyecto'; -$app_list_strings['map_relate_type_list']['Prospects'] = 'Público Objetivo'; - -$app_list_strings['marker_image_list']['accident'] = 'Accidente'; -$app_list_strings['marker_image_list']['administration'] = 'Administración'; -$app_list_strings['marker_image_list']['agriculture'] = 'Agricultura'; -$app_list_strings['marker_image_list']['aircraft_small'] = 'Aviación pequeña'; -$app_list_strings['marker_image_list']['airplane_tourism'] = 'Avion Turismo'; -$app_list_strings['marker_image_list']['airport'] = 'Aeropueerto'; -$app_list_strings['marker_image_list']['amphitheater'] = 'Anfiteatro'; -$app_list_strings['marker_image_list']['apartment'] = 'Departamento'; -$app_list_strings['marker_image_list']['aquarium'] = 'Acuario'; -$app_list_strings['marker_image_list']['arch'] = 'Arch'; -$app_list_strings['marker_image_list']['atm'] = 'Atm'; -$app_list_strings['marker_image_list']['audio'] = 'Audio'; -$app_list_strings['marker_image_list']['bank'] = 'Banco'; -$app_list_strings['marker_image_list']['bank_euro'] = 'Banco Euro'; -$app_list_strings['marker_image_list']['bank_pound'] = 'Banco Libra'; -$app_list_strings['marker_image_list']['bar'] = 'Bar'; -$app_list_strings['marker_image_list']['beach'] = 'Playa'; -$app_list_strings['marker_image_list']['beautiful'] = 'Belleza'; -$app_list_strings['marker_image_list']['bicycle_parking'] = 'Estacionamiento de Bicicletas'; -$app_list_strings['marker_image_list']['big_city'] = 'Ciudad Grande'; -$app_list_strings['marker_image_list']['bridge'] = 'Puente'; -$app_list_strings['marker_image_list']['bridge_modern'] = 'Puente Moderno'; -$app_list_strings['marker_image_list']['bus'] = 'Bus'; -$app_list_strings['marker_image_list']['cable_car'] = 'Cable carril'; -$app_list_strings['marker_image_list']['car'] = 'Automóvil'; -$app_list_strings['marker_image_list']['car_rental'] = 'Alquiler de Automóviles'; -$app_list_strings['marker_image_list']['carrepair'] = 'Reparación de Automóviles'; -$app_list_strings['marker_image_list']['castle'] = 'Castillo'; -$app_list_strings['marker_image_list']['cathedral'] = 'Catedral'; -$app_list_strings['marker_image_list']['chapel'] = 'Capilla'; -$app_list_strings['marker_image_list']['church'] = 'Iglesia'; -$app_list_strings['marker_image_list']['city_square'] = 'Area Central'; -$app_list_strings['marker_image_list']['cluster'] = 'Clúster'; -$app_list_strings['marker_image_list']['cluster_2'] = 'Clúster 2'; -$app_list_strings['marker_image_list']['cluster_3'] = 'Clúster 3'; -$app_list_strings['marker_image_list']['cluster_4'] = 'Clúster 4'; -$app_list_strings['marker_image_list']['cluster_5'] = 'Clúster 5'; -$app_list_strings['marker_image_list']['coffee'] = 'Café'; -$app_list_strings['marker_image_list']['community_centre'] = 'Centro Comunitario'; -$app_list_strings['marker_image_list']['company'] = 'Empresa'; -$app_list_strings['marker_image_list']['conference'] = 'Conferencia'; -$app_list_strings['marker_image_list']['construction'] = 'Construcción'; -$app_list_strings['marker_image_list']['convenience'] = 'Conveniencia'; -$app_list_strings['marker_image_list']['court'] = 'Juzgado'; -$app_list_strings['marker_image_list']['cruise'] = 'Crucero'; -$app_list_strings['marker_image_list']['currency_exchange'] = 'Cambio de Moneda'; -$app_list_strings['marker_image_list']['customs'] = 'Aduana'; -$app_list_strings['marker_image_list']['cycling'] = 'Ciclismo'; -$app_list_strings['marker_image_list']['dam'] = 'Represa'; -$app_list_strings['marker_image_list']['days_dim'] = 'Días Dim'; -$app_list_strings['marker_image_list']['days_dom'] = 'Días Dom'; -$app_list_strings['marker_image_list']['days_jeu'] = 'Días Jeu'; -$app_list_strings['marker_image_list']['days_jue'] = 'Días Jue'; -$app_list_strings['marker_image_list']['days_lun'] = 'Días Lun'; -$app_list_strings['marker_image_list']['days_mar'] = 'Días Mar'; -$app_list_strings['marker_image_list']['days_mer'] = 'Días Mer'; -$app_list_strings['marker_image_list']['days_mie'] = 'Días Mie'; -$app_list_strings['marker_image_list']['days_qua'] = 'Días Qua'; -$app_list_strings['marker_image_list']['days_qui'] = 'Días Qui'; -$app_list_strings['marker_image_list']['days_sab'] = 'Días Sab'; -$app_list_strings['marker_image_list']['days_sam'] = 'Días Sam'; -$app_list_strings['marker_image_list']['days_seg'] = 'Días Seg'; -$app_list_strings['marker_image_list']['days_sex'] = 'Días Sex'; -$app_list_strings['marker_image_list']['days_ter'] = 'Días Ter'; -$app_list_strings['marker_image_list']['days_ven'] = 'Días Ven'; -$app_list_strings['marker_image_list']['days_vie'] = 'Días Vie'; -$app_list_strings['marker_image_list']['dentist'] = 'Dentista'; -$app_list_strings['marker_image_list']['deptartment_store'] = 'Tienda por Departamentos'; -$app_list_strings['marker_image_list']['disability'] = 'Discapacidad'; -$app_list_strings['marker_image_list']['disabled_parking'] = 'Estacionamiento p/Discapacitados'; -$app_list_strings['marker_image_list']['doctor'] = 'Doctor'; -$app_list_strings['marker_image_list']['dog_leash'] = 'Correa p/Perros'; -$app_list_strings['marker_image_list']['down'] = 'Abajo'; -$app_list_strings['marker_image_list']['down_left'] = 'Abajo Izquierda'; -$app_list_strings['marker_image_list']['down_right'] = 'Abajo Derecha'; -$app_list_strings['marker_image_list']['down_then_left'] = 'Abajo luego a la izquierda'; -$app_list_strings['marker_image_list']['down_then_right'] = 'Abajo luego a la derecha'; -$app_list_strings['marker_image_list']['drugs'] = 'Drogas'; -$app_list_strings['marker_image_list']['elevator'] = 'Elevador'; -$app_list_strings['marker_image_list']['embassy'] = 'Embajada'; -$app_list_strings['marker_image_list']['expert'] = 'Experto'; -$app_list_strings['marker_image_list']['factory'] = 'Fábrica'; -$app_list_strings['marker_image_list']['falling_rocks'] = 'Zona de Derrumbes'; -$app_list_strings['marker_image_list']['fast_food'] = 'Comida Rápida'; -$app_list_strings['marker_image_list']['festival'] = 'Festival'; -$app_list_strings['marker_image_list']['fjord'] = 'Fiordo'; -$app_list_strings['marker_image_list']['forest'] = 'Bosque'; -$app_list_strings['marker_image_list']['fountain'] = 'Fuente'; -$app_list_strings['marker_image_list']['friday'] = 'Viernes'; -$app_list_strings['marker_image_list']['garden'] = 'Jardín'; -$app_list_strings['marker_image_list']['gas_station'] = 'Bomba de Combustible'; -$app_list_strings['marker_image_list']['geyser'] = 'Geyser'; -$app_list_strings['marker_image_list']['gifts'] = 'Regalos'; -$app_list_strings['marker_image_list']['gourmet'] = 'Gourmet'; -$app_list_strings['marker_image_list']['grocery'] = 'Almacén'; -$app_list_strings['marker_image_list']['hairsalon'] = 'Estilista'; -$app_list_strings['marker_image_list']['helicopter'] = 'Helicóptero'; -$app_list_strings['marker_image_list']['highway'] = 'Autopista'; -$app_list_strings['marker_image_list']['historical_quarter'] = 'Casco Histórico'; -$app_list_strings['marker_image_list']['home'] = 'Hogar'; -$app_list_strings['marker_image_list']['hospital'] = 'Hospital'; -$app_list_strings['marker_image_list']['hostel'] = 'Hostel'; -$app_list_strings['marker_image_list']['hotel'] = 'Hotel'; -$app_list_strings['marker_image_list']['hotel_1_star'] = 'Hotel 1 Estrella'; -$app_list_strings['marker_image_list']['hotel_2_stars'] = 'Hotel 2 Estrellas'; -$app_list_strings['marker_image_list']['hotel_3_stars'] = 'Hotel 3 Estrellas'; -$app_list_strings['marker_image_list']['hotel_4_stars'] = 'Hotel 4 Estrellas'; -$app_list_strings['marker_image_list']['hotel_5_stars'] = 'Hotel 5 Estrellas'; -$app_list_strings['marker_image_list']['info'] = 'Info'; -$app_list_strings['marker_image_list']['justice'] = 'Juzgado'; -$app_list_strings['marker_image_list']['lake'] = 'Lago'; -$app_list_strings['marker_image_list']['laundromat'] = 'Lavandería'; -$app_list_strings['marker_image_list']['left'] = 'Izquierda'; -$app_list_strings['marker_image_list']['left_then_down'] = 'Izquierda Luego Abajo'; -$app_list_strings['marker_image_list']['left_then_up'] = 'Izquierda Luego Arriba'; -$app_list_strings['marker_image_list']['library'] = 'Biblioteca'; -$app_list_strings['marker_image_list']['lighthouse'] = 'Iluminación'; -$app_list_strings['marker_image_list']['liquor'] = 'Expendio de Bebidas Alcoholicas'; -$app_list_strings['marker_image_list']['lock'] = 'Candado'; -$app_list_strings['marker_image_list']['main_road'] = 'Camino Principal'; -$app_list_strings['marker_image_list']['massage'] = 'Masajes'; -$app_list_strings['marker_image_list']['mobile_phone_tower'] = 'Antena de Telefonía Móvil'; -$app_list_strings['marker_image_list']['modern_tower'] = 'Torre Moderna'; -$app_list_strings['marker_image_list']['monastery'] = 'Monasterio'; -$app_list_strings['marker_image_list']['monday'] = 'Lunes'; -$app_list_strings['marker_image_list']['monument'] = 'Monumento'; -$app_list_strings['marker_image_list']['mosque'] = 'Mezquita'; -$app_list_strings['marker_image_list']['motorcycle'] = 'Motocicleta'; -$app_list_strings['marker_image_list']['museum'] = 'Museo'; -$app_list_strings['marker_image_list']['music_live'] = 'Música en Vivo'; -$app_list_strings['marker_image_list']['oil_pump_jack'] = 'Oil Pump Jack'; -$app_list_strings['marker_image_list']['pagoda'] = 'Pagoda'; -$app_list_strings['marker_image_list']['palace'] = 'Palacio'; -$app_list_strings['marker_image_list']['panoramic'] = 'Vista Panorámica'; -$app_list_strings['marker_image_list']['park'] = 'Parque'; -$app_list_strings['marker_image_list']['park_and_ride'] = 'Parque y Camiata'; -$app_list_strings['marker_image_list']['parking'] = 'Estacionamiento'; -$app_list_strings['marker_image_list']['photo'] = 'Foto'; -$app_list_strings['marker_image_list']['picnic'] = 'Picnic'; -$app_list_strings['marker_image_list']['places_unvisited'] = 'Lugares no Visitados'; -$app_list_strings['marker_image_list']['places_visited'] = 'Lugares Visitados'; -$app_list_strings['marker_image_list']['playground'] = 'Plaza'; -$app_list_strings['marker_image_list']['police'] = 'Policía'; -$app_list_strings['marker_image_list']['port'] = 'Puerto'; -$app_list_strings['marker_image_list']['postal'] = 'Postal'; -$app_list_strings['marker_image_list']['power_line_pole'] = 'Poste de Línea Eléctrica'; -$app_list_strings['marker_image_list']['power_plant'] = 'Planta de Energía'; -$app_list_strings['marker_image_list']['power_substation'] = 'Subestación de Energía'; -$app_list_strings['marker_image_list']['public_art'] = 'Arte Público'; -$app_list_strings['marker_image_list']['rain'] = 'Lluvia'; -$app_list_strings['marker_image_list']['real_estate'] = 'Inmobiliaria'; -$app_list_strings['marker_image_list']['regroup'] = 'Reagrupamiento'; -$app_list_strings['marker_image_list']['resort'] = 'Resort'; -$app_list_strings['marker_image_list']['restaurant'] = 'Restaurant'; -$app_list_strings['marker_image_list']['restaurant_african'] = 'Restaurant Africana'; -$app_list_strings['marker_image_list']['restaurant_barbecue'] = 'Restaurant Barbacoa'; -$app_list_strings['marker_image_list']['restaurant_buffet'] = 'Restaurant Buffet'; -$app_list_strings['marker_image_list']['restaurant_chinese'] = 'Restaurant Chino'; -$app_list_strings['marker_image_list']['restaurant_fish'] = 'Restaurant Pescado'; -$app_list_strings['marker_image_list']['restaurant_fish_chips'] = 'Restaurant Chips de Pescado'; -$app_list_strings['marker_image_list']['restaurant_gourmet'] = 'Restaurant Gourmet'; -$app_list_strings['marker_image_list']['restaurant_greek'] = 'Restaurant Griego'; -$app_list_strings['marker_image_list']['restaurant_indian'] = 'Restaurant Hindú'; -$app_list_strings['marker_image_list']['restaurant_italian'] = 'Restaurant Italiano'; -$app_list_strings['marker_image_list']['restaurant_japanese'] = 'Restaurant Japonés'; -$app_list_strings['marker_image_list']['restaurant_kebab'] = 'Restaurant Brochette'; -$app_list_strings['marker_image_list']['restaurant_korean'] = 'Restaurant Coreano'; -$app_list_strings['marker_image_list']['restaurant_mediterranean'] = 'Restaurant Mediterráneo'; -$app_list_strings['marker_image_list']['restaurant_mexican'] = 'Restaurant Mexicano'; -$app_list_strings['marker_image_list']['restaurant_romantic'] = 'Restaurant Romántico'; -$app_list_strings['marker_image_list']['restaurant_thai'] = 'Restaurant Thai'; -$app_list_strings['marker_image_list']['restaurant_turkish'] = 'Restaurant Turco'; -$app_list_strings['marker_image_list']['right'] = 'Derecha'; -$app_list_strings['marker_image_list']['right_then_down'] = 'Derecha Luego Abajo'; -$app_list_strings['marker_image_list']['right_then_up'] = 'Derecha Luego Arriba'; -$app_list_strings['marker_image_list']['satursday'] = 'Sábado'; -$app_list_strings['marker_image_list']['school'] = 'Escuela'; -$app_list_strings['marker_image_list']['shopping_mall'] = 'Mall'; -$app_list_strings['marker_image_list']['shore'] = 'Apuntalamiento'; -$app_list_strings['marker_image_list']['sight'] = 'Vista'; -$app_list_strings['marker_image_list']['small_city'] = 'Pequeña Ciudad'; -$app_list_strings['marker_image_list']['snow'] = 'Nieve'; -$app_list_strings['marker_image_list']['spaceport'] = 'Puerto Espacial'; -$app_list_strings['marker_image_list']['speed_100'] = 'Velocidad 100'; -$app_list_strings['marker_image_list']['speed_110'] = 'Velocidad 110'; -$app_list_strings['marker_image_list']['speed_120'] = 'Velocidad 120'; -$app_list_strings['marker_image_list']['speed_130'] = 'Velocidad 130'; -$app_list_strings['marker_image_list']['speed_20'] = 'Velocidad 20'; -$app_list_strings['marker_image_list']['speed_30'] = 'Velocidad 30'; -$app_list_strings['marker_image_list']['speed_40'] = 'Velocidad 40'; -$app_list_strings['marker_image_list']['speed_50'] = 'Velocidad 50'; -$app_list_strings['marker_image_list']['speed_60'] = 'Velocidad 60'; -$app_list_strings['marker_image_list']['speed_hump'] = 'Velocidad Hump'; -$app_list_strings['marker_image_list']['stadium'] = 'Estadio'; -$app_list_strings['marker_image_list']['statue'] = 'Estatua'; -$app_list_strings['marker_image_list']['steam_train'] = 'Tren a Vapor'; -$app_list_strings['marker_image_list']['stop'] = 'Stop'; -$app_list_strings['marker_image_list']['stoplight'] = 'Semáforo'; -$app_list_strings['marker_image_list']['subway'] = 'Subterráneo'; -$app_list_strings['marker_image_list']['sun'] = 'Sol'; -$app_list_strings['marker_image_list']['sunday'] = 'Domingo'; -$app_list_strings['marker_image_list']['supermarket'] = 'Super Mercado'; -$app_list_strings['marker_image_list']['synagogue'] = 'Sinagoga'; -$app_list_strings['marker_image_list']['tapas'] = 'Tapas'; -$app_list_strings['marker_image_list']['taxi'] = 'Taxi'; -$app_list_strings['marker_image_list']['taxiway'] = 'Vía p/Taxis'; -$app_list_strings['marker_image_list']['teahouse'] = 'Casa de Té'; -$app_list_strings['marker_image_list']['telephone'] = 'Teléfono'; -$app_list_strings['marker_image_list']['temple_hindu'] = 'Templo Hindú'; -$app_list_strings['marker_image_list']['terrace'] = 'Terraza'; -$app_list_strings['marker_image_list']['text'] = 'Texto'; -$app_list_strings['marker_image_list']['theater'] = 'Teatro'; -$app_list_strings['marker_image_list']['theme_park'] = 'Parque Temático'; -$app_list_strings['marker_image_list']['thursday'] = 'Jueves'; -$app_list_strings['marker_image_list']['toilets'] = 'Toilets'; -$app_list_strings['marker_image_list']['toll_station'] = 'Peaje'; -$app_list_strings['marker_image_list']['tower'] = 'Torre'; -$app_list_strings['marker_image_list']['traffic_enforcement_camera'] = 'Control de Velocidad'; -$app_list_strings['marker_image_list']['train'] = 'Tren'; -$app_list_strings['marker_image_list']['tram'] = 'Tranvía'; -$app_list_strings['marker_image_list']['truck'] = 'Camión'; -$app_list_strings['marker_image_list']['tuesday'] = 'Martes'; -$app_list_strings['marker_image_list']['tunnel'] = 'Tunel'; -$app_list_strings['marker_image_list']['turn_left'] = 'Giro a la Izquierda'; -$app_list_strings['marker_image_list']['turn_right'] = 'Giro a la Derecha'; -$app_list_strings['marker_image_list']['university'] = 'Universidad'; -$app_list_strings['marker_image_list']['up'] = 'Arriba'; -$app_list_strings['marker_image_list']['vespa'] = 'Vespa'; -$app_list_strings['marker_image_list']['video'] = 'Video'; -$app_list_strings['marker_image_list']['villa'] = 'Villa'; -$app_list_strings['marker_image_list']['water'] = 'Water'; -$app_list_strings['marker_image_list']['waterfall'] = 'Waterfall'; -$app_list_strings['marker_image_list']['watermill'] = 'Watermill'; -$app_list_strings['marker_image_list']['waterpark'] = 'Waterpark'; -$app_list_strings['marker_image_list']['watertower'] = 'Watertower'; -$app_list_strings['marker_image_list']['wednesday'] = 'Wednesday'; -$app_list_strings['marker_image_list']['wifi'] = 'Wifi'; -$app_list_strings['marker_image_list']['wind_turbine'] = 'Wind Turbine'; -$app_list_strings['marker_image_list']['windmill'] = 'Windmill'; -$app_list_strings['marker_image_list']['winery'] = 'Winery'; -$app_list_strings['marker_image_list']['work_office'] = 'Work Office'; -$app_list_strings['marker_image_list']['world_heritage_site'] = 'World Heritage Site'; -$app_list_strings['marker_image_list']['zoo'] = 'Zoo'; - - - -$app_list_strings['marker_image_list']['speed_70'] = 'Velocidad 70'; -$app_list_strings['marker_image_list']['speed_80'] = 'Velocidad 80'; -$app_list_strings['marker_image_list']['speed_90'] = 'Velocidad 90'; -$app_list_strings['marker_image_list']['speed_hump'] = 'Velocidad Hump'; -$app_list_strings['marker_image_list']['stadium'] = 'Stadium'; -$app_list_strings['marker_image_list']['statue'] = 'Statue'; -$app_list_strings['marker_image_list']['steam_train'] = 'Steam Train'; -$app_list_strings['marker_image_list']['stop'] = 'Stop'; -$app_list_strings['marker_image_list']['stoplight'] = 'Stoplight'; -$app_list_strings['marker_image_list']['subway'] = 'Subway'; -$app_list_strings['marker_image_list']['sun'] = 'Sun'; -$app_list_strings['marker_image_list']['sunday'] = 'Sunday'; -$app_list_strings['marker_image_list']['supermarket'] = 'Supermarket'; -$app_list_strings['marker_image_list']['synagogue'] = 'Synagogue'; -$app_list_strings['marker_image_list']['tapas'] = 'Tapas'; -$app_list_strings['marker_image_list']['taxi'] = 'Taxi'; -$app_list_strings['marker_image_list']['taxiway'] = 'Taxiway'; -$app_list_strings['marker_image_list']['teahouse'] = 'Teahouse'; -$app_list_strings['marker_image_list']['telephone'] = 'Telephone'; -$app_list_strings['marker_image_list']['temple_hindu'] = 'Temple Hindu'; -$app_list_strings['marker_image_list']['terrace'] = 'Terrace'; -$app_list_strings['marker_image_list']['text'] = 'Text'; -$app_list_strings['marker_image_list']['theater'] = 'Theater'; -$app_list_strings['marker_image_list']['theme_park'] = 'Theme Park'; -$app_list_strings['marker_image_list']['thursday'] = 'Thursday'; -$app_list_strings['marker_image_list']['toilets'] = 'Toilets'; -$app_list_strings['marker_image_list']['toll_station'] = 'Toll Station'; -$app_list_strings['marker_image_list']['tower'] = 'Tower'; -$app_list_strings['marker_image_list']['traffic_enforcement_camera'] = 'Traffic Enforcement Camera'; -$app_list_strings['marker_image_list']['train'] = 'Train'; -$app_list_strings['marker_image_list']['tram'] = 'Tram'; -$app_list_strings['marker_image_list']['truck'] = 'Truck'; -$app_list_strings['marker_image_list']['tuesday'] = 'Tuesday'; -$app_list_strings['marker_image_list']['tunnel'] = 'Tunnel'; -$app_list_strings['marker_image_list']['turn_left'] = 'Turn Left'; -$app_list_strings['marker_image_list']['turn_right'] = 'Turn Right'; -$app_list_strings['marker_image_list']['university'] = 'University'; -$app_list_strings['marker_image_list']['up'] = 'Up'; -$app_list_strings['marker_image_list']['up_left'] = 'Arriba Izquierda'; -$app_list_strings['marker_image_list']['up_right'] = 'Arriba Derecha'; -$app_list_strings['marker_image_list']['up_then_left'] = 'Arriba Luego Izquierda'; -$app_list_strings['marker_image_list']['up_then_right'] = 'Arriba Luego Derecha'; -$app_list_strings['marker_image_list']['vespa'] = 'Vespa'; -$app_list_strings['marker_image_list']['video'] = 'Video'; -$app_list_strings['marker_image_list']['villa'] = 'Villa'; -$app_list_strings['marker_image_list']['water'] = 'Agua'; -$app_list_strings['marker_image_list']['waterfall'] = 'Cascada'; -$app_list_strings['marker_image_list']['watermill'] = 'Molino de Agua'; -$app_list_strings['marker_image_list']['waterpark'] = 'Parque Acuático'; -$app_list_strings['marker_image_list']['watertower'] = 'Torre de Agua'; -$app_list_strings['marker_image_list']['wednesday'] = 'Miércoles'; -$app_list_strings['marker_image_list']['wifi'] = 'WiFi'; -$app_list_strings['marker_image_list']['wind_turbine'] = 'Turbina de Viento'; -$app_list_strings['marker_image_list']['windmill'] = 'Molino de Viento'; -$app_list_strings['marker_image_list']['winery'] = 'Lagar'; -$app_list_strings['marker_image_list']['work_office'] = 'Oficina'; -$app_list_strings['marker_image_list']['world_heritage_site'] = 'Patrimonio de la Humanidad'; -$app_list_strings['marker_image_list']['zoo'] = 'Zoo'; - - -/** - * Advanced OpenReports, SugarCRM Reporting. - * @package Advanced OpenReports for SugarCRM - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author SalesAgility - */ - - -$app_list_strings['moduleList']['AOR_Reports'] = 'Reportes'; -$app_list_strings['moduleList']['AOR_Conditions'] = 'Condiciones de Reportes'; -$app_list_strings['moduleList']['AOR_Charts'] = 'Gráficos de Reportes'; -$app_list_strings['moduleList']['AOR_Fields'] = 'Campos de Reportes'; -$app_list_strings['aor_operator_list']['Equal_To'] = 'Igual a'; -$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'No igual a'; -$app_list_strings['aor_operator_list']['Greater_Than'] = 'Mayor que'; -$app_list_strings['aor_operator_list']['Less_Than'] = 'Menor que'; -$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Mayor o igual a'; -$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Menor o igual a'; -$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; -$app_list_strings['aor_condition_operator_list']['And'] = 'Y'; -$app_list_strings['aor_condition_operator_list']['OR'] = 'O'; -$app_list_strings['aor_condition_type_list']['Value'] = 'Valor'; -$app_list_strings['aor_condition_type_list']['Field'] = 'Campo'; -$app_list_strings['aor_condition_type_list']['Date'] = 'Fecha'; -$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; -$app_list_strings['aor_date_type_list'][''] = ''; -$app_list_strings['aor_date_type_list']['minute'] = 'Minutos'; -$app_list_strings['aor_date_type_list']['hour'] = 'Horas'; -$app_list_strings['aor_date_type_list']['day'] = 'Dias'; -$app_list_strings['aor_date_type_list']['week'] = 'Semanas'; -$app_list_strings['aor_date_type_list']['month'] = 'Meses'; -$app_list_strings['aor_date_type_list']['business_hours'] = 'Horas Laborales'; -$app_list_strings['aor_date_options']['now'] = 'Ahora'; -$app_list_strings['aor_date_options']['field'] = 'Este Campo'; -$app_list_strings['aor_date_operator']['now'] = ''; -$app_list_strings['aor_date_operator']['plus'] = '+'; -$app_list_strings['aor_date_operator']['minus'] = '-'; -$app_list_strings['aor_sort_operator'][''] = ''; -$app_list_strings['aor_sort_operator']['ASC'] = 'Ascendente'; -$app_list_strings['aor_sort_operator']['DESC'] = 'Descendente'; -$app_list_strings['aor_function_list'][''] = ''; -$app_list_strings['aor_function_list']['COUNT'] = 'Cantidad'; -$app_list_strings['aor_function_list']['MIN'] = 'Minimo'; -$app_list_strings['aor_function_list']['MAX'] = 'Maximo'; -$app_list_strings['aor_function_list']['SUM'] = 'Suma'; -$app_list_strings['aor_function_list']['AVG'] = 'Promedio'; - /********************************************************************************* * SugarCRM Community Edition is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. @@ -463,48 +53,6 @@ $app_strings['LBL_STATUS_EVENT'] = 'Estado de Invitación'; $app_strings['LBL_ACCEPT_STATUS'] = 'Estado de Aceptación'; - -/** - * Extensions to SugarCRM - * @package Reschedule for SugarCRM - * @subpackage Products - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - */ - -$app_list_strings['call_reschedule_dom'][''] = ''; -$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Fuera de la Oficina'; -$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'En una reunion'; - -$app_strings['LBL_RESCHEDULE_LABEL'] = 'Replanificar'; -$app_strings['LBL_RESCHEDULE_TITLE'] = 'Por favor ingrese los datos de la Replanificación'; -$app_strings['LBL_RESCHEDULE_DATE'] = 'Fecha:'; -$app_strings['LBL_RESCHEDULE_REASON'] = 'Razón:'; -$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Por favor seleccione una fecha válida'; -$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Por favor seleccione una razón'; - -$app_strings['LBL_RESCHEDULE_PANEL'] = 'Replanificar'; -$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Historial de Intentos de Llamada'; -$app_strings['LBL_RESCHEDULE_COUNT'] = 'Intentos de Llamada'; - - - /** * @@ -554,10 +102,10 @@ ); /** - * Advanced OpenWorkflow, Automating SugarCRM. - * @package Advanced OpenWorkflow for SugarCRM + * Advanced OpenReports, SugarCRM Reporting. + * @package Advanced OpenReports for SugarCRM * @copyright SalesAgility Ltd http://www.salesagility.com - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation; either version 3 of the License, or @@ -577,65 +125,49 @@ */ -$app_list_strings['moduleList']['AOW_WorkFlow'] = 'WorkFlow'; -$app_list_strings['moduleList']['AOW_Conditions'] = 'Condiciones de WorkFlow'; -$app_list_strings['moduleList']['AOW_Processed'] = 'Auditoría del Proceso'; -$app_list_strings['moduleList']['AOW_Actions'] = 'Acciones del WorkFlow'; -$app_list_strings['aow_status_list']['Active'] = 'Activo'; -$app_list_strings['aow_status_list']['Inactive'] = 'Inactivo'; -$app_list_strings['aow_operator_list']['Equal_To'] = 'Igual a'; -$app_list_strings['aow_operator_list']['Not_Equal_To'] = 'No igual a'; -$app_list_strings['aow_operator_list']['Greater_Than'] = 'Mayor que'; -$app_list_strings['aow_operator_list']['Less_Than'] = 'Menor que'; -$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = 'Mayor que o igual a'; -$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = 'Menor que o igual a'; -$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; -$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; -$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; -$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; -$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; -$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; -$app_list_strings['aow_process_status_list']['Complete'] = 'Completado'; -$app_list_strings['aow_process_status_list']['Running'] = 'Ejecutando'; -$app_list_strings['aow_process_status_list']['Pending'] = 'Pendiente'; -$app_list_strings['aow_process_status_list']['Failed'] = 'Fallido'; -$app_list_strings['aow_condition_operator_list']['And'] = 'Y'; -$app_list_strings['aow_condition_operator_list']['OR'] = 'O'; -$app_list_strings['aow_condition_operator_list']['OR'] = 'O'; -$app_list_strings['aow_condition_type_list']['Value'] = 'Valor'; -$app_list_strings['aow_condition_type_list']['Field'] = 'Campo'; -$app_list_strings['aow_condition_type_list']['Date'] = 'Fecha'; -$app_list_strings['aow_condition_type_list']['Multi'] = 'Multiple'; -$app_list_strings['aow_action_type_list']['Value'] = 'Valor'; -$app_list_strings['aow_action_type_list']['Field'] = 'Campo'; -$app_list_strings['aow_action_type_list']['Date'] = 'Fecha'; -$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Round Robin'; -$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Menos Ocupado'; -$app_list_strings['aow_action_type_list']['Random'] = 'Al azar'; -$app_list_strings['aow_rel_action_type_list']['Value'] = 'Valor'; -$app_list_strings['aow_rel_action_type_list']['Field'] = 'Campo'; -$app_list_strings['aow_date_type_list'][''] = ''; -$app_list_strings['aow_date_type_list']['minute'] = 'Minutos'; -$app_list_strings['aow_date_type_list']['hour'] = 'Horas'; -$app_list_strings['aow_date_type_list']['day'] = 'Dias'; -$app_list_strings['aow_date_type_list']['week'] = 'Semanas'; -$app_list_strings['aow_date_type_list']['month'] = 'Meses'; -$app_list_strings['aow_date_type_list']['business_hours'] = 'Horas Laborales'; -$app_list_strings['aow_date_options']['now'] = 'Ahora'; -$app_list_strings['aow_date_options']['field'] = 'Este Campo'; -$app_list_strings['aow_date_operator']['now'] = ''; -$app_list_strings['aow_date_operator']['plus'] = '+'; -$app_list_strings['aow_date_operator']['minus'] = '-'; -$app_list_strings['aow_assign_options']['all'] = 'TODOS los Usuarios'; -$app_list_strings['aow_assign_options']['role'] = 'TODOS los Usuarios de un Rol'; -$app_list_strings['aow_assign_options']['security_group'] = 'TODOS los Usuarios de un Equipo'; -$app_list_strings['aow_email_type_list']['Email Address'] = 'Email'; -$app_list_strings['aow_email_type_list']['Record Email'] = 'Email del Registro'; -$app_list_strings['aow_email_type_list']['Specify User'] = 'Usuario'; -$app_list_strings['aow_email_type_list']['Related Field'] = 'Campo Relacionado'; - - - +$app_list_strings['moduleList']['AOR_Reports'] = 'Reportes'; +$app_list_strings['moduleList']['AOR_Conditions'] = 'Condiciones de Reportes'; +$app_list_strings['moduleList']['AOR_Charts'] = 'Gráficos de Reportes'; +$app_list_strings['moduleList']['AOR_Fields'] = 'Campos de Reportes'; +$app_list_strings['aor_operator_list']['Equal_To'] = 'Igual a'; +$app_list_strings['aor_operator_list']['Not_Equal_To'] = 'No igual a'; +$app_list_strings['aor_operator_list']['Greater_Than'] = 'Mayor que'; +$app_list_strings['aor_operator_list']['Less_Than'] = 'Menor que'; +$app_list_strings['aor_operator_list']['Greater_Than_or_Equal_To'] = 'Mayor o igual a'; +$app_list_strings['aor_operator_list']['Less_Than_or_Equal_To'] = 'Menor o igual a'; +$app_list_strings['aor_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aor_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aor_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aor_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aor_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aor_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aor_condition_operator_list']['And'] = 'Y'; +$app_list_strings['aor_condition_operator_list']['OR'] = 'O'; +$app_list_strings['aor_condition_type_list']['Value'] = 'Valor'; +$app_list_strings['aor_condition_type_list']['Field'] = 'Campo'; +$app_list_strings['aor_condition_type_list']['Date'] = 'Fecha'; +$app_list_strings['aor_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aor_date_type_list'][''] = ''; +$app_list_strings['aor_date_type_list']['minute'] = 'Minutos'; +$app_list_strings['aor_date_type_list']['hour'] = 'Horas'; +$app_list_strings['aor_date_type_list']['day'] = 'Dias'; +$app_list_strings['aor_date_type_list']['week'] = 'Semanas'; +$app_list_strings['aor_date_type_list']['month'] = 'Meses'; +$app_list_strings['aor_date_type_list']['business_hours'] = 'Horas Laborales'; +$app_list_strings['aor_date_options']['now'] = 'Ahora'; +$app_list_strings['aor_date_options']['field'] = 'Este Campo'; +$app_list_strings['aor_date_operator']['now'] = ''; +$app_list_strings['aor_date_operator']['plus'] = '+'; +$app_list_strings['aor_date_operator']['minus'] = '-'; +$app_list_strings['aor_sort_operator'][''] = ''; +$app_list_strings['aor_sort_operator']['ASC'] = 'Ascendente'; +$app_list_strings['aor_sort_operator']['DESC'] = 'Descendente'; +$app_list_strings['aor_function_list'][''] = ''; +$app_list_strings['aor_function_list']['COUNT'] = 'Cantidad'; +$app_list_strings['aor_function_list']['MIN'] = 'Minimo'; +$app_list_strings['aor_function_list']['MAX'] = 'Maximo'; +$app_list_strings['aor_function_list']['SUM'] = 'Suma'; +$app_list_strings['aor_function_list']['AVG'] = 'Promedio'; /** * Products, Quotations & Invoices modules. @@ -738,16 +270,442 @@ $app_list_strings['contract_type_list']['Type'] = 'Tipo'; $app_strings['LBL_GENERATE_LETTER'] = 'Generar Carta'; -$app_strings['LBL_SELECT_TEMPLATE'] = 'Por favor seleccione un formato'; -$app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo se encontraron formatos.\nPor favor vaya al módulo de Formatos PDF y cree uno'; +$app_strings['LBL_SELECT_TEMPLATE'] = 'Por favor seleccione un formato'; +$app_strings['LBL_NO_TEMPLATE'] = 'ERROR\nNo se encontraron formatos.\nPor favor vaya al módulo de Formatos PDF y cree uno'; + +$app_list_strings['vat_list']['0.0'] = '0%'; +$app_list_strings['vat_list']['5.0'] = '5%'; +$app_list_strings['vat_list']['7.5'] = '7.5%'; +$app_list_strings['vat_list']['17.5'] = '17.5%'; +$app_list_strings['vat_list']['20.0'] = '20%'; +$app_list_strings['pdf_template_sample_dom'][''] = ''; + + + +/** + * Advanced OpenWorkflow, Automating SugarCRM. + * @package Advanced OpenWorkflow for SugarCRM + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author SalesAgility + */ + + +$app_list_strings['moduleList']['AOW_WorkFlow'] = 'WorkFlow'; +$app_list_strings['moduleList']['AOW_Conditions'] = 'Condiciones de WorkFlow'; +$app_list_strings['moduleList']['AOW_Processed'] = 'Auditoría del Proceso'; +$app_list_strings['moduleList']['AOW_Actions'] = 'Acciones del WorkFlow'; +$app_list_strings['aow_status_list']['Active'] = 'Activo'; +$app_list_strings['aow_status_list']['Inactive'] = 'Inactivo'; +$app_list_strings['aow_operator_list']['Equal_To'] = 'Igual a'; +$app_list_strings['aow_operator_list']['Not_Equal_To'] = 'No igual a'; +$app_list_strings['aow_operator_list']['Greater_Than'] = 'Mayor que'; +$app_list_strings['aow_operator_list']['Less_Than'] = 'Menor que'; +$app_list_strings['aow_operator_list']['Greater_Than_or_Equal_To'] = 'Mayor que o igual a'; +$app_list_strings['aow_operator_list']['Less_Than_or_Equal_To'] = 'Menor que o igual a'; +$app_list_strings['aow_sql_operator_list']['Equal_To'] = '='; +$app_list_strings['aow_sql_operator_list']['Not_Equal_To'] = '!='; +$app_list_strings['aow_sql_operator_list']['Greater_Than'] = '>'; +$app_list_strings['aow_sql_operator_list']['Less_Than'] = '<'; +$app_list_strings['aow_sql_operator_list']['Greater_Than_or_Equal_To'] = '>='; +$app_list_strings['aow_sql_operator_list']['Less_Than_or_Equal_To'] = '<='; +$app_list_strings['aow_process_status_list']['Complete'] = 'Completado'; +$app_list_strings['aow_process_status_list']['Running'] = 'Ejecutando'; +$app_list_strings['aow_process_status_list']['Pending'] = 'Pendiente'; +$app_list_strings['aow_process_status_list']['Failed'] = 'Fallido'; +$app_list_strings['aow_condition_operator_list']['And'] = 'Y'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'O'; +$app_list_strings['aow_condition_operator_list']['OR'] = 'O'; +$app_list_strings['aow_condition_type_list']['Value'] = 'Valor'; +$app_list_strings['aow_condition_type_list']['Field'] = 'Campo'; +$app_list_strings['aow_condition_type_list']['Date'] = 'Fecha'; +$app_list_strings['aow_condition_type_list']['Multi'] = 'Multiple'; +$app_list_strings['aow_action_type_list']['Value'] = 'Valor'; +$app_list_strings['aow_action_type_list']['Field'] = 'Campo'; +$app_list_strings['aow_action_type_list']['Date'] = 'Fecha'; +$app_list_strings['aow_action_type_list']['Round_Robin'] = 'Round Robin'; +$app_list_strings['aow_action_type_list']['Least_Busy'] = 'Menos Ocupado'; +$app_list_strings['aow_action_type_list']['Random'] = 'Al azar'; +$app_list_strings['aow_rel_action_type_list']['Value'] = 'Valor'; +$app_list_strings['aow_rel_action_type_list']['Field'] = 'Campo'; +$app_list_strings['aow_date_type_list'][''] = ''; +$app_list_strings['aow_date_type_list']['minute'] = 'Minutos'; +$app_list_strings['aow_date_type_list']['hour'] = 'Horas'; +$app_list_strings['aow_date_type_list']['day'] = 'Dias'; +$app_list_strings['aow_date_type_list']['week'] = 'Semanas'; +$app_list_strings['aow_date_type_list']['month'] = 'Meses'; +$app_list_strings['aow_date_type_list']['business_hours'] = 'Horas Laborales'; +$app_list_strings['aow_date_options']['now'] = 'Ahora'; +$app_list_strings['aow_date_options']['field'] = 'Este Campo'; +$app_list_strings['aow_date_operator']['now'] = ''; +$app_list_strings['aow_date_operator']['plus'] = '+'; +$app_list_strings['aow_date_operator']['minus'] = '-'; +$app_list_strings['aow_assign_options']['all'] = 'TODOS los Usuarios'; +$app_list_strings['aow_assign_options']['role'] = 'TODOS los Usuarios de un Rol'; +$app_list_strings['aow_assign_options']['security_group'] = 'TODOS los Usuarios de un Equipo'; +$app_list_strings['aow_email_type_list']['Email Address'] = 'Email'; +$app_list_strings['aow_email_type_list']['Record Email'] = 'Email del Registro'; +$app_list_strings['aow_email_type_list']['Specify User'] = 'Usuario'; +$app_list_strings['aow_email_type_list']['Related Field'] = 'Campo Relacionado'; + + + + + +$app_strings['LBL_MAP'] = 'Mapa'; +$app_strings['LBL_MAPS'] = 'Mapas'; + +$app_strings['LBL_JJWG_MAPS_LNG'] = 'Longitud'; +$app_strings['LBL_JJWG_MAPS_LAT'] = 'Latitud'; +$app_strings['LBL_JJWG_MAPS_GEOCODE_STATUS'] = 'Geocode Estado'; +$app_strings['LBL_JJWG_MAPS_ADDRESS'] = 'Dirección'; +$app_strings['LBL_BUG_FIX'] = 'Bug Fix'; + +$app_list_strings['moduleList']['jjwg_Maps'] = 'Mapas'; +$app_list_strings['moduleList']['jjwg_Markers'] = 'Marcadores de Mapa'; +$app_list_strings['moduleList']['jjwg_Areas'] = 'Map Áreas'; +$app_list_strings['moduleList']['jjwg_Address_Cache'] = 'Mapa de Caché'; + +$app_list_strings['map_unit_type_list']['mi'] = 'Miles'; +$app_list_strings['map_unit_type_list']['km'] = 'Kilómetros'; +// Plural +$app_list_strings['map_module_type_list']['Cases'] = 'Casos'; +$app_list_strings['map_module_type_list']['Leads'] = 'Cliente Potencial'; +$app_list_strings['map_module_type_list']['Contacts'] = 'Contactos'; +$app_list_strings['map_module_type_list']['Accounts'] = 'Cuentas'; +$app_list_strings['map_module_type_list']['Opportunities'] = 'Oportunidades'; +$app_list_strings['map_module_type_list']['Meetings'] = 'Reuniones'; +$app_list_strings['map_module_type_list']['Project'] = 'Proyectos'; +$app_list_strings['map_module_type_list']['Prospects'] = 'Público Objetivo'; +// Signular +$app_list_strings['map_relate_type_list']['Cases'] = 'Caso'; +$app_list_strings['map_relate_type_list']['Leads'] = 'Cliente Potencial'; +$app_list_strings['map_relate_type_list']['Contacts'] = 'Contacto'; +$app_list_strings['map_relate_type_list']['Accounts'] = 'Cuenta'; +$app_list_strings['map_relate_type_list']['Opportunities'] = 'Oportunidad'; +$app_list_strings['map_relate_type_list']['Meetings'] = 'Reunión'; +$app_list_strings['map_relate_type_list']['Project'] = 'Proyecto'; +$app_list_strings['map_relate_type_list']['Prospects'] = 'Público Objetivo'; + +$app_list_strings['marker_image_list']['accident'] = 'Accidente'; +$app_list_strings['marker_image_list']['administration'] = 'Administración'; +$app_list_strings['marker_image_list']['agriculture'] = 'Agricultura'; +$app_list_strings['marker_image_list']['aircraft_small'] = 'Aviación pequeña'; +$app_list_strings['marker_image_list']['airplane_tourism'] = 'Avion Turismo'; +$app_list_strings['marker_image_list']['airport'] = 'Aeropueerto'; +$app_list_strings['marker_image_list']['amphitheater'] = 'Anfiteatro'; +$app_list_strings['marker_image_list']['apartment'] = 'Departamento'; +$app_list_strings['marker_image_list']['aquarium'] = 'Acuario'; +$app_list_strings['marker_image_list']['arch'] = 'Arch'; +$app_list_strings['marker_image_list']['atm'] = 'Atm'; +$app_list_strings['marker_image_list']['audio'] = 'Audio'; +$app_list_strings['marker_image_list']['bank'] = 'Banco'; +$app_list_strings['marker_image_list']['bank_euro'] = 'Banco Euro'; +$app_list_strings['marker_image_list']['bank_pound'] = 'Banco Libra'; +$app_list_strings['marker_image_list']['bar'] = 'Bar'; +$app_list_strings['marker_image_list']['beach'] = 'Playa'; +$app_list_strings['marker_image_list']['beautiful'] = 'Belleza'; +$app_list_strings['marker_image_list']['bicycle_parking'] = 'Estacionamiento de Bicicletas'; +$app_list_strings['marker_image_list']['big_city'] = 'Ciudad Grande'; +$app_list_strings['marker_image_list']['bridge'] = 'Puente'; +$app_list_strings['marker_image_list']['bridge_modern'] = 'Puente Moderno'; +$app_list_strings['marker_image_list']['bus'] = 'Bus'; +$app_list_strings['marker_image_list']['cable_car'] = 'Cable carril'; +$app_list_strings['marker_image_list']['car'] = 'Automóvil'; +$app_list_strings['marker_image_list']['car_rental'] = 'Alquiler de Automóviles'; +$app_list_strings['marker_image_list']['carrepair'] = 'Reparación de Automóviles'; +$app_list_strings['marker_image_list']['castle'] = 'Castillo'; +$app_list_strings['marker_image_list']['cathedral'] = 'Catedral'; +$app_list_strings['marker_image_list']['chapel'] = 'Capilla'; +$app_list_strings['marker_image_list']['church'] = 'Iglesia'; +$app_list_strings['marker_image_list']['city_square'] = 'Area Central'; +$app_list_strings['marker_image_list']['cluster'] = 'Clúster'; +$app_list_strings['marker_image_list']['cluster_2'] = 'Clúster 2'; +$app_list_strings['marker_image_list']['cluster_3'] = 'Clúster 3'; +$app_list_strings['marker_image_list']['cluster_4'] = 'Clúster 4'; +$app_list_strings['marker_image_list']['cluster_5'] = 'Clúster 5'; +$app_list_strings['marker_image_list']['coffee'] = 'Café'; +$app_list_strings['marker_image_list']['community_centre'] = 'Centro Comunitario'; +$app_list_strings['marker_image_list']['company'] = 'Empresa'; +$app_list_strings['marker_image_list']['conference'] = 'Conferencia'; +$app_list_strings['marker_image_list']['construction'] = 'Construcción'; +$app_list_strings['marker_image_list']['convenience'] = 'Conveniencia'; +$app_list_strings['marker_image_list']['court'] = 'Juzgado'; +$app_list_strings['marker_image_list']['cruise'] = 'Crucero'; +$app_list_strings['marker_image_list']['currency_exchange'] = 'Cambio de Moneda'; +$app_list_strings['marker_image_list']['customs'] = 'Aduana'; +$app_list_strings['marker_image_list']['cycling'] = 'Ciclismo'; +$app_list_strings['marker_image_list']['dam'] = 'Represa'; +$app_list_strings['marker_image_list']['days_dim'] = 'Días Dim'; +$app_list_strings['marker_image_list']['days_dom'] = 'Días Dom'; +$app_list_strings['marker_image_list']['days_jeu'] = 'Días Jeu'; +$app_list_strings['marker_image_list']['days_jue'] = 'Días Jue'; +$app_list_strings['marker_image_list']['days_lun'] = 'Días Lun'; +$app_list_strings['marker_image_list']['days_mar'] = 'Días Mar'; +$app_list_strings['marker_image_list']['days_mer'] = 'Días Mer'; +$app_list_strings['marker_image_list']['days_mie'] = 'Días Mie'; +$app_list_strings['marker_image_list']['days_qua'] = 'Días Qua'; +$app_list_strings['marker_image_list']['days_qui'] = 'Días Qui'; +$app_list_strings['marker_image_list']['days_sab'] = 'Días Sab'; +$app_list_strings['marker_image_list']['days_sam'] = 'Días Sam'; +$app_list_strings['marker_image_list']['days_seg'] = 'Días Seg'; +$app_list_strings['marker_image_list']['days_sex'] = 'Días Sex'; +$app_list_strings['marker_image_list']['days_ter'] = 'Días Ter'; +$app_list_strings['marker_image_list']['days_ven'] = 'Días Ven'; +$app_list_strings['marker_image_list']['days_vie'] = 'Días Vie'; +$app_list_strings['marker_image_list']['dentist'] = 'Dentista'; +$app_list_strings['marker_image_list']['deptartment_store'] = 'Tienda por Departamentos'; +$app_list_strings['marker_image_list']['disability'] = 'Discapacidad'; +$app_list_strings['marker_image_list']['disabled_parking'] = 'Estacionamiento p/Discapacitados'; +$app_list_strings['marker_image_list']['doctor'] = 'Doctor'; +$app_list_strings['marker_image_list']['dog_leash'] = 'Correa p/Perros'; +$app_list_strings['marker_image_list']['down'] = 'Abajo'; +$app_list_strings['marker_image_list']['down_left'] = 'Abajo Izquierda'; +$app_list_strings['marker_image_list']['down_right'] = 'Abajo Derecha'; +$app_list_strings['marker_image_list']['down_then_left'] = 'Abajo luego a la izquierda'; +$app_list_strings['marker_image_list']['down_then_right'] = 'Abajo luego a la derecha'; +$app_list_strings['marker_image_list']['drugs'] = 'Drogas'; +$app_list_strings['marker_image_list']['elevator'] = 'Elevador'; +$app_list_strings['marker_image_list']['embassy'] = 'Embajada'; +$app_list_strings['marker_image_list']['expert'] = 'Experto'; +$app_list_strings['marker_image_list']['factory'] = 'Fábrica'; +$app_list_strings['marker_image_list']['falling_rocks'] = 'Zona de Derrumbes'; +$app_list_strings['marker_image_list']['fast_food'] = 'Comida Rápida'; +$app_list_strings['marker_image_list']['festival'] = 'Festival'; +$app_list_strings['marker_image_list']['fjord'] = 'Fiordo'; +$app_list_strings['marker_image_list']['forest'] = 'Bosque'; +$app_list_strings['marker_image_list']['fountain'] = 'Fuente'; +$app_list_strings['marker_image_list']['friday'] = 'Viernes'; +$app_list_strings['marker_image_list']['garden'] = 'Jardín'; +$app_list_strings['marker_image_list']['gas_station'] = 'Bomba de Combustible'; +$app_list_strings['marker_image_list']['geyser'] = 'Geyser'; +$app_list_strings['marker_image_list']['gifts'] = 'Regalos'; +$app_list_strings['marker_image_list']['gourmet'] = 'Gourmet'; +$app_list_strings['marker_image_list']['grocery'] = 'Almacén'; +$app_list_strings['marker_image_list']['hairsalon'] = 'Estilista'; +$app_list_strings['marker_image_list']['helicopter'] = 'Helicóptero'; +$app_list_strings['marker_image_list']['highway'] = 'Autopista'; +$app_list_strings['marker_image_list']['historical_quarter'] = 'Casco Histórico'; +$app_list_strings['marker_image_list']['home'] = 'Hogar'; +$app_list_strings['marker_image_list']['hospital'] = 'Hospital'; +$app_list_strings['marker_image_list']['hostel'] = 'Hostel'; +$app_list_strings['marker_image_list']['hotel'] = 'Hotel'; +$app_list_strings['marker_image_list']['hotel_1_star'] = 'Hotel 1 Estrella'; +$app_list_strings['marker_image_list']['hotel_2_stars'] = 'Hotel 2 Estrellas'; +$app_list_strings['marker_image_list']['hotel_3_stars'] = 'Hotel 3 Estrellas'; +$app_list_strings['marker_image_list']['hotel_4_stars'] = 'Hotel 4 Estrellas'; +$app_list_strings['marker_image_list']['hotel_5_stars'] = 'Hotel 5 Estrellas'; +$app_list_strings['marker_image_list']['info'] = 'Info'; +$app_list_strings['marker_image_list']['justice'] = 'Juzgado'; +$app_list_strings['marker_image_list']['lake'] = 'Lago'; +$app_list_strings['marker_image_list']['laundromat'] = 'Lavandería'; +$app_list_strings['marker_image_list']['left'] = 'Izquierda'; +$app_list_strings['marker_image_list']['left_then_down'] = 'Izquierda Luego Abajo'; +$app_list_strings['marker_image_list']['left_then_up'] = 'Izquierda Luego Arriba'; +$app_list_strings['marker_image_list']['library'] = 'Biblioteca'; +$app_list_strings['marker_image_list']['lighthouse'] = 'Iluminación'; +$app_list_strings['marker_image_list']['liquor'] = 'Expendio de Bebidas Alcoholicas'; +$app_list_strings['marker_image_list']['lock'] = 'Candado'; +$app_list_strings['marker_image_list']['main_road'] = 'Camino Principal'; +$app_list_strings['marker_image_list']['massage'] = 'Masajes'; +$app_list_strings['marker_image_list']['mobile_phone_tower'] = 'Antena de Telefonía Móvil'; +$app_list_strings['marker_image_list']['modern_tower'] = 'Torre Moderna'; +$app_list_strings['marker_image_list']['monastery'] = 'Monasterio'; +$app_list_strings['marker_image_list']['monday'] = 'Lunes'; +$app_list_strings['marker_image_list']['monument'] = 'Monumento'; +$app_list_strings['marker_image_list']['mosque'] = 'Mezquita'; +$app_list_strings['marker_image_list']['motorcycle'] = 'Motocicleta'; +$app_list_strings['marker_image_list']['museum'] = 'Museo'; +$app_list_strings['marker_image_list']['music_live'] = 'Música en Vivo'; +$app_list_strings['marker_image_list']['oil_pump_jack'] = 'Oil Pump Jack'; +$app_list_strings['marker_image_list']['pagoda'] = 'Pagoda'; +$app_list_strings['marker_image_list']['palace'] = 'Palacio'; +$app_list_strings['marker_image_list']['panoramic'] = 'Vista Panorámica'; +$app_list_strings['marker_image_list']['park'] = 'Parque'; +$app_list_strings['marker_image_list']['park_and_ride'] = 'Parque y Camiata'; +$app_list_strings['marker_image_list']['parking'] = 'Estacionamiento'; +$app_list_strings['marker_image_list']['photo'] = 'Foto'; +$app_list_strings['marker_image_list']['picnic'] = 'Picnic'; +$app_list_strings['marker_image_list']['places_unvisited'] = 'Lugares no Visitados'; +$app_list_strings['marker_image_list']['places_visited'] = 'Lugares Visitados'; +$app_list_strings['marker_image_list']['playground'] = 'Plaza'; +$app_list_strings['marker_image_list']['police'] = 'Policía'; +$app_list_strings['marker_image_list']['port'] = 'Puerto'; +$app_list_strings['marker_image_list']['postal'] = 'Postal'; +$app_list_strings['marker_image_list']['power_line_pole'] = 'Poste de Línea Eléctrica'; +$app_list_strings['marker_image_list']['power_plant'] = 'Planta de Energía'; +$app_list_strings['marker_image_list']['power_substation'] = 'Subestación de Energía'; +$app_list_strings['marker_image_list']['public_art'] = 'Arte Público'; +$app_list_strings['marker_image_list']['rain'] = 'Lluvia'; +$app_list_strings['marker_image_list']['real_estate'] = 'Inmobiliaria'; +$app_list_strings['marker_image_list']['regroup'] = 'Reagrupamiento'; +$app_list_strings['marker_image_list']['resort'] = 'Resort'; +$app_list_strings['marker_image_list']['restaurant'] = 'Restaurant'; +$app_list_strings['marker_image_list']['restaurant_african'] = 'Restaurant Africana'; +$app_list_strings['marker_image_list']['restaurant_barbecue'] = 'Restaurant Barbacoa'; +$app_list_strings['marker_image_list']['restaurant_buffet'] = 'Restaurant Buffet'; +$app_list_strings['marker_image_list']['restaurant_chinese'] = 'Restaurant Chino'; +$app_list_strings['marker_image_list']['restaurant_fish'] = 'Restaurant Pescado'; +$app_list_strings['marker_image_list']['restaurant_fish_chips'] = 'Restaurant Chips de Pescado'; +$app_list_strings['marker_image_list']['restaurant_gourmet'] = 'Restaurant Gourmet'; +$app_list_strings['marker_image_list']['restaurant_greek'] = 'Restaurant Griego'; +$app_list_strings['marker_image_list']['restaurant_indian'] = 'Restaurant Hindú'; +$app_list_strings['marker_image_list']['restaurant_italian'] = 'Restaurant Italiano'; +$app_list_strings['marker_image_list']['restaurant_japanese'] = 'Restaurant Japonés'; +$app_list_strings['marker_image_list']['restaurant_kebab'] = 'Restaurant Brochette'; +$app_list_strings['marker_image_list']['restaurant_korean'] = 'Restaurant Coreano'; +$app_list_strings['marker_image_list']['restaurant_mediterranean'] = 'Restaurant Mediterráneo'; +$app_list_strings['marker_image_list']['restaurant_mexican'] = 'Restaurant Mexicano'; +$app_list_strings['marker_image_list']['restaurant_romantic'] = 'Restaurant Romántico'; +$app_list_strings['marker_image_list']['restaurant_thai'] = 'Restaurant Thai'; +$app_list_strings['marker_image_list']['restaurant_turkish'] = 'Restaurant Turco'; +$app_list_strings['marker_image_list']['right'] = 'Derecha'; +$app_list_strings['marker_image_list']['right_then_down'] = 'Derecha Luego Abajo'; +$app_list_strings['marker_image_list']['right_then_up'] = 'Derecha Luego Arriba'; +$app_list_strings['marker_image_list']['satursday'] = 'Sábado'; +$app_list_strings['marker_image_list']['school'] = 'Escuela'; +$app_list_strings['marker_image_list']['shopping_mall'] = 'Mall'; +$app_list_strings['marker_image_list']['shore'] = 'Apuntalamiento'; +$app_list_strings['marker_image_list']['sight'] = 'Vista'; +$app_list_strings['marker_image_list']['small_city'] = 'Pequeña Ciudad'; +$app_list_strings['marker_image_list']['snow'] = 'Nieve'; +$app_list_strings['marker_image_list']['spaceport'] = 'Puerto Espacial'; +$app_list_strings['marker_image_list']['speed_100'] = 'Velocidad 100'; +$app_list_strings['marker_image_list']['speed_110'] = 'Velocidad 110'; +$app_list_strings['marker_image_list']['speed_120'] = 'Velocidad 120'; +$app_list_strings['marker_image_list']['speed_130'] = 'Velocidad 130'; +$app_list_strings['marker_image_list']['speed_20'] = 'Velocidad 20'; +$app_list_strings['marker_image_list']['speed_30'] = 'Velocidad 30'; +$app_list_strings['marker_image_list']['speed_40'] = 'Velocidad 40'; +$app_list_strings['marker_image_list']['speed_50'] = 'Velocidad 50'; +$app_list_strings['marker_image_list']['speed_60'] = 'Velocidad 60'; +$app_list_strings['marker_image_list']['speed_hump'] = 'Velocidad Hump'; +$app_list_strings['marker_image_list']['stadium'] = 'Estadio'; +$app_list_strings['marker_image_list']['statue'] = 'Estatua'; +$app_list_strings['marker_image_list']['steam_train'] = 'Tren a Vapor'; +$app_list_strings['marker_image_list']['stop'] = 'Stop'; +$app_list_strings['marker_image_list']['stoplight'] = 'Semáforo'; +$app_list_strings['marker_image_list']['subway'] = 'Subterráneo'; +$app_list_strings['marker_image_list']['sun'] = 'Sol'; +$app_list_strings['marker_image_list']['sunday'] = 'Domingo'; +$app_list_strings['marker_image_list']['supermarket'] = 'Super Mercado'; +$app_list_strings['marker_image_list']['synagogue'] = 'Sinagoga'; +$app_list_strings['marker_image_list']['tapas'] = 'Tapas'; +$app_list_strings['marker_image_list']['taxi'] = 'Taxi'; +$app_list_strings['marker_image_list']['taxiway'] = 'Vía p/Taxis'; +$app_list_strings['marker_image_list']['teahouse'] = 'Casa de Té'; +$app_list_strings['marker_image_list']['telephone'] = 'Teléfono'; +$app_list_strings['marker_image_list']['temple_hindu'] = 'Templo Hindú'; +$app_list_strings['marker_image_list']['terrace'] = 'Terraza'; +$app_list_strings['marker_image_list']['text'] = 'Texto'; +$app_list_strings['marker_image_list']['theater'] = 'Teatro'; +$app_list_strings['marker_image_list']['theme_park'] = 'Parque Temático'; +$app_list_strings['marker_image_list']['thursday'] = 'Jueves'; +$app_list_strings['marker_image_list']['toilets'] = 'Toilets'; +$app_list_strings['marker_image_list']['toll_station'] = 'Peaje'; +$app_list_strings['marker_image_list']['tower'] = 'Torre'; +$app_list_strings['marker_image_list']['traffic_enforcement_camera'] = 'Control de Velocidad'; +$app_list_strings['marker_image_list']['train'] = 'Tren'; +$app_list_strings['marker_image_list']['tram'] = 'Tranvía'; +$app_list_strings['marker_image_list']['truck'] = 'Camión'; +$app_list_strings['marker_image_list']['tuesday'] = 'Martes'; +$app_list_strings['marker_image_list']['tunnel'] = 'Tunel'; +$app_list_strings['marker_image_list']['turn_left'] = 'Giro a la Izquierda'; +$app_list_strings['marker_image_list']['turn_right'] = 'Giro a la Derecha'; +$app_list_strings['marker_image_list']['university'] = 'Universidad'; +$app_list_strings['marker_image_list']['up'] = 'Arriba'; +$app_list_strings['marker_image_list']['vespa'] = 'Vespa'; +$app_list_strings['marker_image_list']['video'] = 'Video'; +$app_list_strings['marker_image_list']['villa'] = 'Villa'; +$app_list_strings['marker_image_list']['water'] = 'Water'; +$app_list_strings['marker_image_list']['waterfall'] = 'Waterfall'; +$app_list_strings['marker_image_list']['watermill'] = 'Watermill'; +$app_list_strings['marker_image_list']['waterpark'] = 'Waterpark'; +$app_list_strings['marker_image_list']['watertower'] = 'Watertower'; +$app_list_strings['marker_image_list']['wednesday'] = 'Wednesday'; +$app_list_strings['marker_image_list']['wifi'] = 'Wifi'; +$app_list_strings['marker_image_list']['wind_turbine'] = 'Wind Turbine'; +$app_list_strings['marker_image_list']['windmill'] = 'Windmill'; +$app_list_strings['marker_image_list']['winery'] = 'Winery'; +$app_list_strings['marker_image_list']['work_office'] = 'Work Office'; +$app_list_strings['marker_image_list']['world_heritage_site'] = 'World Heritage Site'; +$app_list_strings['marker_image_list']['zoo'] = 'Zoo'; + -$app_list_strings['vat_list']['0.0'] = '0%'; -$app_list_strings['vat_list']['5.0'] = '5%'; -$app_list_strings['vat_list']['7.5'] = '7.5%'; -$app_list_strings['vat_list']['17.5'] = '17.5%'; -$app_list_strings['vat_list']['20.0'] = '20%'; -$app_list_strings['pdf_template_sample_dom'][''] = ''; +$app_list_strings['marker_image_list']['speed_70'] = 'Velocidad 70'; +$app_list_strings['marker_image_list']['speed_80'] = 'Velocidad 80'; +$app_list_strings['marker_image_list']['speed_90'] = 'Velocidad 90'; +$app_list_strings['marker_image_list']['speed_hump'] = 'Velocidad Hump'; +$app_list_strings['marker_image_list']['stadium'] = 'Stadium'; +$app_list_strings['marker_image_list']['statue'] = 'Statue'; +$app_list_strings['marker_image_list']['steam_train'] = 'Steam Train'; +$app_list_strings['marker_image_list']['stop'] = 'Stop'; +$app_list_strings['marker_image_list']['stoplight'] = 'Stoplight'; +$app_list_strings['marker_image_list']['subway'] = 'Subway'; +$app_list_strings['marker_image_list']['sun'] = 'Sun'; +$app_list_strings['marker_image_list']['sunday'] = 'Sunday'; +$app_list_strings['marker_image_list']['supermarket'] = 'Supermarket'; +$app_list_strings['marker_image_list']['synagogue'] = 'Synagogue'; +$app_list_strings['marker_image_list']['tapas'] = 'Tapas'; +$app_list_strings['marker_image_list']['taxi'] = 'Taxi'; +$app_list_strings['marker_image_list']['taxiway'] = 'Taxiway'; +$app_list_strings['marker_image_list']['teahouse'] = 'Teahouse'; +$app_list_strings['marker_image_list']['telephone'] = 'Telephone'; +$app_list_strings['marker_image_list']['temple_hindu'] = 'Temple Hindu'; +$app_list_strings['marker_image_list']['terrace'] = 'Terrace'; +$app_list_strings['marker_image_list']['text'] = 'Text'; +$app_list_strings['marker_image_list']['theater'] = 'Theater'; +$app_list_strings['marker_image_list']['theme_park'] = 'Theme Park'; +$app_list_strings['marker_image_list']['thursday'] = 'Thursday'; +$app_list_strings['marker_image_list']['toilets'] = 'Toilets'; +$app_list_strings['marker_image_list']['toll_station'] = 'Toll Station'; +$app_list_strings['marker_image_list']['tower'] = 'Tower'; +$app_list_strings['marker_image_list']['traffic_enforcement_camera'] = 'Traffic Enforcement Camera'; +$app_list_strings['marker_image_list']['train'] = 'Train'; +$app_list_strings['marker_image_list']['tram'] = 'Tram'; +$app_list_strings['marker_image_list']['truck'] = 'Truck'; +$app_list_strings['marker_image_list']['tuesday'] = 'Tuesday'; +$app_list_strings['marker_image_list']['tunnel'] = 'Tunnel'; +$app_list_strings['marker_image_list']['turn_left'] = 'Turn Left'; +$app_list_strings['marker_image_list']['turn_right'] = 'Turn Right'; +$app_list_strings['marker_image_list']['university'] = 'University'; +$app_list_strings['marker_image_list']['up'] = 'Up'; +$app_list_strings['marker_image_list']['up_left'] = 'Arriba Izquierda'; +$app_list_strings['marker_image_list']['up_right'] = 'Arriba Derecha'; +$app_list_strings['marker_image_list']['up_then_left'] = 'Arriba Luego Izquierda'; +$app_list_strings['marker_image_list']['up_then_right'] = 'Arriba Luego Derecha'; +$app_list_strings['marker_image_list']['vespa'] = 'Vespa'; +$app_list_strings['marker_image_list']['video'] = 'Video'; +$app_list_strings['marker_image_list']['villa'] = 'Villa'; +$app_list_strings['marker_image_list']['water'] = 'Agua'; +$app_list_strings['marker_image_list']['waterfall'] = 'Cascada'; +$app_list_strings['marker_image_list']['watermill'] = 'Molino de Agua'; +$app_list_strings['marker_image_list']['waterpark'] = 'Parque Acuático'; +$app_list_strings['marker_image_list']['watertower'] = 'Torre de Agua'; +$app_list_strings['marker_image_list']['wednesday'] = 'Miércoles'; +$app_list_strings['marker_image_list']['wifi'] = 'WiFi'; +$app_list_strings['marker_image_list']['wind_turbine'] = 'Turbina de Viento'; +$app_list_strings['marker_image_list']['windmill'] = 'Molino de Viento'; +$app_list_strings['marker_image_list']['winery'] = 'Lagar'; +$app_list_strings['marker_image_list']['work_office'] = 'Oficina'; +$app_list_strings['marker_image_list']['world_heritage_site'] = 'Patrimonio de la Humanidad'; +$app_list_strings['marker_image_list']['zoo'] = 'Zoo'; @@ -1091,6 +1049,48 @@ $app_list_strings['marker_image_list']['world_heritage_site'] = 'Patrimonio de la Humanidad'; $app_list_strings['marker_image_list']['zoo'] = 'Zoo'; + +/** + * Extensions to SugarCRM + * @package Reschedule for SugarCRM + * @subpackage Products + * @copyright SalesAgility Ltd http://www.salesagility.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with this program; if not, see http://www.gnu.org/licenses + * or write to the Free Software Foundation,Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA + * + * @author Salesagility Ltd + */ + +$app_list_strings['call_reschedule_dom'][''] = ''; +$app_list_strings['call_reschedule_dom']['Out of Office'] = 'Fuera de la Oficina'; +$app_list_strings['call_reschedule_dom']['In a Meeting'] = 'En una reunion'; + +$app_strings['LBL_RESCHEDULE_LABEL'] = 'Replanificar'; +$app_strings['LBL_RESCHEDULE_TITLE'] = 'Por favor ingrese los datos de la Replanificación'; +$app_strings['LBL_RESCHEDULE_DATE'] = 'Fecha:'; +$app_strings['LBL_RESCHEDULE_REASON'] = 'Razón:'; +$app_strings['LBL_RESCHEDULE_ERROR1'] = 'Por favor seleccione una fecha válida'; +$app_strings['LBL_RESCHEDULE_ERROR2'] = 'Por favor seleccione una razón'; + +$app_strings['LBL_RESCHEDULE_PANEL'] = 'Replanificar'; +$app_strings['LBL_RESCHEDULE_HISTORY'] = 'Historial de Intentos de Llamada'; +$app_strings['LBL_RESCHEDULE_COUNT'] = 'Intentos de Llamada'; + + + $app_list_strings["moduleList"]["SecurityGroups"] = 'Administración de Grupos de Seguridad'; diff --git a/custom/application/Ext/TableDictionary/tabledictionary.ext.php b/custom/application/Ext/TableDictionary/tabledictionary.ext.php index 5e5d2f18ef6..9653675124b 100755 --- a/custom/application/Ext/TableDictionary/tabledictionary.ext.php +++ b/custom/application/Ext/TableDictionary/tabledictionary.ext.php @@ -8,7 +8,7 @@ //WARNING: The contents of this file are auto-generated -include('custom/metadata/aow_processed_aow_actionsMetaData.php'); +include('custom/metadata/aos_quotes_aos_contractsMetaData.php'); @@ -18,62 +18,62 @@ //WARNING: The contents of this file are auto-generated -include('custom/metadata/jjwg_maps_jjwg_markersMetaData.php'); +include('custom/metadata/aos_quotes_projectMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_fp_event_delegates_1MetaData.php'); +include('custom/metadata/aow_processed_aow_actionsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_prospects_1MetaData.php'); +include('custom/metadata/fp_event_locations_fp_events_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/jjwg_maps_jjwg_areasMetaData.php'); +include('custom/metadata/fp_events_fp_event_delegates_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_aos_contractsMetaData.php'); +include('custom/metadata/fp_events_fp_event_locations_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_usersMetaData.php'); +include('custom/metadata/fp_events_prospects_1MetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_event_locations_fp_events_1MetaData.php'); +include('custom/metadata/jjwg_maps_jjwg_areasMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_acl_rolesMetaData.php'); +include('custom/metadata/jjwg_maps_jjwg_markersMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_recordsMetaData.php'); +include('custom/metadata/securitygroups_acl_rolesMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/fp_events_fp_event_locations_1MetaData.php'); +include('custom/metadata/securitygroups_defaultsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/securitygroups_defaultsMetaData.php'); +include('custom/metadata/securitygroups_recordsMetaData.php'); //WARNING: The contents of this file are auto-generated -include('custom/metadata/aos_quotes_projectMetaData.php'); +include('custom/metadata/securitygroups_usersMetaData.php'); ?> \ No newline at end of file diff --git a/index.php b/index.php index 6abc3123964..ff32c76fd3b 100755 --- a/index.php +++ b/index.php @@ -1,8 +1,4 @@ Date: Mon, 3 Feb 2014 21:22:32 -0800 Subject: [PATCH 161/223] 7.1beta --- config_override.php | 10 --- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Vardefs/sugarfield_facebook_user_c.php | 5 -- .../Vardefs/sugarfield_facebookAPI_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Vardefs/sugarfield_facebook_user_c.php | 5 -- .../Vardefs/sugarfield_facebookAPIuser_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitteruser_c.php | 5 -- .../Vardefs/sugarfield_facebook_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Vardefs/sugarfield_facebook_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Vardefs/sugarfield_facebookAPIuser_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Vardefs/sugarfield_facebook_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 6 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 6 -- .../Ext/Vardefs/sugarfield_twitter_user_c.php | 5 -- custom/include/social/get_feed_data.php | 3 +- modules/AOD_Index/AOD_LogicHooks.php | 2 +- modules/AOW_WorkFlow/language/en_us.lang.php | 64 ++++++++++++++++++- 30 files changed, 66 insertions(+), 145 deletions(-) delete mode 100755 custom/Extension/modules/AOS_Contracts/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/AOS_PDF_Templates/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/AOS_Quotes/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Bugs/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_facebookAPI_user_c.php delete mode 100755 custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Campaigns/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_facebookAPIuser_c.php delete mode 100755 custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitteruser_c.php delete mode 100755 custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/Documents/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/FP_Event_Locations/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_facebookAPIuser_c.php delete mode 100755 custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_facebook_user_c.php delete mode 100755 custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Project/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Tasks/Ext/Vardefs/sugarfield_twitter_user_c.php delete mode 100755 custom/Extension/modules/Users/Ext/Vardefs/sugarfield_twitter_user_c.php diff --git a/config_override.php b/config_override.php index d2695ee008d..0f3b9e95965 100755 --- a/config_override.php +++ b/config_override.php @@ -1,13 +1,3 @@ \ No newline at end of file diff --git a/custom/Extension/modules/AOS_PDF_Templates/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/AOS_PDF_Templates/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 2b4e310adf3..00000000000 --- a/custom/Extension/modules/AOS_PDF_Templates/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/AOS_Quotes/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/AOS_Quotes/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 82ea48ee802..00000000000 --- a/custom/Extension/modules/AOS_Quotes/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 381f4c4932b..00000000000 --- a/custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Bugs/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Bugs/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index 04324680583..00000000000 --- a/custom/Extension/modules/Bugs/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_facebookAPI_user_c.php b/custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_facebookAPI_user_c.php deleted file mode 100755 index aa5e1915722..00000000000 --- a/custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_facebookAPI_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 160401be349..00000000000 --- a/custom/Extension/modules/Calls/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Campaigns/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Campaigns/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index a537b7fb76c..00000000000 --- a/custom/Extension/modules/Campaigns/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_facebookAPIuser_c.php b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_facebookAPIuser_c.php deleted file mode 100755 index 2d6ba197909..00000000000 --- a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_facebookAPIuser_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 2dd91f41b03..00000000000 --- a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitteruser_c.php b/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitteruser_c.php deleted file mode 100755 index fcfb99b1dd9..00000000000 --- a/custom/Extension/modules/Cases/Ext/Vardefs/sugarfield_twitteruser_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index 0b2398d89b2..00000000000 --- a/custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Documents/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Documents/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 5bd757bf1ca..00000000000 --- a/custom/Extension/modules/Documents/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/FP_Event_Locations/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/FP_Event_Locations/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 958278338ba..00000000000 --- a/custom/Extension/modules/FP_Event_Locations/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index 574986f81b4..00000000000 --- a/custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 7f08643b7c6..00000000000 --- a/custom/Extension/modules/FP_events/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index ff4c81b4605..00000000000 --- a/custom/Extension/modules/Leads/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_facebookAPIuser_c.php b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_facebookAPIuser_c.php deleted file mode 100755 index 89d8c43b5fb..00000000000 --- a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_facebookAPIuser_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index c72afcc67ad..00000000000 --- a/custom/Extension/modules/Meetings/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_facebook_user_c.php b/custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_facebook_user_c.php deleted file mode 100755 index f5584d468a9..00000000000 --- a/custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_facebook_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index cc2ff6519bd..00000000000 --- a/custom/Extension/modules/Notes/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 5f6b626cd26..00000000000 --- a/custom/Extension/modules/Opportunities/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 7f70eb2986f..00000000000 --- a/custom/Extension/modules/Project/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index 4aa7344048a..00000000000 --- a/custom/Extension/modules/Prospects/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Tasks/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Tasks/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index c864892a4ec..00000000000 --- a/custom/Extension/modules/Tasks/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/custom/Extension/modules/Users/Ext/Vardefs/sugarfield_twitter_user_c.php b/custom/Extension/modules/Users/Ext/Vardefs/sugarfield_twitter_user_c.php deleted file mode 100755 index f2d7706757b..00000000000 --- a/custom/Extension/modules/Users/Ext/Vardefs/sugarfield_twitter_user_c.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/custom/include/social/get_feed_data.php b/custom/include/social/get_feed_data.php index c7e817621b4..cb4934a5dd8 100755 --- a/custom/include/social/get_feed_data.php +++ b/custom/include/social/get_feed_data.php @@ -17,7 +17,8 @@ global $current_user; global $sugar_config; -session_start(); +//session_start(); +$html = ''; $twitter_enabled = check_enabled($db, 'twitter'); diff --git a/modules/AOD_Index/AOD_LogicHooks.php b/modules/AOD_Index/AOD_LogicHooks.php index 6c77ee8a660..2fda520ae41 100644 --- a/modules/AOD_Index/AOD_LogicHooks.php +++ b/modules/AOD_Index/AOD_LogicHooks.php @@ -25,7 +25,7 @@ class AOD_LogicHooks{ function saveModuleChanges(SugarBean $bean, $event, $arguments){ - if(defined('sugarEntry') && SUGARCRM_IS_INSTALLING){ + if(defined('sugarEntry') && 'SUGARCRM_IS_INSTALLING'){ return; } $index = BeanFactory::getBean("AOD_Index")->getIndex(); diff --git a/modules/AOW_WorkFlow/language/en_us.lang.php b/modules/AOW_WorkFlow/language/en_us.lang.php index 50cce95b3fc..4607a440e3c 100755 --- a/modules/AOW_WorkFlow/language/en_us.lang.php +++ b/modules/AOW_WorkFlow/language/en_us.lang.php @@ -1,3 +1,65 @@ + */ - +$mod_strings = array ( + 'LBL_ASSIGNED_TO_ID' => 'Assigned User Id', + 'LBL_ASSIGNED_TO_NAME' => 'Assigned to', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Date Created', + 'LBL_DATE_MODIFIED' => 'Date Modified', + 'LBL_MODIFIED' => 'Modified By', + 'LBL_MODIFIED_ID' => 'Modified By Id', + 'LBL_MODIFIED_NAME' => 'Modified By Name', + 'LBL_CREATED' => 'Created By', + 'LBL_CREATED_ID' => 'Created By Id', + 'LBL_DESCRIPTION' => 'Description', + 'LBL_DELETED' => 'Deleted', + 'LBL_NAME' => 'Name', + 'LBL_CREATED_USER' => 'Created by User', + 'LBL_MODIFIED_USER' => 'Modified by User', + 'LBL_LIST_NAME' => 'Name', + 'LBL_LIST_FORM_TITLE' => 'WorkFlow List', + 'LBL_MODULE_NAME' => 'WorkFlow', + 'LBL_MODULE_TITLE' => 'WorkFlow', + 'LBL_HOMEPAGE_TITLE' => 'My Work Flow', + 'LNK_NEW_RECORD' => 'Create WorkFlow', + 'LNK_LIST' => 'View WorkFlow', + 'LNK_PROCESSED_LIST' => 'View Process Audit', + 'LNK_IMPORT_AOW_WORKFLOW' => 'Import WorkFlow', + 'LBL_SEARCH_FORM_TITLE' => 'Search WorkFlow', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'View History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Activities', + 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', + 'LBL_NEW_FORM_TITLE' => 'New WorkFlow', + 'LBL_FLOW_MODULE' => 'WorkFlow Module', + 'LBL_STATUS' => 'Status', + 'LBL_FLOW_RUN_ON' => 'Run On', + 'LNK_IMPORT_AOW_WORKFLOW' => 'Import WorkFlow', + 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', + 'LBL_CONDITION_LINES' => 'Conditions', + 'LBL_ADD_CONDITION' => 'Add Condition', + 'LBL_ACTION_LINES' => 'Actions', + 'LBL_ADD_ACTION' => 'Add Action', + 'LBL_MULTIPLE_RUNS' => 'Repeated Runs', +); From 38be17496801b640f9a2202aae9db5c36de0d412 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 3 Feb 2014 21:43:27 -0800 Subject: [PATCH 162/223] 7.1beta --- .../Ext/Extensions/aow_workflow.php | 2 +- .../Language/en_us.AdvancedOpenWorkflow.php | 7 +- .../Ext/Extensions/extensions.ext.php | 2 +- .../Ext/Language/en_us.lang.ext.php | 7 +- .../Ext/Language/fr_FR.lang.ext.php | 123 +------ modules/AOW_Actions/actions.php | 1 + modules/AOW_Actions/actions/actionBase.php | 2 +- .../actions/actionCreateRecord.php | 15 +- .../actions/actionModifyRecord.php | 6 +- .../AOW_Actions/actions/actionSendEmail.php | 4 +- modules/AOW_Conditions/AOW_Condition.php | 1 + modules/AOW_Conditions/conditionLines.js | 2 +- modules/AOW_Conditions/vardefs.php | 7 + modules/AOW_Processed/vardefs.php | 5 + modules/AOW_WorkFlow/AOW_WorkFlow.php | 314 ++++++++++++++++-- modules/AOW_WorkFlow/aow_utils.php | 52 ++- modules/AOW_WorkFlow/language/en_us.lang.php | 78 ++--- .../AOW_WorkFlow/metadata/detailviewdefs.php | 7 +- .../AOW_WorkFlow/metadata/editviewdefs.php | 7 +- modules/AOW_WorkFlow/vardefs.php | 25 +- 20 files changed, 462 insertions(+), 205 deletions(-) diff --git a/custom/Extension/application/Ext/Extensions/aow_workflow.php b/custom/Extension/application/Ext/Extensions/aow_workflow.php index a0cbbd15f55..e41b4aea7d6 100755 --- a/custom/Extension/application/Ext/Extensions/aow_workflow.php +++ b/custom/Extension/application/Ext/Extensions/aow_workflow.php @@ -22,4 +22,4 @@ * @author SalesAgility */ -$extensions["aowactions"] = array("section" => "aow_actions", "extdir" => "Actions", "file" => 'actions.ext.php', "module" => "AOW_Actions"); \ No newline at end of file +$extensions["schedulers"] = array("section" => "aow_actions", "extdir" => "Actions", "file" => 'actions.ext.php', "module" => "AOW_Actions"); \ No newline at end of file diff --git a/custom/Extension/application/Ext/Language/en_us.AdvancedOpenWorkflow.php b/custom/Extension/application/Ext/Language/en_us.AdvancedOpenWorkflow.php index cec44fe7cb1..ce67f9d557c 100755 --- a/custom/Extension/application/Ext/Language/en_us.AdvancedOpenWorkflow.php +++ b/custom/Extension/application/Ext/Language/en_us.AdvancedOpenWorkflow.php @@ -3,7 +3,7 @@ * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM * @copyright SalesAgility Ltd http://www.salesagility.com - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation; either version 3 of the License, or @@ -79,5 +79,10 @@ $app_list_strings['aow_email_type_list']['Record Email'] = 'Record Email'; $app_list_strings['aow_email_type_list']['Specify User'] = 'User'; $app_list_strings['aow_email_type_list']['Related Field'] = 'Related Field'; +$app_list_strings['aow_run_on_list']['All_Records'] = 'All Records'; +$app_list_strings['aow_run_on_list']['New_Records'] = 'New Records'; +$app_list_strings['aow_run_on_list']['Modified_Records'] = 'Modified Records'; + + diff --git a/custom/application/Ext/Extensions/extensions.ext.php b/custom/application/Ext/Extensions/extensions.ext.php index 7b4988bd768..9c99b462296 100755 --- a/custom/application/Ext/Extensions/extensions.ext.php +++ b/custom/application/Ext/Extensions/extensions.ext.php @@ -25,5 +25,5 @@ * @author SalesAgility */ -$extensions["aowactions"] = array("section" => "aow_actions", "extdir" => "Actions", "file" => 'actions.ext.php', "module" => "AOW_Actions"); +$extensions["schedulers"] = array("section" => "aow_actions", "extdir" => "Actions", "file" => 'actions.ext.php', "module" => "AOW_Actions"); ?> \ No newline at end of file diff --git a/custom/application/Ext/Language/en_us.lang.ext.php b/custom/application/Ext/Language/en_us.lang.ext.php index 4867c48584b..77b6aa2a074 100755 --- a/custom/application/Ext/Language/en_us.lang.ext.php +++ b/custom/application/Ext/Language/en_us.lang.ext.php @@ -330,7 +330,7 @@ * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM * @copyright SalesAgility Ltd http://www.salesagility.com - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation; either version 3 of the License, or @@ -406,6 +406,11 @@ $app_list_strings['aow_email_type_list']['Record Email'] = 'Record Email'; $app_list_strings['aow_email_type_list']['Specify User'] = 'User'; $app_list_strings['aow_email_type_list']['Related Field'] = 'Related Field'; +$app_list_strings['aow_run_on_list']['All_Records'] = 'All Records'; +$app_list_strings['aow_run_on_list']['New_Records'] = 'New Records'; +$app_list_strings['aow_run_on_list']['Modified_Records'] = 'Modified Records'; + + diff --git a/custom/application/Ext/Language/fr_FR.lang.ext.php b/custom/application/Ext/Language/fr_FR.lang.ext.php index b7b6b6395d1..9ba5891a11a 100755 --- a/custom/application/Ext/Language/fr_FR.lang.ext.php +++ b/custom/application/Ext/Language/fr_FR.lang.ext.php @@ -2,122 +2,6 @@ //WARNING: The contents of this file are auto-generated - -$app_list_strings["moduleList"]["SecurityGroups"] = "Gestion des équipes"; -$app_strings['LBL_LOGIN_AS'] = "Ouverture comme "; -$app_strings['LBL_LOGOUT_AS'] = "Dconnexion comme "; - - - -/** - * Products, Quotations & Invoices modules. - * Extensions to SugarCRM - * @package Advanced OpenSales for SugarCRM - * @subpackage Products - * @copyright SalesAgility Ltd http://www.salesagility.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with this program; if not, see http://www.gnu.org/licenses - * or write to the Free Software Foundation,Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA - * - * @author Salesagility Ltd - * French localisation by Patrick Lahaye : patrick.lahaye@axxone.fr - www.axxone.fr - */ - -$app_list_strings['moduleList']['AOS_Contracts'] = 'Contrats'; -$app_list_strings['moduleList']['AOS_Invoices'] = 'Factures'; -$app_list_strings['moduleList']['AOS_PDF_Templates'] = 'Mod&eagrave;les de PDF'; -$app_list_strings['moduleList']['AOS_Product_Categories'] = 'Product Categories'; -$app_list_strings['moduleList']['AOS_Products'] = 'Produits'; -$app_list_strings['moduleList']['AOS_Products_Quotes'] = 'Offres de produits'; -$app_list_strings['moduleList']['AOS_Line_Item_Groups'] = 'Line Item Groups'; -$app_list_strings['moduleList']['AOS_Quotes'] = 'Offres'; -$app_list_strings['aos_quotes_type_dom'][''] = ''; -$app_list_strings['aos_quotes_type_dom']['Analyst'] = 'Analyste'; -$app_list_strings['aos_quotes_type_dom']['Competitor'] = 'Concurrent'; -$app_list_strings['aos_quotes_type_dom']['Customer'] = 'Client'; -$app_list_strings['aos_quotes_type_dom']['Integrator'] = 'Intégrateur'; -$app_list_strings['aos_quotes_type_dom']['Investor'] = 'Investisseur'; -$app_list_strings['aos_quotes_type_dom']['Partner'] = 'Partenaire'; -$app_list_strings['aos_quotes_type_dom']['Press'] = 'Presse'; -$app_list_strings['aos_quotes_type_dom']['Prospect'] = 'Prospect'; -$app_list_strings['aos_quotes_type_dom']['Reseller'] = 'Revendeur'; -$app_list_strings['aos_quotes_type_dom']['Other'] = 'Autre'; -$app_list_strings['template_ddown_c_list'][''] = ''; -$app_list_strings['quote_stage_dom']['Draft'] = 'Ebauche'; -$app_list_strings['quote_stage_dom']['Negotiation'] = 'Négociation'; -$app_list_strings['quote_stage_dom']['Delivered'] = 'Livré'; -$app_list_strings['quote_stage_dom']['On Hold'] = 'En attente'; -$app_list_strings['quote_stage_dom']['Confirmed'] = 'Confirm&ecute'; -$app_list_strings['quote_stage_dom']['Closed Accepted'] = 'Affaire gagée'; -$app_list_strings['quote_stage_dom']['Closed Lost'] = 'Affaire perdue'; -$app_list_strings['quote_stage_dom']['Closed Dead'] = 'Affaire morte'; -$app_list_strings['quote_term_dom']['Net 15'] = 'Net 15'; -$app_list_strings['quote_term_dom']['Net 30'] = 'Net 30'; -$app_list_strings['quote_term_dom']['Net 45'] = 'Net 45'; -$app_list_strings['quote_term_dom'][''] = ''; -$app_list_strings['approval_status_dom']['Approved'] = 'Apprové'; -$app_list_strings['approval_status_dom']['Not Approved'] = 'Non apprové'; -$app_list_strings['approval_status_dom'][''] = ''; -$app_list_strings['vat_list']['5.0'] = '5%'; -$app_list_strings['vat_list']['7.5'] = '7.5%'; -$app_list_strings['vat_list']['17.5'] = '17.5%'; -$app_list_strings['vat_list']['20.0'] = '20%'; -$app_list_strings['discount_list']['Percentage'] = 'Pourcentage'; -$app_list_strings['discount_list']['Amount'] = 'Montant'; -$app_list_strings['aos_invoices_type_dom'][''] = ''; -$app_list_strings['aos_invoices_type_dom']['Analyst'] = 'Analyste'; -$app_list_strings['aos_invoices_type_dom']['Competitor'] = 'Concurrent'; -$app_list_strings['aos_invoices_type_dom']['Customer'] = 'Client'; -$app_list_strings['aos_invoices_type_dom']['Integrator'] = 'Intégrateur'; -$app_list_strings['aos_invoices_type_dom']['Investor'] = 'Investisseurr'; -$app_list_strings['aos_invoices_type_dom']['Partner'] = 'Partnaire'; -$app_list_strings['aos_invoices_type_dom']['Press'] = 'Presse'; -$app_list_strings['aos_invoices_type_dom']['Prospect'] = 'Prospect'; -$app_list_strings['aos_invoices_type_dom']['Reseller'] = 'Revendeur'; -$app_list_strings['aos_invoices_type_dom']['Other'] = 'Autre'; -$app_list_strings['invoice_status_dom']['Paid'] = 'Payée'; -$app_list_strings['invoice_status_dom']['Unpaid'] = 'Non payée'; -$app_list_strings['invoice_status_dom']['Cancelled'] = 'Annulée'; -$app_list_strings['invoice_status_dom'][''] = ''; -$app_list_strings['quote_invoice_status_dom']['Not Invoiced'] = 'Non facturée'; -$app_list_strings['quote_invoice_status_dom']['Invoiced'] = 'Facturée'; -$app_list_strings['product_code_dom']['XXXX'] = 'XXXX'; -$app_list_strings['product_code_dom']['YYYY'] = 'YYYY'; -$app_list_strings['product_category_dom']['Laptops'] = 'Ordi portable'; -$app_list_strings['product_category_dom']['Desktops'] = 'PC'; -$app_list_strings['product_category_dom'][''] = ''; -$app_list_strings['product_type_dom']['Good'] = 'Marchandise'; -$app_list_strings['product_type_dom']['Service'] = 'Service'; -$app_list_strings['product_quote_parent_type_dom']['AOS_Quotes'] = 'Offres'; -$app_list_strings['product_quote_parent_type_dom']['AOS_Invoices'] = 'Factures'; -$app_list_strings['pdf_template_type_dom']['AOS_Quotes'] = 'Offres'; -$app_list_strings['pdf_template_type_dom']['AOS_Invoices'] = 'Factures'; -$app_list_strings['pdf_template_type_dom']['Accounts'] = 'Comptes'; -$app_list_strings['pdf_template_type_dom']['Contacts'] = 'Contacts'; -$app_list_strings['pdf_template_type_dom']['Leads'] = 'Leads'; -$app_list_strings['pdf_template_sample_dom'][''] = ''; -$app_list_strings['contract_status_list']['Not Started'] = 'Non démarrée'; -$app_list_strings['contract_status_list']['In Progress'] = 'En cours'; -$app_list_strings['contract_status_list']['Signed'] = 'Signée'; -$app_list_strings['contract_type_list']['Type'] = 'Type'; -$app_strings['LBL_GENERATE_LETTER'] = 'Générer une lettre'; -$app_strings['LBL_SELECT_TEMPLATE'] = 'Merci de choisir un mod&egarve;le'; -$app_strings['LBL_NO_TEMPLATE'] = 'ERREUR\nAucun mod&eagrave;le trouvé.\nMerci d'en cré un dans le module de création de mod&eagrave;le PDF'; - - - /** * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM @@ -201,4 +85,11 @@ + + +$app_list_strings["moduleList"]["SecurityGroups"] = "Gestion des équipes"; +$app_strings['LBL_LOGIN_AS'] = "Ouverture comme "; +$app_strings['LBL_LOGOUT_AS'] = "Dconnexion comme "; + + ?> \ No newline at end of file diff --git a/modules/AOW_Actions/actions.php b/modules/AOW_Actions/actions.php index dc258027202..e675ae8767e 100755 --- a/modules/AOW_Actions/actions.php +++ b/modules/AOW_Actions/actions.php @@ -25,6 +25,7 @@ $aow_actions_list[]='CreateRecord'; $aow_actions_list[]='ModifyRecord'; $aow_actions_list[]='SendEmail'; + $aow_actions_list[]='SetApproval'; if (file_exists('custom/modules/AOW_Actions/Ext/Actions/actions.ext.php')) { diff --git a/modules/AOW_Actions/actions/actionBase.php b/modules/AOW_Actions/actions/actionBase.php index f6ed603c17e..45ef282a0b6 100755 --- a/modules/AOW_Actions/actions/actionBase.php +++ b/modules/AOW_Actions/actions/actionBase.php @@ -42,7 +42,7 @@ function edit_display($line,SugarBean $bean = null, $params = array()){ } - function run_action(SugarBean $bean, $params = array()){ + function run_action(SugarBean $bean, $params = array(), $in_save=false){ return true; diff --git a/modules/AOW_Actions/actions/actionCreateRecord.php b/modules/AOW_Actions/actions/actionCreateRecord.php index a137f679758..b75d5e8bb4b 100755 --- a/modules/AOW_Actions/actions/actionCreateRecord.php +++ b/modules/AOW_Actions/actions/actionCreateRecord.php @@ -91,7 +91,7 @@ function edit_display($line,SugarBean $bean = null, $params = array()){ } - function run_action(SugarBean $bean, $params = array()){ + function run_action(SugarBean $bean, $params = array(), $in_save=false){ global $beanList; if(isset($params['record_type']) && $params['record_type'] != ''){ @@ -119,7 +119,7 @@ function run_action(SugarBean $bean, $params = array()){ return false; } - function set_record(SugarBean $record, SugarBean $bean, $params = array()){ + function set_record(SugarBean $record, SugarBean $bean, $params = array(), $in_save = false){ global $app_list_strings, $timedate; $record_vardefs = $record->getFieldDefinitions(); @@ -160,9 +160,9 @@ function set_record(SugarBean $record, SugarBean $bean, $params = array()){ $value = $businessHours->addBusinessHours($amount); }else if($dateToUse == "field"){ $dateToUse = $params['field'][$key]; - $value = $businessHours->addBusinessHours($amount, $timedate->fromDb($record->fetched_row[$dateToUse])); + $value = $businessHours->addBusinessHours($amount, $timedate->fromDb($bean->$dateToUse)); }else{ - $value = $businessHours->addBusinessHours($amount, $timedate->fromDb($bean->fetched_row[$dateToUse])); + $value = $businessHours->addBusinessHours($amount, $timedate->fromDb($bean->$dateToUse)); } $value = $timedate->asDb( $value ); break; @@ -273,9 +273,12 @@ function set_record(SugarBean $record, SugarBean $bean, $params = array()){ $record->$field = $value; } } - $record->process_save_dates =false; - $check_notify = $record->assigned_user_id != $record->fetched_row['assigned_user_id']; + $check_notify = false; + if($in_save) $record->processed = true; + else $check_notify = $record->assigned_user_id != $record->fetched_row['assigned_user_id']; + + $record->process_save_dates =false; $record->save($check_notify); } diff --git a/modules/AOW_Actions/actions/actionModifyRecord.php b/modules/AOW_Actions/actions/actionModifyRecord.php index dba7b5f93d8..0580112de55 100755 --- a/modules/AOW_Actions/actions/actionModifyRecord.php +++ b/modules/AOW_Actions/actions/actionModifyRecord.php @@ -88,9 +88,9 @@ function updateFlowModule(){ return $html; } - function run_action(SugarBean $bean, $params = array()){ - - $this->set_record($bean, $bean, $params); + function run_action(SugarBean $bean, $params = array(), $in_save=false){ + $GLOBALS['log']->fatal('Running Action modify record for bean - '.$bean->id); + $this->set_record($bean, $bean, $params, $in_save); $this->set_relationships($bean, $bean, $params); return true; diff --git a/modules/AOW_Actions/actions/actionSendEmail.php b/modules/AOW_Actions/actions/actionSendEmail.php index 7055542d385..357b92c64e4 100755 --- a/modules/AOW_Actions/actions/actionSendEmail.php +++ b/modules/AOW_Actions/actions/actionSendEmail.php @@ -191,7 +191,7 @@ private function getEmailFromParams(SugarBean $bean, $params){ return ""; } - function run_action(SugarBean $bean, $params = array()){ + function run_action(SugarBean $bean, $params = array(), $in_save=false){ global $sugar_config; include_once('modules/EmailTemplates/EmailTemplate.php'); @@ -245,7 +245,7 @@ function sendEmail($emailTo, $emailSubject, $emailBody, $altemailBody, SugarBean //now create email if (@$mail->Send()) { $emailObj->to_addrs= $emailTo; - $emailObj->type= 'archived'; + $emailObj->type= 'out'; $emailObj->deleted = '0'; $emailObj->name = $mail->Subject; $emailObj->description = $mail->AltBody; diff --git a/modules/AOW_Conditions/AOW_Condition.php b/modules/AOW_Conditions/AOW_Condition.php index 78589f87b33..de9ae213fd6 100755 --- a/modules/AOW_Conditions/AOW_Condition.php +++ b/modules/AOW_Conditions/AOW_Condition.php @@ -46,6 +46,7 @@ class AOW_Condition extends Basic { var $modified_user_link; var $aow_workflow_id; var $condition_order; + var $module_path; var $field; var $operator; var $value; diff --git a/modules/AOW_Conditions/conditionLines.js b/modules/AOW_Conditions/conditionLines.js index 5673191461d..1eb99511480 100755 --- a/modules/AOW_Conditions/conditionLines.js +++ b/modules/AOW_Conditions/conditionLines.js @@ -109,7 +109,7 @@ function showModuleField(ln, operator_value, type_value, field_value){ success: function(result) { document.getElementById('aow_conditions_fieldInput'+ln).innerHTML = result.responseText; SUGAR.util.evalScript(result.responseText); - enableQS(false); + enableQS(true); }, failure: function(result) { document.getElementById('aow_conditions_fieldInput'+ln).innerHTML = ''; diff --git a/modules/AOW_Conditions/vardefs.php b/modules/AOW_Conditions/vardefs.php index 33ac3ada6dc..148a4fbe8ff 100755 --- a/modules/AOW_Conditions/vardefs.php +++ b/modules/AOW_Conditions/vardefs.php @@ -68,6 +68,13 @@ 'enable_range_search' => false, 'disable_num_format' => '', ), + 'module_path' => + array ( + 'name' => 'module_path', + 'type' => 'longtext', + 'vname' => 'LBL_MODULE_PATH', + 'isnull' => true, + ), 'field' => array ( 'required' => false, diff --git a/modules/AOW_Processed/vardefs.php b/modules/AOW_Processed/vardefs.php index 759bccac1f0..7dcda43c11f 100755 --- a/modules/AOW_Processed/vardefs.php +++ b/modules/AOW_Processed/vardefs.php @@ -166,6 +166,11 @@ 'relationships'=>array ( ), 'indices' => array( + array( + 'name' => 'aow_processed_index_workflow', + 'type' => 'index', + 'fields' => array('aow_workflow_id','status','parent_id','deleted'), + ), array( 'name' => 'aow_processed_index_status', 'type' => 'index', diff --git a/modules/AOW_WorkFlow/AOW_WorkFlow.php b/modules/AOW_WorkFlow/AOW_WorkFlow.php index 8ed8fd22327..6e13b20a7ef 100755 --- a/modules/AOW_WorkFlow/AOW_WorkFlow.php +++ b/modules/AOW_WorkFlow/AOW_WorkFlow.php @@ -31,7 +31,7 @@ class AOW_WorkFlow extends Basic { var $table_name = 'aow_workflow'; var $importable = false; var $disable_row_level_security = true ; - + var $id; var $name; var $date_entered; @@ -50,13 +50,13 @@ class AOW_WorkFlow extends Basic { var $flow_module; var $status; var $run_when; - + function AOW_WorkFlow(){ parent::Basic(); $this->load_flow_beans(); require_once('modules/AOW_WorkFlow/aow_utils.php'); } - + function bean_implements($interface){ switch($interface){ case 'ACL': return true; @@ -123,6 +123,21 @@ function run_flow(){ } } + /** + * Select and run all active flows for the specified bean + */ + function run_bean_flows(SugarBean &$bean){ + if($_REQUEST['module'] != 'Import'){ + $flows = AOW_WorkFlow::get_full_list(''," aow_workflow.flow_module = '".$bean->module_dir."' AND aow_workflow.status = 'Active' "); + + foreach($flows as $flow){ + if($flow->check_valid_bean($bean)) + $flow->run_actions($bean, true); + } + } + return true; + } + /** * Use the condition statements and processed table to build query to retrieve beans to be actioned */ @@ -131,7 +146,72 @@ function get_flow_beans(){ if($beanList[$this->flow_module]){ $module = new $beanList[$this->flow_module](); - $where = ''; + + $query = ''; + $query_array = array(); + + //$query_array = $this->build_report_query_select($query_array); + $query_array['select'][] = $module->table_name.".id AS id"; + $query_array = $this->build_flow_query_where($query_array); + + foreach ($query_array['select'] as $select){ + $query .= ($query == '' ? 'SELECT ' : ', ').$select; + } + + $query .= ' FROM '.$module->table_name.' '; + + if(isset($query_array['join'])){ + foreach ($query_array['join'] as $join){ + $query .= $join; + } + } + if(isset($query_array['where'])){ + $query_where = ''; + foreach ($query_array['where'] as $where){ + $query_where .= ($query_where == '' ? 'WHERE ' : ' AND ').$where; + } + $query .= ' '.$query_where; + } + return $module->process_full_list_query($query); + + + } + return null; + } + + function build_flow_query_join($name, SugarBean $module, $type, $query = array()){ + + if(!isset($query['join'][$name])){ + + switch ($type){ + case 'custom': + $query['join'][$name] = 'LEFT JOIN '.$module->get_custom_table_name().' '.$name.' ON '.$module->table_name.'.id = '. $name.'.id_c '; + break; + + case 'relationship': + if($module->load_relationship($name)){ + $params['join_type'] = 'LEFT JOIN'; + $params['join_table_alias'] = $name; + $join = $module->$name->getJoin($params, true); + + $query['join'][$name] = $join['join']; + $query['select'][] = $join['select']." AS '".$name."_id'"; + } + break; + default: + break; + + } + + } + return $query; + } + + function build_flow_query_where($query = array()){ + global $beanList, $app_list_strings, $sugar_config; + + if($beanList[$this->flow_module]){ + $module = new $beanList[$this->flow_module](); $sql = "SELECT id FROM aow_conditions WHERE aow_workflow_id = '".$this->id."' AND deleted = 0 ORDER BY condition_order ASC"; $result = $this->db->query($sql); @@ -139,34 +219,44 @@ function get_flow_beans(){ while ($row = $this->db->fetchByAssoc($result)) { $condition = new AOW_Condition(); $condition->retrieve($row['id']); + + $path = unserialize(base64_decode($condition->module_path)); + + $condition_module = $module; + $table_alias = $condition_module->table_name; + if(isset($path[0]) && $path[0] != $module->module_dir){ + foreach($path as $rel){ + $query = $this->build_flow_query_join($rel, $condition_module, 'relationship', $query); + $condition_module = new $beanList[getRelatedModule($condition_module->module_dir,$rel)]; + $table_alias = $rel; + } + } + if(isset($app_list_strings['aow_sql_operator_list'][$condition->operator])){ $where_set = false; - if($where != ''){ - $where .= ' AND '; - } - $data = $module->field_defs[$condition->field]; + $data = $condition_module->field_defs[$condition->field]; if($data['type'] == 'relate' && isset($data['id_name'])) { $condition->field = $data['id_name']; } if( (isset($data['source']) && $data['source'] == 'custom_fields')) { - $field = $module->table_name.'_cstm.'.$condition->field; + $field = $table_alias.'_cstm.'.$condition->field; } else { - $field = $module->table_name.'.'.$condition->field; + $field = $table_alias.'.'.$condition->field; } switch($condition->value_type) { case 'Field': - $data = $module->field_defs[$condition->value]; + $data = $condition_module->field_defs[$condition->value]; if($data['type'] == 'relate' && isset($data['id_name'])) { $condition->value = $data['id_name']; } if( (isset($data['source']) && $data['source'] == 'custom_fields')) { - $value = $module->table_name.'_cstm.'.$condition->value; + $value = $table_alias.'_cstm.'.$condition->value; } else { - $value = $module->table_name.'.'.$condition->value; + $value = $table_alias.'.'.$condition->value; } break; @@ -179,11 +269,11 @@ function get_flow_beans(){ $value = 'NOW()'; } } else { - $data = $module->field_defs[$params[0]]; + $data = $condition_module->field_defs[$params[0]]; if( (isset($data['source']) && $data['source'] == 'custom_fields')) { - $value = $module->table_name.'_cstm.'.$params[0]; + $value = $table_alias.'_cstm.'.$params[0]; } else { - $value = $module->table_name.'.'.$params[0]; + $value = $table_alias.'.'.$params[0]; } } @@ -214,8 +304,8 @@ function get_flow_beans(){ $value .= $field.' '.$app_list_strings['aow_sql_operator_list'][$condition->operator]." '".$multi_value."'"; } $value .= ')'; + $query['where'][] = $value; } - $where .= $value; $where_set = true; break; @@ -226,27 +316,195 @@ function get_flow_beans(){ } - if(!$where_set) $where .= $field.' '.$app_list_strings['aow_sql_operator_list'][$condition->operator].' '.$value; + if(!$where_set) $query['where'][] = $field.' '.$app_list_strings['aow_sql_operator_list'][$condition->operator].' '.$value; } } - if(!$this->multiple_runs){ - if($where != ''){ - $where .= ' AND '; + if($this->flow_run_on){ + switch($this->flow_run_on){ + + case'New_Records': + $query['where'][] = $module->table_name . '.' . 'date_entered' . ' > ' . "'" .$this->date_entered."'"; + Break; + + case'Modified_Records': + $query['where'][] = $module->table_name . '.' . 'date_modified' . ' > ' . "'" .$this->date_entered."'" . ' AND ' . $module->table_name . '.' . 'date_entered' . ' <> ' . $module->table_name . '.' . 'date_modified'; + Break; + } - $where .= "NOT EXISTS (SELECT * FROM aow_processed WHERE aow_processed.aow_workflow_id='".$this->id."' AND aow_processed.parent_id=".$module->table_name.".id AND aow_processed.status = 'Complete' AND aow_processed.deleted = 0)"; } - $query = $module->create_new_list_query('', $where, array(), array(), 0, '', false, $this); - return $module->process_full_list_query($query); + if(!$this->multiple_runs){ + $query['where'][] .= "NOT EXISTS (SELECT * FROM aow_processed WHERE aow_processed.aow_workflow_id='".$this->id."' AND aow_processed.parent_id=".$module->table_name.".id AND aow_processed.status = 'Complete' AND aow_processed.deleted = 0)"; + } + $query['where'][] = $module->table_name.".deleted = 0 "; + } + + return $query; + } + + function check_valid_bean(SugarBean &$bean){ + global $beanList, $app_list_strings; + + require_once('modules/AOW_Processed/AOW_Processed.php'); + $processed = new AOW_Processed(); + if(!$this->multiple_runs){ + $processed->retrieve_by_string_fields(array('aow_workflow_id' => $this->id,'parent_id' => $bean->id)); + + if($processed->status == 'Complete'){ + //has already run so return false + return false; + } + } + + if(!isset($bean->date_entered)){ + $bean->date_entered = $bean->fetched_row['date_entered']; + } + + if($this->flow_run_on){ + $GLOBALS['log']->fatal('Failed Workflow for time - '.strtotime($bean->date_entered).' '.strtotime($this->date_entered)); + + switch($this->flow_run_on){ + case'New_Records': + if(strtotime($bean->date_entered) < strtotime($this->date_entered)) + return false; + Break; + + case'Modified_Records': + if(strtotime($bean->date_modified) < strtotime($this->date_entered) && strtotime($bean->date_modified) != strtotime($bean->date_entered)) + return false; + Break; + + } + } + + $sql = "SELECT id FROM aow_conditions WHERE aow_workflow_id = '".$this->id."' AND deleted = 0 ORDER BY condition_order ASC"; + + $result = $this->db->query($sql); + + while ($row = $this->db->fetchByAssoc($result)) { + $condition = new AOW_Condition(); + $condition->retrieve($row['id']); + + $field = $condition->field; + $value = $condition->value; + + + $path = unserialize(base64_decode($condition->module_path)); + + $condition_bean = $bean; + + //TODO Add multi module implementation + /*$table_alias = $condition_bean->table_name; + if(isset($path[0]) && $path[0] != $bean->module_dir){ + foreach($path as $rel){ + //$query = $this->build_flow_query_join($rel, $condition_module, 'relationship', $query); + $condition_bean = new $beanList[getRelatedModule($condition_bean->module_dir,$rel)]; + $table_alias = $rel; + } + }*/ + $dateFields = array('date','datetime', 'datetimecombo'); + if(isset($app_list_strings['aow_sql_operator_list'][$condition->operator])){ + $where_set = false; + + $data = $condition_bean->field_defs[$field]; + + if($data['type'] == 'relate' && isset($data['id_name'])) { + $field = $data['id_name']; + } + $field = $condition_bean->$field; + + if(in_array($data['type'],$dateFields)) { + $field = strtotime($field); + } + + switch($condition->value_type) { + case 'Field': + $data = $condition_bean->field_defs[$value]; + + if($data['type'] == 'relate' && isset($data['id_name'])) { + $value = $data['id_name']; + } + $value = $condition_bean->$value; + + if(in_array($data['type'],$dateFields)) { + $value = strtotime($value); + } + + break; + + case 'Date': + $params = unserialize(base64_decode($value)); + if($params[0] == 'now'){ + $value = date('Y-m-d H:i:s'); + } else { + $value = $condition_bean->$params[0]; + } + + if($params[1] != 'now'){ + switch($params[3]) { + case 'business_hours'; + //business hours not implemented for query, default to hours + $params[3] = 'hours'; + default: + $value = strtotime($value, $app_list_strings['aow_date_operator'][$params[1]]." $params[2] ".$params[3]); + break; + } + } else { + $value = strtotime($value); + } + break; + + case 'Multi': + + $value = unencodeMultienum($value); + switch($condition->operator) { + case 'Not_Equal_To'; + $condition->operator = 'Not_Contains'; + break; + case 'Equal_To'; + default: + $condition->operator = 'Contains'; + break; + } + break; + + case 'Value': + default: + if(in_array($data['type'],$dateFields)) { + $value = strtotime($value); + } + break; + } + + if(!($this->compare_condition($field, $value, $condition->operator))){ + return false; + } + + } + } + + return true; + } + + function compare_condition($var1, $var2, $operator = '='){ + switch ($operator) { + case "Not_Equal_To": return $var1 != $var2; + case "Greater_Than": return $var1 > $var2; + case "Less_Than": return $var1 < $var2; + case "Greater_Than_or_Equal_To": return $var1 >= $var2; + case "Less_Than_or_Equal_To": return $var1 <= $var2; + case "Contains": return in_array($var1,$var2); + case "Not_Contains": return !in_array($var1,$var2); + case "=": + default: return $var1 == $var2; } - return null; } /** * Run the actions against the passed $bean */ - function run_actions(SugarBean $bean){ + function run_actions(SugarBean &$bean, $in_save = false){ require_once('modules/AOW_Processed/AOW_Processed.php'); $processed = new AOW_Processed(); @@ -286,7 +544,7 @@ function run_actions(SugarBean $bean){ } $flow_action = new $action_name($action->id); - if(!$flow_action->run_action($bean, unserialize(base64_decode($action->parameters)))){ + if(!$flow_action->run_action($bean, unserialize(base64_decode($action->parameters)), $in_save)){ $pass = false; $processed->aow_actions->add($action->id, array('status' => 'Failed')); } else { @@ -303,6 +561,6 @@ function run_actions(SugarBean $bean){ return $pass; } - + } ?> diff --git a/modules/AOW_WorkFlow/aow_utils.php b/modules/AOW_WorkFlow/aow_utils.php index dd52901579d..100ea69aefe 100755 --- a/modules/AOW_WorkFlow/aow_utils.php +++ b/modules/AOW_WorkFlow/aow_utils.php @@ -25,9 +25,9 @@ function getModuleFields($module, $view='EditView',$value = '', $valid = array()) { - global $beanList; + global $app_strings, $beanList; - $fields = array(''=>''); + $fields = array(''=>$app_strings['LBL_NONE']); $unset = array(); if ($module != '') { @@ -52,6 +52,9 @@ function getModuleFields($module, $view='EditView',$value = '', $valid = array() } } + if($view == 'JSON'){ + return json_encode($fields); + } if($view == 'EditView'){ return get_select_options_with_id($fields, $value); } else { @@ -59,6 +62,41 @@ function getModuleFields($module, $view='EditView',$value = '', $valid = array() } } +function getRelModuleFields($module, $rel_field, $view='EditView',$value = ''){ + global $beanList; + + if($module == $rel_field){ + return getModuleFields($module, $view, $value); + } + + $mod = new $beanList[$module](); + $data = $mod->field_defs[$rel_field]; + + if(isset($data['module']) && $data['module'] != ''){ + return getModuleFields($data['module'], $view, $value); + } + +} + +function getRelatedModule($module, $rel_field){ + global $beanList; + + if($module == $rel_field){ + return $module; + } + + $mod = new $beanList[$module](); + + if(isset($arr['module']) && $arr['module'] != '') { + return $arr['module']; + } else if($mod->load_relationship($rel_field)){ + return $mod->$rel_field->getRelatedModuleName(); + } + + return $module; + +} + function getModuleRelationships($module, $view='EditView',$value = '') { global $beanList, $app_list_strings; @@ -331,6 +369,14 @@ function getModuleField($module, $fieldname, $aow_field, $view='EditView',$value if(isset( $fieldlist[$fieldname]['id_name'] ) && $fieldlist[$fieldname]['id_name'] != '' && $fieldlist[$fieldname]['id_name'] != $fieldlist[$fieldname]['name']){ $rel_value = $value; + require_once("include/TemplateHandler/TemplateHandler.php"); + $template_handler = new TemplateHandler(); + $quicksearch_js = $template_handler->createQuickSearchCode($fieldlist,$fieldlist,$view); + $quicksearch_js = str_replace($fieldname, $aow_field.'_display', $quicksearch_js); + $quicksearch_js = str_replace($fieldlist[$fieldname]['id_name'], $aow_field, $quicksearch_js); + + echo $quicksearch_js; + if(isset($fieldlist[$fieldname]['module']) && $fieldlist[$fieldname]['module'] == 'Users'){ $rel_value = get_assigned_user_name($value); } else if(isset($fieldlist[$fieldname]['module'])){ @@ -350,6 +396,7 @@ function getModuleField($module, $fieldname, $aow_field, $view='EditView',$value $fieldlist[$fieldlist[$fieldname]['id_name']]['name'] = $aow_field; $fieldlist[$fieldname]['name'] = $aow_field.'_display'; + } else if(isset( $fieldlist[$fieldname]['type'] ) && ($fieldlist[$fieldname]['type'] == 'datetimecombo' || $fieldlist[$fieldname]['type'] == 'datetime' || $fieldlist[$fieldname]['type'] == 'date')){ $fieldlist[$fieldname]['value'] = $timedate->to_display_date($value); //$fieldlist[$fieldname]['value'] = $timedate->to_display_date_time($value, true, true); @@ -361,6 +408,7 @@ function getModuleField($module, $fieldname, $aow_field, $view='EditView',$value } + $ss->assign("QS_JS", $quicksearch_js); $ss->assign("fields",$fieldlist); $ss->assign("form_name",$view); $ss->assign("bean",$focus); diff --git a/modules/AOW_WorkFlow/language/en_us.lang.php b/modules/AOW_WorkFlow/language/en_us.lang.php index 4607a440e3c..c35a4e550f5 100755 --- a/modules/AOW_WorkFlow/language/en_us.lang.php +++ b/modules/AOW_WorkFlow/language/en_us.lang.php @@ -23,43 +23,43 @@ */ $mod_strings = array ( - 'LBL_ASSIGNED_TO_ID' => 'Assigned User Id', - 'LBL_ASSIGNED_TO_NAME' => 'Assigned to', - 'LBL_ID' => 'ID', - 'LBL_DATE_ENTERED' => 'Date Created', - 'LBL_DATE_MODIFIED' => 'Date Modified', - 'LBL_MODIFIED' => 'Modified By', - 'LBL_MODIFIED_ID' => 'Modified By Id', - 'LBL_MODIFIED_NAME' => 'Modified By Name', - 'LBL_CREATED' => 'Created By', - 'LBL_CREATED_ID' => 'Created By Id', - 'LBL_DESCRIPTION' => 'Description', - 'LBL_DELETED' => 'Deleted', - 'LBL_NAME' => 'Name', - 'LBL_CREATED_USER' => 'Created by User', - 'LBL_MODIFIED_USER' => 'Modified by User', - 'LBL_LIST_NAME' => 'Name', - 'LBL_LIST_FORM_TITLE' => 'WorkFlow List', - 'LBL_MODULE_NAME' => 'WorkFlow', - 'LBL_MODULE_TITLE' => 'WorkFlow', - 'LBL_HOMEPAGE_TITLE' => 'My Work Flow', - 'LNK_NEW_RECORD' => 'Create WorkFlow', - 'LNK_LIST' => 'View WorkFlow', - 'LNK_PROCESSED_LIST' => 'View Process Audit', - 'LNK_IMPORT_AOW_WORKFLOW' => 'Import WorkFlow', - 'LBL_SEARCH_FORM_TITLE' => 'Search WorkFlow', - 'LBL_HISTORY_SUBPANEL_TITLE' => 'View History', - 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Activities', - 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', - 'LBL_NEW_FORM_TITLE' => 'New WorkFlow', - 'LBL_FLOW_MODULE' => 'WorkFlow Module', - 'LBL_STATUS' => 'Status', - 'LBL_FLOW_RUN_ON' => 'Run On', - 'LNK_IMPORT_AOW_WORKFLOW' => 'Import WorkFlow', - 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', - 'LBL_CONDITION_LINES' => 'Conditions', - 'LBL_ADD_CONDITION' => 'Add Condition', - 'LBL_ACTION_LINES' => 'Actions', - 'LBL_ADD_ACTION' => 'Add Action', - 'LBL_MULTIPLE_RUNS' => 'Repeated Runs', + 'LBL_ASSIGNED_TO_ID' => 'Assigned User Id', + 'LBL_ASSIGNED_TO_NAME' => 'Assigned to', + 'LBL_ID' => 'ID', + 'LBL_DATE_ENTERED' => 'Date Created', + 'LBL_DATE_MODIFIED' => 'Date Modified', + 'LBL_MODIFIED' => 'Modified By', + 'LBL_MODIFIED_ID' => 'Modified By Id', + 'LBL_MODIFIED_NAME' => 'Modified By Name', + 'LBL_CREATED' => 'Created By', + 'LBL_CREATED_ID' => 'Created By Id', + 'LBL_DESCRIPTION' => 'Description', + 'LBL_DELETED' => 'Deleted', + 'LBL_NAME' => 'Name', + 'LBL_CREATED_USER' => 'Created by User', + 'LBL_MODIFIED_USER' => 'Modified by User', + 'LBL_LIST_NAME' => 'Name', + 'LBL_LIST_FORM_TITLE' => 'WorkFlow List', + 'LBL_MODULE_NAME' => 'WorkFlow', + 'LBL_MODULE_TITLE' => 'WorkFlow', + 'LBL_HOMEPAGE_TITLE' => 'My Work Flow', + 'LNK_NEW_RECORD' => 'Create WorkFlow', + 'LNK_LIST' => 'View WorkFlow', + 'LNK_PROCESSED_LIST' => 'View Process Audit', + 'LNK_IMPORT_AOW_WORKFLOW' => 'Import WorkFlow', + 'LBL_SEARCH_FORM_TITLE' => 'Search WorkFlow', + 'LBL_HISTORY_SUBPANEL_TITLE' => 'View History', + 'LBL_ACTIVITIES_SUBPANEL_TITLE' => 'Activities', + 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', + 'LBL_NEW_FORM_TITLE' => 'New WorkFlow', + 'LBL_FLOW_MODULE' => 'WorkFlow Module', + 'LBL_STATUS' => 'Status', + 'LBL_FLOW_RUN_ON' => 'Run On', + 'LNK_IMPORT_AOW_WORKFLOW' => 'Import WorkFlow', + 'LBL_AOW_WORKFLOW_SUBPANEL_TITLE' => 'WorkFlow', + 'LBL_CONDITION_LINES' => 'Conditions', + 'LBL_ADD_CONDITION' => 'Add Condition', + 'LBL_ACTION_LINES' => 'Actions', + 'LBL_ADD_ACTION' => 'Add Action', + 'LBL_MULTIPLE_RUNS' => 'Repeated Runs', ); diff --git a/modules/AOW_WorkFlow/metadata/detailviewdefs.php b/modules/AOW_WorkFlow/metadata/detailviewdefs.php index c6b98c9f5ce..d00f24c21a1 100755 --- a/modules/AOW_WorkFlow/metadata/detailviewdefs.php +++ b/modules/AOW_WorkFlow/metadata/detailviewdefs.php @@ -103,7 +103,12 @@ 'name' => 'multiple_runs', 'label' => 'LBL_MULTIPLE_RUNS', ), - 1 => '', + 1 => + array ( + 'name' => 'flow_run_on', + 'studio' => 'visible', + 'label' => 'LBL_FLOW_RUN_ON', + ), ), 3 => array ( diff --git a/modules/AOW_WorkFlow/metadata/editviewdefs.php b/modules/AOW_WorkFlow/metadata/editviewdefs.php index bc0a0971911..bd0f17392cc 100755 --- a/modules/AOW_WorkFlow/metadata/editviewdefs.php +++ b/modules/AOW_WorkFlow/metadata/editviewdefs.php @@ -94,7 +94,12 @@ 'name' => 'multiple_runs', 'label' => 'LBL_MULTIPLE_RUNS', ), - 1 => '', + 1 => + array ( + 'name' => 'flow_run_on', + 'studio' => 'visible', + 'label' => 'LBL_FLOW_RUN_ON', + ), ), 3 => array ( diff --git a/modules/AOW_WorkFlow/vardefs.php b/modules/AOW_WorkFlow/vardefs.php index f3ce2545ff1..407feccb589 100755 --- a/modules/AOW_WorkFlow/vardefs.php +++ b/modules/AOW_WorkFlow/vardefs.php @@ -28,7 +28,7 @@ 'audited'=>true, 'duplicate_merge'=>true, 'fields'=>array ( - 'flow_module' => + 'flow_module' => array ( 'required' => true, 'name' => 'flow_module', @@ -51,6 +51,29 @@ 'studio' => 'visible', 'dependency' => false, ), +'flow_run_on' => +array ( + 'required' => true, + 'name' => 'flow_run_on', + 'vname' => 'LBL_RUN_ON', + 'type' => 'enum', + 'massupdate' => 0, + 'default' => '0', + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'len' => 100, + 'size' => '20', + 'options' => 'aow_run_on_list', + 'studio' => 'visible', + 'dependency' => false, +), 'status' => array ( 'required' => false, From 4dc89ab13e00f382329e3e1d35787150171db3a3 Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 11 Feb 2014 23:40:47 +0000 Subject: [PATCH 163/223] added basic grouped layout --- modules/AOR_Fields/fieldLines.php | 2 +- modules/AOR_Fields/vardefs.php | 24 ++++++-- modules/AOR_Reports/AOR_Report.php | 92 ++++++++++++++++++++++++++---- 3 files changed, 101 insertions(+), 17 deletions(-) diff --git a/modules/AOR_Fields/fieldLines.php b/modules/AOR_Fields/fieldLines.php index 46a6bc0f989..df8b46b0a7a 100755 --- a/modules/AOR_Fields/fieldLines.php +++ b/modules/AOR_Fields/fieldLines.php @@ -81,7 +81,7 @@ function display_field_lines($focus, $field, $value, $view){ $html .= ''; $html .= ''; $html .= '';*/ - $html .= $focus->build_report_html(0).'
      '; + $html .= $focus->build_group_report(0).'
      '; } return $html; diff --git a/modules/AOR_Fields/vardefs.php b/modules/AOR_Fields/vardefs.php index 684bb7a0ba5..c82f2f48820 100755 --- a/modules/AOR_Fields/vardefs.php +++ b/modules/AOR_Fields/vardefs.php @@ -222,7 +222,7 @@ 'required' => false, 'name' => 'group_by', 'vname' => 'LBL_GROUP', - 'type' => 'enum', + 'type' => 'bool', 'massupdate' => 0, 'comments' => '', 'help' => '', @@ -233,11 +233,7 @@ 'reportable' => true, 'unified_search' => false, 'merge_filter' => 'disabled', - 'len' => 100, - 'size' => '20', - 'options' => 'aor_group_dom', 'studio' => 'visible', - 'dependency' => false, ), 'group_order' => array ( @@ -261,6 +257,24 @@ 'studio' => 'visible', 'dependency' => false, ), + 'group_display' => + array ( + 'required' => false, + 'name' => 'group_display', + 'vname' => 'LBL_GROUP_DISPLAY', + 'type' => 'bool', + 'massupdate' => 0, + 'comments' => '', + 'help' => '', + 'importable' => 'true', + 'duplicate_merge' => 'disabled', + 'duplicate_merge_dom_value' => '0', + 'audited' => false, + 'reportable' => true, + 'unified_search' => false, + 'merge_filter' => 'disabled', + 'studio' => 'visible', + ), 'aor_reports' => array ( 'name' => 'aor_reports', diff --git a/modules/AOR_Reports/AOR_Report.php b/modules/AOR_Reports/AOR_Report.php index a5af870fb7b..b658bddd9ea 100755 --- a/modules/AOR_Reports/AOR_Report.php +++ b/modules/AOR_Reports/AOR_Report.php @@ -123,14 +123,76 @@ function build_report_chart(){ } - function build_report_html($offset = -1, $links = true){ + function build_group_report($offset = -1, $links = true){ + global $beanList; + + $html = ''; + + $module = new $beanList[$this->report_module](); + + $query = ''; + $query_array = array(); + + $query_array = $this->build_report_query_select($query_array, true); + $query_array = $this->build_report_query_where($query_array); + + foreach ($query_array['select'] as $select){ + $query .= ($query == '' ? 'SELECT ' : ', ').$select; + } + + $query .= ' FROM '.$module->table_name.' '; + + if(isset($query_array['join'])){ + foreach ($query_array['join'] as $join){ + $query .= $join; + } + } + if(isset($query_array['where'])){ + $query_where = ''; + foreach ($query_array['where'] as $where){ + $query_where .= ($query_where == '' ? 'WHERE ' : ' AND ').$where; + } + $query .= ' '.$query_where; + } + + if(isset($query_array['group_by'])){ + $query_group_by = ''; + foreach ($query_array['group_by'] as $group_by){ + $query_group_by .= ($query_group_by == '' ? 'GROUP BY ' : ', ').$group_by; + } + $query .= ' '.$query_group_by; + } + + if(isset($query_array['sort_by'])){ + $query_sort_by = ''; + foreach ($query_array['sort_by'] as $sort_by){ + $query_sort_by .= ($query_sort_by == '' ? 'ORDER BY ' : ', ').$sort_by; + } + $query .= ' '.$query_sort_by; + } + + $result = $this->db->query($query); + + while ($row = $this->db->fetchByAssoc($result)) { + + $html .= $this->build_report_html($offset, $links, $row['Name0']); + + } + + if($html == '') $html = $this->build_report_html($offset, $links); + return $html; + + } + + + function build_report_html($offset = -1, $links = true, $group_value = ''){ global $beanList; - $report_sql = $this->build_report_query(); + $report_sql = $this->build_report_query($group_value); $max_rows = 20; $total_rows = 0; - $count_query = 'SELECT count(*) c FROM ('.$report_sql.') as n';; + $count_query = 'SELECT count(*) c FROM ('.$report_sql.') as n'; // We have a count query. Run it and get the results. $result = $this->db->query($count_query); @@ -159,8 +221,11 @@ function build_report_html($offset = -1, $links = true){ $html .= "
      "; + + $html .="
      + + + + +
      $group_value "; if($offset == 0){ @@ -230,14 +295,14 @@ function build_report_html($offset = -1, $links = true){ } $label = str_replace(' ','_',$field->label).$i; $fields[$label]['field'] = $field->field; - $fields[$label]['display'] = $field->display; + $fields[$label]['display'] = $field->display && !$field->group_display; $fields[$label]['function'] = $field->field_function; $fields[$label]['module'] = $field_module; $fields[$label]['alias'] = $field_alias; $fields[$label]['link'] = $field->link; - if($field->display){ + if($fields[$label]['display']){ $html .= ""; $html .= "
      "; $html .= $field->label; @@ -370,7 +435,7 @@ function build_report_csv(){ - function build_report_query(){ + function build_report_query($group_value =''){ global $beanList; $module = new $beanList[$this->report_module](); @@ -378,7 +443,7 @@ function build_report_query(){ $query = ''; $query_array = array(); - $query_array = $this->build_report_query_select($query_array); + $query_array = $this->build_report_query_select($query_array, false, $group_value); $query_array = $this->build_report_query_where($query_array); foreach ($query_array['select'] as $select){ @@ -415,12 +480,12 @@ function build_report_query(){ } $query .= ' '.$query_sort_by; } -echo $query; + return $query; } - function build_report_query_select($query = array()){ + function build_report_query_select($query = array(), $grouped =false, $group_value =''){ global $beanList; if($beanList[$this->report_module]){ @@ -428,7 +493,10 @@ function build_report_query_select($query = array()){ $query['select'][] = $module->table_name.".id AS '".$module->table_name."_id'"; - $sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' AND deleted = 0 ORDER BY field_order ASC"; + $sub_sql =''; + if($grouped) $sub_sql = 'AND group_display = 1'; + + $sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' $sub_sql AND deleted = 0 ORDER BY field_order ASC"; $result = $this->db->query($sql); $i = 0; while ($row = $this->db->fetchByAssoc($result)) { @@ -481,7 +549,9 @@ function build_report_query_select($query = array()){ } $query['select'][] = $select_field ." AS '".$field->label."'"; - ++$i; + + if($field->group_display && !$grouped) $query['where'][] = $select_field." = '".$group_value."'"; + ++$i; } } return $query; From 147c1ea216e23dac291aa97d64a59569e24fb3c0 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 12 Feb 2014 18:14:06 +0000 Subject: [PATCH 164/223] fixed display and js issues --- modules/AOR_Reports/AOR_Report.js | 6 +- modules/AOR_Reports/AOR_Report.php | 99 ++++++++++++++++++++++-------- modules/AOR_Reports/controller.php | 2 +- 3 files changed, 79 insertions(+), 28 deletions(-) diff --git a/modules/AOR_Reports/AOR_Report.js b/modules/AOR_Reports/AOR_Report.js index 787f2f2b096..9e3ff327e16 100755 --- a/modules/AOR_Reports/AOR_Report.js +++ b/modules/AOR_Reports/AOR_Report.js @@ -59,14 +59,14 @@ function setProspectReturn(popup_reply_data){ } -function changeReportPage(offset){ +function changeReportPage(offset, group){ var callback = { success: function(result) { - document.getElementById('report_table').innerHTML = result.responseText; + document.getElementById('report_table'+group).innerHTML = result.responseText; } } var record = document.getElementsByName('record')[0].value; - YAHOO.util.Connect.asyncRequest ("GET", "index.php?module=AOR_Reports&action=changeReportPage&record="+record+"&offset="+offset,callback); + YAHOO.util.Connect.asyncRequest ("GET", "index.php?module=AOR_Reports&action=changeReportPage&record="+record+"&offset="+offset+"&group="+group,callback); } \ No newline at end of file diff --git a/modules/AOR_Reports/AOR_Report.php b/modules/AOR_Reports/AOR_Report.php index b658bddd9ea..039e2491d2e 100755 --- a/modules/AOR_Reports/AOR_Report.php +++ b/modules/AOR_Reports/AOR_Report.php @@ -127,13 +127,67 @@ function build_group_report($offset = -1, $links = true){ global $beanList; $html = ''; - - $module = new $beanList[$this->report_module](); - $query = ''; $query_array = array(); + $module = new $beanList[$this->report_module](); + + $sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' AND group_display = 1 AND deleted = 0 ORDER BY field_order ASC"; + $field_id = $this->db->getOne($sql); + + $query_array['select'][] = $module->table_name.".id AS '".$module->table_name."_id'"; + + if($field_id != ''){ + $field = new AOR_Field(); + $field->retrieve($field_id); + + $field_label = str_replace(' ','_',$field->label); + + $path = unserialize(base64_decode($field->module_path)); + + $field_module = $module; + $table_alias = $field_module->table_name; + if($path[0] != $module->module_dir){ + foreach($path as $rel){ + $new_field_module = new $beanList[getRelatedModule($field_module->module_dir,$rel)]; + $query_array = $this->build_report_query_join($rel, $field_module, 'relationship', $query_array, $new_field_module); + $field_module = $new_field_module; + $table_alias = $rel; + } + } + + $data = $field_module->field_defs[$field->field]; + + if($data['type'] == 'relate' && isset($data['id_name'])) { + $field->field = $data['id_name']; + } + + if($data['type'] == 'currency' && !stripos($field->field, '_USD') && isset($field_module->field_defs['currency_id'])) { + $query_array['select'][$table_alias.'_currency_id'] = $table_alias.".currency_id AS '".$table_alias."_currency_id'"; + } + + if( (isset($data['source']) && $data['source'] == 'custom_fields')) { + $select_field = $table_alias.'_cstm.'.$field->field; + $query_array = $this->build_report_query_join($table_alias.'_cstm', $field_module, 'custom', $query); + } else { + $select_field= $table_alias.'.'.$field->field; + } + + if($field->sort_by != ''){ + $query_array['sort_by'][] = $field_label.' '.$field->sort_by; + } + + if($field->group_by == 1){ + $query_array['group_by'][] = $select_field; + } + + if($field->field_function != null){ + $select_field = $field->field_function.'('.$select_field.')'; + } + + $query_array['select'][] = $select_field ." AS '".$field_label."'"; + $query_array['where'][] = $select_field ." IS NOT NULL "; + } - $query_array = $this->build_report_query_select($query_array, true); $query_array = $this->build_report_query_where($query_array); foreach ($query_array['select'] as $select){ @@ -175,7 +229,7 @@ function build_group_report($offset = -1, $links = true){ while ($row = $this->db->fetchByAssoc($result)) { - $html .= $this->build_report_html($offset, $links, $row['Name0']); + $html .= $this->build_report_html($offset, $links, $row[$field_label]); } @@ -190,7 +244,7 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){ global $beanList; $report_sql = $this->build_report_query($group_value); - $max_rows = 20; + $max_rows = 8; $total_rows = 0; $count_query = 'SELECT count(*) c FROM ('.$report_sql.') as n'; @@ -202,7 +256,7 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){ $total_rows = $assoc['c']; } - $html = ""; + $html = "
      "; if($offset >= 0){ $start = 0; @@ -225,7 +279,7 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){ $html .=" - - -
      - + + +
      $group_value$group_value "; if($offset == 0){ @@ -236,19 +290,19 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){ Previous "; } else { - $html .=" - "; } $html .=" (".$start ." - ".$end ." of ". $total_rows .")"; if($next_offset < $total_rows){ - $html .=" - "; } else { @@ -443,7 +497,7 @@ function build_report_query($group_value =''){ $query = ''; $query_array = array(); - $query_array = $this->build_report_query_select($query_array, false, $group_value); + $query_array = $this->build_report_query_select($query_array, $group_value); $query_array = $this->build_report_query_where($query_array); foreach ($query_array['select'] as $select){ @@ -480,12 +534,11 @@ function build_report_query($group_value =''){ } $query .= ' '.$query_sort_by; } - return $query; } - function build_report_query_select($query = array(), $grouped =false, $group_value =''){ + function build_report_query_select($query = array(), $group_value =''){ global $beanList; if($beanList[$this->report_module]){ @@ -493,10 +546,7 @@ function build_report_query_select($query = array(), $grouped =false, $group_val $query['select'][] = $module->table_name.".id AS '".$module->table_name."_id'"; - $sub_sql =''; - if($grouped) $sub_sql = 'AND group_display = 1'; - - $sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' $sub_sql AND deleted = 0 ORDER BY field_order ASC"; + $sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' AND deleted = 0 ORDER BY field_order ASC"; $result = $this->db->query($sql); $i = 0; while ($row = $this->db->fetchByAssoc($result)) { @@ -550,7 +600,7 @@ function build_report_query_select($query = array(), $grouped =false, $group_val $query['select'][] = $select_field ." AS '".$field->label."'"; - if($field->group_display && !$grouped) $query['where'][] = $select_field." = '".$group_value."'"; + if($field->group_display) $query['where'][] = $select_field." = '".$group_value."'"; ++$i; } } @@ -574,7 +624,7 @@ function build_report_query_join($name, SugarBean $module, $type, $query = array $join = $module->$name->getJoin($params, true); $query['join'][$name] = $join['join']; - if($rel_module != null) $query['join'][$name] .= $this->build_report_access_query($rel_module); + if($rel_module != null) $query['join'][$name] .= $this->build_report_access_query($rel_module, $name); $query['select'][] = $join['select']." AS '".$name."_id'"; } break; @@ -587,8 +637,9 @@ function build_report_query_join($name, SugarBean $module, $type, $query = array return $query; } - function build_report_access_query(SugarBean $module){ + function build_report_access_query(SugarBean $module, $alias){ + $module->table_name = $alias; $where = ''; if($module->bean_implements('ACL') && ACLController::requireOwner($module->module_dir, 'list') ) { @@ -605,7 +656,7 @@ function build_report_access_query(SugarBean $module){ require_once('modules/SecurityGroups/SecurityGroup.php'); global $current_user; $owner_where = $module->getOwnerWhere($current_user->id); - $group_where = SecurityGroup::getGroupWhere($module->table_name,$module->module_dir,$current_user->id); + $group_where = SecurityGroup::getGroupWhere($alias,$module->module_dir,$current_user->id); if(!empty($owner_where)){ $where .= " AND (". $owner_where." or ".$group_where.") "; } else { @@ -738,7 +789,7 @@ function build_report_query_where($query = array()){ } } - $query['where'][] = $module->table_name.".deleted = 0 ".$this->build_report_access_query($module); + $query['where'][] = $module->table_name.".deleted = 0 ".$this->build_report_access_query($module, $module->table_name); } return $query; diff --git a/modules/AOR_Reports/controller.php b/modules/AOR_Reports/controller.php index 830c8ea9bce..a704149b4f3 100755 --- a/modules/AOR_Reports/controller.php +++ b/modules/AOR_Reports/controller.php @@ -50,7 +50,7 @@ protected function action_getModuleRelationships() } protected function action_changeReportPage(){ - echo $this->bean->build_report_html($_REQUEST['offset']); + echo $this->bean->build_report_html($_REQUEST['offset'], true,$_REQUEST['group']); die(); } From 46b8ff5f0a579a9660997ea84c064aedc14c052a Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 13 Feb 2014 10:07:33 +0000 Subject: [PATCH 165/223] fixed emailing relate filed issue --- modules/AOW_Actions/actions/actionSendEmail.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/AOW_Actions/actions/actionSendEmail.php b/modules/AOW_Actions/actions/actionSendEmail.php index 7055542d385..f8708b1e438 100755 --- a/modules/AOW_Actions/actions/actionSendEmail.php +++ b/modules/AOW_Actions/actions/actionSendEmail.php @@ -176,7 +176,13 @@ private function getEmailFromParams(SugarBean $bean, $params){ $emailTarget = $params['email_target']; $relatedFields = $bean->get_related_fields(); $field = $relatedFields[$emailTarget]; - $linkedBeans = $bean->get_linked_beans($field['link'],$field['module']); + if($field['type'] == 'relate'){ + $linkedBeans = array(); + $id = $bean->$field['id_name']; + $linkedBeans[] = BeanFactory::getBean($field['module'],$id); + }else{ + $linkedBeans = $bean->get_linked_beans($field['link'],$field['module']); + } if($linkedBeans){ $linkedBean = $linkedBeans[0]; return $linkedBean->emailAddress->getPrimaryAddress($linkedBean); From 257aba1149b6b646c30dcc4020fcc339bcedfabe Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 13 Feb 2014 17:48:57 +0000 Subject: [PATCH 166/223] fixespdf / currency display issues --- modules/AOR_Reports/AOR_Report.php | 71 ++++++++++++++++-------------- modules/AOR_Reports/controller.php | 2 +- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/modules/AOR_Reports/AOR_Report.php b/modules/AOR_Reports/AOR_Report.php index 039e2491d2e..a49bd0783ac 100755 --- a/modules/AOR_Reports/AOR_Report.php +++ b/modules/AOR_Reports/AOR_Report.php @@ -186,51 +186,52 @@ function build_group_report($offset = -1, $links = true){ $query_array['select'][] = $select_field ." AS '".$field_label."'"; $query_array['where'][] = $select_field ." IS NOT NULL "; - } - $query_array = $this->build_report_query_where($query_array); + $query_array = $this->build_report_query_where($query_array); - foreach ($query_array['select'] as $select){ - $query .= ($query == '' ? 'SELECT ' : ', ').$select; - } + foreach ($query_array['select'] as $select){ + $query .= ($query == '' ? 'SELECT ' : ', ').$select; + } - $query .= ' FROM '.$module->table_name.' '; + $query .= ' FROM '.$module->table_name.' '; - if(isset($query_array['join'])){ - foreach ($query_array['join'] as $join){ - $query .= $join; + if(isset($query_array['join'])){ + foreach ($query_array['join'] as $join){ + $query .= $join; + } } - } - if(isset($query_array['where'])){ - $query_where = ''; - foreach ($query_array['where'] as $where){ - $query_where .= ($query_where == '' ? 'WHERE ' : ' AND ').$where; + if(isset($query_array['where'])){ + $query_where = ''; + foreach ($query_array['where'] as $where){ + $query_where .= ($query_where == '' ? 'WHERE ' : ' AND ').$where; + } + $query .= ' '.$query_where; } - $query .= ' '.$query_where; - } - if(isset($query_array['group_by'])){ - $query_group_by = ''; - foreach ($query_array['group_by'] as $group_by){ - $query_group_by .= ($query_group_by == '' ? 'GROUP BY ' : ', ').$group_by; + if(isset($query_array['group_by'])){ + $query_group_by = ''; + foreach ($query_array['group_by'] as $group_by){ + $query_group_by .= ($query_group_by == '' ? 'GROUP BY ' : ', ').$group_by; + } + $query .= ' '.$query_group_by; } - $query .= ' '.$query_group_by; - } - if(isset($query_array['sort_by'])){ - $query_sort_by = ''; - foreach ($query_array['sort_by'] as $sort_by){ - $query_sort_by .= ($query_sort_by == '' ? 'ORDER BY ' : ', ').$sort_by; + if(isset($query_array['sort_by'])){ + $query_sort_by = ''; + foreach ($query_array['sort_by'] as $sort_by){ + $query_sort_by .= ($query_sort_by == '' ? 'ORDER BY ' : ', ').$sort_by; + } + $query .= ' '.$query_sort_by; } - $query .= ' '.$query_sort_by; - } - $result = $this->db->query($query); + $result = $this->db->query($query); - while ($row = $this->db->fetchByAssoc($result)) { + while ($row = $this->db->fetchByAssoc($result)) { + if($html != '') $html .= '
      '; - $html .= $this->build_report_html($offset, $links, $row[$field_label]); + $html .= $this->build_report_html($offset, $links, $row[$field_label]); + } } if($html == '') $html = $this->build_report_html($offset, $links); @@ -279,7 +280,7 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){ $html .="
      - + "; $html .=""; + } else{ + $html = "

      $group_value

      ".$html; } $sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' AND deleted = 0 ORDER BY field_order ASC"; @@ -388,7 +391,7 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){ switch ($att['function']){ case 'COUNT': - case 'SUM': + //case 'SUM': $html .= $row[$name]; break; default: @@ -575,7 +578,7 @@ function build_report_query_select($query = array(), $group_value =''){ $field->field = $data['id_name']; } - if($data['type'] == 'currency' && !stripos($field->field, '_USD') && isset($field_module->field_defs['currency_id'])) { + if($data['type'] == 'currency' && isset($field_module->field_defs['currency_id'])) { $query['select'][$table_alias.'_currency_id'] = $table_alias.".currency_id AS '".$table_alias."_currency_id'"; } diff --git a/modules/AOR_Reports/controller.php b/modules/AOR_Reports/controller.php index a704149b4f3..c68a40a2ffb 100755 --- a/modules/AOR_Reports/controller.php +++ b/modules/AOR_Reports/controller.php @@ -131,7 +131,7 @@ protected function action_downloadPDF()
      $group_value

      $group_value

      "; if($offset == 0){ @@ -320,6 +321,8 @@ function build_report_html($offset = -1, $links = true, $group_value = ''){

      '; - $printable = $this->bean->build_report_html(-1,false); + $printable = $this->bean->build_group_report(-1,false); $stylesheet = file_get_contents('themes/Suite7/css/style.css'); ob_clean(); From 9ded6a503a168bf2ba38ee8432237d4935f63f9a Mon Sep 17 00:00:00 2001 From: Will Date: Wed, 19 Feb 2014 17:15:58 +0000 Subject: [PATCH 167/223] Theme bug fixes and new features added. --- themes/Suite7/css/style.css | 404 ++++++++++++++--------- themes/Suite7/tpls/_headerModuleList.tpl | 270 +++++++-------- 2 files changed, 378 insertions(+), 296 deletions(-) diff --git a/themes/Suite7/css/style.css b/themes/Suite7/css/style.css index 2575784eb2a..354b44debef 100755 --- a/themes/Suite7/css/style.css +++ b/themes/Suite7/css/style.css @@ -41,13 +41,20 @@ * theme basis. ********************************************************************************/ -/* from old default theme */ /* MAIN NAV STYLES */ + +body +{ + margin: 0px; + font-family: Arial, Verdana, Helvetica, sans-serif; +} + .subDmenu { position:absolute; display:none; visibility:hidden; } + .menuItem, .menuItemHilite, .menuItemX, .menuItemHiliteX, .menuItem:visited, .menuItemHilite:visited, .menuItem:hover, .menuItemHilite:hover, .menuItem:active, .menuItemHilite:active, .menuItem:link, .menuItemHilite:link, @@ -66,11 +73,6 @@ border-bottom: 1px solid #c0c0c0; } -.menuItem:hover, .menuItemHilite:hover, .menuItem:active, .menuItemHilite:active, -.menuItemX:hover, .menuItemHiliteX:hover, .menuItemX:active, .menuItemHiliteX:active { - color: #000; -} - .menuItem { background-color:#f6f6f6; } @@ -86,6 +88,7 @@ .menuItemHiliteX { background-color:#999999; } + .menu { position:absolute; @@ -99,15 +102,12 @@ opacity: 0.9; /* width:150px;*/ } -body -{ - margin: 0px; - font-family: Arial, Verdana, Helvetica, sans-serif; -} + fieldset, table, pre { margin-bottom:0; } + p { margin-top: 0px; @@ -132,6 +132,7 @@ textarea { font-family: Arial,Verdana,Helvetica,sans-serif; } + button, input[type="checkbox"], input[type="radio"], @@ -153,17 +154,20 @@ input[type=checkbox],input[type=radio] margin: 0px; vertical-align: bottom; } + ul li { list-style-type: none; margin-left: 6px; margin-bottom: 2px; } + ul { margin-top: 2px; margin-right: 0; } + hr { height:1px; @@ -176,6 +180,7 @@ div.clear visibility: hidden; font-size:0; } + th, td { border: none; @@ -189,6 +194,7 @@ th, td margin: 0; padding: 0; } + #header ul li { display:inline; @@ -201,6 +207,7 @@ th, td float:left; margin-bottom:-8px; } + #search, #sitemapLink, #colorPicker, #welcome, #globalLinks { float: right; @@ -211,55 +218,63 @@ th, td padding: 8px 10px 3px 10px; vertical-align: middle; } + /* global links */ #globalLinks { vertical-align: middle; } + #globalLinks ul { list-style: none; padding: 0; margin: 0; } + #globalLinks ul li { float: left; margin: 0 0.15em; display:block; } + #globalLinks ul li img { margin-bottom: 1px; margin-left:2px; cursor: pointer; } + #globalLinks ul li:hover ul, #globalLinks ul a:hover ul { visibility:visible; } - /* sitemap link */ #sitemapLink span { padding-right:5px; } + #sitemapLink { padding-top: 3px; } + #search, #sitemapLink { padding:0 3px 0 5px; height: 23px; vertical-align: bottom; } + #unified_search_advanced_img{ cursor:pointer; } + #unified_search_advanced_div { height: 1px; @@ -268,14 +283,17 @@ th, td width: 21em; padding-top: 5px; } + #unified_search_advanced_div .edit.view { padding:6px 6px 6px 4px; } + #unified_search_advanced_div .edit.view td { padding: 0 0.5em !important; } + #themeColors img, #themeFonts img { margin-bottom: 0; @@ -286,34 +304,41 @@ th, td { padding-top: 1em; } + .themePicker td { padding: 0 !important; } + .themePicker > table > tbody > tr > td { text-align: left; vertical-align: top; width: 100%; } + .themePicker hr { margin: 0; } + #themepickerLinkSpan { cursor:pointer; } + #colorPicker { padding: 8px 5px 0px 7px; } + #colorPicker ul { border: none; padding: 3px 0 0 0; margin: 0 0 0 10px; } + #colorPicker ul li { list-style-type: none; @@ -322,6 +347,7 @@ th, td cursor: pointer; margin: 0; } + #themeName { font-weight: bold; @@ -332,6 +358,7 @@ th, td { visibility:visible; } + #leftColumn { left: 10px; @@ -339,47 +366,53 @@ th, td float: left; width: 14.5em; } + div#content { - padding-top:10px; + padding-top:45px; padding-left: 8px; padding-bottom: 20px; - margin-left: 0; - margin-right: 5px; - margin-top:20px; - margin-bottom:25px; + margin-left:15px; + margin-right:15px; } + div#content > table { width: 100%; } + /* put a bit of left margin in when the left column menu is hidden */ div#content .noLeftColumn { margin-left: 5px; border-left: none; } + #HideHandle { padding-top: 5px; cursor: pointer; } + #HideMenu { visibility: hidden; position: absolute; z-index:100; } + #leftHandle { float:left; /*margin-top: 10px;*/ } + /* new record form */ #newRecord form { padding: 8px 8px 5px 8px; } + #newRecord form input, #newRecord form select, #newRecord form textarea @@ -388,6 +421,7 @@ div#content .noLeftColumn margin-top: 2px; max-width: 140px; } + #newRecord form button, #newRecord form input[type=button], #newRecord form input[type=submit], @@ -396,22 +430,26 @@ div#content .noLeftColumn padding-top: 0px; vertical-align: bottom; } + #newRecord form .dataLabel { padding-bottom: 2px; padding-top: 3px; padding-left: 0px; vertical-align: bottom; } + #newRecord form .dataField { padding-bottom: 3px; } + #newRecord form #jscal_trigger { margin-bottom: 4px; margin-top: 2px; vertical-align: bottom; } + #newRecord form a:link, #newRecord form a:visited, #newRecord form a:hover @@ -420,6 +458,7 @@ div#content .noLeftColumn border-bottom: 0px; padding-left: 0px; } + /* css dropdown menu */ ul.cssmenu { @@ -432,6 +471,7 @@ ul.cssmenu font: 12px Arial, Verdana, Helvetica, sans-serif; margin-top: 5px; } + ul.cssmenu li { font-size: 11px !important; @@ -444,77 +484,27 @@ ul.cssmenu li display: block; margin:0 0.15em; } -ul.cssmenu li:hover -{ - background-color:#FFFFFF; - color: #000; -} + ul.cssmenu li a { + display: block; + padding:0; text-decoration: none; font-size: 11px !important; -} - - -/* sub module list drop down */ -#subModuleList span -{ - display: none; -} -#subModuleList span.selected -{ - display: block; -} -#subModuleList li, #subModuleList ul{ - padding:0px; - margin:0px; -} - - -#subModuleList ul.cssmenu{ - display:block; - position:absolute; - top:15px; - left:0; - width:127px; } #header ul.cssmenu li{ display:block; } -#subModuleList ul.cssmenu li a, -#subModuleList ul.cssmenu li a:hover{ - color:#000; - border:none; - background:transparent none repeat scroll 0% 0%; -} - -#subModuleList li.subTabMore ul.cssmenu{ - visibility:hidden; -} - -#subModuleList li.subTabMore:hover ul.cssmenu{ - visibility:visible; -} -#subModuleList -{ - padding:0.4em 0 0.3em 0; -} -#subModuleList span a -{ - text-decoration: none; - padding: 0.2em 0.5em 0.3em 0.5em; - margin: 0 -3px 0 0; - white-space:nowrap; -} /* last viewed and shortcuts lists in the header */ .headerList { padding: 5px 0 3px 10px; vertical-align: middle; } + .headerList a:link, .headerList a:visited, .headerList a { padding: 2px 5px; @@ -531,12 +521,14 @@ ul.cssmenu li a color: #000; background: #f1f1f1; } + .leftList ul li { list-style: none; margin: 0px; border: 0px; } + .leftList ul li a { display: block; @@ -557,12 +549,14 @@ div.moduleTitle { height:2em; } + .moduleTitle img { margin-right: 3px; margin-top: 3px; border: 0; } + .moduleTitle h2 { display: block; @@ -582,6 +576,7 @@ div.moduleTitle float: right; margin-top: 10px; } + .moduleTitle span.utils a img { margin-bottom: -3px; @@ -602,11 +597,13 @@ div.moduleTitle padding:20px 16px 22px 30px; width: 100%; } + .view tr td table, .view tr td table tr td { padding: 0; } + .view tr td input[type=checkbox] { vertical-align: middle; @@ -626,12 +623,14 @@ div.moduleTitle padding-left: 0; margin-left: 0; } + .buttons { padding-bottom: 2px; padding-left: 0; padding-right:3px; } + .detail tr td { border: none; @@ -640,6 +639,7 @@ div.moduleTitle vertical-align: top; text-align: left; } + .detail tr td[scope=row] { margin-top: 2px; @@ -647,10 +647,12 @@ div.moduleTitle text-align: right; white-space:nowrap; } + .detail tr td > li { margin-left: 1.5em; } + /* editviews top buttons */ #EditView > table {overflow:auto;margin-bottom: 2px;} @@ -674,6 +676,7 @@ div.moduleTitle margin-top: 10px; padding-left:0; } + .edit tr td { font-weight: normal; @@ -681,45 +684,54 @@ div.moduleTitle vertical-align: top; padding: 3px !important; } + .edit tr td[scope=row] { padding: 5px 5px 5px 7px !important; text-align: left; vertical-align: top; } + .edit tr th { padding: 5px 5px 5px 7px !important; } + table#tabFormPagination td, #tabFormPagination, #EditView > table#tabFormPagination.detail.view { border-bottom: none; margin-bottom: 0; } + .edit tr td table, .edit tr td table tr td { padding: 3px 3px 3px 0 !important; padding: 0 !important; } + table.edit.view { margin-top: 0; } + /* search panel on top of list views ( extends .edit .view definition ) */ .search { margin: 0 0 4px 0 !important; padding:10px 6px 12px 10px; } + .search > table { padding: 0 !important; margin: 0; } + .search td span { color:#444444; } + .search td input[type=text], .search td input[type=password], .search td select @@ -733,6 +745,7 @@ table.edit.view { padding: 0 !important; margin-bottom: 10px; } + .list tr.pagination, .list tr.pagination td, .list tr.pagination td table @@ -741,14 +754,17 @@ table.edit.view { border: 0; margin: 0; } + .list tr.pagination td table td { padding: 3px 7px 3px 5px !important; } + .list tr.pagination td table td button { width: 25px; } + .list tr.pagination td table td a:link, .list tr.pagination td table td a:visited, .reportGroupByDataChildTablelistViewThS1 a:link, @@ -758,19 +774,23 @@ table.edit.view { text-decoration: none; padding: 2px 0px 3px 0px; } + .list tr.pagination td table td a:hover, .reportGroupByDataChildTablelistViewThS1 a:hover { text-decoration: underline; } + .list tr.pagination .buttons { padding: 2px 2px 2px 0 !important; } + .list tr.pagination #selectCountTop { width: 5em; } + .td_alt, .list tr th, .list tr td[scope=col], .edit .list tr th, .edit .list tr td[scope=col] { @@ -782,15 +802,18 @@ table.edit.view { border-right: none; white-space:nowrap; } + .list tr td { vertical-align: middle; padding: 3px 8px 5px 5px !important; } + .list tr.pagination td { padding: 0 !important; } + .list tr td.odd { padding: 3px 8px 5px 5px; @@ -837,6 +860,7 @@ table.edit.view { text-align: right; min-width: 75px; } + /* style for page content tables */ .other { @@ -845,21 +869,25 @@ table.edit.view { padding: 0 !important; width: 100%; } + .other td { font-weight: normal; padding: 4px 10px 4px 6px; vertical-align: middle; } + .other td[scope=row] { padding: 4px 6px 4px 6px; white-space:nowrap; } + .other .edit td { background: transparent !important; } + .other .edit { margin-top: 0; @@ -870,11 +898,13 @@ table.edit.view { { background: transparent; } + .other td.edit #wizard h4 { padding-left: 0; margin-top: 0; } + #wizard td { white-space: normal; @@ -889,30 +919,37 @@ table.detail padding: 0; width: 100%; } + .detail tr.pagination td { padding-top: 4px; text-align: right; vertical-align: middle; } + .detail table tr.pagination td { padding-bottom: 4px; } + .detail td > table tr td { border: none; } + /* Upgrade Wizard*/ .small{ width:100%; } + .small table{ width:auto; } + .small tr td table{ background-color:transparent; } + .small tr td[scope=row] table tr td, .small tr td[scope=row] table tr th{ background-color:transparent; } @@ -927,14 +964,17 @@ table.detail { padding: 10px 6px 12px 10px; } + .reportwizard > table { padding: 0 !important; } + .reportwizard tr td { vertical-align: middle; } + /* for subpanel tabs */ ul.tablist, ul.subpanelTablist { @@ -949,6 +989,7 @@ ul.tablist li, ul.subpanelTablist li margin: 0; display: inline; } + ul.tablist li a, ul.subpanelTablist li a { padding: 3px 8px; @@ -956,12 +997,14 @@ ul.tablist li a, ul.subpanelTablist li a border-bottom: none; text-decoration: none; } + ul.subpanelTablist #addPageItem a, ul.subpanelTablist #addPageItem a:hover { border: none; background: transparent; text-decoration: none; } + ul.tablist li a:link, ul.tablist li a:visited, ul.subpanelTablist li a:link, ul.subpanelTablist li a:visited { text-decoration: none; @@ -971,46 +1014,56 @@ ul.tablist li a:link, ul.tablist li a:visited, ul.subpanelTablist li a:link, ul. { padding: 15px 0px 0 0px; } + table.subpanelTabForm td { padding-bottom: 2px; padding-top: 0; } + .subpanelTabForm p { margin-bottom:0; } + .subpanelTabForm h3 { padding-left: 3px; } + .subpanelTabForm .h3Row { padding-top: 2px; margin-top: 0; } + .subpanelTabForm { margin-bottom: 10px; } + #groupTabs { margin-top: 20px; } + #groupTabs li, #searchTabs li { margin:0 -3px 0 0; } + table.subpanelTabForm { border-top: 0px none; margin-bottom: 4px; } + /* gantt styles */ table.days { font-family: Tahoma, Arial, Verdana, Helvetica, sans-serif; font-size: 11px; } + td.days { border-top: 1px solid #dfdfdf; border-bottom: 1px solid #dfdfdf; @@ -1141,7 +1194,6 @@ div.indent_right { { text-decoration:none; font-size: 11px; - color: #444; } #sitemap a:hover, #sitemap h4 a:hover { @@ -1991,7 +2043,6 @@ table.tabForm td ul li { ul#dashletCategories li a:link, ul#dashletCategories li a:visited { - color: #444; background: #eee; } ul#dashletCategories li a.current, ul#dashletCategories li a.current:hover @@ -2631,19 +2682,6 @@ ul.subTabs li a:link, ul.subTabs li a:visited margin-left: -1.7em; margin-top: 0.3em; } -#subModuleList -{ - padding:0.4em 0 0.3em 1em; - border-bottom: none; - border-top: 2px solid; -} -#subModuleList span a -{ - text-decoration: none; - padding: 0.2em 0.5em 0.3em 0.5em; - margin: 0 -3px 0 0; - border-bottom: none; -} /* last viewed and shortcuts lists in the header */ .headerList @@ -2748,7 +2786,7 @@ a.tabFormAdvLink:link, a.tabFormAdvLink:visited, a.tabFormAdvLink:hover { border: 1px solid; font-size: 11px; - width:50px; + width:75px; -webkit-transition: all 0.3s ease-out; -moz-transition: all 0.3s ease-out; -o-transition: all 0.3s ease-out; @@ -2866,7 +2904,6 @@ input, select, textarea, button /* for the main screen navigation tabs */ #moduleList ul li, -#subModuleList span { font-size: 12px; } @@ -3079,30 +3116,36 @@ body color: #444444; background-color: #ffffff; } + h1, h2, h3 { color: #000000; } + .h3Row { padding:000 5px; } + h4, h5 { color: #444; } + a:link, a:visited { color: #0b578f; } + a:hover { color: #000000; } + button, input[type=submit], input[type=reset], input[type=button], .button { - border-color: #abc3d7; + border-color: #cccccc; background-color: #ecf1f4; color: #000; background-image: url('../../../../index.php?entryPoint=getImage&imageName=bgBtn.gif'); @@ -3122,7 +3165,7 @@ button[disabled], input[type=submit][disabled], input[type=reset][disabled], inp } input,select { - border-color: #94c1e8; + border-color: #cccccc; background-color: #ffffff; } @@ -3168,19 +3211,7 @@ textarea { color: #ffffff; } -#moduleList ul li a:link, -#moduleList ul li a:visited -{ - color: #444444; - padding:10px 0 10px 0; -} -#moduleList ul li ul li a:link, -#moduleList ul li ul li a:visited -{ - color: #444444; - padding:10px 0 10px 0; -} #moduleList ul li a:hover { color: #000000; @@ -3193,27 +3224,6 @@ textarea background-repeat: no-repeat; border-bottom-color: #f10202; } -#subModuleList -{ -position:relative; - border:0; - margin:0; - padding:0; - -} -#subModuleList span a -{ - -} -#subModuleList span a:link, -#subModuleList span a:visited -{ - color: #ffffff; -} -#subModuleList span a:hover -{ - background-color:#0046ad; -} /* lists in the header */ .headerList @@ -3227,7 +3237,7 @@ position:relative; .headerList a:visited, .headerList a { - color: #444444; + border-color: #CBDAE6; } .headerList a:hover @@ -3301,16 +3311,19 @@ ul.subpanelTablist li a.activeSubTab:hover { color: #444444; } + .list { border-color: #ABC3D7 !important; } + .evenListRowS1 td, .oddListRowS1 td { color: #000000; border-bottom: 1px solid #cbdae6; } + .evenListRowS1:hover td, .oddListRowS1:hover td { @@ -3323,25 +3336,30 @@ table.detail { background-color: #cbdae6; } + .detail tr td[scope="row"] { color: #000000; background-color: #f6f6f6; border-color: #cbdae6; } + .detail h4 { color: #444444; } + .detail tr th { border-color: #cbdae6; } + .detail tr td { color: #444444; border-color: #cbdae6; background-color: #fff; } + .detail tr td a:link, .detail tr td a:visited, .detail tr td a:hover @@ -3364,11 +3382,13 @@ table.detail border-bottom-color: #abc3d7 !important; border-top-color: #f10202 !important; } + .edit { color: #000000; background-color: #f6f6f6; } + .detail .edit td { background-color: #fff !important; @@ -3381,17 +3401,20 @@ table.detail border-color: #abc3d7; background-color: #cbdae6; } + .other td { color: #444444; background-color: #ffffff; border-left-color: #dfdfdf; } + .other td[scope=row] { color: #000000; background-color: #fafafa; } + .other td.edit { color: #000000; @@ -3403,6 +3426,7 @@ a.utilsLink:link, a.utilsLink:visited { color: #0b578f; } + a.tabFormAdvLink:link, a.tabFormAdvLink:visited { color: #444444; @@ -3413,79 +3437,95 @@ a.tabFormAdvLink:link, a.tabFormAdvLink:visited { background-color: #abc3d7; } + .monthFooter td { border-top-color: #abc3d7; border-bottom-color: #abc3d7; background-color: #ffffff; } + .monthHeader a:hover, .monthViewDayHeight a:hover { color: #0b578f; } + .monthCalBodyTH th[scope=row], .monthViewDayHeight td[scope=row] { background-color: #ebebeb; } + .monthCalBodyTH th { background-color: #fafafa; color: #444444; border-color: #abc3d7 !important; } + .monthViewDayHeight td { border-color: #abc3d7; background-color: #ffffff; color: #444444; } + .monthViewDayHeight td[class=weekEnd] { background-color: #f6f6f6; } + .monthCalBodyDayItem { background-color: #ffffff; border-top-color: #abc3d7; border-bottom-color: #ddd; } + .monthCalBody td { background-color: #fff; color: #444444; } + .monthCalBody th a { color: #000000; } + .yearCalBody { border: none; } + .yearCalBodyMonth { background-color: #efefef !important; border-top: 2px solid #f10202; border-bottom: 2px solid #fff; } + .yearCalBody .monthHeader { border: none; } + .yearCalBodyMonth #daily_cal_table { border-top: #abc3d7; } + .yearCalBodyMonth #daily_cal_table .monthCalBodyTHDay { border-color: #abc3d7; } + .yearCalBodyMonth > a { color: #000000; } + h5.calSharedUser { color: #444444; @@ -3505,22 +3545,26 @@ h5.calSharedUser color: #000000; background-color: #ffffff; } + ul.tablist, ul.subpanelTablist { border-bottom-color: #abc3d7; } + ul.tablist li a:hover, ul.subpanelTablist li a:hover { background: #fafafa; border-color: #abc3d7; } + ul.tablist li a, ul.subpanelTablist li a { background-color: #fff; border-color: #dddddd; } + ul.tablist li a:link, ul.tablist li a:visited, ul.subpanelTablist li a:link, @@ -3528,11 +3572,13 @@ ul.subpanelTablist li a:visited { color: #444444; } + ul.tablist li a:hover, ul.subpanelTablist li a:hover { background: #fafafa; } + ul.subpanelTablist li a.current, ul.subpanelTablist li a.current:hover { @@ -3579,9 +3625,7 @@ ul.tablist li a.current:link, ul.tablist li a.current:visited, ul.tablist li a.c } div.bodywrapper { - padding:10px; - } .yui-navset .yui-nav, .yui-navset .yui-navset-top .yui-nav, .yui-layout .yui-layout-hd { @@ -3605,7 +3649,6 @@ ul.yui-nav li.selected { background:#f10202; } - #basic_search_link { margin-left:6px !important; @@ -3645,7 +3688,6 @@ div#chartDashlets overflow-y: auto; } - /* miscellaneaous 508 classes */ .detail508 tr td[scope="col"] { @@ -3670,12 +3712,11 @@ ul.clickMenu { color: #000000; display: inline-block; } + ul.clickMenu form{ float:left; display:block; } -ul.SugarActionMenuIESub { -} #globalLinksModule ul.clickMenu.SugarActionMenu li a:hover, #globalLinksModule ul.clickMenu li:hover span, @@ -3687,6 +3728,7 @@ ul.clickMenu li ul.subnav li a:hover,ul.clickMenu li ul.subnav li input:hover, u border-color: #f10202; color: #fff; } + ul#globalLinksSubnav.SugarActionMenuIESub li a:hover, ul#quickCreateULSubnav.SugarActionMenuIESub li a:hover, ul.clickMenu:hover > li > span > a, ul.clickMenu:hover > li > a { /*color: #fff !important;*/ @@ -3695,6 +3737,7 @@ ul.clickMenu:hover > li > span > a, ul.clickMenu:hover > li > a { ul.clickMenu li span.ab:hover { background-position: 6px 0px; } + ul.clickMenu>li, ul.SugarActionMenuIESub li { background-color: #ECF1F4; background-image: url('../../../../index.php?entryPoint=getImage&imageName=bgBtn.gif'); @@ -3704,6 +3747,7 @@ ul.clickMenu>li, ul.SugarActionMenuIESub li { position: relative; /*--Declare X and Y axis base--*/ cursor: pointer; } + ul.SugarActionMenuIESub li a, ul.clickMenu li a, .list tr.pagination td.buttons ul.clickMenu > li > a:link, .list tr.pagination td.buttons ul.clickMenu > li > a{ display: block; @@ -3726,6 +3770,7 @@ ul.clickMenu li.single a{ ul.clickMenu li a:hover{ text-decoration: none !important; } + ul.clickMenu li span { /*--Drop down trigger styles--*/ width: 22px; height: 16px; @@ -3739,9 +3784,11 @@ ul.clickMenu li span.ab { /*--Drop down trigger styles--*/ /* Remove the padding, not needed when we select records */ /* padding-left: 5px; */ } + ul.clickMenu li span.subhover { cursor: pointer; } /*--Hover effect for trigger--*/ + ul.clickMenu li ul.subnav, ul.clickMenu ul.subnav-sub, ul.SugarActionMenuIESub { list-style: none; position: absolute; /*--Important - Keeps subnav from affecting main navigation flow--*/ @@ -3769,6 +3816,7 @@ ul.clickMenu li ul.subnav li, ul.clickMenu ul.subnav-sub li, ul.SugarActionMenuI white-space: nowrap; } + ul.clickMenu.subpanel.records { background-color: #eee; border: 1px solid #ddd; @@ -3786,6 +3834,7 @@ ul.clickMenu.subpanel.records:hover { ul.clickMenu.subpanel.records li a{ color: #aaa; } + ul.clickMenu.subpanel.records > li div:hover a{ color: #fff !important; } @@ -3807,10 +3856,12 @@ ul.clickMenu.subpanel.records li ul.subnav li a span { width: 0px; background-image: none; } + ul.clickMenu.button li span.ab:hover { background-position: 50% 0px; } + ul.clickMenu.button li > span { width: auto; background-position: 50% -20px; @@ -3904,6 +3955,7 @@ ul#selectLink.clickMenu .massall, td.selectCol .massall{ td.paginationActionButtons ul.selectmenu > li > a, td.selectCol ul.selectmenu > li > a, ul#selectLink.clickMenu > li > a { padding: 0px !important; } + ul.clickMenu.showLess .moreOverflow , ul.clickMenu.showLess .moduleMenuOverFlowLess, ul.clickMenu.showMore .moduleMenuOverFlowMore { display:none; } @@ -3912,9 +3964,11 @@ ul.clickMenu.showLess .moreOverflow , ul.clickMenu.showLess .moduleMenuOverFlowL float: right; margin-right: 0px; } + ul#globalLinksSubnav, ul#quickCreateULSubnav{ font-family: Arial; } + ul#globalLinks.clickMenu { background: none; border: 0px none; @@ -3938,7 +3992,6 @@ ul#globalLinks.clickMenu li > span a { padding: 0px 10px !important; } - ul#globalLinks.clickMenu li ul.subnav { top: 43px; right: 0px; @@ -4121,8 +4174,9 @@ body { background: -ms-linear-gradient(top, #333333 0%,#121212 100%); /* IE10+ */ background: linear-gradient(to bottom, #333333 0%,#121212 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#333333', endColorstr='#121212',GradientType=0 ); /* IE6-8 */ - border-bottom:2px solid #f10202; height:35px; + border-bottom:2px solid #f10202; + z-index:50; } /* Table CSS */ @@ -4180,6 +4234,17 @@ input[type=reset]:hover, /* Form/fields CSS */ input[type=text], input[type=password] { + padding:5px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +.x-border-box .x-field-default-toolbar .x-form-text { + padding:0; +} + +#query_string { padding:5px; border:1px solid #ccc; -webkit-border-radius: 2px; @@ -4231,7 +4296,7 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { /* Dashlet CSS */ .dashletPanel .h3Row { - background:#777777; + background: #777777; -webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px; -moz-border-radius-topleft: 5px; @@ -4243,7 +4308,7 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { .dashletPanel .h3Row h3 { color:#ffffff; - font-weight:normal; + font-weight:bold; font-size:1.2em; } @@ -4372,7 +4437,6 @@ iframe.teamNoticeBox { line-height:25px; margin:0; padding:5px; - } #moduleList ul li a:link { @@ -4380,15 +4444,18 @@ iframe.teamNoticeBox { color:#cccccc; font-weight:normal; font-size:12px !important; - } #moduleList ul li a:visited { background:none; - color:#cccccc; + color:#ffffff; font-weight:normal; } +#moduleList ul li ul li { + width:auto; +} + #moduleList ul li:hover { background:#565656; @@ -4411,9 +4478,11 @@ iframe.teamNoticeBox { border:none; font-weight:bold; } + #moduleList ul li span.currentTab li { } + #moduleList ul li span.currentTab a { font-weight:bold; } @@ -4427,6 +4496,9 @@ iframe.teamNoticeBox { opacity:1; margin-top:5px; margin-left:-5px; + -moz-box-shadow: 0 0 5px #888; + -webkit-box-shadow: 0 0 5px#888; + box-shadow: 0 0 5px #888; } #moduleList ul li ul.cssmenu li{ @@ -4442,14 +4514,19 @@ iframe.teamNoticeBox { #moduleList ul li ul.cssmenu li a { font-size:12px; - color:#cccccc; } +#moduleList ul li ul.cssmenu li a:hover { + font-size:12px; + color:#ffffff; +} + #moduleList ul li #moduleTabExtraMenu { padding:5px; margin:0; } + ul.cssmenu li a{ font-size:12px !important; } @@ -4493,6 +4570,9 @@ ul#drop-nav { -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; + -moz-box-shadow: 0 0 5px #888; + -webkit-box-shadow: 0 0 5px#888; + box-shadow: 0 0 5px #888; right:0; } @@ -4503,6 +4583,7 @@ ul#drop-nav li { ul#drop-nav li a { line-height:25px; + color:#ffffff; } ul#drop-nav li a:hover { @@ -4528,7 +4609,7 @@ ul#drop-nav li a:hover { padding: 0px 10px 0px 10px; text-decoration: none; white-space: nowrap; - color: #cccccc; + color:#cccccc; } ul#drop-nav ul li:hover { @@ -4554,7 +4635,7 @@ ul#drop-nav ul li:hover { #drop-nav li:hover li a:hover { background: #565656; - color:#cccccc; + color:#ffffff; } #drop-nav li ul li { @@ -4729,7 +4810,7 @@ button[disabled], input[type=submit][disabled], input[type=reset][disabled], inp { border-color: #c1c1c1; background-color: #f0f0f0; - color: #000; + color: #565656; background-image: url('../../../../index.php?entryPoint=getImage&imageName=bgBtnGray.gif'); } @@ -4737,7 +4818,7 @@ button[disabled]:hover, input[type=submit][disabled]:hover, input[type=reset][di { border-color: #c1c1c1; background-color: #f0f0f0; - color: #000; + color: #565656; background-image: url('../../../../index.php?entryPoint=getImage&imageName=bgBtnGray.gif'); } @@ -4760,6 +4841,9 @@ ul#quick-nav { -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; + -moz-box-shadow: 0 0 5px #888; + -webkit-box-shadow: 0 0 5px#888; + box-shadow: 0 0 5px #888; right:5px; } @@ -4818,7 +4902,7 @@ ul#quick-nav ul li:hover { #quick-nav li:hover li a:hover { background: #565656; - color:#cccccc; + color:#ffffff; } #quick-nav li ul li { @@ -4847,7 +4931,7 @@ input[type=reset], filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 ); /* IE6-8 */ filter:none !important; border: solid 1px #999999; - color: #121212; + color: #333333; border-radius: 5px; cursor: pointer; font-size:12px; @@ -4916,7 +5000,6 @@ select:focus { padding:3px; } - .tabForm { border: none; -webkit-border-radius: 5px; @@ -5018,7 +5101,7 @@ div.password { div.dashletToolSet a img:hover { opacity:0.6; --webkit-transition: all 0.3s ease-out; + -webkit-transition: all 0.3s ease-out; -moz-transition: all 0.3s ease-out; -o-transition: all 0.3s ease-out; transition: all 0.3s ease-out; @@ -5028,7 +5111,7 @@ div#email_options { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; - } +} a#delete_listview_top:hover { color:#ffffff; @@ -5110,24 +5193,21 @@ input[type=text].cstm_code { width:200px; height:200px; } -#subModuleList ul { - min-width:200px; -} -#subModuleList ul li { - padding:5px; - background:#333; - border:none; - display:block; +.bigmenu { + columns:150px 2; + -webkit-columns:150px 2; /* Safari and Chrome */ + -moz-columns:150px 2; /* Firefox */ + float:left; } - -#subModuleList span a { - padding:5px; - margin:5px; - border-radius:2px; +#All { + columns:150px 2; + -webkit-columns:150px 2; /* Safari and Chrome */ + -moz-columns:150px 2; /* Firefox */ + float:left; } -#subModuleList span a:hover { - background:#565656; +#moduleDashletsList { + max-height:375px !important; } \ No newline at end of file diff --git a/themes/Suite7/tpls/_headerModuleList.tpl b/themes/Suite7/tpls/_headerModuleList.tpl index f93eb36d5a5..075aca3cca4 100755 --- a/themes/Suite7/tpls/_headerModuleList.tpl +++ b/themes/Suite7/tpls/_headerModuleList.tpl @@ -40,76 +40,76 @@
      {/foreach} - {foreach from=$groupTabs item=modules key=group name=groupList} - {capture name=extraparams assign=extraparams}parentTab={$group}{/capture} -
    • -   + + +
    • + {/if} + {/foreach} + {foreach from=$groupTabs item=modules key=group name=groupList} + {capture name=extraparams assign=extraparams}parentTab={$group}{/capture} +
    • +   {$group} -   -
        - {foreach from=$modules.modules item=module key=modulekey} -
      • - {capture name=moduleTabId assign=moduleTabId}moduleTab_{$smarty.foreach.moduleList.index}_{$module}{/capture} - {sugar_link id=$moduleTabId module=$modulekey data=$module extraparams=$extraparams} -
      • - {/foreach} - {foreach from=$modules.extra item=submodulename key=submodule} -
      • - {$submodulename} -
      • - {/foreach} -
      -
    • - {/foreach} +   +
        + {foreach from=$modules.modules item=module key=modulekey} +
      • + {capture name=moduleTabId assign=moduleTabId}moduleTab_{$smarty.foreach.moduleList.index}_{$module}{/capture} + {sugar_link id=$moduleTabId module=$modulekey data=$module extraparams=$extraparams} +
      • + {/foreach} + {foreach from=$modules.extra item=submodulename key=submodule} +
      • + {$submodulename} +
      • + {/foreach} +
      + + {/foreach}
      @@ -117,8 +117,8 @@
      •  
      • - {foreach from=$moduleTopMenu item=module key=name name=moduleList} - {if $name == $MODULE_TAB} + {foreach from=$moduleTopMenu item=module key=name name=moduleList} + {if $name == $MODULE_TAB}
      •   {sugar_link id="moduleTab_$name" module=$name data=$module}  @@ -131,7 +131,7 @@ {if $item.URL == "-"}
      •  
      • {else} -
      • {$item.LABEL}
      • +
      • {$item.LABEL}
      • {/if} {/foreach}
        @@ -157,111 +157,113 @@
      - {/if} - {if $item.module_name == $name} - - - +
      -
    • +
    • +
      + {/if} + {if $item.module_name == $name} + + + - - - - -
      +
    • - {$item.item_summary_short} + accessKey="{$smarty.foreach.lastViewed.iteration}" + href="{sugar_link module=$item.module_name action='DetailView' record=$item.item_id link_only=1}"> + {$item.item_summary_short} -
    • - -
      - {/if} - {foreachelse} - {$APP.NTC_NO_ITEMS_DISPLAY} - {/foreach} - - {else} -
    • -   - {sugar_link id="moduleTab_$name" module=$name data=$module}  -
        - {if count($shortcutTopMenu.$name) > 0} -

        {$APP.LBL_LINK_ACTIONS}

        + +
    • + +
      + {/if} + {foreachelse} + {$APP.NTC_NO_ITEMS_DISPLAY} + {/foreach} + + {else} +
    • +   + {sugar_link id="moduleTab_$name" module=$name data=$module}  + +
    • + {/if} + {/foreach} + {if count($moduleExtraMenu) > 0} +
    • + {$APP.LBL_MORE} »
      +
        +
        {foreach from=$moduleExtraMenu item=module key=name name=moduleList} -
      • {sugar_link id="moduleTab_$name" module=$name data=$module}
      • +
      • {sugar_link id="moduleTab_$name" module=$name data=$module}
      • {/foreach} -
      -
    • - {/if} + + + + {/if} {/if} \ No newline at end of file From f9e0a3b3d74e54ffd995e30394dd6dd54668f04c Mon Sep 17 00:00:00 2001 From: William Rennie Date: Sat, 22 Feb 2014 16:04:38 +0000 Subject: [PATCH 168/223] test git push --- themes/Suite7/css/style.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/Suite7/css/style.css b/themes/Suite7/css/style.css index 354b44debef..b795091a12c 100755 --- a/themes/Suite7/css/style.css +++ b/themes/Suite7/css/style.css @@ -367,6 +367,8 @@ th, td width: 14.5em; } +/* main content */ + div#content { padding-top:45px; From 58551947c01a2ef072100a2233c648304a3e32a5 Mon Sep 17 00:00:00 2001 From: bluquet Date: Thu, 27 Feb 2014 10:34:51 +0100 Subject: [PATCH 169/223] Create QuickCRM --- QuickCRM | 1 + 1 file changed, 1 insertion(+) create mode 100644 QuickCRM diff --git a/QuickCRM b/QuickCRM new file mode 100644 index 00000000000..9d6df71c10b --- /dev/null +++ b/QuickCRM @@ -0,0 +1 @@ +QuickCRM add-on for SuiteCRM From 627cf5e1dc4a4e65a020e933a881070f9ec000d2 Mon Sep 17 00:00:00 2001 From: bluquet Date: Thu, 27 Feb 2014 10:35:53 +0100 Subject: [PATCH 170/223] Delete QuickCRM --- QuickCRM | 1 - 1 file changed, 1 deletion(-) delete mode 100644 QuickCRM diff --git a/QuickCRM b/QuickCRM deleted file mode 100644 index 9d6df71c10b..00000000000 --- a/QuickCRM +++ /dev/null @@ -1 +0,0 @@ -QuickCRM add-on for SuiteCRM From 432f6ac7f776a0379ce81365b914069e9a63b6d4 Mon Sep 17 00:00:00 2001 From: bluquet Date: Thu, 27 Feb 2014 10:40:20 +0100 Subject: [PATCH 171/223] Revert "Delete QuickCRM" This reverts commit dcbd6f47c9b5de26d83310aecc10957dc1389ee3. --- QuickCRM | 1 + 1 file changed, 1 insertion(+) create mode 100644 QuickCRM diff --git a/QuickCRM b/QuickCRM new file mode 100644 index 00000000000..9d6df71c10b --- /dev/null +++ b/QuickCRM @@ -0,0 +1 @@ +QuickCRM add-on for SuiteCRM From 1121b4f4cfbaf8837f96bf5d377051fc3c44a523 Mon Sep 17 00:00:00 2001 From: bluquet Date: Thu, 27 Feb 2014 10:44:16 +0100 Subject: [PATCH 172/223] Revert "Revert "Delete QuickCRM"" This reverts commit 07b60f2ce2cb5b19da956a4166b6b7c5ba65651a. --- QuickCRM | 1 - 1 file changed, 1 deletion(-) delete mode 100644 QuickCRM diff --git a/QuickCRM b/QuickCRM deleted file mode 100644 index 9d6df71c10b..00000000000 --- a/QuickCRM +++ /dev/null @@ -1 +0,0 @@ -QuickCRM add-on for SuiteCRM From 822b69f90163b182d124e3560ed137d15eec0bde Mon Sep 17 00:00:00 2001 From: bluquet Date: Thu, 27 Feb 2014 11:34:43 +0100 Subject: [PATCH 173/223] Update QuickCRM - Update to version 3.3 - Fix bug in SugarCRM web service (get_entry_list) preventing sort order to work --- ...noption.php => quickcrmadminoption_ce.php} | 6 +- .../modules/Administration/genJSfromSugar.php | 67 +++-- mobile/css/quickcrm2.css | 11 - mobile/css/{quickcrm3.css => quickcrm331.css} | 25 +- mobile/fielddefs/modules_de_de.js | 2 +- mobile/fielddefs/modules_en_us.js | 2 +- mobile/fielddefs/modules_es_es.js | 11 +- mobile/fielddefs/modules_fr_FR.js | 2 +- mobile/fielddefs/modules_it_it.js | 2 +- mobile/fielddefs/modules_lt_LT.js | 1 + mobile/fielddefs/modules_nl_nl.js | 1 + mobile/fielddefs/modules_zh_cn.js | 1 + mobile/fielddefs/modules_zh_tw.js | 1 + mobile/index.php | 261 +++++++++--------- mobile/js/mobile_de_de.js | 13 +- mobile/js/mobile_en_us.js | 14 +- mobile/js/mobile_es_es.js | 13 +- mobile/js/mobile_fr_FR.js | 13 +- mobile/js/mobile_it_it.js | 13 +- mobile/js/mobile_lt_LT.js | 99 +++++++ mobile/js/mobile_nl_nl.js | 13 +- mobile/js/mobile_zh_cn.js | 13 +- mobile/js/mobile_zh_tw.js | 13 +- mobile/js/quickcrm-ce-3.3.2.min.js | 1 + mobile/js/quickcrm-utils.min.js | 1 - mobile/js/quicrcrm-ce-3.0.0.min.js | 1 - mobile/js/quicrcrm-ce-3.2.2.min.js | 1 - service/v4/SugarWebServiceUtilv4.php | 3 +- 28 files changed, 371 insertions(+), 233 deletions(-) rename custom/Extension/modules/Administration/Ext/Administration/{quickcrmadminoption.php => quickcrmadminoption_ce.php} (78%) mode change 100755 => 100644 delete mode 100755 mobile/css/quickcrm2.css rename mobile/css/{quickcrm3.css => quickcrm331.css} (80%) mode change 100755 => 100644 create mode 100644 mobile/fielddefs/modules_lt_LT.js create mode 100644 mobile/fielddefs/modules_nl_nl.js create mode 100644 mobile/fielddefs/modules_zh_cn.js create mode 100644 mobile/fielddefs/modules_zh_tw.js create mode 100644 mobile/js/mobile_lt_LT.js create mode 100644 mobile/js/quickcrm-ce-3.3.2.min.js delete mode 100755 mobile/js/quickcrm-utils.min.js delete mode 100755 mobile/js/quicrcrm-ce-3.0.0.min.js delete mode 100755 mobile/js/quicrcrm-ce-3.2.2.min.js diff --git a/custom/Extension/modules/Administration/Ext/Administration/quickcrmadminoption.php b/custom/Extension/modules/Administration/Ext/Administration/quickcrmadminoption_ce.php old mode 100755 new mode 100644 similarity index 78% rename from custom/Extension/modules/Administration/Ext/Administration/quickcrmadminoption.php rename to custom/Extension/modules/Administration/Ext/Administration/quickcrmadminoption_ce.php index 7072e603d08..7bd4a369e49 --- a/custom/Extension/modules/Administration/Ext/Administration/quickcrmadminoption.php +++ b/custom/Extension/modules/Administration/Ext/Administration/quickcrmadminoption_ce.php @@ -18,11 +18,7 @@ $admin_option_defs=array(); $admin_option_defs['Administration']['quickcrm_update']= array('Administration','LBL_UPDATE_QUICKCRM_TITLE','LBL_UPDATE_QUICKCRM','./index.php?module=Administration&action=updatequickcrm'); - - -$admin_option_defs['Administration'] = array_merge((array)$admin_group_header[1][3]['Administration'],(array)$admin_option_defs['Administration']); - -$admin_group_header[1]= array('LBL_ADMINISTRATION_HOME_TITLE','',false,$admin_option_defs, 'LBL_ADMINISTRATION_HOME_DESC'); +$admin_group_header[]= array('LBL_QUICKCRM','',false,$admin_option_defs, ''); ?> \ No newline at end of file diff --git a/custom/modules/Administration/genJSfromSugar.php b/custom/modules/Administration/genJSfromSugar.php index bfa6788c394..5112ec76be5 100755 --- a/custom/modules/Administration/genJSfromSugar.php +++ b/custom/modules/Administration/genJSfromSugar.php @@ -44,6 +44,7 @@ function getListOfLists($lst_mod) { } function createAppStringsCache($lang = 'en_us') { + global $sugar_config; $lst_mod=array('Accounts','Contacts','Opportunities','Leads','Calls','Meetings','Cases','Project','ProjectTask','Tasks','Notes'); $required_list = $this->getListOfLists($lst_mod); // List of application list strings used in the application (enums) @@ -56,6 +57,7 @@ function createAppStringsCache($lang = 'en_us') { $app_list_strings["moduleListSingular"][$lst]= isset($all_app_list_strings["moduleListSingular"][$lst])?$all_app_list_strings["moduleListSingular"][$lst]:$all_app_list_strings["moduleList"][$lst]; } $app_list_strings["parent_type_display"]=$all_app_list_strings["parent_type_display"]; + $app_list_strings["duration_intervals"]=$all_app_list_strings["duration_intervals"]; $app_list_strings["moduleList"]["SavedSearches"]= $all_app_list_strings["moduleList"]["SavedSearch"]; // date_range_search_dom in not defined until 6.2 $app_list_strings["date_search"]= isset($all_app_list_strings["date_range_search_dom"])?$all_app_list_strings["date_range_search_dom"]:$all_app_list_strings["kbdocument_date_filter_options"]; @@ -71,7 +73,7 @@ function createAppStringsCache($lang = 'en_us') { $ADM_mod_strings = return_module_language($lang, "Administration"); $str = << 49000?'1':'0'); $administration->saveSetting('QuickCRM', $lang.'f', $in_file); - $saveDir = realpath(dirname(__FILE__).'/../../../mobile/fielddefs/'); - if($fh = @fopen($saveDir . '/' .$lang . '.js', "w")){ - fputs($fh, $str); - fclose($fh); - } - else +// if ($sugar_config['sugar_version']<'6.3'){ + $saveDir = realpath(dirname(__FILE__).'/../../../mobile/fielddefs/'); + if($fh = @fopen($saveDir . '/' .$lang . '.js', "w")){ + fputs($fh, $str); + fclose($fh); + } + else { - // die(); + // die(); } +// } } function createDefaultLocalization() { @@ -143,17 +157,18 @@ function createDefaultLocalization() { $str .= '$time = "'.time().'";'; $str .= ' ?>'; - $saveDir = realpath(dirname(__FILE__).'/../../../mobile/fielddefs/'); - if($fh = fopen($saveDir .'/' . 'localization.php', "w")){ - fputs($fh, $str); - fclose($fh); - } - else +// if ($sugar_config['sugar_version']<'6.3'){ + $saveDir = realpath(dirname(__FILE__).'/../../../mobile/fielddefs/'); + if($fh = fopen($saveDir .'/' . 'localization.php', "w")){ + fputs($fh, $str); + fclose($fh); + } + else { $mod_strings = return_module_language($current_language, "Administration"); echo $mod_strings['LBL_ERR_DIR_MSG'].$saveDir; } - +// } $str = "var mobile_edition = 'CE',Q_API='2.3', app_support=true, module_access={}, sugar_mod_fields={};"; $str .= 'var js_plugins=[],html_plugins=[];'; @@ -203,14 +218,17 @@ function createDefaultLocalization() { $str .= "var CustomHTML=".(file_exists("custom/QuickCRM/home.html")?"true":"false").";"; $str .= "var CustomJS=".(file_exists("custom/QuickCRM/custom.js")?"true":"false").";"; + $administration->saveSetting('QuickCRM', 'sugar_config', base64_encode($str)); - $saveDir = realpath(dirname(__FILE__).'/../../../mobile/'); + if ($sugar_config['sugar_version']<'6.3'){ + $saveDir = realpath(dirname(__FILE__).'/../../../mobile/'); - if($fh = @fopen($saveDir . '/config.js', "w")){ - fputs($fh, $str); - fclose($fh); - } + if($fh = @fopen($saveDir . '/config.js', "w")){ + fputs($fh, $str); + fclose($fh); + } + } } function createAllFiles(){ @@ -245,6 +263,11 @@ function CheckAccess(){ $err=($info=='403' || $info=='500'); } + + + + + curl_close($ch); return (!$err); } diff --git a/mobile/css/quickcrm2.css b/mobile/css/quickcrm2.css deleted file mode 100755 index 34b303d50e4..00000000000 --- a/mobile/css/quickcrm2.css +++ /dev/null @@ -1,11 +0,0 @@ -body{background:#ccc;}.ui-mobile #HomePage{background-color:#ccc;}.IconWrapper{list-style-type: none;width:100%;padding:0px;margin:0;text-align:center;} -.IconContainer{position:relative;display:inline-block;vertical-align:top;width:93px;text-align:center;padding-bottom:10px;padding-top:10px;}.IconContainer .ui-link{text-decoration:none;color:#111;text-shadow:0 1px 1px #fff;font-weight:normal;} -.HomeIcon{background-repeat:no-repeat;background-position:0px 0;height:48px;width:48px;margin-left:auto;margin-right:auto;text-align:center;} -.AllModulesIcon{background-image:url('../images/icon_BasicSearch.gif');}.ActivitiesIcon{background-image:url('../images/icon_Activities.gif');}.LastViewedIcon{background-image:url('../images/icon_Dashlet.gif');}.AdminIcon{background-image:url('../images/icon_Application.gif');}.NSEmailIcon{background-image:url('../images/icon_Emails.gif');} -em{color:red;font-weight:bold;padding-right:.25em;} -.ui-footer p{text-align:center;} -.ui-header .ui-title { -margin-left: 0; -margin-right: 0; - /* text-overflow:visible; */ /* -Uncomment - to disable Ellipsis completely use with Caution- !*/ -} \ No newline at end of file diff --git a/mobile/css/quickcrm3.css b/mobile/css/quickcrm331.css old mode 100755 new mode 100644 similarity index 80% rename from mobile/css/quickcrm3.css rename to mobile/css/quickcrm331.css index 9aab126d382..bda98eb69e6 --- a/mobile/css/quickcrm3.css +++ b/mobile/css/quickcrm331.css @@ -1,10 +1,17 @@ body{background:#ccc;}.ui-mobile #HomePage{background-color:#ccc;}.IconWrapper{list-style-type: none;width:100%;padding:0px;margin:0;text-align:center;} .IconContainer{position:relative;display:inline-block;vertical-align:top;width:93px;text-align:center;padding-bottom:10px;padding-top:10px;}.IconContainer .ui-link{text-decoration:none;color:#111;text-shadow:0 1px 1px #fff;font-weight:normal;} -.HomeIcon{background-repeat:no-repeat;background-position:0px 0;height:48px;width:48px;margin-left:auto;margin-right:auto;text-align:center;} -.MapIcon{background-image:url('../images/iosmaps.png');background-size:48px 48px;}.SyncIcon{background-image:url('../images/icon_SPSync.gif');}.AllModulesIcon{background-image:url('../images/icon_BasicSearch.gif');}.ActivitiesIcon{background-image:url('../images/icon_Activities.gif');}.LastViewedIcon{background-image:url('../images/icon_Dashlet.gif');}.AdminIcon{background-image:url('../images/icon_Application.gif');}.NSEmailIcon{background-image:url('../images/icon_Emails.gif');} +.HomeIcon{background-repeat:no-repeat;background-position:0px 0;height:32px;width:32px;margin-left:auto;margin-right:auto;text-align:center;} .GreenIcon{background-repeat:no-repeat;background-position:0px 0;height:32px;width:32px;background-image:url('../images/bullet_green.png');} .RedIcon{background-repeat:no-repeat;background-position:0px 0;height:32px;width:32px;background-image:url('../images/bullet_red.png');} em{color:red;font-weight:bold;padding-right:.25em;} +.navLeftIcon {padding:0;margin:0;float:left} +.navRightIcon {padding:0;margin:0;float:right} + +#DownloadDiv { overflow: auto; -webkit-overflow-scrolling: touch; height: 500px; } +.embedPDF{ width: 900px; height: 10000px } +.embedIMG{ width: 100%; height: auto } + + .ui-footer p{text-align:center;} .ui-header .ui-title { margin-left: 0; @@ -38,5 +45,19 @@ margin-right: 0; .ui-responsive-panel .ui-panel-dismiss-display-push { display: none; } + + #DownloadDiv { overflow: auto; -webkit-overflow-scrolling: touch; height: 750px; } } .ui-panel-inner {padding-top:0px;} + + +@media all and (max-width: 35em) { + .my-breakpoint .ui-block-a, + .my-breakpoint .ui-block-b, + .my-breakpoint .ui-block-c, + .my-breakpoint .ui-block-d, + .my-breakpoint .ui-block-e { + width: 100%; + float:none; + } +} \ No newline at end of file diff --git a/mobile/fielddefs/modules_de_de.js b/mobile/fielddefs/modules_de_de.js index 9e94c104ed4..7227af6c23e 100755 --- a/mobile/fielddefs/modules_de_de.js +++ b/mobile/fielddefs/modules_de_de.js @@ -1 +1 @@ -var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"LBL_NAME":"Name:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_TYPE":"Typ:","LBL_INDUSTRY":"Branche:","LBL_ANNUAL_REVENUE":"Jahresumsatz:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Rechnungsadresse Stra\u00dfe:","LBL_BILLING_ADDRESS_CITY":"Rechnungsadresse Stadt:","LBL_BILLING_ADDRESS_STATE":"Rechnungsadresse Bundesland:","LBL_BILLING_ADDRESS_POSTALCODE":"Rechnungsadresse PLZ:","LBL_BILLING_ADDRESS_COUNTRY":"Rechnungsadresse Land:","LBL_RATING":"Einstufung:","LBL_PHONE_OFFICE":"Telefon B\u00fcro:","LBL_PHONE_ALT":"Weiteres Telefon:","LBL_WEBSITE":"Webseite:","LBL_OWNERSHIP":"Eigent\u00fcmer:","LBL_EMPLOYEES":"Mitarbeiter:","LBL_TICKER_SYMBOL":"Wertpapier Kennnummer (WKN):","LBL_SHIPPING_ADDRESS_STREET":"Lieferadresse Stra\u00dfe:","LBL_SHIPPING_ADDRESS_CITY":"Lieferadresse Stadt:","LBL_SHIPPING_ADDRESS_STATE":"Lieferadresse Bundesland:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Lieferadresse PLZ:","LBL_SHIPPING_ADDRESS_COUNTRY":"Lieferadresse Land:","LBL_EMAIL":"E-Mail Adresse:","LBL_PARENT_ACCOUNT_ID":"ID Mutterfirma","LBL_SIC_CODE":"SIC Code:","LBL_MEMBER_OF":"Mitglied von:","LBL_CAMPAIGN_ID":"Kampagnen ID","LBL_CAMPAIGN":"Kampagne:","LBL_BILLING_ADDRESS":"Rechnungsadresse::","LBL_SHIPPING_ADDRESS":"Lieferadresse:","NEW":"Neue Firma"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_SALUTATION":"Anrede:","LBL_FIRST_NAME":"Vorname:","LBL_LAST_NAME":"Nachname:","LBL_TITLE":"Funktion:","LBL_DEPARTMENT":"Abteilung:","LBL_DO_NOT_CALL":"Nicht anrufen:","LBL_HOME_PHONE":"Privat:","LBL_MOBILE_PHONE":"Telefon Mobil:","LBL_OFFICE_PHONE":"Telefon B\u00fcro:","LBL_OTHER_PHONE":"Weiteres Telefon:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"E-Mail Adresse:","LBL_PRIMARY_ADDRESS_STREET":"Hauptadresse Stra\u00dfe:","LBL_PRIMARY_ADDRESS_CITY":"Hauptadresse Stadt:","LBL_PRIMARY_ADDRESS_STATE":"Hauptadresse Bundesland:","LBL_PRIMARY_ADDRESS_POSTALCODE":"Hauptadresse PLZ:","LBL_PRIMARY_ADDRESS_COUNTRY":"Hauptadresse Land:","LBL_ALT_ADDRESS_STREET":"2. Adresse Stra\u00dfe:","LBL_ALT_ADDRESS_CITY":"2. Adresse Stadt:","LBL_ALT_ADDRESS_STATE":"2. Adresse Bundesland:","LBL_ALT_ADDRESS_POSTALCODE":"2. Adresse PLZ:","LBL_ALT_ADDRESS_COUNTRY":"2. Adresse Land:","LBL_ASSISTANT":"Assistent:","LBL_ASSISTANT_PHONE":"Telefonnr. Assistent:","LBL_LEAD_SOURCE":"Quelle:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_ACCOUNT_ID":"Firma ID","LBL_REPORTS_TO_ID":"Berichtet an ID","LBL_REPORTS_TO":"Berichtet an:","LBL_BIRTHDATE":"Geburtstag:","LBL_CAMPAIGN_ID":"Kampagnen ID","LBL_CAMPAIGN":"Kampagne:","LBL_VIP":"VIP","LBL_PRIMARY_ADDRESS":"Hauptadresse:","LBL_ALT_ADDRESS":"Weitere Adresse:","NEW":"Neuer Kontakt"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Verkaufschance Name:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_TYPE":"Typ:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_CAMPAIGN_ID":"campaign_id","LBL_CAMPAIGN":"Kampagne:","LBL_LEAD_SOURCE":"Quelle:","LBL_AMOUNT":"Verkaufschance Betrag:","LBL_AMOUNT_USDOLLAR":"Betrag:","LBL_CURRENCY":"W\u00e4hrung","LBL_CURRENCY_NAME":"W\u00e4hrungsname","LBL_CURRENCY_SYMBOL":"W\u00e4hrungssymbol","LBL_DATE_CLOSED":"Abschluss geplant:","LBL_NEXT_STEP":"N\u00e4chster Schritt:","LBL_SALES_STAGE":"Verkaufsphase:","LBL_PROBABILITY":"Wahrscheinlichkeit (%):","NEW":"Neue Verkaufschance"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_SALUTATION":"Anrede","LBL_FIRST_NAME":"Vorname:","LBL_LAST_NAME":"Nachname:","LBL_TITLE":"Titel:","LBL_DEPARTMENT":"Abteilung:","LBL_DO_NOT_CALL":"Nicht anrufen:","LBL_HOME_PHONE":"Telefon Privat:","LBL_MOBILE_PHONE":"Telefon Mobil:","LBL_OFFICE_PHONE":"Telefon B\u00fcro:","LBL_OTHER_PHONE":"Weiteres Telefon:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"E-Mail Adresse:","LBL_PRIMARY_ADDRESS_STREET":"Hauptadresse Stra\u00dfe","LBL_PRIMARY_ADDRESS_CITY":"Hauptadresse Ort","LBL_PRIMARY_ADDRESS_STATE":"Hauptadresse Bundesland","LBL_PRIMARY_ADDRESS_POSTALCODE":"Hauptadresse PLZ","LBL_PRIMARY_ADDRESS_COUNTRY":"Hauptadresse Land","LBL_ALT_ADDRESS_STREET":"2. Adresse Stra\u00dfe","LBL_ALT_ADDRESS_CITY":"2. Adresse Ort","LBL_ALT_ADDRESS_STATE":"2. Adresse Bundesland","LBL_ALT_ADDRESS_POSTALCODE":"2. Adresse Postleitzahl","LBL_ALT_ADDRESS_COUNTRY":"2. Adresse Land","LBL_ASSISTANT":"Assistent(in)","LBL_ASSISTANT_PHONE":"Telefon Assistent(in)","LBL_CONVERTED":"Umgewandelt","LBL_REFERED_BY":"Empfohlen von:","LBL_LEAD_SOURCE":"Quelle:","LBL_LEAD_SOURCE_DESCRIPTION":"Beschreibung Quelle:","LBL_STATUS":"Status:","LBL_STATUS_DESCRIPTION":"Beschreibung:","LBL_REPORTS_TO_ID":"Berichtet an ID","LBL_REPORTS_TO":"Berichtet an:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_ACCOUNT_DESCRIPTION":"Firma Beschreibung","LBL_CONTACT_ID":"Kontakt ID","LBL_ACCOUNT_ID":"Firma ID","LBL_OPPORTUNITY_ID":"Verkaufschance ID","LBL_OPPORTUNITY_NAME":"Verkaufschance Name:","LBL_OPPORTUNITY_AMOUNT":"Verkaufschance Betrag:","LBL_CAMPAIGN_ID":"Kampagnen ID","LBL_CAMPAIGN":"Kampagne:","LBL_BIRTHDATE":"Geburtstag:","LBL_PORTAL_NAME":"Portal Name:","LBL_PORTAL_APP":"Portal Anwendung","LBL_WEBSITE":"Webseite","LBL_PRIMARY_ADDRESS":"Hauptadresse:","LBL_ALT_ADDRESS":"Weitere Adresse:","NEW":"Neuer Interessent"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_DURATION_HOURS":"Stunden:","LBL_DURATION_MINUTES":"Minuten:","LBL_DATE":"Startdatum:","LBL_DATE_END":"Enddatum","LBL_PARENT_TYPE":"Eltern-Typ","LBL_LIST_RELATED_TO":"Geh\u00f6rt zu","LBL_STATUS":"Status:","LBL_DIRECTION":"Richtung:","LBL_LIST_RELATED_TO_ID":"Verkn\u00fcpft mit ID","LBL_REMINDER_TIME":"Erinnerungszeitpunkt","LBL_EMAIL_REMINDER_TIME":"E-Mail Erinnerungszeit","LBL_EMAIL_REMINDER_SENT":"E-Mail Erinnerung gesendet","LBL_OUTLOOK_ID":"Outlook ID","LBL_CONTACT_NAME":"Kontakt:","LBL_REPEAT_TYPE":"Wiederholungstyp","LBL_REPEAT_INTERVAL":"Wiederholungsintervall","LBL_REPEAT_DOW":"Wiederhole Wochentage","LBL_REPEAT_UNTIL":"Wiederhole bis","LBL_REPEAT_COUNT":"Wiederholungsz\u00e4hler","LBL_REPEAT_PARENT_ID":"Wiederhole Eltern ID","LBL_RECURRING_SOURCE":"Quelle Wiederholungen","LNK_NEW_CALL":"Neuer Anruf","NEW":"Neuer Anruf"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_LOCATION":"Ort:","LBL_PASSWORD":"Meeting Passwort","LBL_URL":"Meeting starten\/teilnehmen","LBL_HOST_URL":"Gastgeber URL","LBL_DISPLAYED_URL":"Anzeige URL","LBL_CREATOR":"Meeting Initiator","LBL_EXTERNALID":"Externe App ID","LBL_DURATION_HOURS":"Stunden:","LBL_DURATION_MINUTES":"Minuten:","LBL_DATE":"Startdatum:","LBL_DATE_END":"Enddatum","LBL_PARENT_TYPE":"Eltern-Typ","LBL_STATUS":"Status:","LBL_TYPE":"Meeting Typ","LBL_PARENT_ID":"Eltern ID","LBL_REMINDER_TIME":"Erinnerungszeitpunkt","LBL_EMAIL_REMINDER_TIME":"E-Mail Erinnerungszeit","LBL_EMAIL_REMINDER_SENT":"E-Mail Erinnerung gesendet","LBL_OUTLOOK_ID":"Outlook ID","LBL_SEQUENCE":"Meeting Aktualisierungsfrequenz","LBL_CONTACT_NAME":"Kontakt:","LBL_LIST_RELATED_TO":"Geh\u00f6rt zu","LBL_REPEAT_TYPE":"Wiederholungstyp","LBL_REPEAT_INTERVAL":"Wiederholungsintervall","LBL_REPEAT_DOW":"Wiederhole Wochentage","LBL_REPEAT_UNTIL":"Wiederhole bis","LBL_REPEAT_COUNT":"Wiederholungsz\u00e4hler","LBL_REPEAT_PARENT_ID":"Wiederhole Eltern ID","LBL_RECURRING_SOURCE":"Quelle Wiederholungen","NEW":"Neues Meeting"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_STATUS":"Status:","LBL_DATE_DUE_FLAG":"Kein F\u00e4lligkeitsdatum","LBL_DUE_DATE":"F\u00e4llig am:","LBL_DATE_START_FLAG":"Kein Startdatum","LBL_START_DATE":"Startdatum:","LBL_PARENT_NAME":"Eltern-Typ:","LBL_LIST_RELATED_TO":"Geh\u00f6rt zu","LBL_PARENT_ID":"Eltern ID:","LBL_CONTACT_ID":"Kontakt ID:","LBL_CONTACT_NAME":"Kontakt: ","LBL_CONTACT_PHONE":"Telefon Kontaktperson:","LBL_PRIORITY":"Priorit\u00e4t:","LNK_NEW_TASK":"Neue Aufgabe","NEW":"Neue Aufgabe"}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_NOTE_SUBJECT":"Betreff:","LBL_FILE_MIME_TYPE":"Mime-Typ","LBL_FILE_URL":"Datei URL","LBL_FILENAME":"Anlage:","LBL_PARENT_TYPE":"Eltern-Typ","LBL_PARENT_ID":"Eltern ID:","LBL_CONTACT_ID":"Kontakt ID:","LBL_PORTAL_FLAG":"Im Portal anzeigen?","LBL_EMBED_FLAG":"In E-Mail einf\u00fcgen?","LBL_DESCRIPTION":"Notiz","LBL_RELATED_TO":"Bezieht sich auf:","LBL_CONTACT_NAME":"Kontakt:","LBL_PHONE":"Telefon:","NEW":"Neue Notiz oder Anlage"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_NAME":"Name:","LBL_DESCRIPTION":"Beschreibung:","LBL_DATE_START":"Startdatum:","LBL_DATE_END":"Enddatum:","LBL_STATUS":"Status:","LBL_PRIORITY":"Priorit\u00e4t:","LBL_ASSIGNED_USER_NAME":"Zugewiesen an:","NEW":"Neues Projekt"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_PROJECT_ID":"Projekt ID:","LBL_PROJECT_TASK_ID":"Projektaufgaben ID:","LBL_NAME":"Name:","LBL_STATUS":"Status:","LBL_DESCRIPTION":"Beschreibung:","LBL_PREDECESSORS":"Vorg\u00e4nger:","LBL_DATE_START":"Startdatum:","LBL_TIME_START":"Beginn:","LBL_TIME_FINISH":"Endzeit:","LBL_DATE_FINISH":"Enddatum:","LBL_DURATION":"Dauer:","LBL_DURATION_UNIT":"Dauer-Einheit:","LBL_ACTUAL_DURATION":"Aktuelle Dauer:","LBL_PERCENT_COMPLETE":"% Erledigt:","LBL_DATE_DUE":"F\u00e4llig am:","LBL_TIME_DUE":"F\u00e4llig um:","LBL_PARENT_TASK_ID":"Aufgaben ID:","LBL_PRIORITY":"Priorit\u00e4t:","LBL_MILESTONE_FLAG":"Meilenstein:","LBL_ORDER_NUMBER":"Position:","LBL_TASK_NUMBER":"Aufgaben Nummer:","LBL_ESTIMATED_EFFORT":"Geplanter Aufwand (Std.):","LBL_ACTUAL_EFFORT":"Tats\u00e4chlicher Aufwand (Std.):","LBL_UTILIZATION":"Auslastung (%):","LBL_PARENT_NAME":"Projektname","LBL_ASSIGNED_USER_NAME":"Zugewiesen an","NEW":null}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_NUMBER":"Nummer:","LBL_TYPE":"Typ:","LBL_STATUS":"Status:","LBL_PRIORITY":"Priorit\u00e4t:","LBL_RESOLUTION":"L\u00f6sung:","LBL_WORK_LOG":"Arbeitsprotokoll","LBL_ACCOUNT_NAME":"Firmenname:","LBL_ACCOUNT_ID":"Firma ID","NEW":"Neuer Fall"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Benutzername","LBL_FIRST_NAME":"Vorname","LBL_LAST_NAME":"Nachname","LBL_DEPARTMENT":"Abteilung","LBL_MOBILE_PHONE":"Telefon Mobil","LBL_EMAIL":"E-Mail Adresse","NEW":"Neuer Benutzer"}'); \ No newline at end of file +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Name:","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_TYPE":"Typ:","LBL_INDUSTRY":"Branche:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Rechnungsadresse Stra\u00dfe:","LBL_BILLING_ADDRESS_CITY":"Rechnungsadresse Stadt:","LBL_BILLING_ADDRESS_STATE":"Rechnungsadresse Bundesland:","LBL_BILLING_ADDRESS_POSTALCODE":"Rechnungsadresse PLZ:","LBL_BILLING_ADDRESS_COUNTRY":"Rechnungsadresse Land:","LBL_PHONE_OFFICE":"Telefon B\u00fcro:","LBL_WEBSITE":"Webseite:","LBL_SHIPPING_ADDRESS_STREET":"Lieferadresse Stra\u00dfe:","LBL_SHIPPING_ADDRESS_CITY":"Lieferadresse Stadt:","LBL_SHIPPING_ADDRESS_STATE":"Lieferadresse Bundesland:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Lieferadresse PLZ:","LBL_SHIPPING_ADDRESS_COUNTRY":"Lieferadresse Land:","LBL_EMAIL":"E-Mail Adresse:","LBL_BILLING_ADDRESS":"Rechnungsadresse::","LBL_SHIPPING_ADDRESS":"Lieferadresse:","LBL_CONTACTS":"Kontakte","LBL_OPPORTUNITY":"Verkaufschance","LBL_CALLS":"Anrufe","LBL_MEETINGS":"Meetings","LBL_TASKS":"Aufgaben","LBL_LEADS":"Interessenten","LBL_NOTES":"Notizen","NEW":"Neue Firma"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_FIRST_NAME":"Vorname:","LBL_LAST_NAME":"Nachname:","LBL_TITLE":"Funktion:","LBL_DEPARTMENT":"Abteilung:","LBL_HOME_PHONE":"Privat:","LBL_MOBILE_PHONE":"Telefon Mobil:","LBL_OFFICE_PHONE":"Telefon B\u00fcro:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"E-Mail Adresse:","LBL_PRIMARY_ADDRESS_STREET":"Hauptadresse Stra\u00dfe:","LBL_PRIMARY_ADDRESS_CITY":"Hauptadresse Stadt:","LBL_PRIMARY_ADDRESS_STATE":"Hauptadresse Bundesland:","LBL_PRIMARY_ADDRESS_POSTALCODE":"Hauptadresse PLZ:","LBL_PRIMARY_ADDRESS_COUNTRY":"Hauptadresse Land:","LBL_ALT_ADDRESS_STREET":"2. Adresse Stra\u00dfe:","LBL_ALT_ADDRESS_CITY":"2. Adresse Stadt:","LBL_ALT_ADDRESS_STATE":"2. Adresse Bundesland:","LBL_ALT_ADDRESS_POSTALCODE":"2. Adresse PLZ:","LBL_ALT_ADDRESS_COUNTRY":"2. Adresse Land:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_PRIMARY_ADDRESS":"Hauptadresse:","LBL_ALT_ADDRESS":"Weitere Adresse:","LBL_CALLS":"Anrufe","LBL_MEETINGS":"Meetings","LBL_TASKS":"Aufgaben","LBL_OPPORTUNITIES":"Verkaufschancen","LBL_NOTES":"Notizen","NEW":"Neuer Kontakt"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Verkaufschance Name:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_AMOUNT":"Verkaufschance Betrag:","LBL_AMOUNT_USDOLLAR":"Betrag:","LBL_DATE_CLOSED":"Abschluss geplant:","LBL_SALES_STAGE":"Verkaufsphase:","LBL_CONTACTS":"Kontakte","LBL_CALLS":"Anrufe","LBL_MEETINGS":"Meetings","LBL_TASKS":"Aufgaben","LBL_LEADS":"Interessenten","LBL_NOTES":"Notizen","NEW":"Neue Verkaufschance"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_FIRST_NAME":"Vorname:","LBL_LAST_NAME":"Nachname:","LBL_TITLE":"Titel:","LBL_MOBILE_PHONE":"Telefon Mobil:","LBL_OFFICE_PHONE":"Telefon B\u00fcro:","LBL_EMAIL_ADDRESS":"E-Mail Adresse:","LBL_PRIMARY_ADDRESS_STREET":"Hauptadresse Stra\u00dfe","LBL_PRIMARY_ADDRESS_CITY":"Hauptadresse Ort","LBL_PRIMARY_ADDRESS_STATE":"Hauptadresse Bundesland","LBL_PRIMARY_ADDRESS_POSTALCODE":"Hauptadresse PLZ","LBL_PRIMARY_ADDRESS_COUNTRY":"Hauptadresse Land","LBL_ALT_ADDRESS_STREET":"2. Adresse Stra\u00dfe","LBL_ALT_ADDRESS_CITY":"2. Adresse Ort","LBL_ALT_ADDRESS_STATE":"2. Adresse Bundesland","LBL_ALT_ADDRESS_POSTALCODE":"2. Adresse Postleitzahl","LBL_ALT_ADDRESS_COUNTRY":"2. Adresse Land","LBL_STATUS":"Status:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_PRIMARY_ADDRESS":"Hauptadresse:","LBL_ALT_ADDRESS":"Weitere Adresse:","LBL_CALLS":"Anrufe","LBL_MEETINGS":"Meetings","LBL_TASKS":"Aufgaben","LBL_NOTES":"Notizen","NEW":"Neuer Interessent"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_DURATION_HOURS":"Stunden:","LBL_DURATION_MINUTES":"Minuten:","LBL_DATE":"Startdatum:","LBL_LIST_RELATED_TO":"Geh\u00f6rt zu","LBL_STATUS":"Status:","LBL_DIRECTION":"Richtung:","LNK_NEW_CALL":"Neuer Anruf","LBL_CONTACTS":"Kontakte","LBL_USERS":"Benutzer","LBL_LEADS":"Interessenten","LBL_NOTES":"Notizen","NEW":"Neuer Anruf"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_DURATION_HOURS":"Stunden:","LBL_DURATION_MINUTES":"Minuten:","LBL_DATE":"Startdatum:","LBL_STATUS":"Status:","LBL_LIST_RELATED_TO":"Geh\u00f6rt zu","LBL_CONTACTS":"Kontakte","LBL_USERS":"Benutzer","LBL_LEADS":"Interessenten","LBL_NOTES":"Notizen","NEW":"Neues Meeting"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an:","LBL_STATUS":"Status:","LBL_DUE_DATE":"F\u00e4llig am:","LBL_START_DATE":"Startdatum:","LBL_LIST_RELATED_TO":"Geh\u00f6rt zu","LBL_CONTACT_NAME":"Kontakt: ","LBL_PRIORITY":"Priorit\u00e4t:","LNK_NEW_TASK":"Neue Aufgabe","LBL_NOTES":"Notizen","NEW":"Neue Aufgabe"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Betreff:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Beschreibung:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_NUMBER":"Nummer:","LBL_TYPE":"Typ:","LBL_STATUS":"Status:","LBL_PRIORITY":"Priorit\u00e4t:","LBL_ACCOUNT_NAME":"Firmenname:","LBL_TASKS":"Aufgaben","LBL_NOTES":"Notizen","LBL_MEETINGS":"Meetings","LBL_CALLS":"Anrufe","LBL_CONTACTS":"Kontakte","LBL_PROJECTS":"Projekte","NEW":"Neuer Fall"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_NAME":"Name:","LBL_DESCRIPTION":"Beschreibung:","LBL_DATE_START":"Startdatum:","LBL_DATE_END":"Enddatum:","LBL_STATUS":"Status:","LBL_PRIORITY":"Priorit\u00e4t:","LBL_ASSIGNED_USER_NAME":"Zugewiesen an:","LBL_PROJECT_TASKS":"Projektaufgaben","LBL_NOTES":"Notizen","NEW":"Neues Projekt"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_NAME":"Name:","LBL_STATUS":"Status:","LBL_DESCRIPTION":"Beschreibung:","LBL_PERCENT_COMPLETE":"% Erledigt:","LBL_PRIORITY":"Priorit\u00e4t:","LBL_PARENT_NAME":"Projektname","LBL_ASSIGNED_USER_NAME":"Zugewiesen an","LBL_NOTES":"Notizen","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am","LBL_NOTE_SUBJECT":"Betreff:","LBL_FILENAME":"Anlage:","LBL_DESCRIPTION":"Notiz","NEW":"Neue Notiz oder Anlage"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Benutzername","LBL_FIRST_NAME":"Vorname","LBL_LAST_NAME":"Nachname","LBL_DEPARTMENT":"Abteilung","LBL_MOBILE_PHONE":"Telefon Mobil","LBL_EMAIL":"E-Mail Adresse","NEW":"Neuer Benutzer"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"Produkt Name","LBL_DATE_ENTERED":"Erstellt am:","LBL_DATE_MODIFIED":"Ge\u00e4ndert am:","LBL_ASSIGNED_TO_NAME":"Zugewiesen an","LBL_CATEGORY":"Kategorie Name","LBL_PRICE":"VK","NEW":null}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_en_us.js b/mobile/fielddefs/modules_en_us.js index 9af8cbdcb96..1c68e8b79a1 100755 --- a/mobile/fielddefs/modules_en_us.js +++ b/mobile/fielddefs/modules_en_us.js @@ -1 +1 @@ -var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"LBL_NAME":"Name:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_TYPE":"Type:","LBL_INDUSTRY":"Industry:","LBL_ANNUAL_REVENUE":"Annual Revenue:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Billing Street:","LBL_BILLING_ADDRESS_CITY":"Billing City:","LBL_BILLING_ADDRESS_STATE":"Billing State:","LBL_BILLING_ADDRESS_POSTALCODE":"Billing Postal Code:","LBL_BILLING_ADDRESS_COUNTRY":"Billing Country:","LBL_RATING":"Rating:","LBL_PHONE_OFFICE":"Office Phone:","LBL_PHONE_ALT":"Alternate Phone:","LBL_WEBSITE":"Website:","LBL_OWNERSHIP":"Ownership:","LBL_EMPLOYEES":"Employees:","LBL_TICKER_SYMBOL":"Ticker Symbol:","LBL_SHIPPING_ADDRESS_STREET":"Shipping Street:","LBL_SHIPPING_ADDRESS_CITY":"Shipping City:","LBL_SHIPPING_ADDRESS_STATE":"Shipping State:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Shipping Postal Code:","LBL_SHIPPING_ADDRESS_COUNTRY":"Shipping Country:","LBL_EMAIL":"Email Address:","LBL_PARENT_ACCOUNT_ID":"Parent Account ID","LBL_SIC_CODE":"SIC Code:","LBL_MEMBER_OF":"Member of:","LBL_CAMPAIGN_ID":"Campaign ID","LBL_CAMPAIGN":"Campaign:","LBL_BILLING_ADDRESS":"Billing Address:","LBL_SHIPPING_ADDRESS":"Shipping Address:","NEW":"Create Account"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_SALUTATION":"Salutation:","LBL_FIRST_NAME":"First Name:","LBL_LAST_NAME":"Last Name:","LBL_TITLE":"Title:","LBL_DEPARTMENT":"Department:","LBL_DO_NOT_CALL":"Do Not Call:","LBL_HOME_PHONE":"Home:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Office Phone:","LBL_OTHER_PHONE":"Other Phone:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Email Address:","LBL_PRIMARY_ADDRESS_STREET":"Primary Address Street:","LBL_PRIMARY_ADDRESS_CITY":"Primary Address City:","LBL_PRIMARY_ADDRESS_STATE":"Primary Address State:","LBL_PRIMARY_ADDRESS_POSTALCODE":"Primary Address Postal Code:","LBL_PRIMARY_ADDRESS_COUNTRY":"Primary Address Country:","LBL_ALT_ADDRESS_STREET":"Alternate Address Street:","LBL_ALT_ADDRESS_CITY":"Alternate Address City:","LBL_ALT_ADDRESS_STATE":"Alternate Address State:","LBL_ALT_ADDRESS_POSTALCODE":"Alternate Address Postal Code:","LBL_ALT_ADDRESS_COUNTRY":"Alternate Address Country:","LBL_ASSISTANT":"Assistant:","LBL_ASSISTANT_PHONE":"Assistant Phone:","LBL_LEAD_SOURCE":"Lead Source:","LBL_ACCOUNT_NAME":"Account Name:","LBL_ACCOUNT_ID":"Account ID:","LBL_REPORTS_TO_ID":"Reports to ID:","LBL_REPORTS_TO":"Reports To:","LBL_BIRTHDATE":"Birthdate:","LBL_CAMPAIGN_ID":"Campaign ID","LBL_CAMPAIGN":"Campaign:","LBL_VIP":"VIP","LBL_PRIMARY_ADDRESS":"Primary Address:","LBL_ALT_ADDRESS":"Other Address:","NEW":"Create Contact"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Opportunity Name:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_TYPE":"Type:","LBL_ACCOUNT_NAME":"Account Name:","LBL_CAMPAIGN_ID":"campaign_id","LBL_CAMPAIGN":"Campaign:","LBL_LEAD_SOURCE":"Lead Source:","LBL_AMOUNT":"Opportunity Amount:","LBL_AMOUNT_USDOLLAR":"Amount:","LBL_CURRENCY":"Currency:","LBL_CURRENCY_NAME":"Currency Name","LBL_CURRENCY_SYMBOL":"Currency Symbol","LBL_DATE_CLOSED":"Expected Close Date:","LBL_NEXT_STEP":"Next Step:","LBL_SALES_STAGE":"Sales Stage:","LBL_PROBABILITY":"Probability (%):","NEW":"Create Opportunity"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_SALUTATION":"Salutation","LBL_FIRST_NAME":"First Name:","LBL_LAST_NAME":"Last Name:","LBL_TITLE":"Title:","LBL_DEPARTMENT":"Department:","LBL_DO_NOT_CALL":"Do Not Call:","LBL_HOME_PHONE":"Home Phone:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Office Phone:","LBL_OTHER_PHONE":"Other Phone:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Email Address:","LBL_PRIMARY_ADDRESS_STREET":"Primary Address Street","LBL_PRIMARY_ADDRESS_CITY":"Primary Address City","LBL_PRIMARY_ADDRESS_STATE":"Primary Address State","LBL_PRIMARY_ADDRESS_POSTALCODE":"Primary Address Postalcode","LBL_PRIMARY_ADDRESS_COUNTRY":"Primary Address Country","LBL_ALT_ADDRESS_STREET":"Alt Address Street","LBL_ALT_ADDRESS_CITY":"Alt Address City","LBL_ALT_ADDRESS_STATE":"Alt Address State","LBL_ALT_ADDRESS_POSTALCODE":"Alt Address Postalcode","LBL_ALT_ADDRESS_COUNTRY":"Alt Address Country","LBL_ASSISTANT":"Assistant","LBL_ASSISTANT_PHONE":"Assistant Phone","LBL_CONVERTED":"Converted","LBL_REFERED_BY":"Referred By:","LBL_LEAD_SOURCE":"Lead Source:","LBL_LEAD_SOURCE_DESCRIPTION":"Lead Source Description:","LBL_STATUS":"Status:","LBL_STATUS_DESCRIPTION":"Status Description:","LBL_REPORTS_TO_ID":"Reports To ID","LBL_REPORTS_TO":"Reports To:","LBL_ACCOUNT_NAME":"Account Name:","LBL_ACCOUNT_DESCRIPTION":"Account Description","LBL_CONTACT_ID":"Contact ID","LBL_ACCOUNT_ID":"Account ID","LBL_OPPORTUNITY_ID":"Opportunity ID","LBL_OPPORTUNITY_NAME":"Opportunity Name:","LBL_OPPORTUNITY_AMOUNT":"Opportunity Amount:","LBL_CAMPAIGN_ID":"Campaign ID","LBL_CAMPAIGN":"Campaign:","LBL_BIRTHDATE":"Birthdate:","LBL_PORTAL_NAME":"Portal Name:","LBL_PORTAL_APP":"Portal Application","LBL_WEBSITE":"Website","LBL_PRIMARY_ADDRESS":"Primary Address:","LBL_ALT_ADDRESS":"Other Address:","NEW":"Create Lead"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DURATION_HOURS":"Duration Hours:","LBL_DURATION_MINUTES":"Duration Minutes:","LBL_DATE":"Start Date:","LBL_DATE_END":"End Date","LBL_PARENT_TYPE":"Parent Type","LBL_LIST_RELATED_TO":"Related to","LBL_STATUS":"Status:","LBL_DIRECTION":"Direction:","LBL_LIST_RELATED_TO_ID":"Related to ID","LBL_REMINDER_TIME":"Reminder Time","LBL_EMAIL_REMINDER_TIME":"Email Reminder Time","LBL_EMAIL_REMINDER_SENT":"Email reminder sent","LBL_OUTLOOK_ID":"Outlook ID","LBL_CONTACT_NAME":"Contact:","LBL_REPEAT_TYPE":"Repeat Type","LBL_REPEAT_INTERVAL":"Repeat Interval","LBL_REPEAT_DOW":"Repeat Dow","LBL_REPEAT_UNTIL":"Repeat Until","LBL_REPEAT_COUNT":"Repeat Count","LBL_REPEAT_PARENT_ID":"Repeat Parent ID","LBL_RECURRING_SOURCE":"Recurring Source","LNK_NEW_CALL":"Log Call","NEW":"Log Call"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_LOCATION":"Location:","LBL_PASSWORD":"Meeting Password","LBL_URL":"Start\/Join Meeting","LBL_HOST_URL":"Host URL","LBL_DISPLAYED_URL":"Display URL","LBL_CREATOR":"Meeting Creator","LBL_EXTERNALID":"External App ID","LBL_DURATION_HOURS":"Duration Hours:","LBL_DURATION_MINUTES":"Duration Minutes:","LBL_DATE":"Start Date:","LBL_DATE_END":"End Date","LBL_PARENT_TYPE":"Parent Type","LBL_STATUS":"Status:","LBL_TYPE":"Meeting Type","LBL_PARENT_ID":"Parent ID","LBL_REMINDER_TIME":"Reminder Time","LBL_EMAIL_REMINDER_TIME":"Email Reminder Time","LBL_EMAIL_REMINDER_SENT":"Email reminder sent","LBL_OUTLOOK_ID":"Outlook ID","LBL_SEQUENCE":"Meeting update sequence","LBL_CONTACT_NAME":"Contact:","LBL_LIST_RELATED_TO":"Related to","LBL_REPEAT_TYPE":"Repeat Type","LBL_REPEAT_INTERVAL":"Repeat Interval","LBL_REPEAT_DOW":"Repeat Dow","LBL_REPEAT_UNTIL":"Repeat Until","LBL_REPEAT_COUNT":"Repeat Count","LBL_REPEAT_PARENT_ID":"Repeat Parent ID","LBL_RECURRING_SOURCE":"Recurring Source","NEW":"Schedule Meeting"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_STATUS":"Status:","LBL_DATE_DUE_FLAG":"No Due Date","LBL_DUE_DATE":"Due Date:","LBL_DATE_START_FLAG":"No Start Date","LBL_START_DATE":"Start Date:","LBL_PARENT_NAME":"Parent Type:","LBL_LIST_RELATED_TO":"Related to","LBL_PARENT_ID":"Parent ID:","LBL_CONTACT_ID":"Contact ID:","LBL_CONTACT_NAME":"Contact Name ","LBL_CONTACT_PHONE":"Contact Phone:","LBL_PRIORITY":"Priority:","LNK_NEW_TASK":"Create Task","NEW":"Create Task"}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_NOTE_SUBJECT":"Subject:","LBL_FILE_MIME_TYPE":"Mime Type","LBL_FILE_URL":"File URL","LBL_FILENAME":"Attachment:","LBL_PARENT_TYPE":"Parent Type","LBL_PARENT_ID":"Parent ID:","LBL_CONTACT_ID":"Contact ID:","LBL_PORTAL_FLAG":"Display in Portal?","LBL_EMBED_FLAG":"Embed in email?","LBL_DESCRIPTION":"Note","LBL_RELATED_TO":"Related To:","LBL_CONTACT_NAME":"Contact:","LBL_PHONE":"Phone:","NEW":"Create Note or Attachment"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_NAME":"Name:","LBL_DESCRIPTION":"Description:","LBL_DATE_START":"Start Date:","LBL_DATE_END":"End Date:","LBL_STATUS":"Status:","LBL_PRIORITY":"Priority:","LBL_ASSIGNED_USER_NAME":"Assigned to:","NEW":"Create Project"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_PROJECT_ID":"Project Id:","LBL_PROJECT_TASK_ID":"Project Task Id:","LBL_NAME":"Name:","LBL_STATUS":"Status:","LBL_DESCRIPTION":"Description:","LBL_PREDECESSORS":"Predecessors:","LBL_DATE_START":"Start Date:","LBL_TIME_START":"Start Time:","LBL_TIME_FINISH":"Finish Time:","LBL_DATE_FINISH":"Finish Date:","LBL_DURATION":"Duration:","LBL_DURATION_UNIT":"Duration Unit:","LBL_ACTUAL_DURATION":"Actual Duration:","LBL_PERCENT_COMPLETE":"% Complete:","LBL_DATE_DUE":"Due Date:","LBL_TIME_DUE":"Due Time:","LBL_PARENT_TASK_ID":"Parent Task Id:","LBL_PRIORITY":"Priority:","LBL_MILESTONE_FLAG":"Milestone:","LBL_ORDER_NUMBER":"Order:","LBL_TASK_NUMBER":"Task Number:","LBL_ESTIMATED_EFFORT":"Estimated Effort (hrs):","LBL_ACTUAL_EFFORT":"Actual Effort (hrs):","LBL_UTILIZATION":"Utilization (%):","LBL_PARENT_NAME":"Project Name","LBL_ASSIGNED_USER_NAME":"Assigned To","NEW":null}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_NUMBER":"Number:","LBL_TYPE":"Type","LBL_STATUS":"Status:","LBL_PRIORITY":"Priority:","LBL_RESOLUTION":"Resolution:","LBL_WORK_LOG":"Work Log","LBL_ACCOUNT_NAME":"Account Name:","LBL_ACCOUNT_ID":"Account ID","NEW":"Create Case"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"User Name","LBL_FIRST_NAME":"First Name","LBL_LAST_NAME":"Last Name","LBL_DEPARTMENT":"Department","LBL_MOBILE_PHONE":"Mobile","LBL_EMAIL":"Email Address","NEW":"Create New User"}'); \ No newline at end of file +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Name:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_TYPE":"Type:","LBL_INDUSTRY":"Industry:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Billing Street:","LBL_BILLING_ADDRESS_CITY":"Billing City:","LBL_BILLING_ADDRESS_STATE":"Billing State:","LBL_BILLING_ADDRESS_POSTALCODE":"Billing Postal Code:","LBL_BILLING_ADDRESS_COUNTRY":"Billing Country:","LBL_PHONE_OFFICE":"Office Phone:","LBL_WEBSITE":"Website:","LBL_SHIPPING_ADDRESS_STREET":"Shipping Street:","LBL_SHIPPING_ADDRESS_CITY":"Shipping City:","LBL_SHIPPING_ADDRESS_STATE":"Shipping State:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Shipping Postal Code:","LBL_SHIPPING_ADDRESS_COUNTRY":"Shipping Country:","LBL_EMAIL":"Email Address:","LBL_BILLING_ADDRESS":"Billing Address:","LBL_SHIPPING_ADDRESS":"Shipping Address:","LBL_CONTACTS":"Contacts","LBL_OPPORTUNITY":"Opportunity","LBL_CALLS":"Calls","LBL_MEETINGS":"Meetings","LBL_TASKS":"Tasks","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Create Account"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_FIRST_NAME":"First Name:","LBL_LAST_NAME":"Last Name:","LBL_TITLE":"Title:","LBL_DEPARTMENT":"Department:","LBL_HOME_PHONE":"Home:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Office Phone:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Email Address:","LBL_PRIMARY_ADDRESS_STREET":"Primary Address Street:","LBL_PRIMARY_ADDRESS_CITY":"Primary Address City:","LBL_PRIMARY_ADDRESS_STATE":"Primary Address State:","LBL_PRIMARY_ADDRESS_POSTALCODE":"Primary Address Postal Code:","LBL_PRIMARY_ADDRESS_COUNTRY":"Primary Address Country:","LBL_ALT_ADDRESS_STREET":"Alternate Address Street:","LBL_ALT_ADDRESS_CITY":"Alternate Address City:","LBL_ALT_ADDRESS_STATE":"Alternate Address State:","LBL_ALT_ADDRESS_POSTALCODE":"Alternate Address Postal Code:","LBL_ALT_ADDRESS_COUNTRY":"Alternate Address Country:","LBL_ACCOUNT_NAME":"Account Name:","LBL_PRIMARY_ADDRESS":"Primary Address:","LBL_ALT_ADDRESS":"Other Address:","LBL_CALLS":"Calls","LBL_MEETINGS":"Meetings","LBL_TASKS":"Tasks","LBL_OPPORTUNITIES":"Opportunities","LBL_NOTES":"Notes","NEW":"Create Contact"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Opportunity Name:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_ACCOUNT_NAME":"Account Name:","LBL_AMOUNT":"Opportunity Amount:","LBL_AMOUNT_USDOLLAR":"Amount:","LBL_DATE_CLOSED":"Expected Close Date:","LBL_SALES_STAGE":"Sales Stage:","LBL_CONTACTS":"Contacts","LBL_CALLS":"Calls","LBL_MEETINGS":"Meetings","LBL_TASKS":"Tasks","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Create Opportunity"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_FIRST_NAME":"First Name:","LBL_LAST_NAME":"Last Name:","LBL_TITLE":"Title:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Office Phone:","LBL_EMAIL_ADDRESS":"Email Address:","LBL_PRIMARY_ADDRESS_STREET":"Primary Address Street","LBL_PRIMARY_ADDRESS_CITY":"Primary Address City","LBL_PRIMARY_ADDRESS_STATE":"Primary Address State","LBL_PRIMARY_ADDRESS_POSTALCODE":"Primary Address Postalcode","LBL_PRIMARY_ADDRESS_COUNTRY":"Primary Address Country","LBL_ALT_ADDRESS_STREET":"Alt Address Street","LBL_ALT_ADDRESS_CITY":"Alt Address City","LBL_ALT_ADDRESS_STATE":"Alt Address State","LBL_ALT_ADDRESS_POSTALCODE":"Alt Address Postalcode","LBL_ALT_ADDRESS_COUNTRY":"Alt Address Country","LBL_STATUS":"Status:","LBL_ACCOUNT_NAME":"Account Name:","LBL_PRIMARY_ADDRESS":"Primary Address:","LBL_ALT_ADDRESS":"Other Address:","LBL_CALLS":"Calls","LBL_MEETINGS":"Meetings","LBL_TASKS":"Tasks","LBL_NOTES":"Notes","NEW":"Create Lead"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DURATION_HOURS":"Duration Hours:","LBL_DURATION_MINUTES":"Duration Minutes:","LBL_DATE":"Start Date:","LBL_LIST_RELATED_TO":"Related to","LBL_STATUS":"Status:","LBL_DIRECTION":"Direction:","LNK_NEW_CALL":"Log Call","LBL_CONTACTS":"Contacts","LBL_USERS":"Users","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Log Call"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_DURATION_HOURS":"Duration Hours:","LBL_DURATION_MINUTES":"Duration Minutes:","LBL_DATE":"Start Date:","LBL_STATUS":"Status:","LBL_LIST_RELATED_TO":"Related to","LBL_CONTACTS":"Contacts","LBL_USERS":"Users","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Schedule Meeting"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to:","LBL_STATUS":"Status:","LBL_DUE_DATE":"Due Date:","LBL_START_DATE":"Start Date:","LBL_LIST_RELATED_TO":"Related to","LBL_CONTACT_NAME":"Contact Name ","LBL_PRIORITY":"Priority:","LNK_NEW_TASK":"Create Task","LBL_NOTES":"Notes","NEW":"Create Task"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Subject:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_NUMBER":"Number:","LBL_TYPE":"Type","LBL_STATUS":"Status:","LBL_PRIORITY":"Priority:","LBL_ACCOUNT_NAME":"Account Name:","LBL_TASKS":"Tasks","LBL_NOTES":"Notes","LBL_MEETINGS":"Meetings","LBL_CALLS":"Calls","LBL_CONTACTS":"Contacts","LBL_PROJECTS":"Projects","NEW":"Create Case"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_NAME":"Name:","LBL_DESCRIPTION":"Description:","LBL_DATE_START":"Start Date:","LBL_DATE_END":"End Date:","LBL_STATUS":"Status:","LBL_PRIORITY":"Priority:","LBL_ASSIGNED_USER_NAME":"Assigned to:","LBL_PROJECT_TASKS":"Project Tasks","LBL_NOTES":"Notes","NEW":"Create Project"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_NAME":"Name:","LBL_STATUS":"Status:","LBL_DESCRIPTION":"Description:","LBL_PERCENT_COMPLETE":"% Complete:","LBL_PRIORITY":"Priority:","LBL_PARENT_NAME":"Project Name","LBL_ASSIGNED_USER_NAME":"Assigned To","LBL_NOTES":"Notes","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_NOTE_SUBJECT":"Subject:","LBL_FILENAME":"Attachment:","LBL_DESCRIPTION":"Note","NEW":"Create Note or Attachment"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"User Name","LBL_FIRST_NAME":"First Name","LBL_LAST_NAME":"Last Name","LBL_DEPARTMENT":"Department","LBL_MOBILE_PHONE":"Mobile","LBL_EMAIL":"Email Address","NEW":"Create New User"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"Product Name","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_CATEGORY":"Category","LBL_PRICE":"Price","NEW":null}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_es_es.js b/mobile/fielddefs/modules_es_es.js index a4be9ea26e6..4b47476b79f 100755 --- a/mobile/fielddefs/modules_es_es.js +++ b/mobile/fielddefs/modules_es_es.js @@ -1,10 +1 @@ -var sugar_mod_strings={};sugar_mod_strings['Accounts'] = '{"LBL_ID":"ID","LBL_NAME":"Nombre:","LBL_DATE_ENTERED":"Creado:","LBL_DATE_MODIFIED":"Modificado:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_TYPE":"Tipo:","LBL_INDUSTRY":"Industria:","LBL_ANNUAL_REVENUE":"Ingresos anuales:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Calle de facturaci\u00f3n:","LBL_BILLING_ADDRESS_CITY":"Ciudad de facturaci\u00f3n:","LBL_BILLING_ADDRESS_STATE":"Estado\/provincia de facturaci\u00f3n:","LBL_BILLING_ADDRESS_POSTALCODE":"CP de facturaci\u00f3n:","LBL_BILLING_ADDRESS_COUNTRY":"Pa\u00eds de facturaci\u00f3n:","LBL_RATING":"Rating:","LBL_PHONE_OFFICE":"Tel\u00e9fono oficina:","LBL_PHONE_ALT":"Tel\u00e9fono alternativo:","LBL_WEBSITE":"Web:","LBL_OWNERSHIP":"Propietario:","LBL_EMPLOYEES":"Empleados:","LBL_TICKER_SYMBOL":"S\u00edmbolo Ticker:","LBL_SHIPPING_ADDRESS_STREET":"Calle de env\u00edo:","LBL_SHIPPING_ADDRESS_CITY":"Ciudad de env\u00edo:","LBL_SHIPPING_ADDRESS_STATE":"Estado\/provincia de env\u00edo:","LBL_SHIPPING_ADDRESS_POSTALCODE":"CP de env\u00edo:","LBL_SHIPPING_ADDRESS_COUNTRY":"Pa\u00eds de env\u00edo:","LBL_EMAIL":"Correo electr\u00f3nico:","LBL_PARENT_ACCOUNT_ID":"ID Cuenta Padre","LBL_SIC_CODE":"C\u00f3digo CNAE\/SIC:","LBL_MEMBER_OF":"Miembro de:","LBL_CAMPAIGN_ID":"ID Campa\u00f1a","LBL_CAMPAIGN":"Campa\u00f1a:","LBL_BILLING_ADDRESS":"Direcci\u00f3n de facturaci\u00f3n:","LBL_SHIPPING_ADDRESS":"Direcci\u00f3n de env\u00edo:"}'; -sugar_mod_strings['Accounts'] = jQuery.parseJSON(sugar_mod_strings['Accounts'].replace(/@@/g,"'"));sugar_mod_strings['Contacts'] = '{"LBL_ID":"ID:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"Fecha de Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_SALUTATION":"Saludo","LBL_FIRST_NAME":"Nombre:","LBL_LAST_NAME":"Apellidos:","LBL_TITLE":"Cargo:","LBL_DEPARTMENT":"Departamento:","LBL_DO_NOT_CALL":"No llamar:","LBL_HOME_PHONE":"Tel. casa:","LBL_MOBILE_PHONE":"M\u00f3vil:","LBL_OFFICE_PHONE":"Tel. Oficina:","LBL_OTHER_PHONE":"Tel. Alternativo:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Correo electr\u00f3nico:","LBL_PRIMARY_ADDRESS_STREET":"Calle de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_CITY":"Ciudad de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_POSTALCODE":"CP de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n principal:","LBL_ALT_ADDRESS_STREET":"Calle de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_CITY":"Ciudad de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_POSTALCODE":"CP de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n alternativa:","LBL_ASSISTANT":"Asistente:","LBL_ASSISTANT_PHONE":"Tel. asistente:","LBL_LEAD_SOURCE":"Toma de contacto:","LBL_ACCOUNT_NAME":"Cuenta:","LBL_ACCOUNT_ID":"ID de cuenta","LBL_REPORTS_TO_ID":"Informa a ID:","LBL_REPORTS_TO":"Informa a:","LBL_BIRTHDATE":"Cumplea\u00f1os:","LBL_CAMPAIGN_ID":"ID Campa\u00f1a","LBL_CAMPAIGN":"Campa\u00f1a:","LBL_VIP":"VIP","LBL_PRIMARY_ADDRESS":"Direcci\u00f3n principal:","LBL_ALT_ADDRESS":"Otra direcci\u00f3n:","LBL_NEW_FORM_TITLE":"Nuevo Contacto"}'; -sugar_mod_strings['Contacts'] = jQuery.parseJSON(sugar_mod_strings['Contacts'].replace(/@@/g,"'"));sugar_mod_strings['Opportunities'] = '{"LBL_ID":"ID","LBL_OPPORTUNITY_NAME":"Nombre Oportunidad:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_TYPE":"Tipo:","LBL_ACCOUNT_NAME":"Cuenta:","LBL_CAMPAIGN_ID":"campa\u00f1a_id","LBL_CAMPAIGN":"Campa\u00f1a:","LBL_LEAD_SOURCE":"Toma de contacto:","LBL_AMOUNT":"Cantidad de la Oportunidad:","LBL_AMOUNT_USDOLLAR":"Cantidad:","LBL_CURRENCY":"Moneda:","LBL_CURRENCY_NAME":"Nombre de Moneda","LBL_CURRENCY_SYMBOL":"S\u00edmbolo de Moneda","LBL_DATE_CLOSED":"Fecha de cierre:","LBL_NEXT_STEP":"Pr\u00f3ximo paso:","LBL_SALES_STAGE":"Etapa de ventas:","LBL_PROBABILITY":"Probabilidad (%):","LBL_NEW_FORM_TITLE":"Nueva Oportunidad"}'; -sugar_mod_strings['Opportunities'] = jQuery.parseJSON(sugar_mod_strings['Opportunities'].replace(/@@/g,"'"));sugar_mod_strings['Leads'] = '{"LBL_ID":"ID","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_SALUTATION":"Saludo","LBL_FIRST_NAME":"Nombre:","LBL_LAST_NAME":"Apellidos:","LBL_TITLE":"Cargo:","LBL_DEPARTMENT":"Departamento:","LBL_DO_NOT_CALL":"No llamar:","LBL_HOME_PHONE":"Tel. casa:","LBL_MOBILE_PHONE":"M\u00f3vil:","LBL_OFFICE_PHONE":"Tel. Oficina:","LBL_OTHER_PHONE":"Tel. Alternativo:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Correo electr\u00f3nico:","LBL_PRIMARY_ADDRESS_STREET":"Calle de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_CITY":"Ciudad de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_POSTALCODE":"CP de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n principal","LBL_ALT_ADDRESS_STREET":"Calle de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_CITY":"Ciudad de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_POSTALCODE":"CP de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n alternativa","LBL_ASSISTANT":"Asistente","LBL_ASSISTANT_PHONE":"Tel. Asistente","LBL_CONVERTED":"Convertido","LBL_REFERED_BY":"Referido por:","LBL_LEAD_SOURCE":"Toma de contacto:","LBL_LEAD_SOURCE_DESCRIPTION":"Descripci\u00f3n de toma de contacto:","LBL_STATUS":"Estado:","LBL_STATUS_DESCRIPTION":"Descripci\u00f3n estado:","LBL_REPORTS_TO_ID":"Informa a ID","LBL_REPORTS_TO":"Informa a:","LBL_ACCOUNT_NAME":"Nombre de cuenta:","LBL_ACCOUNT_DESCRIPTION":"Descripci\u00f3n de la Cuenta","LBL_CONTACT_ID":"ID Contacto","LBL_ACCOUNT_ID":"ID Cuenta","LBL_OPPORTUNITY_ID":"ID Oportunidad","LBL_OPPORTUNITY_NAME":"Nombre de la Oportunidad:","LBL_OPPORTUNITY_AMOUNT":"Cantidad de la Oportunidad:","LBL_CAMPAIGN_ID":"Id de Campa\u00f1a","LBL_CAMPAIGN":"Campa\u00f1a:","LBL_BIRTHDATE":"Cumplea\u00f1os:","LBL_PORTAL_NAME":"Nombre del Portal:","LBL_PORTAL_APP":"Aplicaci\u00f3n del Portal","LBL_WEBSITE":"Sitio Web","LBL_PRIMARY_ADDRESS":"Direcci\u00f3n principal:","LBL_ALT_ADDRESS":"Otra direcci\u00f3n:","LBL_NEW_FORM_TITLE":"Nuevo Cliente Potencial"}'; -sugar_mod_strings['Leads'] = jQuery.parseJSON(sugar_mod_strings['Leads'].replace(/@@/g,"'"));sugar_mod_strings['Calls'] = '{"LBL_ID":"ID","LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_DURATION_HOURS":"Horas Duraci\u00f3n:","LBL_DURATION_MINUTES":"Minutos Duraci\u00f3n:","LBL_DATE":"Fecha Inicio:","LBL_DATE_END":"Fecha de Fin","LBL_PARENT_TYPE":"Tipo de Padre","LBL_LIST_RELATED_TO":"Relacionado con","LBL_STATUS":"Estado:","LBL_DIRECTION":"Direcci\u00f3n:","LBL_LIST_RELATED_TO_ID":"Relacionado con ID","LBL_REMINDER_TIME":"Hora Aviso","LBL_EMAIL_REMINDER_TIME":"Tiempo de recordatorio por correo electr\u00f3nico","LBL_EMAIL_REMINDER_SENT":"Recordatorio por correo electr\u00f3nico enviado","LBL_OUTLOOK_ID":"ID Outlook","LBL_CONTACT_NAME":"Contacto:","LBL_REPEAT_TYPE":"Repetici\u00f3n","LBL_REPEAT_INTERVAL":"Intervalo de repetici\u00f3n","LBL_REPEAT_DOW":"Repita el Dow","LBL_REPEAT_UNTIL":"Repetir Hasta","LBL_REPEAT_COUNT":"N\u00famero de repeticiones","LBL_REPEAT_PARENT_ID":"Repita el ID principal","LBL_RECURRING_SOURCE":"Fuente peri\u00f3dica","LNK_NEW_CALL":"Registrar Llamada"}'; -sugar_mod_strings['Calls'] = jQuery.parseJSON(sugar_mod_strings['Calls'].replace(/@@/g,"'"));sugar_mod_strings['Meetings'] = '{"LBL_ID":"ID","LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_LOCATION":"Lugar:","LBL_PASSWORD":"Contrase\u00f1a de la reuni\u00f3n","LBL_URL":"Iniciar\/Unirse a la reuni\u00f3n","LBL_HOST_URL":"Host URL","LBL_DISPLAYED_URL":"Ver URL","LBL_CREATOR":"Creador de reuniones","LBL_EXTERNALID":"ID App Externa","LBL_DURATION_HOURS":"Horas Duraci\u00f3n:","LBL_DURATION_MINUTES":"Minutos Duraci\u00f3n:","LBL_DATE":"Fecha Inicio:","LBL_DATE_END":"Fecha Fin","LBL_PARENT_TYPE":"Tipo de Padre","LBL_STATUS":"Estado:","LBL_TYPE":"Tipo de reuni\u00f3n","LBL_PARENT_ID":"ID Padre","LBL_REMINDER_TIME":"Hora Aviso","LBL_EMAIL_REMINDER_TIME":"Tiempo de recordatorio por correo electr\u00f3nico","LBL_EMAIL_REMINDER_SENT":"Recordatorio por correo electr\u00f3nico enviado","LBL_OUTLOOK_ID":"ID Outlook","LBL_SEQUENCE":"Secuencia de actualizaci\u00f3n de la reuni\u00f3n","LBL_CONTACT_NAME":"Nombre Contacto:","LBL_LIST_RELATED_TO":"Relacionado con","LBL_REPEAT_TYPE":"Repetici\u00f3n","LBL_REPEAT_INTERVAL":"Intervalo de repetici\u00f3n","LBL_REPEAT_DOW":"Repita el Dow","LBL_REPEAT_UNTIL":"Repetir hasta","LBL_REPEAT_COUNT":"N\u00famero de repeticiones","LBL_REPEAT_PARENT_ID":"Repita el ID principal","LBL_RECURRING_SOURCE":"Fuente peri\u00f3dica","LNK_NEW_MEETING":"Programar Reuni\u00f3n"}'; -sugar_mod_strings['Meetings'] = jQuery.parseJSON(sugar_mod_strings['Meetings'].replace(/@@/g,"'"));sugar_mod_strings['Tasks'] = '{"LBL_ID":"ID","LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_STATUS":"Estado:","LBL_DATE_DUE_FLAG":"Sin fecha de vencimiento","LBL_DUE_DATE":"Fecha vencimiento:","LBL_DATE_START_FLAG":"Sin fecha de inicio","LBL_START_DATE":"Fecha de inicio:","LBL_PARENT_NAME":"Tipo de Padre:","LBL_LIST_RELATED_TO":"Relacionado con","LBL_PARENT_ID":"ID de Padre:","LBL_CONTACT_ID":"ID de Contacto:","LBL_CONTACT_NAME":"Contacto","LBL_CONTACT_PHONE":"Tel\u00e9fono de Contacto:","LBL_PRIORITY":"Prioridad:","LNK_NEW_TASK":"Nueva Tarea"}'; -sugar_mod_strings['Tasks'] = jQuery.parseJSON(sugar_mod_strings['Tasks'].replace(/@@/g,"'"));sugar_mod_strings['Notes'] = '{"LBL_ASSIGNED_TO_NAME":"Usuario","LBL_ID":"ID","LBL_DATE_ENTERED":"Fecha de creaci\u00f3n","LBL_DATE_MODIFIED":"Fecha Modificaci\u00f3n","LBL_NOTE_SUBJECT":"Asunto:","LBL_FILE_MIME_TYPE":"Tipo MIME","LBL_FILE_URL":"URL de Archivo","LBL_FILENAME":"Adjunto:","LBL_PARENT_TYPE":"Tipo de Padre","LBL_PARENT_ID":"ID Padre:","LBL_CONTACT_ID":"ID Contacto:","LBL_PORTAL_FLAG":"\u00bfMostrar en el Portal?","LBL_EMBED_FLAG":"\u00bfIncluir en Correo?","LBL_DESCRIPTION":"Nota","LBL_RELATED_TO":"Relacionado con:","LBL_CONTACT_NAME":"Contacto:","LBL_PHONE":"Tel\u00e9fono:"}'; -sugar_mod_strings['Notes'] = jQuery.parseJSON(sugar_mod_strings['Notes'].replace(/@@/g,"'"));sugar_mod_strings['Users'] = '{"LBL_ID":"ID","LBL_USER_NAME":"Identificador","LBL_USER_HASH":"Contrase\u00f1a","LBL_SYSTEM_GENERATED_PASSWORD":"Contrase\u00f1a Generada por el Sistema","LBL_PSW_MODIFIED":"contrase\u00f1a cambiada por \u00faltima vez","LBL_AUTHENTICATE_ID":"Id Autenticaci\u00f3n","LBL_SUGAR_LOGIN":"Es Usuario de Sugar","LBL_FIRST_NAME":"Nombre","LBL_LAST_NAME":"Apellidos","LBL_IS_ADMIN":"Es Administrador","LBL_EXT_AUTHENTICATE":"Autenticaci\u00f3n Externa","LBL_RECEIVE_NOTIFICATIONS":"Notificaci\u00f3n de asignaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"Fecha de Modificaci\u00f3n","LBL_TITLE":"T\u00edtulo","LBL_DEPARTMENT":"Departamento","LBL_HOME_PHONE":"Tel\u00e9fono de casa","LBL_MOBILE_PHONE":"M\u00f3vil","LBL_WORK_PHONE":"Tel\u00e9fono de trabajo","LBL_OTHER_PHONE":"Otro tel\u00e9fono","LBL_FAX_PHONE":"Fax","LBL_STATUS":"Estado","LBL_ADDRESS_STREET":"Calle de direcci\u00f3n","LBL_ADDRESS_CITY":"Ciudad de direcci\u00f3n","LBL_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n","LBL_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n","LBL_ADDRESS_POSTALCODE":"CP de direcci\u00f3n","LBL_PORTAL_ONLY_USER":"Usuario del API de Portal","LBL_SHOW_ON_EMPLOYEES":"Visualizaci\u00f3n del Registro de Empleados","LBL_EMPLOYEE_STATUS":"Estado del Empleado","LBL_MESSENGER_ID":"Cuenta de Mensajer\u00eda Instant\u00e1nea","LBL_MESSENGER_TYPE":"Tipo de Mensajer\u00eda Instant\u00e1nea","LBL_REPORTS_TO_ID":"Informa a ID:","LBL_REPORTS_TO_NAME":"Informa a","LBL_EMAIL":"Correo electr\u00f3nico:","LBL_GROUP_USER":"Usuario del Grupo"}'; -sugar_mod_strings['Users'] = jQuery.parseJSON(sugar_mod_strings['Users'].replace(/@@/g,"'"));sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Fecha Creaci\u00f3n:","LBL_DATE_MODIFIED":"Fecha Modificaci\u00f3n:","LBL_NAME":"Nombre:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_DATE_START":"Fecha Inicio:","LBL_DATE_END":"Fecha Fin:","LBL_STATUS":"Estado:","LBL_PRIORITY":"Prioridad:","LBL_ASSIGNED_USER_NAME":"Asignado a:"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Fecha Creaci\u00f3n:","LBL_DATE_MODIFIED":"Fecha Modificaci\u00f3n:","LBL_PROJECT_ID":"Id Proyecto","LBL_PROJECT_TASK_ID":"Id Tarea de Proyecto:","LBL_NAME":"Nombre:","LBL_STATUS":"Estado:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_PREDECESSORS":"Predecesores:","LBL_DATE_START":"Fecha Inicio:","LBL_TIME_START":"Hora Inicio:","LBL_TIME_FINISH":"Hora Fin:","LBL_DATE_FINISH":"Fecha Fin:","LBL_DURATION":"Duraci\u00f3n:","LBL_DURATION_UNIT":"Unidad de Duraci\u00f3n:","LBL_ACTUAL_DURATION":"Duraci\u00f3n Real:","LBL_PERCENT_COMPLETE":"% Completado:","LBL_DATE_DUE":"Fecha Vencimiento:","LBL_TIME_DUE":"Hora Vencimiento:","LBL_PARENT_TASK_ID":"Id Tarea Padre:","LBL_PRIORITY":"Prioridad:","LBL_MILESTONE_FLAG":"Hito:","LBL_ORDER_NUMBER":"Orden:","LBL_TASK_NUMBER":"N\u00famero de Tarea:","LBL_ESTIMATED_EFFORT":"Trabajo Estimado (h):","LBL_ACTUAL_EFFORT":"Trabajo Real (h):","LBL_UTILIZATION":"Ocupaci\u00f3n (%):","LBL_PARENT_NAME":"Nombre de Proyecto","LBL_ASSIGNED_USER_NAME":"Asignado a","LBL_ESTIMATED_DURATION":"Estimated Duration"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n:","LBL_DATE_MODIFIED":"Fecha de Modificaci\u00f3n:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_NUMBER":"N\u00famero:","LBL_TYPE":"Tipo","LBL_STATUS":"Estado:","LBL_PRIORITY":"Prioridad:","LBL_RESOLUTION":"Resoluci\u00f3n:","LBL_WORK_LOG":"Registro de Trabajo","LBL_ACCOUNT_NAME":"Cuenta:","LBL_ACCOUNT_ID":"ID Cuenta"}'); +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Nombre:","LBL_DATE_ENTERED":"Creado:","LBL_DATE_MODIFIED":"Modificado:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_TYPE":"Tipo:","LBL_INDUSTRY":"Industria:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Calle de facturaci\u00f3n:","LBL_BILLING_ADDRESS_CITY":"Ciudad de facturaci\u00f3n:","LBL_BILLING_ADDRESS_STATE":"Estado\/provincia de facturaci\u00f3n:","LBL_BILLING_ADDRESS_POSTALCODE":"CP de facturaci\u00f3n:","LBL_BILLING_ADDRESS_COUNTRY":"Pa\u00eds de facturaci\u00f3n:","LBL_PHONE_OFFICE":"Tel\u00e9fono oficina:","LBL_WEBSITE":"Web:","LBL_SHIPPING_ADDRESS_STREET":"Calle de env\u00edo:","LBL_SHIPPING_ADDRESS_CITY":"Ciudad de env\u00edo:","LBL_SHIPPING_ADDRESS_STATE":"Estado\/provincia de env\u00edo:","LBL_SHIPPING_ADDRESS_POSTALCODE":"CP de env\u00edo:","LBL_SHIPPING_ADDRESS_COUNTRY":"Pa\u00eds de env\u00edo:","LBL_EMAIL":"Correo electr\u00f3nico:","LBL_BILLING_ADDRESS":"Direcci\u00f3n de facturaci\u00f3n:","LBL_SHIPPING_ADDRESS":"Direcci\u00f3n de env\u00edo:","LBL_CONTACTS":"Contactos","LBL_OPPORTUNITY":"Oportunidad","LBL_CALLS":"Llamadas","LBL_MEETINGS":"Reuniones","LBL_TASKS":"Tareas","LBL_LEADS":"Clientes Potenciales","LBL_NOTES":"Notas","NEW":"Nueva Cuenta"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"Fecha de Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_FIRST_NAME":"Nombre:","LBL_LAST_NAME":"Apellidos:","LBL_TITLE":"Cargo:","LBL_DEPARTMENT":"Departamento:","LBL_HOME_PHONE":"Tel. casa:","LBL_MOBILE_PHONE":"M\u00f3vil:","LBL_OFFICE_PHONE":"Tel. Oficina:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Correo electr\u00f3nico:","LBL_PRIMARY_ADDRESS_STREET":"Calle de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_CITY":"Ciudad de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_POSTALCODE":"CP de direcci\u00f3n principal:","LBL_PRIMARY_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n principal:","LBL_ALT_ADDRESS_STREET":"Calle de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_CITY":"Ciudad de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_POSTALCODE":"CP de direcci\u00f3n alternativa:","LBL_ALT_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n alternativa:","LBL_ACCOUNT_NAME":"Cuenta:","LBL_PRIMARY_ADDRESS":"Direcci\u00f3n principal:","LBL_ALT_ADDRESS":"Otra direcci\u00f3n:","LBL_CALLS":"Llamadas","LBL_MEETINGS":"Reuniones","LBL_TASKS":"Tareas","LBL_OPPORTUNITIES":"Oportunidades","LBL_NOTES":"Notas","NEW":"Nuevo Contacto"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Nombre Oportunidad:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_ACCOUNT_NAME":"Cuenta:","LBL_AMOUNT":"Cantidad de la Oportunidad:","LBL_AMOUNT_USDOLLAR":"Cantidad:","LBL_DATE_CLOSED":"Fecha de cierre:","LBL_SALES_STAGE":"Etapa de ventas:","LBL_CONTACTS":"Contactos","LBL_CALLS":"Llamadas","LBL_MEETINGS":"Reuniones","LBL_TASKS":"Tareas","LBL_LEADS":"Clientes Potenciales","LBL_NOTES":"Notas","NEW":"Nueva Oportunidad"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_FIRST_NAME":"Nombre:","LBL_LAST_NAME":"Apellidos:","LBL_TITLE":"Cargo:","LBL_MOBILE_PHONE":"M\u00f3vil:","LBL_OFFICE_PHONE":"Tel. Oficina:","LBL_EMAIL_ADDRESS":"Correo electr\u00f3nico:","LBL_PRIMARY_ADDRESS_STREET":"Calle de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_CITY":"Ciudad de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_POSTALCODE":"CP de direcci\u00f3n principal","LBL_PRIMARY_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n principal","LBL_ALT_ADDRESS_STREET":"Calle de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_CITY":"Ciudad de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_STATE":"Estado\/Provincia de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_POSTALCODE":"CP de direcci\u00f3n alternativa","LBL_ALT_ADDRESS_COUNTRY":"Pa\u00eds de direcci\u00f3n alternativa","LBL_STATUS":"Estado:","LBL_ACCOUNT_NAME":"Nombre de cuenta:","LBL_PRIMARY_ADDRESS":"Direcci\u00f3n principal:","LBL_ALT_ADDRESS":"Otra direcci\u00f3n:","LBL_CALLS":"Llamadas","LBL_MEETINGS":"Reuniones","LBL_TASKS":"Tareas","LBL_NOTES":"Notas","NEW":"Nuevo Cliente Potencial"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_DURATION_HOURS":"Horas Duraci\u00f3n:","LBL_DURATION_MINUTES":"Minutos Duraci\u00f3n:","LBL_DATE":"Fecha Inicio:","LBL_LIST_RELATED_TO":"Relacionado con","LBL_STATUS":"Estado:","LBL_DIRECTION":"Direcci\u00f3n:","LNK_NEW_CALL":"Registrar Llamada","LBL_CONTACTS":"Contactos","LBL_USERS":"Usuarios","LBL_LEADS":"Clientes Potenciales","LBL_NOTES":"Notas","NEW":"Registrar Llamada"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_DURATION_HOURS":"Horas Duraci\u00f3n:","LBL_DURATION_MINUTES":"Minutos Duraci\u00f3n:","LBL_DATE":"Fecha Inicio:","LBL_STATUS":"Estado:","LBL_LIST_RELATED_TO":"Relacionado con","LBL_CONTACTS":"Contactos","LBL_USERS":"Usuarios","LBL_LEADS":"Clientes Potenciales","LBL_NOTES":"Notas","NEW":"Programar Reuni\u00f3n"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a:","LBL_STATUS":"Estado:","LBL_DUE_DATE":"Fecha vencimiento:","LBL_START_DATE":"Fecha de inicio:","LBL_LIST_RELATED_TO":"Relacionado con","LBL_CONTACT_NAME":"Contacto","LBL_PRIORITY":"Prioridad:","LNK_NEW_TASK":"Nueva Tarea","LBL_NOTES":"Notas","NEW":"Nueva Tarea"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Asunto:","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n:","LBL_DATE_MODIFIED":"Fecha de Modificaci\u00f3n:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_ASSIGNED_TO_NAME":"Asignado a","LBL_NUMBER":"N\u00famero:","LBL_TYPE":"Tipo","LBL_STATUS":"Estado:","LBL_PRIORITY":"Prioridad:","LBL_ACCOUNT_NAME":"Cuenta:","LBL_TASKS":"Tareas","LBL_NOTES":"Notas","LBL_MEETINGS":"Reuniones","LBL_CALLS":"Llamadas","LBL_CONTACTS":"Contactos","LBL_PROJECTS":"Proyectos","NEW":"Nuevo Caso"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Fecha Creaci\u00f3n:","LBL_DATE_MODIFIED":"Fecha Modificaci\u00f3n:","LBL_NAME":"Nombre:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_DATE_START":"Fecha Inicio:","LBL_DATE_END":"Fecha Fin:","LBL_STATUS":"Estado:","LBL_PRIORITY":"Prioridad:","LBL_ASSIGNED_USER_NAME":"Asignado a:","LBL_PROJECT_TASKS":"Tareas de Proyecto","LBL_NOTES":"Notas","NEW":"Crear Proyecto"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Fecha Creaci\u00f3n:","LBL_DATE_MODIFIED":"Fecha Modificaci\u00f3n:","LBL_NAME":"Nombre:","LBL_STATUS":"Estado:","LBL_DESCRIPTION":"Descripci\u00f3n:","LBL_PERCENT_COMPLETE":"% Completado:","LBL_PRIORITY":"Prioridad:","LBL_PARENT_NAME":"Nombre de Proyecto","LBL_ASSIGNED_USER_NAME":"Asignado a","LBL_NOTES":"Notas","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Usuario","LBL_DATE_ENTERED":"Fecha de creaci\u00f3n","LBL_DATE_MODIFIED":"Fecha Modificaci\u00f3n","LBL_NOTE_SUBJECT":"Asunto:","LBL_FILENAME":"Adjunto:","LBL_DESCRIPTION":"Nota","NEW":"Nueva Nota o Adjunto"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Identificador","LBL_FIRST_NAME":"Nombre","LBL_LAST_NAME":"Apellidos","LBL_DEPARTMENT":"Departamento","LBL_MOBILE_PHONE":"M\u00f3vil","LBL_EMAIL":"Correo electr\u00f3nico:","NEW":"Crear Nuevo Usuario"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"Nombre","LBL_DATE_ENTERED":"Fecha de Creaci\u00f3n","LBL_DATE_MODIFIED":"\u00daltima Modificaci\u00f3n","LBL_ASSIGNED_TO_NAME":"Usuario","LBL_CATEGORY":"Category","LBL_PRICE":"Price","NEW":null}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_fr_FR.js b/mobile/fielddefs/modules_fr_FR.js index ff00c0b91bb..db28775a89b 100755 --- a/mobile/fielddefs/modules_fr_FR.js +++ b/mobile/fielddefs/modules_fr_FR.js @@ -1 +1 @@ -var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"LBL_NAME":"Nom:","LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_TYPE":"Type:","LBL_INDUSTRY":"Secteur d'activit\u00e9:","LBL_ANNUAL_REVENUE":"CA annuel:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Rue (adresse de facturation):","LBL_BILLING_ADDRESS_CITY":"Ville (adresse de facturation):","LBL_BILLING_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse de facturation):","LBL_BILLING_ADDRESS_POSTALCODE":"Code postal (adresse de facturation):","LBL_BILLING_ADDRESS_COUNTRY":"Pays (adresse de facturation):","LBL_RATING":"Perception:","LBL_PHONE_OFFICE":"T\u00e9l\u00e9phone:","LBL_PHONE_ALT":"Autre t\u00e9l\u00e9phone:","LBL_WEBSITE":"Site internet:","LBL_OWNERSHIP":"Propri\u00e9taire:","LBL_EMPLOYEES":"Collaborateurs:","LBL_TICKER_SYMBOL":"Code boursier:","LBL_SHIPPING_ADDRESS_STREET":"Adresse de livraison:","LBL_SHIPPING_ADDRESS_CITY":"Ville (adresse de livraison):","LBL_SHIPPING_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse de livraison):","LBL_SHIPPING_ADDRESS_POSTALCODE":"Code postal (adresse de livraison):","LBL_SHIPPING_ADDRESS_COUNTRY":"Pays (adresse de livraison):","LBL_EMAIL":"Adresse email:","LBL_PARENT_ACCOUNT_ID":"ID du Compte parent","LBL_SIC_CODE":"Code NAF:","LBL_MEMBER_OF":"Filiale de:","LBL_CAMPAIGN_ID":"Campagne ID","LBL_CAMPAIGN":"Campagne:","LBL_BILLING_ADDRESS":"Adresse de facturation:","LBL_SHIPPING_ADDRESS":"Adresse de livraison:","NEW":"Cr\u00e9er un compte"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_SALUTATION":"Civilit\u00e9:","LBL_FIRST_NAME":"Pr\u00e9nom:","LBL_LAST_NAME":"Nom de famille:","LBL_TITLE":"Fonction:","LBL_DEPARTMENT":"D\u00e9partement:","LBL_DO_NOT_CALL":"Ne pas appeler:","LBL_HOME_PHONE":"Tel. maison:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Ligne directe:","LBL_OTHER_PHONE":"Autre t\u00e9l\u00e9phone:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Adresse email:","LBL_PRIMARY_ADDRESS_STREET":"Rue (adresse principale):","LBL_PRIMARY_ADDRESS_CITY":"Ville (adresse principale):","LBL_PRIMARY_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse principale):","LBL_PRIMARY_ADDRESS_POSTALCODE":"Code postal (adresse principale):","LBL_PRIMARY_ADDRESS_COUNTRY":"Pays (adresse principale):","LBL_ALT_ADDRESS_STREET":"Rue (adresse secondaire):","LBL_ALT_ADDRESS_CITY":"Ville (adresse secondaire):","LBL_ALT_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse secondaire):","LBL_ALT_ADDRESS_POSTALCODE":"Code postal (adresse secondaire):","LBL_ALT_ADDRESS_COUNTRY":"Pays (adresse secondaire):","LBL_ASSISTANT":"Assistant:","LBL_ASSISTANT_PHONE":"T\u00e9l\u00e9phone assistant:","LBL_LEAD_SOURCE":"Origine:","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_ACCOUNT_ID":"ID du Compte:","LBL_REPORTS_TO_ID":"Rapporte \u00e0:","LBL_REPORTS_TO":"Reporte \u00e0:","LBL_BIRTHDATE":"Date de naissance:","LBL_CAMPAIGN_ID":"Campagne ID","LBL_CAMPAIGN":"Campagne:","LBL_VIP":"VIP","LBL_PRIMARY_ADDRESS":"Adresse principale:","LBL_ALT_ADDRESS":"Autre adresse:","NEW":"Cr\u00e9er un contact"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Nom de l'opportunit\u00e9:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_TYPE":"Type:","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_CAMPAIGN_ID":"campaign_id","LBL_CAMPAIGN":"Campagne:","LBL_LEAD_SOURCE":"Origine:","LBL_AMOUNT":"Montant de l'opportunit\u00e9:","LBL_AMOUNT_USDOLLAR":"Montant:","LBL_CURRENCY":"Devise:","LBL_CURRENCY_NAME":"Nom de la devise","LBL_CURRENCY_SYMBOL":"Symbole de la devise","LBL_DATE_CLOSED":"Date de cl\u00f4ture souhait\u00e9e:","LBL_NEXT_STEP":"Etape suivante:","LBL_SALES_STAGE":"Etape de vente:","LBL_PROBABILITY":"Probabilit\u00e9 (%):","NEW":"Cr\u00e9er une opportunit\u00e9"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0","LBL_SALUTATION":"Civilit\u00e9","LBL_FIRST_NAME":"Pr\u00e9nom:","LBL_LAST_NAME":"Nom de famille:","LBL_TITLE":"Fonction:","LBL_DEPARTMENT":"D\u00e9partement:","LBL_DO_NOT_CALL":"Ne pas appeler:","LBL_HOME_PHONE":"T\u00e9l\u00e9phone maison:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Ligne directe:","LBL_OTHER_PHONE":"Autre t\u00e9l\u00e9phone:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Adresse email:","LBL_PRIMARY_ADDRESS_STREET":"Rue (adresse principale)","LBL_PRIMARY_ADDRESS_CITY":"Ville (adresse principale)","LBL_PRIMARY_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse principale)","LBL_PRIMARY_ADDRESS_POSTALCODE":"Code postal principal","LBL_PRIMARY_ADDRESS_COUNTRY":"Pays (adresse principale)","LBL_ALT_ADDRESS_STREET":"Rue secondaire","LBL_ALT_ADDRESS_CITY":"Ville secondaire","LBL_ALT_ADDRESS_STATE":"Etat secondaire","LBL_ALT_ADDRESS_POSTALCODE":"Code postal secondaire","LBL_ALT_ADDRESS_COUNTRY":"Pays secondaire","LBL_ASSISTANT":"Assistant(e)","LBL_ASSISTANT_PHONE":"T\u00e9l\u00e9phone de l'assistant(e)","LBL_CONVERTED":"Converti","LBL_REFERED_BY":"R\u00e9f\u00e9renc\u00e9 par:","LBL_LEAD_SOURCE":"Origine:","LBL_LEAD_SOURCE_DESCRIPTION":"Description de la source du lead:","LBL_STATUS":"Statut:","LBL_STATUS_DESCRIPTION":"Description du statut:","LBL_REPORTS_TO_ID":"Rapporte \u00e0 l'ID","LBL_REPORTS_TO":"Reporte \u00e0:","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_ACCOUNT_DESCRIPTION":"Description du compte","LBL_CONTACT_ID":"ID du contact","LBL_ACCOUNT_ID":"ID du Compte","LBL_OPPORTUNITY_ID":"Opportunit\u00e9","LBL_OPPORTUNITY_NAME":"Nom de l'opportunit\u00e9:","LBL_OPPORTUNITY_AMOUNT":"Montant de l'opportunit\u00e9:","LBL_CAMPAIGN_ID":"Campagne ID","LBL_CAMPAIGN":"Campagne:","LBL_BIRTHDATE":"Date de naissance:","LBL_PORTAL_NAME":"Identifiant de l'extranet:","LBL_PORTAL_APP":"Application de l'extranet","LBL_WEBSITE":"Site internet","LBL_PRIMARY_ADDRESS":"Adresse principale:","LBL_ALT_ADDRESS":"Autre adresse:","NEW":"Cr\u00e9er un lead"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0","LBL_DURATION_HOURS":"Dur\u00e9e en heures:","LBL_DURATION_MINUTES":"Dur\u00e9e en minutes:","LBL_DATE":"Date de d\u00e9but:","LBL_DATE_END":"Date de fin","LBL_PARENT_TYPE":"Type du lien","LBL_LIST_RELATED_TO":"Associ\u00e9 \u00e0","LBL_STATUS":"Statut:","LBL_DIRECTION":"Direction:","LBL_LIST_RELATED_TO_ID":"En relation avec","LBL_REMINDER_TIME":"Heure de l'alerte","LBL_EMAIL_REMINDER_TIME":"Rappel par email","LBL_EMAIL_REMINDER_SENT":"Rappel par email envoy\u00e9","LBL_OUTLOOK_ID":"ID Outlook","LBL_CONTACT_NAME":"Contact:","LBL_REPEAT_TYPE":"Type de r\u00e9p\u00e9tition","LBL_REPEAT_INTERVAL":"Type d'intervale","LBL_REPEAT_DOW":"Dow de r\u00e9p\u00e9tition","LBL_REPEAT_UNTIL":"R\u00e9p\u00e9ter jusqu'\u00e0","LBL_REPEAT_COUNT":"Nombre de r\u00e9p\u00e9tition","LBL_REPEAT_PARENT_ID":"ID du parent r\u00e9p\u00e9t\u00e9","LBL_RECURRING_SOURCE":"Source r\u00e9currante","LNK_NEW_CALL":"Planifier un appel","NEW":"Planifier un appel"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_LOCATION":"Lieu:","LBL_PASSWORD":"Mot de passe conf\u00e9rence web","LBL_URL":"D\u00e9buter\/Rejoindre une conf\u00e9rence web","LBL_HOST_URL":"URL h\u00f4te","LBL_DISPLAYED_URL":"URL affich\u00e9e","LBL_CREATOR":"Cr\u00e9ateur de conf\u00e9rence web ","LBL_EXTERNALID":"ID App externe","LBL_DURATION_HOURS":"Dur\u00e9e en heures:","LBL_DURATION_MINUTES":"Dur\u00e9e en minutes:","LBL_DATE":"Date de d\u00e9but:","LBL_DATE_END":"Date de fin","LBL_PARENT_TYPE":"Type du lien","LBL_STATUS":"Statut:","LBL_TYPE":"Type de conf\u00e9rence web","LBL_PARENT_ID":"ID du parent","LBL_REMINDER_TIME":"Heure de l'alerte","LBL_EMAIL_REMINDER_TIME":"Rappel par email","LBL_EMAIL_REMINDER_SENT":"Rappel par email envoy\u00e9","LBL_OUTLOOK_ID":"ID Outlook","LBL_SEQUENCE":"S\u00e9quence de mise \u00e0 jour des Rendez-vous","LBL_CONTACT_NAME":"Contact:","LBL_LIST_RELATED_TO":"Associ\u00e9 \u00e0","LBL_REPEAT_TYPE":"Type de r\u00e9p\u00e9tition","LBL_REPEAT_INTERVAL":"Type d'intervale","LBL_REPEAT_DOW":"Dow de r\u00e9p\u00e9tition","LBL_REPEAT_UNTIL":"R\u00e9p\u00e9ter jusqu'\u00e0","LBL_REPEAT_COUNT":"Nombre de r\u00e9p\u00e9tition","LBL_REPEAT_PARENT_ID":"ID du parent r\u00e9p\u00e9t\u00e9","LBL_RECURRING_SOURCE":"Source r\u00e9currante","NEW":"Planifier un rendez-vous"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_STATUS":"Statut:","LBL_DATE_DUE_FLAG":"Aucune \u00e9ch\u00e9ance","LBL_DUE_DATE":"Date pr\u00e9vue:","LBL_DATE_START_FLAG":"Aucune heure de d\u00e9but","LBL_START_DATE":"Date de d\u00e9but:","LBL_PARENT_NAME":"Type du lien:","LBL_LIST_RELATED_TO":"Associ\u00e9 \u00e0","LBL_PARENT_ID":"ID du parent:","LBL_CONTACT_ID":"ID du contact:","LBL_CONTACT_NAME":"Nom du contact","LBL_CONTACT_PHONE":"T\u00e9l\u00e9phone du contact:","LBL_PRIORITY":"Priorit\u00e9:","LNK_NEW_TASK":"Cr\u00e9er une t\u00e2che","NEW":"Cr\u00e9er une t\u00e2che"}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_NOTE_SUBJECT":"Sujet:","LBL_FILE_MIME_TYPE":"Type MIME","LBL_FILE_URL":"Url du fichier","LBL_FILENAME":"Fichier joint:","LBL_PARENT_TYPE":"Type du lien","LBL_PARENT_ID":"ID du parent:","LBL_CONTACT_ID":"ID du contact:","LBL_PORTAL_FLAG":"Voir dans l'extranet","LBL_EMBED_FLAG":"Ajouter \u00e0 l'email?","LBL_DESCRIPTION":"Note","LBL_RELATED_TO":"Associ\u00e9 \u00e0:","LBL_CONTACT_NAME":"Contact:","LBL_PHONE":"T\u00e9l\u00e9phone:","NEW":"Cr\u00e9er une note ou lier un fichier"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_NAME":"Nom:","LBL_DESCRIPTION":"Description:","LBL_DATE_START":"Date de d\u00e9but:","LBL_DATE_END":"Date de fin:","LBL_STATUS":"Statut:","LBL_PRIORITY":"Priorit\u00e9:","LBL_ASSIGNED_USER_NAME":"Assign\u00e9 \u00e0:","NEW":"Cr\u00e9er un projet"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_PROJECT_ID":"Id du projet:","LBL_PROJECT_TASK_ID":"T\u00e2che du projet:","LBL_NAME":"Nom:","LBL_STATUS":"Statut:","LBL_DESCRIPTION":"Description:","LBL_PREDECESSORS":"Pr\u00e9d\u00e9cesseurs:","LBL_DATE_START":"Date de d\u00e9but:","LBL_TIME_START":"Heure de d\u00e9but:","LBL_TIME_FINISH":"Heure de fin:","LBL_DATE_FINISH":"Date de fin:","LBL_DURATION":"Dur\u00e9e:","LBL_DURATION_UNIT":"Unit\u00e9 de dur\u00e9e:","LBL_ACTUAL_DURATION":"Dur\u00e9e actuelle:","LBL_PERCENT_COMPLETE":"% termin\u00e9:","LBL_DATE_DUE":"Date pr\u00e9vue:","LBL_TIME_DUE":"Heure pr\u00e9vue:","LBL_PARENT_TASK_ID":"ID de la T\u00e2che parente:","LBL_PRIORITY":"Priorit\u00e9:","LBL_MILESTONE_FLAG":"Progression:","LBL_ORDER_NUMBER":"Ordre:","LBL_TASK_NUMBER":"Num\u00e9ro de la t\u00e2che:","LBL_ESTIMATED_EFFORT":"Effort estim\u00e9 (hrs):","LBL_ACTUAL_EFFORT":"Effort r\u00e9alis\u00e9 (hrs):","LBL_UTILIZATION":"Utilisation (%):","LBL_PARENT_NAME":"Nom du projet","LBL_ASSIGNED_USER_NAME":"Assign\u00e9 \u00e0","NEW":null}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0","LBL_NUMBER":"Num\u00e9ro:","LBL_TYPE":"Type","LBL_STATUS":"Statut:","LBL_PRIORITY":"Priorit\u00e9:","LBL_RESOLUTION":"R\u00e9solution:","LBL_WORK_LOG":"Journal des travaux effectu\u00e9s","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_ACCOUNT_ID":"ID du Compte","NEW":"Cr\u00e9er un ticket"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Nom d'utilisateur","LBL_FIRST_NAME":"Pr\u00e9nom","LBL_LAST_NAME":"Nom de famille","LBL_DEPARTMENT":"D\u00e9partement","LBL_MOBILE_PHONE":"Mobile","LBL_EMAIL":"Adresse email","NEW":"Cr\u00e9er un nouvel utilisateur"}'); \ No newline at end of file +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Nom:","LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_TYPE":"Type:","LBL_INDUSTRY":"Secteur d'activit\u00e9:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Adresse de facturation:","LBL_BILLING_ADDRESS_CITY":"Ville de facturation:","LBL_BILLING_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement de facturation:","LBL_BILLING_ADDRESS_POSTALCODE":"Code postal de facturation:","LBL_BILLING_ADDRESS_COUNTRY":"Pays de facturation:","LBL_PHONE_OFFICE":"T\u00e9l\u00e9phone:","LBL_WEBSITE":"Site internet:","LBL_SHIPPING_ADDRESS_STREET":"Adresse de livraison:","LBL_SHIPPING_ADDRESS_CITY":"Ville de livraison:","LBL_SHIPPING_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement de livraison:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Code postal de livraison:","LBL_SHIPPING_ADDRESS_COUNTRY":"Pays de livraison:","LBL_EMAIL":"Adresse email:","LBL_BILLING_ADDRESS":"Adresse de facturation:","LBL_SHIPPING_ADDRESS":"Adresse de livraison:","LBL_CONTACTS":"Contacts","LBL_OPPORTUNITY":"Opportunit\u00e9","LBL_CALLS":"Appels","LBL_MEETINGS":"Rendez-vous","LBL_TASKS":"T\u00e2ches","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Cr\u00e9er un compte"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_FIRST_NAME":"Pr\u00e9nom:","LBL_LAST_NAME":"Nom de famille:","LBL_TITLE":"Fonction:","LBL_DEPARTMENT":"D\u00e9partement:","LBL_HOME_PHONE":"Tel. maison:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Ligne directe:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Adresse email:","LBL_PRIMARY_ADDRESS_STREET":"Rue (adresse principale):","LBL_PRIMARY_ADDRESS_CITY":"Ville (adresse principale):","LBL_PRIMARY_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse principale):","LBL_PRIMARY_ADDRESS_POSTALCODE":"Code postal (adresse principale):","LBL_PRIMARY_ADDRESS_COUNTRY":"Pays (adresse principale):","LBL_ALT_ADDRESS_STREET":"Rue (adresse secondaire):","LBL_ALT_ADDRESS_CITY":"Ville (adresse secondaire):","LBL_ALT_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse secondaire):","LBL_ALT_ADDRESS_POSTALCODE":"Code postal (adresse secondaire):","LBL_ALT_ADDRESS_COUNTRY":"Pays (adresse secondaire):","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_PRIMARY_ADDRESS":"Adresse principale:","LBL_ALT_ADDRESS":"Autre adresse:","LBL_CALLS":"Appels","LBL_MEETINGS":"Rendez-vous","LBL_TASKS":"T\u00e2ches","LBL_OPPORTUNITIES":"Opportunit\u00e9s","LBL_NOTES":"Notes","NEW":"Cr\u00e9er un contact"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Nom de l'opportunit\u00e9:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_AMOUNT":"Montant de l'opportunit\u00e9:","LBL_AMOUNT_USDOLLAR":"Montant:","LBL_DATE_CLOSED":"Date de cl\u00f4ture souhait\u00e9e:","LBL_SALES_STAGE":"Etape de vente:","LBL_CONTACTS":"Contacts","LBL_CALLS":"Appels","LBL_MEETINGS":"Rendez-vous","LBL_TASKS":"T\u00e2ches","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Cr\u00e9er une opportunit\u00e9"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Affect\u00e9 \u00e0","LBL_FIRST_NAME":"Pr\u00e9nom:","LBL_LAST_NAME":"Nom de famille:","LBL_TITLE":"Fonction:","LBL_MOBILE_PHONE":"Mobile:","LBL_OFFICE_PHONE":"Ligne directe:","LBL_EMAIL_ADDRESS":"Adresse email:","LBL_PRIMARY_ADDRESS_STREET":"Rue (adresse principale)","LBL_PRIMARY_ADDRESS_CITY":"Ville (adresse principale)","LBL_PRIMARY_ADDRESS_STATE":"R\u00e9gion\/D\u00e9partement (adresse principale)","LBL_PRIMARY_ADDRESS_POSTALCODE":"Code postal principal","LBL_PRIMARY_ADDRESS_COUNTRY":"Pays (adresse principale)","LBL_ALT_ADDRESS_STREET":"Rue secondaire","LBL_ALT_ADDRESS_CITY":"Ville secondaire","LBL_ALT_ADDRESS_STATE":"Etat secondaire","LBL_ALT_ADDRESS_POSTALCODE":"Code postal secondaire","LBL_ALT_ADDRESS_COUNTRY":"Pays secondaire","LBL_STATUS":"Statut:","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_PRIMARY_ADDRESS":"Adresse principale:","LBL_ALT_ADDRESS":"Autre adresse:","LBL_CALLS":"Appels","LBL_MEETINGS":"Rendez-vous","LBL_TASKS":"T\u00e2ches","LBL_NOTES":"Notes","NEW":"Cr\u00e9er un lead"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Affect\u00e9 \u00e0","LBL_DURATION_HOURS":"Dur\u00e9e en heures:","LBL_DURATION_MINUTES":"Dur\u00e9e en minutes;:","LBL_DATE":"Date de d\u00e9but:","LBL_LIST_RELATED_TO":"Associ\u00e9 \u00e0","LBL_STATUS":"Statut:","LBL_DIRECTION":"Direction:","LNK_NEW_CALL":"Planifier un appel","LBL_CONTACTS":"Contacts","LBL_USERS":"Utilisateurs","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Planifier un appel"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_DURATION_HOURS":"Dur\u00e9e en heures:","LBL_DURATION_MINUTES":"Dur\u00e9e en minutes;:","LBL_DATE":"Date de d\u00e9but:","LBL_STATUS":"Statut:","LBL_LIST_RELATED_TO":"Associ\u00e9 \u00e0","LBL_CONTACTS":"Contacts","LBL_USERS":"Utilisateurs","LBL_LEADS":"Leads","LBL_NOTES":"Notes","NEW":"Planifier un rendez-vous"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation","LBL_DATE_MODIFIED":"Date de modification","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Assign\u00e9 \u00e0:","LBL_STATUS":"Statut:","LBL_DUE_DATE":"Date pr\u00e9vue:","LBL_START_DATE":"Date de d\u00e9but:","LBL_LIST_RELATED_TO":"Associ\u00e9 \u00e0","LBL_CONTACT_NAME":"Nom du contact","LBL_PRIORITY":"Priorit\u00e9:","LNK_NEW_TASK":"Cr\u00e9er une t\u00e2che","LBL_NOTES":"Notes","NEW":"Cr\u00e9er une t\u00e2che"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Sujet:","LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_DESCRIPTION":"Description:","LBL_ASSIGNED_TO_NAME":"Affect\u00e9 \u00e0","LBL_NUMBER":"Num\u00e9ro:","LBL_TYPE":"Type","LBL_STATUS":"Statut:","LBL_PRIORITY":"Priorit\u00e9:","LBL_ACCOUNT_NAME":"Nom du compte:","LBL_TASKS":"T\u00e2ches","LBL_NOTES":"Notes","LBL_MEETINGS":"Rendez-vous","LBL_CALLS":"Appels","LBL_CONTACTS":"Contacts","LBL_PROJECTS":"Projets","NEW":"Cr\u00e9er un ticket"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_NAME":"Nom:","LBL_DESCRIPTION":"Description:","LBL_DATE_START":"Date de d\u00e9but:","LBL_DATE_END":"Date de fin:","LBL_STATUS":"Statut:","LBL_PRIORITY":"Priorit\u00e9:","LBL_ASSIGNED_USER_NAME":"Assign\u00e9 \u00e0:","LBL_PROJECT_TASKS":"T\u00e2ches de projet","LBL_NOTES":"Notes","NEW":"Cr\u00e9er un projet"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date de cr\u00e9ation:","LBL_DATE_MODIFIED":"Date de modification:","LBL_NAME":"Nom:","LBL_STATUS":"Statut:","LBL_DESCRIPTION":"Description:","LBL_PERCENT_COMPLETE":"% termin\u00e9:","LBL_PRIORITY":"Priorit\u00e9:","LBL_PARENT_NAME":"Nom du projet","LBL_ASSIGNED_USER_NAME":"Affect\u00e9 \u00e0","LBL_NOTES":"Notes","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Utilisateur","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_NOTE_SUBJECT":"Sujet de la note:","LBL_FILENAME":"Fichier joint:","LBL_DESCRIPTION":"Note","NEW":"Cr\u00e9er une note ou lier un fichier"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Nom d'utilisateur","LBL_FIRST_NAME":"Pr\u00e9nom","LBL_LAST_NAME":"Nom de famille","LBL_DEPARTMENT":"D\u00e9partement","LBL_MOBILE_PHONE":"Mobile","LBL_EMAIL":"Adresse email","NEW":"Cr\u00e9er un nouvel utilisateur"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"Nom du produit","LBL_DATE_ENTERED":"Date de création","LBL_DATE_MODIFIED":"Date de modification","LBL_ASSIGNED_TO_NAME":"Affecté à","LBL_CATEGORY":"Catégorie","LBL_PRICE":"Prix","NEW":null}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_it_it.js b/mobile/fielddefs/modules_it_it.js index c550471c329..de14c812962 100755 --- a/mobile/fielddefs/modules_it_it.js +++ b/mobile/fielddefs/modules_it_it.js @@ -1 +1 @@ -var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"LBL_NAME":"Nome:","LBL_DATE_ENTERED":"Data Inserimento:","LBL_DATE_MODIFIED":"Data Modifica:","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_TYPE":"Tipo:","LBL_INDUSTRY":"Settore:","LBL_ANNUAL_REVENUE":"Fatturato Annuo:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Via di Fatturazione:","LBL_BILLING_ADDRESS_CITY":"Comune di Fatturazione:","LBL_BILLING_ADDRESS_STATE":"Provincia di Fatturazione:","LBL_BILLING_ADDRESS_POSTALCODE":"CAP di Fatturazione:","LBL_BILLING_ADDRESS_COUNTRY":"Nazione di Fatturazione:","LBL_RATING":"Note:","LBL_PHONE_OFFICE":"Telefono Ufficio:","LBL_PHONE_ALT":"Telefono Alternativo:","LBL_WEBSITE":"Sito web:","LBL_OWNERSHIP":"Proprietario:","LBL_EMPLOYEES":"Dipendenti:","LBL_TICKER_SYMBOL":"Ticker:","LBL_SHIPPING_ADDRESS_STREET":"Spedizione, Via:","LBL_SHIPPING_ADDRESS_CITY":"Spedizione, Comune:","LBL_SHIPPING_ADDRESS_STATE":"Spedizione, Provincia:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Spedizione, CAP:","LBL_SHIPPING_ADDRESS_COUNTRY":"Spedizione, Nazione:","LBL_EMAIL":"Email:","LBL_PARENT_ACCOUNT_ID":"ID Azienda Padre","LBL_SIC_CODE":"Codice SIC (Class.Standard Industriale):","LBL_MEMBER_OF":"Membro di:","LBL_CAMPAIGN_ID":"ID Campagna","LBL_CAMPAIGN":"Campagna:","LBL_BILLING_ADDRESS":"Indirizzo di Fatturazione:","LBL_SHIPPING_ADDRESS":"Indirizzo di Spedizione:","NEW":"Nuova Azienda"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Data Modifica:","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_SALUTATION":"Titolo","LBL_FIRST_NAME":"Nome:","LBL_LAST_NAME":"Cognome:","LBL_TITLE":"Funzione:","LBL_DEPARTMENT":"Divisione:","LBL_DO_NOT_CALL":"Non chiamare:","LBL_HOME_PHONE":"Home:","LBL_MOBILE_PHONE":"Telefono Cellulare:","LBL_OFFICE_PHONE":"Telefono Ufficio:","LBL_OTHER_PHONE":"Altro Telefono:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Email:","LBL_PRIMARY_ADDRESS_STREET":"Indirizzo Primario, Via:","LBL_PRIMARY_ADDRESS_CITY":"Indirizzo Primario, Comune:","LBL_PRIMARY_ADDRESS_STATE":"Indirizzo Primario, Provincia:","LBL_PRIMARY_ADDRESS_POSTALCODE":"Indirizzo Primario, CAP:","LBL_PRIMARY_ADDRESS_COUNTRY":"Indirizzo Primario, Nazione:","LBL_ALT_ADDRESS_STREET":"Indirizzo Alternativo, Via:","LBL_ALT_ADDRESS_CITY":"Indirizzo Alternativo, Comune:","LBL_ALT_ADDRESS_STATE":"Indirizzo Alternativo, Provincia:","LBL_ALT_ADDRESS_POSTALCODE":"Indirizzo Alternativo, CAP:","LBL_ALT_ADDRESS_COUNTRY":"Indirizzo Alternativo, Nazione:","LBL_ASSISTANT":"Assistente:","LBL_ASSISTANT_PHONE":"Telefono Assistente:","LBL_LEAD_SOURCE":"Fonte del lead:","LBL_ACCOUNT_NAME":"Nome azienda:","LBL_ACCOUNT_ID":"ID Azienda:","LBL_REPORTS_TO_ID":"Dipende da ID","LBL_REPORTS_TO":"Dipende da:","LBL_BIRTHDATE":"Data di nascita:","LBL_CAMPAIGN_ID":"ID Campagna","LBL_CAMPAIGN":"Campagna:","LBL_VIP":"VIP","LBL_PRIMARY_ADDRESS":"Indirizzo principale:","LBL_ALT_ADDRESS":"Altro Indirizzo:","NEW":"Nuovo Contatto"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Nome Opportunit\u00e0:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_TYPE":"Tipo:","LBL_ACCOUNT_NAME":"Nome Azienda:","LBL_CAMPAIGN_ID":"campagna_id","LBL_CAMPAIGN":"Campagna:","LBL_LEAD_SOURCE":"Fonte del Lead:","LBL_AMOUNT":"Importo Opportunit\u00e0:","LBL_AMOUNT_USDOLLAR":"Importo:","LBL_CURRENCY":"Valuta:","LBL_CURRENCY_NAME":"Nome Valuta","LBL_CURRENCY_SYMBOL":"Simbolo Valuta","LBL_DATE_CLOSED":"Data Chiusura Prevista:","LBL_NEXT_STEP":"Prossimo Passo:","LBL_SALES_STAGE":"Fase di Vendita:","LBL_PROBABILITY":"Probabilit\u00e0 (%):","NEW":"Nuova Opportunit\u00e0"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_SALUTATION":"Titolo","LBL_FIRST_NAME":"Nome:","LBL_LAST_NAME":"Cognome:","LBL_TITLE":"Funzione:","LBL_DEPARTMENT":"Divisione:","LBL_DO_NOT_CALL":"Non chiamare:","LBL_HOME_PHONE":"Telefono Casa:","LBL_MOBILE_PHONE":"Telefono Cellulare:","LBL_OFFICE_PHONE":"Telefono Ufficio:","LBL_OTHER_PHONE":"Altro Telefono:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Indirizzo Email:","LBL_PRIMARY_ADDRESS_STREET":"Indirizzo Primario, Via","LBL_PRIMARY_ADDRESS_CITY":"Indirizzo Primario, Comune","LBL_PRIMARY_ADDRESS_STATE":"Indirizzo Primario, Provincia","LBL_PRIMARY_ADDRESS_POSTALCODE":"Indirizzo Primario, CAP","LBL_PRIMARY_ADDRESS_COUNTRY":"Indirizzo Primario, Nazione","LBL_ALT_ADDRESS_STREET":"Alt Indirizzo, Via","LBL_ALT_ADDRESS_CITY":"Alt Indirizzo, Comune","LBL_ALT_ADDRESS_STATE":"Alt Indirizzo, Provincia","LBL_ALT_ADDRESS_POSTALCODE":"Alt Indirizzo, CAP","LBL_ALT_ADDRESS_COUNTRY":"Alt Indirizzo, Nazione","LBL_ASSISTANT":"Assistente","LBL_ASSISTANT_PHONE":"Telefono Assistente","LBL_CONVERTED":"Convertito","LBL_REFERED_BY":"Riferito Da:","LBL_LEAD_SOURCE":"Fonte del lead:","LBL_LEAD_SOURCE_DESCRIPTION":"Descrizione Fonte del Lead:","LBL_STATUS":"Stato:","LBL_STATUS_DESCRIPTION":"Descrizione Stato:","LBL_REPORTS_TO_ID":"Dipende da ID","LBL_REPORTS_TO":"Dipende da:","LBL_ACCOUNT_NAME":"Nome azienda:","LBL_ACCOUNT_DESCRIPTION":"Descrizione Azienda","LBL_CONTACT_ID":"ID Contatto","LBL_ACCOUNT_ID":"ID Azienda","LBL_OPPORTUNITY_ID":"ID Opportunit\u00e0","LBL_OPPORTUNITY_NAME":"Nome Opportunit\u00e0:","LBL_OPPORTUNITY_AMOUNT":"Valore Opportunit\u00e0:","LBL_CAMPAIGN_ID":"ID Campagna","LBL_CAMPAIGN":"Campagna:","LBL_BIRTHDATE":"Data di nascita:","LBL_PORTAL_NAME":"Nome Portale:","LBL_PORTAL_APP":"Applicazione Portale","LBL_WEBSITE":"Sito Web","LBL_PRIMARY_ADDRESS":"Indirizzo principale:","LBL_ALT_ADDRESS":"Altro Indirizzo:","NEW":"Nuovo Lead"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_DURATION_HOURS":"Durata Ore:","LBL_DURATION_MINUTES":"Durata Minuti:","LBL_DATE":"Data Inizio:","LBL_DATE_END":"Data Fine","LBL_PARENT_TYPE":"Tipo Relazione","LBL_LIST_RELATED_TO":"Relativo a","LBL_STATUS":"Stato:","LBL_DIRECTION":"Direzione","LBL_LIST_RELATED_TO_ID":"Relativo a ID","LBL_REMINDER_TIME":"Tempo di Avviso","LBL_EMAIL_REMINDER_TIME":"Data di invio email di promemoria","LBL_EMAIL_REMINDER_SENT":"Email di promemoria inviati","LBL_OUTLOOK_ID":"ID Outlook","LBL_CONTACT_NAME":"Contatto:","LBL_REPEAT_TYPE":"Ripetere Tipo","LBL_REPEAT_INTERVAL":"Ripetere Intervallo","LBL_REPEAT_DOW":"Ripetere Dow","LBL_REPEAT_UNTIL":"Ripetere Fino","LBL_REPEAT_COUNT":"Ripetere Conteggio","LBL_REPEAT_PARENT_ID":"Ripetere ID Parent","LBL_RECURRING_SOURCE":"Fonte Ricorrente","LNK_NEW_CALL":"Nuova Chiamata","NEW":"Nuova Chiamata"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_LOCATION":"Luogo:","LBL_PASSWORD":"Password della Riunione","LBL_URL":"Inizia\/partecipa alla Riunione","LBL_HOST_URL":"Host URL","LBL_DISPLAYED_URL":"Visualizza URL","LBL_CREATOR":"Organizzatore della Riunione","LBL_EXTERNALID":"ID App Esterna","LBL_DURATION_HOURS":"Ore di Durata:","LBL_DURATION_MINUTES":"Minuti di Durata:","LBL_DATE":"Data Inizio:","LBL_DATE_END":"Data Fine","LBL_PARENT_TYPE":"Tipo Relazione","LBL_STATUS":"Stato:","LBL_TYPE":"Tipo di Riunione","LBL_PARENT_ID":"ID Parent","LBL_REMINDER_TIME":"Tempo di Avviso","LBL_EMAIL_REMINDER_TIME":"Data di invio email di promemoria","LBL_EMAIL_REMINDER_SENT":"Email di promemoria inviata","LBL_OUTLOOK_ID":"ID Outlook","LBL_SEQUENCE":"Sequenza aggiornamento riunione","LBL_CONTACT_NAME":"Contatto:","LBL_LIST_RELATED_TO":"Relativo a","LBL_REPEAT_TYPE":"Ripetere Tipo","LBL_REPEAT_INTERVAL":"Ripetere Intervallo","LBL_REPEAT_DOW":"Ripetere Dow","LBL_REPEAT_UNTIL":"Ripetere Fino","LBL_REPEAT_COUNT":"Ripetere Conteggio","LBL_REPEAT_PARENT_ID":"Ripetere ID Parent","LBL_RECURRING_SOURCE":"Fonte Ricorrente","NEW":"Nuova Riunione"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_STATUS":"Stato:","LBL_DATE_DUE_FLAG":"Nessuna Data di Scadenza","LBL_DUE_DATE":"Data Scadenza:","LBL_DATE_START_FLAG":"Nessuna Data Inizio","LBL_START_DATE":"Data Inizio:","LBL_PARENT_NAME":"Tipo Relazione:","LBL_LIST_RELATED_TO":"Collegato a","LBL_PARENT_ID":"ID Padre:","LBL_CONTACT_ID":"ID Contatto:","LBL_CONTACT_NAME":"Nome Contatto:","LBL_CONTACT_PHONE":"Telefono Contatto:","LBL_PRIORITY":"Priorit\u00e0:","LNK_NEW_TASK":"Nuovo Compito","NEW":"Nuovo Compito"}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DATE_ENTERED":"Data Creazione","LBL_DATE_MODIFIED":"Data Modifica","LBL_NOTE_SUBJECT":"Oggetto della Nota:","LBL_FILE_MIME_TYPE":"Tipo Mime","LBL_FILE_URL":"URL File","LBL_FILENAME":"Allegato:","LBL_PARENT_TYPE":"Tipo Padre","LBL_PARENT_ID":"ID Padre:","LBL_CONTACT_ID":"ID Contatto:","LBL_PORTAL_FLAG":"Mostra nel Portale?","LBL_EMBED_FLAG":"Inserisci nell\u00b4email?","LBL_DESCRIPTION":"Note","LBL_RELATED_TO":"Riferito A:","LBL_CONTACT_NAME":"Contatto:","LBL_PHONE":"Telefono:","NEW":"Nuova Nota o Allegato"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Data Inserimento:","LBL_DATE_MODIFIED":"Data Modifica:","LBL_NAME":"Nome:","LBL_DESCRIPTION":"Descrizione:","LBL_DATE_START":"Data Inizio:","LBL_DATE_END":"Data Fine:","LBL_STATUS":"Stato:","LBL_PRIORITY":"Priorit\u00e0:","LBL_ASSIGNED_USER_NAME":"Assegnato a:","NEW":"Nuovo Progetto"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Data Inserimento:","LBL_DATE_MODIFIED":"Data Modifica:","LBL_PROJECT_ID":"Id Progetto:","LBL_PROJECT_TASK_ID":"Id Compiti di Progetto:","LBL_NAME":"Nome:","LBL_STATUS":"Stato:","LBL_DESCRIPTION":"Descrizione:","LBL_PREDECESSORS":"Predecessori:","LBL_DATE_START":"Data Inizio:","LBL_TIME_START":"Ora Inizio:","LBL_TIME_FINISH":"Ora Fine:","LBL_DATE_FINISH":"Data Fine:","LBL_DURATION":"Durata:","LBL_DURATION_UNIT":"Durata Unit\u00e0:","LBL_ACTUAL_DURATION":"Durata Effettiva:","LBL_PERCENT_COMPLETE":"Progresso (%):","LBL_DATE_DUE":"Data Scadenza:","LBL_TIME_DUE":"Ora Scadenza:","LBL_PARENT_TASK_ID":"Id Compito Padre:","LBL_PRIORITY":"Priorit\u00e0:","LBL_MILESTONE_FLAG":"Compito Fondamentale:","LBL_ORDER_NUMBER":"Ordine:","LBL_TASK_NUMBER":"Numero Compito:","LBL_ESTIMATED_EFFORT":"Sforzo Stimato (ore):","LBL_ACTUAL_EFFORT":"Sforzo Effettivo (ore):","LBL_UTILIZATION":"Utilizzo (%):","LBL_PARENT_NAME":"Nome Progetto","LBL_ASSIGNED_USER_NAME":"Assegnato A","NEW":null}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a","LBL_NUMBER":"Numero:","LBL_TYPE":"Tipo","LBL_STATUS":"Stato:","LBL_PRIORITY":"Priorit\u00e0:","LBL_RESOLUTION":"Soluzione:","LBL_WORK_LOG":"Work Log","LBL_ACCOUNT_NAME":"Nome azienda:","LBL_ACCOUNT_ID":"ID Azienda","NEW":"Nuovo Reclamo"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Nome utente","LBL_FIRST_NAME":"Nome","LBL_LAST_NAME":"Cognome","LBL_DEPARTMENT":"Dipartimento","LBL_MOBILE_PHONE":"Telefono Cellulare","LBL_EMAIL":"Email","NEW":"Nuovo Utente"}'); \ No newline at end of file +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Nome:","LBL_DATE_ENTERED":"Data Inserimento:","LBL_DATE_MODIFIED":"Data Modifica:","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_TYPE":"Tipo:","LBL_INDUSTRY":"Settore:","LBL_FAX":"Fax:","LBL_BILLING_ADDRESS_STREET":"Via di Fatturazione:","LBL_BILLING_ADDRESS_CITY":"Comune di Fatturazione:","LBL_BILLING_ADDRESS_STATE":"Provincia di Fatturazione:","LBL_BILLING_ADDRESS_POSTALCODE":"CAP di Fatturazione:","LBL_BILLING_ADDRESS_COUNTRY":"Nazione di Fatturazione:","LBL_PHONE_OFFICE":"Telefono Ufficio:","LBL_WEBSITE":"Sito web:","LBL_SHIPPING_ADDRESS_STREET":"Spedizione, Via:","LBL_SHIPPING_ADDRESS_CITY":"Spedizione, Comune:","LBL_SHIPPING_ADDRESS_STATE":"Spedizione, Provincia:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Spedizione, CAP:","LBL_SHIPPING_ADDRESS_COUNTRY":"Spedizione, Nazione:","LBL_EMAIL":"Email:","LBL_BILLING_ADDRESS":"Indirizzo di Fatturazione:","LBL_SHIPPING_ADDRESS":"Indirizzo di Spedizione:","LBL_CONTACTS":"Contatti","LBL_OPPORTUNITY":"Opportunit\u00e0","LBL_CALLS":"Chiamate","LBL_MEETINGS":"Riunioni","LBL_TASKS":"Istruzioni","LBL_LEADS":"Leads","LBL_NOTES":"Note","NEW":"Nuova Azienda"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Data Modifica:","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_FIRST_NAME":"Nome:","LBL_LAST_NAME":"Cognome:","LBL_TITLE":"Funzione:","LBL_DEPARTMENT":"Divisione:","LBL_HOME_PHONE":"Home:","LBL_MOBILE_PHONE":"Telefono Cellulare:","LBL_OFFICE_PHONE":"Telefono Ufficio:","LBL_FAX_PHONE":"Fax:","LBL_EMAIL_ADDRESS":"Email:","LBL_PRIMARY_ADDRESS_STREET":"Indirizzo Primario, Via:","LBL_PRIMARY_ADDRESS_CITY":"Indirizzo Primario, Comune:","LBL_PRIMARY_ADDRESS_STATE":"Indirizzo Primario, Provincia:","LBL_PRIMARY_ADDRESS_POSTALCODE":"Indirizzo Primario, CAP:","LBL_PRIMARY_ADDRESS_COUNTRY":"Indirizzo Primario, Nazione:","LBL_ALT_ADDRESS_STREET":"Indirizzo Alternativo, Via:","LBL_ALT_ADDRESS_CITY":"Indirizzo Alternativo, Comune:","LBL_ALT_ADDRESS_STATE":"Indirizzo Alternativo, Provincia:","LBL_ALT_ADDRESS_POSTALCODE":"Indirizzo Alternativo, CAP:","LBL_ALT_ADDRESS_COUNTRY":"Indirizzo Alternativo, Nazione:","LBL_ACCOUNT_NAME":"Nome azienda:","LBL_PRIMARY_ADDRESS":"Indirizzo principale:","LBL_ALT_ADDRESS":"Altro Indirizzo:","LBL_CALLS":"Chiamate","LBL_MEETINGS":"Riunioni","LBL_TASKS":"Istruzioni","LBL_OPPORTUNITIES":"Opportunit\u00e0","LBL_NOTES":"Note","NEW":"Nuovo Contatto"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Nome Opportunit\u00e0:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_ACCOUNT_NAME":"Nome Azienda:","LBL_AMOUNT":"Importo Opportunit\u00e0:","LBL_AMOUNT_USDOLLAR":"Importo:","LBL_DATE_CLOSED":"Data Chiusura Prevista:","LBL_SALES_STAGE":"Fase di Vendita:","LBL_CONTACTS":"Contatti","LBL_CALLS":"Chiamate","LBL_MEETINGS":"Riunioni","LBL_TASKS":"Istruzioni","LBL_LEADS":"Leads","LBL_NOTES":"Note","NEW":"Nuova Opportunit\u00e0"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_FIRST_NAME":"Nome:","LBL_LAST_NAME":"Cognome:","LBL_TITLE":"Funzione:","LBL_MOBILE_PHONE":"Telefono Cellulare:","LBL_OFFICE_PHONE":"Telefono Ufficio:","LBL_EMAIL_ADDRESS":"Indirizzo Email:","LBL_PRIMARY_ADDRESS_STREET":"Indirizzo Primario, Via","LBL_PRIMARY_ADDRESS_CITY":"Indirizzo Primario, Comune","LBL_PRIMARY_ADDRESS_STATE":"Indirizzo Primario, Provincia","LBL_PRIMARY_ADDRESS_POSTALCODE":"Indirizzo Primario, CAP","LBL_PRIMARY_ADDRESS_COUNTRY":"Indirizzo Primario, Nazione","LBL_ALT_ADDRESS_STREET":"Alt Indirizzo, Via","LBL_ALT_ADDRESS_CITY":"Alt Indirizzo, Comune","LBL_ALT_ADDRESS_STATE":"Alt Indirizzo, Provincia","LBL_ALT_ADDRESS_POSTALCODE":"Alt Indirizzo, CAP","LBL_ALT_ADDRESS_COUNTRY":"Alt Indirizzo, Nazione","LBL_STATUS":"Stato:","LBL_ACCOUNT_NAME":"Nome azienda:","LBL_PRIMARY_ADDRESS":"Indirizzo principale:","LBL_ALT_ADDRESS":"Altro Indirizzo:","LBL_CALLS":"Chiamate","LBL_MEETINGS":"Riunioni","LBL_TASKS":"Istruzioni","LBL_NOTES":"Note","NEW":"Nuovo Lead"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_DURATION_HOURS":"Durata Ore:","LBL_DURATION_MINUTES":"Durata Minuti:","LBL_DATE":"Data Inizio:","LBL_LIST_RELATED_TO":"Relativo a","LBL_STATUS":"Stato:","LBL_DIRECTION":"Direzione","LNK_NEW_CALL":"Nuova Chiamata","LBL_CONTACTS":"Contatti","LBL_USERS":"Users","LBL_LEADS":"Leads","LBL_NOTES":"Note","NEW":"Nuova Chiamata"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_DURATION_HOURS":"Ore di Durata:","LBL_DURATION_MINUTES":"Minuti di Durata:","LBL_DATE":"Data Inizio:","LBL_STATUS":"Stato:","LBL_LIST_RELATED_TO":"Relativo a","LBL_CONTACTS":"Contatti","LBL_USERS":"Users","LBL_LEADS":"Leads","LBL_NOTES":"Note","NEW":"Nuova Riunione"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a:","LBL_STATUS":"Stato:","LBL_DUE_DATE":"Data Scadenza:","LBL_START_DATE":"Data Inizio:","LBL_LIST_RELATED_TO":"Collegato a","LBL_CONTACT_NAME":"Nome Contatto:","LBL_PRIORITY":"Priorit\u00e0:","LNK_NEW_TASK":"Nuovo Compito","LBL_NOTES":"Note","NEW":"Nuovo Compito"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Oggetto:","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Descrizione:","LBL_ASSIGNED_TO_NAME":"Assegnato a","LBL_NUMBER":"Numero:","LBL_TYPE":"Tipo","LBL_STATUS":"Stato:","LBL_PRIORITY":"Priorit\u00e0:","LBL_ACCOUNT_NAME":"Nome azienda:","LBL_TASKS":"Istruzioni","LBL_NOTES":"Note","LBL_MEETINGS":"Riunioni","LBL_CALLS":"Chiamate","LBL_CONTACTS":"Contatti","LBL_PROJECTS":"Progetti","NEW":"Nuovo Reclamo"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Data Inserimento:","LBL_DATE_MODIFIED":"Data Modifica:","LBL_NAME":"Nome:","LBL_DESCRIPTION":"Descrizione:","LBL_DATE_START":"Data Inizio:","LBL_DATE_END":"Data Fine:","LBL_STATUS":"Stato:","LBL_PRIORITY":"Priorit\u00e0:","LBL_ASSIGNED_USER_NAME":"Assegnato a:","LBL_PROJECT_TASKS":"Compiti di progetto","LBL_NOTES":"Note","NEW":"Nuovo Progetto"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Data Inserimento:","LBL_DATE_MODIFIED":"Data Modifica:","LBL_NAME":"Nome:","LBL_STATUS":"Stato:","LBL_DESCRIPTION":"Descrizione:","LBL_PERCENT_COMPLETE":"Progresso (%):","LBL_PRIORITY":"Priorit\u00e0:","LBL_PARENT_NAME":"Nome Progetto","LBL_ASSIGNED_USER_NAME":"Assegnato A","LBL_NOTES":"Note","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DATE_ENTERED":"Data Creazione","LBL_DATE_MODIFIED":"Data Modifica","LBL_NOTE_SUBJECT":"Oggetto della Nota:","LBL_FILENAME":"Allegato:","LBL_DESCRIPTION":"Note","NEW":"Nuova Nota o Allegato"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Nome utente","LBL_FIRST_NAME":"Nome","LBL_LAST_NAME":"Cognome","LBL_DEPARTMENT":"Dipartimento","LBL_MOBILE_PHONE":"Telefono Cellulare","LBL_EMAIL":"Email","NEW":"Nuovo Utente"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"Nome Prodotto","LBL_DATE_ENTERED":"Inserito il","LBL_DATE_MODIFIED":"Modificato il","LBL_ASSIGNED_TO_NAME":"Assegnato a","LBL_CATEGORY":"Nome Categoria","LBL_PRICE":"Prezzo","NEW":null}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_lt_LT.js b/mobile/fielddefs/modules_lt_LT.js new file mode 100644 index 00000000000..cc3e5b66cf0 --- /dev/null +++ b/mobile/fielddefs/modules_lt_LT.js @@ -0,0 +1 @@ +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Vardas:","LBL_DATE_ENTERED":"Sukurta:","LBL_DATE_MODIFIED":"Redaguota:","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas:","LBL_FAX":"Faksas:","LBL_BILLING_ADDRESS_STREET":"Registracijos adreso gatv\u0117:","LBL_BILLING_ADDRESS_CITY":"Registracijos adreso miestas:","LBL_BILLING_ADDRESS_STATE":"Registracijos adreso rajonas:","LBL_BILLING_ADDRESS_POSTALCODE":"Registracijos adreso pa\u0161to kodas:","LBL_BILLING_ADDRESS_COUNTRY":"Registracijos adreso \u0161alis:","LBL_PHONE_OFFICE":"Darboviet\u0117s telefonas:","LBL_WEBSITE":"Tinklapis:","LBL_SHIPPING_ADDRESS_STREET":"Veiklos adreso gatv\u0117:","LBL_SHIPPING_ADDRESS_CITY":"Veiklos adreso miestas:","LBL_SHIPPING_ADDRESS_STATE":"Veiklos adreso regionas:","LBL_SHIPPING_ADDRESS_POSTALCODE":"Veiklos adreso pa\u0161to kodas:","LBL_SHIPPING_ADDRESS_COUNTRY":"Veiklos adreso \u0161alis:","LBL_EMAIL":"El. pa\u0161tas:","LBL_BILLING_ADDRESS":"Registracijos adresas:","LBL_SHIPPING_ADDRESS":"Veiklos adresas:","LBL_CONTACTS":"Kontaktai","LBL_OPPORTUNITY":"Pardavimas","LBL_CALLS":"Skambu\u010diai","LBL_MEETINGS":"Susitikimai","LBL_TASKS":"U\u017eduotys","LBL_LEADS":"Potencial\u016bs kontaktai","LBL_NOTES":"U\u017era\u0161ai","NEW":"Sukurti klient\u0105"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redagavimo data:","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas:","LBL_FIRST_NAME":"Vardas:","LBL_LAST_NAME":"Pavard\u0117","LBL_TITLE":"Pareigyb\u0117s","LBL_MOBILE_PHONE":"Mobilus:","LBL_OFFICE_PHONE":"Telefonas:","LBL_EMAIL_ADDRESS":"El. pa\u0161tas:","LBL_PRIMARY_ADDRESS_STREET":"Pagrindinio adreso gatv\u0117:","LBL_PRIMARY_ADDRESS_CITY":"Pagrindinio adreso miestas:","LBL_PRIMARY_ADDRESS_STATE":"Pagrindinio adreso rajonas","LBL_PRIMARY_ADDRESS_POSTALCODE":"Pagrindinio adreso pa\u0161to kodas:","LBL_PRIMARY_ADDRESS_COUNTRY":"Pagrindinio adreso \u0161alis:","LBL_ALT_ADDRESS_STREET":"Kita adreso gatv\u0117:","LBL_ALT_ADDRESS_CITY":"Kitas adreso miestas:","LBL_ALT_ADDRESS_STATE":"Kitas adreso rajonas","LBL_ALT_ADDRESS_POSTALCODE":"Kitas adreso pa\u0161to kodas:","LBL_ALT_ADDRESS_COUNTRY":"Kita adreso \u0161alis:","LBL_ACCOUNT_NAME":"Kliento pavadinimas:","LBL_PRIMARY_ADDRESS":"Pagrindinis adresas:","LBL_ALT_ADDRESS":"Kitas adresas:","LBL_CALLS":"Skambu\u010diai","LBL_MEETINGS":"Susitikimai","LBL_TASKS":"U\u017eduotys","LBL_OPPORTUNITIES":"Pardavimai","LBL_NOTES":"U\u017era\u0161ai","NEW":"Sukurti kontakt\u0105"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Pardavimo pavadinimas:","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redaguota","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas:","LBL_ACCOUNT_NAME":"Kliento vardas:","LBL_AMOUNT":"Suma:","LBL_DATE_CLOSED":"Pardavimo data:","LBL_SALES_STAGE":"Pardavimo etapas:","LBL_CONTACTS":"Kontaktai","LBL_CALLS":"Skambu\u010diai","LBL_MEETINGS":"Susitikimai","LBL_TASKS":"U\u017eduotys","LBL_LEADS":"Potencial\u016bs kontaktai","LBL_NOTES":"U\u017era\u0161ai","NEW":"Sukurti pardavim\u0105"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redaguota","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas","LBL_FIRST_NAME":"Vardas:","LBL_LAST_NAME":"Pavard\u0117:","LBL_TITLE":"Pareigos:","LBL_MOBILE_PHONE":"Mobilus:","LBL_OFFICE_PHONE":"Darboviet\u0117s telefonas:","LBL_EMAIL_ADDRESS":"El. pa\u0161tas:","LBL_PRIMARY_ADDRESS_STREET":"Pagrindinio adreso gatv\u0117","LBL_PRIMARY_ADDRESS_CITY":"Miestas","LBL_PRIMARY_ADDRESS_STATE":"Pagrindinio adreso rajonas","LBL_PRIMARY_ADDRESS_POSTALCODE":"Pagrindinio adreso pa\u0161to kodas","LBL_PRIMARY_ADDRESS_COUNTRY":"Pagrindinio adreso \u0161alis","LBL_ALT_ADDRESS_STREET":"Kito adreso gatv\u0117","LBL_ALT_ADDRESS_CITY":"Kito adreso miestas","LBL_ALT_ADDRESS_STATE":"Kito adreso rajonas","LBL_ALT_ADDRESS_POSTALCODE":"Kito adreso pa\u0161to kodas","LBL_ALT_ADDRESS_COUNTRY":"Kito adreso \u0161alis","LBL_STATUS":"Statusas:","LBL_ACCOUNT_NAME":"\u012emon\u0117s pavadinimas:","LBL_PRIMARY_ADDRESS":"Pagrindinio adresas:","LBL_ALT_ADDRESS":"Kitas adresas:","LBL_CALLS":"Skambu\u010diai","LBL_MEETINGS":"Susitikimai","LBL_TASKS":"U\u017eduotys","LBL_NOTES":"U\u017era\u0161ai","NEW":"Sukurti potencial\u0173 kontakt\u0105"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Tema:","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redaguota","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas","LBL_DURATION_HOURS":"Trukm\u0117 valandomis:","LBL_DURATION_MINUTES":"Trukm\u0117 minut\u0117mis:","LBL_DATE":"Prad\u017eios laikas:","LBL_LIST_RELATED_TO":"Susij\u0119s su","LBL_STATUS":"Statusas:","LBL_DIRECTION":"Kryptis:","LNK_NEW_CALL":"Suplanuoti skambut\u012f","LBL_CONTACTS":"Kontaktai","LBL_USERS":"Vartotojai","LBL_LEADS":"Potencial\u016bs kontaktai","LBL_NOTES":"U\u017era\u0161ai","NEW":"Suplanuoti skambut\u012f"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Tema:","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redaguota","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas:","LBL_DURATION_HOURS":"Trukm\u0117 valandomis:","LBL_DURATION_MINUTES":"Trukm\u0117 minut\u0117mis:","LBL_DATE":"Prad\u017eios data:","LBL_STATUS":"Statusas:","LBL_LIST_RELATED_TO":"Susij\u0119s su","LBL_CONTACTS":"Kontaktai","LBL_USERS":"Vartotojai","LBL_LEADS":"Potencial\u016bs kontaktai","LBL_NOTES":"U\u017era\u0161ai","NEW":"Suplanuoti susitikim\u0105"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Tema:","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redaguota","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas","LBL_STATUS":"Statusas:","LBL_DUE_DATE":"Atlikimo data:","LBL_START_DATE":"Prad\u017eios data:","LBL_LIST_RELATED_TO":"Susij\u0119 su","LBL_CONTACT_NAME":"Kontakto vardas:","LBL_PRIORITY":"Svarba:","LNK_NEW_TASK":"Sukurti u\u017eduot\u012f","LBL_NOTES":"U\u017era\u0161ai","NEW":"Sukurti u\u017eduot\u012f"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Tema:","LBL_DATE_ENTERED":"Sukurta:","LBL_DATE_MODIFIED":"Redaguota:","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_ASSIGNED_TO_NAME":"Atsakingas","LBL_NUMBER":"Numeris:","LBL_STATUS":"Statusas:","LBL_PRIORITY":"Svarba:","LBL_ACCOUNT_NAME":"Kliento vardas:","LBL_TASKS":"U\u017eduotys","LBL_NOTES":"U\u017era\u0161ai","LBL_MEETINGS":"Susitikimai","LBL_CALLS":"Skambu\u010diai","LBL_CONTACTS":"Kontaktai","LBL_PROJECTS":"Projektai","NEW":"Sukurti aptarnavim\u0105"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Suk\u016brimo data:","LBL_DATE_MODIFIED":"Redaguota:","LBL_NAME":"Pavadinimas:","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_STATUS":"Statusas:","LBL_PRIORITY":"Svarba:","LBL_ASSIGNED_USER_NAME":"Atsakingas:","LBL_PROJECT_TASKS":"Projekto u\u017eduotys","LBL_NOTES":"U\u017era\u0161ai","NEW":"Sukurti projekt\u0105"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Sukurta:","LBL_DATE_MODIFIED":"Redaguota:","LBL_NAME":"Pavadinimas:","LBL_STATUS":"Statusas:","LBL_DESCRIPTION":"Apra\u0161ymas:","LBL_PRIORITY":"Svarba:","LBL_PARENT_NAME":"Projekto pavadinimas","LBL_ASSIGNED_USER_NAME":"Atsakingas","LBL_NOTES":"U\u017era\u0161ai","NEW":"+"}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Atsakingas","LBL_DATE_ENTERED":"Sukurta","LBL_DATE_MODIFIED":"Redaguota","LBL_NOTE_SUBJECT":"U\u017era\u0161o tema:","LBL_FILENAME":"Prisegtukas:","LBL_DESCRIPTION":"Apra\u0161ymas","NEW":"Sukurti u\u017era\u0161\u0105"}'); diff --git a/mobile/fielddefs/modules_nl_nl.js b/mobile/fielddefs/modules_nl_nl.js new file mode 100644 index 00000000000..63207f398e8 --- /dev/null +++ b/mobile/fielddefs/modules_nl_nl.js @@ -0,0 +1 @@ +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"Naam","LBL_DATE_ENTERED":"Datum ingevoerd","LBL_DATE_MODIFIED":"Datum gewijzigd","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_INDUSTRY":"Industrie","LBL_FAX":"Fax","LBL_BILLING_ADDRESS_STREET":"Postadres Straat","LBL_BILLING_ADDRESS_CITY":"Postadres Plaats","LBL_BILLING_ADDRESS_STATE":"Postadres Staat","LBL_BILLING_ADDRESS_POSTALCODE":"Postadres Postcode","LBL_BILLING_ADDRESS_COUNTRY":"Postadres Land","LBL_PHONE_OFFICE":"Zakelijk telefoonnummer","LBL_WEBSITE":"Website","LBL_EMAIL":"E-mail adres","LBL_BILLING_ADDRESS":"Postadres","LBL_SHIPPING_ADDRESS":"Bezoekadres","LBL_CONTACTS":"Personen","LBL_OPPORTUNITY":"Opportunity","LBL_CALLS":"Telefoongesprekken","LBL_MEETINGS":"Meetings","LBL_TASKS":"Taken","LBL_LEADS":"Leads","LBL_MEMBERS":"Members","LBL_NOTES":"Notities","NEW":"Persoon toevoegen"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Datum gewijzigd","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_FIRST_NAME":"Voornaam","LBL_LAST_NAME":"Achternaam","LBL_TITLE":"Titel","LBL_MOBILE_PHONE":"Mobiele telefoon","LBL_OFFICE_PHONE":"Zakelijk telefoonnummer","LBL_EMAIL_ADDRESS":"E-mail adres","LBL_PRIMARY_ADDRESS_STREET":"Primair adres Straat","LBL_PRIMARY_ADDRESS_CITY":"Primair adres Plaats","LBL_PRIMARY_ADDRESS_STATE":"Primair adres Staat","LBL_PRIMARY_ADDRESS_POSTALCODE":"Primair adres Postcode","LBL_PRIMARY_ADDRESS_COUNTRY":"Primair adres Land","LBL_ACCOUNT_NAME":"Organisatienaam","LBL_VIP":"VIP","LBL_PRIMARY_ADDRESS":"Primair adres","LBL_ALT_ADDRESS":"Ander adres","LBL_CALLS":"Telefoongesprekken","LBL_MEETINGS":"Meetings","LBL_TASKS":"Taken","LBL_OPPORTUNITIES":"Opportunities","LBL_NOTES":"Notities","NEW":"Maak Persoon aan"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"Opportunitynaam","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_ACCOUNT_NAME":"Organisatienaam","LBL_AMOUNT":"Opportunity bedrag","LBL_DATE_CLOSED":"Verwachte sluitingsdatum","LBL_SALES_STAGE":"Verkoopstadium","LBL_CONTACTS":"Personen","LBL_CALLS":"Telefoongesprekken","LBL_MEETINGS":"Meetings","LBL_TASKS":"Taken","LBL_LEADS":"Leads","LBL_NOTES":"Notities","NEW":"Maak Opportunity aan"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_FIRST_NAME":"Voornaam","LBL_LAST_NAME":"Achternaam","LBL_TITLE":"Titel","LBL_MOBILE_PHONE":"Mobiele telefoon","LBL_OFFICE_PHONE":"Zakelijk telefoonnummer","LBL_EMAIL_ADDRESS":"E-mail adres","LBL_PRIMARY_ADDRESS_STREET":"Primair adres Straat","LBL_PRIMARY_ADDRESS_CITY":"Primair adres Plaats","LBL_PRIMARY_ADDRESS_STATE":"Primair adres Staat","LBL_PRIMARY_ADDRESS_POSTALCODE":"Primair adres Postcode","LBL_PRIMARY_ADDRESS_COUNTRY":"Primair adres Land","LBL_ALT_ADDRESS_STREET":"Primair adres Straat","LBL_ALT_ADDRESS_CITY":"Alternatief adres Plaats","LBL_ALT_ADDRESS_STATE":"Alternatief adres Staat","LBL_ALT_ADDRESS_POSTALCODE":"Alternatief adres Postcode","LBL_ALT_ADDRESS_COUNTRY":"Alternatief adres Land","LBL_LEAD_SOURCE":"Leadbron","LBL_STATUS":"Status","LBL_ACCOUNT_NAME":"Organisatienaam","LBL_PRIMARY_ADDRESS":"Primair adres","LBL_ALT_ADDRESS":"Ander adres","LBL_CALLS":"Telefoongesprekken","LBL_MEETINGS":"Meetings","LBL_TASKS":"Taken","LBL_NOTES":"Notities","NEW":"Maak Lead aan"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"Onderwerp","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_DURATION_HOURS":"Duur in uren","LBL_DURATION_MINUTES":"Duur in minuten","LBL_DATE":"Startdatum","LBL_LIST_RELATED_TO":"Gerelateerd aan","LBL_STATUS":"Status","LBL_DIRECTION":"Richting","LNK_NEW_CALL":"Leg Telefoongesprek vast","LBL_CONTACTS":"Personen","LBL_USERS":"Gebruikers","LBL_LEADS":"Leads","LBL_NOTES":"Notities","NEW":"Leg Telefoongesprek vast"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"Onderwerp","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_DURATION_HOURS":"Duur in uren","LBL_DURATION_MINUTES":"Duur in minuten","LBL_DATE":"Startdatum","LBL_STATUS":"Status","LBL_LIST_RELATED_TO":"Gerelateerd aan","LBL_CONTACTS":"Personen","LBL_USERS":"Gebruikers","LBL_LEADS":"Leads","LBL_NOTES":"Notities","NEW":"Plan Afspraak"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"Onderwerp","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_STATUS":"Status","LBL_DUE_DATE":"Vervaldatum","LBL_START_DATE":"Startdatum","LBL_LIST_RELATED_TO":"Gerelateerd aan","LBL_CONTACT_NAME":"Naam Persoon","LBL_PRIORITY":"Prioriteit","LNK_NEW_TASK":"Maak Taak aan","LBL_NOTES":"Notities","NEW":"Maak Taak aan"}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"Assigned to","LBL_DATE_ENTERED":"Datum ingevoerd","LBL_DATE_MODIFIED":"Datum gewijzigd","LBL_NOTE_SUBJECT":"Onderwerp","LBL_FILENAME":"Bijlagen","LBL_DESCRIPTION":"Notitie","NEW":"Maak een Notitie aan of voeg een Bijlage toe"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"Onderwerp","LBL_DATE_ENTERED":"Date Created:","LBL_DATE_MODIFIED":"Date Modified:","LBL_DESCRIPTION":"Beschrijving","LBL_ASSIGNED_TO_NAME":"Toegewezen aan","LBL_NUMBER":"Nummer","LBL_STATUS":"Status","LBL_PRIORITY":"Prioriteit","LBL_ACCOUNT_NAME":"Organisatienaam","LBL_TASKS":"Taken","LBL_NOTES":"Notities","LBL_MEETINGS":"Meetings","LBL_CALLS":"Telefoongesprekken","LBL_CONTACTS":"Personen","LBL_PROJECTS":"Projecten","NEW":"Maak Case aan"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Datum ingevoerd","LBL_DATE_MODIFIED":"Datum gewijzigd","LBL_NAME":"Naam","LBL_DESCRIPTION":"Beschrijving","LBL_DATE_START":"Startdatum","LBL_DATE_END":"Einddatum","LBL_STATUS":"Status","LBL_PRIORITY":"Prioriteit","LBL_ASSIGNED_USER_NAME":"Toegewezen aan","LBL_PROJECT_TASKS":"Projecttaken","LBL_NOTES":"Notities","NEW":"Maak Project aan"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"Datum ingevoerd","LBL_DATE_MODIFIED":"Datum gewijzigd","LBL_NAME":"Naam","LBL_STATUS":"Status","LBL_DESCRIPTION":"Beschrijving","LBL_DATE_START":"Startdatum","LBL_DATE_FINISH":"Voltooiingsdatum","LBL_PRIORITY":"Prioriteit","LBL_PARENT_NAME":"Projectnaam","LBL_ASSIGNED_USER_NAME":"Toegewezen aan","LBL_NOTES":"Notities","NEW":null}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"Gebruikersnaam","LBL_FIRST_NAME":"Voornaam","LBL_LAST_NAME":"Achternaam","LBL_DEPARTMENT":"Afdeling","LBL_MOBILE_PHONE":"Mobiele telefoon","LBL_EMAIL":"E-mail adres","NEW":"Maak nieuwe gebruiker aan"}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_zh_cn.js b/mobile/fielddefs/modules_zh_cn.js new file mode 100644 index 00000000000..7704f45e71a --- /dev/null +++ b/mobile/fielddefs/modules_zh_cn.js @@ -0,0 +1 @@ +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"\u540d\u79f0:","LBL_DATE_ENTERED":"\u8f93\u5165\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba\u7528\u6237\u59d3\u540d","LBL_TYPE":"\u7c7b\u578b:","LBL_INDUSTRY":"\u884c\u4e1a:","LBL_FAX":"\u4f20\u771f:","LBL_BILLING_ADDRESS_STREET":"[\u4ed8\u6b3e\u5730\u5740]\u8857\u9053:","LBL_BILLING_ADDRESS_CITY":"[\u4ed8\u6b3e\u5730\u5740]\u57ce\u5e02:","LBL_BILLING_ADDRESS_STATE":"[\u4ed8\u6b3e\u5730\u5740]\u7701\u4efd:","LBL_BILLING_ADDRESS_POSTALCODE":"[\u4ed8\u6b3e\u5730\u5740]\u90ae\u7f16:","LBL_BILLING_ADDRESS_COUNTRY":"[\u4ed8\u6b3e\u5730\u5740]\u56fd\u5bb6:","LBL_PHONE_OFFICE":"\u5ba2\u6237\u7535\u8bdd:","LBL_WEBSITE":"\u7f51\u7ad9:","LBL_SHIPPING_ADDRESS_STREET":"[\u6536\u8d27\u5730\u5740]\u8857\u9053:","LBL_SHIPPING_ADDRESS_CITY":"[\u6536\u8d27\u5730\u5740]\u57ce\u5e02:","LBL_SHIPPING_ADDRESS_STATE":"[\u6536\u8d27\u5730\u5740]\u7701\u4efd:","LBL_SHIPPING_ADDRESS_POSTALCODE":"[\u6536\u8d27\u5730\u5740]\u90ae\u7f16:","LBL_SHIPPING_ADDRESS_COUNTRY":"[\u6536\u8d27\u5730\u5740]\u56fd\u5bb6:","LBL_EMAIL":"\u7535\u5b50\u90ae\u4ef6:","LBL_BILLING_ADDRESS":"\u4ed8\u6b3e\u5730\u5740:","LBL_SHIPPING_ADDRESS":"\u6536\u8d27\u5730\u5740:","LBL_CONTACTS":"\u8054\u7cfb\u4eba\u6863\u6848","LBL_OPPORTUNITY":"\u5546\u4e1a\u673a\u4f1a","LBL_CALLS":"\u7535\u8bdd","LBL_MEETINGS":"\u4f1a\u8bae","LBL_TASKS":"\u4efb\u52a1","LBL_LEADS":"\u6f5c\u5728\u5ba2\u6237","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u65b0\u589e\u5ba2\u6237"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba\u7528\u6237\u59d3\u540d:","LBL_FIRST_NAME":"\u540d:","LBL_LAST_NAME":"\u59d3:","LBL_TITLE":"\u804c\u79f0:","LBL_DEPARTMENT":"\u90e8\u95e8:","LBL_HOME_PHONE":"\u5bb6\u5ead\u7535\u8bdd:","LBL_MOBILE_PHONE":"\u79fb\u52a8\u7535\u8bdd:","LBL_OFFICE_PHONE":"\u529e\u516c\u7535\u8bdd:","LBL_FAX_PHONE":"\u4f20\u771f:","LBL_EMAIL_ADDRESS":"\u7535\u5b50\u90ae\u4ef6:","LBL_PRIMARY_ADDRESS_STREET":"[\u4e3b\u8981\u4f4f\u5740]\u8857\u9053:","LBL_PRIMARY_ADDRESS_CITY":"[\u4e3b\u8981\u4f4f\u5740]\u57ce\u5e02:","LBL_PRIMARY_ADDRESS_STATE":"[\u4e3b\u8981\u4f4f\u5740]\u7701\u4efd:","LBL_PRIMARY_ADDRESS_POSTALCODE":"[\u4e3b\u8981\u4f4f\u5740]\u90ae\u7f16:","LBL_PRIMARY_ADDRESS_COUNTRY":"[\u4e3b\u8981\u4f4f\u5740]\u56fd\u5bb6:","LBL_ALT_ADDRESS_STREET":"[\u5176\u5b83\u5730\u5740]\u8857\u9053:","LBL_ALT_ADDRESS_CITY":"[\u5176\u5b83\u5730\u5740]\u57ce\u5e02:","LBL_ALT_ADDRESS_STATE":"[\u5176\u5b83\u5730\u5740]\u7701\u4efd:","LBL_ALT_ADDRESS_POSTALCODE":"[\u5176\u5b83\u5730\u5740]\u90ae\u7f16:","LBL_ALT_ADDRESS_COUNTRY":"[\u5176\u5b83\u5730\u5740]\u56fd\u5bb6:","LBL_ACCOUNT_NAME":"\u5ba2\u6237\u540d\u79f0:","LBL_PRIMARY_ADDRESS":"\u4e3b\u8981\u5730\u5740:","LBL_ALT_ADDRESS":"\u5176\u5b83\u5730\u5740:","LBL_CALLS":"\u7535\u8bdd","LBL_MEETINGS":"\u4f1a\u8bae","LBL_TASKS":"\u4efb\u52a1","LBL_OPPORTUNITIES":"\u5546\u4e1a\u673a\u4f1a","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u65b0\u589e\u8054\u7cfb\u4eba"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"\u5546\u4e1a\u673a\u4f1a\u540d\u79f0:","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba\u7528\u6237\u59d3\u540d:","LBL_ACCOUNT_NAME":"\u5ba2\u6237\u540d\u79f0:","LBL_AMOUNT":"\u91d1\u989d:","LBL_AMOUNT_USDOLLAR":"\u91d1\u989d USD:","LBL_DATE_CLOSED":"\u5b8c\u6210\u65e5\u671f:","LBL_SALES_STAGE":"\u9500\u552e\u9636\u6bb5:","LBL_CONTACTS":"\u8054\u7cfb\u4eba\u6863\u6848","LBL_CALLS":"\u7535\u8bdd","LBL_MEETINGS":"\u4f1a\u8bae","LBL_TASKS":"\u4efb\u52a1","LBL_LEADS":"\u6f5c\u5728\u5ba2\u6237","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u65b0\u589e\u5546\u4e1a\u673a\u4f1a"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba\u59d3\u540d","LBL_FIRST_NAME":"\u540d:","LBL_LAST_NAME":"\u59d3:","LBL_TITLE":"\u804c\u79f0:","LBL_MOBILE_PHONE":"\u79fb\u52a8\u7535\u8bdd:","LBL_OFFICE_PHONE":"\u529e\u516c\u7535\u8bdd:","LBL_EMAIL_ADDRESS":"\u7535\u5b50\u90ae\u4ef6:","LBL_PRIMARY_ADDRESS_STREET":"[\u4e3b\u8981\u4f4f\u5740]\u8857\u9053","LBL_PRIMARY_ADDRESS_CITY":"[\u4e3b\u8981\u4f4f\u5740]\u57ce\u5e02","LBL_PRIMARY_ADDRESS_STATE":"[\u4e3b\u8981\u4f4f\u5740]\u7701\u4efd","LBL_PRIMARY_ADDRESS_POSTALCODE":"[\u4e3b\u8981\u4f4f\u5740]\u90ae\u7f16","LBL_PRIMARY_ADDRESS_COUNTRY":"[\u4e3b\u8981\u4f4f\u5740]\u56fd\u5bb6","LBL_ALT_ADDRESS_STREET":"[\u5176\u5b83\u5730\u5740]\u8857\u9053","LBL_ALT_ADDRESS_CITY":"[\u5176\u5b83\u4f4f\u5740]\u57ce\u5e02","LBL_ALT_ADDRESS_STATE":"[\u5176\u5b83\u5730\u5740]\u7701\u4efd","LBL_ALT_ADDRESS_POSTALCODE":"[\u5176\u5b83\u5730\u5740]\u90ae\u7f16","LBL_ALT_ADDRESS_COUNTRY":"[\u5176\u4ed6\u5730\u5740]\u56fd\u5bb6","LBL_STATUS":"\u72b6\u6001:","LBL_ACCOUNT_NAME":"\u5ba2\u6237\u540d\u79f0:","LBL_PRIMARY_ADDRESS":"\u4e3b\u8981\u5730\u5740:","LBL_ALT_ADDRESS":"\u5176\u5b83\u5730\u5740:","LBL_CALLS":"\u7535\u8bdd","LBL_MEETINGS":"\u4f1a\u8bae","LBL_TASKS":"\u4efb\u52a1","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u65b0\u589e\u6f5c\u5728\u5ba2\u6237"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u9898:","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba","LBL_DURATION_HOURS":"\u671f\u95f4(\u5c0f\u65f6):","LBL_DURATION_MINUTES":"\u671f\u95f4(\u5206\u949f):","LBL_DATE":"\u5f00\u59cb\u65e5\u671f:","LBL_LIST_RELATED_TO":"\u76f8\u5173","LBL_STATUS":"\u72b6\u6001:","LBL_DIRECTION":"\u65b9\u5411:","LNK_NEW_CALL":"\u5b89\u6392\u7535\u8bdd","LBL_CONTACTS":"\u8054\u7cfb\u4eba\u6863\u6848","LBL_USERS":"\u7528\u6237","LBL_LEADS":"\u6f5c\u5728\u5ba2\u6237","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u5b89\u6392\u7535\u8bdd"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u9898:","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba:","LBL_DURATION_HOURS":"\u671f\u95f4(\u5c0f\u65f6):","LBL_DURATION_MINUTES":"\u671f\u95f4(\u5206\u949f):","LBL_DATE":"\u5f00\u59cb\u65e5\u671f:","LBL_STATUS":"\u72b6\u6001:","LBL_LIST_RELATED_TO":"\u76f8\u5173","LBL_CONTACTS":"\u8054\u7cfb\u4eba\u6863\u6848","LBL_USERS":"\u7528\u6237","LBL_LEADS":"\u6f5c\u5728\u5ba2\u6237","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u5b89\u6392\u4f1a\u8bae"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u9898:","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba:","LBL_STATUS":"\u72b6\u6001:","LBL_DUE_DATE":"\u5b8c\u6210\u65e5\u671f:","LBL_START_DATE":"\u5f00\u59cb\u65e5\u671f:","LBL_LIST_RELATED_TO":"\u76f8\u5173","LBL_CONTACT_NAME":"\u8054\u7cfb\u4eba\u59d3\u540d:","LBL_PRIORITY":"\u4f18\u5148\u7ea7:","LNK_NEW_TASK":"\u65b0\u589e\u4efb\u52a1","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u65b0\u589e\u4efb\u52a1"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u9898:","LBL_DATE_ENTERED":"\u521d\u59cb\u5316\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_ASSIGNED_TO_NAME":"\u8d1f\u8d23\u4eba","LBL_NUMBER":"\u7f16\u53f7:","LBL_TYPE":"\u7c7b\u578b","LBL_STATUS":"\u72b6\u6001:","LBL_PRIORITY":"\u4f18\u5148\u7ea7:","LBL_ACCOUNT_NAME":"\u5ba2\u6237\u540d\u79f0:","LBL_TASKS":"\u4efb\u52a1","LBL_NOTES":"\u5907\u5fd8\u5f55","LBL_MEETINGS":"\u4f1a\u8bae","LBL_CALLS":"\u7535\u8bdd","LBL_CONTACTS":"\u8054\u7cfb\u4eba\u6863\u6848","LBL_PROJECTS":"\u9879\u76ee","NEW":"\u65b0\u589e\u5ba2\u6237\u53cd\u9988"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"\u8f93\u5165\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_NAME":"\u540d\u79f0:","LBL_DESCRIPTION":"\u63cf\u8ff0:","LBL_DATE_START":"\u5f00\u59cb\u65e5\u671f:","LBL_DATE_END":"\u7ed3\u675f\u65e5\u671f:","LBL_STATUS":"\u72b6\u6001:","LBL_PRIORITY":"\u4f18\u5148\u7ea7:","LBL_ASSIGNED_USER_NAME":"\u8d1f\u8d23\u4eba:","LBL_PROJECT_TASKS":"\u9879\u76ee\u4efb\u52a1","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":"\u521b\u5efa\u9879\u76ee"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"\u8f93\u5165\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_NAME":"\u540d\u79f0:","LBL_STATUS":"\u72b6\u6001:","LBL_DESCRIPTION":"\u8bf4\u660e:","LBL_PERCENT_COMPLETE":"\u8fdb\u5ea6(%):","LBL_PRIORITY":"\u4f18\u5148\u7ea7:","LBL_PARENT_NAME":"\u9879\u76ee\u540d\u79f0","LBL_ASSIGNED_USER_NAME":"\u8d1f\u8d23\u4eba","LBL_NOTES":"\u5907\u5fd8\u5f55","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"\u5206\u914d\u7528\u6237","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_NOTE_SUBJECT":"\u5907\u5fd8\u5f55\u4e3b\u9898:","LBL_FILENAME":"\u9644\u4ef6:","LBL_DESCRIPTION":"\u8bf4\u660e","NEW":"\u65b0\u589e\u5907\u5fd8\u5f55"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"\u7528\u6237\u540d","LBL_FIRST_NAME":"\u540d","LBL_LAST_NAME":"\u59d3","LBL_DEPARTMENT":"\u90e8\u95e8","LBL_MOBILE_PHONE":"\u624b\u673a","LBL_EMAIL":"\u7535\u5b50\u90ae\u4ef6\u5730\u5740","NEW":"\u65b0\u589e\u7528\u6237"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"\u59d3\u540d","LBL_DATE_ENTERED":"\u521b\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_ASSIGNED_TO_NAME":"\u5206\u914d\u7528\u6237","LBL_CATEGORY":"Category","LBL_PRICE":"Price","NEW":null}'); \ No newline at end of file diff --git a/mobile/fielddefs/modules_zh_tw.js b/mobile/fielddefs/modules_zh_tw.js new file mode 100644 index 00000000000..e7c62886d2a --- /dev/null +++ b/mobile/fielddefs/modules_zh_tw.js @@ -0,0 +1 @@ +var sugar_mod_strings={};sugar_mod_strings['Accounts'] = jQuery.parseJSON('{"":"","LBL_NAME":"\u540d\u7a31:","LBL_DATE_ENTERED":"\u8f38\u5165\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba\u7528\u6236\u59d3\u540d","LBL_TYPE":"\u985e\u578b:","LBL_INDUSTRY":"\u884c\u696d:","LBL_FAX":"\u50b3\u771f:","LBL_BILLING_ADDRESS_STREET":"[\u4ed8\u6b3e\u5730\u5740]\u8857\u9053:","LBL_BILLING_ADDRESS_CITY":"[\u4ed8\u6b3e\u5730\u5740]\u57ce\u5e02:","LBL_BILLING_ADDRESS_STATE":"[\u4ed8\u6b3e\u5730\u5740]\u7701\u4efd:","LBL_BILLING_ADDRESS_POSTALCODE":"[\u4ed8\u6b3e\u5730\u5740]\u90f5\u7de8:","LBL_BILLING_ADDRESS_COUNTRY":"[\u4ed8\u6b3e\u5730\u5740]\u570b\u5bb6:","LBL_PHONE_OFFICE":"\u5ba2\u6236\u96fb\u8a71:","LBL_WEBSITE":"\u7db2\u7ad9:","LBL_SHIPPING_ADDRESS_STREET":"[\u6536\u8ca8\u5730\u5740]\u8857\u9053:","LBL_SHIPPING_ADDRESS_CITY":"[\u6536\u8ca8\u5730\u5740]\u57ce\u5e02:","LBL_SHIPPING_ADDRESS_STATE":"[\u6536\u8ca8\u5730\u5740]\u7701\u4efd:","LBL_SHIPPING_ADDRESS_POSTALCODE":"[\u6536\u8ca8\u5730\u5740]\u90f5\u7de8:","LBL_SHIPPING_ADDRESS_COUNTRY":"[\u6536\u8ca8\u5730\u5740]\u570b\u5bb6:","LBL_EMAIL":"\u96fb\u5b50\u90f5\u4ef6:","LBL_BILLING_ADDRESS":"\u4ed8\u6b3e\u5730\u5740:","LBL_SHIPPING_ADDRESS":"\u6536\u8ca8\u5730\u5740:","LBL_CONTACTS":"\u806f\u7e6b\u4eba\u6a94\u6848","LBL_OPPORTUNITY":"\u5546\u696d\u6a5f\u6703","LBL_CALLS":"\u96fb\u8a71","LBL_MEETINGS":"\u6703\u8b70","LBL_TASKS":"\u4efb\u52d9","LBL_LEADS":"\u6f5b\u5728\u5ba2\u6236","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u65b0\u589e\u5ba2\u6236"}');sugar_mod_strings['Contacts'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba\u7528\u6236\u59d3\u540d:","LBL_FIRST_NAME":"\u540d:","LBL_LAST_NAME":"\u59d3:","LBL_TITLE":"\u8077\u7a31:","LBL_DEPARTMENT":"\u90e8\u9580:","LBL_HOME_PHONE":"\u5bb6\u5ead\u96fb\u8a71:","LBL_MOBILE_PHONE":"\u884c\u52d5\u96fb\u8a71:","LBL_OFFICE_PHONE":"\u8fa6\u516c\u96fb\u8a71:","LBL_FAX_PHONE":"\u50b3\u771f:","LBL_EMAIL_ADDRESS":"\u96fb\u5b50\u90f5\u4ef6:","LBL_PRIMARY_ADDRESS_STREET":"[\u4e3b\u8981\u4f4f\u5740]\u8857\u9053:","LBL_PRIMARY_ADDRESS_CITY":"[\u4e3b\u8981\u4f4f\u5740]\u57ce\u5e02:","LBL_PRIMARY_ADDRESS_STATE":"[\u4e3b\u8981\u4f4f\u5740]\u7701\u4efd:","LBL_PRIMARY_ADDRESS_POSTALCODE":"[\u4e3b\u8981\u4f4f\u5740]\u90f5\u7de8:","LBL_PRIMARY_ADDRESS_COUNTRY":"[\u4e3b\u8981\u4f4f\u5740]\u570b\u5bb6:","LBL_ALT_ADDRESS_STREET":"[\u5176\u5b83\u5730\u5740]\u8857\u9053:","LBL_ALT_ADDRESS_CITY":"[\u5176\u5b83\u5730\u5740]\u57ce\u5e02:","LBL_ALT_ADDRESS_STATE":"[\u5176\u5b83\u5730\u5740]\u7701\u4efd:","LBL_ALT_ADDRESS_POSTALCODE":"[\u5176\u5b83\u5730\u5740]\u90f5\u7de8:","LBL_ALT_ADDRESS_COUNTRY":"[\u5176\u5b83\u5730\u5740]\u570b\u5bb6:","LBL_ACCOUNT_NAME":"\u5ba2\u6236\u540d\u7a31:","LBL_PRIMARY_ADDRESS":"\u4e3b\u8981\u5730\u5740:","LBL_ALT_ADDRESS":"\u5176\u5b83\u5730\u5740:","LBL_CALLS":"\u96fb\u8a71","LBL_MEETINGS":"\u6703\u8b70","LBL_TASKS":"\u4efb\u52d9","LBL_OPPORTUNITIES":"\u5546\u696d\u6a5f\u6703","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u65b0\u589e\u806f\u7e6b\u4eba"}');sugar_mod_strings['Opportunities'] = jQuery.parseJSON('{"LBL_OPPORTUNITY_NAME":"\u5546\u696d\u6a5f\u6703\u540d\u7a31:","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba\u7528\u6236\u59d3\u540d:","LBL_ACCOUNT_NAME":"\u5ba2\u6236\u540d\u7a31:","LBL_AMOUNT":"\u91d1\u984d:","LBL_AMOUNT_USDOLLAR":"\u91d1\u984d USD:","LBL_DATE_CLOSED":"\u5b8c\u6210\u65e5\u671f:","LBL_SALES_STAGE":"\u92b7\u552e\u968e\u6bb5:","LBL_CONTACTS":"\u806f\u7e6b\u4eba\u6a94\u6848","LBL_CALLS":"\u96fb\u8a71","LBL_MEETINGS":"\u6703\u8b70","LBL_TASKS":"\u4efb\u52d9","LBL_LEADS":"\u6f5b\u5728\u5ba2\u6236","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u65b0\u589e\u5546\u696d\u6a5f\u6703"}');sugar_mod_strings['Leads'] = jQuery.parseJSON('{"":"","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba\u59d3\u540d","LBL_FIRST_NAME":"\u540d:","LBL_LAST_NAME":"\u59d3:","LBL_TITLE":"\u8077\u7a31:","LBL_MOBILE_PHONE":"\u884c\u52d5\u96fb\u8a71:","LBL_OFFICE_PHONE":"\u8fa6\u516c\u96fb\u8a71:","LBL_EMAIL_ADDRESS":"\u96fb\u5b50\u90f5\u4ef6:","LBL_PRIMARY_ADDRESS_STREET":"[\u4e3b\u8981\u4f4f\u5740]\u8857\u9053","LBL_PRIMARY_ADDRESS_CITY":"[\u4e3b\u8981\u4f4f\u5740]\u57ce\u5e02","LBL_PRIMARY_ADDRESS_STATE":"[\u4e3b\u8981\u4f4f\u5740]\u7701\u4efd","LBL_PRIMARY_ADDRESS_POSTALCODE":"[\u4e3b\u8981\u4f4f\u5740]\u90f5\u7de8","LBL_PRIMARY_ADDRESS_COUNTRY":"[\u4e3b\u8981\u4f4f\u5740]\u570b\u5bb6","LBL_ALT_ADDRESS_STREET":"[\u5176\u5b83\u5730\u5740]\u8857\u9053","LBL_ALT_ADDRESS_CITY":"[\u5176\u5b83\u4f4f\u5740]\u57ce\u5e02","LBL_ALT_ADDRESS_STATE":"[\u5176\u5b83\u5730\u5740]\u7701\u4efd","LBL_ALT_ADDRESS_POSTALCODE":"[\u5176\u5b83\u5730\u5740]\u90f5\u7de8","LBL_ALT_ADDRESS_COUNTRY":"[\u5176\u4ed6\u5730\u5740]\u570b\u5bb6","LBL_STATUS":"\u72c0\u614b:","LBL_ACCOUNT_NAME":"\u5ba2\u6236\u540d\u7a31:","LBL_PRIMARY_ADDRESS":"\u4e3b\u8981\u5730\u5740:","LBL_ALT_ADDRESS":"\u5176\u5b83\u5730\u5740:","LBL_CALLS":"\u96fb\u8a71","LBL_MEETINGS":"\u6703\u8b70","LBL_TASKS":"\u4efb\u52d9","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u65b0\u589e\u6f5b\u5728\u5ba2\u6236"}');sugar_mod_strings['Calls'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u984c:","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba","LBL_DURATION_HOURS":"\u671f\u9593(\u5c0f\u6642):","LBL_DURATION_MINUTES":"\u671f\u9593(\u5206\u9418):","LBL_DATE":"\u958b\u59cb\u65e5\u671f:","LBL_LIST_RELATED_TO":"\u76f8\u95dc","LBL_STATUS":"\u72c0\u614b:","LBL_DIRECTION":"\u65b9\u5411:","LNK_NEW_CALL":"\u5b89\u6392\u96fb\u8a71","LBL_CONTACTS":"\u806f\u7e6b\u4eba\u6a94\u6848","LBL_USERS":"\u7528\u6236","LBL_LEADS":"\u6f5b\u5728\u5ba2\u6236","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u5b89\u6392\u96fb\u8a71"}');sugar_mod_strings['Meetings'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u984c:","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba:","LBL_DURATION_HOURS":"\u671f\u9593(\u5c0f\u6642):","LBL_DURATION_MINUTES":"\u671f\u9593(\u5206\u9418):","LBL_DATE":"\u958b\u59cb\u65e5\u671f:","LBL_STATUS":"\u72c0\u614b:","LBL_LIST_RELATED_TO":"\u76f8\u95dc","LBL_CONTACTS":"\u806f\u7e6b\u4eba\u6a94\u6848","LBL_USERS":"\u7528\u6236","LBL_LEADS":"\u6f5b\u5728\u5ba2\u6236","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u5b89\u6392\u6703\u8b70"}');sugar_mod_strings['Tasks'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u984c:","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba:","LBL_STATUS":"\u72c0\u614b:","LBL_DUE_DATE":"\u5b8c\u6210\u65e5\u671f:","LBL_START_DATE":"\u958b\u59cb\u65e5\u671f:","LBL_LIST_RELATED_TO":"\u76f8\u95dc","LBL_CONTACT_NAME":"\u806f\u7e6b\u4eba\u59d3\u540d:","LBL_PRIORITY":"\u512a\u5148\u9806\u5e8f:","LNK_NEW_TASK":"\u65b0\u589e\u4efb\u52d9","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u65b0\u589e\u4efb\u52d9"}');sugar_mod_strings['Cases'] = jQuery.parseJSON('{"LBL_SUBJECT":"\u4e3b\u984c:","LBL_DATE_ENTERED":"\u521d\u59cb\u5316\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_ASSIGNED_TO_NAME":"\u8ca0\u8cac\u4eba","LBL_NUMBER":"\u7de8\u865f:","LBL_TYPE":"\u985e\u578b","LBL_STATUS":"\u72c0\u614b:","LBL_PRIORITY":"\u512a\u5148\u9806\u5e8f:","LBL_ACCOUNT_NAME":"\u5ba2\u6236\u540d\u7a31:","LBL_TASKS":"\u4efb\u52d9","LBL_NOTES":"\u5099\u5fd8\u9304","LBL_MEETINGS":"\u6703\u8b70","LBL_CALLS":"\u96fb\u8a71","LBL_CONTACTS":"\u806f\u7e6b\u4eba\u6a94\u6848","LBL_PROJECTS":"\u9805\u76ee","NEW":"\u65b0\u589e\u5ba2\u6236\u53cd\u994b"}');sugar_mod_strings['Project'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"\u8f38\u5165\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_NAME":"\u540d\u7a31:","LBL_DESCRIPTION":"\u63cf\u8ff0:","LBL_DATE_START":"\u958b\u59cb\u65e5\u671f:","LBL_DATE_END":"\u7d50\u675f\u65e5\u671f:","LBL_STATUS":"\u72c0\u614b:","LBL_PRIORITY":"\u512a\u5148\u9806\u5e8f:","LBL_ASSIGNED_USER_NAME":"\u8ca0\u8cac\u4eba:","LBL_PROJECT_TASKS":"\u9805\u76ee\u4efb\u52d9","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":"\u5275\u5efa\u9805\u76ee"}');sugar_mod_strings['ProjectTask'] = jQuery.parseJSON('{"LBL_DATE_ENTERED":"\u8f38\u5165\u65e5\u671f:","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f:","LBL_NAME":"\u540d\u7a31:","LBL_STATUS":"\u72c0\u614b:","LBL_DESCRIPTION":"\u8aaa\u660e:","LBL_PERCENT_COMPLETE":"\u9032\u5ea6(%):","LBL_PRIORITY":"\u512a\u5148\u9806\u5e8f:","LBL_PARENT_NAME":"\u9805\u76ee\u540d\u7a31","LBL_ASSIGNED_USER_NAME":"\u8ca0\u8cac\u4eba","LBL_NOTES":"\u5099\u5fd8\u9304","NEW":null}');sugar_mod_strings['Notes'] = jQuery.parseJSON('{"LBL_ASSIGNED_TO_NAME":"\u5206\u914d\u7528\u6236","LBL_DATE_ENTERED":"Date Created","LBL_DATE_MODIFIED":"Date Modified","LBL_NOTE_SUBJECT":"\u5099\u5fd8\u9304\u4e3b\u984c:","LBL_FILENAME":"\u9644\u4ef6:","LBL_DESCRIPTION":"\u8aaa\u660e","NEW":"\u65b0\u589e\u5099\u5fd8\u9304"}');sugar_mod_strings['Users'] = jQuery.parseJSON('{"LBL_USER_NAME":"\u7528\u6236\u540d","LBL_FIRST_NAME":"\u540d","LBL_LAST_NAME":"\u59d3","LBL_DEPARTMENT":"\u90e8\u9580","LBL_MOBILE_PHONE":"\u624b\u6a5f","LBL_EMAIL":"\u96fb\u5b50\u90f5\u4ef6\u5730\u5740","NEW":"\u65b0\u589e\u7528\u6236"}');sugar_mod_strings['AOS_Products'] = jQuery.parseJSON('{"LBL_NAME":"\u59d3\u540d","LBL_DATE_ENTERED":"\u5275\u5efa\u65e5\u671f","LBL_DATE_MODIFIED":"\u4fee\u6539\u65e5\u671f","LBL_ASSIGNED_TO_NAME":"\u5206\u914d\u7528\u6236","LBL_CATEGORY":"Category","LBL_PRICE":"Price","NEW":null}'); \ No newline at end of file diff --git a/mobile/index.php b/mobile/index.php index 7bec821a8fc..b0074bd63ca 100755 --- a/mobile/index.php +++ b/mobile/index.php @@ -10,7 +10,7 @@ } // language files for Sugar Fields if (!file_exists("fielddefs/modules_$language.js")) { - echo "console.log('language $language not found');"; +// echo "console.log('language $language not found');"; $language="en_us"; } // language file for QuickCRM interface @@ -23,38 +23,9 @@ ?> + - - - - - + @@ -65,26 +36,35 @@ EOQ; ?> - - + + - + + + - + '; } ?> - - - - - - + - + QuickCRM CE @@ -111,6 +91,8 @@

      ... Loading

      +
      +
      -
      +
      - +
      @@ -150,49 +132,32 @@
      - -

      QuickCRM

      - + +

      QuickCRM

      + +
      +
        +
      • +
      • +
      • +
      • +
      • +
      +
      +
      +
      +
      +
      + +
      +
        +
      @@ -284,16 +249,44 @@ -
      +
      -

      - - +

      QuickCRM

      +
      +
      +

      +
      + + +
      +
      +
      + +
      +
      + +

      +
      +
      + +
      +
      + +
      +
      + +

      -
      -

      -
      @@ -301,66 +294,69 @@
      -
      - + +
      + + +
      Subpanels - +
      -
      +
      - Date Picker - - + + +
      -
      - -
      -

      +
      +
      + +
      +
      + +

      +
      +
      -
      - -
      -

      -
        -
      -
      -
      - - - - - - -
      - - -
      -
      + +
      -

      QuickCRM

      + +

      -

      -
      - - -
      +
      + +
      +
      + +

      +
      +
      + +
      +
      + +

      +
      +
      +

      @@ -418,5 +414,16 @@
      +
      +
      + +

      +
      + +
      +
      +
      +
      + diff --git a/mobile/js/mobile_de_de.js b/mobile/js/mobile_de_de.js index bc01d9d463c..28720030a35 100755 --- a/mobile/js/mobile_de_de.js +++ b/mobile/js/mobile_de_de.js @@ -87,12 +87,13 @@ var RES_DEF_LOCK='Set Passcode', RES_HERE='Hier', RES_DIST='Entfernung'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4})$',""), - regDateTime = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""), - regMonth="$2", - regDay="$1", - AMPM=false; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scan QR Code business card', + RES_COUNT='Number of', + RES_SUM='Sum', + RES_AVERAGE='Average', + RES_REMINDERS='Reminders', + RES_ROWS_PER_DASHLET="Zeile pro Dashlet"; // ADRESSFORMAT var Addresses_Template= '$street
      $postalcode $city
      $state
      $country'; diff --git a/mobile/js/mobile_en_us.js b/mobile/js/mobile_en_us.js index e3cba6cce4c..6ad440b7796 100755 --- a/mobile/js/mobile_en_us.js +++ b/mobile/js/mobile_en_us.js @@ -87,12 +87,14 @@ var RES_DEF_LOCK='Set Passcode', RES_HERE='Here', RES_DIST='Distance'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4})$',""); -var regDateTime = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""); -var regMonth="$1"; -var regDay="$2"; -var AMPM=true; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scan QR Code business card', + RES_COUNT='Number of', + RES_SUM='Sum', + RES_AVERAGE='Average', + RES_REMINDERS='Reminders', + RES_ROWS_PER_DASHLET="Rows per Dashlet"; + // ADDRESS FORMAT var Addresses_Template= '$street
      $city, $state $postalcode
      $country'; diff --git a/mobile/js/mobile_es_es.js b/mobile/js/mobile_es_es.js index fa8a1b3580a..039311db70c 100755 --- a/mobile/js/mobile_es_es.js +++ b/mobile/js/mobile_es_es.js @@ -81,12 +81,13 @@ var RES_DEF_LOCK='Establecer código', RES_HERE='aquí', RES_DIST='Distancia'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4})$',""), - regDateTime = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""), - regMonth="$2", - regDay="$1", - AMPM=false; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scan QR Code business card', + RES_COUNT='Number of', + RES_SUM='Sum', + RES_AVERAGE='Average', + RES_REMINDERS='Reminders', + RES_ROWS_PER_DASHLET="Elementos por Dashlet"; // ADDRESS FORMAT var Addresses_Template= '$street
      $postalcode $city
      $country'; diff --git a/mobile/js/mobile_fr_FR.js b/mobile/js/mobile_fr_FR.js index 57b3c9da184..f9b0c56a0fe 100755 --- a/mobile/js/mobile_fr_FR.js +++ b/mobile/js/mobile_fr_FR.js @@ -85,12 +85,13 @@ var RES_DEF_LOCK='Définir le code secret', RES_HERE='Ici', RES_DIST='Distance'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4})$',""); -var regDateTime = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""); -var regMonth="$2"; -var regDay="$1"; -var AMPM=false; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scanner Carte de visite QR Code', + RES_COUNT='Nombre de', + RES_SUM='Somme', + RES_AVERAGE='Moyenne', + RES_REMINDERS='Rappels', + RES_ROWS_PER_DASHLET="Elements par Dashlet"; // ADDRESS FORMAT var Addresses_Template= '$street
      $postalcode $city
      $country'; diff --git a/mobile/js/mobile_it_it.js b/mobile/js/mobile_it_it.js index 6ee7efede7d..5ab894af5bb 100755 --- a/mobile/js/mobile_it_it.js +++ b/mobile/js/mobile_it_it.js @@ -81,12 +81,13 @@ var RES_DEF_LOCK='Bloco passcode', RES_HERE='ecco', RES_DIST='Distanza'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4})$',""); -var regDateTime = new RegExp('^([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]|[0][0-9]|[1][0,1,2])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""); -var regMonth="$2"; -var regDay="$1"; -var AMPM=false; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scanner Carte de visite QR Code', + RES_COUNT='Nombre de', + RES_SUM='Somme', + RES_AVERAGE='Moyenne', + RES_REMINDERS='Rappels', + RES_ROWS_PER_DASHLET="Righe per Dashlet"; // ADDRESS FORMAT var Addresses_Template= '$street
      $city, $state $postalcode
      $country'; diff --git a/mobile/js/mobile_lt_LT.js b/mobile/js/mobile_lt_LT.js new file mode 100644 index 00000000000..251646ecaa4 --- /dev/null +++ b/mobile/js/mobile_lt_LT.js @@ -0,0 +1,99 @@ +var RES_YES_LABEL="Taip", +RES_NO_LABEL="Ne", +RES_UNAVAILABLE="Gauti daugiau funkcijų su QuickCRM Mobile Pro", +RES_WRONG_PASWD='Neteisingai įvestas vartotojo vardas ar slaptažodis', +RES_REQUIRED_MSG='Privalomas laukas', +RES_INV_DATE_MSG='Neteisingas datos formatas (mm/dd/yyyy)', +RES_INV_DATETIME_MSG='Neteisingas datos formatas (mm/dd/yyyy hh:mm)', +RES_UNDEFINED_FIELD='Neapibrėžtas laukas:', +RES_INVALID_EMAIL_MSG='Neteisingas el.paštas', +RES_ACCESS_DENIED_MSG='Priėjimas draudžiamas', +RES_LOGIN_MESSAGE="Įveskite vartotojo vardą ir spauskite prisijungti", +RES_LOGIN_TITLE="Prisijungti", +RES_LOGOUT_LABEL="Atsijungti", +RES_HOME_LABEL="Pradžia", +RES_NO_MORE_RECORDS="Nėra įrašų", +RES_USERNAME_LABEL="Vartotojo vardas:", +RES_PASSWORD_LABEL="Slaptažodis:", +RES_OVERVIEW_LABEL="Detalės", +RES_MORE_INFORMATION_LABEL="Daugiau informacijos", +RES_OTHER_LABEL="Kita", +RES_NAME_LABEL="Pavadinimas:", +RES_NO_DATA="Nėra duomenų", +RES_OPT_CALL_MEET="Skambučiai ir susitikimai", +RES_OPT_FROM="# dienos iki (0 be limito):", +RES_OPT_TO="# dienos po (0 be limito):", +RES_DURATION_LABEL="Trukmė", +RES_ADDRESS_LABEL="Adresas:", +RES_DETAILS_LABEL="", +RES_DO_NOT_CALL="*Pastaba: Neskambinti šiam kontaktui.", +RES_RELATED_TO_LABEL="Susiję su", +RES_LOGGED_CALL="Skambinta iš mobilaus įrenginio", +RES_SEARCH_LABEL="Paieška", +RES_LOG_CALLS="Įrašyti skambučių istoriją"; +// Version 1.1 +var RES_MORE_OPTIONS="Daugiau nustatymų", +RES_OPTIONS="Nustatymai", +RES_CALENDAR="Kalendorius", +RES_MISSED="Pavėluota", +RES_TODAY="Šiandien", +RES_7DAYS="7 Dienos"; +// V1.3 +var RES_SEARCH_FROM="Nuo", +RES_SEARCH_TO="Iki"; +// V1.5 +var RES_OPT_GENERAL="Bendras", +RES_ROWS_PER_PAGE="Eilutės puslapyje"; +// V2.0 +var RES_SHOWLABELS='Etiketės'; +var RES_TOOLBAR='Įrankių juosta:'; +var RES_AVAILABLE_NEXT_LOGIN='Kai kurie nustatymai įsigalios prisijungus iš naujo.
      Ar norite prisijungti iš naujo?'; +var RES_ALLMODULES ='Visi moduliai'; +// V2.1 +var RES_REMEMBER_ME='Prisiminti', + RES_EDIT_ATTACH='Pridėti prisegtuką', + RES_DEL_ATTACH='Ištrinti prisegtuką'; +// V2.2 +var RES_SORTORDER='Rikiavimo tvarka'; +// V2.4 +var RES_CLEAR='Išvalyti'; +var RES_HIDEEMPTY='Paslėpti tuščius'; +var RES_SUBPANELS='Subpaneliai'; +var RES_FILTEROLD='Išfiltruoti senus duomenis'; +var RES_MINDATE='Minimali data'; +// V2.6 +var RES_ALERTS='Įspėjimai', + RES_UPDATED="Užduotys ir atnaujinimai", + RES_ICON='Ikona'; +// V3.0 +var RES_MOBILE='Mobilus', + RES_ADV_OPTIONS="Sudėtingesni nustatymai", + RES_NONE="Nieko", + RES_MY_ITEMS="Mano elementai", + RES_RELATED="Susiję su", + RES_GO_ONLINE='Prisijungti', + RES_GO_OFFLINE='Atsijungti', + RES_SYNC='Sinchronizuoti', + RES_OFFLINE_ERR_CANCEL='Negalime sujungti su SugarCRM.\nIgnoruoti pakeitimus ir prisijungti'; +// 3.1 +var RES_DEF_LOCK='Nustatyti slaptažodį', + RES_ENTER_LOCK='Įvesti slaptažodį', + RES_ENTER2_LOCK='Pakartoti slaptažodį', + RES_TITLE_LOCK='Slaptažodis užrakintas', + RES_UNLOCK='Išjungti slaptažodį', + RES_PWD_MISMATCH='Slaptažodžiai nesutampa.', + RES_WRONG_PWD='Blogas slaptažodis.', + RES_MAPS_TITLE='Žemėlapiai', + RES_HERE='Čia', + RES_DIST='Atstumas'; + +// VERSION 3.3 +var RES_DASHLET='Dashlet', + RES_ROWS_PER_DASHLET="Rows per Dashlet"; + +// VERSION 3.4 +var RES_SCANCARD='Scan QR Code business card', + RES_REMINDERS='Reminders'; + +// ADDRESS FORMAT +var Addresses_Template= '$street
      $city, $state $postalcode
      $country'; diff --git a/mobile/js/mobile_nl_nl.js b/mobile/js/mobile_nl_nl.js index 4d2c64cca13..55bb04de45b 100755 --- a/mobile/js/mobile_nl_nl.js +++ b/mobile/js/mobile_nl_nl.js @@ -87,12 +87,13 @@ var RES_DEF_LOCK='Stel wachtwoord in', RES_HERE='Hier', RES_DIST='Afstand'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4})$',""); -var regDateTime = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""); -var regMonth="$1"; -var regDay="$2"; -var AMPM=true; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scan QR Code business card', + RES_COUNT='Number of', + RES_SUM='Sum', + RES_AVERAGE='Average', + RES_REMINDERS='Reminders', + RES_ROWS_PER_DASHLET="Regels per Dashlet"; // ADDRESS FORMAT var Addresses_Template= '$street
      $city, $state $postalcode
      $country'; diff --git a/mobile/js/mobile_zh_cn.js b/mobile/js/mobile_zh_cn.js index f5dc2fae40e..1c14c756a7d 100755 --- a/mobile/js/mobile_zh_cn.js +++ b/mobile/js/mobile_zh_cn.js @@ -87,12 +87,13 @@ var RES_DEF_LOCK='请设定密码', RES_HERE='这里', RES_DIST='距离'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4})$',""); -var regDateTime = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""); -var regMonth="$1"; -var regDay="$2"; -var AMPM=true; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scan QR Code business card', + RES_COUNT='Number of', + RES_SUM='Sum', + RES_AVERAGE='Average', + RES_REMINDERS='Reminders', + RES_ROWS_PER_DASHLET="Rows per Dashlet"; // ADDRESS FORMAT var Addresses_Template= '$street
      $city, $state $postalcode
      $country'; diff --git a/mobile/js/mobile_zh_tw.js b/mobile/js/mobile_zh_tw.js index 7f220de6dfd..ce47ecbf9f5 100755 --- a/mobile/js/mobile_zh_tw.js +++ b/mobile/js/mobile_zh_tw.js @@ -87,12 +87,13 @@ var RES_DEF_LOCK='請設定密碼', RES_HERE='這裏', RES_DIST='距離'; -// DATE FORMAT -var regDate = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4})$',""); -var regDateTime = new RegExp('^([0-9]|[0][0-9]|[1][0,1,2])/([0-9]|[0,1,2][0-9]|[3][0,1])/([0-9]{4}) ([0-9]|[0-2][0-9]):([0-6][0-9])$',""); -var regMonth="$1"; -var regDay="$2"; -var AMPM=true; +// FUTURE VERSIONS - NOT USED YET +var RES_SCANCARD='Scan QR Code business card', + RES_COUNT='Number of', + RES_SUM='Sum', + RES_AVERAGE='Average', + RES_REMINDERS='Reminders', + RES_ROWS_PER_DASHLET="Rows per Dashlet"; // ADDRESS FORMAT var Addresses_Template= '$street
      $city, $state $postalcode
      $country'; diff --git a/mobile/js/quickcrm-ce-3.3.2.min.js b/mobile/js/quickcrm-ce-3.3.2.min.js new file mode 100644 index 00000000000..6a643ef4be8 --- /dev/null +++ b/mobile/js/quickcrm-ce-3.3.2.min.js @@ -0,0 +1 @@ +var mobile_version="3.3.2",QAppName="QuickCRM",unlocked=true,init_done=false,home_created=false,LastViewed=[],SugarSessionId="",RowsPerPage=20,RowsPerDashlet=5,IconsLabels=true,tmpIconsLabels=false,CurrentUserId="",CurrentProfileId="",CurrentUserRoles=[],ActivitiesCurrentOffset=0,ActivitiesNextOffset=0,ActivitiesPrevOffset=0,ForceLogin=false,HighlightedWIcon="background-color:#fae9c7",Highlighted="background:#fae9c7;",OptUpload=((!mobile_app||!iOS)&&!QCRM.OffLine&&window.File&&window.FileReader&&window.FileList&&typeof btoa==="function"?true:false),PagesCreated=false,edit_data={},AttachTo="",AttachToLnk="",Pref={},dbgOption=false,dbgval="",regFindField=new RegExp("^(.+){(.+)}(.+)$",""),AddFields=["street","postalcode","city","state","country"],ListsPages=["LastViewed","Activities","GS"],SearchPages=[],ViewPages=[],Qpattern=new RegExp('^(.+session":")("|[^"]+)(".+)$',""),Beans=[],SimpleBeans=[];QCRM.dashlets=[];QCRM.maxDashlets=8;QCRM.searchIcons=[];QCRM.createIcons=[];QCRM.PickUsers=false;if(typeof QCRM.ajaxHeader==="undefined"){QCRM.ajaxHeader=function(a){}}function QAjax(c,b,a){$.ajax({url:proxy_url,dataType:"json",async:(c!=="login"),data:{method:c,input_type:"JSON",response_type:"JSON",rest_data:b},type:"post",crossdomain:mobile_app,cache:false,error:function(d){a(null)},success:a})}function SugarQuery(e,b,d,c){function a(f){if(f!==null&&f.name==="Invalid Session ID"&&e!=="logout"){if(e!=="login"){if(c===undefined){c=1}else{c++}if(c>6){return}SugarQuery("login",'[{"password":"'+(mobile_app?$.md5(Qpwd):getCookie("SugarP"))+'","user_name":"'+(mobile_app?Quser_name:getCookie("username"))+'"},"",""]',function(g){b=b.replace(Qpattern,"$1")+SugarSessionId+b.replace(Qpattern,"$3");SugarQuery(e,b,d,c+1)},c)}else{d(f)}}else{if(f!==null&&e=="login"&&f.name_value_list!==undefined){getDateTimeFormats(f.name_value_list);SugarSessionId=f.id;CurrentUserId=f.name_value_list.user_id.value;if(mobile_edition==="Pro"||ForceCE){}}d(f)}}QAjax(e,b,a)}QCRM.get_available_modules=function(g){var d=localStorage.getItem("dis-"+ServerAddress+CurrentUserId),f=localStorage.getItem("acl-"+ServerAddress+CurrentUserId);function e(h){if(Beans[h]!==undefined){Beans[h].access="none"}}function c(h,i){if(Beans[h]!==undefined){Beans[h].acl=i}}function b(m,o){var k,h=o.length,j=Beans[m].acl;for(k=0;k="6.3"?(',"filter":'+(sugar_version>="6.5"?'"all"':'"all"')):"")+"}",function(k){if(k&&k.modules){k=k.modules;var h,p,j=k.length,l=[];for(h in QCRM.beans){var i=QCRM.beans[h],o=false;if(typeof k[0]==="string"){if(k.indexOf(i)===-1){l.push(i);e(i)}else{n={edit:true,view:true,list:true,del:true};f.push({module:i,acls:n});c(i,n);break}}else{for(p=0;p",{href:(a?"#":c),rel:"external",target:"_blank",style:"text-decoration:none;color:#444;"+d});if(a){b.click(function(){navigator.app.loadUrl(c,{openExternal:true})})}return b}function CreateDownloadLink(e,d,g,c){var i=(e==="Notes")?g.file_mime_type.value:g.last_rev_mime_type.value,h=iOS?/.+(gif|png|jpg|jpeg|pdf)$/i:/.+(gif|png|jpg|jpeg)$/i,b=g.filename.value,j,a=i.match(h),f;if(a){j=i.replace(h,"$1").toLowerCase()}else{a=b.match(h);if(a){j=b.replace(h,"$1").toLowerCase();if(j==="pdf"){i="application/pdf"}else{i="image/"+j}}}if(a){f=$("",{href:"#DownloadPage",style:"text-decoration:none;color:#444;"+c});f.click(function(){var k=(e==="Notes")?"get_note_attachment":"get_document_revision";SugarQuery(k,'{"session":"'+SugarSessionId+'","id":"'+(e==="Notes"?d:g.document_revision_id.value)+'"}',function(l){var n=(e==="Notes")?l.note_attachment.file:l.document_revision.file,m=(j==="pdf")?"embedPDF":"embedIMG";$("#DownloadDiv").html('');$("#DownloadPageTitle").text(g.name.value)})})}else{f=CreateExtLink(ServerAddress+"index.php?entryPoint=download&id="+d+"&type="+e,c)}return f}function AddPhonePopup(d){var c=$('
        '),b='Close',a=$('
        ');a.append(b);a.append(c);$("#"+d).append(a)}function AddMapPopup(d){var c=$('
        '),b='Close',a=$('
        ');a.append(b);a.append(c);$("#"+d+"DetailsPage").append(a)}function QuickCRMAddDetailsPage(b){if(ViewPages.indexOf(b)!==-1){return}ViewPages=ViewPages.concat(b);var c=b+"DetailsPage",a="#Edit"+b;$("#"+c).live("pagecreate",function(){AddPhonePopup(b+"DetailsPage");if(Beans[b].HasAddress()){AddMapPopup(b)}var e=Beans[b].CustomLinks||Beans[b].Links;for(var i in e){var d=(Beans[b].CustomLinks&&Beans[b].CustomLinks[0]!==undefined)?e[i]:i;if(Beans[b].Links[d]!==undefined){var h=Beans[b].Links[d].module;if(sugar_app_list_strings.moduleList[h]!==undefined&&(Beans[h]===undefined||(Beans[h].Enabled()))){var g='
          ';$("#"+b+"Links").append(g)}}}});$("#"+c).live("pageshow",function(){Beans[b].ViewDetails()});$(a).live("pagecreate",function(){$(a+"Title").text(sugar_app_list_strings.moduleListSingular[b])})}function QuickCRMAddListPage(b){if(SearchPages.indexOf(b)!==-1){return}SearchPages=SearchPages.concat(b);ListsPages=ListsPages.concat(b);Beans[b].AddBtn=true;var a=Beans[b];$("#"+b+"ListPage").live("pagecreate",function(){AddPhonePopup(b+"ListPage")});$("#"+b+"ListPage").live("pageshow",function(){a.GetList(a.CurrentOffset)});$("#"+b+"Search").live("pagecreate",function(){$("#"+b+"SearchTitle").text(sugar_app_list_strings.moduleList[b]);$("#"+b+"DivMoreOptions").append("

          "+RES_UNAVAILABLE+"

          ");if(!iOS){$("#"+b+"Search input[type=checkbox]").live("change",function(c){$("#"+b+"Search input[type=checkbox]").checkboxradio("refresh")})}});$("#"+b+"Search").live("pageshow",function(){LoadMyItems(b)})}function toDBConcatName(b,a){if(QCRM.OffLine){return"(IFNULL("+b+",'') || ' ' || "+a+")"}else{if(db_type==="mysql"){return"CONCAT(IFNULL("+b+",''),' ',"+a+")"}else{return"ISNULL("+b+",'')+' '+"+a}}}function cleanup_phone(a){return a.replace("(","").replace(")","").replace(/\s/g,"").replace(/-/g,"").replace(/\./g,"")}function create_input_form(j,c,k,i,h,e){var g=$("
          "),b=i?"* ":"",d="",a=$("");g.append(d);g.append(a);return g}function create_text_form(b,c,e,d,a){return create_input_form("text",b,c,e,d,(a===undefined||a))}function create_textarea_form(a,b,e,c){var d=$("
          ");d.append("");d.append("