Version Description
(2021-06-03) =
Improvements * Minimum version of PHP required now is 7.0. * Added a custom prefix to libraries and dependencies used in the plugin to ensure there are no conflicts.
Bug fixes * Corrected logic in code to ensure all sessions are handled and checked when destroying idle sessions. * Fixed an issue causing create/expired times in the "Logged in users" view to appear incorrectly. * Implemented a missing function without with events were not retreived from the MainWP extension.
Refer to the complete plugin changelog for more detailed information about what was new, improved and fixed in previous versions of the WP Activity Log plugin.
Download this release
Release Info
Developer | WPWhiteSecurity |
Plugin | WP Security Audit Log |
Version | 4.3.1 |
Comparing to | |
See all releases |
Code changes from version 4.2.2 to 4.3.1
- classes/AbstractLogger.php +27 -3
- classes/Adapters/MySQL/QueryAdapter.php +5 -4
- classes/AlertFormatter.php +84 -80
- classes/AlertFormatterConfiguration.php +314 -0
- classes/AlertFormatterFactory.php +27 -47
- classes/AlertManager.php +39 -32
- classes/AuditLogGridView.php +6 -2
- classes/AuditLogListView.php +14 -46
- classes/Connector/ConnectorFactory.php +38 -80
- classes/Connector/MySQLDB.php +7 -94
- classes/ConstantManager.php +7 -1
- classes/DashboardWidgetFormatter.php +0 -27
- classes/Helpers/Options.php +0 -45
- classes/Loggers/Database.php +4 -1
- classes/Models/Occurrence.php +16 -40
- classes/SensorManager.php +1 -1
- classes/Sensors/Content.php +5 -56
- classes/Sensors/LogInOut.php +3 -4
- classes/Sensors/Multisite.php +23 -2
- classes/Settings.php +6 -21
- classes/Utilities/UserUtils.php +73 -0
- classes/ViewManager.php +27 -0
- classes/Views/ToggleAlerts.php +2 -1
- classes/WidgetManager.php +1 -1
- css/auditlog.css +10 -5
- css/dist/wsal-wizard.css +2 -1
- css/dist/wsal-wizard.min.css +1 -1
- css/src/wsal-wizard.scss +1 -0
- defaults.php +14 -5
- js/freemius-pricing/178afa6030e76635dbe835e111d2c507.png +0 -0
- js/freemius-pricing/27b5a722a5553d9de0170325267fccec.png +0 -0
- sdk/freemius/assets/img/plugin-icon.png → js/freemius-pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png +0 -0
- js/freemius-pricing/5480ed23b199531a8cbc05924f26952b.png +0 -0
- js/freemius-pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg +402 -0
- js/freemius-pricing/c03f665db27af43971565560adfba594.png +0 -0
- js/freemius-pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png +0 -0
- js/freemius-pricing/dd89563360f0272635c8f0ab7d7f1402.png +0 -0
- js/freemius-pricing/e366d70661d8ad2493bd6afbd779f125.png +0 -0
- js/freemius-pricing/f3aac72a8e63997d6bb888f816457e9b.png +0 -0
- js/freemius-pricing/f928f1be99776af83e8e6be4baf8ffe7.svg +227 -0
- sdk/freemius/assets/img/theme-icon.png → js/freemius-pricing/fde48e4609a6ddc11d639fc2421f2afd.png +0 -0
- js/freemius-pricing/freemius-pricing.js +43 -0
- languages/wp-security-audit-log.pot +1303 -1190
- readme.txt +35 -54
- sdk/wsal-freemius.php +61 -58
- {sdk/freemius → third-party/freemius/wordpress-sdk}/LICENSE.txt +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/README.md +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/account.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/add-ons.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/affiliation.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/checkout.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/common.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/connect.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/debug.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/dialog-boxes.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/gdpr-optin-notice.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/plugins.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/customizer.css +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/img/index.php +0 -0
- third-party/freemius/wordpress-sdk/assets/img/plugin-icon.png +0 -0
- third-party/freemius/wordpress-sdk/assets/img/theme-icon.png +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/nojquery.ba-postmessage.js +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/nojquery.ba-postmessage.min.js +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/postmessage.js +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/config.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-freemius-abstract.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-freemius.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-admin-notices.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-api.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-logger.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-options.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-plugin-updater.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-security.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-storage.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-user-lock.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/class-fs-customizer-support-section.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/class-fs-customizer-upsell-control.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/class-fs-debug-bar-panel.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/debug-bar-start.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-affiliate-terms.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-affiliate.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-billing.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-entity.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-payment.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-info.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-license.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-plan.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-tag.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-pricing.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-scope-entity.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-site.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-subscription.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-user.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-core-functions.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-essential-functions.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-plugin-info-dialog.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/i18n.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/l10n.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-admin-menu-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-admin-notice-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-cache-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-gdpr-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-key-value-storage.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-license-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-option-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-plan-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-plugin-manager.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/ArgumentNotExistException.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/EmptyArgumentException.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/Exception.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/InvalidArgumentException.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/OAuthException.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/FreemiusBase.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/FreemiusWordPress.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/LICENSE.txt +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/fs-essential-functions-1.1.7.1.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/fs-essential-functions-2.2.1.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-cs_CZ.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-da_DK.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-en.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-es_ES.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-fr_FR.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-he_IL.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-hu_HU.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-it_IT.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ja.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-nl_NL.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ru_RU.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ta.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-zh_CN.mo +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius.pot +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/package.json +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/require.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/start.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/billing.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/activate-license-button.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/addon.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/deactivate-license-button.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/site.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/payments.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/add-ons.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/add-trial-to-pricing.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/admin-notice.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/ajax-loader.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/auto-installation.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/checkout.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/connect.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/contact.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/api-calls.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/logger.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/plugins-themes-sync.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/scheduled-crons.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/email.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/firewall-issues-js.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/affiliation.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/data-debug-mode.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/contact.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/form.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/retry-skip.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/license-activation.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/optout.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/premium-versions-upgrade-handler.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/premium-versions-upgrade-metadata.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/resend-key.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/subscription-cancellation.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/trial-start.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/user-change.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/gdpr-optin-js.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/jquery.content-change.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/open-license-activation.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/style-premium-theme.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/partials/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/partials/network-activation.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-icon.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/description.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/features.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/index.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/screenshots.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/powered-by.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/pricing.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/secure-https-header.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/sticky-admin-notice-js.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/tabs-capture-js.php +0 -0
- {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/tabs.php +0 -0
- wp-security-audit-log.php +2044 -1987
classes/AbstractLogger.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Abstract class used in the Logger.
|
4 |
*
|
@@ -17,7 +18,8 @@ abstract class WSAL_AbstractLogger {
|
|
17 |
/**
|
18 |
* Method: Constructor.
|
19 |
*
|
20 |
-
* @param
|
|
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
public function __construct( WpSecurityAuditLog $plugin ) {
|
@@ -28,10 +30,32 @@ abstract class WSAL_AbstractLogger {
|
|
28 |
* Log alert abstract.
|
29 |
*
|
30 |
* @param integer $type - Alert code.
|
31 |
-
* @param array
|
32 |
* @param integer $date (Optional) - Created on.
|
33 |
* @param integer $siteid (Optional) - Site id.
|
34 |
-
* @param bool
|
35 |
*/
|
36 |
public abstract function Log( $type, $data = array(), $date = null, $siteid = null, $migrated = false );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
}
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Abstract class used in the Logger.
|
5 |
*
|
18 |
/**
|
19 |
* Method: Constructor.
|
20 |
*
|
21 |
+
* @param WpSecurityAuditLog $plugin - Instance of WpSecurityAuditLog.
|
22 |
+
*
|
23 |
* @since 1.0.0
|
24 |
*/
|
25 |
public function __construct( WpSecurityAuditLog $plugin ) {
|
30 |
* Log alert abstract.
|
31 |
*
|
32 |
* @param integer $type - Alert code.
|
33 |
+
* @param array $data - Metadata.
|
34 |
* @param integer $date (Optional) - Created on.
|
35 |
* @param integer $siteid (Optional) - Site id.
|
36 |
+
* @param bool $migrated (Optional) - Is migrated.
|
37 |
*/
|
38 |
public abstract function Log( $type, $data = array(), $date = null, $siteid = null, $migrated = false );
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Determines what is the correct timestamp for the event.
|
42 |
+
*
|
43 |
+
* It uses the timestamp from metadata if available. This is needed because we introduced a possible delay by using
|
44 |
+
* action scheduler in 4.3.0. The $legacy_date attribute is only used for migration of legacy data. This should be
|
45 |
+
* removed in future releases.
|
46 |
+
*
|
47 |
+
* @param array $metadata Event metadata.
|
48 |
+
* @param int $legacy_date Legacy date only used when migrating old db event format to the new one.
|
49 |
+
*
|
50 |
+
* @return float GMT timestamp including microseconds.
|
51 |
+
* @since 4.3.0
|
52 |
+
*/
|
53 |
+
protected function get_correct_timestamp( $metadata, $legacy_date ) {
|
54 |
+
|
55 |
+
if ( is_null( $legacy_date ) ) {
|
56 |
+
return array_key_exists( 'Timestamp', $metadata ) ? $metadata['Timestamp'] : current_time( 'U.u', true );
|
57 |
+
}
|
58 |
+
|
59 |
+
return floatval( $legacy_date );
|
60 |
+
}
|
61 |
}
|
classes/Adapters/MySQL/QueryAdapter.php
CHANGED
@@ -135,16 +135,17 @@ class WSAL_Adapters_MySQL_Query implements WSAL_Adapters_QueryInterface {
|
|
135 |
* Execute query and return data as $ar_cls objects.
|
136 |
*
|
137 |
* @param object $query - Query object.
|
|
|
138 |
* @return WSAL_Models_ActiveRecord[]
|
139 |
*/
|
140 |
public function Execute( $query ) {
|
141 |
$args = array();
|
142 |
-
$sql
|
143 |
|
144 |
-
$
|
145 |
|
146 |
-
if ( in_array( $
|
147 |
-
return $
|
148 |
} else {
|
149 |
return $this->getActiveRecordAdapter()->LoadMulti( $sql, $args );
|
150 |
}
|
135 |
* Execute query and return data as $ar_cls objects.
|
136 |
*
|
137 |
* @param object $query - Query object.
|
138 |
+
*
|
139 |
* @return WSAL_Models_ActiveRecord[]
|
140 |
*/
|
141 |
public function Execute( $query ) {
|
142 |
$args = array();
|
143 |
+
$sql = $this->GetSql( $query, $args );
|
144 |
|
145 |
+
$occurrence_adapter = $query->getConnector()->getAdapter( 'Occurrence' );
|
146 |
|
147 |
+
if ( in_array( $occurrence_adapter->GetTable(), $query->getFrom() ) ) {
|
148 |
+
return $occurrence_adapter->LoadMulti( $sql, $args );
|
149 |
} else {
|
150 |
return $this->getActiveRecordAdapter()->LoadMulti( $sql, $args );
|
151 |
}
|
classes/AlertFormatter.php
CHANGED
@@ -16,62 +16,36 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
/**
|
17 |
* WSAL_AlertFormatter class.
|
18 |
*
|
19 |
-
*
|
20 |
*
|
21 |
-
*
|
22 |
-
* be implemented for other contexts such as sms, reports, emails etc.
|
23 |
*
|
24 |
* @package Wsal
|
|
|
25 |
*/
|
26 |
-
class WSAL_AlertFormatter {
|
27 |
|
28 |
/**
|
29 |
* @var WpSecurityAuditLog Plugin instance.
|
30 |
*/
|
31 |
-
protected $
|
32 |
-
|
33 |
-
protected $highlight_start_tag = '<strong>';
|
34 |
-
|
35 |
-
protected $highlight_end_tag = '</strong>';
|
36 |
-
|
37 |
-
protected $emphasis_start_tag = '<i>';
|
38 |
-
|
39 |
-
protected $emphasis_end_tag = '</i>';
|
40 |
-
|
41 |
-
protected $end_of_line = '<br />';
|
42 |
-
|
43 |
-
protected $ellipses_sequence = '…';
|
44 |
-
|
45 |
-
protected $max_meta_value_length = 50;
|
46 |
|
47 |
-
|
|
|
48 |
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
* List of tags compatible with function strip_tags before PHP 7.4 (must be string, not an array).
|
53 |
-
*
|
54 |
-
* @var string
|
55 |
-
*/
|
56 |
-
protected $tags_allowed_in_message = '<strong><br><a>';
|
57 |
-
|
58 |
-
/**
|
59 |
-
* @var bool
|
60 |
-
*/
|
61 |
-
protected $supports_metadata = true;
|
62 |
-
|
63 |
-
public function __construct( $plugin ) {
|
64 |
-
$this->_plugin = $plugin;
|
65 |
}
|
66 |
|
67 |
public function get_end_of_line() {
|
68 |
-
return $this->
|
69 |
}
|
70 |
|
71 |
/**
|
72 |
-
* @param $expression
|
73 |
-
* @param $value
|
74 |
-
* @param null $occurrence_id
|
75 |
*
|
76 |
* @return false|mixed|string|void|WP_Error
|
77 |
* @throws Freemius_Exception
|
@@ -84,17 +58,18 @@ class WSAL_AlertFormatter {
|
|
84 |
return esc_html( $value );
|
85 |
|
86 |
case '%MetaLink%' == $expression:
|
87 |
-
if ( $this->
|
88 |
-
$label
|
|
|
89 |
|
90 |
-
return
|
91 |
}
|
92 |
|
93 |
return '';
|
94 |
|
95 |
case in_array( $expression, array( '%MetaValue%', '%MetaValueOld%', '%MetaValueNew%' ) ):
|
96 |
// trim the meta value to the maximum length and append configured ellipses sequence
|
97 |
-
$result =
|
98 |
|
99 |
return $this->wrap_in_hightlight_markup( esc_html( $result ) );
|
100 |
|
@@ -155,8 +130,10 @@ class WSAL_AlertFormatter {
|
|
155 |
}
|
156 |
|
157 |
case '%LogFileText%' === $expression: // Failed login file text.
|
158 |
-
if ( $this->
|
159 |
-
|
|
|
|
|
160 |
}
|
161 |
|
162 |
return '';
|
@@ -167,7 +144,7 @@ class WSAL_AlertFormatter {
|
|
167 |
return $this->wrap_in_hightlight_markup( esc_html( $result ) );
|
168 |
|
169 |
case '%multisite_text%' === $expression:
|
170 |
-
if ( $this->
|
171 |
$site_info = get_blog_details( $value, true );
|
172 |
if ( $site_info ) {
|
173 |
$site_url = $site_info->siteurl;
|
@@ -188,14 +165,38 @@ class WSAL_AlertFormatter {
|
|
188 |
return $this->wrap_in_hightlight_markup( esc_html( $value ) );
|
189 |
|
190 |
case '%LineBreak%' === $expression:
|
191 |
-
return $this->
|
192 |
|
193 |
case '%PluginFile%' === $expression:
|
194 |
return $this->wrap_in_hightlight_markup( dirname( $value ) );
|
195 |
|
196 |
default:
|
197 |
-
|
198 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
}
|
200 |
}
|
201 |
|
@@ -209,7 +210,7 @@ class WSAL_AlertFormatter {
|
|
209 |
* @return string
|
210 |
*/
|
211 |
public function wrap_in_hightlight_markup( $value ) {
|
212 |
-
return $this->
|
213 |
}
|
214 |
|
215 |
/**
|
@@ -222,7 +223,29 @@ class WSAL_AlertFormatter {
|
|
222 |
* @return string
|
223 |
*/
|
224 |
public function wrap_in_emphasis_markup( $value ) {
|
225 |
-
return $this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
}
|
227 |
|
228 |
/**
|
@@ -249,8 +272,9 @@ class WSAL_AlertFormatter {
|
|
249 |
}
|
250 |
|
251 |
$processed_url = $this->process_url( $url );
|
|
|
252 |
|
253 |
-
return $this->
|
254 |
}
|
255 |
|
256 |
/**
|
@@ -271,7 +295,9 @@ class WSAL_AlertFormatter {
|
|
271 |
/**
|
272 |
* Override this method in subclass to format hyperlinks differently.
|
273 |
*
|
274 |
-
* Default implementation returns HTML A tag.
|
|
|
|
|
275 |
*
|
276 |
* @param string $url
|
277 |
* @param string $label
|
@@ -290,14 +316,14 @@ class WSAL_AlertFormatter {
|
|
290 |
* @return bool True if the formatter supports hyperlinks as part of the alert message.
|
291 |
*/
|
292 |
public function supports_hyperlinks() {
|
293 |
-
return $this->
|
294 |
}
|
295 |
|
296 |
/**
|
297 |
* @return bool True if the formatter supports metadata as part of the alert message.
|
298 |
*/
|
299 |
public function supports_metadata() {
|
300 |
-
return $this->
|
301 |
}
|
302 |
|
303 |
/**
|
@@ -314,32 +340,10 @@ class WSAL_AlertFormatter {
|
|
314 |
public function process_html_tags_in_message( $message ) {
|
315 |
$result = preg_replace(
|
316 |
[ '/<strong>/', '/<\/strong>/' ],
|
317 |
-
[ $this->
|
318 |
$message
|
319 |
);
|
320 |
|
321 |
-
return strip_tags( $result, $this->
|
322 |
-
}
|
323 |
-
|
324 |
-
/**
|
325 |
-
* Helper function to get meta value from an occurrence.
|
326 |
-
*
|
327 |
-
* @param int $occurrence_id
|
328 |
-
* @param string $meta_key
|
329 |
-
*
|
330 |
-
* @return mixed|null Meta value if exists. Otherwise null
|
331 |
-
* @since 4.2.1
|
332 |
-
*/
|
333 |
-
private function get_occurrence_meta_item( $occurrence_id, $meta_key ) {
|
334 |
-
// get connection.
|
335 |
-
$db_config = WSAL_Connector_ConnectorFactory::GetConfig(); // Get DB connector configuration.
|
336 |
-
$connector = $this->_plugin->getConnector( $db_config ); // Get connector for DB.
|
337 |
-
$wsal_db = $connector->getConnection(); // Get DB connection.
|
338 |
-
|
339 |
-
// get values needed.
|
340 |
-
$meta_adapter = new WSAL_Adapters_MySQL_Meta( $wsal_db );
|
341 |
-
$meta_result = $meta_adapter->LoadByNameAndOccurrenceId( $meta_key, $occurrence_id );
|
342 |
-
|
343 |
-
return isset( $meta_result['value'] ) ? $meta_result['value'] : null;
|
344 |
}
|
345 |
}
|
16 |
/**
|
17 |
* WSAL_AlertFormatter class.
|
18 |
*
|
19 |
+
* Class for handling the formatting of alert message/UI widget in different contexts.
|
20 |
*
|
21 |
+
* Formatting rules are given by given formatter configuration.
|
|
|
22 |
*
|
23 |
* @package Wsal
|
24 |
+
* @since 4.2.1
|
25 |
*/
|
26 |
+
final class WSAL_AlertFormatter {
|
27 |
|
28 |
/**
|
29 |
* @var WpSecurityAuditLog Plugin instance.
|
30 |
*/
|
31 |
+
protected $plugin;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
+
/** @var WSAL_AlertFormatterConfiguration */
|
34 |
+
private $configuration;
|
35 |
|
36 |
+
public function __construct( $plugin, $configuration ) {
|
37 |
+
$this->plugin = $plugin;
|
38 |
+
$this->configuration = $configuration;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
}
|
40 |
|
41 |
public function get_end_of_line() {
|
42 |
+
return $this->configuration->getEndOfLine();
|
43 |
}
|
44 |
|
45 |
/**
|
46 |
+
* @param string $expression Meta expression including the surrounding percentage chars.
|
47 |
+
* @param string $value Meta value.
|
48 |
+
* @param int|null $occurrence_id Occurrence ID. Only present if the event was already written to the database.
|
49 |
*
|
50 |
* @return false|mixed|string|void|WP_Error
|
51 |
* @throws Freemius_Exception
|
58 |
return esc_html( $value );
|
59 |
|
60 |
case '%MetaLink%' == $expression:
|
61 |
+
if ( $this->configuration->isJsInLinksAllowed() ) {
|
62 |
+
$label = __( 'Exclude Custom Field from the Monitoring', 'wp-security-audit-log' );
|
63 |
+
$result = "<a href=\"#\" data-disable-custom-nonce='" . wp_create_nonce( 'disable-custom-nonce' . $value ) . "' onclick=\"return WsalDisableCustom(this, '" . $value . "');\"> {$label}</a>";
|
64 |
|
65 |
+
return $this->wrap_in_hightlight_markup( $result );
|
66 |
}
|
67 |
|
68 |
return '';
|
69 |
|
70 |
case in_array( $expression, array( '%MetaValue%', '%MetaValueOld%', '%MetaValueNew%' ) ):
|
71 |
// trim the meta value to the maximum length and append configured ellipses sequence
|
72 |
+
$result = mb_strlen( $value ) > $this->configuration->getMaxMetaValueLength() ? ( mb_substr( $value, 0, 50 ) . $this->configuration->getEllipsesSequence() ) : $value;
|
73 |
|
74 |
return $this->wrap_in_hightlight_markup( esc_html( $result ) );
|
75 |
|
130 |
}
|
131 |
|
132 |
case '%LogFileText%' === $expression: // Failed login file text.
|
133 |
+
if ( $this->configuration->isJsInLinksAllowed() ) {
|
134 |
+
$result = '<a href="javascript:;" onclick="download_failed_login_log( this )" data-download-nonce="' . esc_attr( wp_create_nonce( 'wsal-download-failed-logins' ) ) . '" title="' . esc_html__( 'Download the log file.', 'wp-security-audit-log' ) . '">' . esc_html__( 'Download the log file.', 'wp-security-audit-log' ) . '</a>';
|
135 |
+
|
136 |
+
return $this->wrap_in_hightlight_markup( $result );
|
137 |
}
|
138 |
|
139 |
return '';
|
144 |
return $this->wrap_in_hightlight_markup( esc_html( $result ) );
|
145 |
|
146 |
case '%multisite_text%' === $expression:
|
147 |
+
if ( $this->plugin->IsMultisite() && $value ) {
|
148 |
$site_info = get_blog_details( $value, true );
|
149 |
if ( $site_info ) {
|
150 |
$site_url = $site_info->siteurl;
|
165 |
return $this->wrap_in_hightlight_markup( esc_html( $value ) );
|
166 |
|
167 |
case '%LineBreak%' === $expression:
|
168 |
+
return $this->configuration->getEndOfLine();
|
169 |
|
170 |
case '%PluginFile%' === $expression:
|
171 |
return $this->wrap_in_hightlight_markup( dirname( $value ) );
|
172 |
|
173 |
default:
|
174 |
+
/**
|
175 |
+
* Allows meta formatting via filter if no match was found.
|
176 |
+
*
|
177 |
+
* @param string $expression Meta expression including the surrounding percentage chars.
|
178 |
+
* @param string $value Meta value.
|
179 |
+
*
|
180 |
+
* @deprecated 4.3.0 Use 'wsal_format_custom_meta' instead.
|
181 |
+
*
|
182 |
+
*/
|
183 |
+
$result = apply_filters_deprecated( 'wsal_meta_formatter_custom_formatter', array(
|
184 |
+
$value,
|
185 |
+
$expression
|
186 |
+
), 'WSAL 4.3.0', 'wsal_format_custom_meta' );
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Allows meta formatting via filter if no match was found. Runs after the legacy filter 'wsal_meta_formatter_custom_formatter' that is kept for backwards compatibility.
|
190 |
+
*
|
191 |
+
* @param string $value Meta value.
|
192 |
+
* @param string $expression Meta expression including the surrounding percentage chars.
|
193 |
+
* @param WSAL_AlertFormatter $this Alert formatter class.
|
194 |
+
* @param int|null $occurrence_id Occurrence ID. Only present if the event was already written to the database. Default null.
|
195 |
+
*
|
196 |
+
* @since 4.3.0
|
197 |
+
*
|
198 |
+
*/
|
199 |
+
return apply_filters( 'wsal_format_custom_meta', $result, $expression, $this, $occurrence_id );
|
200 |
}
|
201 |
}
|
202 |
|
210 |
* @return string
|
211 |
*/
|
212 |
public function wrap_in_hightlight_markup( $value ) {
|
213 |
+
return $this->configuration->getHighlightStartTag() . $value . $this->configuration->getHighlightEndTag();
|
214 |
}
|
215 |
|
216 |
/**
|
223 |
* @return string
|
224 |
*/
|
225 |
public function wrap_in_emphasis_markup( $value ) {
|
226 |
+
return $this->configuration->getEmphasisStartTag() . $value . $this->configuration->getEmphasisEndTag();
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Helper function to get meta value from an occurrence.
|
231 |
+
*
|
232 |
+
* @param int $occurrence_id
|
233 |
+
* @param string $meta_key
|
234 |
+
*
|
235 |
+
* @return mixed|null Meta value if exists. Otherwise null
|
236 |
+
* @since 4.2.1
|
237 |
+
*/
|
238 |
+
private function get_occurrence_meta_item( $occurrence_id, $meta_key ) {
|
239 |
+
// get connection.
|
240 |
+
$db_config = WSAL_Connector_ConnectorFactory::GetConfig(); // Get DB connector configuration.
|
241 |
+
$connector = $this->plugin->getConnector( $db_config ); // Get connector for DB.
|
242 |
+
$wsal_db = $connector->getConnection(); // Get DB connection.
|
243 |
+
|
244 |
+
// get values needed.
|
245 |
+
$meta_adapter = new WSAL_Adapters_MySQL_Meta( $wsal_db );
|
246 |
+
$meta_result = $meta_adapter->LoadByNameAndOccurrenceId( $meta_key, $occurrence_id );
|
247 |
+
|
248 |
+
return isset( $meta_result['value'] ) ? $meta_result['value'] : null;
|
249 |
}
|
250 |
|
251 |
/**
|
272 |
}
|
273 |
|
274 |
$processed_url = $this->process_url( $url );
|
275 |
+
$result = $this->build_link_markup( $processed_url, $label, $title, $target );
|
276 |
|
277 |
+
return $this->wrap_in_hightlight_markup( $result );
|
278 |
}
|
279 |
|
280 |
/**
|
295 |
/**
|
296 |
* Override this method in subclass to format hyperlinks differently.
|
297 |
*
|
298 |
+
* Default implementation returns HTML A tag. Only implementation at the moment. We used to have Slack as well, but
|
299 |
+
* we moved to a different implementation. Introducing another link markup would require adding link format with
|
300 |
+
* placeholders to the formatter configuration.
|
301 |
*
|
302 |
* @param string $url
|
303 |
* @param string $label
|
316 |
* @return bool True if the formatter supports hyperlinks as part of the alert message.
|
317 |
*/
|
318 |
public function supports_hyperlinks() {
|
319 |
+
return $this->configuration->isSupportsHyperlinks();
|
320 |
}
|
321 |
|
322 |
/**
|
323 |
* @return bool True if the formatter supports metadata as part of the alert message.
|
324 |
*/
|
325 |
public function supports_metadata() {
|
326 |
+
return $this->configuration->isSupportsMetadata();
|
327 |
}
|
328 |
|
329 |
/**
|
340 |
public function process_html_tags_in_message( $message ) {
|
341 |
$result = preg_replace(
|
342 |
[ '/<strong>/', '/<\/strong>/' ],
|
343 |
+
[ $this->configuration->getHighlightStartTag(), $this->configuration->getHighlightEndTag() ],
|
344 |
$message
|
345 |
);
|
346 |
|
347 |
+
return strip_tags( $result, $this->configuration->getTagsAllowedInMessage() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
348 |
}
|
349 |
}
|
classes/AlertFormatterConfiguration.php
ADDED
@@ -0,0 +1,314 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly.
|
4 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Alert formatter configuration class.
|
10 |
+
*
|
11 |
+
* Defines the configuration of specific alert formatter.
|
12 |
+
*
|
13 |
+
* Default configuration is meant for plain text output with not metadata nor hyperlinks.
|
14 |
+
*
|
15 |
+
* All setter methods are fluent to allow for method chaining.
|
16 |
+
*
|
17 |
+
* @package Wsal
|
18 |
+
* @since 4.3.0
|
19 |
+
*/
|
20 |
+
class WSAL_AlertFormatterConfiguration {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* List of tags compatible with function strip_tags before PHP 7.4 (must be string, not an array).
|
24 |
+
*
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
protected $tags_allowed_in_message = '';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var bool
|
31 |
+
*/
|
32 |
+
protected $is_js_in_links_allowed = false;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
protected $highlight_end_tag = '';
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @var bool
|
41 |
+
*/
|
42 |
+
protected $supports_hyperlinks = false;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var bool
|
46 |
+
*/
|
47 |
+
protected $supports_metadata = false;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @var int
|
51 |
+
*/
|
52 |
+
protected $max_meta_value_length = 50;
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @var string
|
56 |
+
*/
|
57 |
+
protected $emphasis_start_tag = '';
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @var string
|
61 |
+
*/
|
62 |
+
protected $end_of_line = ' ';
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @var string
|
66 |
+
*/
|
67 |
+
protected $highlight_start_tag = '';
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @var string
|
71 |
+
*/
|
72 |
+
protected $emphasis_end_tag = '';
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @var string
|
76 |
+
*/
|
77 |
+
protected $ellipses_sequence = '...';
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Private empty constructor used for method chaining. Builder methods should be used to retrieve implementations
|
81 |
+
* of this configuration.
|
82 |
+
*/
|
83 |
+
private function __construct() {
|
84 |
+
return $this;
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Builds default plain text alert formatter configuration. Intended for plain text logging services (syslog,
|
89 |
+
* PaperTrail etc.)
|
90 |
+
*
|
91 |
+
* @return WSAL_AlertFormatterConfiguration
|
92 |
+
*/
|
93 |
+
public static function buildPlainTextConfiguration() {
|
94 |
+
return new WSAL_AlertFormatterConfiguration();
|
95 |
+
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Builds alert formatter configuration with full HTML features. Intended for the audit log UI in WordPress admin.
|
100 |
+
*
|
101 |
+
* @return WSAL_AlertFormatterConfiguration
|
102 |
+
*/
|
103 |
+
public static function buildHtmlConfiguration() {
|
104 |
+
return ( new WSAL_AlertFormatterConfiguration() )
|
105 |
+
->setTagsAllowedInMessage( '<strong><br><a>' )
|
106 |
+
->setIsJsInLinksAllowed( true )
|
107 |
+
->setSupportsMetadata( true )
|
108 |
+
->setSupportsHyperlinks( true )
|
109 |
+
->setEmphasisStartTag( '<i>' )
|
110 |
+
->setEmphasisEndTag( '</i>' )
|
111 |
+
->setHighlightStartTag( '<strong>' )
|
112 |
+
->setHighlightEndTag( '</strong>' )
|
113 |
+
->setEndOfLine( '<br />' )
|
114 |
+
->setEllipsesSequence( '…' );
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* @param bool $is_js_in_links_allowed
|
119 |
+
*
|
120 |
+
* @return WSAL_AlertFormatterConfiguration
|
121 |
+
*/
|
122 |
+
public function setIsJsInLinksAllowed( $is_js_in_links_allowed ) {
|
123 |
+
$this->is_js_in_links_allowed = $is_js_in_links_allowed;
|
124 |
+
|
125 |
+
return $this;
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* @return string
|
130 |
+
*/
|
131 |
+
public function getTagsAllowedInMessage() {
|
132 |
+
return $this->tags_allowed_in_message;
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* @param string $tags_allowed_in_message
|
137 |
+
*
|
138 |
+
* @return WSAL_AlertFormatterConfiguration
|
139 |
+
*/
|
140 |
+
public function setTagsAllowedInMessage( $tags_allowed_in_message ) {
|
141 |
+
$this->tags_allowed_in_message = $tags_allowed_in_message;
|
142 |
+
|
143 |
+
return $this;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* @return bool
|
148 |
+
*/
|
149 |
+
public function isJsInLinksAllowed() {
|
150 |
+
return $this->is_js_in_links_allowed;
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
public function getHighlightEndTag() {
|
157 |
+
return $this->highlight_end_tag;
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* @param string $highlight_end_tag
|
162 |
+
*
|
163 |
+
* @return WSAL_AlertFormatterConfiguration
|
164 |
+
*/
|
165 |
+
public function setHighlightEndTag( $highlight_end_tag ) {
|
166 |
+
$this->highlight_end_tag = $highlight_end_tag;
|
167 |
+
|
168 |
+
return $this;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* @return bool
|
173 |
+
*/
|
174 |
+
public function isSupportsHyperlinks() {
|
175 |
+
return $this->supports_hyperlinks;
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* @param bool $supports_hyperlinks
|
180 |
+
*
|
181 |
+
* @return WSAL_AlertFormatterConfiguration
|
182 |
+
*/
|
183 |
+
public function setSupportsHyperlinks( $supports_hyperlinks ) {
|
184 |
+
$this->supports_hyperlinks = $supports_hyperlinks;
|
185 |
+
|
186 |
+
return $this;
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* @return bool
|
191 |
+
*/
|
192 |
+
public function isSupportsMetadata() {
|
193 |
+
return $this->supports_metadata;
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* @param bool $supports_metadata
|
198 |
+
*
|
199 |
+
* @return WSAL_AlertFormatterConfiguration
|
200 |
+
*/
|
201 |
+
public function setSupportsMetadata( $supports_metadata ) {
|
202 |
+
$this->supports_metadata = $supports_metadata;
|
203 |
+
|
204 |
+
return $this;
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* @return int
|
209 |
+
*/
|
210 |
+
public function getMaxMetaValueLength() {
|
211 |
+
return $this->max_meta_value_length;
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* @param int $max_meta_value_length
|
216 |
+
*
|
217 |
+
* @return WSAL_AlertFormatterConfiguration
|
218 |
+
*/
|
219 |
+
public function setMaxMetaValueLength( $max_meta_value_length ) {
|
220 |
+
$this->max_meta_value_length = $max_meta_value_length;
|
221 |
+
|
222 |
+
return $this;
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* @return string
|
227 |
+
*/
|
228 |
+
public function getEmphasisStartTag() {
|
229 |
+
return $this->emphasis_start_tag;
|
230 |
+
}
|
231 |
+
|
232 |
+
/**
|
233 |
+
* @param string $emphasis_start_tag
|
234 |
+
*
|
235 |
+
* @return WSAL_AlertFormatterConfiguration
|
236 |
+
*/
|
237 |
+
public function setEmphasisStartTag( $emphasis_start_tag ) {
|
238 |
+
$this->emphasis_start_tag = $emphasis_start_tag;
|
239 |
+
|
240 |
+
return $this;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* @return string
|
245 |
+
*/
|
246 |
+
public function getEndOfLine() {
|
247 |
+
return $this->end_of_line;
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* @param string $end_of_line
|
252 |
+
*
|
253 |
+
* @return WSAL_AlertFormatterConfiguration
|
254 |
+
*/
|
255 |
+
public function setEndOfLine( $end_of_line ) {
|
256 |
+
$this->end_of_line = $end_of_line;
|
257 |
+
|
258 |
+
return $this;
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* @return string
|
263 |
+
*/
|
264 |
+
public function getHighlightStartTag() {
|
265 |
+
return $this->highlight_start_tag;
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* @param string $highlight_start_tag
|
270 |
+
*
|
271 |
+
* @return WSAL_AlertFormatterConfiguration
|
272 |
+
*/
|
273 |
+
public function setHighlightStartTag( $highlight_start_tag ) {
|
274 |
+
$this->highlight_start_tag = $highlight_start_tag;
|
275 |
+
|
276 |
+
return $this;
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* @return string
|
281 |
+
*/
|
282 |
+
public function getEmphasisEndTag() {
|
283 |
+
return $this->emphasis_end_tag;
|
284 |
+
}
|
285 |
+
|
286 |
+
/**
|
287 |
+
* @param string $emphasis_end_tag
|
288 |
+
*
|
289 |
+
* @return WSAL_AlertFormatterConfiguration
|
290 |
+
*/
|
291 |
+
public function setEmphasisEndTag( $emphasis_end_tag ) {
|
292 |
+
$this->emphasis_end_tag = $emphasis_end_tag;
|
293 |
+
|
294 |
+
return $this;
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* @return string
|
299 |
+
*/
|
300 |
+
public function getEllipsesSequence() {
|
301 |
+
return $this->ellipses_sequence;
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* @param string $ellipses_sequence
|
306 |
+
*
|
307 |
+
* @return WSAL_AlertFormatterConfiguration
|
308 |
+
*/
|
309 |
+
public function setEllipsesSequence( $ellipses_sequence ) {
|
310 |
+
$this->ellipses_sequence = $ellipses_sequence;
|
311 |
+
|
312 |
+
return $this;
|
313 |
+
}
|
314 |
+
}
|
classes/AlertFormatterFactory.php
CHANGED
@@ -23,35 +23,32 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
23 |
class WSAL_AlertFormatterFactory {
|
24 |
|
25 |
/**
|
26 |
-
* @var
|
27 |
*/
|
28 |
private static $formatter_instances = [];
|
29 |
|
30 |
/**
|
31 |
-
* @var
|
32 |
*/
|
33 |
-
private static $
|
34 |
|
35 |
public static function bootstrap() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
// let extensions register custom alert formatters
|
37 |
$formatters = apply_filters( 'wsal_alert_formatters', [
|
38 |
-
|
39 |
-
|
40 |
-
'context' => 'default',
|
41 |
-
'class' => 'WSAL_AlertFormatter'
|
42 |
-
],
|
43 |
-
[
|
44 |
-
'context' => 'dashboard-widget',
|
45 |
-
'class' => 'WSAL_DashboardWidgetFormatter'
|
46 |
-
]
|
47 |
] );
|
48 |
|
49 |
if ( ! empty( $formatters ) ) {
|
50 |
-
foreach ( $formatters as $
|
51 |
-
|
52 |
-
continue;
|
53 |
-
}
|
54 |
-
self::$formatter_stack[ $formatter['context'] ] = $formatter;
|
55 |
}
|
56 |
}
|
57 |
}
|
@@ -69,42 +66,25 @@ class WSAL_AlertFormatterFactory {
|
|
69 |
return self::$formatter_instances[ $context ];
|
70 |
}
|
71 |
|
72 |
-
if ( array_key_exists( $context, self::$
|
73 |
-
$formatter =
|
74 |
-
if ( null !== $formatter ) {
|
75 |
-
self::$formatter_instances[ $context ] = $formatter;
|
76 |
|
77 |
-
|
78 |
-
|
|
|
79 |
}
|
80 |
} catch ( Exception $exception ) {
|
81 |
-
return
|
82 |
}
|
83 |
|
84 |
-
return
|
85 |
}
|
86 |
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
// load the file if provided
|
94 |
-
if ( array_key_exists( 'file', $formatter_def )
|
95 |
-
&& ! empty( $formatter_def['file'] )
|
96 |
-
&& file_exists( $formatter_def['file'] ) ) {
|
97 |
-
require_once $formatter_def['file'];
|
98 |
-
}
|
99 |
-
|
100 |
-
try {
|
101 |
-
if ( class_exists( $formatter_def['class'] ) ) {
|
102 |
-
return new $formatter_def['class']( WpSecurityAuditLog::GetInstance() );
|
103 |
-
}
|
104 |
-
} catch ( Exception $exception ) {
|
105 |
-
return null;
|
106 |
-
}
|
107 |
-
|
108 |
-
return null;
|
109 |
}
|
110 |
}
|
23 |
class WSAL_AlertFormatterFactory {
|
24 |
|
25 |
/**
|
26 |
+
* @var WSAL_AlertFormatter[]
|
27 |
*/
|
28 |
private static $formatter_instances = [];
|
29 |
|
30 |
/**
|
31 |
+
* @var WSAL_AlertFormatterConfiguration[]
|
32 |
*/
|
33 |
+
private static $configurations = [];
|
34 |
|
35 |
public static function bootstrap() {
|
36 |
+
|
37 |
+
$html_configuration = WSAL_AlertFormatterConfiguration::buildHtmlConfiguration();
|
38 |
+
$dashboard_widget_configuration = ( clone $html_configuration )
|
39 |
+
->setIsJsInLinksAllowed( false )
|
40 |
+
->setSupportsMetadata( false )
|
41 |
+
->setSupportsHyperlinks( false );
|
42 |
+
|
43 |
// let extensions register custom alert formatters
|
44 |
$formatters = apply_filters( 'wsal_alert_formatters', [
|
45 |
+
'default' => $html_configuration,
|
46 |
+
'dashboard-widget' => $dashboard_widget_configuration
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
] );
|
48 |
|
49 |
if ( ! empty( $formatters ) ) {
|
50 |
+
foreach ( $formatters as $context => $formatter_configuration ) {
|
51 |
+
self::$configurations[ $context ] = $formatter_configuration;
|
|
|
|
|
|
|
52 |
}
|
53 |
}
|
54 |
}
|
66 |
return self::$formatter_instances[ $context ];
|
67 |
}
|
68 |
|
69 |
+
if ( array_key_exists( $context, self::$configurations ) ) {
|
70 |
+
$formatter = new WSAL_AlertFormatter( WpSecurityAuditLog::GetInstance(), self::$configurations[ $context ] );
|
|
|
|
|
71 |
|
72 |
+
self::$formatter_instances[ $context ] = $formatter;
|
73 |
+
|
74 |
+
return self::$formatter_instances[ $context ];
|
75 |
}
|
76 |
} catch ( Exception $exception ) {
|
77 |
+
return self::createDefaultFormatter();
|
78 |
}
|
79 |
|
80 |
+
return self::createDefaultFormatter();
|
81 |
}
|
82 |
|
83 |
+
/**
|
84 |
+
* @return WSAL_AlertFormatter Default formatter using full featured HTML configuration.
|
85 |
+
* @since 4.3.0
|
86 |
+
*/
|
87 |
+
private static function createDefaultFormatter() {
|
88 |
+
return new WSAL_AlertFormatter( WpSecurityAuditLog::GetInstance(), WSAL_AlertFormatterConfiguration::buildHtmlConfiguration() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
}
|
classes/AlertManager.php
CHANGED
@@ -25,7 +25,7 @@ final class WSAL_AlertManager {
|
|
25 |
/**
|
26 |
* Array of alerts (WSAL_Alert).
|
27 |
*
|
28 |
-
* @var
|
29 |
*/
|
30 |
protected $_alerts = array();
|
31 |
|
@@ -41,14 +41,14 @@ final class WSAL_AlertManager {
|
|
41 |
/**
|
42 |
* Array of loggers (WSAL_AbstractLogger).
|
43 |
*
|
44 |
-
* @var
|
45 |
*/
|
46 |
protected $_loggers = array();
|
47 |
|
48 |
/**
|
49 |
* Instance of WpSecurityAuditLog.
|
50 |
*
|
51 |
-
* @var
|
52 |
*/
|
53 |
protected $plugin;
|
54 |
|
@@ -78,14 +78,14 @@ final class WSAL_AlertManager {
|
|
78 |
*
|
79 |
* Store WP Users for caching purposes.
|
80 |
*
|
81 |
-
* @var
|
82 |
*/
|
83 |
private $wp_users = array();
|
84 |
|
85 |
/**
|
86 |
* Ignored Custom Post Types.
|
87 |
*
|
88 |
-
* @var
|
89 |
*/
|
90 |
public $ignored_cpts = array();
|
91 |
|
@@ -111,8 +111,8 @@ final class WSAL_AlertManager {
|
|
111 |
$this->AddFromFile( $file );
|
112 |
}
|
113 |
|
114 |
-
add_action( 'shutdown', array( $this, '_CommitPipeline' ) );
|
115 |
add_action( 'wsal_init', array( $this, 'schedule_log_events' ) );
|
|
|
116 |
|
117 |
/**
|
118 |
* Filter: `wsal_deprecated_event_ids`
|
@@ -130,9 +130,10 @@ final class WSAL_AlertManager {
|
|
130 |
*
|
131 |
* Ignored custom post types filter.
|
132 |
*
|
|
|
|
|
133 |
* @since 3.3.1
|
134 |
*
|
135 |
-
* @param array $ignored_cpts - Array of custom post types.
|
136 |
*/
|
137 |
$this->ignored_cpts = apply_filters(
|
138 |
'wsal_ignored_custom_post_types',
|
@@ -149,8 +150,8 @@ final class WSAL_AlertManager {
|
|
149 |
)
|
150 |
);
|
151 |
|
152 |
-
$this->date_format
|
153 |
-
|
154 |
}
|
155 |
|
156 |
/**
|
@@ -285,6 +286,7 @@ final class WSAL_AlertManager {
|
|
285 |
|
286 |
// If user or user role is enable then go ahead.
|
287 |
if ( $this->CheckEnableUserRoles( $username, $roles ) ) {
|
|
|
288 |
if ( $delayed ) {
|
289 |
$this->TriggerIf( $type, $data, null );
|
290 |
} else {
|
@@ -367,6 +369,9 @@ final class WSAL_AlertManager {
|
|
367 |
}
|
368 |
|
369 |
if ( $this->CheckEnableUserRoles( $username, $roles ) ) {
|
|
|
|
|
|
|
370 |
$this->_pipeline[] = array(
|
371 |
'type' => $type,
|
372 |
'data' => $data,
|
@@ -626,38 +631,38 @@ final class WSAL_AlertManager {
|
|
626 |
* Add event severity to the meta data of the event.
|
627 |
* The lower the number, the higher is the severity.
|
628 |
*
|
629 |
-
*
|
|
|
|
|
|
|
|
|
630 |
* @since 3.3.1
|
631 |
*/
|
632 |
if ( is_object( $severity ) && property_exists( $severity, 'name' ) ) {
|
633 |
if ( 'E_CRITICAL' === $severity->name ) {
|
634 |
-
|
|
|
635 |
} elseif ( 'E_WARNING' === $severity->name ) {
|
636 |
-
|
|
|
637 |
} elseif ( 'E_NOTICE' === $severity->name ) {
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
$event_data['Severity'] = 6;
|
643 |
-
} elseif ( 'WSAL_MEDIUM' === $severity->name ) {
|
644 |
-
$event_data['Severity'] = 10;
|
645 |
-
} elseif ( 'WSAL_LOW' === $severity->name ) {
|
646 |
-
$event_data['Severity'] = 15;
|
647 |
-
} elseif ( 'WSAL_INFORMATIONAL' === $severity->name ) {
|
648 |
-
$event_data['Severity'] = 20;
|
649 |
}
|
650 |
}
|
651 |
|
652 |
/*
|
653 |
* In cases where we were not able to figure out a severity already
|
654 |
-
* use a default of
|
655 |
*
|
656 |
* @since 4.3.0
|
657 |
*/
|
658 |
if ( ! isset( $event_data['Severity'] ) ) {
|
659 |
-
//
|
660 |
-
|
|
|
661 |
}
|
662 |
|
663 |
// Add event object.
|
@@ -694,6 +699,7 @@ final class WSAL_AlertManager {
|
|
694 |
*/
|
695 |
$event_data = apply_filters( 'wsal_event_data_before_log', $event_data, $event_id );
|
696 |
|
|
|
697 |
foreach ( $this->_loggers as $logger ) {
|
698 |
$logger->Log( $event_id, $event_data );
|
699 |
}
|
@@ -983,7 +989,7 @@ final class WSAL_AlertManager {
|
|
983 |
foreach ( $events as $event ) {
|
984 |
// Get event meta.
|
985 |
$meta_data = $event->GetMetaArray();
|
986 |
-
$meta_data['UserData'] = $this->get_event_user_data(
|
987 |
$mwp_events->events[ $event->id ] = new stdClass();
|
988 |
$mwp_events->events[ $event->id ]->id = $event->id;
|
989 |
$mwp_events->events[ $event->id ]->alert_id = $event->alert_id;
|
@@ -1860,7 +1866,6 @@ final class WSAL_AlertManager {
|
|
1860 |
/**
|
1861 |
* Get alert details.
|
1862 |
*
|
1863 |
-
* @param string $report_format Report format - "csv" or "html".
|
1864 |
* @param int $entry_id - Entry ID.
|
1865 |
* @param int $alert_id - Alert ID.
|
1866 |
* @param int $site_id - Site ID.
|
@@ -1873,7 +1878,7 @@ final class WSAL_AlertManager {
|
|
1873 |
* @return array|false details
|
1874 |
* @throws Exception
|
1875 |
*/
|
1876 |
-
private function get_alert_details( $
|
1877 |
// Must be a new instance every time, otherwise the alert message is not retrieved properly.
|
1878 |
$occurrence = new WSAL_Models_Occurrence();
|
1879 |
|
@@ -1917,19 +1922,21 @@ final class WSAL_AlertManager {
|
|
1917 |
$occurrence->alert_id = $alert_id;
|
1918 |
$occurrence->created_on = $created_on;
|
1919 |
|
|
|
|
|
1920 |
if ( $occurrence->is_migrated ) {
|
1921 |
$occurrence->_cachedmessage = $occurrence->GetMetaValue( 'MigratedMesg', false );
|
1922 |
}
|
1923 |
|
1924 |
if ( ! $occurrence->is_migrated || ! $occurrence->_cachedmessage ) {
|
1925 |
-
$occurrence->_cachedmessage = $occurrence->GetAlert()->GetMessage( $
|
1926 |
}
|
1927 |
|
1928 |
if ( ! $user_id ) {
|
1929 |
$username = __( 'System', 'wp-security-audit-log' );
|
1930 |
$roles = '';
|
1931 |
} else {
|
1932 |
-
$username =
|
1933 |
}
|
1934 |
|
1935 |
// Meta details.
|
@@ -1941,7 +1948,7 @@ final class WSAL_AlertManager {
|
|
1941 |
'timestamp' => $created_on,
|
1942 |
'date' => WSAL_Utilities_DateTimeFormatter::instance()->getFormattedDateTime( $created_on ),
|
1943 |
'code' => $const->name,
|
1944 |
-
'message' => $occurrence->GetMessage(
|
1945 |
'user_name' => $username,
|
1946 |
'user_data' => $user_id ? $this->get_event_user_data( $username ) : false,
|
1947 |
'role' => $roles,
|
25 |
/**
|
26 |
* Array of alerts (WSAL_Alert).
|
27 |
*
|
28 |
+
* @var WSAL_Alert[]
|
29 |
*/
|
30 |
protected $_alerts = array();
|
31 |
|
41 |
/**
|
42 |
* Array of loggers (WSAL_AbstractLogger).
|
43 |
*
|
44 |
+
* @var WSAL_AbstractLogger[]
|
45 |
*/
|
46 |
protected $_loggers = array();
|
47 |
|
48 |
/**
|
49 |
* Instance of WpSecurityAuditLog.
|
50 |
*
|
51 |
+
* @var WpSecurityAuditLog
|
52 |
*/
|
53 |
protected $plugin;
|
54 |
|
78 |
*
|
79 |
* Store WP Users for caching purposes.
|
80 |
*
|
81 |
+
* @var WP_User[]
|
82 |
*/
|
83 |
private $wp_users = array();
|
84 |
|
85 |
/**
|
86 |
* Ignored Custom Post Types.
|
87 |
*
|
88 |
+
* @var string[]
|
89 |
*/
|
90 |
public $ignored_cpts = array();
|
91 |
|
111 |
$this->AddFromFile( $file );
|
112 |
}
|
113 |
|
|
|
114 |
add_action( 'wsal_init', array( $this, 'schedule_log_events' ) );
|
115 |
+
add_action( 'shutdown', array( $this, '_CommitPipeline' ), 8 );
|
116 |
|
117 |
/**
|
118 |
* Filter: `wsal_deprecated_event_ids`
|
130 |
*
|
131 |
* Ignored custom post types filter.
|
132 |
*
|
133 |
+
* @param array $ignored_cpts - Array of custom post types.
|
134 |
+
*
|
135 |
* @since 3.3.1
|
136 |
*
|
|
|
137 |
*/
|
138 |
$this->ignored_cpts = apply_filters(
|
139 |
'wsal_ignored_custom_post_types',
|
150 |
)
|
151 |
);
|
152 |
|
153 |
+
$this->date_format = $this->plugin->settings()->GetDateFormat();
|
154 |
+
$this->sanitized_date_format = $this->plugin->settings()->GetDateFormat( true );
|
155 |
}
|
156 |
|
157 |
/**
|
286 |
|
287 |
// If user or user role is enable then go ahead.
|
288 |
if ( $this->CheckEnableUserRoles( $username, $roles ) ) {
|
289 |
+
$data['Timestamp'] = current_time( 'U.u', 'true' );
|
290 |
if ( $delayed ) {
|
291 |
$this->TriggerIf( $type, $data, null );
|
292 |
} else {
|
369 |
}
|
370 |
|
371 |
if ( $this->CheckEnableUserRoles( $username, $roles ) ) {
|
372 |
+
if ( ! array_key_exists( 'Timestamp', $data ) ) {
|
373 |
+
$data['Timestamp'] = current_time( 'U.u', 'true' );
|
374 |
+
}
|
375 |
$this->_pipeline[] = array(
|
376 |
'type' => $type,
|
377 |
'data' => $data,
|
631 |
* Add event severity to the meta data of the event.
|
632 |
* The lower the number, the higher is the severity.
|
633 |
*
|
634 |
+
* Based on monolog log levels:
|
635 |
+
*
|
636 |
+
* Formerly based on Syslog severity levels (https://en.wikipedia.org/wiki/Syslog#Severity_level).
|
637 |
+
*
|
638 |
+
* @see https://github.com/Seldaek/monolog/blob/main/doc/01-usage.md#log-levels
|
639 |
* @since 3.3.1
|
640 |
*/
|
641 |
if ( is_object( $severity ) && property_exists( $severity, 'name' ) ) {
|
642 |
if ( 'E_CRITICAL' === $severity->name ) {
|
643 |
+
// CRITICAL (500): Critical conditions.
|
644 |
+
$event_data['Severity'] = 500;
|
645 |
} elseif ( 'E_WARNING' === $severity->name ) {
|
646 |
+
// WARNING (300): Exceptional occurrences that are not errors.
|
647 |
+
$event_data['Severity'] = 300;
|
648 |
} elseif ( 'E_NOTICE' === $severity->name ) {
|
649 |
+
// DEBUG (100): Detailed debug information.
|
650 |
+
$event_data['Severity'] = 100;
|
651 |
+
} elseif ( property_exists( $severity, 'value' ) ) {
|
652 |
+
$event_data['Severity'] = $severity->value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
653 |
}
|
654 |
}
|
655 |
|
656 |
/*
|
657 |
* In cases where we were not able to figure out a severity already
|
658 |
+
* use a default of 200: info.
|
659 |
*
|
660 |
* @since 4.3.0
|
661 |
*/
|
662 |
if ( ! isset( $event_data['Severity'] ) ) {
|
663 |
+
// assuming this is a misclassified item and using info code.
|
664 |
+
// INFO (200): Interesting events.
|
665 |
+
$event_data['Severity'] = 200;
|
666 |
}
|
667 |
|
668 |
// Add event object.
|
699 |
*/
|
700 |
$event_data = apply_filters( 'wsal_event_data_before_log', $event_data, $event_id );
|
701 |
|
702 |
+
// log to internal and/or external database immediately
|
703 |
foreach ( $this->_loggers as $logger ) {
|
704 |
$logger->Log( $event_id, $event_data );
|
705 |
}
|
989 |
foreach ( $events as $event ) {
|
990 |
// Get event meta.
|
991 |
$meta_data = $event->GetMetaArray();
|
992 |
+
$meta_data['UserData'] = $this->get_event_user_data( WSAL_Utilities_UsersUtils::GetUsername( $meta_data ) );
|
993 |
$mwp_events->events[ $event->id ] = new stdClass();
|
994 |
$mwp_events->events[ $event->id ]->id = $event->id;
|
995 |
$mwp_events->events[ $event->id ]->alert_id = $event->alert_id;
|
1866 |
/**
|
1867 |
* Get alert details.
|
1868 |
*
|
|
|
1869 |
* @param int $entry_id - Entry ID.
|
1870 |
* @param int $alert_id - Alert ID.
|
1871 |
* @param int $site_id - Site ID.
|
1878 |
* @return array|false details
|
1879 |
* @throws Exception
|
1880 |
*/
|
1881 |
+
private function get_alert_details( $entry_id, $alert_id, $site_id, $created_on, $user_id = null, $roles = null, $ip = '', $ua = '', $context = 'default' ) {
|
1882 |
// Must be a new instance every time, otherwise the alert message is not retrieved properly.
|
1883 |
$occurrence = new WSAL_Models_Occurrence();
|
1884 |
|
1922 |
$occurrence->alert_id = $alert_id;
|
1923 |
$occurrence->created_on = $created_on;
|
1924 |
|
1925 |
+
$event_metadata = $occurrence->GetMetaArray();
|
1926 |
+
|
1927 |
if ( $occurrence->is_migrated ) {
|
1928 |
$occurrence->_cachedmessage = $occurrence->GetMetaValue( 'MigratedMesg', false );
|
1929 |
}
|
1930 |
|
1931 |
if ( ! $occurrence->is_migrated || ! $occurrence->_cachedmessage ) {
|
1932 |
+
$occurrence->_cachedmessage = $occurrence->GetAlert()->GetMessage( $event_metadata, null, $entry_id, $context );
|
1933 |
}
|
1934 |
|
1935 |
if ( ! $user_id ) {
|
1936 |
$username = __( 'System', 'wp-security-audit-log' );
|
1937 |
$roles = '';
|
1938 |
} else {
|
1939 |
+
$username = WSAL_Utilities_UsersUtils::GetUsername( $event_metadata );
|
1940 |
}
|
1941 |
|
1942 |
// Meta details.
|
1948 |
'timestamp' => $created_on,
|
1949 |
'date' => WSAL_Utilities_DateTimeFormatter::instance()->getFormattedDateTime( $created_on ),
|
1950 |
'code' => $const->name,
|
1951 |
+
'message' => $occurrence->GetMessage( $event_metadata, $context ),
|
1952 |
'user_name' => $username,
|
1953 |
'user_data' => $user_id ? $this->get_event_user_data( $username ) : false,
|
1954 |
'role' => $roles,
|
classes/AuditLogGridView.php
CHANGED
@@ -391,7 +391,11 @@ class WSAL_AuditLogGridView extends WP_List_Table {
|
|
391 |
$code = $code ? $code->severity : 0;
|
392 |
$const = $this->_plugin->constants->get_constant_to_display( $code );
|
393 |
|
394 |
-
|
|
|
|
|
|
|
|
|
395 |
case 'site':
|
396 |
$info = get_blog_details( $item->site_id, true );
|
397 |
return ! $info ? ( 'Unknown Site ' . $item->site_id )
|
@@ -417,7 +421,7 @@ class WSAL_AuditLogGridView extends WP_List_Table {
|
|
417 |
? WSAL_Utilities_DateTimeFormatter::instance()->getFormattedDateTime($item->created_on, 'time' )
|
418 |
: '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
|
419 |
|
420 |
-
$username =
|
421 |
$user = get_user_by( 'login', $username ); // Get user.
|
422 |
if ( empty( $this->name_type ) ) {
|
423 |
$this->name_type = $this->_plugin->settings()->get_type_username();
|
391 |
$code = $code ? $code->severity : 0;
|
392 |
$const = $this->_plugin->constants->get_constant_to_display( $code );
|
393 |
|
394 |
+
$css_classes = ['log-type', 'log-type-' . $const->value ];
|
395 |
+
if (property_exists($const, 'css')) {
|
396 |
+
array_push($css_classes, 'log-type-' . $const->css);
|
397 |
+
}
|
398 |
+
return '<a class="tooltip" href="#" data-tooltip="' . esc_html( $const->name ) . '"><span class="' . implode( ' ', $css_classes ) . '"></span></a>';
|
399 |
case 'site':
|
400 |
$info = get_blog_details( $item->site_id, true );
|
401 |
return ! $info ? ( 'Unknown Site ' . $item->site_id )
|
421 |
? WSAL_Utilities_DateTimeFormatter::instance()->getFormattedDateTime($item->created_on, 'time' )
|
422 |
: '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
|
423 |
|
424 |
+
$username = WSAL_Utilities_UsersUtils::GetUsername( $this->item_meta[ $item->getId() ] ); // Get username.
|
425 |
$user = get_user_by( 'login', $username ); // Get user.
|
426 |
if ( empty( $this->name_type ) ) {
|
427 |
$this->name_type = $this->_plugin->settings()->get_type_username();
|
classes/AuditLogListView.php
CHANGED
@@ -50,15 +50,6 @@ class WSAL_AuditLogListView extends WP_List_Table {
|
|
50 |
*/
|
51 |
private $selected_columns = '';
|
52 |
|
53 |
-
/**
|
54 |
-
* Display Name Type.
|
55 |
-
*
|
56 |
-
* @since 3.3.1
|
57 |
-
*
|
58 |
-
* @var string
|
59 |
-
*/
|
60 |
-
private $name_type = '';
|
61 |
-
|
62 |
/**
|
63 |
* Events Query Arguments.
|
64 |
*
|
@@ -434,44 +425,29 @@ class WSAL_AuditLogListView extends WP_List_Table {
|
|
434 |
$code = $code ? $code->severity : 0;
|
435 |
$const = $this->_plugin->constants->get_constant_to_display( $code );
|
436 |
|
437 |
-
|
|
|
|
|
|
|
|
|
438 |
case 'crtd':
|
439 |
return $item->created_on
|
440 |
? WSAL_Utilities_DateTimeFormatter::instance()->getFormattedDateTime( $item->created_on, 'datetime', true, true )
|
441 |
: '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
|
442 |
case 'user':
|
443 |
-
$username =
|
444 |
-
$user = get_user_by( 'login', $username );
|
445 |
-
|
446 |
-
|
447 |
-
}
|
448 |
|
449 |
-
//
|
450 |
-
if ( $
|
451 |
// Get user avatar.
|
452 |
$image = get_avatar( $user->ID, 32 );
|
453 |
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
} elseif (
|
458 |
-
'first_last_name' === $this->name_type
|
459 |
-
&& ( ! empty( $user->first_name ) || ! empty( $user->last_name ) )
|
460 |
-
) {
|
461 |
-
$display_name = $user->first_name . ' ' . $user->last_name;
|
462 |
-
} else {
|
463 |
-
$display_name = $user->user_login;
|
464 |
-
}
|
465 |
-
|
466 |
-
if ( class_exists( 'WSAL_SearchExtension' ) ) {
|
467 |
-
$tooltip = esc_attr__( 'Show me all activity by this User', 'wp-security-audit-log' );
|
468 |
-
|
469 |
-
$uhtml = '<a class="search-user" data-tooltip="' . $tooltip . '" data-user="' . $user->user_login . '" href="' . admin_url( 'user-edit.php?user_id=' . $user->ID )
|
470 |
-
. '" target="_blank">' . esc_html( $display_name ) . '</a>';
|
471 |
-
} else {
|
472 |
-
$uhtml = '<a href="' . admin_url( 'user-edit.php?user_id=' . $user->ID )
|
473 |
-
. '" target="_blank">' . esc_html( $display_name ) . '</a>';
|
474 |
-
}
|
475 |
|
476 |
$roles = $item->GetUserRoles( $this->item_meta[ $item->getId() ] );
|
477 |
if ( is_array( $roles ) && count( $roles ) ) {
|
@@ -482,21 +458,13 @@ class WSAL_AuditLogListView extends WP_List_Table {
|
|
482 |
$roles = '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
|
483 |
}
|
484 |
} elseif ( 'Plugin' == $username ) {
|
485 |
-
$image = '<img src="' . $this->_plugin->GetBaseUrl() . '/img/wsal-logo.png" width="32" alt="WSAL Logo"/>';
|
486 |
$uhtml = '<i>' . __( 'Plugin', 'wp-security-audit-log' ) . '</i>';
|
487 |
-
$roles = '';
|
488 |
} elseif ( 'Plugins' == $username ) {
|
489 |
-
$image = '<span class="dashicons dashicons-wordpress wsal-system-icon"></span>';
|
490 |
$uhtml = '<i>' . __( 'Plugins', 'wp-security-audit-log' ) . '</i>';
|
491 |
-
$roles = '';
|
492 |
} elseif ( 'Website Visitor' == $username || 'Unregistered user' == $username ) {
|
493 |
-
$image = '<span class="dashicons dashicons-wordpress wsal-system-icon"></span>';
|
494 |
$uhtml = '<i>' . __( 'Unregistered user', 'wp-security-audit-log' ) . '</i>';
|
495 |
-
$roles = '';
|
496 |
} else {
|
497 |
-
$image = '<span class="dashicons dashicons-wordpress wsal-system-icon"></span>';
|
498 |
$uhtml = '<i>' . __( 'System', 'wp-security-audit-log' ) . '</i>';
|
499 |
-
$roles = '';
|
500 |
}
|
501 |
$row_user_data = $image . $uhtml . '<br/>' . $roles;
|
502 |
|
50 |
*/
|
51 |
private $selected_columns = '';
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
/**
|
54 |
* Events Query Arguments.
|
55 |
*
|
425 |
$code = $code ? $code->severity : 0;
|
426 |
$const = $this->_plugin->constants->get_constant_to_display( $code );
|
427 |
|
428 |
+
$css_classes = ['log-type', 'log-type-' . $const->value ];
|
429 |
+
if (property_exists($const, 'css')) {
|
430 |
+
array_push($css_classes, 'log-type-' . $const->css);
|
431 |
+
}
|
432 |
+
return '<a class="tooltip" href="#" data-tooltip="' . esc_html( $const->name ) . '"><span class="' . implode( ' ', $css_classes ) . '"></span></a>';
|
433 |
case 'crtd':
|
434 |
return $item->created_on
|
435 |
? WSAL_Utilities_DateTimeFormatter::instance()->getFormattedDateTime( $item->created_on, 'datetime', true, true )
|
436 |
: '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
|
437 |
case 'user':
|
438 |
+
$username = WSAL_Utilities_UsersUtils::GetUsername( $this->item_meta[ $item->getId() ] );
|
439 |
+
$user = get_user_by( 'login', $username );
|
440 |
+
$roles = '';
|
441 |
+
$image = '<span class="dashicons dashicons-wordpress wsal-system-icon"></span>';
|
|
|
442 |
|
443 |
+
// check if there's a user with given username
|
444 |
+
if ( $user instanceof WP_User) {
|
445 |
// Get user avatar.
|
446 |
$image = get_avatar( $user->ID, 32 );
|
447 |
|
448 |
+
$display_name = WSAL_Utilities_UsersUtils::get_display_label( $this->_plugin, $user );
|
449 |
+
$user_edit_link = admin_url( 'user-edit.php?user_id=' . $user->ID );
|
450 |
+
$uhtml = '<a href="' . $user_edit_link . '" target="_blank">' . esc_html( $display_name ) . '</a>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
451 |
|
452 |
$roles = $item->GetUserRoles( $this->item_meta[ $item->getId() ] );
|
453 |
if ( is_array( $roles ) && count( $roles ) ) {
|
458 |
$roles = '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
|
459 |
}
|
460 |
} elseif ( 'Plugin' == $username ) {
|
|
|
461 |
$uhtml = '<i>' . __( 'Plugin', 'wp-security-audit-log' ) . '</i>';
|
|
|
462 |
} elseif ( 'Plugins' == $username ) {
|
|
|
463 |
$uhtml = '<i>' . __( 'Plugins', 'wp-security-audit-log' ) . '</i>';
|
|
|
464 |
} elseif ( 'Website Visitor' == $username || 'Unregistered user' == $username ) {
|
|
|
465 |
$uhtml = '<i>' . __( 'Unregistered user', 'wp-security-audit-log' ) . '</i>';
|
|
|
466 |
} else {
|
|
|
467 |
$uhtml = '<i>' . __( 'System', 'wp-security-audit-log' ) . '</i>';
|
|
|
468 |
}
|
469 |
$row_user_data = $image . $uhtml . '<br/>' . $roles;
|
470 |
|
classes/Connector/ConnectorFactory.php
CHANGED
@@ -22,20 +22,18 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
22 |
*/
|
23 |
abstract class WSAL_Connector_ConnectorFactory {
|
24 |
|
25 |
-
/**
|
26 |
-
* Connector.
|
27 |
-
*
|
28 |
-
* @var array
|
29 |
-
*/
|
30 |
-
private static $connector;
|
31 |
-
|
32 |
/**
|
33 |
* Adapter.
|
34 |
*
|
35 |
* @var string
|
36 |
*/
|
37 |
public static $adapter;
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
39 |
/**
|
40 |
* Occurrence is installed.
|
41 |
*
|
@@ -79,6 +77,7 @@ abstract class WSAL_Connector_ConnectorFactory {
|
|
79 |
self::$connector = new WSAL_Connector_MySQLDB( $connection_config );
|
80 |
}
|
81 |
}
|
|
|
82 |
return self::$connector;
|
83 |
}
|
84 |
|
@@ -89,16 +88,16 @@ abstract class WSAL_Connector_ConnectorFactory {
|
|
89 |
* @throws Freemius_Exception
|
90 |
*/
|
91 |
public static function GetConfig() {
|
92 |
-
$
|
93 |
-
$
|
94 |
|
95 |
if ( function_exists( 'wsal_freemius' ) && ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
|
96 |
$is_not_paying = wsal_freemius()->is_not_paying();
|
97 |
} else {
|
98 |
-
$is_not_paying =
|
99 |
}
|
100 |
|
101 |
-
if ( $
|
102 |
$connector = new WSAL_Connector_MySQLDB();
|
103 |
|
104 |
if ( ! self::$is_installed ) {
|
@@ -106,86 +105,45 @@ abstract class WSAL_Connector_ConnectorFactory {
|
|
106 |
$connector->installAll();
|
107 |
}
|
108 |
|
109 |
-
$
|
110 |
}
|
111 |
|
112 |
-
if ( empty( $
|
113 |
return null;
|
114 |
-
} else {
|
115 |
-
return array(
|
116 |
-
'type' => $conf->GetAdapterConfig( 'adapter-type' ),
|
117 |
-
'user' => $conf->GetAdapterConfig( 'adapter-user' ),
|
118 |
-
'password' => $conf->GetAdapterConfig( 'adapter-password' ),
|
119 |
-
'name' => $conf->GetAdapterConfig( 'adapter-name' ),
|
120 |
-
'hostname' => $conf->GetAdapterConfig( 'adapter-hostname' ),
|
121 |
-
'base_prefix' => $conf->GetAdapterConfig( 'adapter-base-prefix' ),
|
122 |
-
'is_ssl' => $conf->GetAdapterConfig( 'adapter-ssl' ),
|
123 |
-
'is_cc' => $conf->GetAdapterConfig( 'adapter-client-certificate' ),
|
124 |
-
'ssl_ca' => $conf->GetAdapterConfig( 'adapter-ssl-ca' ),
|
125 |
-
'ssl_cert' => $conf->GetAdapterConfig( 'adapter-ssl-cert' ),
|
126 |
-
'ssl_key' => $conf->GetAdapterConfig( 'adapter-ssl-key' ),
|
127 |
-
);
|
128 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}
|
130 |
|
131 |
/**
|
132 |
* Check the adapter config with a test connection.
|
133 |
*
|
134 |
-
* @param
|
135 |
-
*
|
136 |
-
* @param string $password - Adapter password.
|
137 |
-
* @param string $name - Adapter name.
|
138 |
-
* @param string $hostname - Adapter hostname.
|
139 |
-
* @param string $base_prefix - Adapter base_prefix.
|
140 |
-
* @param bool $is_ssl - Set if connection is SSL encrypted.
|
141 |
-
* @param bool $is_cc - Set if connection has client certificates.
|
142 |
-
* @param string $ssl_ca - Certificate Authority.
|
143 |
-
* @param string $ssl_cert - Client Certificate.
|
144 |
-
* @param string $ssl_key - Client Key.
|
145 |
* @return boolean true|false
|
146 |
*/
|
147 |
-
public static function CheckConfig( $
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
}
|
157 |
-
return $result;
|
158 |
-
}
|
159 |
|
160 |
-
|
161 |
-
* Create array config.
|
162 |
-
*
|
163 |
-
* @param string $type - Adapter type.
|
164 |
-
* @param string $user - Adapter user.
|
165 |
-
* @param string $password - Adapter password.
|
166 |
-
* @param string $name - Adapter name.
|
167 |
-
* @param string $hostname - Adapter hostname.
|
168 |
-
* @param string $base_prefix - Adapter base_prefix.
|
169 |
-
* @param bool $is_ssl - Set if connection is SSL encrypted.
|
170 |
-
* @param bool $is_cc - Set if connection has client certificates.
|
171 |
-
* @param string $ssl_ca - Certificate Authority.
|
172 |
-
* @param string $ssl_cert - Client Certificate.
|
173 |
-
* @param string $ssl_key - Client Key.
|
174 |
-
* @return array config
|
175 |
-
*/
|
176 |
-
public static function GetConfigArray( $type, $user, $password, $name, $hostname, $base_prefix, $is_ssl, $is_cc, $ssl_ca, $ssl_cert, $ssl_key ) {
|
177 |
-
return array(
|
178 |
-
'type' => $type,
|
179 |
-
'user' => $user,
|
180 |
-
'password' => $password,
|
181 |
-
'name' => $name,
|
182 |
-
'hostname' => $hostname,
|
183 |
-
'base_prefix' => $base_prefix,
|
184 |
-
'is_ssl' => $is_ssl,
|
185 |
-
'is_cc' => $is_cc,
|
186 |
-
'ssl_ca' => $ssl_ca,
|
187 |
-
'ssl_cert' => $ssl_cert,
|
188 |
-
'ssl_key' => $ssl_key,
|
189 |
-
);
|
190 |
}
|
191 |
}
|
22 |
*/
|
23 |
abstract class WSAL_Connector_ConnectorFactory {
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
/**
|
26 |
* Adapter.
|
27 |
*
|
28 |
* @var string
|
29 |
*/
|
30 |
public static $adapter;
|
31 |
+
/**
|
32 |
+
* Connector.
|
33 |
+
*
|
34 |
+
* @var array
|
35 |
+
*/
|
36 |
+
private static $connector;
|
37 |
/**
|
38 |
* Occurrence is installed.
|
39 |
*
|
77 |
self::$connector = new WSAL_Connector_MySQLDB( $connection_config );
|
78 |
}
|
79 |
}
|
80 |
+
|
81 |
return self::$connector;
|
82 |
}
|
83 |
|
88 |
* @throws Freemius_Exception
|
89 |
*/
|
90 |
public static function GetConfig() {
|
91 |
+
$plugin = WpSecurityAuditLog::GetInstance();
|
92 |
+
$connection_name = $plugin->GetGlobalSetting( 'adapter-connection' );
|
93 |
|
94 |
if ( function_exists( 'wsal_freemius' ) && ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
|
95 |
$is_not_paying = wsal_freemius()->is_not_paying();
|
96 |
} else {
|
97 |
+
$is_not_paying = ! WpSecurityAuditLog::is_premium_freemius();
|
98 |
}
|
99 |
|
100 |
+
if ( $connection_name && $is_not_paying ) {
|
101 |
$connector = new WSAL_Connector_MySQLDB();
|
102 |
|
103 |
if ( ! self::$is_installed ) {
|
105 |
$connector->installAll();
|
106 |
}
|
107 |
|
108 |
+
$connection_name = null;
|
109 |
}
|
110 |
|
111 |
+
if ( empty( $connection_name ) ) {
|
112 |
return null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
}
|
114 |
+
|
115 |
+
/*
|
116 |
+
* Reused code from the external DB module.
|
117 |
+
*
|
118 |
+
* @see WSAL_Ext_Common::get_connection()
|
119 |
+
*/
|
120 |
+
$connection_raw = maybe_unserialize( $plugin->GetGlobalSetting( 'connection-' . $connection_name ) );
|
121 |
+
$connection = ( $connection_raw instanceof stdClass ) ? json_decode( json_encode( $connection_raw ), true ) : $connection_raw;
|
122 |
+
if ( ! is_array( $connection ) || empty( $connection ) ) {
|
123 |
+
return null;
|
124 |
+
}
|
125 |
+
|
126 |
+
return $connection;
|
127 |
}
|
128 |
|
129 |
/**
|
130 |
* Check the adapter config with a test connection.
|
131 |
*
|
132 |
+
* @param array $config Configuration data.
|
133 |
+
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
* @return boolean true|false
|
135 |
*/
|
136 |
+
public static function CheckConfig( $config ) {
|
137 |
+
// only mysql supported at the moment
|
138 |
+
if ( array_key_exists( 'type', $config ) && 'mysql' === $config['type'] ) {
|
139 |
+
try {
|
140 |
+
$test = new WSAL_Connector_MySQLDB( $config );
|
141 |
+
return $test->TestConnection();
|
142 |
+
} catch ( Exception $e ) {
|
143 |
+
return false;
|
144 |
+
}
|
145 |
}
|
|
|
|
|
146 |
|
147 |
+
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
}
|
149 |
}
|
classes/Connector/MySQLDB.php
CHANGED
@@ -49,7 +49,7 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
|
|
49 |
$connection_config = $this->connectionConfig;
|
50 |
$password = $this->decryptString( $connection_config['password'] );
|
51 |
|
52 |
-
$new_wpdb = new wpdbCustom( $connection_config['user'], $password, $connection_config['
|
53 |
|
54 |
if ( isset( $new_wpdb->error ) && isset( $new_wpdb->dbh ) ) {
|
55 |
throw new Exception( $new_wpdb->dbh->error, $new_wpdb->dbh->errno );
|
@@ -74,7 +74,7 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
|
|
74 |
}
|
75 |
}
|
76 |
} elseif ( isset( $new_wpdb->db_select_error ) ) {
|
77 |
-
throw new Exception( 'Error: Database ' . $connection_config['
|
78 |
} elseif ( ! $new_wpdb->has_connected ) {
|
79 |
throw new Exception( 'Error establishing a database connection.' );
|
80 |
} else {
|
@@ -89,11 +89,13 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
|
|
89 |
*/
|
90 |
private function createConnection() {
|
91 |
if ( ! empty( $this->connectionConfig ) ) {
|
92 |
-
// TO DO: Use the provided connection config.
|
93 |
$connection_config = $this->connectionConfig;
|
94 |
$password = $this->decryptString( $connection_config['password'] );
|
95 |
-
$new_wpdb = new wpdbCustom( $connection_config['user'], $password, $connection_config['
|
96 |
-
|
|
|
|
|
|
|
97 |
return $new_wpdb;
|
98 |
} else {
|
99 |
global $wpdb;
|
@@ -525,95 +527,6 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
|
|
525 |
$wsal->wsal_deprecate( __METHOD__, '3.2.3.3' );
|
526 |
}
|
527 |
|
528 |
-
/**
|
529 |
-
* Mirroring Occurrences and Metadata Tables.
|
530 |
-
* Read from current DB and copy into Mirroring DB.
|
531 |
-
*
|
532 |
-
* @param array $args - Archive Database and limit by date.
|
533 |
-
*
|
534 |
-
* @return mixed|null
|
535 |
-
*/
|
536 |
-
public function MirroringAlertsToDB( $args ) {
|
537 |
-
$last_event = null;
|
538 |
-
$first_occurrence_id = null;
|
539 |
-
$_wpdb = $this->getConnection();
|
540 |
-
$mirroring_db = $args['mirroring_db'];
|
541 |
-
|
542 |
-
// Load data Occurrences from WP.
|
543 |
-
$occurrence = new WSAL_Adapters_MySQL_Occurrence( $_wpdb );
|
544 |
-
if ( ! $occurrence->IsInstalled() ) {
|
545 |
-
return null;
|
546 |
-
}
|
547 |
-
|
548 |
-
if ( isset( $args['filter'] ) && 'event-codes' === $args['filter'] && isset( $args['events'] ) ) {
|
549 |
-
$sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE id > ' . $args['last_occ_id'] . ' AND created_on > ' . $args['last_created_on'] . ' AND alert_id IN ' . $args['events'];
|
550 |
-
} elseif ( isset( $args['filter'] ) && 'except-codes' === $args['filter'] && isset( $args['events'] ) ) {
|
551 |
-
$sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE id > ' . $args['last_occ_id'] . ' AND created_on > ' . $args['last_created_on'] . ' AND alert_id NOT IN ' . $args['events'];
|
552 |
-
} else {
|
553 |
-
$sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE id > ' . $args['last_occ_id'] . ' AND created_on > ' . $args['last_created_on'];
|
554 |
-
}
|
555 |
-
|
556 |
-
// Query the events.
|
557 |
-
$occurrences = $_wpdb->get_results( $sql, ARRAY_A );
|
558 |
-
|
559 |
-
if ( ! empty( $occurrences ) ) {
|
560 |
-
$occurrence_new = new WSAL_Adapters_MySQL_Occurrence( $mirroring_db );
|
561 |
-
$sql = 'INSERT INTO ' . $occurrence_new->GetTable() . ' (id, site_id, alert_id, created_on, is_read) VALUES ';
|
562 |
-
|
563 |
-
foreach ( $occurrences as $entry ) {
|
564 |
-
$sql .= $mirroring_db->prepare(
|
565 |
-
'( %d, %d, %d, %d, %d ), ',
|
566 |
-
intval( $entry['id'] ),
|
567 |
-
intval( $entry['site_id'] ),
|
568 |
-
intval( $entry['alert_id'] ),
|
569 |
-
$entry['created_on'],
|
570 |
-
$entry['is_read']
|
571 |
-
);
|
572 |
-
|
573 |
-
// Save the first id.
|
574 |
-
if ( is_null( $first_occurrence_id ) ) {
|
575 |
-
$first_occurrence_id = $entry['id'];
|
576 |
-
}
|
577 |
-
|
578 |
-
$last_event = $entry;
|
579 |
-
}
|
580 |
-
|
581 |
-
$sql = rtrim( $sql, ', ' );
|
582 |
-
$mirroring_db->query( $sql );
|
583 |
-
}
|
584 |
-
|
585 |
-
// Load data Meta from WP.
|
586 |
-
$meta = new WSAL_Adapters_MySQL_Meta( $_wpdb );
|
587 |
-
|
588 |
-
if ( ! $meta->IsInstalled() ) {
|
589 |
-
return null;
|
590 |
-
}
|
591 |
-
|
592 |
-
if ( ! empty( $first_occurrence_id ) ) {
|
593 |
-
$sql = 'SELECT * FROM ' . $meta->GetTable() . ' WHERE occurrence_id >= ' . $first_occurrence_id;
|
594 |
-
$metadata = $_wpdb->get_results( $sql, ARRAY_A );
|
595 |
-
|
596 |
-
if ( ! empty( $metadata ) ) {
|
597 |
-
$meta_new = new WSAL_Adapters_MySQL_Meta( $mirroring_db );
|
598 |
-
$sql = 'INSERT INTO ' . $meta_new->GetTable() . ' (occurrence_id, name, value) VALUES ';
|
599 |
-
|
600 |
-
foreach ( $metadata as $entry ) {
|
601 |
-
$sql .= $mirroring_db->prepare(
|
602 |
-
'( %d, %s, %s ), ',
|
603 |
-
intval( $entry['occurrence_id'] ),
|
604 |
-
$entry['name'],
|
605 |
-
$entry['value']
|
606 |
-
);
|
607 |
-
}
|
608 |
-
|
609 |
-
$sql = rtrim( $sql, ', ' );
|
610 |
-
$mirroring_db->query( $sql );
|
611 |
-
}
|
612 |
-
}
|
613 |
-
|
614 |
-
return $last_event;
|
615 |
-
}
|
616 |
-
|
617 |
/**
|
618 |
* Archiving Occurrences Table.
|
619 |
* Read from current DB and copy into Archive DB.
|
49 |
$connection_config = $this->connectionConfig;
|
50 |
$password = $this->decryptString( $connection_config['password'] );
|
51 |
|
52 |
+
$new_wpdb = new wpdbCustom( $connection_config['user'], $password, $connection_config['db_name'], $connection_config['hostname'], $connection_config['is_ssl'], $connection_config['is_cc'], $connection_config['ssl_ca'], $connection_config['ssl_cert'], $connection_config['ssl_key'], true );
|
53 |
|
54 |
if ( isset( $new_wpdb->error ) && isset( $new_wpdb->dbh ) ) {
|
55 |
throw new Exception( $new_wpdb->dbh->error, $new_wpdb->dbh->errno );
|
74 |
}
|
75 |
}
|
76 |
} elseif ( isset( $new_wpdb->db_select_error ) ) {
|
77 |
+
throw new Exception( 'Error: Database ' . $connection_config['db_name'] . ' is unknown.', '1046' );
|
78 |
} elseif ( ! $new_wpdb->has_connected ) {
|
79 |
throw new Exception( 'Error establishing a database connection.' );
|
80 |
} else {
|
89 |
*/
|
90 |
private function createConnection() {
|
91 |
if ( ! empty( $this->connectionConfig ) ) {
|
|
|
92 |
$connection_config = $this->connectionConfig;
|
93 |
$password = $this->decryptString( $connection_config['password'] );
|
94 |
+
$new_wpdb = new wpdbCustom( $connection_config['user'], $password, $connection_config['db_name'], $connection_config['hostname'], $connection_config['is_ssl'], $connection_config['is_cc'], $connection_config['ssl_ca'], $connection_config['ssl_cert'], $connection_config['ssl_key'] );
|
95 |
+
if ( array_key_exists( 'baseprefix', $connection_config ) ) {
|
96 |
+
$new_wpdb->set_prefix( $connection_config['baseprefix'] );
|
97 |
+
}
|
98 |
+
|
99 |
return $new_wpdb;
|
100 |
} else {
|
101 |
global $wpdb;
|
527 |
$wsal->wsal_deprecate( __METHOD__, '3.2.3.3' );
|
528 |
}
|
529 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
530 |
/**
|
531 |
* Archiving Occurrences Table.
|
532 |
* Read from current DB and copy into Archive DB.
|
classes/ConstantManager.php
CHANGED
@@ -105,7 +105,7 @@ class WSAL_ConstantManager {
|
|
105 |
*/
|
106 |
public function GetConstantBy( $what, $value, $default = null ) {
|
107 |
// Make sure we do have some constants.
|
108 |
-
if (
|
109 |
// Make sure that constants do have a $what property.
|
110 |
if ( ! isset( $this->_constants[0]->$what ) ) {
|
111 |
throw new Exception( 'Unexpected detail type "' . $what . '".' );
|
@@ -148,6 +148,12 @@ class WSAL_ConstantManager {
|
|
148 |
|
149 |
$const = $this->GetConstantBy( 'value', $code, $const );
|
150 |
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
if ( 'E_CRITICAL' === $const->name ) {
|
152 |
$const->name = __( 'Critical', 'wp-security-audit-log' );
|
153 |
} elseif ( 'E_WARNING' === $const->name ) {
|
105 |
*/
|
106 |
public function GetConstantBy( $what, $value, $default = null ) {
|
107 |
// Make sure we do have some constants.
|
108 |
+
if ( ! empty( $this->_constants ) ) {
|
109 |
// Make sure that constants do have a $what property.
|
110 |
if ( ! isset( $this->_constants[0]->$what ) ) {
|
111 |
throw new Exception( 'Unexpected detail type "' . $what . '".' );
|
148 |
|
149 |
$const = $this->GetConstantBy( 'value', $code, $const );
|
150 |
|
151 |
+
// CSS property was added in 4.3.0 as part of severity levels refactoring to be able to print language
|
152 |
+
// independent CSS class not based on the constant value
|
153 |
+
if ( ! property_exists($const, 'css')) {
|
154 |
+
$const->css = strtolower( $const->name );
|
155 |
+
}
|
156 |
+
|
157 |
if ( 'E_CRITICAL' === $const->name ) {
|
158 |
$const->name = __( 'Critical', 'wp-security-audit-log' );
|
159 |
} elseif ( 'E_WARNING' === $const->name ) {
|
classes/DashboardWidgetFormatter.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class: Dashboard widget alert Formatter class.
|
4 |
-
*
|
5 |
-
* @since 4.2.1
|
6 |
-
* @package Wsal
|
7 |
-
*/
|
8 |
-
|
9 |
-
// Exit if accessed directly.
|
10 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
-
exit;
|
12 |
-
}
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Class WSAL_DashboardWidgetFormatter
|
16 |
-
*
|
17 |
-
*/
|
18 |
-
class WSAL_DashboardWidgetFormatter extends WSAL_AlertFormatter {
|
19 |
-
|
20 |
-
public function __construct( $plugin ) {
|
21 |
-
parent::__construct( $plugin );
|
22 |
-
$this->js_infused_links_allowed = false;
|
23 |
-
$this->supports_hyperlinks = false;
|
24 |
-
$this->supports_metadata = false;
|
25 |
-
}
|
26 |
-
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/Helpers/Options.php
CHANGED
@@ -135,51 +135,6 @@ class Options {
|
|
135 |
|
136 |
return $result;
|
137 |
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Get options by prefix (notifications stored in json format).
|
141 |
-
*
|
142 |
-
* @param string $opt_prefix - Prefix.
|
143 |
-
* @return array|null - Options.
|
144 |
-
*/
|
145 |
-
public function GetNotificationsSetting( $opt_prefix ) {
|
146 |
-
global $wpdb;
|
147 |
-
$prepared_query = $wpdb->prepare(
|
148 |
-
"SELECT * FROM {$wpdb->base_prefix}options WHERE option_name LIKE %s;",
|
149 |
-
$opt_prefix . '%%'
|
150 |
-
);
|
151 |
-
return $wpdb->get_results($prepared_query);
|
152 |
-
}
|
153 |
-
|
154 |
-
/**
|
155 |
-
* @param int $id Notification ID.
|
156 |
-
*
|
157 |
-
* @return array|object|void|null
|
158 |
-
* @since 4.1.3
|
159 |
-
*/
|
160 |
-
public function GetNotification($id) {
|
161 |
-
global $wpdb;
|
162 |
-
$prepared_query = $wpdb->prepare("SELECT * FROM {$wpdb->options} WHERE option_id = %d LIMIT 1;", $id);
|
163 |
-
return $wpdb->get_row( $prepared_query );
|
164 |
-
}
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Number of options start with prefix.
|
168 |
-
*
|
169 |
-
* @param string $opt_prefix - Prefix.
|
170 |
-
* @return integer Indicates the number of items.
|
171 |
-
*/
|
172 |
-
public function CountNotifications( $opt_prefix ) {
|
173 |
-
global $wpdb;
|
174 |
-
|
175 |
-
$prepared_query = $wpdb->prepare(
|
176 |
-
"SELECT COUNT(option_id) FROM {$wpdb->options} WHERE option_name LIKE %s;",
|
177 |
-
$opt_prefix . '%%'
|
178 |
-
);
|
179 |
-
return (int) $wpdb->get_var( $prepared_query );
|
180 |
-
|
181 |
-
}
|
182 |
-
|
183 |
/**
|
184 |
* Static function for retrieving an option value statically.
|
185 |
*
|
135 |
|
136 |
return $result;
|
137 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
/**
|
139 |
* Static function for retrieving an option value statically.
|
140 |
*
|
classes/Loggers/Database.php
CHANGED
@@ -59,10 +59,13 @@ class WSAL_Loggers_Database extends WSAL_AbstractLogger {
|
|
59 |
// Create new occurrence.
|
60 |
$occ = new WSAL_Models_Occurrence();
|
61 |
$occ->is_migrated = $migrated;
|
62 |
-
$occ->created_on
|
63 |
$occ->alert_id = $type;
|
64 |
$occ->site_id = ! is_null( $siteid ) ? $siteid : ( function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0 );
|
65 |
|
|
|
|
|
|
|
66 |
// Get DB connector.
|
67 |
$db_config = WSAL_Connector_ConnectorFactory::GetConfig(); // Get DB connector configuration.
|
68 |
|
59 |
// Create new occurrence.
|
60 |
$occ = new WSAL_Models_Occurrence();
|
61 |
$occ->is_migrated = $migrated;
|
62 |
+
$occ->created_on = $this->get_correct_timestamp( $data, $date );
|
63 |
$occ->alert_id = $type;
|
64 |
$occ->site_id = ! is_null( $siteid ) ? $siteid : ( function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0 );
|
65 |
|
66 |
+
// we need to remove the timestamp to prevent from saving it as meta
|
67 |
+
unset( $data['Timestamp'] );
|
68 |
+
|
69 |
// Get DB connector.
|
70 |
$db_config = WSAL_Connector_ConnectorFactory::GetConfig(); // Get DB connector configuration.
|
71 |
|
classes/Models/Occurrence.php
CHANGED
@@ -89,18 +89,20 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
|
|
89 |
/**
|
90 |
* Returns the value of a meta item.
|
91 |
*
|
92 |
-
* @see WSAL_Adapters_MySQL_Occurrence::GetNamedMeta()
|
93 |
* @param string $name - Name of meta item.
|
94 |
-
* @param mixed
|
|
|
95 |
* @return mixed The value, if meta item does not exist $default returned.
|
|
|
96 |
*/
|
97 |
public function GetMetaValue( $name, $default = array() ) {
|
98 |
// Get meta adapter.
|
99 |
$meta = $this->getAdapter()->GetNamedMeta( $this, $name );
|
100 |
-
|
|
|
|
|
101 |
|
102 |
-
|
103 |
-
// return $meta->IsLoaded() ? $meta->value : $default;
|
104 |
}
|
105 |
|
106 |
/**
|
@@ -255,41 +257,6 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
|
|
255 |
return ( isset( $this->alert_id ) ) ? $this->alert_id : 0;
|
256 |
}
|
257 |
|
258 |
-
/**
|
259 |
-
* Gets the username.
|
260 |
-
*
|
261 |
-
* @see WSAL_Adapters_MySQL_Occurrence::GetFirstNamedMeta()
|
262 |
-
*
|
263 |
-
* @param array $meta - Occurrence meta array.
|
264 |
-
* @return string User's username.
|
265 |
-
*/
|
266 |
-
public function GetUsername( $meta = null ) {
|
267 |
-
if ( null === $meta ) {
|
268 |
-
$meta = $this->getAdapter()->GetFirstNamedMeta( $this, array( 'Username', 'CurrentUserID' ) );
|
269 |
-
|
270 |
-
if ( $meta ) {
|
271 |
-
switch ( true ) {
|
272 |
-
case 'Username' === $meta->name:
|
273 |
-
return $meta->value;
|
274 |
-
case 'CurrentUserID' === $meta->name:
|
275 |
-
$data = get_userdata( $meta->value );
|
276 |
-
return $data ? $data->user_login : null;
|
277 |
-
default:
|
278 |
-
// fallback for any other cases would go here
|
279 |
-
break;
|
280 |
-
}
|
281 |
-
}
|
282 |
-
} else {
|
283 |
-
if ( isset( $meta['Username'] ) ) {
|
284 |
-
return $meta['Username'];
|
285 |
-
} elseif ( isset( $meta['CurrentUserID'] ) ) {
|
286 |
-
$data = get_userdata( $meta['CurrentUserID'] );
|
287 |
-
return $data ? $data->user_login : null;
|
288 |
-
}
|
289 |
-
}
|
290 |
-
return null;
|
291 |
-
}
|
292 |
-
|
293 |
/**
|
294 |
* Gets the Client IP.
|
295 |
*
|
@@ -332,6 +299,15 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
|
|
332 |
return isset( $meta['CurrentUserRoles'] ) ? $meta['CurrentUserRoles'] : array();
|
333 |
}
|
334 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
335 |
/**
|
336 |
* Method: Get Microtime.
|
337 |
*
|
89 |
/**
|
90 |
* Returns the value of a meta item.
|
91 |
*
|
|
|
92 |
* @param string $name - Name of meta item.
|
93 |
+
* @param mixed $default - Default value returned when meta does not exist.
|
94 |
+
*
|
95 |
* @return mixed The value, if meta item does not exist $default returned.
|
96 |
+
* @see WSAL_Adapters_MySQL_Occurrence::GetNamedMeta()
|
97 |
*/
|
98 |
public function GetMetaValue( $name, $default = array() ) {
|
99 |
// Get meta adapter.
|
100 |
$meta = $this->getAdapter()->GetNamedMeta( $this, $name );
|
101 |
+
if ( is_null( $meta ) || ! array_key_exists( 'value', $meta ) ) {
|
102 |
+
return $default;
|
103 |
+
}
|
104 |
|
105 |
+
return maybe_unserialize( $meta['value'] );
|
|
|
106 |
}
|
107 |
|
108 |
/**
|
257 |
return ( isset( $this->alert_id ) ) ? $this->alert_id : 0;
|
258 |
}
|
259 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
/**
|
261 |
* Gets the Client IP.
|
262 |
*
|
299 |
return isset( $meta['CurrentUserRoles'] ) ? $meta['CurrentUserRoles'] : array();
|
300 |
}
|
301 |
|
302 |
+
/**
|
303 |
+
* Gets the username.
|
304 |
+
*
|
305 |
+
* @return string User's username.
|
306 |
+
*/
|
307 |
+
public function GetUsername() {
|
308 |
+
return WSAL_Utilities_UsersUtils::GetUsername( $this->GetMetaArray() );
|
309 |
+
}
|
310 |
+
|
311 |
/**
|
312 |
* Method: Get Microtime.
|
313 |
*
|
classes/SensorManager.php
CHANGED
@@ -283,7 +283,7 @@ final class WSAL_SensorManager extends WSAL_AbstractSensor {
|
|
283 |
break;
|
284 |
|
285 |
case 'LogInOut':
|
286 |
-
if (
|
287 |
$load_sensor = false;
|
288 |
}
|
289 |
break;
|
283 |
break;
|
284 |
|
285 |
case 'LogInOut':
|
286 |
+
if ( empty( $frontend_events['login'] ) ) {
|
287 |
$load_sensor = false;
|
288 |
}
|
289 |
break;
|
classes/Sensors/Content.php
CHANGED
@@ -153,11 +153,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
153 |
return;
|
154 |
}
|
155 |
|
156 |
-
// Check other sensors.
|
157 |
-
if ( $this->check_other_sensors( $post ) ) {
|
158 |
-
return;
|
159 |
-
}
|
160 |
-
|
161 |
// Ignorable states.
|
162 |
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
163 |
// Check post creation event.
|
@@ -285,9 +280,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
285 |
public function event_post_deleted( $post_id ) {
|
286 |
// Exclude CPTs from external plugins.
|
287 |
$post = get_post( $post_id );
|
288 |
-
if ( $this->check_other_sensors( $post ) ) {
|
289 |
-
return;
|
290 |
-
}
|
291 |
|
292 |
// Ignore attachments, revisions and menu items.
|
293 |
if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
|
@@ -323,11 +315,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
323 |
*/
|
324 |
public function event_post_trashed( $post_id ) {
|
325 |
$post = get_post( $post_id );
|
326 |
-
|
327 |
-
if ( $this->check_other_sensors( $post ) ) {
|
328 |
-
return;
|
329 |
-
}
|
330 |
-
|
331 |
if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
|
332 |
$editor_link = $this->get_editor_link( $post );
|
333 |
|
@@ -353,11 +340,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
353 |
*/
|
354 |
public function event_post_untrashed( $post_id ) {
|
355 |
$post = get_post( $post_id );
|
356 |
-
|
357 |
-
if ( $this->check_other_sensors( $post ) ) {
|
358 |
-
return;
|
359 |
-
}
|
360 |
-
|
361 |
if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
|
362 |
$editor_link = $this->get_editor_link( $post );
|
363 |
|
@@ -457,10 +439,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
457 |
$post = get_queried_object();
|
458 |
|
459 |
if ( is_user_logged_in() && ! is_admin() ) {
|
460 |
-
if ( $this->check_other_sensors( $post ) ) {
|
461 |
-
return $post->post_title;
|
462 |
-
}
|
463 |
-
|
464 |
$current_path = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : false;
|
465 |
|
466 |
if (
|
@@ -752,6 +730,9 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
752 |
$event_type = 'removed';
|
753 |
}
|
754 |
|
|
|
|
|
|
|
755 |
$post = get_post( $post_id );
|
756 |
$editor_link = $this->get_editor_link( $post );
|
757 |
$this->plugin->alerts->Trigger(
|
@@ -762,8 +743,8 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
762 |
'PostTitle' => $post->post_title,
|
763 |
'PostStatus' => $post->post_status,
|
764 |
'PostDate' => $post->post_date,
|
765 |
-
'previous_image' =>
|
766 |
-
'new_image' =>
|
767 |
$editor_link['name'] => $editor_link['value'],
|
768 |
'EventType' => $event_type,
|
769 |
)
|
@@ -1327,10 +1308,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
1327 |
* @return int|void
|
1328 |
*/
|
1329 |
public function check_modification_change( $post_id, $oldpost, $newpost, $modified ) {
|
1330 |
-
if ( $this->check_other_sensors( $oldpost ) ) {
|
1331 |
-
return;
|
1332 |
-
}
|
1333 |
-
|
1334 |
if ( $this->check_title_change( $oldpost, $newpost ) ) {
|
1335 |
return;
|
1336 |
}
|
@@ -1422,29 +1399,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
1422 |
return true;
|
1423 |
}
|
1424 |
|
1425 |
-
/**
|
1426 |
-
* Ignore post from BBPress, WooCommerce Plugin
|
1427 |
-
* Triggered on the Sensors
|
1428 |
-
*
|
1429 |
-
* @param WP_Post $post - The post.
|
1430 |
-
*/
|
1431 |
-
private function check_other_sensors( $post ) {
|
1432 |
-
if ( empty( $post ) || ! isset( $post->post_type ) ) {
|
1433 |
-
return false;
|
1434 |
-
}
|
1435 |
-
switch ( $post->post_type ) {
|
1436 |
-
case 'forum':
|
1437 |
-
case 'topic':
|
1438 |
-
case 'reply':
|
1439 |
-
case 'product':
|
1440 |
-
case 'shop_order':
|
1441 |
-
case 'shop_coupon':
|
1442 |
-
return true;
|
1443 |
-
default:
|
1444 |
-
return false;
|
1445 |
-
}
|
1446 |
-
}
|
1447 |
-
|
1448 |
/**
|
1449 |
* Changed title of a post.
|
1450 |
*
|
@@ -1559,11 +1513,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
1559 |
return;
|
1560 |
}
|
1561 |
|
1562 |
-
// Check other sensors.
|
1563 |
-
if ( $this->check_other_sensors( $post ) ) {
|
1564 |
-
return $post;
|
1565 |
-
}
|
1566 |
-
|
1567 |
$current_path = isset( $_SERVER['SCRIPT_NAME'] ) ? esc_url_raw( wp_unslash( $_SERVER['SCRIPT_NAME'] ) ) . '?post=' . $post->ID : false;
|
1568 |
$referrer = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : false;
|
1569 |
|
153 |
return;
|
154 |
}
|
155 |
|
|
|
|
|
|
|
|
|
|
|
156 |
// Ignorable states.
|
157 |
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
158 |
// Check post creation event.
|
280 |
public function event_post_deleted( $post_id ) {
|
281 |
// Exclude CPTs from external plugins.
|
282 |
$post = get_post( $post_id );
|
|
|
|
|
|
|
283 |
|
284 |
// Ignore attachments, revisions and menu items.
|
285 |
if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
|
315 |
*/
|
316 |
public function event_post_trashed( $post_id ) {
|
317 |
$post = get_post( $post_id );
|
|
|
|
|
|
|
|
|
|
|
318 |
if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
|
319 |
$editor_link = $this->get_editor_link( $post );
|
320 |
|
340 |
*/
|
341 |
public function event_post_untrashed( $post_id ) {
|
342 |
$post = get_post( $post_id );
|
|
|
|
|
|
|
|
|
|
|
343 |
if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
|
344 |
$editor_link = $this->get_editor_link( $post );
|
345 |
|
439 |
$post = get_queried_object();
|
440 |
|
441 |
if ( is_user_logged_in() && ! is_admin() ) {
|
|
|
|
|
|
|
|
|
442 |
$current_path = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : false;
|
443 |
|
444 |
if (
|
730 |
$event_type = 'removed';
|
731 |
}
|
732 |
|
733 |
+
$previous_image = is_array( $previous_featured_image ) && array_key_exists( 'file', $previous_featured_image ) ? $previous_featured_image['file'] : __( 'No previous image', 'wp-security-audit-log' );
|
734 |
+
$new_image = is_array( $new_featured_image ) && array_key_exists( 'file', $new_featured_image ) ? $new_featured_image['file'] : __( 'No image', 'wp-security-audit-log' );
|
735 |
+
|
736 |
$post = get_post( $post_id );
|
737 |
$editor_link = $this->get_editor_link( $post );
|
738 |
$this->plugin->alerts->Trigger(
|
743 |
'PostTitle' => $post->post_title,
|
744 |
'PostStatus' => $post->post_status,
|
745 |
'PostDate' => $post->post_date,
|
746 |
+
'previous_image' => $previous_image,
|
747 |
+
'new_image' => $new_image,
|
748 |
$editor_link['name'] => $editor_link['value'],
|
749 |
'EventType' => $event_type,
|
750 |
)
|
1308 |
* @return int|void
|
1309 |
*/
|
1310 |
public function check_modification_change( $post_id, $oldpost, $newpost, $modified ) {
|
|
|
|
|
|
|
|
|
1311 |
if ( $this->check_title_change( $oldpost, $newpost ) ) {
|
1312 |
return;
|
1313 |
}
|
1399 |
return true;
|
1400 |
}
|
1401 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1402 |
/**
|
1403 |
* Changed title of a post.
|
1404 |
*
|
1513 |
return;
|
1514 |
}
|
1515 |
|
|
|
|
|
|
|
|
|
|
|
1516 |
$current_path = isset( $_SERVER['SCRIPT_NAME'] ) ? esc_url_raw( wp_unslash( $_SERVER['SCRIPT_NAME'] ) ) . '?post=' . $post->ID : false;
|
1517 |
$referrer = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : false;
|
1518 |
|
classes/Sensors/LogInOut.php
CHANGED
@@ -196,14 +196,13 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
|
|
196 |
1000,
|
197 |
$alert_data,
|
198 |
/**
|
199 |
-
* @param WSAL_AlertManager$manager
|
|
|
200 |
* @return bool
|
201 |
*/
|
202 |
function ( $manager ) {
|
203 |
// don't fire if the user is changing their password via admin profile page
|
204 |
-
return ! $manager->WillOrHasTriggered( 4003 )
|
205 |
-
// ...or if the login has been triggered somewhere else (most likely a front-end login)
|
206 |
-
&& ! $manager->WillOrHasTriggered( 1000, 2 );
|
207 |
}
|
208 |
);
|
209 |
|
196 |
1000,
|
197 |
$alert_data,
|
198 |
/**
|
199 |
+
* @param WSAL_AlertManager $manager
|
200 |
+
*
|
201 |
* @return bool
|
202 |
*/
|
203 |
function ( $manager ) {
|
204 |
// don't fire if the user is changing their password via admin profile page
|
205 |
+
return ! $manager->WillOrHasTriggered( 4003 );
|
|
|
|
|
206 |
}
|
207 |
);
|
208 |
|
classes/Sensors/Multisite.php
CHANGED
@@ -206,12 +206,33 @@ class WSAL_Sensors_Multisite extends WSAL_AbstractSensor {
|
|
206 |
*/
|
207 |
public function EventNewBlog( $new_blog ) {
|
208 |
$blog_id = $new_blog->blog_id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
$this->plugin->alerts->Trigger(
|
210 |
7000,
|
211 |
array(
|
212 |
'BlogID' => $blog_id,
|
213 |
-
'SiteName' =>
|
214 |
-
'BlogURL' =>
|
215 |
)
|
216 |
);
|
217 |
}
|
206 |
*/
|
207 |
public function EventNewBlog( $new_blog ) {
|
208 |
$blog_id = $new_blog->blog_id;
|
209 |
+
|
210 |
+
// site meta data nor options are not setup at this points so get_blog_option and get_home_url are not
|
211 |
+
// returning anything for the new blog
|
212 |
+
|
213 |
+
// the following code to work out the correct URL for the new site was taken from ms-site.php (WP 5.7)
|
214 |
+
// @see https://github.com/WordPress/WordPress/blob/5.7/wp-includes/ms-site.php#L673
|
215 |
+
$network = get_network( $new_blog->network_id );
|
216 |
+
if ( ! $network ) {
|
217 |
+
$network = get_network();
|
218 |
+
}
|
219 |
+
|
220 |
+
$home_scheme = 'http';
|
221 |
+
if ( ! is_subdomain_install() ) {
|
222 |
+
if ( 'https' === parse_url( get_home_url( $network->site_id ), PHP_URL_SCHEME ) ) {
|
223 |
+
$home_scheme = 'https';
|
224 |
+
}
|
225 |
+
}
|
226 |
+
|
227 |
+
$blog_title = strip_tags( $_POST['blog']['title'] );
|
228 |
+
$blog_url = untrailingslashit( $home_scheme . '://' . $new_blog->domain . $new_blog->path );
|
229 |
+
|
230 |
$this->plugin->alerts->Trigger(
|
231 |
7000,
|
232 |
array(
|
233 |
'BlogID' => $blog_id,
|
234 |
+
'SiteName' => $blog_title,
|
235 |
+
'BlogURL' => $blog_url
|
236 |
)
|
237 |
);
|
238 |
}
|
classes/Settings.php
CHANGED
@@ -747,6 +747,7 @@ class WSAL_Settings {
|
|
747 |
'HTTP_X_FORWARDED_FOR',
|
748 |
'HTTP_X_FORWARDED',
|
749 |
'HTTP_X_CLUSTER_CLIENT_IP',
|
|
|
750 |
'HTTP_FORWARDED_FOR',
|
751 |
'HTTP_FORWARDED',
|
752 |
'REMOTE_ADDR',
|
@@ -1051,14 +1052,6 @@ class WSAL_Settings {
|
|
1051 |
$this->_plugin->SetGlobalSetting( 'type_username', $newvalue );
|
1052 |
}
|
1053 |
|
1054 |
-
public function GetAdapterConfig( $name_field, $default_value = false ) {
|
1055 |
-
return $this->_plugin->GetGlobalSetting( $name_field, $default_value );
|
1056 |
-
}
|
1057 |
-
|
1058 |
-
public function SetAdapterConfig( $name_field, $newvalue ) {
|
1059 |
-
$this->_plugin->SetGlobalSetting( $name_field, trim( $newvalue ) );
|
1060 |
-
}
|
1061 |
-
|
1062 |
/**
|
1063 |
* Returns audit log columns.
|
1064 |
*
|
@@ -1213,19 +1206,11 @@ class WSAL_Settings {
|
|
1213 |
*/
|
1214 |
public function SwitchToArchiveDB() {
|
1215 |
if ( $this->IsArchivingEnabled() ) {
|
1216 |
-
$
|
1217 |
-
$
|
1218 |
-
$
|
1219 |
-
|
1220 |
-
|
1221 |
-
$archive_baseprefix = $this->_plugin->GetGlobalSetting( 'archive-base-prefix' );
|
1222 |
-
$archive_ssl = $this->_plugin->GetGlobalSetting( 'archive-ssl', false );
|
1223 |
-
$archive_cc = $this->_plugin->GetGlobalSetting( 'archive-client-certificate', false );
|
1224 |
-
$archive_ssl_ca = $this->_plugin->GetGlobalSetting( 'archive-ssl-ca', false );
|
1225 |
-
$archive_ssl_cert = $this->_plugin->GetGlobalSetting( 'archive-ssl-cert', false );
|
1226 |
-
$archive_ssl_key = $this->_plugin->GetGlobalSetting( 'archive-ssl-key', false );
|
1227 |
-
$config = WSAL_Connector_ConnectorFactory::GetConfigArray( $archive_type, $archive_user, $password, $archive_name, $archive_hostname, $archive_baseprefix, $archive_ssl, $archive_cc, $archive_ssl_ca, $archive_ssl_cert, $archive_ssl_key );
|
1228 |
-
$this->_plugin->getConnector( $config )->getAdapter( 'Occurrence' );
|
1229 |
}
|
1230 |
}
|
1231 |
|
747 |
'HTTP_X_FORWARDED_FOR',
|
748 |
'HTTP_X_FORWARDED',
|
749 |
'HTTP_X_CLUSTER_CLIENT_IP',
|
750 |
+
'X-ORIGINAL-FORWARDED-FOR',
|
751 |
'HTTP_FORWARDED_FOR',
|
752 |
'HTTP_FORWARDED',
|
753 |
'REMOTE_ADDR',
|
1052 |
$this->_plugin->SetGlobalSetting( 'type_username', $newvalue );
|
1053 |
}
|
1054 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1055 |
/**
|
1056 |
* Returns audit log columns.
|
1057 |
*
|
1206 |
*/
|
1207 |
public function SwitchToArchiveDB() {
|
1208 |
if ( $this->IsArchivingEnabled() ) {
|
1209 |
+
$connection_name = $this->_plugin->GetGlobalSetting( 'archive-connection' );
|
1210 |
+
$connection = $this->_plugin->external_db_util->get_connection( $connection_name );
|
1211 |
+
if ( is_array( $connection ) && ! empty( $connection ) ) {
|
1212 |
+
$this->_plugin->getConnector( $connection )->getAdapter( 'Occurrence' );
|
1213 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1214 |
}
|
1215 |
}
|
1216 |
|
classes/Utilities/UserUtils.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly.
|
4 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Utility class for some user related stuff.
|
10 |
+
*
|
11 |
+
* @package Wsal
|
12 |
+
* @since 4.3.0
|
13 |
+
*/
|
14 |
+
class WSAL_Utilities_UsersUtils {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Local static cache for the value of setting determining the prefered user data to display as label.
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
private static $user_label_setting;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @param WpSecurityAuditLog $plugin Instance of WpSecurityAuditLog.
|
25 |
+
* @param WP_User $user WordPress user object.
|
26 |
+
*
|
27 |
+
* @return string
|
28 |
+
* @since 4.3.0
|
29 |
+
*/
|
30 |
+
public static function get_display_label( $plugin, $user ) {
|
31 |
+
if ( ! isset( self::$user_label_setting ) ) {
|
32 |
+
self::$user_label_setting = $plugin->settings()->get_type_username();
|
33 |
+
}
|
34 |
+
|
35 |
+
if ( 'display_name' === self::$user_label_setting && ! empty( $user->display_name ) ) {
|
36 |
+
return $user->display_name;
|
37 |
+
}
|
38 |
+
|
39 |
+
if ( 'first_last_name' === self::$user_label_setting && ( ! empty( $user->first_name ) || ! empty( $user->last_name ) ) ) {
|
40 |
+
return trim( implode( ' ', [
|
41 |
+
$user->first_name,
|
42 |
+
$user->last_name
|
43 |
+
] ) );
|
44 |
+
}
|
45 |
+
|
46 |
+
return $user->user_login;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Gets the username.
|
51 |
+
*
|
52 |
+
* @param array $meta - Event meta data.
|
53 |
+
*
|
54 |
+
* @return string User's username.
|
55 |
+
*
|
56 |
+
* @since 4.3.1 Made the meta attribute mandatory, changed to static and moved from occurrence to alert.
|
57 |
+
*/
|
58 |
+
public static function GetUsername( $meta = null ) {
|
59 |
+
if ( ! is_array( $meta ) ) {
|
60 |
+
return '';
|
61 |
+
}
|
62 |
+
|
63 |
+
if ( isset( $meta['Username'] ) ) {
|
64 |
+
return $meta['Username'];
|
65 |
+
} elseif ( isset( $meta['CurrentUserID'] ) ) {
|
66 |
+
$data = get_userdata( $meta['CurrentUserID'] );
|
67 |
+
|
68 |
+
return $data ? $data->user_login : '';
|
69 |
+
}
|
70 |
+
|
71 |
+
return '';
|
72 |
+
}
|
73 |
+
}
|
classes/ViewManager.php
CHANGED
@@ -349,6 +349,33 @@ class WSAL_ViewManager {
|
|
349 |
if ( $view = $this->GetActiveView() ) {
|
350 |
$view->Footer();
|
351 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
}
|
353 |
|
354 |
/**
|
349 |
if ( $view = $this->GetActiveView() ) {
|
350 |
$view->Footer();
|
351 |
}
|
352 |
+
global $pagenow;
|
353 |
+
if ( 'admin.php' === $pagenow && 'wsal-auditlog-pricing' === $_GET['page'] ) {
|
354 |
+
?>
|
355 |
+
<style>
|
356 |
+
.fs-full-size-wrapper {
|
357 |
+
margin: 0px 0 -65px -20px !important;
|
358 |
+
}
|
359 |
+
|
360 |
+
#root .fs-app-header .fs-page-title h2, #fs_pricing_wrapper .fs-app-header .fs-page-title h2 {
|
361 |
+
font-size: 23px;
|
362 |
+
font-weight: 400;
|
363 |
+
margin: 0;
|
364 |
+
padding: 9px 0 4px 20px;
|
365 |
+
line-height: 1.3;
|
366 |
+
}
|
367 |
+
|
368 |
+
@media only screen and (max-width: 768px) {
|
369 |
+
#root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {
|
370 |
+
padding: 5px;
|
371 |
+
display: flex;
|
372 |
+
width: 100%;
|
373 |
+
margin: 0 auto;
|
374 |
+
}
|
375 |
+
}
|
376 |
+
</style>
|
377 |
+
<?php
|
378 |
+
}
|
379 |
}
|
380 |
|
381 |
/**
|
classes/Views/ToggleAlerts.php
CHANGED
@@ -165,7 +165,8 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
|
|
165 |
// Allow further items to be added externally.
|
166 |
$subcat_alerts = apply_filters( 'wsal_togglealerts_sub_category_events', $subcat_alerts );
|
167 |
|
168 |
-
$obsolete_events = array( 9999, 2126
|
|
|
169 |
|
170 |
// check if the disabled events are enforced from the MainWP master site
|
171 |
$settings = $this->_plugin->settings();
|
165 |
// Allow further items to be added externally.
|
166 |
$subcat_alerts = apply_filters( 'wsal_togglealerts_sub_category_events', $subcat_alerts );
|
167 |
|
168 |
+
$obsolete_events = array( 9999, 2126 );
|
169 |
+
$obsolete_events = apply_filters( 'wsal_togglealerts_obsolete_events', $obsolete_events );
|
170 |
|
171 |
// check if the disabled events are enforced from the MainWP master site
|
172 |
$settings = $this->_plugin->settings();
|
classes/WidgetManager.php
CHANGED
@@ -82,8 +82,8 @@ class WSAL_WidgetManager {
|
|
82 |
<?php
|
83 |
$url = 'admin.php?page=' . $this->_plugin->views->views[0]->GetSafeViewName();
|
84 |
foreach ( $results as $entry ) :
|
85 |
-
$username = $entry->GetUsername();
|
86 |
$event_meta = $entry->GetMetaArray();
|
|
|
87 |
?>
|
88 |
<tr>
|
89 |
<td><?php echo ( $username ) ? esc_html( $username ) : '<i>unknown</i>'; ?></td>
|
82 |
<?php
|
83 |
$url = 'admin.php?page=' . $this->_plugin->views->views[0]->GetSafeViewName();
|
84 |
foreach ( $results as $entry ) :
|
|
|
85 |
$event_meta = $entry->GetMetaArray();
|
86 |
+
$username = WSAL_Utilities_UsersUtils::GetUsername( $event_meta );
|
87 |
?>
|
88 |
<tr>
|
89 |
<td><?php echo ( $username ) ? esc_html( $username ) : '<i>unknown</i>'; ?></td>
|
css/auditlog.css
CHANGED
@@ -601,13 +601,15 @@ td.wsal-grid-text-data {
|
|
601 |
.log-type-64:after,
|
602 |
.log-type-256:after,
|
603 |
.log-type-4096:after,
|
604 |
-
.log-type-E_CRITICAL:after
|
|
|
605 |
content: " ";
|
606 |
background-image: url( '../img/icons/critical.svg' );
|
607 |
}
|
608 |
|
609 |
/* high */
|
610 |
-
.log-type-6:after
|
|
|
611 |
content: " ";
|
612 |
background-image: url( '../img/icons/high.svg' );
|
613 |
}
|
@@ -617,13 +619,15 @@ td.wsal-grid-text-data {
|
|
617 |
.log-type-10:after,
|
618 |
.log-type-32:after,
|
619 |
.log-type-128:after,
|
620 |
-
.log-type-512:after
|
|
|
621 |
content: " ";
|
622 |
background-image: url( '../img/icons/medium.svg' );
|
623 |
}
|
624 |
|
625 |
/* low */
|
626 |
-
.log-type-15:after
|
|
|
627 |
content: " ";
|
628 |
background-image: url( '../img/icons/low.svg' );
|
629 |
}
|
@@ -635,7 +639,8 @@ td.wsal-grid-text-data {
|
|
635 |
.log-type-2048:after,
|
636 |
.log-type-8192:after,
|
637 |
.log-type-16384:after,
|
638 |
-
.log-type-E_DEBUG:after
|
|
|
639 |
content: " ";
|
640 |
background-image: url( '../img/icons/info.svg' );
|
641 |
}
|
601 |
.log-type-64:after,
|
602 |
.log-type-256:after,
|
603 |
.log-type-4096:after,
|
604 |
+
.log-type-E_CRITICAL:after,
|
605 |
+
.log-type-wsal_critical:after {
|
606 |
content: " ";
|
607 |
background-image: url( '../img/icons/critical.svg' );
|
608 |
}
|
609 |
|
610 |
/* high */
|
611 |
+
.log-type-6:after,
|
612 |
+
.log-type-wsal_high:after {
|
613 |
content: " ";
|
614 |
background-image: url( '../img/icons/high.svg' );
|
615 |
}
|
619 |
.log-type-10:after,
|
620 |
.log-type-32:after,
|
621 |
.log-type-128:after,
|
622 |
+
.log-type-512:after,
|
623 |
+
.log-type-wsal_medium:after {
|
624 |
content: " ";
|
625 |
background-image: url( '../img/icons/medium.svg' );
|
626 |
}
|
627 |
|
628 |
/* low */
|
629 |
+
.log-type-15:after,
|
630 |
+
.log-type-wsal_low:after {
|
631 |
content: " ";
|
632 |
background-image: url( '../img/icons/low.svg' );
|
633 |
}
|
639 |
.log-type-2048:after,
|
640 |
.log-type-8192:after,
|
641 |
.log-type-16384:after,
|
642 |
+
.log-type-E_DEBUG:after,
|
643 |
+
.log-type-wsal_informational:after {
|
644 |
content: " ";
|
645 |
background-image: url( '../img/icons/info.svg' );
|
646 |
}
|
css/dist/wsal-wizard.css
CHANGED
@@ -6,7 +6,8 @@ body {
|
|
6 |
-webkit-box-shadow: none;
|
7 |
box-shadow: none;
|
8 |
background: #f1f1f1;
|
9 |
-
padding: 0;
|
|
|
10 |
|
11 |
#wsal-logo {
|
12 |
border: 0;
|
6 |
-webkit-box-shadow: none;
|
7 |
box-shadow: none;
|
8 |
background: #f1f1f1;
|
9 |
+
padding: 0;
|
10 |
+
border: none; }
|
11 |
|
12 |
#wsal-logo {
|
13 |
border: 0;
|
css/dist/wsal-wizard.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
body{margin:65px auto 24px;-webkit-box-shadow:none;box-shadow:none;background:#f1f1f1;padding:0}#wsal-logo{border:0;margin:0 0 24px;padding:0;text-align:center}#wsal-logo img{width:400px}.steps{display:flex;list-style-type:none;margin:0;padding:0 0 25px;text-align:center}.steps li{flex:1 0 auto;font-weight:700;margin:0 0 5px;color:#b4b9be;padding-bottom:15px;position:relative}.steps li.is-active{color:#009344}.steps li.is-active::before{border:4px solid #009344;background:#009344}.steps li::before{content:'';border:4px solid #b4b9be;border-radius:100%;width:4px;height:4px;position:absolute;bottom:0;left:50%;margin-left:-6px;margin-bottom:-8px;background:#b4b9be}.wsal-setup-content{box-shadow:0 1px 3px rgba(0,0,0,.13);padding:2em;margin:0 0 20px;background:#fff;overflow:hidden;zoom:1;text-align:left}.wsal-setup-content fieldset,.wsal-setup-content h4{line-height:1.5}.wsal-setup-content .addon-wrapper{border:1px solid #eee;padding:15px;display:flex;margin-bottom:15px}.wsal-setup-content .addon-wrapper:hover{border-color:#ccc}.wsal-setup-content .addon-wrapper img{align-self:center;max-width:200px;margin-right:15px}.wsal-setup-actions{text-align:center}.wsal-setup-actions .button{box-shadow:none;font-size:14px;height:auto;padding:8px 20px;min-width:12em;min-width:auto;transition:.1s all linear}.wsal-setup-actions .button-primary{background-color:#009344;border-color:#009344;box-shadow:none;text-shadow:none;margin:0;opacity:1}.wsal-setup-actions .button-primary:focus,.wsal-setup-actions .button-primary:hover{background:#00ad50;border-color:#00ad50;box-shadow:none;color:#fff}.wsal-setup-footer{text-align:center}.wsal-setup-footer a{color:#009344;font-size:14px;text-decoration:none}.wsal-setup-form label[for=editor-roles-box],.wsal-setup-form label[for=editor-users-box],.wsal-setup-form label[for=exrole-query-box],.wsal-setup-form label[for=exuser-query-box],.wsal-setup-form label[for=ipaddr-query-box]{display:inline-block;margin:5px 0}.wsal-setup-form label[for=editor-roles-box] span,.wsal-setup-form label[for=editor-users-box] span,.wsal-setup-form label[for=exrole-query-box] span,.wsal-setup-form label[for=exuser-query-box] span,.wsal-setup-form label[for=ipaddr-query-box] span{display:inline-block;min-width:100px}.sectoken-ip,.sectoken-other,.sectoken-role,.sectoken-user{display:inline-block;border-width:1px;border-style:solid;padding:2px 4px;margin:2px 0 0 2px;border-radius:3px;cursor:default;line-height:1.3;font-size:14px}.sectoken-ip a,.sectoken-other a,.sectoken-role a,.sectoken-user a{text-decoration:none;font-size:12px;font-weight:700;color:#fff;margin-left:2px;background:#bbb;border-radius:25px;height:14px;display:inline-block;vertical-align:middle;width:14px;text-align:center;line-height:12px}.sectoken-ip a:hover,.sectoken-other a:hover,.sectoken-role a:hover,.sectoken-user a:hover{background:#fb9}.sectoken-other{display:table;border-collapse:separate}.sectoken-role{background:#efe;border-color:#5b5}.sectoken-user{background:#eff;border-color:#5be}.sectoken-ip{background:#ffe;border-color:#ed5}.sectoken-other{background:#ffe;border-color:#ed5}p.description{font-size:13px;font-style:italic}
|
1 |
+
body{margin:65px auto 24px;-webkit-box-shadow:none;box-shadow:none;background:#f1f1f1;padding:0;border:none}#wsal-logo{border:0;margin:0 0 24px;padding:0;text-align:center}#wsal-logo img{width:400px}.steps{display:flex;list-style-type:none;margin:0;padding:0 0 25px;text-align:center}.steps li{flex:1 0 auto;font-weight:700;margin:0 0 5px;color:#b4b9be;padding-bottom:15px;position:relative}.steps li.is-active{color:#009344}.steps li.is-active::before{border:4px solid #009344;background:#009344}.steps li::before{content:'';border:4px solid #b4b9be;border-radius:100%;width:4px;height:4px;position:absolute;bottom:0;left:50%;margin-left:-6px;margin-bottom:-8px;background:#b4b9be}.wsal-setup-content{box-shadow:0 1px 3px rgba(0,0,0,.13);padding:2em;margin:0 0 20px;background:#fff;overflow:hidden;zoom:1;text-align:left}.wsal-setup-content fieldset,.wsal-setup-content h4{line-height:1.5}.wsal-setup-content .addon-wrapper{border:1px solid #eee;padding:15px;display:flex;margin-bottom:15px}.wsal-setup-content .addon-wrapper:hover{border-color:#ccc}.wsal-setup-content .addon-wrapper img{align-self:center;max-width:200px;margin-right:15px}.wsal-setup-actions{text-align:center}.wsal-setup-actions .button{box-shadow:none;font-size:14px;height:auto;padding:8px 20px;min-width:12em;min-width:auto;transition:.1s all linear}.wsal-setup-actions .button-primary{background-color:#009344;border-color:#009344;box-shadow:none;text-shadow:none;margin:0;opacity:1}.wsal-setup-actions .button-primary:focus,.wsal-setup-actions .button-primary:hover{background:#00ad50;border-color:#00ad50;box-shadow:none;color:#fff}.wsal-setup-footer{text-align:center}.wsal-setup-footer a{color:#009344;font-size:14px;text-decoration:none}.wsal-setup-form label[for=editor-roles-box],.wsal-setup-form label[for=editor-users-box],.wsal-setup-form label[for=exrole-query-box],.wsal-setup-form label[for=exuser-query-box],.wsal-setup-form label[for=ipaddr-query-box]{display:inline-block;margin:5px 0}.wsal-setup-form label[for=editor-roles-box] span,.wsal-setup-form label[for=editor-users-box] span,.wsal-setup-form label[for=exrole-query-box] span,.wsal-setup-form label[for=exuser-query-box] span,.wsal-setup-form label[for=ipaddr-query-box] span{display:inline-block;min-width:100px}.sectoken-ip,.sectoken-other,.sectoken-role,.sectoken-user{display:inline-block;border-width:1px;border-style:solid;padding:2px 4px;margin:2px 0 0 2px;border-radius:3px;cursor:default;line-height:1.3;font-size:14px}.sectoken-ip a,.sectoken-other a,.sectoken-role a,.sectoken-user a{text-decoration:none;font-size:12px;font-weight:700;color:#fff;margin-left:2px;background:#bbb;border-radius:25px;height:14px;display:inline-block;vertical-align:middle;width:14px;text-align:center;line-height:12px}.sectoken-ip a:hover,.sectoken-other a:hover,.sectoken-role a:hover,.sectoken-user a:hover{background:#fb9}.sectoken-other{display:table;border-collapse:separate}.sectoken-role{background:#efe;border-color:#5b5}.sectoken-user{background:#eff;border-color:#5be}.sectoken-ip{background:#ffe;border-color:#ed5}.sectoken-other{background:#ffe;border-color:#ed5}p.description{font-size:13px;font-style:italic}
|
css/src/wsal-wizard.scss
CHANGED
@@ -12,6 +12,7 @@ body {
|
|
12 |
box-shadow: none;
|
13 |
background: #f1f1f1;
|
14 |
padding: 0;
|
|
|
15 |
}
|
16 |
|
17 |
// Header logo.
|
12 |
box-shadow: none;
|
13 |
background: #f1f1f1;
|
14 |
padding: 0;
|
15 |
+
border: none;
|
16 |
}
|
17 |
|
18 |
// Header logo.
|
defaults.php
CHANGED
@@ -165,11 +165,20 @@ function wsaldefaults_wsal_init() {
|
|
165 |
$wsal->alerts = new WSAL_AlertManager( $wsal );
|
166 |
}
|
167 |
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
|
174 |
// Create list of default alerts.
|
175 |
$wsal->alerts->RegisterGroup(
|
165 |
$wsal->alerts = new WSAL_AlertManager( $wsal );
|
166 |
}
|
167 |
|
168 |
+
/*
|
169 |
+
* severity is based on monolog log levels
|
170 |
+
* @see https://github.com/Seldaek/monolog/blob/main/doc/01-usage.md#log-levels
|
171 |
+
*/
|
172 |
+
// ALERT (550): Action must be taken immediately.
|
173 |
+
$wsal->constants->AddConstant( 'WSAL_CRITICAL', 500, __( 'Critical severity events.', 'wp-security-audit-log' ) );
|
174 |
+
// ERROR (400): Runtime errors that do not require immediate action but should typically be logged and monitored.
|
175 |
+
$wsal->constants->AddConstant( 'WSAL_HIGH', 400, __( 'High severity events.', 'wp-security-audit-log' ) );
|
176 |
+
// WARNING (300): Exceptional occurrences that are not errors.
|
177 |
+
$wsal->constants->AddConstant( 'WSAL_MEDIUM', 300, __( 'Medium severity events.', 'wp-security-audit-log' ) );
|
178 |
+
// NOTICE (250): Normal but significant events.
|
179 |
+
$wsal->constants->AddConstant( 'WSAL_LOW', 250, __( 'Low severity events.', 'wp-security-audit-log' ) );
|
180 |
+
// INFO (200): Interesting events.
|
181 |
+
$wsal->constants->AddConstant( 'WSAL_INFORMATIONAL', 200, __( 'Informational events.', 'wp-security-audit-log' ) );
|
182 |
|
183 |
// Create list of default alerts.
|
184 |
$wsal->alerts->RegisterGroup(
|
js/freemius-pricing/178afa6030e76635dbe835e111d2c507.png
ADDED
Binary file
|
js/freemius-pricing/27b5a722a5553d9de0170325267fccec.png
ADDED
Binary file
|
sdk/freemius/assets/img/plugin-icon.png → js/freemius-pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png
RENAMED
File without changes
|
js/freemius-pricing/5480ed23b199531a8cbc05924f26952b.png
ADDED
Binary file
|
js/freemius-pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg
ADDED
@@ -0,0 +1,402 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
+
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4 |
+
width="250px" height="115.3px" viewBox="0 0 250 115.3" style="enable-background:new 0 0 250 115.3;" xml:space="preserve">
|
5 |
+
<style type="text/css">
|
6 |
+
.st0{fill:#969696;}
|
7 |
+
.st1{fill:#999999;}
|
8 |
+
.st2{fill:#FFFFFF;}
|
9 |
+
.st3{fill:#CCCCCC;}
|
10 |
+
.st4{fill:#72AF00;}
|
11 |
+
.st5{fill:#29ABE2;}
|
12 |
+
.st6{fill:#D4145A;}
|
13 |
+
.st7{fill:#333333;}
|
14 |
+
.st8{fill:#009ADE;}
|
15 |
+
.st9{fill:#002F87;}
|
16 |
+
.st10{fill-rule:evenodd;clip-rule:evenodd;fill:#FBB231;}
|
17 |
+
.st11{fill-rule:evenodd;clip-rule:evenodd;fill:#EC1B2E;}
|
18 |
+
.st12{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
|
19 |
+
.st13{fill:#2FABF7;}
|
20 |
+
.st14{fill:#228FE0;}
|
21 |
+
.st15{fill:#0571C1;}
|
22 |
+
.st16{fill:#1174CE;}
|
23 |
+
.st17{fill:#1BCC38;}
|
24 |
+
.st18{fill:#E20E37;}
|
25 |
+
.st19{fill:#00579F;}
|
26 |
+
.st20{fill:#FAA61A;}
|
27 |
+
.st21{fill:#F4F4F4;}
|
28 |
+
.st22{fill:none;stroke:#969696;stroke-width:7;stroke-miterlimit:10;}
|
29 |
+
</style>
|
30 |
+
<g>
|
31 |
+
<g>
|
32 |
+
<path class="st4" d="M225.4,36c-1,0-1.4-0.5-1.2-1.6l0.5-2.8c0.2-1.1,0.9-1.6,1.9-1.6h3.9c1.1,0,1.5,0.5,1.3,1.6l-0.5,2.8
|
33 |
+
c-0.2,1.1-0.8,1.6-1.9,1.6H225.4z"/>
|
34 |
+
<path class="st4" d="M218.3,70.4c-1,0-1.4-0.5-1.2-1.6l0.5-2.8c0.2-1.1,0.9-1.6,1.9-1.6h3.9c1.1,0,1.5,0.5,1.3,1.6l-0.5,2.8
|
35 |
+
c-0.2,1.1-0.8,1.6-1.9,1.6H218.3z"/>
|
36 |
+
<path class="st7" d="M187.1,38h-3c-1,0-1.9,0.7-2,1.7l-2.8,15.9h-3l2.1-11.8c0.7-3.9-0.9-5.8-4.7-5.8h-21.5
|
37 |
+
c-3.8,0-6.1,1.9-6.7,5.8l-2.1,11.8h-6.6h-5.7c-0.9,0-1.2-0.4-1-1.2l0.3-1.8c0.3,0.2,0.8,0.3,1.2,0.3h5.3c3.6,0,6.1-1.9,6.7-5.7
|
38 |
+
l0.6-3.6c0.6-3.7-0.8-5.6-4.4-5.6h-8.5c-3.8,0-6,1.9-6.7,5.8l-2.1,11.9h-11.4c-0.9,0-1.2-0.4-1-1.2l0.3-1.8
|
39 |
+
c0.3,0.2,0.8,0.3,1.2,0.3h4.9c3.6,0,5.7-1.9,6.4-5.7l0.6-3.6c0.6-3.7-0.8-5.6-4.4-5.6h-7.1h-0.7h-6.8h-7.1H85.6l0.1-0.3
|
40 |
+
c0.2-1.1,0.9-1.7,1.9-1.7h3.1c1,0,1.8-0.7,1.9-1.6l0.8-4.3h-7.9c-1.8,0-3.3,0.5-4.5,1.5c-1.2,1-1.9,2.4-2.3,4.3l-4.7,26.6h7.2
|
41 |
+
l3.1-17.8h6.4l-3.1,17.8h7.2l3-16.6c0.1-0.8,0.5-1.2,1.2-1.2h4.3l0,0h1.4l-2.2,12.1c-0.5,3.2,1.6,5.8,4.8,5.8h19.9h8.2h6.6h1.8
|
42 |
+
h2.9c1.4,0,2.6-1,2.8-2.4l2.4-13.6c0.2-0.9,0.6-1.2,1.5-1.2h4.5l-2.7,15.9c-0.1,0.7,0.4,1.3,1.2,1.3h4.7c0.6,0,1.1-0.4,1.2-1
|
43 |
+
l2.9-16.3h4.6c0.9,0,1.2,0.4,1,1.2l-2.4,13.4c-0.2,1.1,0.5,2.2,1.6,2.5v0.1h0.6h4.4h5.4h3h0.4v-0.1c0.9-0.2,1.5-0.8,1.7-1.7
|
44 |
+
l3.6-20.3C189.3,39.2,188.4,38,187.1,38z M131.3,47.3l0.3-1.7c0.1-0.5,0.4-0.8,1-0.8h3c0.5,0,0.8,0.3,0.7,0.8l-0.3,1.7
|
45 |
+
c-0.1,0.5-0.4,0.8-1,0.8h-3C131.4,48.1,131.2,47.8,131.3,47.3z M111.5,47.3l0.3-1.7c0.1-0.5,0.4-0.8,1-0.8h2.6
|
46 |
+
c0.5,0,0.8,0.3,0.7,0.8l-0.3,1.7c-0.1,0.5-0.4,0.8-1,0.8h-2.6C111.6,48.1,111.4,47.8,111.5,47.3z"/>
|
47 |
+
<path class="st7" d="M214,38l-3.3,18.8c-0.6,3.8-2.9,5.7-6.6,5.7h-10.3c-3.9,0-5.5-1.8-4.8-5.5l3.3-19h7.2l-2.8,15.9
|
48 |
+
c-0.2,0.9,0.2,1.3,1,1.3h4.9c0.9,0,1.3-0.4,1.5-1.2l2.9-16H214z"/>
|
49 |
+
<path class="st5" d="M183,34.4l0.5-2.8c0.2-1.1,0.9-1.6,1.9-1.6h3.9c1.1,0,1.5,0.5,1.3,1.6l-0.5,2.8c-0.2,1.1-0.8,1.6-1.9,1.6
|
50 |
+
h-4.1C183.2,36,182.8,35.5,183,34.4z"/>
|
51 |
+
<path class="st6" d="M68.7,42.9l0.5-2.8c0.2-1.1,0.9-1.6,1.9-1.6h3.9c1.1,0,1.5,0.5,1.3,1.6l-0.5,2.8c-0.2,1.1-0.8,1.6-1.9,1.6
|
52 |
+
h-4.1C68.9,44.5,68.6,43.9,68.7,42.9z"/>
|
53 |
+
<path class="st7" d="M212.1,62.6l1.2-6.8h13.8c0.5,0,0.8-0.3,0.9-0.8l0.3-1.5c0.1-0.4-0.1-0.6-0.6-0.6h-9.2
|
54 |
+
c-1.9,0-3.1-0.4-3.7-1.3c-0.5-0.9-0.7-2.2-0.4-4l0.6-3.7c0.6-3.8,2.9-5.7,6.7-5.7h15.8l-1.2,6.8h-13.7c-0.5,0-0.8,0.3-0.9,0.8
|
55 |
+
l-0.3,1.5c-0.1,0.4,0.1,0.6,0.6,0.6h9.2c3.4,0,4.8,1.8,4.3,5.3l-0.6,3.8c-0.7,3.8-2.7,5.8-6.2,5.8L212.1,62.6L212.1,62.6z"/>
|
56 |
+
</g>
|
57 |
+
<g>
|
58 |
+
<path class="st0" d="M244.4,115.2H5.6c-3.1,0-5.6-2.5-5.6-5.6V14.1C0,11,2.5,8.5,5.6,8.5h34.7v0.7H5.6c-2.7,0-4.8,2.2-4.8,4.8
|
59 |
+
v95.6c0,2.7,2.2,4.8,4.8,4.8h238.9c2.7,0,4.8-2.2,4.8-4.8V14.1c0-2.7-2.2-4.8-4.8-4.8h-35.9V8.5h35.9c3.1,0,5.6,2.5,5.6,5.6v95.6
|
60 |
+
C250,112.7,247.5,115.2,244.4,115.2z"/>
|
61 |
+
</g>
|
62 |
+
<g>
|
63 |
+
<path class="st0" d="M51.3,13.2c-0.7-0.2-1.3-0.5-1.8-0.8l0.8-1.7c0.4,0.3,0.9,0.6,1.5,0.8c0.6,0.2,1.2,0.3,1.8,0.3
|
64 |
+
c0.7,0,1.1-0.1,1.4-0.3c0.3-0.2,0.5-0.5,0.5-0.8c0-0.2-0.1-0.4-0.3-0.6c-0.2-0.2-0.4-0.3-0.7-0.4c-0.3-0.1-0.7-0.2-1.2-0.3
|
65 |
+
c-0.8-0.2-1.4-0.4-1.9-0.5c-0.5-0.2-0.9-0.5-1.2-0.9C50,7.5,49.8,7,49.8,6.3c0-0.6,0.2-1.1,0.5-1.6c0.3-0.5,0.8-0.8,1.4-1.1
|
66 |
+
c0.6-0.3,1.4-0.4,2.3-0.4c0.6,0,1.3,0.1,1.9,0.2c0.6,0.2,1.1,0.4,1.6,0.7l-0.7,1.7c-0.9-0.5-1.8-0.8-2.8-0.8
|
67 |
+
c-0.6,0-1.1,0.1-1.4,0.3c-0.3,0.2-0.5,0.5-0.5,0.8c0,0.3,0.2,0.6,0.5,0.8c0.4,0.2,0.9,0.3,1.6,0.5C55,7.6,55.6,7.8,56.1,8
|
68 |
+
c0.5,0.2,0.9,0.5,1.2,0.9c0.3,0.4,0.5,0.9,0.5,1.6c0,0.6-0.2,1.1-0.5,1.6c-0.3,0.5-0.8,0.8-1.4,1.1c-0.6,0.3-1.4,0.4-2.3,0.4
|
69 |
+
C52.8,13.5,52.1,13.4,51.3,13.2z"/>
|
70 |
+
<path class="st0" d="M66.7,10.1h-5.8c0.1,0.5,0.4,0.8,0.7,1.1c0.4,0.3,0.9,0.4,1.4,0.4c0.4,0,0.8-0.1,1.1-0.2
|
71 |
+
c0.3-0.1,0.6-0.3,0.9-0.6l1.2,1.3c-0.7,0.8-1.8,1.2-3.2,1.2c-0.9,0-1.6-0.2-2.3-0.5c-0.7-0.3-1.2-0.8-1.5-1.4
|
72 |
+
c-0.4-0.6-0.5-1.3-0.5-2c0-0.7,0.2-1.4,0.5-2c0.4-0.6,0.8-1.1,1.5-1.4c0.6-0.3,1.3-0.5,2.1-0.5c0.7,0,1.4,0.2,2,0.5
|
73 |
+
c0.6,0.3,1.1,0.8,1.4,1.4c0.3,0.6,0.5,1.3,0.5,2.1C66.8,9.6,66.7,9.8,66.7,10.1z M61.5,7.7c-0.3,0.3-0.5,0.7-0.6,1.2h3.8
|
74 |
+
C64.6,8.3,64.4,8,64,7.7c-0.3-0.3-0.8-0.4-1.2-0.4C62.3,7.2,61.9,7.4,61.5,7.7z"/>
|
75 |
+
<path class="st0" d="M69.7,12.9c-0.6-0.3-1.2-0.8-1.5-1.4c-0.4-0.6-0.5-1.3-0.5-2c0-0.8,0.2-1.4,0.5-2c0.4-0.6,0.9-1.1,1.5-1.4
|
76 |
+
c0.6-0.3,1.4-0.5,2.2-0.5c0.8,0,1.5,0.2,2.1,0.5c0.6,0.3,1,0.8,1.3,1.4l-1.7,0.9c-0.4-0.7-1-1.1-1.7-1.1c-0.6,0-1.1,0.2-1.4,0.6
|
77 |
+
c-0.4,0.4-0.6,0.9-0.6,1.5c0,0.7,0.2,1.2,0.6,1.5c0.4,0.4,0.9,0.6,1.4,0.6c0.8,0,1.3-0.4,1.7-1.1l1.7,0.9
|
78 |
+
c-0.3,0.6-0.7,1.1-1.3,1.4c-0.6,0.3-1.3,0.5-2.1,0.5C71.1,13.4,70.4,13.3,69.7,12.9z"/>
|
79 |
+
<path class="st0" d="M84.3,5.7v7.6h-2.1v-0.9c-0.3,0.3-0.6,0.6-1.1,0.8c-0.4,0.2-0.8,0.3-1.3,0.3c-1,0-1.8-0.3-2.4-0.9
|
80 |
+
c-0.6-0.6-0.9-1.4-0.9-2.6V5.7h2.2v4c0,1.2,0.5,1.8,1.5,1.8c0.5,0,1-0.2,1.3-0.5c0.3-0.3,0.5-0.9,0.5-1.5V5.7H84.3z"/>
|
81 |
+
<path class="st0" d="M89.6,5.8c0.4-0.2,1-0.3,1.6-0.3v2c-0.2,0-0.4,0-0.5,0c-0.6,0-1.1,0.2-1.5,0.5c-0.4,0.4-0.5,0.9-0.5,1.6v3.6
|
82 |
+
h-2.2V5.7h2.1v1C88.8,6.3,89.1,6,89.6,5.8z"/>
|
83 |
+
<path class="st0" d="M99.8,10.1H94c0.1,0.5,0.4,0.8,0.7,1.1c0.4,0.3,0.9,0.4,1.4,0.4c0.4,0,0.8-0.1,1.1-0.2
|
84 |
+
c0.3-0.1,0.6-0.3,0.9-0.6l1.2,1.3c-0.7,0.8-1.8,1.2-3.2,1.2c-0.9,0-1.6-0.2-2.3-0.5c-0.7-0.3-1.2-0.8-1.5-1.4
|
85 |
+
c-0.4-0.6-0.5-1.3-0.5-2c0-0.7,0.2-1.4,0.5-2c0.4-0.6,0.8-1.1,1.5-1.4c0.6-0.3,1.3-0.5,2.1-0.5c0.7,0,1.4,0.2,2,0.5
|
86 |
+
c0.6,0.3,1.1,0.8,1.4,1.4c0.3,0.6,0.5,1.3,0.5,2.1C99.9,9.6,99.8,9.8,99.8,10.1z M94.6,7.7c-0.3,0.3-0.5,0.7-0.6,1.2h3.8
|
87 |
+
c-0.1-0.5-0.3-0.9-0.6-1.2c-0.3-0.3-0.8-0.4-1.2-0.4C95.4,7.2,95,7.4,94.6,7.7z"/>
|
88 |
+
<path class="st0" d="M111.8,6.1c0.6,0.3,1,0.8,1.4,1.4c0.3,0.6,0.5,1.3,0.5,2.1c0,0.8-0.2,1.5-0.5,2.1c-0.3,0.6-0.8,1.1-1.4,1.4
|
89 |
+
s-1.2,0.5-1.9,0.5c-1,0-1.7-0.3-2.3-0.9v3.6h-2.2V5.7h2.1v0.9c0.5-0.7,1.3-1,2.4-1C110.6,5.6,111.2,5.7,111.8,6.1z M110.9,11
|
90 |
+
c0.4-0.4,0.5-0.9,0.5-1.5c0-0.6-0.2-1.2-0.5-1.5c-0.4-0.4-0.8-0.6-1.4-0.6c-0.6,0-1,0.2-1.4,0.6c-0.4,0.4-0.5,0.9-0.5,1.5
|
91 |
+
c0,0.6,0.2,1.2,0.5,1.5c0.4,0.4,0.8,0.6,1.4,0.6C110.1,11.6,110.5,11.4,110.9,11z"/>
|
92 |
+
<path class="st0" d="M120.8,6.4c0.6,0.6,1,1.4,1,2.5v4.4h-2.1v-1c-0.4,0.7-1.2,1.1-2.3,1.1c-0.6,0-1.1-0.1-1.5-0.3
|
93 |
+
c-0.4-0.2-0.8-0.5-1-0.8c-0.2-0.4-0.3-0.7-0.3-1.2c0-0.7,0.3-1.3,0.8-1.7c0.5-0.4,1.4-0.6,2.5-0.6h1.8c0-0.5-0.1-0.9-0.4-1.1
|
94 |
+
c-0.3-0.3-0.7-0.4-1.3-0.4c-0.4,0-0.8,0.1-1.2,0.2c-0.4,0.1-0.7,0.3-1,0.5l-0.8-1.5c0.4-0.3,0.9-0.5,1.5-0.7
|
95 |
+
c0.6-0.2,1.2-0.2,1.8-0.2C119.3,5.6,120.2,5.8,120.8,6.4z M118.9,11.7c0.3-0.2,0.5-0.4,0.6-0.8v-0.8h-1.5c-0.9,0-1.4,0.3-1.4,0.9
|
96 |
+
c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.5,0.2,0.9,0.2C118.3,11.9,118.7,11.9,118.9,11.7z"/>
|
97 |
+
<path class="st0" d="M131.2,5.7l-3.5,8.1c-0.4,0.9-0.8,1.5-1.3,1.9c-0.5,0.4-1.1,0.5-1.9,0.5c-0.4,0-0.8-0.1-1.2-0.2
|
98 |
+
c-0.4-0.1-0.7-0.3-1-0.5l0.8-1.6c0.2,0.2,0.4,0.3,0.6,0.4c0.2,0.1,0.4,0.1,0.7,0.1c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.4,0.5-0.7
|
99 |
+
l0-0.1l-3.3-7.7h2.3l2.1,5.2l2.2-5.2H131.2z"/>
|
100 |
+
<path class="st0" d="M144.2,6.4c0.6,0.6,0.8,1.4,0.8,2.5v4.4h-2.2v-4c0-0.6-0.1-1.1-0.4-1.4c-0.3-0.3-0.6-0.4-1.1-0.4
|
101 |
+
c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.5,0.8-0.5,1.5v3.8h-2.2v-4c0-1.2-0.5-1.8-1.4-1.8c-0.5,0-0.9,0.2-1.2,0.5
|
102 |
+
c-0.3,0.3-0.5,0.8-0.5,1.5v3.8h-2.2V5.7h2.1v0.9c0.3-0.3,0.6-0.6,1-0.7c0.4-0.2,0.9-0.3,1.4-0.3c0.5,0,1,0.1,1.5,0.3
|
103 |
+
c0.4,0.2,0.8,0.5,1.1,0.9c0.3-0.4,0.7-0.7,1.2-0.9c0.5-0.2,1-0.3,1.6-0.3C142.9,5.6,143.6,5.8,144.2,6.4z"/>
|
104 |
+
<path class="st0" d="M154.6,10.1h-5.8c0.1,0.5,0.4,0.8,0.7,1.1c0.4,0.3,0.9,0.4,1.4,0.4c0.4,0,0.8-0.1,1.1-0.2
|
105 |
+
c0.3-0.1,0.6-0.3,0.9-0.6l1.2,1.3c-0.7,0.8-1.8,1.2-3.2,1.2c-0.9,0-1.6-0.2-2.3-0.5c-0.7-0.3-1.2-0.8-1.5-1.4
|
106 |
+
c-0.4-0.6-0.5-1.3-0.5-2c0-0.7,0.2-1.4,0.5-2c0.4-0.6,0.8-1.1,1.5-1.4c0.6-0.3,1.3-0.5,2.1-0.5c0.7,0,1.4,0.2,2,0.5
|
107 |
+
c0.6,0.3,1.1,0.8,1.4,1.4c0.3,0.6,0.5,1.3,0.5,2.1C154.6,9.6,154.6,9.8,154.6,10.1z M149.4,7.7c-0.3,0.3-0.5,0.7-0.6,1.2h3.8
|
108 |
+
c-0.1-0.5-0.3-0.9-0.6-1.2c-0.3-0.3-0.8-0.4-1.2-0.4C150.1,7.2,149.7,7.4,149.4,7.7z"/>
|
109 |
+
<path class="st0" d="M163,6.4c0.6,0.6,0.9,1.4,0.9,2.5v4.4h-2.2v-4c0-0.6-0.1-1.1-0.4-1.4c-0.3-0.3-0.6-0.4-1.2-0.4
|
110 |
+
c-0.6,0-1,0.2-1.3,0.5c-0.3,0.3-0.5,0.9-0.5,1.5v3.8h-2.2V5.7h2.1v0.9c0.3-0.3,0.7-0.6,1.1-0.7c0.4-0.2,0.9-0.3,1.4-0.3
|
111 |
+
C161.7,5.6,162.4,5.8,163,6.4z"/>
|
112 |
+
<path class="st0" d="M170.8,12.9c-0.2,0.2-0.5,0.3-0.8,0.4c-0.3,0.1-0.7,0.1-1,0.1c-0.9,0-1.6-0.2-2.1-0.7c-0.5-0.5-0.7-1.1-0.7-2
|
113 |
+
V7.6H165V5.8h1.2V4h2.2v1.9h1.9v1.7h-1.9v3.1c0,0.3,0.1,0.6,0.2,0.7c0.2,0.2,0.4,0.3,0.7,0.3c0.4,0,0.6-0.1,0.9-0.3L170.8,12.9z"
|
114 |
+
/>
|
115 |
+
<path class="st0" d="M172.8,13.2c-0.6-0.2-1.1-0.4-1.4-0.6l0.7-1.6c0.3,0.2,0.8,0.4,1.2,0.5c0.5,0.1,1,0.2,1.4,0.2
|
116 |
+
c0.9,0,1.4-0.2,1.4-0.7c0-0.2-0.1-0.4-0.4-0.5c-0.3-0.1-0.6-0.2-1.2-0.2c-0.6-0.1-1.1-0.2-1.5-0.3c-0.4-0.1-0.8-0.3-1.1-0.7
|
117 |
+
c-0.3-0.3-0.4-0.8-0.4-1.3c0-0.5,0.1-0.9,0.4-1.3c0.3-0.4,0.7-0.7,1.2-0.9c0.5-0.2,1.2-0.3,1.9-0.3c0.5,0,1.1,0.1,1.6,0.2
|
118 |
+
c0.5,0.1,1,0.3,1.3,0.5l-0.7,1.6c-0.7-0.4-1.4-0.6-2.2-0.6c-0.5,0-0.8,0.1-1.1,0.2c-0.2,0.1-0.4,0.3-0.4,0.5
|
119 |
+
c0,0.2,0.1,0.4,0.4,0.5c0.3,0.1,0.7,0.2,1.2,0.3c0.6,0.1,1.1,0.2,1.5,0.3c0.4,0.1,0.7,0.3,1,0.6c0.3,0.3,0.4,0.7,0.4,1.3
|
120 |
+
c0,0.5-0.1,0.9-0.4,1.3c-0.3,0.4-0.7,0.7-1.2,0.9c-0.5,0.2-1.2,0.3-1.9,0.3C174,13.4,173.4,13.4,172.8,13.2z"/>
|
121 |
+
<path class="st0" d="M190.1,6.1c0.6,0.3,1,0.8,1.4,1.4c0.3,0.6,0.5,1.3,0.5,2.1c0,0.8-0.2,1.5-0.5,2.1c-0.3,0.6-0.8,1.1-1.4,1.4
|
122 |
+
c-0.6,0.3-1.2,0.5-1.9,0.5c-1.1,0-1.9-0.3-2.4-1v0.9h-2.1V2.8h2.2v3.7c0.6-0.6,1.3-0.9,2.3-0.9C188.9,5.6,189.5,5.7,190.1,6.1z
|
123 |
+
M189.2,11c0.4-0.4,0.5-0.9,0.5-1.5c0-0.6-0.2-1.2-0.5-1.5c-0.4-0.4-0.8-0.6-1.4-0.6s-1,0.2-1.4,0.6c-0.4,0.4-0.5,0.9-0.5,1.5
|
124 |
+
c0,0.6,0.2,1.2,0.5,1.5c0.4,0.4,0.8,0.6,1.4,0.6S188.8,11.4,189.2,11z"/>
|
125 |
+
<path class="st0" d="M200.8,5.7l-3.5,8.1c-0.4,0.9-0.8,1.5-1.3,1.9c-0.5,0.4-1.1,0.5-1.9,0.5c-0.4,0-0.8-0.1-1.2-0.2
|
126 |
+
c-0.4-0.1-0.7-0.3-1-0.5l0.8-1.6c0.2,0.2,0.4,0.3,0.6,0.4c0.2,0.1,0.4,0.1,0.7,0.1c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.4,0.5-0.7
|
127 |
+
l0-0.1l-3.3-7.7h2.3l2.1,5.2l2.2-5.2H200.8z"/>
|
128 |
+
</g>
|
129 |
+
<path class="st4" d="M51,41.7h-2.3v-4.8c0-8.2-6.7-14.8-14.8-14.8S19,28.8,19,36.9v4.8h-2.3c-2.6,0-4.7,2.1-4.7,4.7v18.7
|
130 |
+
c0,2.6,2.1,4.7,4.7,4.7H51c2.6,0,4.7-2.1,4.7-4.7V46.4C55.7,43.8,53.6,41.7,51,41.7z M26.8,36.9c0-3.9,3.2-7,7-7s7,3.2,7,7v4.8
|
131 |
+
H26.8V36.9z M44.1,51L31.9,63.2c-0.4,0.4-1.1,0.4-1.5,0l-6.9-6.9c-0.4-0.4-0.4-1.1,0-1.5l1.5-1.5c0.4-0.4,1.1-0.4,1.5,0l4.6,4.6
|
132 |
+
l10-10c0.4-0.4,1.1-0.4,1.5,0l1.5,1.5C44.6,49.9,44.6,50.6,44.1,51z"/>
|
133 |
+
<g>
|
134 |
+
<g>
|
135 |
+
<g>
|
136 |
+
<g>
|
137 |
+
<path class="st8" d="M53.9,87h-4.8c-0.3,0-0.6,0.2-0.7,0.6l-2,12.4c0,0.2,0.2,0.5,0.4,0.5h2.5c0.2,0,0.4-0.2,0.5-0.4l0.6-3.5
|
138 |
+
c0.1-0.3,0.3-0.6,0.7-0.6h1.5c3.2,0,5-1.5,5.5-4.6c0.2-1.3,0-2.4-0.6-3.1C56.7,87.4,55.5,87,53.9,87z M54.5,91.5
|
139 |
+
c-0.3,1.7-1.6,1.7-2.9,1.7h-0.7l0.5-3.2c0-0.2,0.2-0.3,0.4-0.3h0.3c0.9,0,1.7,0,2.1,0.5C54.5,90.5,54.5,90.9,54.5,91.5z"/>
|
140 |
+
<path class="st9" d="M19.4,87h-4.8c-0.3,0-0.6,0.2-0.7,0.6l-2,12.4c0,0.2,0.2,0.5,0.4,0.5h2.3c0.3,0,0.6-0.2,0.7-0.6l0.5-3.3
|
141 |
+
c0.1-0.3,0.3-0.6,0.7-0.6h1.5c3.2,0,5-1.5,5.5-4.6c0.2-1.3,0-2.4-0.6-3.1C22.3,87.4,21,87,19.4,87z M20,91.5
|
142 |
+
c-0.3,1.7-1.6,1.7-2.9,1.7h-0.7l0.5-3.2c0-0.2,0.2-0.3,0.4-0.3h0.3c0.9,0,1.7,0,2.1,0.5C20,90.5,20.1,90.9,20,91.5z"/>
|
143 |
+
<path class="st9" d="M33.9,91.5h-2.3c-0.2,0-0.4,0.1-0.4,0.3l-0.1,0.6l-0.2-0.2c-0.5-0.7-1.6-1-2.7-1c-2.6,0-4.7,1.9-5.2,4.7
|
144 |
+
c-0.2,1.4,0.1,2.7,0.9,3.6c0.7,0.8,1.7,1.2,2.9,1.2c2.1,0,3.2-1.3,3.2-1.3l-0.1,0.6c0,0.2,0.2,0.5,0.4,0.5h2.1
|
145 |
+
c0.3,0,0.6-0.2,0.7-0.6l1.3-7.9C34.3,91.7,34.1,91.5,33.9,91.5z M30.6,96c-0.2,1.3-1.3,2.2-2.6,2.2c-0.7,0-1.2-0.2-1.6-0.6
|
146 |
+
c-0.3-0.4-0.5-1-0.4-1.6c0.2-1.3,1.3-2.2,2.6-2.2c0.7,0,1.2,0.2,1.5,0.6C30.6,94.7,30.8,95.3,30.6,96z"/>
|
147 |
+
<path class="st8" d="M68.3,91.5H66c-0.2,0-0.4,0.1-0.4,0.3l-0.1,0.6l-0.2-0.2c-0.5-0.7-1.6-1-2.7-1c-2.6,0-4.7,1.9-5.2,4.7
|
148 |
+
c-0.2,1.4,0.1,2.7,0.9,3.6c0.7,0.8,1.7,1.2,2.9,1.2c2.1,0,3.2-1.3,3.2-1.3l-0.1,0.6c0,0.2,0.2,0.5,0.4,0.5h2.1
|
149 |
+
c0.3,0,0.6-0.2,0.7-0.6l1.3-7.9C68.8,91.7,68.6,91.5,68.3,91.5z M65.1,96c-0.2,1.3-1.3,2.2-2.6,2.2c-0.7,0-1.2-0.2-1.6-0.6
|
150 |
+
c-0.3-0.4-0.5-1-0.4-1.6c0.2-1.3,1.3-2.2,2.6-2.2c0.7,0,1.2,0.2,1.5,0.6C65.1,94.7,65.2,95.3,65.1,96z"/>
|
151 |
+
<path class="st9" d="M46.2,91.5h-2.3c-0.2,0-0.4,0.1-0.6,0.3l-3.2,4.7l-1.4-4.5c-0.1-0.3-0.3-0.5-0.6-0.5h-2.3
|
152 |
+
c-0.3,0-0.5,0.3-0.4,0.5l2.6,7.5l-2.4,3.4c-0.2,0.3,0,0.6,0.3,0.6h2.3c0.2,0,0.4-0.1,0.6-0.3l7.7-11.2
|
153 |
+
C46.7,91.8,46.5,91.5,46.2,91.5z"/>
|
154 |
+
<path class="st8" d="M71.1,87.3l-2,12.6c0,0.2,0.2,0.5,0.4,0.5h2c0.3,0,0.6-0.2,0.7-0.6l2-12.4c0-0.2-0.2-0.5-0.4-0.5h-2.2
|
155 |
+
C71.3,87,71.1,87.1,71.1,87.3z"/>
|
156 |
+
</g>
|
157 |
+
</g>
|
158 |
+
</g>
|
159 |
+
</g>
|
160 |
+
<g>
|
161 |
+
<polygon class="st10" points="150.3,102.3 150.8,102.2 151.3,102.2 151.7,102.1 152.2,102.1 152.6,102 153,101.8 153.4,101.7
|
162 |
+
153.8,101.5 154.2,101.4 154.6,101.2 155,100.9 155.4,100.7 155.7,100.5 156.1,100.2 156.4,99.9 156.7,99.6 157,99.3 157.3,99
|
163 |
+
157.6,98.6 157.8,98.3 158,97.9 158.3,97.5 158.5,97.2 158.6,96.8 158.8,96.3 158.9,95.9 159.1,95.5 159.2,95.1 159.2,94.6
|
164 |
+
159.3,94.2 159.3,93.7 159.3,93.2 159.3,92.8 159.3,92.3 159.2,91.9 159.2,91.4 159.1,91 158.9,90.6 158.8,90.2 158.6,89.8
|
165 |
+
158.5,89.4 158.3,89 158,88.6 157.8,88.2 157.6,87.9 157.3,87.5 157,87.2 156.7,86.9 156.4,86.6 156.1,86.3 155.7,86.1
|
166 |
+
155.4,85.8 155,85.6 154.6,85.4 154.2,85.2 153.8,85 153.4,84.8 153,84.7 152.6,84.6 152.2,84.5 151.7,84.4 151.3,84.3
|
167 |
+
150.8,84.3 150.3,84.3 149.9,84.3 149.4,84.3 149,84.4 148.5,84.5 148.1,84.6 147.7,84.7 147.3,84.8 146.8,85 146.4,85.2
|
168 |
+
146.1,85.4 145.7,85.6 145.3,85.8 145,86.1 144.6,86.3 144.3,86.6 144,86.9 143.7,87.2 143.4,87.5 143.1,87.9 142.9,88.2
|
169 |
+
142.7,88.6 142.4,89 142.2,89.4 142.1,89.8 141.9,90.2 141.8,90.6 141.6,91 141.5,91.4 141.5,91.9 141.4,92.3 141.4,92.8
|
170 |
+
141.4,93.2 141.4,93.7 141.4,94.2 141.5,94.6 141.5,95.1 141.6,95.5 141.8,95.9 141.9,96.3 142.1,96.8 142.2,97.2 142.4,97.5
|
171 |
+
142.7,97.9 142.9,98.3 143.1,98.6 143.4,99 143.7,99.3 144,99.6 144.3,99.9 144.6,100.2 145,100.5 145.3,100.7 145.7,100.9
|
172 |
+
146.1,101.2 146.4,101.4 146.8,101.5 147.3,101.7 147.7,101.8 148.1,102 148.5,102.1 149,102.1 149.4,102.2 149.9,102.2
|
173 |
+
150.3,102.3 150.3,102.3 "/>
|
174 |
+
<polygon class="st11" points="138.3,102.3 138.8,102.2 139.2,102.2 139.7,102.1 140.1,102.1 140.6,102 141,101.8 141.4,101.7
|
175 |
+
141.8,101.5 142.2,101.4 142.6,101.2 143,100.9 143.3,100.7 143.7,100.5 144,100.2 144.3,99.9 144.7,99.6 145,99.3 145.2,99
|
176 |
+
145.5,98.6 145.8,98.3 146,97.9 146.2,97.5 146.4,97.2 146.6,96.8 146.7,96.3 146.9,95.9 147,95.5 147.1,95.1 147.2,94.6
|
177 |
+
147.2,94.2 147.3,93.7 147.3,93.2 147.3,92.8 147.2,92.3 147.2,91.9 147.1,91.4 147,91 146.9,90.6 146.7,90.2 146.6,89.8
|
178 |
+
146.4,89.4 146.2,89 146,88.6 145.8,88.2 145.5,87.9 145.2,87.5 145,87.2 144.7,86.9 144.3,86.6 144,86.3 143.7,86.1 143.3,85.8
|
179 |
+
143,85.6 142.6,85.4 142.2,85.2 141.8,85 141.4,84.8 141,84.7 140.6,84.6 140.1,84.5 139.7,84.4 139.2,84.3 138.8,84.3
|
180 |
+
138.3,84.3 137.8,84.3 137.4,84.3 136.9,84.4 136.5,84.5 136.1,84.6 135.6,84.7 135.2,84.8 134.8,85 134.4,85.2 134,85.4
|
181 |
+
133.6,85.6 133.3,85.8 132.9,86.1 132.6,86.3 132.3,86.6 131.9,86.9 131.6,87.2 131.4,87.5 131.1,87.9 130.8,88.2 130.6,88.6
|
182 |
+
130.4,89 130.2,89.4 130,89.8 129.9,90.2 129.7,90.6 129.6,91 129.5,91.4 129.4,91.9 129.3,92.3 129.3,92.8 129.3,93.2
|
183 |
+
129.3,93.7 129.3,94.2 129.4,94.6 129.5,95.1 129.6,95.5 129.7,95.9 129.9,96.3 130,96.8 130.2,97.2 130.4,97.5 130.6,97.9
|
184 |
+
130.8,98.3 131.1,98.6 131.4,99 131.6,99.3 131.9,99.6 132.3,99.9 132.6,100.2 132.9,100.5 133.3,100.7 133.6,100.9 134,101.2
|
185 |
+
134.4,101.4 134.8,101.5 135.2,101.7 135.6,101.8 136.1,102 136.5,102.1 136.9,102.1 137.4,102.2 137.8,102.2 138.3,102.3
|
186 |
+
138.3,102.3 "/>
|
187 |
+
<polygon class="st10" points="143.3,87.7 148,87.7 148,87.2 143.7,87.2 143.3,87.7 143.3,87.7 "/>
|
188 |
+
<polygon class="st10" points="142.6,88.8 148,88.8 148,88.3 142.8,88.3 142.6,88.8 142.6,88.8 "/>
|
189 |
+
<polygon class="st10" points="142,89.9 148,89.9 148,89.4 142.2,89.4 142,89.9 142,89.9 "/>
|
190 |
+
<polygon class="st10" points="141.7,91 148,91 148,90.5 141.8,90.5 141.7,91 141.7,91 "/>
|
191 |
+
<polygon class="st10" points="141.9,96.2 148.1,96.2 148.1,95.7 141.7,95.7 141.9,96.2 141.9,96.2 "/>
|
192 |
+
<polygon class="st10" points="142.3,97.3 148.1,97.3 148.1,96.8 142.1,96.8 142.3,97.3 142.3,97.3 "/>
|
193 |
+
<polygon class="st10" points="143,98.4 148.1,98.4 148.1,97.9 142.7,97.9 143,98.4 143,98.4 "/>
|
194 |
+
<polygon class="st10" points="143.9,99.5 148.1,99.5 148.1,99 143.4,99 143.9,99.5 143.9,99.5 "/>
|
195 |
+
<polygon class="st10" points="141.4,92.1 148,92.1 148,91.6 141.5,91.6 141.4,92.1 141.4,92.1 "/>
|
196 |
+
<polygon class="st10" points="145.5,95.1 148,95.1 148,94.6 145.6,94.6 145.5,95.1 145.5,95.1 "/>
|
197 |
+
<polygon class="st10" points="145.7,94.1 148,94.1 148,93.6 145.8,93.6 145.7,94.1 145.7,94.1 "/>
|
198 |
+
<polygon class="st10" points="141.3,93.6 141.9,93.6 141.9,94.1 141.3,94.1 141.3,93.6 141.3,93.6 "/>
|
199 |
+
<g>
|
200 |
+
<polygon class="st12" points="140.1,93 140,93 140,93 139.9,93 139.9,93 139.9,92.9 139.8,92.9 139.8,92.9 139.7,92.9
|
201 |
+
139.7,92.9 139.6,92.9 139.6,92.9 139.5,92.9 139.5,92.9 139.4,92.9 139.3,92.9 139.2,92.9 139.2,92.9 139.1,92.9 139.1,93
|
202 |
+
139,93 139,93 138.9,93 138.9,93.1 138.9,93.1 138.9,93.1 138.8,93.2 138.8,93.2 138.8,93.2 138.8,93.3 138.9,93.3 138.9,93.3
|
203 |
+
138.9,93.4 139,93.4 139,93.5 139.1,93.5 139.2,93.6 139.3,93.6 139.4,93.6 139.5,93.7 139.6,93.7 139.7,93.7 139.8,93.8
|
204 |
+
139.9,93.9 139.9,94 140,94.1 140,94.2 140,94.4 140,94.6 140,94.7 139.9,94.9 139.9,95 139.8,95.1 139.8,95.2 139.7,95.2
|
205 |
+
139.6,95.3 139.5,95.4 139.4,95.4 139.3,95.4 139.2,95.5 139.1,95.5 139,95.5 138.9,95.5 138.8,95.5 138.7,95.5 138.6,95.5
|
206 |
+
138.5,95.5 138.4,95.5 138.3,95.5 138.2,95.5 138.1,95.5 138,95.5 137.9,95.5 137.9,95.5 137.8,95.5 137.8,95.5 137.7,95.5
|
207 |
+
137.7,95.4 137.6,95.4 137.6,95.4 137.5,95.4 137.6,94.7 137.7,94.7 137.7,94.7 137.7,94.8 137.8,94.8 137.9,94.8 137.9,94.8
|
208 |
+
138,94.8 138.1,94.8 138.1,94.8 138.2,94.8 138.3,94.8 138.4,94.9 138.5,94.9 138.5,94.9 138.6,94.9 138.7,94.9 138.8,94.8
|
209 |
+
138.9,94.8 138.9,94.8 139,94.7 139,94.7 139,94.7 139,94.6 139.1,94.6 139.1,94.5 139,94.4 139,94.3 138.9,94.3 138.8,94.2
|
210 |
+
138.7,94.2 138.6,94.1 138.5,94.1 138.4,94 138.2,94 138.1,93.9 138,93.8 138,93.7 137.9,93.6 137.9,93.4 137.9,93.2 137.9,93.1
|
211 |
+
137.9,93 138,92.9 138,92.8 138,92.7 138.1,92.6 138.2,92.5 138.2,92.5 138.3,92.4 138.4,92.4 138.5,92.3 138.6,92.3 138.8,92.2
|
212 |
+
138.9,92.2 139.1,92.2 139.3,92.2 139.4,92.2 139.5,92.2 139.6,92.2 139.7,92.2 139.7,92.2 139.8,92.2 139.9,92.2 139.9,92.2
|
213 |
+
140,92.2 140,92.3 140.1,92.3 140.1,92.3 140.1,92.3 140.2,92.3 140.2,92.3 140.2,92.3 140.1,93 140.1,93 "/>
|
214 |
+
<polygon class="st12" points="140.8,91.5 141.6,91.5 141.5,92.3 142,92.3 141.9,93 141.3,92.9 141.1,94.6 141.1,94.7 141.1,94.7
|
215 |
+
141.1,94.8 141.1,94.8 141.2,94.8 141.3,94.9 141.3,94.9 141.4,94.9 141.5,94.9 141.5,94.9 141.6,94.9 141.6,94.8 141.7,94.8
|
216 |
+
141.7,94.8 141.7,94.8 141.7,94.8 141.6,95.4 141.6,95.4 141.6,95.4 141.5,95.4 141.5,95.4 141.5,95.4 141.5,95.4 141.5,95.5
|
217 |
+
141.4,95.5 141.4,95.5 141.4,95.5 141.3,95.5 141.3,95.5 141.3,95.5 141.2,95.5 141.2,95.5 141.1,95.5 140.9,95.5 140.8,95.5
|
218 |
+
140.6,95.5 140.6,95.5 140.5,95.5 140.4,95.4 140.3,95.4 140.3,95.4 140.3,95.3 140.2,95.3 140.2,95.2 140.2,95.2 140.2,95.1
|
219 |
+
140.2,95.1 140.2,95 140.2,94.9 140.2,94.8 140.8,91.5 140.8,91.5 "/>
|
220 |
+
<polygon class="st12" points="149.9,92.5 149.9,92.4 149.8,92.4 149.8,92.4 149.7,92.4 149.7,92.4 149.6,92.3 149.6,92.3
|
221 |
+
149.5,92.3 149.5,92.3 149.4,92.3 149.3,92.3 149.3,92.3 149.2,92.2 149.1,92.2 149.1,92.2 149,92.2 148.9,92.2 148.8,92.2
|
222 |
+
148.8,92.3 148.7,92.3 148.6,92.3 148.5,92.3 148.4,92.4 148.3,92.4 148.3,92.5 148.2,92.6 148.1,92.7 148,92.8 148,92.9
|
223 |
+
147.9,93.1 147.8,93.2 147.8,93.4 147.8,93.5 147.8,93.6 147.8,93.7 147.8,93.9 147.8,94 147.8,94.1 147.8,94.1 147.8,94.2
|
224 |
+
147.9,94.3 147.9,94.4 148,94.5 148.1,94.5 148.2,94.6 148.3,94.6 148.4,94.7 148.5,94.7 148.5,94.7 148.6,94.7 148.6,94.7
|
225 |
+
148.7,94.7 148.7,94.7 148.8,94.7 148.9,94.7 149,94.7 149,94.7 149.1,94.7 149.2,94.7 149.3,94.7 149.3,94.6 149.4,94.6
|
226 |
+
149.5,94.5 149.5,94.5 149.4,95.3 149.4,95.3 149.4,95.3 149.3,95.3 149.3,95.4 149.3,95.4 149.2,95.4 149.2,95.4 149.1,95.4
|
227 |
+
149.1,95.5 149,95.5 148.9,95.5 148.8,95.5 148.7,95.5 148.5,95.5 148.4,95.5 148.2,95.5 148.1,95.5 147.9,95.5 147.8,95.4
|
228 |
+
147.7,95.4 147.5,95.3 147.4,95.2 147.3,95.1 147.2,95 147.1,94.8 147,94.7 146.9,94.5 146.9,94.3 146.8,94.1 146.8,93.9
|
229 |
+
146.8,93.7 146.8,93.4 146.9,93.3 146.9,93.2 146.9,93 147,92.9 147,92.8 147,92.7 147.1,92.6 147.1,92.5 147.2,92.4 147.2,92.3
|
230 |
+
147.3,92.3 147.3,92.2 147.4,92.1 147.4,92 147.5,92 147.5,91.9 147.6,91.8 147.7,91.8 147.8,91.7 147.8,91.7 147.9,91.6
|
231 |
+
148,91.6 148.1,91.6 148.2,91.5 148.3,91.5 148.4,91.5 148.5,91.5 148.6,91.4 148.7,91.4 148.8,91.4 148.9,91.4 149,91.4
|
232 |
+
149.1,91.4 149.2,91.4 149.3,91.4 149.4,91.4 149.5,91.4 149.5,91.5 149.6,91.5 149.7,91.5 149.8,91.5 149.8,91.5 149.9,91.5
|
233 |
+
149.9,91.6 150,91.6 150,91.6 150,91.6 150,91.6 149.9,92.5 149.9,92.5 "/>
|
234 |
+
<path class="st12" d="M157.2,91.6l-0.2,1.2l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0
|
235 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
236 |
+
l-0.1,0.2l-0.1,0.2l0,0.2l0,0.2l0,0.2l0,0.2l0,0.2l0,0.2l0,0.1l0,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
237 |
+
l0.1,0l0.2,0h0.1l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1-0.1l0-0.1v0l-0.1,0.3h0.8
|
238 |
+
l0.7-4H157.2z M156.8,93.8L156.8,93.8l0,0.2l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l-0.1,0.1l-0.1,0.1l-0.1,0l-0.1,0
|
239 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1
|
240 |
+
l0-0.1l0-0.1l0.1-0.1l0.1-0.1l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0,0l0,0l0,0.1l0,0.1l0,0.1l0,0.1
|
241 |
+
l0,0.1l0,0.1L156.8,93.8L156.8,93.8z"/>
|
242 |
+
<path class="st12" d="M137.7,92.9L137.7,92.9l-0.1-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1,0l-0.1,0l-0.1,0
|
243 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0h-0.1h-0.1h-0.1l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0
|
244 |
+
l-0.1,0l-0.2,0.7l0,0l0,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0h0.1l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0
|
245 |
+
l0.1,0l0,0l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0h0l0,0l0,0l-0.1,0h-0.1l-0.1,0l-0.1,0h-0.1h0l0,0l0,0l0,0l0,0l-0.1,0l-0.1,0
|
246 |
+
l-0.1,0l-0.1,0l0,0l0,0l0,0l0,0l0,0l0,0h0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
247 |
+
l-0.1,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1v0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0.1,0.1l0.1,0l0.1,0l0.1,0
|
248 |
+
l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0,0l0,0l0,0l0,0.1l0,0.1
|
249 |
+
l0,0.1h0.8l0.1-0.7l0.3-1.6l0-0.1V93L137.7,92.9z M136.6,94.1L136.6,94.1l0,0.2l0,0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0
|
250 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l0,0l0,0l-0.1,0l0,0l0,0l0-0.1l0-0.1l0-0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0
|
251 |
+
l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0.1,0l0,0h0h0l0,0l0,0l0,0l0,0V94.1L136.6,94.1L136.6,94.1z"/>
|
252 |
+
<polygon class="st12" points="131,95.5 130.2,95.5 130.8,91.5 132.3,91.5 132.4,93.9 133.4,91.5 134.9,91.5 134.2,95.5
|
253 |
+
133.4,95.5 133.9,92.5 133.9,92.5 132.6,95.5 131.7,95.5 131.7,95.4 131.7,95.1 131.6,94.6 131.6,94.1 131.6,93.5 131.6,93
|
254 |
+
131.5,92.7 131.5,92.5 131.5,92.5 131.5,92.5 131.5,92.5 131.5,92.5 131,95.5 131,95.5 "/>
|
255 |
+
<path class="st12" d="M152.7,92.9L152.7,92.9l-0.1-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1,0l-0.1,0l-0.1,0
|
256 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0h-0.1h-0.1h-0.1l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0
|
257 |
+
l-0.1,0l-0.2,0.7l0,0l0,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0h0.1l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0
|
258 |
+
l0.1,0l0,0l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0h0l0,0l0,0l-0.1,0h-0.1l-0.1,0l-0.1,0h-0.1h0l0,0l0,0l0,0l-0.1,0l-0.1,0
|
259 |
+
l-0.1,0l-0.1,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0h0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
260 |
+
l-0.1,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1v0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0,0.1l0.1,0.1l0.1,0l0.1,0l0.1,0
|
261 |
+
l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0,0l0,0l0,0v0.1l0,0.1l0,0.1
|
262 |
+
h0.8l0.1-0.7l0.3-1.6l0-0.1V93L152.7,92.9z M151.7,94.1L151.7,94.1l0,0.2l0,0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l-0.1,0
|
263 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l0,0l0,0l0-0.1l0-0.1l0-0.1l0-0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0
|
264 |
+
l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0h0l0,0l0,0l0,0l0,0L151.7,94.1L151.7,94.1L151.7,94.1z"/>
|
265 |
+
<polygon class="st12" points="152.6,95.5 153.5,95.5 153.5,95.5 153.8,93.8 153.8,93.7 153.8,93.7 153.9,93.6 153.9,93.5
|
266 |
+
153.9,93.5 153.9,93.4 154,93.3 154,93.3 154.1,93.2 154.1,93.2 154.2,93.1 154.3,93.1 154.4,93.1 154.5,93 154.6,93 154.7,93
|
267 |
+
154.7,93 154.8,93 154.8,93 154.8,93 154.9,92.2 154.8,92.2 154.8,92.3 154.7,92.3 154.6,92.3 154.5,92.3 154.5,92.3 154.4,92.4
|
268 |
+
154.4,92.4 154.3,92.5 154.2,92.5 154.2,92.5 154.2,92.6 154.1,92.6 154.1,92.7 154,92.8 154,92.8 154.1,92.3 153.2,92.3
|
269 |
+
152.6,95.5 152.6,95.5 152.6,95.5 "/>
|
270 |
+
<polygon class="st12" points="144.6,95.5 145.5,95.5 145.5,95.5 145.8,93.8 145.8,93.7 145.8,93.7 145.8,93.6 145.8,93.5
|
271 |
+
145.9,93.5 145.9,93.4 145.9,93.4 146,93.3 146,93.3 146.1,93.2 146.1,93.2 146.2,93.2 146.3,93.1 146.4,93.1 146.5,93.1
|
272 |
+
146.6,93.1 146.6,93.1 146.6,93.1 146.7,93.1 146.7,93.1 146.7,93.1 146.7,93.1 146.7,93.1 146.7,93.1 146.7,93.1 146.7,93
|
273 |
+
146.7,93 146.7,92.9 146.8,92.8 146.8,92.8 146.8,92.7 146.8,92.6 146.9,92.5 146.9,92.5 146.9,92.4 147,92.4 147,92.3 147,92.3
|
274 |
+
147,92.3 147,92.3 147,92.3 147,92.3 147,92.2 147,92.2 147,92.2 146.9,92.2 146.9,92.2 146.9,92.2 146.8,92.2 146.7,92.3
|
275 |
+
146.6,92.3 146.6,92.3 146.5,92.3 146.4,92.3 146.4,92.4 146.3,92.4 146.3,92.4 146.2,92.5 146.2,92.5 146.1,92.6 146.1,92.6
|
276 |
+
146,92.7 146,92.8 145.9,92.8 146.1,92.3 145.2,92.3 144.6,95.5 144.6,95.5 144.6,95.5 "/>
|
277 |
+
<path class="st12" d="M144.7,93.2l0-0.2l0-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1,0l-0.1,0l-0.1,0
|
278 |
+
l-0.1,0l-0.1,0l-0.2,0l-0.2,0l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0.1l0,0.1
|
279 |
+
l0,0.1l0,0.1l0,0.1l0,0.2l0,0.2l0,0.2l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0l0.2,0l0.2,0l0.2,0
|
280 |
+
l0.1,0h0.1l0.1,0h0.1l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0.1-0.7l-0.1,0.1l-0.1,0l-0.1,0l-0.1,0
|
281 |
+
l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0h-0.1l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l-0.1,0l0,0
|
282 |
+
l0,0l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0,0h0.5v0h1.4l0-0.2l0-0.3l0-0.2L144.7,93.2z M143.9,93.5h-0.7l0,0h-0.4
|
283 |
+
l0,0l0-0.1l0-0.1l0-0.1l0-0.1l0-0.1l0,0l0,0l0,0l0,0l0,0l0,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0.1,0l0,0l0,0l0,0l0,0l0,0l0,0
|
284 |
+
l0,0l0,0l0,0.1l0,0.1l0,0.1l0,0.1L143.9,93.5L143.9,93.5z"/>
|
285 |
+
</g>
|
286 |
+
</g>
|
287 |
+
<g>
|
288 |
+
<polygon class="st13" points="168.8,89.4 170.4,89.4 169.6,87.5 "/>
|
289 |
+
<path class="st14" d="M187.7,87.8c-0.1-0.1-0.3-0.1-0.6-0.1h-1.4v1.1h1.4c0.2,0,0.4,0,0.6-0.1s0.2-0.3,0.2-0.5
|
290 |
+
C188,88,187.8,87.8,187.7,87.8z"/>
|
291 |
+
<path class="st15" d="M202.4,85.7v0.8l-0.4-0.8h-3.2v0.8l-0.4-0.8H194c-0.8,0-1.4,0.1-1.9,0.4v-0.4h-3.1v0.4
|
292 |
+
c-0.3-0.3-0.8-0.4-1.3-0.4h-11.1l-0.8,1.7l-0.8-1.7h-3.5v0.8l-0.4-0.8h-3l-1.4,3.2l-1.6,3.6h1.6h1.9l0.4-1.1h1l0.4,1.1h4v-0.8
|
293 |
+
l0.3,0.8h2l0.3-0.8v0.8h9.6v-1.8h0.1c0.1,0,0.1,0,0.1,0.2v1.5h5v-0.4c0.4,0.2,1,0.4,1.9,0.4h2.1l0.4-1.1h1l0.4,1.1h4v-1l0.6,1h3.2
|
294 |
+
v-6.8H202.4L202.4,85.7z M179.1,91.5H178v-3.8l-1.7,3.8h-1l-1.7-3.8v3.8h-2.3l-0.5-1h-2.3l-0.4,1.1h-1.3l2.1-4.9h1.7l1.9,4.6v-4.6
|
295 |
+
h1.9l1.5,3.3l1.4-3.3h1.9V91.5z M183.8,87.7h-2.7v0.9h2.6v1h-2.6v1h2.7v1H180v-4.9h3.9V87.7z M189,89.7c0.1,0.3,0.2,0.5,0.2,0.9v1
|
296 |
+
H188V91c0-0.3,0-0.7-0.2-1c-0.2-0.2-0.4-0.2-0.8-0.2h-1.2v1.8h-1.2v-4.9h2.6c0.6,0,1,0,1.4,0.2c0.3,0.2,0.6,0.6,0.6,1.1
|
297 |
+
c0,0.8-0.5,1.2-0.8,1.3C188.6,89.4,188.9,89.6,189,89.7z M191.1,91.5h-1.2v-4.9h1.2V91.5z M204.7,91.5H203l-2.2-3.7v3.7h-2.3
|
298 |
+
l-0.4-1h-2.4l-0.4,1.1h-1.3c-0.6,0-1.2-0.1-1.7-0.6c-0.4-0.4-0.6-1-0.6-1.9c0-0.7,0.1-1.4,0.6-1.9c0.3-0.4,1-0.6,1.7-0.6h1.1v1
|
299 |
+
H194c-0.4,0-0.6,0.1-0.9,0.3c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.6,0.1,0.9,0.3,1.2c0.2,0.2,0.5,0.3,0.8,0.3h0.5l1.6-3.8h1.7l1.9,4.6
|
300 |
+
v-4.6h1.7l2,3.4v-3.4h1.2v4.8H204.7L204.7,91.5z"/>
|
301 |
+
<g>
|
302 |
+
<polygon class="st14" points="196,89.4 197.6,89.4 196.9,87.5 "/>
|
303 |
+
<polygon class="st14" points="184.3,99.4 184.3,95.4 182.5,97.4 "/>
|
304 |
+
</g>
|
305 |
+
<polygon class="st13" points="176.9,95.9 176.9,96.8 179.5,96.8 179.5,97.8 176.9,97.8 176.9,98.8 179.7,98.8 181.1,97.4
|
306 |
+
179.8,95.9 "/>
|
307 |
+
<path id="SVGCleanerId_0_3_" class="st14" d="M186.9,95.9h-1.4v1.2h1.5c0.4,0,0.7-0.2,0.7-0.6C187.6,96.1,187.3,95.9,186.9,95.9z"
|
308 |
+
/>
|
309 |
+
<path class="st15" d="M208.2,97.1V94h-0.8h-2.1c-0.6,0-1.1,0.1-1.4,0.4V94h-3.2c-0.5,0-1.1,0.1-1.4,0.4V94h-5.6v0.4
|
310 |
+
c-0.4-0.3-1.2-0.4-1.5-0.4h-3.7v0.4c-0.3-0.3-1.2-0.4-1.6-0.4h-4.1l-1,1l-0.9-1h-6.2v6.8h6.1l1-1l0.9,1h3.7v-1.6h0.5
|
311 |
+
c0.5,0,1.1,0,1.6-0.2v1.9h3.1V99h0.1c0.2,0,0.2,0,0.2,0.2v1.6h9.4c0.6,0,1.2-0.1,1.6-0.4v0.4h3c0.6,0,1.2-0.1,1.7-0.3l0,0
|
312 |
+
c0.7-0.4,1.1-1.2,1.1-2.1C208.6,97.9,208.5,97.4,208.2,97.1z M186.9,98.2h-1.4v1.7h-2.2l-1.4-1.6l-1.4,1.6h-4.6V95h4.6l1.4,1.6
|
313 |
+
l1.4-1.6h3.7c0.9,0,1.9,0.3,1.9,1.6C188.9,97.9,187.9,98.2,186.9,98.2z M193.8,97.9c0.1,0.2,0.2,0.5,0.2,0.9v1h-1.2v-0.6
|
314 |
+
c0-0.3,0-0.8-0.2-1c-0.1-0.2-0.4-0.2-0.8-0.2h-1.2v1.8h-1.2v-4.9h2.6c0.6,0,1,0,1.4,0.2c0.3,0.2,0.6,0.6,0.6,1.1
|
315 |
+
c0,0.8-0.5,1.2-0.8,1.3C193.5,97.6,193.7,97.8,193.8,97.9z M198.5,95.9h-2.7v0.9h2.6v1h-2.6v1h2.7v1h-3.9v-4.9h3.9V95.9z
|
316 |
+
M201.4,99.8h-2.2v-1h2.2c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.4-0.1
|
317 |
+
c-1.1-0.1-2.4,0-2.4-1.5c0-0.7,0.4-1.4,1.7-1.4h2.3V96h-2.1c-0.2,0-0.3,0-0.5,0.1c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.2,0.1,0.3,0.3,0.3
|
318 |
+
c0.1,0.1,0.3,0.1,0.4,0.1h0.6c0.6,0,1,0.1,1.3,0.4c0.2,0.2,0.3,0.6,0.3,1C203.2,99.3,202.6,99.8,201.4,99.8z M207.3,99.3
|
319 |
+
c-0.3,0.3-0.8,0.5-1.4,0.5h-2.2v-1h2.2c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.3-0.1-0.3
|
320 |
+
c-0.1-0.1-0.2-0.1-0.4-0.1c-1.1-0.1-2.4,0-2.4-1.5c0-0.7,0.4-1.4,1.7-1.4h2.3V96h-2.1c-0.2,0-0.3,0-0.5,0.1s-0.1,0.2-0.1,0.3
|
321 |
+
c0,0.2,0.1,0.3,0.3,0.3c0.1,0.1,0.3,0.1,0.4,0.1h0.6c0.6,0,1,0.1,1.3,0.4c0.1,0,0.1,0.1,0.1,0.1c0.2,0.3,0.3,0.6,0.3,1
|
322 |
+
C207.8,98.7,207.6,99,207.3,99.3z"/>
|
323 |
+
<path id="SVGCleanerId_1_3_" class="st14" d="M192.5,96.1c-0.1-0.1-0.3-0.1-0.6-0.1h-1.4v1.1h1.4c0.2,0,0.4,0,0.6-0.1
|
324 |
+
s0.2-0.3,0.2-0.5C192.8,96.3,192.7,96.1,192.5,96.1z"/>
|
325 |
+
<g>
|
326 |
+
<path class="st14" d="M187.7,87.8c-0.1-0.1-0.3-0.1-0.6-0.1h-1.4v1.1h1.4c0.2,0,0.4,0,0.6-0.1s0.2-0.3,0.2-0.5
|
327 |
+
C188,88,187.8,87.8,187.7,87.8z"/>
|
328 |
+
<polygon class="st14" points="196,89.4 197.6,89.4 196.9,87.5 "/>
|
329 |
+
<polygon class="st14" points="184.3,99.4 184.3,95.4 182.5,97.4 "/>
|
330 |
+
</g>
|
331 |
+
<g>
|
332 |
+
<path id="SVGCleanerId_0_2_" class="st14" d="M186.9,95.9h-1.4v1.2h1.5c0.4,0,0.7-0.2,0.7-0.6C187.6,96.1,187.3,95.9,186.9,95.9z
|
333 |
+
"/>
|
334 |
+
</g>
|
335 |
+
<g>
|
336 |
+
<path id="SVGCleanerId_1_2_" class="st14" d="M192.5,96.1c-0.1-0.1-0.3-0.1-0.6-0.1h-1.4v1.1h1.4c0.2,0,0.4,0,0.6-0.1
|
337 |
+
s0.2-0.3,0.2-0.5C192.8,96.3,192.7,96.1,192.5,96.1z"/>
|
338 |
+
</g>
|
339 |
+
<g>
|
340 |
+
<polygon class="st13" points="186.4,99.6 185.5,98.6 185.5,99.8 183.2,99.8 181.8,98.2 180.3,99.8 175.7,99.8 175.7,95 180.4,95
|
341 |
+
181.8,96.5 182.5,95.7 180.8,94 174.7,94 174.7,100.7 180.8,100.7 181.8,99.7 182.7,100.7 186.4,100.7 "/>
|
342 |
+
<polygon class="st13" points="179.3,92.5 178.4,91.5 178,91.5 178,91.1 176.9,90.1 176.2,91.5 175.3,91.5 173.6,87.7 173.6,91.5
|
343 |
+
171.3,91.5 170.8,90.5 168.4,90.5 168,91.5 166.7,91.5 168.8,86.7 170.5,86.7 172.4,91.3 172.4,86.7 173.5,86.7 172.5,85.7
|
344 |
+
171.5,85.7 171.5,86.5 171.1,85.7 168.1,85.7 166.7,88.9 165.1,92.5 166.7,92.5 168.7,92.5 169.1,91.4 170.1,91.4 170.6,92.5
|
345 |
+
174.4,92.5 174.4,91.6 174.8,92.5 176.8,92.5 177.1,91.6 177.1,92.5 "/>
|
346 |
+
<polygon class="st13" points="176.1,89.3 175,88.2 175.8,90 "/>
|
347 |
+
</g>
|
348 |
+
<g>
|
349 |
+
<path class="st14" d="M207.5,100.4c0.6-0.4,1-1.1,1.1-1.9l-1-1c0.1,0.2,0.1,0.4,0.1,0.7c0,0.4-0.1,0.8-0.4,1s-0.8,0.5-1.4,0.5
|
350 |
+
h-2.2v-1h2.2c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.4-0.1
|
351 |
+
c-1.1-0.1-2.4,0-2.4-1.5c0-0.7,0.4-1.3,1.4-1.4l-0.8-0.8c-0.1,0.1-0.2,0.1-0.3,0.1v-0.4h-3.2c-0.5,0-1.1,0.1-1.4,0.4v-0.4h-5.7
|
352 |
+
v0.4c-0.4-0.3-1.2-0.4-1.5-0.4h-3.7v0.4c-0.3-0.3-1.2-0.4-1.6-0.4h-4.1l-1,1l-0.9-1h-0.8l2.1,2.1l1-1.1h3.7
|
353 |
+
c0.9,0,1.9,0.3,1.9,1.6c0,1.4-1,1.7-2,1.7h-1.4v1l1,1v-1h0.3c0.5,0,1.1,0,1.6-0.2v1.9h3.1v-1.8h0.1c0.2,0,0.2,0,0.2,0.2v1.6h9.4
|
354 |
+
c0.6,0,1.2-0.1,1.6-0.4v0.4h3C206.4,100.7,207,100.7,207.5,100.4L207.5,100.4z M193.8,97.9c0.1,0.2,0.2,0.5,0.2,0.9v1h-1.2v-0.6
|
355 |
+
c0-0.3,0-0.8-0.2-1c-0.1-0.2-0.4-0.2-0.8-0.2h-1.2v1.8h-1.2v-4.9h2.6c0.6,0,1,0,1.4,0.2c0.3,0.2,0.6,0.6,0.6,1.1
|
356 |
+
c0,0.8-0.5,1.2-0.8,1.3C193.5,97.6,193.7,97.8,193.8,97.9z M198.5,95.9h-2.7v0.9h2.6v1h-2.6v1h2.7v1h-3.9v-4.9h3.9V95.9z
|
357 |
+
M201.4,99.8h-2.2v-1h2.2c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.4-0.1
|
358 |
+
c-1.1-0.1-2.4,0-2.4-1.5c0-0.7,0.4-1.4,1.7-1.4h2.3V96h-2.1c-0.2,0-0.3,0-0.5,0.1c-0.1,0.1-0.1,0.2-0.1,0.3
|
359 |
+
c0,0.2,0.1,0.3,0.3,0.3c0.1,0.1,0.3,0.1,0.4,0.1h0.6c0.6,0,1,0.1,1.3,0.4c0.2,0.2,0.3,0.6,0.3,1
|
360 |
+
C203.2,99.3,202.6,99.8,201.4,99.8z"/>
|
361 |
+
<path class="st14" d="M204.7,96.4c0,0.2,0.1,0.3,0.3,0.3c0.1,0.1,0.3,0.1,0.4,0.1h0.6c0.4,0,0.7,0.1,1,0.2l-1-1h-0.6
|
362 |
+
c-0.2,0-0.3,0-0.5,0.1C204.8,96.1,204.7,96.3,204.7,96.4z"/>
|
363 |
+
<polygon class="st14" points="202.3,92.3 202.4,92.5 202.5,92.5 "/>
|
364 |
+
<polygon class="st14" points="198.5,88.5 199.7,91.3 199.7,89.6 "/>
|
365 |
+
<path class="st14" d="M186.7,90.7h0.1c0.1,0,0.1,0,0.1,0.2v1.5h5v-0.4c0.4,0.2,1,0.4,1.9,0.4h2.1l0.4-1.1h1l0.4,1.1h4v-0.7l-1-1
|
366 |
+
v0.8h-2.3l-0.3-1.1h-2.4l-0.4,1.1h-1.3c-0.6,0-1.2-0.1-1.7-0.6c-0.4-0.4-0.6-1-0.6-1.9c0-0.7,0.1-1.4,0.6-1.9
|
367 |
+
c0.3-0.4,1-0.6,1.7-0.6h1.1v1H194c-0.4,0-0.6,0.1-0.9,0.3c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.6,0.1,0.9,0.3,1.2
|
368 |
+
c0.2,0.2,0.5,0.3,0.8,0.3h0.5l1.6-3.8h0.7l-1-1h-1.8c-0.8,0-1.4,0.1-1.9,0.4v-0.4h-3v0.4c-0.3-0.3-0.8-0.4-1.3-0.4h-11.1
|
369 |
+
l-0.8,1.7l-0.8-1.7h-3l1,1h1.4l1.2,2.6l0.4,0.4l1.2-3h1.9v4.9h-1.2v-3.8l-1.2,2.8l2,2h7.9L186.7,90.7z M189.9,86.7h1.2v4.9h-1.2
|
370 |
+
V86.7z M183.8,87.7h-2.7v0.9h2.6v1h-2.6v1h2.7v1H180v-4.9h3.9V87.7z M185.8,91.5h-1.2v-4.9h2.6c0.6,0,1,0,1.4,0.2
|
371 |
+
c0.3,0.2,0.6,0.6,0.6,1.1c0,0.8-0.5,1.2-0.8,1.3c0.3,0.1,0.5,0.3,0.6,0.4c0.1,0.3,0.2,0.5,0.2,0.9v1h-1.2v-0.6c0-0.3,0-0.7-0.2-1
|
372 |
+
c-0.1-0.1-0.3-0.1-0.7-0.1h-1.2V91.5L185.8,91.5z"/>
|
373 |
+
</g>
|
374 |
+
</g>
|
375 |
+
<g>
|
376 |
+
<path class="st16" d="M217.5,85c-1.8,0-3.1,1.1-3.1,3.1v5.7c0.1,0.7,0.9,1.2,1.7,1.2c0.9,0,1.6-0.7,1.6-1.5v-2.9h2.5v2.9
|
377 |
+
c0,1.6-2,2.4-3.5,2.4c-0.9,0-1.7-0.3-2.3-0.7v6.3h4c1.4,0,3-1.3,3-3V85L217.5,85L217.5,85z"/>
|
378 |
+
<path class="st17" d="M231.5,95h1.7c0.4,0,0.9-0.4,0.9-0.9s-0.4-0.9-0.9-0.9h-1.7V95z"/>
|
379 |
+
<path class="st17" d="M233.5,85c-1.8,0-3.1,1.1-3.1,3.1v2.6h4.7c0.7,0,1.2,0.6,1.2,1.2s-0.6,1.2-1.2,1.2c0.7,0,1.3,0.5,1.3,1.2
|
380 |
+
s-0.6,1.2-1.3,1.2h-4.7v6h4c1.4,0,3-1.3,3-3V85L233.5,85L233.5,85z"/>
|
381 |
+
<g>
|
382 |
+
<path class="st17" d="M234.1,92.1c0-0.4-0.4-0.9-0.9-0.9h-1.7v1.7h1.7C233.7,92.9,234.1,92.5,234.1,92.1z"/>
|
383 |
+
</g>
|
384 |
+
<path class="st18" d="M225.4,85c-1.8,0-3.1,1.1-3.1,3.1v3.2c0.4-0.4,1-0.6,1.6-0.6h4.2v0.9c-1-0.2-2-0.3-2.4-0.3
|
385 |
+
c-1,0-1.9,0.9-1.9,1.9s0.9,1.9,1.9,1.9c0.5,0,1.4-0.1,2.4-0.3v0.8h-4.2c-0.6,0-1.2-0.2-1.6-0.6v6.7h4c1.4,0,3-1.3,3-3V85L225.4,85
|
386 |
+
L225.4,85z"/>
|
387 |
+
</g>
|
388 |
+
<g>
|
389 |
+
<g>
|
390 |
+
<g>
|
391 |
+
<path class="st19" d="M97.6,86.4L95.4,100h3.5l2.2-13.7H97.6z M108.2,91.9c-1.2-0.6-2-1-2-1.6c0-0.6,0.6-1.1,2-1.1
|
392 |
+
c1.1,0,2,0.2,2.6,0.5l0.3,0.1l0.5-2.9c-0.7-0.3-1.8-0.6-3.1-0.6c-3.5,0-5.9,1.8-5.9,4.4c0,1.9,1.7,3,3.1,3.6
|
393 |
+
c1.4,0.6,1.8,1.1,1.8,1.6c0,0.9-1.1,1.3-2.1,1.3c-1.4,0-2.2-0.2-3.3-0.7l-0.5-0.2l-0.5,3c0.8,0.4,2.3,0.7,3.9,0.7
|
394 |
+
c3.7,0,6.1-1.8,6.1-4.5C111.2,94,110.2,92.9,108.2,91.9z M120.6,86.4h-2.7c-0.8,0-1.5,0.2-1.8,1.1l-5.2,12.5h3.7l1-2.7h4.1
|
395 |
+
l0.5,2.7h3.2L120.6,86.4z M116.6,94.6c0.1,0,1.4-4.4,1.4-4.4l1.1,4.4C119.1,94.6,117.3,94.6,116.6,94.6z M92.5,86.4l-3.4,9.3
|
396 |
+
l-0.4-1.8c-0.6-2.1-2.6-4.4-4.8-5.5L87,100h3.7l5.5-13.6L92.5,86.4L92.5,86.4z"/>
|
397 |
+
</g>
|
398 |
+
</g>
|
399 |
+
<path class="st20" d="M87.5,88.1c-0.3-1-1.1-1.7-2.3-1.8h-5.4l-0.1,0.3c4.2,1,7.8,4.3,9,7.3L87.5,88.1z"/>
|
400 |
+
</g>
|
401 |
+
</g>
|
402 |
+
</svg>
|
js/freemius-pricing/c03f665db27af43971565560adfba594.png
ADDED
Binary file
|
js/freemius-pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png
ADDED
Binary file
|
js/freemius-pricing/dd89563360f0272635c8f0ab7d7f1402.png
ADDED
Binary file
|
js/freemius-pricing/e366d70661d8ad2493bd6afbd779f125.png
ADDED
Binary file
|
js/freemius-pricing/f3aac72a8e63997d6bb888f816457e9b.png
ADDED
Binary file
|
js/freemius-pricing/f928f1be99776af83e8e6be4baf8ffe7.svg
ADDED
@@ -0,0 +1,227 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
+
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4 |
+
viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve">
|
5 |
+
<style type="text/css">
|
6 |
+
.st0{opacity:0.25;}
|
7 |
+
.st1{fill:#1FBC99;}
|
8 |
+
</style>
|
9 |
+
<g class="st0">
|
10 |
+
<g>
|
11 |
+
<path class="st1" d="M934.5,517.1c5.6-1.8,11.9,0.4,15.2,5.4c0.4-7.9,0.6-15.9,0.6-23.9l-20.8,6c-0.1,5.7-0.2,11.4-0.5,17.1
|
12 |
+
C930.2,519.6,931.8,518,934.5,517.1z"/>
|
13 |
+
<polygon class="st1" points="912.1,649.8 914,648.9 912,649.7 "/>
|
14 |
+
<path class="st1" d="M367.4,908.8c9.3,4.4,17.9-0.1,26.7-1c3.8-0.4,7.5-0.8,11.3-1.2c2.9-0.3,5.8-0.5,8.7-0.8
|
15 |
+
c-44.2-10.7-86.3-28.6-124.5-52.6l-1.6,4.5c0,0-0.1,0-0.1,0c-1-0.4-1.8-1-2.5-1.9l2.2-1.9l1.3-1.1c-50.6-32-94.5-75-127.8-126.7
|
16 |
+
l-20.8,6C193,816.6,272.6,879.4,364,912.4C365.1,911.2,366.2,910,367.4,908.8z"/>
|
17 |
+
<path class="st1" d="M754.9,859.2c-0.4-2,0.1-4.3,0.4-8.3c3.6,2.4,6.1,3.3,7.3,5c0.8,1,1.1,2.1,1,3.1
|
18 |
+
c39.3-27.6,73.4-61.1,101.3-99.1c-3.3-0.3-6.6-2.1-7.6-4.7c-1.4-3.5,1.1-9.2,4.7-10.6c0,0,0,0,0,0c-0.4-1.2,0-2.4,1.2-3.1
|
19 |
+
c1.3-0.8,3-0.4,3.7,0.8c0.4,0.6,0.4,1.5,0.1,2.3c2.2,0.7,4.3,2.3,5.2,4.4c0.1,0.1,0.1,0.2,0.2,0.4
|
20 |
+
c37.1-53.7,62.1-115.5,72.5-180.6c-0.7-0.3-1.3-0.5-1.7-1c-0.8-0.9-0.4-2,0.6-2.6c0.5-0.3,1.1-0.3,1.6-0.2
|
21 |
+
c0.4-2.7,0.8-5.4,1.1-8.1c-0.5,0.7-1.3,1.2-2.1,1.6c-2.4,1.1-7.2-0.8-8.5-3.5c-1.3-2.6,0.3-6.2,3.3-7.5c3.1-1.3,6.3-0.3,7.8,2.6
|
22 |
+
c0.1,0.2,0.2,0.3,0.2,0.5c0.5-4.6,1-9.2,1.4-13.8c-0.6,0.5-1.5,0.8-2.6,0.8c-3.3,2.7-7.3,1.9-10.8,2.4c-0.8,0.1-1.8-0.4-2.6-0.8
|
23 |
+
c-1.7-0.9-3.4-2.9-4.6-5.1c-8.1,99-51.5,191.8-121,261.3c0,0,0,0,0,0.1l-0.1,0c-48.3,48.3-109.2,85.5-179.5,105.8
|
24 |
+
c-68.4,19.7-137.7,21.1-202.7,7.2c-2.5,2.3-5.7,2.7-9,2.1c-4.9-0.9-9.2,0.1-13.4,2c-5.8,2.5-7.8,4.9-7.2,10
|
25 |
+
c75.4,20.9,157.4,21.9,238.1-1.3c45.6-13.1,87.5-33.1,124.7-58.3C756.5,862.3,755.3,861,754.9,859.2z M939.8,590.7
|
26 |
+
c-1.6-0.3-2.5-0.5-3.6-0.8C938,588.5,938,588.5,939.8,590.7z M929.9,614.7c0.4,0.1,0.9,0.1,1.2,0.3c0.2,0.2,0.1,0.7,0.1,1.4
|
27 |
+
c-0.7-0.3-1.3-0.3-1.4-0.6C929.7,615.5,929.9,615.1,929.9,614.7z M909.1,644.6l0.3-0.2l0.4-0.1c2.5-0.6,4.8,0.2,6.2,2.2
|
28 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0.1c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0v0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
29 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0.1v0
|
30 |
+
c0,0.1,0.1,0.1,0.1,0.2c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0.1,0,0.1l0.1,0.2l-2.8,1.2l0.1,0l-2,0.9l0,0
|
31 |
+
c-0.2,0.1-0.3,0.3-0.4,0.3l-0.1-0.1l-0.1,0c0,0,0.1,0,0.1,0.1c0,0-0.1,0-0.2,0l0,0l-0.1-0.4l-4.1-3.5
|
32 |
+
C907.7,645.6,908.3,645,909.1,644.6z M791.2,818.1c0.8-0.6,2.7-0.1,3.8,0.5c0.5,0.3,0.7,2.7,0.1,3.1c-0.9,0.7-2.4,0.5-4.5,0.9
|
33 |
+
C790.8,820.5,790.5,818.6,791.2,818.1z"/>
|
34 |
+
</g>
|
35 |
+
<g>
|
36 |
+
<path class="st1" d="M450.7,717.7c-0.4,0.1-0.7,0.7-1,1.1c0.6,0.4,1.2,0.7,1.9,1.1c0.2-0.5,0.4-1,0.6-1.4
|
37 |
+
C451.6,718.2,451,717.7,450.7,717.7z"/>
|
38 |
+
<path class="st1" d="M515.3,737.8L490.2,726l-1.7-27.7l-19,20.2l-5.9-1.5c3.3,8,1,16.8-5.1,19c-1,0.4-2,0.6-3.1,0.7l-13.2,20.7
|
39 |
+
c0.1,0.3,0.1,0.7,0.1,1c0,0,0,0,0,0c0,0,0,0.1,0,0.1l0,0l-0.7-0.1l-0.5,0.8l27.3-5.2l17.6,21.4l3.5-27.5L515.3,737.8z"/>
|
40 |
+
</g>
|
41 |
+
<g>
|
42 |
+
<polygon class="st1" points="570.2,694.7 570.2,694.7 568.1,695.7 "/>
|
43 |
+
<path class="st1" d="M612.1,728.8l4.5-1.1c0,0,0,0,0,0c0,0,0,0.1,0,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0.1,0,0.1l16.8-6.6
|
44 |
+
l-34.5-16.2l-1.3-20.9c-0.6-0.2-1.2-0.4-1.6-0.7c-2.3-1.6-2.4-4-0.5-5.7c0.5-0.5,1.1-0.7,1.6-0.8l-0.6-9.9l-26,27.6
|
45 |
+
c0.1,0.1,0.1,0.3,0.1,0.4c0,0,0,0.1,0,0.1c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0.1,0,0.1v0c0.2,0.8,0.1,1.7-0.2,2.5
|
46 |
+
l-3.8-1.6l-0.6,0.2l-1,0.5l0.7-0.3l-0.7,0.3l0.7-0.3l0,0l0,0l0.3-0.1l0,0l0.5-0.2l0,0l0,0l1.2-0.5l2.1-0.9l-36.3-9.4l18.3,33.4
|
47 |
+
l-20.5,32.1l37.4-7.1l24.2,29.4l4.8-37.8l14.4-5.7L612.1,728.8z M588.4,715.2l-4.6-3.8c0,0,0,0.1-0.1,0.1
|
48 |
+
c-0.1,0.1-0.1,0.3-0.1,0.3c0,0,0-0.2-0.1-0.5l5.7-1.3l0,0h0c0.1,0.3,0.1,0.7,0.2,1C589.7,713.1,589.1,714.4,588.4,715.2z
|
49 |
+
M593.2,730.4c-0.2,0.1-1.4-0.4-1.5-0.7c-0.2-0.7,0.1-1.5,0.2-2.7c1.2,0.7,1.9,1.1,2.6,1.6C594.1,729.2,593.8,729.9,593.2,730.4z"
|
50 |
+
/>
|
51 |
+
</g>
|
52 |
+
<path class="st1" d="M691.1,639.9l-19,20.2l-26.8-7l13.4,24.3l-14.9,23.4l27.3-5.2l0.4,0.5c0.2-1.6,0.7-3.5,1-6
|
53 |
+
c3.9,1.8,6.8,2.2,8.4,3.9c2.2,2.3,0.8,6.4-2.1,7.6c-0.8,0.3-1.5,0.5-2.2,0.5l12.3,14.9l3.5-27.5l25.8-10.1l-25.1-11.8L691.1,639.9z
|
54 |
+
M685.1,654.4l0.4,0.5l-0.2-0.2l0.2,0.2L685.1,654.4l-0.1,0l0.5,0.5c0,0-0.1,0.1-0.1,0.1c0,0,0,0,0,0l-0.6-0.5l-0.3,0.1l-0.2-0.5
|
55 |
+
l-3.4-2.9c0.2-0.2,0.4-0.4,0.6-0.6c0,0,0.1-0.1,0.1-0.1l0.6-0.6l0.5-0.2c2.8-1,5.3,0.1,6.5,2.6c0,0,0,0,0,0c0,0,0,0,0,0
|
56 |
+
c0.1,0.1,0.1,0.3,0.2,0.5L685.1,654.4z"/>
|
57 |
+
<path class="st1" d="M75.3,605.9l6.9,23.9l18-5.2l9.6,33.4c-4.2,2.4-8.5,4.3-12.9,5.5c-8.3,2.4-15.9-0.1-22.7-7.6
|
58 |
+
c-6.8-7.4-12.6-19.3-17.3-35.7c-4.6-15.9-5.2-29.3-1.8-40.2c3.4-10.9,10.2-17.9,20.5-20.8c7.2-2.1,15.6-1.9,25.2,0.5l2.2-24.6
|
59 |
+
c-12.3-2.9-24.2-2.7-35.8,0.6C48.3,541.2,35.6,552,29,568.3c-6.6,16.2-6.6,36,0.1,59.4c7,24.2,16.9,41.5,29.7,51.7
|
60 |
+
c12.8,10.2,27.7,12.9,44.6,8.1c14.2-4.1,26.8-10.6,37.9-19.7l-21.5-74.7L75.3,605.9z M51.9,563.3c-3.6-2.2-6.2-3.1-7.6-4.9
|
61 |
+
c-0.8-1,0.1-4.4,1.2-5.1c2.7-1.6,5.6-0.2,6.8,2.6C53,557.4,52.2,559.5,51.9,563.3z M108.3,669.5c-0.1-0.4-0.2-0.8-0.3-1.2
|
62 |
+
c0-0.1,0.5-0.3,0.6-0.2c0.3,0.3,0.6,0.6,0.8,1C109,669.2,108.7,669.3,108.3,669.5z"/>
|
63 |
+
<path class="st1" d="M213.9,495.8l-26.9,7.7l27.8,96.4c2.5,8.7,2.9,15.9,1.1,21.5c-1.8,5.6-5.5,9.2-11.2,10.9
|
64 |
+
c-8.4,2.4-15.2-0.3-20.4-8.3c-3.6,2.8-7.5,4.6-12.5,5c-5.3,0.4-7.5-2-5.7-6.8c1-2.6,3-5.7,5.4-6.6c2.6-1,5.4-1.3,8.2-1.2
|
65 |
+
c-0.5-1.4-1-3-1.5-4.6l-19.2-66.6c-1.8-0.4-3-0.4-3.9-1c-0.4-0.3-0.2-2.4,0.2-2.5c0.8-0.2,1.8-0.2,2.7,0l-7.4-25.7l-26.9,7.7
|
66 |
+
l15.3,53.3c1.2,0.6,2.1,1.2,2.7,2c1.8,2.1,1.6,4.6-0.4,6.1l9.3,32.4c5.1,17.7,12.7,30,22.9,36.9c10.2,6.9,22.5,8.2,37,4.1
|
67 |
+
c14.8-4.3,24.8-12.1,30-23.5c5.2-11.4,5.3-25.7,0.3-43.1L213.9,495.8z M208.1,543.9l-2.7,1c-0.4-1.1-0.7-1.4-0.7-1.4l2.6-5.3
|
68 |
+
c2.1,1.1,3,3.2,3.6,4.7L208.1,543.9z"/>
|
69 |
+
<path class="st1" d="M331.9,579.7l18.9,34.3l27.2-7.8l-78.2-135.7L263,481l3.2,83.2c0,0,0.1-0.1,0.1-0.1c2.6-2.9,8.6-2.7,11.9,0.3
|
70 |
+
c3.1,2.9,3.5,9.1,0.7,11.7c-2.8,2.6-7.9,2.1-11.2-1.1c-0.4-0.4-0.8-0.8-1.1-1.3l2.5,63.8l27.1-7.8l-2.2-39.1L331.9,579.7z
|
71 |
+
M343.3,593.3l0.2-0.1c0.7-0.1,1.5,0,2.2,0.3c0,0,0,0,0,0l0.4,0.2l0.2,0.2l-2,3.4l0.7,1.8l-0.5-1l0.1,0.3l0.2,0.8l-0.5-1.5l0-0.1
|
72 |
+
l0-0.1l0,0.1l0,0l-0.2,0.4l-0.6,1.1l0.8-1.6l0,0l-1.8-3.8L343.3,593.3z M320.6,529.5c0.9-0.1,1.8-0.2,2.8-0.3
|
73 |
+
c2.6-0.1,4.7,0.9,5.7,3.3c0.7,1.7,1.8,2.9,3.2,4.1c0.9,0.8,1.7,2,2.1,3.2c1.2,3.3-0.4,6.8-3.4,7.7c-4,1.3-7.9-0.3-9.3-3.9
|
74 |
+
c-0.5-1.2-0.9-2.4-1.4-3.8c-3.3,0.5-3.3,0.4-3.7-2.2c-0.1-1-0.3-2-0.3-3.1C316.2,531.6,317.7,529.9,320.6,529.5z M283.6,623.2
|
75 |
+
l-2,1.4l0,0l-0.4,0.3l0.4-0.3l-1.1-2.1c0,0,0,0,0,0v0c0,0,0,0,0,0l-1.4-2.7c2.4-1.3,5.3-0.5,6.8,1.7L283.6,623.2z M289.2,515
|
76 |
+
c-0.7-7.3-1.4-13.9-2.1-19.8c0.9,2.1,2.6,5.6,5.1,10.7c0.4,0.1,0.8,0.3,1.1,0.5c0.4,0.2,0.6,1.6,0.4,2.5c0.3,0.7,0.7,1.4,1.1,2.1
|
77 |
+
c4,7.8,6.5,12.7,7.6,14.6l5.8,10.4c0.2,0,0.5,0.1,0.7,0.1c-0.1,0.3-0.1,0.6-0.2,0.8l11.2,20.2l-22.3,6.4l1,0.3l0,0.2
|
78 |
+
c-0.2,0.6-0.4,1.2-0.7,1.6c-0.1,0.2-0.2,0.3-0.2,0.5l0,0l-3.6-1.5l-1.6,0.5c0-0.4,0-0.7-0.1-1.1l-0.2-0.1c0-0.1,0.1-0.3,0.2-0.4
|
79 |
+
C290.9,538.3,289.8,522.1,289.2,515z M296.6,579.1c2,4.2,0.5,6.5-3.7,9C291.6,583,292.7,580.6,296.6,579.1z"/>
|
80 |
+
<path class="st1" d="M461.4,557L461.4,557c0-0.1,0-0.1-0.1-0.2c-0.1-0.2-0.1-0.3-0.2-0.3c0,0,0-0.1,0-0.1l1.5-1.4l-28.4-34.2
|
81 |
+
c10.3-10.9,12.8-25.5,7.5-43.9c-4.2-14.6-10.9-24.4-20.1-29.5c-9.2-5-21.3-5.4-36.3-1.1l-35.4,10.2l7.1,24.5h0
|
82 |
+
c0.1-0.1,0.2-0.2,0.3-0.2c0.1-0.1,0.2-0.2,0.4-0.2c1.5-0.7,3.6-0.1,4.2,1.2c0.6,1.3,0.1,3.1-1.2,3.8c-0.2,0.1-0.4,0.2-0.6,0.2
|
83 |
+
c0,0-0.1,0-0.1,0c-0.2,0-0.3,0.1-0.5,0.1c0,0,0,0,0,0c-0.4,0-0.8-0.1-1.2-0.2l5.9,20.4l2.2-0.7c0.1,0.3,0.2,0.6,0.2,0.9
|
84 |
+
c0,0.1,0,0.2,0,0.3c0,0.2,0.1,0.4,0.1,0.6c0,0.1,0,0.3,0,0.4c0,0.1,0,0.3,0,0.4c0,0.1,0,0.3,0,0.4c0,0.1,0,0.2-0.1,0.3
|
85 |
+
c0,0.2-0.1,0.3-0.1,0.5c0,0.1,0,0.1-0.1,0.2c-0.2,0.6-0.5,1.2-0.9,1.7c0,0,0,0,0,0l7.9,27.4c0,0,0,0,0,0c0.2,0,0.5,0.1,0.8,0.1
|
86 |
+
c0,0.1-0.1,0.3-0.1,0.4c0,0,0,0.1,0,0.1c0,0,0,0,0,0.1c-0.1,0.4-0.2,0.6-0.3,0.8l17.9,62.2l27.1-7.8l-16.3-56.6l9.7-2.8l39.3,50
|
87 |
+
l29-8.3l-16.9-20.3L461.4,557z M367.6,465.7c-0.1-0.2-0.1-0.3-0.2-0.5c1.1-0.5,2.2-1,3.3-1.5c0.1,0.3,0.2,0.6,0.4,0.9
|
88 |
+
C369.9,465,368.8,465.4,367.6,465.7z M388,556.7c-0.2,0.1-0.6-0.2-0.8-0.3c0.1-0.3,0.2-0.7,0.4-0.8c0.2-0.1,0.6,0.1,1,0.3
|
89 |
+
C388.3,556.3,388.2,556.7,388,556.7z M397,585l0,0.4c0,0.2,0,0.3,0,0.5l0,5l-4.7-2.7l-1.1-0.9l0-1.5c0-0.3,0-0.7,0.1-1l0-0.3
|
90 |
+
c0,0,0,0,0-0.1c0,0,0-0.1,0-0.1c0,0,0,0,0,0v0l3.8-0.3l0.5,0l1.5-0.1c0,0.3,0,0.6,0,0.9C397,584.8,397,584.9,397,585z M415.1,503
|
91 |
+
c-1.7,4.4-5.8,7.5-12.2,9.4l-7,2l-11-38.1l-2,0.7l0.3,0.5l-0.6,0.3l-0.2-0.6l-0.3,0.1l-0.7-2.9l-1.1-2.1l0.5-0.3l0.5-0.1
|
92 |
+
c0.3,0,0.6-0.1,0.8,0c0.1,0,0.2,0,0.3,0c0.1,0,0.3,0,0.4,0c0.3,0,0.7,0.1,1,0.2c0,0,0,0,0,0l6.6-1.9c6.2-1.8,11.2-1.5,15,0.8
|
93 |
+
c3.9,2.3,6.9,7.2,9,14.6C416.6,492.8,416.8,498.6,415.1,503z M433.2,476.7c-0.5,0.3-1.5-0.3-2.3-0.6c0.2-0.7,0.5-1.5,0.8-2.6
|
94 |
+
c1,0.5,2.2,0.8,2.2,1.1C434,475.3,433.7,476.5,433.2,476.7z M460.6,577.8l0.2,0.8l-0.1-0.4l0.1,0.4l-0.2-0.7l0,0L460.6,577.8
|
95 |
+
L460.6,577.8L460.6,577.8l0.1,0.8L460.6,577.8l0.1,0.8l-0.2-1.1l-0.5-1.8l-0.8-2.9l0.9,2.9l-0.8-2.9c0.1,0,0.2-0.1,0.3-0.1
|
96 |
+
c0.1,0,0.2-0.1,0.4-0.1l0.4,3l-0.3-3c1.3-0.1,2.6,0.3,3.6,1.3l-3.1,3.6L460.6,577.8z"/>
|
97 |
+
<path class="st1" d="M506.8,529.2l37.9-10.9l18.9,34.3l27.2-7.8l-56.1-97.3l-1.6,0.3l0-0.1c-0.1-0.7-0.1-1.3-0.1-1.8
|
98 |
+
c0-0.2,0-0.3,0-0.5l-0.1-1l-20.4-35.4l-36.7,10.6l0.8,20c0.3,0,0.5,0.1,0.9,0.2c-0.3,0.7-0.4,1.3-0.6,1.4c-0.1,0-0.1,0-0.2,0
|
99 |
+
l1.1,27.9l2,0.4c-0.2,1.4-0.9,2.6-1.8,3.5l4,103.3l27.1-7.8L506.8,529.2z M526.4,522.7c-0.2,0-0.5,0-0.6-0.1c-0.1-0.1,0-0.4,0-0.6
|
100 |
+
c0.2,0,0.5,0,0.6,0.1C526.5,522.2,526.4,522.5,526.4,522.7z M541.7,492c-0.2-0.3-0.4-0.7-0.6-1c0.1,0,0.2-0.1,0.2-0.1
|
101 |
+
c0.3,0.3,0.5,0.6,0.8,0.9C541.9,491.8,541.8,491.9,541.7,492z M549.5,490.8c1.4-0.7,3.8,0.1,4.6,1.5c0.7,1.3,0,3.4-1.4,4.1
|
102 |
+
c-1.4,0.7-3.6,0.1-4.4-1.1C547.5,494,548.2,491.5,549.5,490.8z M539.3,479.9c0.1-0.1,0.1-0.2,0.2-0.4c0,0,0-0.1,0.1-0.1
|
103 |
+
c0.1-0.1,0.2-0.3,0.2-0.4c0,0,0,0,0,0l5.4,2.5c0,0,0,0,0,0l0,0c-0.1,0.2-0.2,0.4-0.3,0.6c-0.1,0.1-0.1,0.2-0.2,0.3l-0.2,0.3
|
104 |
+
l-2.6-1.4L539.3,479.9L539.3,479.9z M524.3,439.5c0.6-0.4,1.8-0.2,2.7,0c0.3,0.1,0.6,1.6,0.3,1.9c-0.5,0.6-1.5,0.7-3.1,1.4
|
105 |
+
C524.2,441.1,523.9,439.8,524.3,439.5z M517.7,458.9c1.8-3.1,4.7-4.4,8.3-4.3c3.3,0.1,5.3,2.4,6.9,4.8c1.3,1.9,0.4,3.9,0.1,6.1
|
106 |
+
c-2.2,0-3.8,0.3-5.3,2.2c-1.8,2.2-6.2,1.8-8.3,0C517.2,465.8,516.3,461.3,517.7,458.9z M484.4,473.7c-0.2-0.1-0.4-0.3-0.5-0.4
|
107 |
+
c-0.1-0.1,0.1-0.3,0.2-0.5c0.3,0.2,0.5,0.4,0.8,0.6C484.7,473.6,484.5,473.8,484.4,473.7z M492.7,472c-1.5,0.9-4,0.3-4.5-1.2
|
108 |
+
c-0.3-0.8,0.3-1.7,0.3-2.2c2.1-1.1,4.5-0.6,5.1,0.8C494.2,470.7,493.7,471.5,492.7,472z M505.3,503.7c-1.5-26.1-2.6-42.8-3.2-50
|
109 |
+
c-0.7-7.3-1.4-13.9-2.1-19.8c1.1,2.7,3.7,7.9,7.7,15.7c4,7.8,6.5,12.7,7.6,14.6l5.5,9.9c1-0.1,2,0.3,2.3,1.1
|
110 |
+
c0.2,0.5-0.2,1.1-0.3,1.5c-0.1,0.1-0.3,0.2-0.5,0.2l10.5,18.9l-21.2,6.1c0.7,0.2,1.3,0.4,1.9,0.8c0,0,0,0,0,0l0,0
|
111 |
+
c1.1,0.7,1.8,1.8,2.1,3.2c0,0,0,0,0,0c0,0,0,0,0,0c0,0.1,0,0.2,0.1,0.3c0,0.3,0.1,0.5,0.1,0.8l-2.9,0.1l-1,0
|
112 |
+
c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.3,0.3-0.4,0.4l-1.1-0.6l-0.2,0l0,0l-0.1,0l0,0l0.1,0v-0.1l-3.9-2.3c0,0,0,0,0-0.1
|
113 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0.1-0.2,0.3-0.4,0.4-0.6c0,0,0,0,0,0l0,0c0.2-0.3,0.5-0.6,0.7-0.8c0.1-0.1,0.1-0.1,0.2-0.2L505.3,503.7z"
|
114 |
+
/>
|
115 |
+
<path class="st1" d="M671.8,476.8l-1.1,0.3l-74.7-91.5l-33.3,9.6l41.9,145.6l14.4-4.1c0.4-3.8,3.2-5.3,8.3-6.2
|
116 |
+
c-0.2,1.6-0.5,3-1,4.1l3.4-1L606.9,454c-2.7-9.2-6-17.6-9.9-25.2l1.3-0.4l75.4,92.5l11.4-3.3l-0.5-1.5c0.1,0,0.1,0,0.2-0.1
|
117 |
+
c0.2-0.1,0.2-0.5,0.1-0.8c-0.1-0.1-0.1-0.2-0.2-0.2c0,0,0,0,0,0l2.9-5.1c1.1,0.7,2,1.7,2.6,3.1l0.1,0.3l0.1,0.3
|
118 |
+
c0.2,0.8,0.3,1.6,0.2,2.3l16-4.6l-11.6-40.2c-0.6,1.1-1.6,1.9-2.9,2.3h0c0,0-0.1,0-0.2,0c-0.1,0-0.2,0-0.3,0.1l-1-4.9l-0.2-1l0,0
|
119 |
+
c-0.2,0-0.3,0.1-0.4,0.2c0,0,0,0-0.1,0c-0.1,0.1-0.1,0.1-0.1,0.2c0,0,0-0.1,0-0.2l0.2-13.4l-25.6-88.7l-24.9,7.2l22.9,79.5
|
120 |
+
C665.6,462.1,668.6,470.2,671.8,476.8z M593.5,469.2c-0.2-0.1-0.5-0.1-0.6-0.2c-0.1-0.1,0-0.4,0-0.6c0.2,0,0.4,0,0.6-0.1
|
121 |
+
C593.5,468.6,593.5,468.9,593.5,469.2z M600.9,412.4l-0.8-2.9l-0.8-2.9l0.8,2.9l0.8,2.9L600.9,412.4z M604.6,409.2L604.6,409.2
|
122 |
+
C604.6,409.2,604.6,409.2,604.6,409.2c-0.7,1.6-1.9,2.7-3.6,3.2l-0.9-2.9l-0.8-2.9c0,0,0-0.2,0-0.5c-0.2-0.9-0.6-1.2-0.9-1.4
|
123 |
+
c-0.1,0-0.2-0.1-0.2-0.1l1.7-5.7c0,0,0,0,0.1,0c2.6,0.9,4.5,3.1,5.2,6.2l0.1,0.5C605.3,406.9,605.1,408.1,604.6,409.2z M624,439.8
|
124 |
+
c-2.9,1.3-7-0.3-8.6-3.3c-1.3-2.5,0.2-7,2.9-8.2c3.1-1.4,8.3,0.8,9.9,4.2C628.9,434.2,626.4,438.8,624,439.8z M647.4,473.3
|
125 |
+
c-0.5,0.7-1.9,1.2-2.6,0.9c-2.7-0.9-5.2-2-6.2-5.4c1-0.7,1.9-1.5,3-1.9c1.5-0.6,2.9-0.4,4,1.1c0.6,0.8,1.4,1.6,1.8,2.6
|
126 |
+
C647.6,471.4,647.8,472.7,647.4,473.3z M649.3,467.9c-0.2,0-0.5,0-0.6-0.1c-0.1-0.1,0-0.4,0-0.6c0.2,0,0.4,0,0.6,0.1
|
127 |
+
C649.3,467.6,649.3,467.8,649.3,467.9z M656.6,464.8C656.6,464.8,656.6,464.8,656.6,464.8L656.6,464.8
|
128 |
+
C656.6,464.9,656.6,464.9,656.6,464.8c-0.1,0.3-0.1,0.4-0.2,0.6l-1.8-0.8c1.2,2,0.9,2.3-1.7,2.8c0.4-0.9,0.8-1.9,1.2-3l-3.2-1.3
|
129 |
+
l0,0c0-0.1,0-0.2-0.1-0.5c-1.4-2.1-2.2-2-2.7-1.9c-0.2,0.1-0.4,0.1-0.5,0.2l-1.2-2.7l-1.2-2.7c0.4-0.2,0.9-0.4,1.4-0.5c0,0,0,0,0,0
|
130 |
+
c1.5-0.4,3.5-0.5,5.5,0.7c0,0,0,0,0,0c0,0,0,0,0,0c1.3,0.8,2.6,2,3.9,4l0.2,0.3l0.1,0.4C656.9,462.1,657,463.5,656.6,464.8z"/>
|
131 |
+
<path class="st1" d="M754.7,497.6l-0.1-2.2c0.9,0,2,0.1,3.2,0.6c0,0,0,0,0,0c0,0,0,0,0,0c0.3,0.1,0.5,0.3,0.8,0.4l19.5-5.6
|
132 |
+
L743,369.1l18-5.2c-3.3,0.2-6.5,0.5-9.7,0.7c-0.1,0-0.2,0-0.3,0c-0.5,0-1,0.1-1.5,0.1c-0.2,0-0.3,0-0.5,0c-0.5,0-0.9,0-1.4,0
|
133 |
+
c-0.2,0-0.4,0-0.6,0c-0.7,0-1.3,0-2,0c-3.1,0-6.3-0.9-7.1-4.8c-0.6-3.2,1.8-6.4,5.9-7.5c3.9-1,7.8-1.7,12.3-2.7
|
134 |
+
c0,0.3,0.1,0.6,0.2,0.9c0,0.1,0,0.1,0.1,0.2c0.1,0.2,0.1,0.5,0.2,0.7c0,0,0,0,0,0c1.7,3.9,6.5,6.7,4.4,12.3c0,0,0,0,0,0l9.8-2.8
|
135 |
+
l-6.9-23.8L717,350.8l2.3,1.2c0,0,0,0,0,0h0c-0.2,0.3-0.4,0.7-0.6,1l-0.2,0.4l0,0L716,352l-0.9-0.6l-33.7,9.7l6.9,23.8l27.9-8
|
136 |
+
l35.1,121.8L754.7,497.6z M708.8,359.6c-0.3-0.5-0.4-1.4-0.2-2c0.2-0.4,1.1-0.5,1.6-0.8c0.2,0.8,0.5,1.7,0.9,2.9
|
137 |
+
C709.9,359.7,709,359.9,708.8,359.6z M745.1,378c0,0.2,0,0.4,0,0.5v0c-0.2,1.9-1.2,3.5-2.7,4.3c-0.1,0.1-0.3,0.1-0.4,0.2l-2.1-5.4
|
138 |
+
v0L745.1,378L745.1,378z"/>
|
139 |
+
<g>
|
140 |
+
<path class="st1" d="M860.2,372.5l-35.7,10.3l-10-34.6L853,337l-6.7-23.4l-65.6,18.9l41.9,145.6l65.6-18.9l-1.6-5.7l-0.5-0.9
|
141 |
+
l-0.4,0.5c0,0,0,0,0,0v0c-0.3-0.3-0.6-0.6-0.9-0.9c-0.1-0.1-0.3-0.3-0.4-0.4c0,0,0,0,0,0l0.3-0.4c0,0,0-0.1,0-0.1l0,0v0l0.1,0
|
142 |
+
l0-0.1l0.8-1.1l-4.2-14.7l-38.5,11.1l-11.6-40.3l23.1-6.7c0-0.2,0-0.4,0-0.6c0.5,0.1,1.1,0.1,1.6,0.1l11.1-3.2L860.2,372.5z
|
143 |
+
M809.4,414.7l-3.8-1.3l4.9-3.6l1.6-1l1.7,1.1l1.1,0.4l0,0.4l2.4,1.6l-2,1.5l0.2,1.7l-5.8,0.5L809.4,414.7z M815.9,447L815.9,447
|
144 |
+
c-0.1-0.1-0.1-0.3-0.2-0.4c-0.1-0.2-0.2-0.4-0.3-0.6c0-0.1-0.1-0.2-0.1-0.2c0-0.1-0.1-0.1-0.1-0.2l1.1-0.9l1.1-1l2.2-1.9l0.1,0.2
|
145 |
+
c0.2,0.2,0.3,0.5,0.4,0.7c0,0,0,0,0,0l0,0c0.1,0.3,0.3,0.5,0.4,0.7c0.1,0.2,0.1,0.3,0.2,0.5l0,0L815.9,447z"/>
|
146 |
+
<path class="st1" d="M884.7,451.3l0.6-0.1l-0.2-0.3C885,451,884.8,451.1,884.7,451.3z"/>
|
147 |
+
</g>
|
148 |
+
<polygon class="st1" points="969.2,410.2 930.6,421.3 919,380.9 954.8,370.6 948,347.1 912.3,357.4 902.3,322.8 940.8,311.7
|
149 |
+
934.1,288.3 868.5,307.2 910.4,452.8 976,433.9 "/>
|
150 |
+
<path class="st1" d="M405.3,270.3l-0.3,0.1l21.7,10.3l1.4,22.6c0-0.3,0.1-0.6,0.2-0.8c0.4,0.1,0.9,0.1,1.2,0.3
|
151 |
+
c0.2,0.2,0.1,0.7,0.1,1.4c-0.7-0.3-1.3-0.3-1.4-0.6c0-0.1,0-0.1-0.1-0.2l0.9,15.4l26.1-27.7l4.5,1.2c-2.6-1.4-4.5-2.3-5.7-3.8
|
152 |
+
c-0.7-1,0.1-4.4,1.2-5.2c2.7-1.6,5.6-0.2,6.9,2.6c0.6,1.5-0.1,3.5-0.4,6.8l30.3,7.9l-6.8-12.5c-0.4,0.5-1,1-1.7,1.4
|
153 |
+
c-2.1,0.7-4.1,0.6-6-0.8c-0.6-0.4-1.3-1.4-1.2-2c0.4-2.1,1-4.1,1.7-6c0.2-0.5,1.3-0.8,2.1-0.8c0.2,0,0.4,0,0.6,0l-7-12.8l20.5-32.1
|
154 |
+
l-37.4,7.1l-24.2-29.4l-4.8,37.8l-35.5,13.9l12.4,5.9L405.3,270.3z M434.4,277.6c1.9-1.4,1.9-1.4,3.6,0.8
|
155 |
+
C436.5,278.1,435.6,277.9,434.4,277.6z M444.6,256.9c-1.4-0.7-2.5-0.9-3-1.6c-0.8-0.9-0.4-2,0.6-2.6c1-0.6,2.7-0.2,2.9,0.9
|
156 |
+
C445.2,254.5,444.8,255.4,444.6,256.9z M448.8,285.2c0.6,0.3,1.2,0.6,1.7,0.9c0.1,0.1-0.3,1.1-0.4,1.1c-0.6-0.1-1.2-0.4-1.8-0.6
|
157 |
+
C448.5,286.3,448.6,285.9,448.8,285.2z M437.6,235.1c3.1-1.3,6.3-0.3,7.8,2.6c1.7,3.2,0.5,6.9-2.7,8.4c-2.4,1.1-7.2-0.8-8.5-3.5
|
158 |
+
C433,240,434.6,236.3,437.6,235.1z M415.3,266c0.4,0.2,0.8,0.3,1.2,0.5c0.1,0.1-0.1,0.5-0.2,1c-0.5-0.2-0.9-0.3-1.3-0.5
|
159 |
+
C415.1,266.7,415.2,266.4,415.3,266z"/>
|
160 |
+
<path class="st1" d="M334.6,345.9l19-20.2l26.8,7l-13.3-24.3l15-23.4l-27.2,5.2l-17.6-21.4l-3.5,27.5l-25.8,10.1l25.1,11.8
|
161 |
+
L334.6,345.9z M351.1,302.9c0.8,0.9,0.6,3.2,0,4.4c-0.3,0.6-3.2,0.6-3.9-0.1c-1-1-1-2.8-1.9-5.6C348.2,302.1,350.4,302,351.1,302.9
|
162 |
+
z M339.5,298c0.2-0.2,1.1,0.4,2.3,0.8c-0.9,0.9-1.4,1.6-2.1,1.9c-0.3,0.2-0.9-0.4-1.4-0.7C338.7,299.4,339,298.5,339.5,298z"/>
|
163 |
+
<path class="st1" d="M568.4,269.9c0.1,0.1,0.2,0.3,0.2,0.6l14.5,3.8l-13.3-24.3l13.4-21l-1.6-0.2l2.1-0.6l1-1.5l-17.2,3.3
|
164 |
+
c0.1,0.3,0.2,0.6,0.3,0.9c-1,0.1-1.9,0.5-2.4,0.2c-0.2-0.1-0.3-0.3-0.4-0.6l-7.6,1.4l-17.6-21.4l-3.5,27.5l-25.8,10.1l25.1,11.8
|
165 |
+
l1.7,27.7l19-20.2l9,2.3C566.2,269.4,567.5,269.5,568.4,269.9z M538.7,241.2c0.9-0.7,2.1-0.3,2.5,0.7c0.3,0.6-0.1,1.5-0.2,2.9
|
166 |
+
c-1.4-0.7-2.5-0.9-3-1.5C537.7,242.9,538.1,241.6,538.7,241.2z M541.8,246.2c-0.1,0.3-0.3,0.6-0.5,0.9c0,0,0,0,0,0
|
167 |
+
c-0.1,0.1-0.1,0.2-0.2,0.3l-5.5-2.1c0.2-0.7,0.6-1.2,0.8-1.6c0.1-0.1,0.2-0.2,0.2-0.4l0,0L541.8,246.2
|
168 |
+
C541.8,246.2,541.8,246.2,541.8,246.2z M550.9,254.1c-0.5,1.8-1.6,3.2-3,4c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0h0
|
169 |
+
c-0.3,0.1-0.5,0.3-0.8,0.4c0,0-0.1,0-0.1,0.1l-1-2.8l-0.6-2.1c0,0,0,0,0,0c0,0-0.1,0-0.1,0l0-0.4l-0.1-0.4c0,0,0.1,0,0.1-0.1v-5.1
|
170 |
+
c4.7,0.1,5.7,3.3,5.9,5.2l0.1,0.6L550.9,254.1z M557.2,259.6c-0.2-0.3-0.4-0.6-0.6-1c-0.1-0.2-0.2-0.4-0.3-0.5c0,0,0.3,0.4,0.9,0.5
|
171 |
+
l0.8-2.9l0.8-2.9c0.3,0.1,0.6,0.2,0.8,0.4c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
172 |
+
c0,0,0,0,0,0s0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0s0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0l0,0l0,0
|
173 |
+
c0,0,0,0,0,0c0,0,0,0,0,0l0,0l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0
|
174 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0v0c0,0,0,0,0,0v0c0,0,0,0,0,0c0,0,0,0,0,0s0,0,0,0v0c0,0,0,0,0,0s0,0,0,0
|
175 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0s0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0v0l0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
176 |
+
c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0.6,0.6,0.9,1.2,1.2,1.7c0.1,0.2,0.2,0.3,0.3,0.5c0,0,0,0,0,0l-2.4,1.7L557.2,259.6z"/>
|
177 |
+
<g>
|
178 |
+
<path class="st1" d="M456,117.5c0.2,0.7,0.4,1.4,0.5,2c67.8-10,135-1.4,195.9,22.5c1.2-1.5,3-2.8,5.6-4c6.8-3.1,16.9-0.1,19.9,5.8
|
179 |
+
c1.1,2.2,1.1,5.8,0.3,9.4c31.8,15.3,61.5,34.8,88.1,58.3c0.3-0.4,0.6-0.7,1.1-0.9c1.5-0.7,3.6-0.1,4.3,1.2c0.6,1.2,0.1,2.9-1,3.6
|
180 |
+
c16,14.5,30.8,30.4,44.3,47.6l12-3.5C768,182.5,682.6,129.8,588.2,111.3c0.2,0.1,0.3,0.3,0.5,0.4c2.2,2.3,0.8,6.4-2.1,7.6
|
181 |
+
c-3.1,1.3-6,0.2-7.1-2.7c-0.6-1.8,0-3.9,0.5-6.9c-42.3-7.4-86.2-8-130.3-0.9C452.7,111.5,455,114.4,456,117.5z M685.1,144.4
|
182 |
+
c0.7,0.2,1.7,0.2,2,0.6c0.3,0.5,0,1.3-0.1,2.4c-1-0.4-1.9-0.5-2-0.9C684.7,145.8,685,145.1,685.1,144.4z M537.6,107
|
183 |
+
c0.4,0.2,0.8,0.3,1.2,0.5c0.1,0.1,0,0.6-0.1,0.6c-0.4,0.1-0.9,0-1.3,0C537.5,107.8,537.5,107.4,537.6,107z"/>
|
184 |
+
<path class="st1" d="M129.9,456c-3.2-3.1-4.6-13.5-2.1-16.3c1.1-1.3,2.9-2,4.9-2.2c7.3-44.3,22.4-86.8,44.1-125.5
|
185 |
+
c-1-0.1-1.8-0.3-2.5-0.7c-2.3-1.3-2.7-3.7-0.9-5.7c1.8-1.9,4.3-2,6-0.1c0.2,0.3,0.4,0.6,0.6,1c48.1-82.5,126.7-147.3,225.6-175.8
|
186 |
+
c15-4.3,30.1-7.7,45.1-10.1c-0.1-0.4-0.2-0.7-0.3-1.1c-0.9-2.9-4.4-6.3-8.9-9.1c-13.1,2.4-26.1,5.4-39.1,9.2
|
187 |
+
c-84.3,24.3-154.3,74.2-204,138.8l1,0.5c-0.1,0.3-0.3,0.6-0.4,0.9c-0.8,1.6-1.7,3.1-2.8,4.4c-0.7,0.9-1.5,1.7-2.3,2.5c0,0,0,0,0,0
|
188 |
+
l-0.9-1c-42.3,57.6-68.8,126.2-75.4,198.5l12-3.5c0.2-1.5,0.3-2.9,0.5-4.4C130,456.1,129.9,456.1,129.9,456z M134.9,403.2l1.8,1.9
|
189 |
+
v0l-2.1,2l-2.1,2l-1.8-1.9L134.9,403.2z"/>
|
190 |
+
</g>
|
191 |
+
<path class="st1" d="M725.5,833.5c0.1,0,0.1,0,0.2,0c0.5-0.3,1-0.7,1.5-1l-2.8-0.7c0.7-2.9,1.1-5.9,1.4-8.9l5.8,0.7
|
192 |
+
c-0.2,2.3-0.5,4.5-0.9,6.7c107.4-71,173.8-190.9,177.3-319.5l-11.7,3.4c-1.3,35-7.4,69.2-17.8,102c1.3,0,2.5,0.5,3.6,1.4
|
193 |
+
c2.2,1.9,2.4,4.4,1.9,6.9c-0.4,2-3,4.2-5,3.8c-1.4-0.3-2.8-0.9-4-1.7C840,727,763.9,811.5,660.7,854.6c0,0.3,0,0.6,0.1,0.9
|
194 |
+
c-0.6-0.1-1.1-0.2-1.5-0.3c-13.2,5.4-26.8,10.2-40.8,14.3c-163.7,47.2-333.3-19.4-424.3-153l-11.7,3.4
|
195 |
+
c54.3,81.4,136.7,139.2,229.7,163.5l4.3-2.9c0.1,0.2,0.2,0.4,0.3,0.5l0-0.1l1.8,3.2l2.9,0.3l-0.6,1.1c4.4,1,8.8,2,13.2,2.9
|
196 |
+
l-0.1-3.1c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0.1,0,0.1,0,0.2,0c0,0,0.1,0,0.1,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
197 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0v0c0,0,0,0,0,0c0,0,0,0,0,0h0c0,0,0.1,0,0.1,0c0,0,0,0,0,0
|
198 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0.3,0.1,0.6,0.2,0.9,0.3l0,0c0,0,0,0,0,0s0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
199 |
+
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0.6,0.3,1.1,0.7,1.5,1c0.1,0.1,0.3,0.2,0.4,0.3l0.9,0.6
|
200 |
+
l0.3,1.1c0,0.2,0.1,0.3,0.1,0.5c58.8,11.1,121.1,8.9,182.5-8.8c37.5-10.8,72.2-26.7,103.6-46.7
|
201 |
+
C725.4,833.7,725.5,833.5,725.5,833.5z M874.3,655.5c-3.1,2.4-4.7,2.8-7,1.7C868.9,655,870.4,654.6,874.3,655.5z M837.2,711.5
|
202 |
+
c0.3,0.2,0.3,0.7,0.4,1.1c-0.4,0.1-0.9,0.4-1.1,0.2c-0.3-0.2-0.3-0.7-0.4-1.1C836.4,711.7,836.9,711.3,837.2,711.5z M407.5,874.8
|
203 |
+
c0,0.3,0,0.6,0,0.9c0,0.2,0,0.3,0,0.5l-5.8,0.5v0c0-0.1,0-0.1,0-0.2c-0.1-0.7,0-1.4,0-2l0-0.5v0l0,0l5.8,0.4L407.5,874.8z
|
204 |
+
M473.8,885.7l1.9,2.3c-0.5,0.4-0.8,0.8-0.9,1.3l-5.5-2.1c0.1-0.2,0.2-0.4,0.3-0.7c0,0,0,0,0,0v0c0.5-1.2,1.3-2.3,2.4-3.2l0.1-0.1
|
205 |
+
L473.8,885.7l1.9,2.3L473.8,885.7l-1.9-2.3L473.8,885.7z"/>
|
206 |
+
<path class="st1" d="M396.5,98.9c131.9-38,267.3-8,368.7,69.2c0.7-2.6,2.5-5,4.7-5.9c0,0,0,0,0,0c-0.4-1.2,0-2.4,1.2-3.1
|
207 |
+
c1.3-0.8,3-0.4,3.7,0.8c0.4,0.6,0.4,1.5,0.1,2.3c2.2,0.7,4.3,2.3,5.2,4.4c1.8,3.8,0.5,8.7-2.9,10.3c-0.2,0.1-0.5,0.2-0.8,0.3
|
208 |
+
c5.8,4.7,11.5,9.7,17,14.7c0.9-2.2,2.4-4.1,4.1-5.9c1-1.1,2.1-1.5,3.6-1.5c5.2,0.1,5.5,0.3,7.2,5.4c0.1,0.3,0.4,0.6,0.5,0.9
|
209 |
+
c0.2,0,0.4,0,0.6,0c-0.1-0.9-0.2-1.9-0.3-2.9c3,1.2,4.5,3.8,3.7,6.8c-0.1,0.3-0.2,0.5-0.3,0.8c2-0.7,4-1.8,6.3-2.7
|
210 |
+
c1,3.4,2.3,6.2,2.4,9c0.2,5.4-3.5,8.1-9.1,7.1c-0.5-0.1-1-0.2-1.5-0.3c13.6,13.9,26.3,28.9,38,44.8l21.1-6.1
|
211 |
+
C780.5,120.4,628.1,48.7,470.7,63.8c1.9,2.3,2,5.6,0.2,7.4c-2.5,2.4-7.9,2-10.5-0.8c-1.6-1.7-2.2-3.6-1.9-5.3
|
212 |
+
c-22.5,2.8-45.1,7.4-67.7,13.9c-11,3.2-21.8,6.7-32.3,10.7c0.1,1,0,2.1,0.2,3c-1.6,0-3.2,0-5.6,0c0-0.3,0-0.6-0.1-0.9
|
213 |
+
C227.1,140.7,135,243,95.4,364.7c1.4-0.5,2.9,0.2,3.9,1.7c0.9,1.5,1.2,3.4,2.2,6.7c-3.4-0.9-5.5-0.9-7-1.9
|
214 |
+
c-0.4-0.3-0.7-0.6-0.9-0.9c-5.4,17.4-9.7,35.1-12.9,53.2l0.3-0.5l-0.3,0.6c0,0.1,0,0.1,0,0.2L81,423l0.2,0.1
|
215 |
+
c0.5,0.4,0.9,0.8,1.3,1.3c0.7,0.9,1.1,2,1.4,3.4l0.1,0.5c0,1.7-0.3,3.2-1.1,4.3l-3.5-2.3c-2.4,15.2-4.1,30.5-5,46l21.1-6.1
|
216 |
+
C107.7,300.7,223.5,148.7,396.5,98.9z M749.4,142.3c0.2-1.2,1.4-1.3,2.5-1.2c1.2,0.1,2.3,0.3,4,0.4c-1.1,1.1-1.8,2.4-3,3.1
|
217 |
+
c-0.6,0.4-2,0.1-2.8-0.3C749.6,144.1,749.3,142.9,749.4,142.3z M745.2,129.2c0.3,0.2,0.3,0.7,0.4,1.1c-0.4,0.1-0.9,0.4-1.1,0.2
|
218 |
+
c-0.3-0.2-0.3-0.7-0.4-1.1C744.4,129.3,744.9,129,745.2,129.2z M723.5,130.8c1.2-0.5,3.1,0.2,3.6,1.3c0.5,1-0.8,3.4-2,3.8
|
219 |
+
c-1.4,0.4-2.2-0.4-2.8-1.5C721.4,133.1,722.1,131.3,723.5,130.8z M673,99.4c0.7-0.2,1.6,0.2,3,0.5c-0.6,1.4-0.8,2.4-1.4,3
|
220 |
+
c-0.6,0.6-2.2,0-2.5-1C671.6,100.8,671.8,99.7,673,99.4z M571.9,68.8l0-1l0.2,0c0.3,0,0.5,0,0.6,0c0,0,0,0,0,0l0,0.8l2.6-0.5
|
221 |
+
l-2.6,0.6l0,0l2.6-0.5l0,0c0.1,0.4,0.1,0.7,0.2,1.1v0c0,0,0,0,0,0c0,0,0,0,0,0v0c0,0.3,0,0.5,0.1,0.8l0.3,3.7l-3.5-0.1l-0.2-3
|
222 |
+
l0.1,3c-0.2,0-0.4,0-0.5,0l-0.1,0l0.1-2.9l-2,0.1l0,0l0,0l0-0.5c0-0.5-0.1-0.9-0.1-1.3L571.9,68.8L571.9,68.8l-2.2,0.4L571.9,68.8z
|
223 |
+
M230.9,174.4l1.8-0.4l-0.2-0.5c0,0,0,0,0,0c0.1,0,0.2-0.1,0.2-0.1c0,0,0.1,0,0.1,0h0l0.3,0.5l0.4-0.1l0,0l0.3-0.1l-0.3,0.1l0,0.7
|
224 |
+
l2.3,4c-0.3,0.2-0.7,0.4-1.1,0.6l-0.5,0.2l-0.5,0c-2.8,0.1-5-1.5-5.7-4.1c0-0.1-0.1-0.2-0.1-0.3L230.9,174.4z M91.5,418.1
|
225 |
+
c-0.2,0.1-1.4-0.4-1.5-0.7c-0.2-0.7,0.1-1.5,0.2-2.7c1.2,0.7,1.9,1.1,2.6,1.6C92.4,416.9,92.1,417.7,91.5,418.1z"/>
|
226 |
+
</g>
|
227 |
+
</svg>
|
sdk/freemius/assets/img/theme-icon.png → js/freemius-pricing/fde48e4609a6ddc11d639fc2421f2afd.png
RENAMED
File without changes
|
js/freemius-pricing/freemius-pricing.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.Freemius=n():e.Freemius=n()}(window,(function(){return function(e){var n={};function t(a){if(n[a])return n[a].exports;var i=n[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:a})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var i in e)t.d(a,i,function(n){return e[n]}.bind(null,i));return a},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=35)}([function(e,n,t){"use strict";e.exports=t(20)},function(e,n,t){e.exports=t(30)()},function(e,n,t){"use strict";(function(e,a){
|
2 |
+
/*!
|
3 |
+
* Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
|
4 |
+
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
+
*/
|
6 |
+
function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,n){for(var t=0;t<n.length;t++){var a=n[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){r(e,n,t[n])}))}return e}function c(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=[],a=!0,i=!1,s=void 0;try{for(var r,o=e[Symbol.iterator]();!(a=(r=o.next()).done)&&(t.push(r.value),!n||t.length!==n);a=!0);}catch(e){i=!0,s=e}finally{try{a||null==o.return||o.return()}finally{if(i)throw s}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}t.d(n,"a",(function(){return Ee})),t.d(n,"b",(function(){return _e})),t.d(n,"c",(function(){return we}));var l=function(){},p={},f={},u={mark:l,measure:l};try{"undefined"!=typeof window&&(p=window),"undefined"!=typeof document&&(f=document),"undefined"!=typeof MutationObserver&&MutationObserver,"undefined"!=typeof performance&&(u=performance)}catch(e){}var d=(p.navigator||{}).userAgent,g=void 0===d?"":d,m=p,h=f,A=u,k=(m.document,!!h.documentElement&&!!h.head&&"function"==typeof h.addEventListener&&"function"==typeof h.createElement),y=(~g.indexOf("MSIE")||g.indexOf("Trident/"),function(){try{}catch(e){return!1}}(),[1,2,3,4,5,6,7,8,9,10]),b=y.concat([11,12,13,14,15,16,17,18,19,20]),_={GROUP:"group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},v=(["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","flip-both","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter",_.GROUP,_.SWAP_OPACITY,_.PRIMARY,_.SECONDARY].concat(y.map((function(e){return"".concat(e,"x")}))).concat(b.map((function(e){return"w-".concat(e)}))),m.FontAwesomeConfig||{});if(h&&"function"==typeof h.querySelector){[["data-family-prefix","familyPrefix"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach((function(e){var n=c(e,2),t=n[0],a=n[1],i=function(e){return""===e||"false"!==e&&("true"===e||e)}(function(e){var n=h.querySelector("script["+e+"]");if(n)return n.getAttribute(e)}(t));null!=i&&(v[a]=i)}))}var w=o({},{familyPrefix:"fa",replacementClass:"svg-inline--fa",autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},v);w.autoReplaceSvg||(w.observeMutations=!1);var E=o({},w);m.FontAwesomeConfig=E;var C=m||{};C.___FONT_AWESOME___||(C.___FONT_AWESOME___={}),C.___FONT_AWESOME___.styles||(C.___FONT_AWESOME___.styles={}),C.___FONT_AWESOME___.hooks||(C.___FONT_AWESOME___.hooks={}),C.___FONT_AWESOME___.shims||(C.___FONT_AWESOME___.shims=[]);var x=C.___FONT_AWESOME___,B=[];k&&((h.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(h.readyState)||h.addEventListener("DOMContentLoaded",(function e(){h.removeEventListener("DOMContentLoaded",e),1,B.map((function(e){return e()}))})));var S,T=function(){},P=void 0!==e&&void 0!==e.process&&"function"==typeof e.process.emit,N=void 0===a?setTimeout:a,M=[];function q(){for(var e=0;e<M.length;e++)M[e][0](M[e][1]);M=[],S=!1}function I(e,n){M.push([e,n]),S||(S=!0,N(q,0))}function O(e){var n=e.owner,t=n._state,a=n._data,i=e[t],s=e.then;if("function"==typeof i){t="fulfilled";try{a=i(a)}catch(e){j(s,e)}}z(s,a)||("fulfilled"===t&&L(s,a),"rejected"===t&&j(s,a))}function z(e,n){var t;try{if(e===n)throw new TypeError("A promises callback cannot return that same promise.");if(n&&("function"==typeof n||"object"===i(n))){var a=n.then;if("function"==typeof a)return a.call(n,(function(a){t||(t=!0,n===a?U(e,a):L(e,a))}),(function(n){t||(t=!0,j(e,n))})),!0}}catch(n){return t||j(e,n),!0}return!1}function L(e,n){e!==n&&z(e,n)||U(e,n)}function U(e,n){"pending"===e._state&&(e._state="settled",e._data=n,I(F,e))}function j(e,n){"pending"===e._state&&(e._state="settled",e._data=n,I(R,e))}function D(e){e._then=e._then.forEach(O)}function F(e){e._state="fulfilled",D(e)}function R(n){n._state="rejected",D(n),!n._handled&&P&&e.process.emit("unhandledRejection",n._data,n)}function Y(n){e.process.emit("rejectionHandled",n)}function Q(e){if("function"!=typeof e)throw new TypeError("Promise resolver "+e+" is not a function");if(this instanceof Q==!1)throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._then=[],function(e,n){function t(e){j(n,e)}try{e((function(e){L(n,e)}),t)}catch(e){t(e)}}(e,this)}Q.prototype={constructor:Q,_state:"pending",_then:null,_data:void 0,_handled:!1,then:function(e,n){var t={owner:this,then:new this.constructor(T),fulfilled:e,rejected:n};return!n&&!e||this._handled||(this._handled=!0,"rejected"===this._state&&P&&I(Y,this)),"fulfilled"===this._state||"rejected"===this._state?I(O,t):this._then.push(t),t.then},catch:function(e){return this.then(null,e)}},Q.all=function(e){if(!Array.isArray(e))throw new TypeError("You must pass an array to Promise.all().");return new Q((function(n,t){var a=[],i=0;function s(e){return i++,function(t){a[e]=t,--i||n(a)}}for(var r,o=0;o<e.length;o++)(r=e[o])&&"function"==typeof r.then?r.then(s(o),t):a[o]=r;i||n(a)}))},Q.race=function(e){if(!Array.isArray(e))throw new TypeError("You must pass an array to Promise.race().");return new Q((function(n,t){for(var a,i=0;i<e.length;i++)(a=e[i])&&"function"==typeof a.then?a.then(n,t):n(a)}))},Q.resolve=function(e){return e&&"object"===i(e)&&e.constructor===Q?e:new Q((function(n){n(e)}))},Q.reject=function(e){return new Q((function(n,t){t(e)}))};var W={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function V(e){if(e&&k){var n=h.createElement("style");n.setAttribute("type","text/css"),n.innerHTML=e;for(var t=h.head.childNodes,a=null,i=t.length-1;i>-1;i--){var s=t[i],r=(s.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(r)>-1&&(a=s)}return h.head.insertBefore(n,a),e}}function H(){for(var e=12,n="";e-- >0;)n+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[62*Math.random()|0];return n}function $(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function X(e){return Object.keys(e||{}).reduce((function(n,t){return n+"".concat(t,": ").concat(e[t],";")}),"")}function K(e){return e.size!==W.size||e.x!==W.x||e.y!==W.y||e.rotate!==W.rotate||e.flipX||e.flipY}function Z(e){var n=e.transform,t=e.containerWidth,a=e.iconWidth,i={transform:"translate(".concat(t/2," 256)")},s="translate(".concat(32*n.x,", ").concat(32*n.y,") "),r="scale(".concat(n.size/16*(n.flipX?-1:1),", ").concat(n.size/16*(n.flipY?-1:1),") "),o="rotate(".concat(n.rotate," 0 0)");return{outer:i,inner:{transform:"".concat(s," ").concat(r," ").concat(o)},path:{transform:"translate(".concat(a/2*-1," -256)")}}}var G={x:0,y:0,width:"100%",height:"100%"};function J(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||n)&&(e.attributes.fill="black"),e}function ee(e){var n=e.icons,t=n.main,a=n.mask,i=e.prefix,s=e.iconName,r=e.transform,c=e.symbol,l=e.title,p=e.maskId,f=e.titleId,u=e.extra,d=e.watchable,g=void 0!==d&&d,m=a.found?a:t,h=m.width,A=m.height,k="fak"===i,y=k?"":"fa-w-".concat(Math.ceil(h/A*16)),b=[E.replacementClass,s?"".concat(E.familyPrefix,"-").concat(s):"",y].filter((function(e){return-1===u.classes.indexOf(e)})).filter((function(e){return""!==e||!!e})).concat(u.classes).join(" "),_={children:[],attributes:o({},u.attributes,{"data-prefix":i,"data-icon":s,class:b,role:u.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(h," ").concat(A)})},v=k&&!~u.classes.indexOf("fa-fw")?{width:"".concat(h/A*16*.0625,"em")}:{};g&&(_.attributes["data-fa-i2svg"]=""),l&&_.children.push({tag:"title",attributes:{id:_.attributes["aria-labelledby"]||"title-".concat(f||H())},children:[l]});var w=o({},_,{prefix:i,iconName:s,main:t,mask:a,maskId:p,transform:r,symbol:c,styles:o({},v,u.styles)}),C=a.found&&t.found?function(e){var n,t=e.children,a=e.attributes,i=e.main,s=e.mask,r=e.maskId,c=e.transform,l=i.width,p=i.icon,f=s.width,u=s.icon,d=Z({transform:c,containerWidth:f,iconWidth:l}),g={tag:"rect",attributes:o({},G,{fill:"white"})},m=p.children?{children:p.children.map(J)}:{},h={tag:"g",attributes:o({},d.inner),children:[J(o({tag:p.tag,attributes:o({},p.attributes,d.path)},m))]},A={tag:"g",attributes:o({},d.outer),children:[h]},k="mask-".concat(r||H()),y="clip-".concat(r||H()),b={tag:"mask",attributes:o({},G,{id:k,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[g,A]},_={tag:"defs",children:[{tag:"clipPath",attributes:{id:y},children:(n=u,"g"===n.tag?n.children:[n])},b]};return t.push(_,{tag:"rect",attributes:o({fill:"currentColor","clip-path":"url(#".concat(y,")"),mask:"url(#".concat(k,")")},G)}),{children:t,attributes:a}}(w):function(e){var n=e.children,t=e.attributes,a=e.main,i=e.transform,s=X(e.styles);if(s.length>0&&(t.style=s),K(i)){var r=Z({transform:i,containerWidth:a.width,iconWidth:a.width});n.push({tag:"g",attributes:o({},r.outer),children:[{tag:"g",attributes:o({},r.inner),children:[{tag:a.icon.tag,children:a.icon.children,attributes:o({},a.icon.attributes,r.path)}]}]})}else n.push(a.icon);return{children:n,attributes:t}}(w),x=C.children,B=C.attributes;return w.children=x,w.attributes=B,c?function(e){var n=e.prefix,t=e.iconName,a=e.children,i=e.attributes,s=e.symbol;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:o({},i,{id:!0===s?"".concat(n,"-").concat(E.familyPrefix,"-").concat(t):s}),children:a}]}]}(w):function(e){var n=e.children,t=e.main,a=e.mask,i=e.attributes,s=e.styles,r=e.transform;if(K(r)&&t.found&&!a.found){var c={x:t.width/t.height/2,y:.5};i.style=X(o({},s,{"transform-origin":"".concat(c.x+r.x/16,"em ").concat(c.y+r.y/16,"em")}))}return[{tag:"svg",attributes:i,children:n}]}(w)}var ne=function(){},te=(E.measurePerformance&&A&&A.mark&&A.measure,function(e,n,t,a){var i,s,r,o=Object.keys(e),c=o.length,l=void 0!==a?function(e,n){return function(t,a,i,s){return e.call(n,t,a,i,s)}}(n,a):n;for(void 0===t?(i=1,r=e[o[0]]):(i=0,r=t);i<c;i++)r=l(r,e[s=o[i]],s,e);return r});function ae(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=t.skipHooks,i=void 0!==a&&a,s=Object.keys(n).reduce((function(e,t){var a=n[t];return!!a.icon?e[a.iconName]=a.icon:e[t]=a,e}),{});"function"!=typeof x.hooks.addPack||i?x.styles[e]=o({},x.styles[e]||{},s):x.hooks.addPack(e,s),"fas"===e&&ae("fa",n)}var ie=x.styles,se=x.shims,re=function(){var e=function(e){return te(ie,(function(n,t,a){return n[a]=te(t,e,{}),n}),{})};e((function(e,n,t){return n[3]&&(e[n[3]]=t),e})),e((function(e,n,t){var a=n[2];return e[t]=t,a.forEach((function(n){e[n]=t})),e}));var n="far"in ie;te(se,(function(e,t){var a=t[0],i=t[1],s=t[2];return"far"!==i||n||(i="fas"),e[a]={prefix:i,iconName:s},e}),{})};re();x.styles;function oe(e,n,t){if(e&&e[n]&&e[n][t])return{prefix:n,iconName:t,icon:e[n][t]}}function ce(e){var n=e.tag,t=e.attributes,a=void 0===t?{}:t,i=e.children,s=void 0===i?[]:i;return"string"==typeof e?$(e):"<".concat(n," ").concat(function(e){return Object.keys(e||{}).reduce((function(n,t){return n+"".concat(t,'="').concat($(e[t]),'" ')}),"").trim()}(a),">").concat(s.map(ce).join(""),"</").concat(n,">")}var le=function(e){var n={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return e?e.toLowerCase().split(" ").reduce((function(e,n){var t=n.toLowerCase().split("-"),a=t[0],i=t.slice(1).join("-");if(a&&"h"===i)return e.flipX=!0,e;if(a&&"v"===i)return e.flipY=!0,e;if(i=parseFloat(i),isNaN(i))return e;switch(a){case"grow":e.size=e.size+i;break;case"shrink":e.size=e.size-i;break;case"left":e.x=e.x-i;break;case"right":e.x=e.x+i;break;case"up":e.y=e.y-i;break;case"down":e.y=e.y+i;break;case"rotate":e.rotate=e.rotate+i}return e}),n):n};function pe(e){this.name="MissingIcon",this.message=e||"Icon unavailable",this.stack=(new Error).stack}pe.prototype=Object.create(Error.prototype),pe.prototype.constructor=pe;var fe={fill:"currentColor"},ue={attributeType:"XML",repeatCount:"indefinite",dur:"2s"},de={tag:"path",attributes:o({},fe,{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})},ge=o({},ue,{attributeName:"opacity"});o({},fe,{cx:"256",cy:"364",r:"28"}),o({},ue,{attributeName:"r",values:"28;14;28;28;14;28;"}),o({},ge,{values:"1;0;1;1;0;1;"}),o({},fe,{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),o({},ge,{values:"1;0;0;0;0;1;"}),o({},fe,{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),o({},ge,{values:"0;0;1;1;0;0;"}),x.styles;function me(e){var n=e[0],t=e[1],a=c(e.slice(4),1)[0];return{found:!0,width:n,height:t,icon:Array.isArray(a)?{tag:"g",attributes:{class:"".concat(E.familyPrefix,"-").concat(_.GROUP)},children:[{tag:"path",attributes:{class:"".concat(E.familyPrefix,"-").concat(_.SECONDARY),fill:"currentColor",d:a[0]}},{tag:"path",attributes:{class:"".concat(E.familyPrefix,"-").concat(_.PRIMARY),fill:"currentColor",d:a[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:a}}}}x.styles;function he(){var e="svg-inline--fa",n=E.familyPrefix,t=E.replacementClass,a='svg:not(:root).svg-inline--fa {\n overflow: visible;\n}\n\n.svg-inline--fa {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.225em;\n}\n.svg-inline--fa.fa-w-1 {\n width: 0.0625em;\n}\n.svg-inline--fa.fa-w-2 {\n width: 0.125em;\n}\n.svg-inline--fa.fa-w-3 {\n width: 0.1875em;\n}\n.svg-inline--fa.fa-w-4 {\n width: 0.25em;\n}\n.svg-inline--fa.fa-w-5 {\n width: 0.3125em;\n}\n.svg-inline--fa.fa-w-6 {\n width: 0.375em;\n}\n.svg-inline--fa.fa-w-7 {\n width: 0.4375em;\n}\n.svg-inline--fa.fa-w-8 {\n width: 0.5em;\n}\n.svg-inline--fa.fa-w-9 {\n width: 0.5625em;\n}\n.svg-inline--fa.fa-w-10 {\n width: 0.625em;\n}\n.svg-inline--fa.fa-w-11 {\n width: 0.6875em;\n}\n.svg-inline--fa.fa-w-12 {\n width: 0.75em;\n}\n.svg-inline--fa.fa-w-13 {\n width: 0.8125em;\n}\n.svg-inline--fa.fa-w-14 {\n width: 0.875em;\n}\n.svg-inline--fa.fa-w-15 {\n width: 0.9375em;\n}\n.svg-inline--fa.fa-w-16 {\n width: 1em;\n}\n.svg-inline--fa.fa-w-17 {\n width: 1.0625em;\n}\n.svg-inline--fa.fa-w-18 {\n width: 1.125em;\n}\n.svg-inline--fa.fa-w-19 {\n width: 1.1875em;\n}\n.svg-inline--fa.fa-w-20 {\n width: 1.25em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-border {\n height: 1.5em;\n}\n.svg-inline--fa.fa-li {\n width: 2em;\n}\n.svg-inline--fa.fa-fw {\n width: 1.25em;\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: #ff253a;\n border-radius: 1em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #fff;\n height: 1.5em;\n line-height: 1;\n max-width: 5em;\n min-width: 1.5em;\n overflow: hidden;\n padding: 0.25em;\n right: 0;\n text-overflow: ellipsis;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: 0;\n right: 0;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: 0;\n left: 0;\n right: auto;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n right: 0;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: 0;\n right: auto;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-lg {\n font-size: 1.3333333333em;\n line-height: 0.75em;\n vertical-align: -0.0667em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: 2.5em;\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: -2em;\n position: absolute;\n text-align: center;\n width: 2em;\n line-height: inherit;\n}\n\n.fa-border {\n border: solid 0.08em #eee;\n border-radius: 0.1em;\n padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n -webkit-filter: none;\n filter: none;\n}\n\n.fa-stack {\n display: inline-block;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: #fff;\n}\n\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse {\n color: #fff;\n}';if("fa"!==n||t!==e){var i=new RegExp("\\.".concat("fa","\\-"),"g"),s=new RegExp("\\--".concat("fa","\\-"),"g"),r=new RegExp("\\.".concat(e),"g");a=a.replace(i,".".concat(n,"-")).replace(s,"--".concat(n,"-")).replace(r,".".concat(t))}return a}function Ae(){E.autoAddCss&&!ve&&(V(he()),ve=!0)}function ke(e,n){return Object.defineProperty(e,"abstract",{get:n}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map((function(e){return ce(e)}))}}),Object.defineProperty(e,"node",{get:function(){if(k){var n=h.createElement("div");return n.innerHTML=e.html,n.children}}}),e}function ye(e){var n=e.prefix,t=void 0===n?"fa":n,a=e.iconName;if(a)return oe(_e.definitions,t,a)||oe(x.styles,t,a)}var be,_e=new(function(){function e(){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.definitions={}}var n,t,a;return n=e,(t=[{key:"add",value:function(){for(var e=this,n=arguments.length,t=new Array(n),a=0;a<n;a++)t[a]=arguments[a];var i=t.reduce(this._pullDefinitions,{});Object.keys(i).forEach((function(n){e.definitions[n]=o({},e.definitions[n]||{},i[n]),ae(n,i[n]),re()}))}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(e,n){var t=n.prefix&&n.iconName&&n.icon?{0:n}:n;return Object.keys(t).map((function(n){var a=t[n],i=a.prefix,s=a.iconName,r=a.icon;e[i]||(e[i]={}),e[i][s]=r})),e}}])&&s(n.prototype,t),a&&s(n,a),e}()),ve=!1,we={transform:function(e){return le(e)}},Ee=(be=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=n.transform,a=void 0===t?W:t,i=n.symbol,s=void 0!==i&&i,r=n.mask,c=void 0===r?null:r,l=n.maskId,p=void 0===l?null:l,f=n.title,u=void 0===f?null:f,d=n.titleId,g=void 0===d?null:d,m=n.classes,h=void 0===m?[]:m,A=n.attributes,k=void 0===A?{}:A,y=n.styles,b=void 0===y?{}:y;if(e){var _=e.prefix,v=e.iconName,w=e.icon;return ke(o({type:"icon"},e),(function(){return Ae(),E.autoA11y&&(u?k["aria-labelledby"]="".concat(E.replacementClass,"-title-").concat(g||H()):(k["aria-hidden"]="true",k.focusable="false")),ee({icons:{main:me(w),mask:c?me(c.icon):{found:!1,width:null,height:null,icon:{}}},prefix:_,iconName:v,transform:o({},W,a),symbol:s,title:u,maskId:p,titleId:g,extra:{attributes:k,styles:b,classes:h}})}))}},function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=(e||{}).icon?e:ye(e||{}),a=n.mask;return a&&(a=(a||{}).icon?a:ye(a||{})),be(t,o({},n,{mask:a}))})}).call(this,t(3),t(27).setImmediate)},function(e,n){var t;t=function(){return this}();try{t=t||new Function("return this")()}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,n,t){"use strict";
|
7 |
+
/*
|
8 |
+
object-assign
|
9 |
+
(c) Sindre Sorhus
|
10 |
+
@license MIT
|
11 |
+
*/var a=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;function r(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var n={},t=0;t<10;t++)n["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(n).map((function(e){return n[e]})).join(""))return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach((function(e){a[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},a)).join("")}catch(e){return!1}}()?Object.assign:function(e,n){for(var t,o,c=r(e),l=1;l<arguments.length;l++){for(var p in t=Object(arguments[l]))i.call(t,p)&&(c[p]=t[p]);if(a){o=a(t);for(var f=0;f<o.length;f++)s.call(t,o[f])&&(c[o[f]]=t[o[f]])}}return c}},function(e,n){var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var n=[],t=0;t<e.length;t++)n.push(255&e.charCodeAt(t));return n},bytesToString:function(e){for(var n=[],t=0;t<e.length;t++)n.push(String.fromCharCode(e[t]));return n.join("")}}};e.exports=t},function(e,n,t){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}}(),e.exports=t(21)},function(e,n,t){"use strict";e.exports=function(e){var n=[];return n.toString=function(){return this.map((function(n){var t=function(e,n){var t=e[1]||"",a=e[3];if(!a)return t;if(n&&"function"==typeof btoa){var i=(r=a,o=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),"/*# ".concat(c," */")),s=a.sources.map((function(e){return"/*# sourceURL=".concat(a.sourceRoot||"").concat(e," */")}));return[t].concat(s).concat([i]).join("\n")}var r,o,c;return[t].join("\n")}(n,e);return n[2]?"@media ".concat(n[2]," {").concat(t,"}"):t})).join("")},n.i=function(e,t,a){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(a)for(var s=0;s<this.length;s++){var r=this[s][0];null!=r&&(i[r]=!0)}for(var o=0;o<e.length;o++){var c=[].concat(e[o]);a&&i[c[0]]||(t&&(c[2]?c[2]="".concat(t," and ").concat(c[2]):c[2]=t),n.push(c))}},n}},function(e,n,t){var a,i,s,r,o;a=t(32),i=t(5).utf8,s=t(33),r=t(5).bin,(o=function(e,n){e.constructor==String?e=n&&"binary"===n.encoding?r.stringToBytes(e):i.stringToBytes(e):s(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var t=a.bytesToWords(e),c=8*e.length,l=1732584193,p=-271733879,f=-1732584194,u=271733878,d=0;d<t.length;d++)t[d]=16711935&(t[d]<<8|t[d]>>>24)|4278255360&(t[d]<<24|t[d]>>>8);t[c>>>5]|=128<<c%32,t[14+(c+64>>>9<<4)]=c;var g=o._ff,m=o._gg,h=o._hh,A=o._ii;for(d=0;d<t.length;d+=16){var k=l,y=p,b=f,_=u;l=g(l,p,f,u,t[d+0],7,-680876936),u=g(u,l,p,f,t[d+1],12,-389564586),f=g(f,u,l,p,t[d+2],17,606105819),p=g(p,f,u,l,t[d+3],22,-1044525330),l=g(l,p,f,u,t[d+4],7,-176418897),u=g(u,l,p,f,t[d+5],12,1200080426),f=g(f,u,l,p,t[d+6],17,-1473231341),p=g(p,f,u,l,t[d+7],22,-45705983),l=g(l,p,f,u,t[d+8],7,1770035416),u=g(u,l,p,f,t[d+9],12,-1958414417),f=g(f,u,l,p,t[d+10],17,-42063),p=g(p,f,u,l,t[d+11],22,-1990404162),l=g(l,p,f,u,t[d+12],7,1804603682),u=g(u,l,p,f,t[d+13],12,-40341101),f=g(f,u,l,p,t[d+14],17,-1502002290),l=m(l,p=g(p,f,u,l,t[d+15],22,1236535329),f,u,t[d+1],5,-165796510),u=m(u,l,p,f,t[d+6],9,-1069501632),f=m(f,u,l,p,t[d+11],14,643717713),p=m(p,f,u,l,t[d+0],20,-373897302),l=m(l,p,f,u,t[d+5],5,-701558691),u=m(u,l,p,f,t[d+10],9,38016083),f=m(f,u,l,p,t[d+15],14,-660478335),p=m(p,f,u,l,t[d+4],20,-405537848),l=m(l,p,f,u,t[d+9],5,568446438),u=m(u,l,p,f,t[d+14],9,-1019803690),f=m(f,u,l,p,t[d+3],14,-187363961),p=m(p,f,u,l,t[d+8],20,1163531501),l=m(l,p,f,u,t[d+13],5,-1444681467),u=m(u,l,p,f,t[d+2],9,-51403784),f=m(f,u,l,p,t[d+7],14,1735328473),l=h(l,p=m(p,f,u,l,t[d+12],20,-1926607734),f,u,t[d+5],4,-378558),u=h(u,l,p,f,t[d+8],11,-2022574463),f=h(f,u,l,p,t[d+11],16,1839030562),p=h(p,f,u,l,t[d+14],23,-35309556),l=h(l,p,f,u,t[d+1],4,-1530992060),u=h(u,l,p,f,t[d+4],11,1272893353),f=h(f,u,l,p,t[d+7],16,-155497632),p=h(p,f,u,l,t[d+10],23,-1094730640),l=h(l,p,f,u,t[d+13],4,681279174),u=h(u,l,p,f,t[d+0],11,-358537222),f=h(f,u,l,p,t[d+3],16,-722521979),p=h(p,f,u,l,t[d+6],23,76029189),l=h(l,p,f,u,t[d+9],4,-640364487),u=h(u,l,p,f,t[d+12],11,-421815835),f=h(f,u,l,p,t[d+15],16,530742520),l=A(l,p=h(p,f,u,l,t[d+2],23,-995338651),f,u,t[d+0],6,-198630844),u=A(u,l,p,f,t[d+7],10,1126891415),f=A(f,u,l,p,t[d+14],15,-1416354905),p=A(p,f,u,l,t[d+5],21,-57434055),l=A(l,p,f,u,t[d+12],6,1700485571),u=A(u,l,p,f,t[d+3],10,-1894986606),f=A(f,u,l,p,t[d+10],15,-1051523),p=A(p,f,u,l,t[d+1],21,-2054922799),l=A(l,p,f,u,t[d+8],6,1873313359),u=A(u,l,p,f,t[d+15],10,-30611744),f=A(f,u,l,p,t[d+6],15,-1560198380),p=A(p,f,u,l,t[d+13],21,1309151649),l=A(l,p,f,u,t[d+4],6,-145523070),u=A(u,l,p,f,t[d+11],10,-1120210379),f=A(f,u,l,p,t[d+2],15,718787259),p=A(p,f,u,l,t[d+9],21,-343485551),l=l+k>>>0,p=p+y>>>0,f=f+b>>>0,u=u+_>>>0}return a.endian([l,p,f,u])})._ff=function(e,n,t,a,i,s,r){var o=e+(n&t|~n&a)+(i>>>0)+r;return(o<<s|o>>>32-s)+n},o._gg=function(e,n,t,a,i,s,r){var o=e+(n&a|t&~a)+(i>>>0)+r;return(o<<s|o>>>32-s)+n},o._hh=function(e,n,t,a,i,s,r){var o=e+(n^t^a)+(i>>>0)+r;return(o<<s|o>>>32-s)+n},o._ii=function(e,n,t,a,i,s,r){var o=e+(t^(n|~a))+(i>>>0)+r;return(o<<s|o>>>32-s)+n},o._blocksize=16,o._digestsize=16,e.exports=function(e,n){if(null==e)throw new Error("Illegal argument "+e);var t=a.wordsToBytes(o(e,n));return n&&n.asBytes?t:n&&n.asString?r.bytesToString(t):a.bytesToHex(t)}},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z";n.definition={prefix:"fas",iconName:"arrow-left",icon:[448,512,a,"f060",i]},n.faArrowLeft=n.definition,n.prefix="fas",n.iconName="arrow-left",n.width=448,n.height=512,n.ligatures=a,n.unicode="f060",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z";n.definition={prefix:"fas",iconName:"chevron-left",icon:[320,512,a,"f053",i]},n.faChevronLeft=n.definition,n.prefix="fas",n.iconName="chevron-left",n.width=320,n.height=512,n.ligatures=a,n.unicode="f053",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z";n.definition={prefix:"fas",iconName:"arrow-right",icon:[448,512,a,"f061",i]},n.faArrowRight=n.definition,n.prefix="fas",n.iconName="arrow-right",n.width=448,n.height=512,n.ligatures=a,n.unicode="f061",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z";n.definition={prefix:"fas",iconName:"chevron-right",icon:[320,512,a,"f054",i]},n.faChevronRight=n.definition,n.prefix="fas",n.iconName="chevron-right",n.width=320,n.height=512,n.ligatures=a,n.unicode="f054",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z";n.definition={prefix:"fas",iconName:"check",icon:[512,512,a,"f00c",i]},n.faCheck=n.definition,n.prefix="fas",n.iconName="check",n.width=512,n.height=512,n.ligatures=a,n.unicode="f00c",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z";n.definition={prefix:"far",iconName:"circle",icon:[512,512,a,"f111",i]},n.faCircle=n.definition,n.prefix="far",n.iconName="circle",n.width=512,n.height=512,n.ligatures=a,n.unicode="f111",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z";n.definition={prefix:"fas",iconName:"question-circle",icon:[512,512,a,"f059",i]},n.faQuestionCircle=n.definition,n.prefix="fas",n.iconName="question-circle",n.width=512,n.height=512,n.ligatures=a,n.unicode="f059",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z";n.definition={prefix:"fas",iconName:"quote-left",icon:[512,512,a,"f10d",i]},n.faQuoteLeft=n.definition,n.prefix="fas",n.iconName="quote-left",n.width=512,n.height=512,n.ligatures=a,n.unicode="f10d",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z";n.definition={prefix:"fas",iconName:"star",icon:[576,512,a,"f005",i]},n.faStar=n.definition,n.prefix="fas",n.iconName="star",n.width=576,n.height=512,n.ligatures=a,n.unicode="f005",n.svgPathData=i},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=[],i="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z";n.definition={prefix:"fas",iconName:"times-circle",icon:[512,512,a,"f057",i]},n.faTimesCircle=n.definition,n.prefix="fas",n.iconName="times-circle",n.width=512,n.height=512,n.ligatures=a,n.unicode="f057",n.svgPathData=i},function(e,n,t){let a=document.getElementById("fs_pricing_wrapper");a&&a.dataset&&a.dataset.publicUrl&&(t.p=a.dataset.publicUrl)},function(e,n,t){"use strict";
|
12 |
+
/** @license React v16.14.0
|
13 |
+
* react.production.min.js
|
14 |
+
*
|
15 |
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
16 |
+
*
|
17 |
+
* This source code is licensed under the MIT license found in the
|
18 |
+
* LICENSE file in the root directory of this source tree.
|
19 |
+
*/var a=t(4),i="function"==typeof Symbol&&Symbol.for,s=i?Symbol.for("react.element"):60103,r=i?Symbol.for("react.portal"):60106,o=i?Symbol.for("react.fragment"):60107,c=i?Symbol.for("react.strict_mode"):60108,l=i?Symbol.for("react.profiler"):60114,p=i?Symbol.for("react.provider"):60109,f=i?Symbol.for("react.context"):60110,u=i?Symbol.for("react.forward_ref"):60112,d=i?Symbol.for("react.suspense"):60113,g=i?Symbol.for("react.memo"):60115,m=i?Symbol.for("react.lazy"):60116,h="function"==typeof Symbol&&Symbol.iterator;function A(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)n+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var k={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function b(e,n,t){this.props=e,this.context=n,this.refs=y,this.updater=t||k}function _(){}function v(e,n,t){this.props=e,this.context=n,this.refs=y,this.updater=t||k}b.prototype.isReactComponent={},b.prototype.setState=function(e,n){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(A(85));this.updater.enqueueSetState(this,e,n,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},_.prototype=b.prototype;var w=v.prototype=new _;w.constructor=v,a(w,b.prototype),w.isPureReactComponent=!0;var E={current:null},C=Object.prototype.hasOwnProperty,x={key:!0,ref:!0,__self:!0,__source:!0};function B(e,n,t){var a,i={},r=null,o=null;if(null!=n)for(a in void 0!==n.ref&&(o=n.ref),void 0!==n.key&&(r=""+n.key),n)C.call(n,a)&&!x.hasOwnProperty(a)&&(i[a]=n[a]);var c=arguments.length-2;if(1===c)i.children=t;else if(1<c){for(var l=Array(c),p=0;p<c;p++)l[p]=arguments[p+2];i.children=l}if(e&&e.defaultProps)for(a in c=e.defaultProps)void 0===i[a]&&(i[a]=c[a]);return{$$typeof:s,type:e,key:r,ref:o,props:i,_owner:E.current}}function S(e){return"object"==typeof e&&null!==e&&e.$$typeof===s}var T=/\/+/g,P=[];function N(e,n,t,a){if(P.length){var i=P.pop();return i.result=e,i.keyPrefix=n,i.func=t,i.context=a,i.count=0,i}return{result:e,keyPrefix:n,func:t,context:a,count:0}}function M(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>P.length&&P.push(e)}function q(e,n,t){return null==e?0:function e(n,t,a,i){var o=typeof n;"undefined"!==o&&"boolean"!==o||(n=null);var c=!1;if(null===n)c=!0;else switch(o){case"string":case"number":c=!0;break;case"object":switch(n.$$typeof){case s:case r:c=!0}}if(c)return a(i,n,""===t?"."+I(n,0):t),1;if(c=0,t=""===t?".":t+":",Array.isArray(n))for(var l=0;l<n.length;l++){var p=t+I(o=n[l],l);c+=e(o,p,a,i)}else if(null===n||"object"!=typeof n?p=null:p="function"==typeof(p=h&&n[h]||n["@@iterator"])?p:null,"function"==typeof p)for(n=p.call(n),l=0;!(o=n.next()).done;)c+=e(o=o.value,p=t+I(o,l++),a,i);else if("object"===o)throw a=""+n,Error(A(31,"[object Object]"===a?"object with keys {"+Object.keys(n).join(", ")+"}":a,""));return c}(e,"",n,t)}function I(e,n){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var n={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,(function(e){return n[e]}))}(e.key):n.toString(36)}function O(e,n){e.func.call(e.context,n,e.count++)}function z(e,n,t){var a=e.result,i=e.keyPrefix;e=e.func.call(e.context,n,e.count++),Array.isArray(e)?L(e,a,t,(function(e){return e})):null!=e&&(S(e)&&(e=function(e,n){return{$$typeof:s,type:e.type,key:n,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||n&&n.key===e.key?"":(""+e.key).replace(T,"$&/")+"/")+t)),a.push(e))}function L(e,n,t,a,i){var s="";null!=t&&(s=(""+t).replace(T,"$&/")+"/"),q(e,z,n=N(n,s,a,i)),M(n)}var U={current:null};function j(){var e=U.current;if(null===e)throw Error(A(321));return e}var D={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:E,IsSomeRendererActing:{current:!1},assign:a};n.Children={map:function(e,n,t){if(null==e)return e;var a=[];return L(e,a,null,n,t),a},forEach:function(e,n,t){if(null==e)return e;q(e,O,n=N(null,null,n,t)),M(n)},count:function(e){return q(e,(function(){return null}),null)},toArray:function(e){var n=[];return L(e,n,null,(function(e){return e})),n},only:function(e){if(!S(e))throw Error(A(143));return e}},n.Component=b,n.Fragment=o,n.Profiler=l,n.PureComponent=v,n.StrictMode=c,n.Suspense=d,n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=D,n.cloneElement=function(e,n,t){if(null==e)throw Error(A(267,e));var i=a({},e.props),r=e.key,o=e.ref,c=e._owner;if(null!=n){if(void 0!==n.ref&&(o=n.ref,c=E.current),void 0!==n.key&&(r=""+n.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(p in n)C.call(n,p)&&!x.hasOwnProperty(p)&&(i[p]=void 0===n[p]&&void 0!==l?l[p]:n[p])}var p=arguments.length-2;if(1===p)i.children=t;else if(1<p){l=Array(p);for(var f=0;f<p;f++)l[f]=arguments[f+2];i.children=l}return{$$typeof:s,type:e.type,key:r,ref:o,props:i,_owner:c}},n.createContext=function(e,n){return void 0===n&&(n=null),(e={$$typeof:f,_calculateChangedBits:n,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:p,_context:e},e.Consumer=e},n.createElement=B,n.createFactory=function(e){var n=B.bind(null,e);return n.type=e,n},n.createRef=function(){return{current:null}},n.forwardRef=function(e){return{$$typeof:u,render:e}},n.isValidElement=S,n.lazy=function(e){return{$$typeof:m,_ctor:e,_status:-1,_result:null}},n.memo=function(e,n){return{$$typeof:g,type:e,compare:void 0===n?null:n}},n.useCallback=function(e,n){return j().useCallback(e,n)},n.useContext=function(e,n){return j().useContext(e,n)},n.useDebugValue=function(){},n.useEffect=function(e,n){return j().useEffect(e,n)},n.useImperativeHandle=function(e,n,t){return j().useImperativeHandle(e,n,t)},n.useLayoutEffect=function(e,n){return j().useLayoutEffect(e,n)},n.useMemo=function(e,n){return j().useMemo(e,n)},n.useReducer=function(e,n,t){return j().useReducer(e,n,t)},n.useRef=function(e){return j().useRef(e)},n.useState=function(e){return j().useState(e)},n.version="16.14.0"},function(e,n,t){"use strict";
|
20 |
+
/** @license React v16.14.0
|
21 |
+
* react-dom.production.min.js
|
22 |
+
*
|
23 |
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
24 |
+
*
|
25 |
+
* This source code is licensed under the MIT license found in the
|
26 |
+
* LICENSE file in the root directory of this source tree.
|
27 |
+
*/var a=t(0),i=t(4),s=t(22);function r(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)n+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!a)throw Error(r(227));function o(e,n,t,a,i,s,r,o,c){var l=Array.prototype.slice.call(arguments,3);try{n.apply(t,l)}catch(e){this.onError(e)}}var c=!1,l=null,p=!1,f=null,u={onError:function(e){c=!0,l=e}};function d(e,n,t,a,i,s,r,p,f){c=!1,l=null,o.apply(u,arguments)}var g=null,m=null,h=null;function A(e,n,t){var a=e.type||"unknown-event";e.currentTarget=h(t),function(e,n,t,a,i,s,o,u,g){if(d.apply(this,arguments),c){if(!c)throw Error(r(198));var m=l;c=!1,l=null,p||(p=!0,f=m)}}(a,n,void 0,e),e.currentTarget=null}var k=null,y={};function b(){if(k)for(var e in y){var n=y[e],t=k.indexOf(e);if(!(-1<t))throw Error(r(96,e));if(!v[t]){if(!n.extractEvents)throw Error(r(97,e));for(var a in v[t]=n,t=n.eventTypes){var i=void 0,s=t[a],o=n,c=a;if(w.hasOwnProperty(c))throw Error(r(99,c));w[c]=s;var l=s.phasedRegistrationNames;if(l){for(i in l)l.hasOwnProperty(i)&&_(l[i],o,c);i=!0}else s.registrationName?(_(s.registrationName,o,c),i=!0):i=!1;if(!i)throw Error(r(98,a,e))}}}}function _(e,n,t){if(E[e])throw Error(r(100,e));E[e]=n,C[e]=n.eventTypes[t].dependencies}var v=[],w={},E={},C={};function x(e){var n,t=!1;for(n in e)if(e.hasOwnProperty(n)){var a=e[n];if(!y.hasOwnProperty(n)||y[n]!==a){if(y[n])throw Error(r(102,n));y[n]=a,t=!0}}t&&b()}var B=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),S=null,T=null,P=null;function N(e){if(e=m(e)){if("function"!=typeof S)throw Error(r(280));var n=e.stateNode;n&&(n=g(n),S(e.stateNode,e.type,n))}}function M(e){T?P?P.push(e):P=[e]:T=e}function q(){if(T){var e=T,n=P;if(P=T=null,N(e),n)for(e=0;e<n.length;e++)N(n[e])}}function I(e,n){return e(n)}function O(e,n,t,a,i){return e(n,t,a,i)}function z(){}var L=I,U=!1,j=!1;function D(){null===T&&null===P||(z(),q())}function F(e,n,t){if(j)return e(n,t);j=!0;try{return L(e,n,t)}finally{j=!1,D()}}var R=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Y=Object.prototype.hasOwnProperty,Q={},W={};function V(e,n,t,a,i,s){this.acceptsBooleans=2===n||3===n||4===n,this.attributeName=a,this.attributeNamespace=i,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=s}var H={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){H[e]=new V(e,0,!1,e,null,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var n=e[0];H[n]=new V(n,1,!1,e[1],null,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){H[e]=new V(e,2,!1,e.toLowerCase(),null,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){H[e]=new V(e,2,!1,e,null,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){H[e]=new V(e,3,!1,e.toLowerCase(),null,!1)})),["checked","multiple","muted","selected"].forEach((function(e){H[e]=new V(e,3,!0,e,null,!1)})),["capture","download"].forEach((function(e){H[e]=new V(e,4,!1,e,null,!1)})),["cols","rows","size","span"].forEach((function(e){H[e]=new V(e,6,!1,e,null,!1)})),["rowSpan","start"].forEach((function(e){H[e]=new V(e,5,!1,e.toLowerCase(),null,!1)}));var $=/[\-:]([a-z])/g;function X(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var n=e.replace($,X);H[n]=new V(n,1,!1,e,null,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var n=e.replace($,X);H[n]=new V(n,1,!1,e,"http://www.w3.org/1999/xlink",!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var n=e.replace($,X);H[n]=new V(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1)})),["tabIndex","crossOrigin"].forEach((function(e){H[e]=new V(e,1,!1,e.toLowerCase(),null,!1)})),H.xlinkHref=new V("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0),["src","href","action","formAction"].forEach((function(e){H[e]=new V(e,1,!1,e.toLowerCase(),null,!0)}));var K=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function Z(e,n,t,a){var i=H.hasOwnProperty(n)?H[n]:null;(null!==i?0===i.type:!a&&(2<n.length&&("o"===n[0]||"O"===n[0])&&("n"===n[1]||"N"===n[1])))||(function(e,n,t,a){if(null==n||function(e,n,t,a){if(null!==t&&0===t.type)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return!a&&(null!==t?!t.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,n,t,a))return!0;if(a)return!1;if(null!==t)switch(t.type){case 3:return!n;case 4:return!1===n;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}(n,t,i,a)&&(t=null),a||null===i?function(e){return!!Y.call(W,e)||!Y.call(Q,e)&&(R.test(e)?W[e]=!0:(Q[e]=!0,!1))}(n)&&(null===t?e.removeAttribute(n):e.setAttribute(n,""+t)):i.mustUseProperty?e[i.propertyName]=null===t?3!==i.type&&"":t:(n=i.attributeName,a=i.attributeNamespace,null===t?e.removeAttribute(n):(t=3===(i=i.type)||4===i&&!0===t?"":""+t,a?e.setAttributeNS(a,n,t):e.setAttribute(n,t))))}K.hasOwnProperty("ReactCurrentDispatcher")||(K.ReactCurrentDispatcher={current:null}),K.hasOwnProperty("ReactCurrentBatchConfig")||(K.ReactCurrentBatchConfig={suspense:null});var G=/^(.*)[\\\/]/,J="function"==typeof Symbol&&Symbol.for,ee=J?Symbol.for("react.element"):60103,ne=J?Symbol.for("react.portal"):60106,te=J?Symbol.for("react.fragment"):60107,ae=J?Symbol.for("react.strict_mode"):60108,ie=J?Symbol.for("react.profiler"):60114,se=J?Symbol.for("react.provider"):60109,re=J?Symbol.for("react.context"):60110,oe=J?Symbol.for("react.concurrent_mode"):60111,ce=J?Symbol.for("react.forward_ref"):60112,le=J?Symbol.for("react.suspense"):60113,pe=J?Symbol.for("react.suspense_list"):60120,fe=J?Symbol.for("react.memo"):60115,ue=J?Symbol.for("react.lazy"):60116,de=J?Symbol.for("react.block"):60121,ge="function"==typeof Symbol&&Symbol.iterator;function me(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=ge&&e[ge]||e["@@iterator"])?e:null}function he(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case te:return"Fragment";case ne:return"Portal";case ie:return"Profiler";case ae:return"StrictMode";case le:return"Suspense";case pe:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case re:return"Context.Consumer";case se:return"Context.Provider";case ce:var n=e.render;return n=n.displayName||n.name||"",e.displayName||(""!==n?"ForwardRef("+n+")":"ForwardRef");case fe:return he(e.type);case de:return he(e.render);case ue:if(e=1===e._status?e._result:null)return he(e)}return null}function Ae(e){var n="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var t="";break e;default:var a=e._debugOwner,i=e._debugSource,s=he(e.type);t=null,a&&(t=he(a.type)),a=s,s="",i?s=" (at "+i.fileName.replace(G,"")+":"+i.lineNumber+")":t&&(s=" (created by "+t+")"),t="\n in "+(a||"Unknown")+s}n+=t,e=e.return}while(e);return n}function ke(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function ye(e){var n=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===n||"radio"===n)}function be(e){e._valueTracker||(e._valueTracker=function(e){var n=ye(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),a=""+e[n];if(!e.hasOwnProperty(n)&&void 0!==t&&"function"==typeof t.get&&"function"==typeof t.set){var i=t.get,s=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return i.call(this)},set:function(e){a=""+e,s.call(this,e)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return a},setValue:function(e){a=""+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e))}function _e(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),a="";return e&&(a=ye(e)?e.checked?"true":"false":e.value),(e=a)!==t&&(n.setValue(e),!0)}function ve(e,n){var t=n.checked;return i({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function we(e,n){var t=null==n.defaultValue?"":n.defaultValue,a=null!=n.checked?n.checked:n.defaultChecked;t=ke(null!=n.value?n.value:t),e._wrapperState={initialChecked:a,initialValue:t,controlled:"checkbox"===n.type||"radio"===n.type?null!=n.checked:null!=n.value}}function Ee(e,n){null!=(n=n.checked)&&Z(e,"checked",n,!1)}function Ce(e,n){Ee(e,n);var t=ke(n.value),a=n.type;if(null!=t)"number"===a?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===a||"reset"===a)return void e.removeAttribute("value");n.hasOwnProperty("value")?Be(e,n.type,t):n.hasOwnProperty("defaultValue")&&Be(e,n.type,ke(n.defaultValue)),null==n.checked&&null!=n.defaultChecked&&(e.defaultChecked=!!n.defaultChecked)}function xe(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var a=n.type;if(!("submit"!==a&&"reset"!==a||void 0!==n.value&&null!==n.value))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function Be(e,n,t){"number"===n&&e.ownerDocument.activeElement===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}function Se(e,n){return e=i({children:void 0},n),(n=function(e){var n="";return a.Children.forEach(e,(function(e){null!=e&&(n+=e)})),n}(n.children))&&(e.children=n),e}function Te(e,n,t,a){if(e=e.options,n){n={};for(var i=0;i<t.length;i++)n["$"+t[i]]=!0;for(t=0;t<e.length;t++)i=n.hasOwnProperty("$"+e[t].value),e[t].selected!==i&&(e[t].selected=i),i&&a&&(e[t].defaultSelected=!0)}else{for(t=""+ke(t),n=null,i=0;i<e.length;i++){if(e[i].value===t)return e[i].selected=!0,void(a&&(e[i].defaultSelected=!0));null!==n||e[i].disabled||(n=e[i])}null!==n&&(n.selected=!0)}}function Pe(e,n){if(null!=n.dangerouslySetInnerHTML)throw Error(r(91));return i({},n,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Ne(e,n){var t=n.value;if(null==t){if(t=n.children,n=n.defaultValue,null!=t){if(null!=n)throw Error(r(92));if(Array.isArray(t)){if(!(1>=t.length))throw Error(r(93));t=t[0]}n=t}null==n&&(n=""),t=n}e._wrapperState={initialValue:ke(t)}}function Me(e,n){var t=ke(n.value),a=ke(n.defaultValue);null!=t&&((t=""+t)!==e.value&&(e.value=t),null==n.defaultValue&&e.defaultValue!==t&&(e.defaultValue=t)),null!=a&&(e.defaultValue=""+a)}function qe(e){var n=e.textContent;n===e._wrapperState.initialValue&&""!==n&&null!==n&&(e.value=n)}var Ie="http://www.w3.org/1999/xhtml",Oe="http://www.w3.org/2000/svg";function ze(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Le(e,n){return null==e||"http://www.w3.org/1999/xhtml"===e?ze(n):"http://www.w3.org/2000/svg"===e&&"foreignObject"===n?"http://www.w3.org/1999/xhtml":e}var Ue,je=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(n,t,a,i){MSApp.execUnsafeLocalFunction((function(){return e(n,t)}))}:e}((function(e,n){if(e.namespaceURI!==Oe||"innerHTML"in e)e.innerHTML=n;else{for((Ue=Ue||document.createElement("div")).innerHTML="<svg>"+n.valueOf().toString()+"</svg>",n=Ue.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}}));function De(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=n)}e.textContent=n}function Fe(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t["Webkit"+e]="webkit"+n,t["Moz"+e]="moz"+n,t}var Re={animationend:Fe("Animation","AnimationEnd"),animationiteration:Fe("Animation","AnimationIteration"),animationstart:Fe("Animation","AnimationStart"),transitionend:Fe("Transition","TransitionEnd")},Ye={},Qe={};function We(e){if(Ye[e])return Ye[e];if(!Re[e])return e;var n,t=Re[e];for(n in t)if(t.hasOwnProperty(n)&&n in Qe)return Ye[e]=t[n];return e}B&&(Qe=document.createElement("div").style,"AnimationEvent"in window||(delete Re.animationend.animation,delete Re.animationiteration.animation,delete Re.animationstart.animation),"TransitionEvent"in window||delete Re.transitionend.transition);var Ve=We("animationend"),He=We("animationiteration"),$e=We("animationstart"),Xe=We("transitionend"),Ke="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ze=new("function"==typeof WeakMap?WeakMap:Map);function Ge(e){var n=Ze.get(e);return void 0===n&&(n=new Map,Ze.set(e,n)),n}function Je(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do{0!=(1026&(n=e).effectTag)&&(t=n.return),e=n.return}while(e)}return 3===n.tag?t:null}function en(e){if(13===e.tag){var n=e.memoizedState;if(null===n&&(null!==(e=e.alternate)&&(n=e.memoizedState)),null!==n)return n.dehydrated}return null}function nn(e){if(Je(e)!==e)throw Error(r(188))}function tn(e){if(!(e=function(e){var n=e.alternate;if(!n){if(null===(n=Je(e)))throw Error(r(188));return n!==e?null:e}for(var t=e,a=n;;){var i=t.return;if(null===i)break;var s=i.alternate;if(null===s){if(null!==(a=i.return)){t=a;continue}break}if(i.child===s.child){for(s=i.child;s;){if(s===t)return nn(i),e;if(s===a)return nn(i),n;s=s.sibling}throw Error(r(188))}if(t.return!==a.return)t=i,a=s;else{for(var o=!1,c=i.child;c;){if(c===t){o=!0,t=i,a=s;break}if(c===a){o=!0,a=i,t=s;break}c=c.sibling}if(!o){for(c=s.child;c;){if(c===t){o=!0,t=s,a=i;break}if(c===a){o=!0,a=s,t=i;break}c=c.sibling}if(!o)throw Error(r(189))}}if(t.alternate!==a)throw Error(r(190))}if(3!==t.tag)throw Error(r(188));return t.stateNode.current===t?e:n}(e)))return null;for(var n=e;;){if(5===n.tag||6===n.tag)return n;if(n.child)n.child.return=n,n=n.child;else{if(n===e)break;for(;!n.sibling;){if(!n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}}return null}function an(e,n){if(null==n)throw Error(r(30));return null==e?n:Array.isArray(e)?Array.isArray(n)?(e.push.apply(e,n),e):(e.push(n),e):Array.isArray(n)?[e].concat(n):[e,n]}function sn(e,n,t){Array.isArray(e)?e.forEach(n,t):e&&n.call(t,e)}var rn=null;function on(e){if(e){var n=e._dispatchListeners,t=e._dispatchInstances;if(Array.isArray(n))for(var a=0;a<n.length&&!e.isPropagationStopped();a++)A(e,n[a],t[a]);else n&&A(e,n,t);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function cn(e){if(null!==e&&(rn=an(rn,e)),e=rn,rn=null,e){if(sn(e,on),rn)throw Error(r(95));if(p)throw e=f,p=!1,f=null,e}}function ln(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function pn(e){if(!B)return!1;var n=(e="on"+e)in document;return n||((n=document.createElement("div")).setAttribute(e,"return;"),n="function"==typeof n[e]),n}var fn=[];function un(e){e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>fn.length&&fn.push(e)}function dn(e,n,t,a){if(fn.length){var i=fn.pop();return i.topLevelType=e,i.eventSystemFlags=a,i.nativeEvent=n,i.targetInst=t,i}return{topLevelType:e,eventSystemFlags:a,nativeEvent:n,targetInst:t,ancestors:[]}}function gn(e){var n=e.targetInst,t=n;do{if(!t){e.ancestors.push(t);break}var a=t;if(3===a.tag)a=a.stateNode.containerInfo;else{for(;a.return;)a=a.return;a=3!==a.tag?null:a.stateNode.containerInfo}if(!a)break;5!==(n=t.tag)&&6!==n||e.ancestors.push(t),t=Bt(a)}while(t);for(t=0;t<e.ancestors.length;t++){n=e.ancestors[t];var i=ln(e.nativeEvent);a=e.topLevelType;var s=e.nativeEvent,r=e.eventSystemFlags;0===t&&(r|=64);for(var o=null,c=0;c<v.length;c++){var l=v[c];l&&(l=l.extractEvents(a,n,s,i,r))&&(o=an(o,l))}cn(o)}}function mn(e,n,t){if(!t.has(e)){switch(e){case"scroll":Xn(n,"scroll",!0);break;case"focus":case"blur":Xn(n,"focus",!0),Xn(n,"blur",!0),t.set("blur",null),t.set("focus",null);break;case"cancel":case"close":pn(e)&&Xn(n,e,!0);break;case"invalid":case"submit":case"reset":break;default:-1===Ke.indexOf(e)&&$n(e,n)}t.set(e,null)}}var hn,An,kn,yn=!1,bn=[],_n=null,vn=null,wn=null,En=new Map,Cn=new Map,xn=[],Bn="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit".split(" "),Sn="focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture".split(" ");function Tn(e,n,t,a,i){return{blockedOn:e,topLevelType:n,eventSystemFlags:32|t,nativeEvent:i,container:a}}function Pn(e,n){switch(e){case"focus":case"blur":_n=null;break;case"dragenter":case"dragleave":vn=null;break;case"mouseover":case"mouseout":wn=null;break;case"pointerover":case"pointerout":En.delete(n.pointerId);break;case"gotpointercapture":case"lostpointercapture":Cn.delete(n.pointerId)}}function Nn(e,n,t,a,i,s){return null===e||e.nativeEvent!==s?(e=Tn(n,t,a,i,s),null!==n&&(null!==(n=St(n))&&An(n)),e):(e.eventSystemFlags|=a,e)}function Mn(e){var n=Bt(e.target);if(null!==n){var t=Je(n);if(null!==t)if(13===(n=t.tag)){if(null!==(n=en(t)))return e.blockedOn=n,void s.unstable_runWithPriority(e.priority,(function(){kn(t)}))}else if(3===n&&t.stateNode.hydrate)return void(e.blockedOn=3===t.tag?t.stateNode.containerInfo:null)}e.blockedOn=null}function qn(e){if(null!==e.blockedOn)return!1;var n=Jn(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);if(null!==n){var t=St(n);return null!==t&&An(t),e.blockedOn=n,!1}return!0}function In(e,n,t){qn(e)&&t.delete(n)}function On(){for(yn=!1;0<bn.length;){var e=bn[0];if(null!==e.blockedOn){null!==(e=St(e.blockedOn))&&hn(e);break}var n=Jn(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);null!==n?e.blockedOn=n:bn.shift()}null!==_n&&qn(_n)&&(_n=null),null!==vn&&qn(vn)&&(vn=null),null!==wn&&qn(wn)&&(wn=null),En.forEach(In),Cn.forEach(In)}function zn(e,n){e.blockedOn===n&&(e.blockedOn=null,yn||(yn=!0,s.unstable_scheduleCallback(s.unstable_NormalPriority,On)))}function Ln(e){function n(n){return zn(n,e)}if(0<bn.length){zn(bn[0],e);for(var t=1;t<bn.length;t++){var a=bn[t];a.blockedOn===e&&(a.blockedOn=null)}}for(null!==_n&&zn(_n,e),null!==vn&&zn(vn,e),null!==wn&&zn(wn,e),En.forEach(n),Cn.forEach(n),t=0;t<xn.length;t++)(a=xn[t]).blockedOn===e&&(a.blockedOn=null);for(;0<xn.length&&null===(t=xn[0]).blockedOn;)Mn(t),null===t.blockedOn&&xn.shift()}var Un={},jn=new Map,Dn=new Map,Fn=["abort","abort",Ve,"animationEnd",He,"animationIteration",$e,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Xe,"transitionEnd","waiting","waiting"];function Rn(e,n){for(var t=0;t<e.length;t+=2){var a=e[t],i=e[t+1],s="on"+(i[0].toUpperCase()+i.slice(1));s={phasedRegistrationNames:{bubbled:s,captured:s+"Capture"},dependencies:[a],eventPriority:n},Dn.set(a,n),jn.set(a,s),Un[i]=s}}Rn("blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Rn("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Rn(Fn,2);for(var Yn="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Qn=0;Qn<Yn.length;Qn++)Dn.set(Yn[Qn],0);var Wn=s.unstable_UserBlockingPriority,Vn=s.unstable_runWithPriority,Hn=!0;function $n(e,n){Xn(n,e,!1)}function Xn(e,n,t){var a=Dn.get(n);switch(void 0===a?2:a){case 0:a=Kn.bind(null,n,1,e);break;case 1:a=Zn.bind(null,n,1,e);break;default:a=Gn.bind(null,n,1,e)}t?e.addEventListener(n,a,!0):e.addEventListener(n,a,!1)}function Kn(e,n,t,a){U||z();var i=Gn,s=U;U=!0;try{O(i,e,n,t,a)}finally{(U=s)||D()}}function Zn(e,n,t,a){Vn(Wn,Gn.bind(null,e,n,t,a))}function Gn(e,n,t,a){if(Hn)if(0<bn.length&&-1<Bn.indexOf(e))e=Tn(null,e,n,t,a),bn.push(e);else{var i=Jn(e,n,t,a);if(null===i)Pn(e,a);else if(-1<Bn.indexOf(e))e=Tn(i,e,n,t,a),bn.push(e);else if(!function(e,n,t,a,i){switch(n){case"focus":return _n=Nn(_n,e,n,t,a,i),!0;case"dragenter":return vn=Nn(vn,e,n,t,a,i),!0;case"mouseover":return wn=Nn(wn,e,n,t,a,i),!0;case"pointerover":var s=i.pointerId;return En.set(s,Nn(En.get(s)||null,e,n,t,a,i)),!0;case"gotpointercapture":return s=i.pointerId,Cn.set(s,Nn(Cn.get(s)||null,e,n,t,a,i)),!0}return!1}(i,e,n,t,a)){Pn(e,a),e=dn(e,a,null,n);try{F(gn,e)}finally{un(e)}}}}function Jn(e,n,t,a){if(null!==(t=Bt(t=ln(a)))){var i=Je(t);if(null===i)t=null;else{var s=i.tag;if(13===s){if(null!==(t=en(i)))return t;t=null}else if(3===s){if(i.stateNode.hydrate)return 3===i.tag?i.stateNode.containerInfo:null;t=null}else i!==t&&(t=null)}}e=dn(e,a,t,n);try{F(gn,e)}finally{un(e)}return null}var et={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},nt=["Webkit","ms","Moz","O"];function tt(e,n,t){return null==n||"boolean"==typeof n||""===n?"":t||"number"!=typeof n||0===n||et.hasOwnProperty(e)&&et[e]?(""+n).trim():n+"px"}function at(e,n){for(var t in e=e.style,n)if(n.hasOwnProperty(t)){var a=0===t.indexOf("--"),i=tt(t,n[t],a);"float"===t&&(t="cssFloat"),a?e.setProperty(t,i):e[t]=i}}Object.keys(et).forEach((function(e){nt.forEach((function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),et[n]=et[e]}))}));var it=i({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function st(e,n){if(n){if(it[e]&&(null!=n.children||null!=n.dangerouslySetInnerHTML))throw Error(r(137,e,""));if(null!=n.dangerouslySetInnerHTML){if(null!=n.children)throw Error(r(60));if("object"!=typeof n.dangerouslySetInnerHTML||!("__html"in n.dangerouslySetInnerHTML))throw Error(r(61))}if(null!=n.style&&"object"!=typeof n.style)throw Error(r(62,""))}}function rt(e,n){if(-1===e.indexOf("-"))return"string"==typeof n.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ot=Ie;function ct(e,n){var t=Ge(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);n=C[n];for(var a=0;a<n.length;a++)mn(n[a],e,t)}function lt(){}function pt(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}function ft(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ut(e,n){var t,a=ft(e);for(e=0;a;){if(3===a.nodeType){if(t=e+a.textContent.length,e<=n&&t>=n)return{node:a,offset:n-e};e=t}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=ft(a)}}function dt(){for(var e=window,n=pt();n instanceof e.HTMLIFrameElement;){try{var t="string"==typeof n.contentWindow.location.href}catch(e){t=!1}if(!t)break;n=pt((e=n.contentWindow).document)}return n}function gt(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&("input"===n&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===n||"true"===e.contentEditable)}var mt=null,ht=null;function At(e,n){switch(e){case"button":case"input":case"select":case"textarea":return!!n.autoFocus}return!1}function kt(e,n){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof n.children||"number"==typeof n.children||"object"==typeof n.dangerouslySetInnerHTML&&null!==n.dangerouslySetInnerHTML&&null!=n.dangerouslySetInnerHTML.__html}var yt="function"==typeof setTimeout?setTimeout:void 0,bt="function"==typeof clearTimeout?clearTimeout:void 0;function _t(e){for(;null!=e;e=e.nextSibling){var n=e.nodeType;if(1===n||3===n)break}return e}function vt(e){e=e.previousSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if("$"===t||"$!"===t||"$?"===t){if(0===n)return e;n--}else"/$"===t&&n++}e=e.previousSibling}return null}var wt=Math.random().toString(36).slice(2),Et="__reactInternalInstance$"+wt,Ct="__reactEventHandlers$"+wt,xt="__reactContainere$"+wt;function Bt(e){var n=e[Et];if(n)return n;for(var t=e.parentNode;t;){if(n=t[xt]||t[Et]){if(t=n.alternate,null!==n.child||null!==t&&null!==t.child)for(e=vt(e);null!==e;){if(t=e[Et])return t;e=vt(e)}return n}t=(e=t).parentNode}return null}function St(e){return!(e=e[Et]||e[xt])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Tt(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(r(33))}function Pt(e){return e[Ct]||null}function Nt(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function Mt(e,n){var t=e.stateNode;if(!t)return null;var a=g(t);if(!a)return null;t=a[n];e:switch(n){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(a=!a.disabled)||(a=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!a;break e;default:e=!1}if(e)return null;if(t&&"function"!=typeof t)throw Error(r(231,n,typeof t));return t}function qt(e,n,t){(n=Mt(e,t.dispatchConfig.phasedRegistrationNames[n]))&&(t._dispatchListeners=an(t._dispatchListeners,n),t._dispatchInstances=an(t._dispatchInstances,e))}function It(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var n=e._targetInst,t=[];n;)t.push(n),n=Nt(n);for(n=t.length;0<n--;)qt(t[n],"captured",e);for(n=0;n<t.length;n++)qt(t[n],"bubbled",e)}}function Ot(e,n,t){e&&t&&t.dispatchConfig.registrationName&&(n=Mt(e,t.dispatchConfig.registrationName))&&(t._dispatchListeners=an(t._dispatchListeners,n),t._dispatchInstances=an(t._dispatchInstances,e))}function zt(e){e&&e.dispatchConfig.registrationName&&Ot(e._targetInst,null,e)}function Lt(e){sn(e,It)}var Ut=null,jt=null,Dt=null;function Ft(){if(Dt)return Dt;var e,n,t=jt,a=t.length,i="value"in Ut?Ut.value:Ut.textContent,s=i.length;for(e=0;e<a&&t[e]===i[e];e++);var r=a-e;for(n=1;n<=r&&t[a-n]===i[s-n];n++);return Dt=i.slice(e,1<n?1-n:void 0)}function Rt(){return!0}function Yt(){return!1}function Qt(e,n,t,a){for(var i in this.dispatchConfig=e,this._targetInst=n,this.nativeEvent=t,e=this.constructor.Interface)e.hasOwnProperty(i)&&((n=e[i])?this[i]=n(t):"target"===i?this.target=a:this[i]=t[i]);return this.isDefaultPrevented=(null!=t.defaultPrevented?t.defaultPrevented:!1===t.returnValue)?Rt:Yt,this.isPropagationStopped=Yt,this}function Wt(e,n,t,a){if(this.eventPool.length){var i=this.eventPool.pop();return this.call(i,e,n,t,a),i}return new this(e,n,t,a)}function Vt(e){if(!(e instanceof this))throw Error(r(279));e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Ht(e){e.eventPool=[],e.getPooled=Wt,e.release=Vt}i(Qt.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Rt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Rt)},persist:function(){this.isPersistent=Rt},isPersistent:Yt,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=Yt,this._dispatchInstances=this._dispatchListeners=null}}),Qt.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},Qt.extend=function(e){function n(){}function t(){return a.apply(this,arguments)}var a=this;n.prototype=a.prototype;var s=new n;return i(s,t.prototype),t.prototype=s,t.prototype.constructor=t,t.Interface=i({},a.Interface,e),t.extend=a.extend,Ht(t),t},Ht(Qt);var $t=Qt.extend({data:null}),Xt=Qt.extend({data:null}),Kt=[9,13,27,32],Zt=B&&"CompositionEvent"in window,Gt=null;B&&"documentMode"in document&&(Gt=document.documentMode);var Jt=B&&"TextEvent"in window&&!Gt,ea=B&&(!Zt||Gt&&8<Gt&&11>=Gt),na=String.fromCharCode(32),ta={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},aa=!1;function ia(e,n){switch(e){case"keyup":return-1!==Kt.indexOf(n.keyCode);case"keydown":return 229!==n.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function sa(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var ra=!1;var oa={eventTypes:ta,extractEvents:function(e,n,t,a){var i;if(Zt)e:{switch(e){case"compositionstart":var s=ta.compositionStart;break e;case"compositionend":s=ta.compositionEnd;break e;case"compositionupdate":s=ta.compositionUpdate;break e}s=void 0}else ra?ia(e,t)&&(s=ta.compositionEnd):"keydown"===e&&229===t.keyCode&&(s=ta.compositionStart);return s?(ea&&"ko"!==t.locale&&(ra||s!==ta.compositionStart?s===ta.compositionEnd&&ra&&(i=Ft()):(jt="value"in(Ut=a)?Ut.value:Ut.textContent,ra=!0)),s=$t.getPooled(s,n,t,a),i?s.data=i:null!==(i=sa(t))&&(s.data=i),Lt(s),i=s):i=null,(e=Jt?function(e,n){switch(e){case"compositionend":return sa(n);case"keypress":return 32!==n.which?null:(aa=!0,na);case"textInput":return(e=n.data)===na&&aa?null:e;default:return null}}(e,t):function(e,n){if(ra)return"compositionend"===e||!Zt&&ia(e,n)?(e=Ft(),Dt=jt=Ut=null,ra=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case"compositionend":return ea&&"ko"!==n.locale?null:n.data;default:return null}}(e,t))?((n=Xt.getPooled(ta.beforeInput,n,t,a)).data=e,Lt(n)):n=null,null===i?n:null===n?i:[i,n]}},ca={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function la(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===n?!!ca[e.type]:"textarea"===n}var pa={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}};function fa(e,n,t){return(e=Qt.getPooled(pa.change,e,n,t)).type="change",M(t),Lt(e),e}var ua=null,da=null;function ga(e){cn(e)}function ma(e){if(_e(Tt(e)))return e}function ha(e,n){if("change"===e)return n}var Aa=!1;function ka(){ua&&(ua.detachEvent("onpropertychange",ya),da=ua=null)}function ya(e){if("value"===e.propertyName&&ma(da))if(e=fa(da,e,ln(e)),U)cn(e);else{U=!0;try{I(ga,e)}finally{U=!1,D()}}}function ba(e,n,t){"focus"===e?(ka(),da=t,(ua=n).attachEvent("onpropertychange",ya)):"blur"===e&&ka()}function _a(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return ma(da)}function va(e,n){if("click"===e)return ma(n)}function wa(e,n){if("input"===e||"change"===e)return ma(n)}B&&(Aa=pn("input")&&(!document.documentMode||9<document.documentMode));var Ea={eventTypes:pa,_isInputEventSupported:Aa,extractEvents:function(e,n,t,a){var i=n?Tt(n):window,s=i.nodeName&&i.nodeName.toLowerCase();if("select"===s||"input"===s&&"file"===i.type)var r=ha;else if(la(i))if(Aa)r=wa;else{r=_a;var o=ba}else(s=i.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===i.type||"radio"===i.type)&&(r=va);if(r&&(r=r(e,n)))return fa(r,t,a);o&&o(e,i,n),"blur"===e&&(e=i._wrapperState)&&e.controlled&&"number"===i.type&&Be(i,"number",i.value)}},Ca=Qt.extend({view:null,detail:null}),xa={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Ba(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):!!(e=xa[e])&&!!n[e]}function Sa(){return Ba}var Ta=0,Pa=0,Na=!1,Ma=!1,qa=Ca.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Sa,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if("movementX"in e)return e.movementX;var n=Ta;return Ta=e.screenX,Na?"mousemove"===e.type?e.screenX-n:0:(Na=!0,0)},movementY:function(e){if("movementY"in e)return e.movementY;var n=Pa;return Pa=e.screenY,Ma?"mousemove"===e.type?e.screenY-n:0:(Ma=!0,0)}}),Ia=qa.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Oa={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout","pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},za={eventTypes:Oa,extractEvents:function(e,n,t,a,i){var s="mouseover"===e||"pointerover"===e,r="mouseout"===e||"pointerout"===e;if(s&&0==(32&i)&&(t.relatedTarget||t.fromElement)||!r&&!s)return null;(s=a.window===a?a:(s=a.ownerDocument)?s.defaultView||s.parentWindow:window,r)?(r=n,null!==(n=(n=t.relatedTarget||t.toElement)?Bt(n):null)&&(n!==Je(n)||5!==n.tag&&6!==n.tag)&&(n=null)):r=null;if(r===n)return null;if("mouseout"===e||"mouseover"===e)var o=qa,c=Oa.mouseLeave,l=Oa.mouseEnter,p="mouse";else"pointerout"!==e&&"pointerover"!==e||(o=Ia,c=Oa.pointerLeave,l=Oa.pointerEnter,p="pointer");if(e=null==r?s:Tt(r),s=null==n?s:Tt(n),(c=o.getPooled(c,r,t,a)).type=p+"leave",c.target=e,c.relatedTarget=s,(t=o.getPooled(l,n,t,a)).type=p+"enter",t.target=s,t.relatedTarget=e,p=n,(a=r)&&p)e:{for(l=p,r=0,e=o=a;e;e=Nt(e))r++;for(e=0,n=l;n;n=Nt(n))e++;for(;0<r-e;)o=Nt(o),r--;for(;0<e-r;)l=Nt(l),e--;for(;r--;){if(o===l||o===l.alternate)break e;o=Nt(o),l=Nt(l)}o=null}else o=null;for(l=o,o=[];a&&a!==l&&(null===(r=a.alternate)||r!==l);)o.push(a),a=Nt(a);for(a=[];p&&p!==l&&(null===(r=p.alternate)||r!==l);)a.push(p),p=Nt(p);for(p=0;p<o.length;p++)Ot(o[p],"bubbled",c);for(p=a.length;0<p--;)Ot(a[p],"captured",t);return 0==(64&i)?[c]:[c,t]}};var La="function"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n},Ua=Object.prototype.hasOwnProperty;function ja(e,n){if(La(e,n))return!0;if("object"!=typeof e||null===e||"object"!=typeof n||null===n)return!1;var t=Object.keys(e),a=Object.keys(n);if(t.length!==a.length)return!1;for(a=0;a<t.length;a++)if(!Ua.call(n,t[a])||!La(e[t[a]],n[t[a]]))return!1;return!0}var Da=B&&"documentMode"in document&&11>=document.documentMode,Fa={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},Ra=null,Ya=null,Qa=null,Wa=!1;function Va(e,n){var t=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;return Wa||null==Ra||Ra!==pt(t)?null:("selectionStart"in(t=Ra)&>(t)?t={start:t.selectionStart,end:t.selectionEnd}:t={anchorNode:(t=(t.ownerDocument&&t.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset},Qa&&ja(Qa,t)?null:(Qa=t,(e=Qt.getPooled(Fa.select,Ya,e,n)).type="select",e.target=Ra,Lt(e),e))}var Ha={eventTypes:Fa,extractEvents:function(e,n,t,a,i,s){if(!(s=!(i=s||(a.window===a?a.document:9===a.nodeType?a:a.ownerDocument)))){e:{i=Ge(i),s=C.onSelect;for(var r=0;r<s.length;r++)if(!i.has(s[r])){i=!1;break e}i=!0}s=!i}if(s)return null;switch(i=n?Tt(n):window,e){case"focus":(la(i)||"true"===i.contentEditable)&&(Ra=i,Ya=n,Qa=null);break;case"blur":Qa=Ya=Ra=null;break;case"mousedown":Wa=!0;break;case"contextmenu":case"mouseup":case"dragend":return Wa=!1,Va(t,a);case"selectionchange":if(Da)break;case"keydown":case"keyup":return Va(t,a)}return null}},$a=Qt.extend({animationName:null,elapsedTime:null,pseudoElement:null}),Xa=Qt.extend({clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Ka=Ca.extend({relatedTarget:null});function Za(e){var n=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===n&&(e=13):e=n,10===e&&(e=13),32<=e||13===e?e:0}var Ga={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Ja={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},ei=Ca.extend({key:function(e){if(e.key){var n=Ga[e.key]||e.key;if("Unidentified"!==n)return n}return"keypress"===e.type?13===(e=Za(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Ja[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Sa,charCode:function(e){return"keypress"===e.type?Za(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Za(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),ni=qa.extend({dataTransfer:null}),ti=Ca.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Sa}),ai=Qt.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),ii=qa.extend({deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),si={eventTypes:Un,extractEvents:function(e,n,t,a){var i=jn.get(e);if(!i)return null;switch(e){case"keypress":if(0===Za(t))return null;case"keydown":case"keyup":e=ei;break;case"blur":case"focus":e=Ka;break;case"click":if(2===t.button)return null;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":e=qa;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":e=ni;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":e=ti;break;case Ve:case He:case $e:e=$a;break;case Xe:e=ai;break;case"scroll":e=Ca;break;case"wheel":e=ii;break;case"copy":case"cut":case"paste":e=Xa;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":e=Ia;break;default:e=Qt}return Lt(n=e.getPooled(i,n,t,a)),n}};if(k)throw Error(r(101));k=Array.prototype.slice.call("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),b(),g=Pt,m=St,h=Tt,x({SimpleEventPlugin:si,EnterLeaveEventPlugin:za,ChangeEventPlugin:Ea,SelectEventPlugin:Ha,BeforeInputEventPlugin:oa});var ri=[],oi=-1;function ci(e){0>oi||(e.current=ri[oi],ri[oi]=null,oi--)}function li(e,n){oi++,ri[oi]=e.current,e.current=n}var pi={},fi={current:pi},ui={current:!1},di=pi;function gi(e,n){var t=e.type.contextTypes;if(!t)return pi;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===n)return a.__reactInternalMemoizedMaskedChildContext;var i,s={};for(i in t)s[i]=n[i];return a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=s),s}function mi(e){return null!=(e=e.childContextTypes)}function hi(){ci(ui),ci(fi)}function Ai(e,n,t){if(fi.current!==pi)throw Error(r(168));li(fi,n),li(ui,t)}function ki(e,n,t){var a=e.stateNode;if(e=n.childContextTypes,"function"!=typeof a.getChildContext)return t;for(var s in a=a.getChildContext())if(!(s in e))throw Error(r(108,he(n)||"Unknown",s));return i({},t,{},a)}function yi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||pi,di=fi.current,li(fi,e),li(ui,ui.current),!0}function bi(e,n,t){var a=e.stateNode;if(!a)throw Error(r(169));t?(e=ki(e,n,di),a.__reactInternalMemoizedMergedChildContext=e,ci(ui),ci(fi),li(fi,e)):ci(ui),li(ui,t)}var _i=s.unstable_runWithPriority,vi=s.unstable_scheduleCallback,wi=s.unstable_cancelCallback,Ei=s.unstable_requestPaint,Ci=s.unstable_now,xi=s.unstable_getCurrentPriorityLevel,Bi=s.unstable_ImmediatePriority,Si=s.unstable_UserBlockingPriority,Ti=s.unstable_NormalPriority,Pi=s.unstable_LowPriority,Ni=s.unstable_IdlePriority,Mi={},qi=s.unstable_shouldYield,Ii=void 0!==Ei?Ei:function(){},Oi=null,zi=null,Li=!1,Ui=Ci(),ji=1e4>Ui?Ci:function(){return Ci()-Ui};function Di(){switch(xi()){case Bi:return 99;case Si:return 98;case Ti:return 97;case Pi:return 96;case Ni:return 95;default:throw Error(r(332))}}function Fi(e){switch(e){case 99:return Bi;case 98:return Si;case 97:return Ti;case 96:return Pi;case 95:return Ni;default:throw Error(r(332))}}function Ri(e,n){return e=Fi(e),_i(e,n)}function Yi(e,n,t){return e=Fi(e),vi(e,n,t)}function Qi(e){return null===Oi?(Oi=[e],zi=vi(Bi,Vi)):Oi.push(e),Mi}function Wi(){if(null!==zi){var e=zi;zi=null,wi(e)}Vi()}function Vi(){if(!Li&&null!==Oi){Li=!0;var e=0;try{var n=Oi;Ri(99,(function(){for(;e<n.length;e++){var t=n[e];do{t=t(!0)}while(null!==t)}})),Oi=null}catch(n){throw null!==Oi&&(Oi=Oi.slice(e+1)),vi(Bi,Wi),n}finally{Li=!1}}}function Hi(e,n,t){return 1073741821-(1+((1073741821-e+n/10)/(t/=10)|0))*t}function $i(e,n){if(e&&e.defaultProps)for(var t in n=i({},n),e=e.defaultProps)void 0===n[t]&&(n[t]=e[t]);return n}var Xi={current:null},Ki=null,Zi=null,Gi=null;function Ji(){Gi=Zi=Ki=null}function es(e){var n=Xi.current;ci(Xi),e.type._context._currentValue=n}function ns(e,n){for(;null!==e;){var t=e.alternate;if(e.childExpirationTime<n)e.childExpirationTime=n,null!==t&&t.childExpirationTime<n&&(t.childExpirationTime=n);else{if(!(null!==t&&t.childExpirationTime<n))break;t.childExpirationTime=n}e=e.return}}function ts(e,n){Ki=e,Gi=Zi=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=n&&(Tr=!0),e.firstContext=null)}function as(e,n){if(Gi!==e&&!1!==n&&0!==n)if("number"==typeof n&&1073741823!==n||(Gi=e,n=1073741823),n={context:e,observedBits:n,next:null},null===Zi){if(null===Ki)throw Error(r(308));Zi=n,Ki.dependencies={expirationTime:0,firstContext:n,responders:null}}else Zi=Zi.next=n;return e._currentValue}var is=!1;function ss(e){e.updateQueue={baseState:e.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}function rs(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,baseQueue:e.baseQueue,shared:e.shared,effects:e.effects})}function os(e,n){return(e={expirationTime:e,suspenseConfig:n,tag:0,payload:null,callback:null,next:null}).next=e}function cs(e,n){if(null!==(e=e.updateQueue)){var t=(e=e.shared).pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}}function ls(e,n){var t=e.alternate;null!==t&&rs(t,e),null===(t=(e=e.updateQueue).baseQueue)?(e.baseQueue=n.next=n,n.next=n):(n.next=t.next,t.next=n)}function ps(e,n,t,a){var s=e.updateQueue;is=!1;var r=s.baseQueue,o=s.shared.pending;if(null!==o){if(null!==r){var c=r.next;r.next=o.next,o.next=c}r=o,s.shared.pending=null,null!==(c=e.alternate)&&(null!==(c=c.updateQueue)&&(c.baseQueue=o))}if(null!==r){c=r.next;var l=s.baseState,p=0,f=null,u=null,d=null;if(null!==c)for(var g=c;;){if((o=g.expirationTime)<a){var m={expirationTime:g.expirationTime,suspenseConfig:g.suspenseConfig,tag:g.tag,payload:g.payload,callback:g.callback,next:null};null===d?(u=d=m,f=l):d=d.next=m,o>p&&(p=o)}else{null!==d&&(d=d.next={expirationTime:1073741823,suspenseConfig:g.suspenseConfig,tag:g.tag,payload:g.payload,callback:g.callback,next:null}),sc(o,g.suspenseConfig);e:{var h=e,A=g;switch(o=n,m=t,A.tag){case 1:if("function"==typeof(h=A.payload)){l=h.call(m,l,o);break e}l=h;break e;case 3:h.effectTag=-4097&h.effectTag|64;case 0:if(null==(o="function"==typeof(h=A.payload)?h.call(m,l,o):h))break e;l=i({},l,o);break e;case 2:is=!0}}null!==g.callback&&(e.effectTag|=32,null===(o=s.effects)?s.effects=[g]:o.push(g))}if(null===(g=g.next)||g===c){if(null===(o=s.shared.pending))break;g=r.next=o.next,o.next=c,s.baseQueue=r=o,s.shared.pending=null}}null===d?f=l:d.next=u,s.baseState=f,s.baseQueue=d,rc(p),e.expirationTime=p,e.memoizedState=l}}function fs(e,n,t){if(e=n.effects,n.effects=null,null!==e)for(n=0;n<e.length;n++){var a=e[n],i=a.callback;if(null!==i){if(a.callback=null,a=i,i=t,"function"!=typeof a)throw Error(r(191,a));a.call(i)}}}var us=K.ReactCurrentBatchConfig,ds=(new a.Component).refs;function gs(e,n,t,a){t=null==(t=t(a,n=e.memoizedState))?n:i({},n,t),e.memoizedState=t,0===e.expirationTime&&(e.updateQueue.baseState=t)}var ms={isMounted:function(e){return!!(e=e._reactInternalFiber)&&Je(e)===e},enqueueSetState:function(e,n,t){e=e._reactInternalFiber;var a=Vo(),i=us.suspense;(i=os(a=Ho(a,e,i),i)).payload=n,null!=t&&(i.callback=t),cs(e,i),$o(e,a)},enqueueReplaceState:function(e,n,t){e=e._reactInternalFiber;var a=Vo(),i=us.suspense;(i=os(a=Ho(a,e,i),i)).tag=1,i.payload=n,null!=t&&(i.callback=t),cs(e,i),$o(e,a)},enqueueForceUpdate:function(e,n){e=e._reactInternalFiber;var t=Vo(),a=us.suspense;(a=os(t=Ho(t,e,a),a)).tag=2,null!=n&&(a.callback=n),cs(e,a),$o(e,t)}};function hs(e,n,t,a,i,s,r){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(a,s,r):!n.prototype||!n.prototype.isPureReactComponent||(!ja(t,a)||!ja(i,s))}function As(e,n,t){var a=!1,i=pi,s=n.contextType;return"object"==typeof s&&null!==s?s=as(s):(i=mi(n)?di:fi.current,s=(a=null!=(a=n.contextTypes))?gi(e,i):pi),n=new n(t,s),e.memoizedState=null!==n.state&&void 0!==n.state?n.state:null,n.updater=ms,e.stateNode=n,n._reactInternalFiber=e,a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=i,e.__reactInternalMemoizedMaskedChildContext=s),n}function ks(e,n,t,a){e=n.state,"function"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,a),"function"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,a),n.state!==e&&ms.enqueueReplaceState(n,n.state,null)}function ys(e,n,t,a){var i=e.stateNode;i.props=t,i.state=e.memoizedState,i.refs=ds,ss(e);var s=n.contextType;"object"==typeof s&&null!==s?i.context=as(s):(s=mi(n)?di:fi.current,i.context=gi(e,s)),ps(e,t,i,a),i.state=e.memoizedState,"function"==typeof(s=n.getDerivedStateFromProps)&&(gs(e,n,s,t),i.state=e.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof i.getSnapshotBeforeUpdate||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||(n=i.state,"function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount(),n!==i.state&&ms.enqueueReplaceState(i,i.state,null),ps(e,t,i,a),i.state=e.memoizedState),"function"==typeof i.componentDidMount&&(e.effectTag|=4)}var bs=Array.isArray;function _s(e,n,t){if(null!==(e=t.ref)&&"function"!=typeof e&&"object"!=typeof e){if(t._owner){if(t=t._owner){if(1!==t.tag)throw Error(r(309));var a=t.stateNode}if(!a)throw Error(r(147,e));var i=""+e;return null!==n&&null!==n.ref&&"function"==typeof n.ref&&n.ref._stringRef===i?n.ref:((n=function(e){var n=a.refs;n===ds&&(n=a.refs={}),null===e?delete n[i]:n[i]=e})._stringRef=i,n)}if("string"!=typeof e)throw Error(r(284));if(!t._owner)throw Error(r(290,e))}return e}function vs(e,n){if("textarea"!==e.type)throw Error(r(31,"[object Object]"===Object.prototype.toString.call(n)?"object with keys {"+Object.keys(n).join(", ")+"}":n,""))}function ws(e){function n(n,t){if(e){var a=n.lastEffect;null!==a?(a.nextEffect=t,n.lastEffect=t):n.firstEffect=n.lastEffect=t,t.nextEffect=null,t.effectTag=8}}function t(t,a){if(!e)return null;for(;null!==a;)n(t,a),a=a.sibling;return null}function a(e,n){for(e=new Map;null!==n;)null!==n.key?e.set(n.key,n):e.set(n.index,n),n=n.sibling;return e}function i(e,n){return(e=xc(e,n)).index=0,e.sibling=null,e}function s(n,t,a){return n.index=a,e?null!==(a=n.alternate)?(a=a.index)<t?(n.effectTag=2,t):a:(n.effectTag=2,t):t}function o(n){return e&&null===n.alternate&&(n.effectTag=2),n}function c(e,n,t,a){return null===n||6!==n.tag?((n=Tc(t,e.mode,a)).return=e,n):((n=i(n,t)).return=e,n)}function l(e,n,t,a){return null!==n&&n.elementType===t.type?((a=i(n,t.props)).ref=_s(e,n,t),a.return=e,a):((a=Bc(t.type,t.key,t.props,null,e.mode,a)).ref=_s(e,n,t),a.return=e,a)}function p(e,n,t,a){return null===n||4!==n.tag||n.stateNode.containerInfo!==t.containerInfo||n.stateNode.implementation!==t.implementation?((n=Pc(t,e.mode,a)).return=e,n):((n=i(n,t.children||[])).return=e,n)}function f(e,n,t,a,s){return null===n||7!==n.tag?((n=Sc(t,e.mode,a,s)).return=e,n):((n=i(n,t)).return=e,n)}function u(e,n,t){if("string"==typeof n||"number"==typeof n)return(n=Tc(""+n,e.mode,t)).return=e,n;if("object"==typeof n&&null!==n){switch(n.$$typeof){case ee:return(t=Bc(n.type,n.key,n.props,null,e.mode,t)).ref=_s(e,null,n),t.return=e,t;case ne:return(n=Pc(n,e.mode,t)).return=e,n}if(bs(n)||me(n))return(n=Sc(n,e.mode,t,null)).return=e,n;vs(e,n)}return null}function d(e,n,t,a){var i=null!==n?n.key:null;if("string"==typeof t||"number"==typeof t)return null!==i?null:c(e,n,""+t,a);if("object"==typeof t&&null!==t){switch(t.$$typeof){case ee:return t.key===i?t.type===te?f(e,n,t.props.children,a,i):l(e,n,t,a):null;case ne:return t.key===i?p(e,n,t,a):null}if(bs(t)||me(t))return null!==i?null:f(e,n,t,a,null);vs(e,t)}return null}function g(e,n,t,a,i){if("string"==typeof a||"number"==typeof a)return c(n,e=e.get(t)||null,""+a,i);if("object"==typeof a&&null!==a){switch(a.$$typeof){case ee:return e=e.get(null===a.key?t:a.key)||null,a.type===te?f(n,e,a.props.children,i,a.key):l(n,e,a,i);case ne:return p(n,e=e.get(null===a.key?t:a.key)||null,a,i)}if(bs(a)||me(a))return f(n,e=e.get(t)||null,a,i,null);vs(n,a)}return null}function m(i,r,o,c){for(var l=null,p=null,f=r,m=r=0,h=null;null!==f&&m<o.length;m++){f.index>m?(h=f,f=null):h=f.sibling;var A=d(i,f,o[m],c);if(null===A){null===f&&(f=h);break}e&&f&&null===A.alternate&&n(i,f),r=s(A,r,m),null===p?l=A:p.sibling=A,p=A,f=h}if(m===o.length)return t(i,f),l;if(null===f){for(;m<o.length;m++)null!==(f=u(i,o[m],c))&&(r=s(f,r,m),null===p?l=f:p.sibling=f,p=f);return l}for(f=a(i,f);m<o.length;m++)null!==(h=g(f,i,m,o[m],c))&&(e&&null!==h.alternate&&f.delete(null===h.key?m:h.key),r=s(h,r,m),null===p?l=h:p.sibling=h,p=h);return e&&f.forEach((function(e){return n(i,e)})),l}function h(i,o,c,l){var p=me(c);if("function"!=typeof p)throw Error(r(150));if(null==(c=p.call(c)))throw Error(r(151));for(var f=p=null,m=o,h=o=0,A=null,k=c.next();null!==m&&!k.done;h++,k=c.next()){m.index>h?(A=m,m=null):A=m.sibling;var y=d(i,m,k.value,l);if(null===y){null===m&&(m=A);break}e&&m&&null===y.alternate&&n(i,m),o=s(y,o,h),null===f?p=y:f.sibling=y,f=y,m=A}if(k.done)return t(i,m),p;if(null===m){for(;!k.done;h++,k=c.next())null!==(k=u(i,k.value,l))&&(o=s(k,o,h),null===f?p=k:f.sibling=k,f=k);return p}for(m=a(i,m);!k.done;h++,k=c.next())null!==(k=g(m,i,h,k.value,l))&&(e&&null!==k.alternate&&m.delete(null===k.key?h:k.key),o=s(k,o,h),null===f?p=k:f.sibling=k,f=k);return e&&m.forEach((function(e){return n(i,e)})),p}return function(e,a,s,c){var l="object"==typeof s&&null!==s&&s.type===te&&null===s.key;l&&(s=s.props.children);var p="object"==typeof s&&null!==s;if(p)switch(s.$$typeof){case ee:e:{for(p=s.key,l=a;null!==l;){if(l.key===p){switch(l.tag){case 7:if(s.type===te){t(e,l.sibling),(a=i(l,s.props.children)).return=e,e=a;break e}break;default:if(l.elementType===s.type){t(e,l.sibling),(a=i(l,s.props)).ref=_s(e,l,s),a.return=e,e=a;break e}}t(e,l);break}n(e,l),l=l.sibling}s.type===te?((a=Sc(s.props.children,e.mode,c,s.key)).return=e,e=a):((c=Bc(s.type,s.key,s.props,null,e.mode,c)).ref=_s(e,a,s),c.return=e,e=c)}return o(e);case ne:e:{for(l=s.key;null!==a;){if(a.key===l){if(4===a.tag&&a.stateNode.containerInfo===s.containerInfo&&a.stateNode.implementation===s.implementation){t(e,a.sibling),(a=i(a,s.children||[])).return=e,e=a;break e}t(e,a);break}n(e,a),a=a.sibling}(a=Pc(s,e.mode,c)).return=e,e=a}return o(e)}if("string"==typeof s||"number"==typeof s)return s=""+s,null!==a&&6===a.tag?(t(e,a.sibling),(a=i(a,s)).return=e,e=a):(t(e,a),(a=Tc(s,e.mode,c)).return=e,e=a),o(e);if(bs(s))return m(e,a,s,c);if(me(s))return h(e,a,s,c);if(p&&vs(e,s),void 0===s&&!l)switch(e.tag){case 1:case 0:throw e=e.type,Error(r(152,e.displayName||e.name||"Component"))}return t(e,a)}}var Es=ws(!0),Cs=ws(!1),xs={},Bs={current:xs},Ss={current:xs},Ts={current:xs};function Ps(e){if(e===xs)throw Error(r(174));return e}function Ns(e,n){switch(li(Ts,n),li(Ss,e),li(Bs,xs),e=n.nodeType){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:Le(null,"");break;default:n=Le(n=(e=8===e?n.parentNode:n).namespaceURI||null,e=e.tagName)}ci(Bs),li(Bs,n)}function Ms(){ci(Bs),ci(Ss),ci(Ts)}function qs(e){Ps(Ts.current);var n=Ps(Bs.current),t=Le(n,e.type);n!==t&&(li(Ss,e),li(Bs,t))}function Is(e){Ss.current===e&&(ci(Bs),ci(Ss))}var Os={current:0};function zs(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||"$?"===t.data||"$!"===t.data))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(64&n.effectTag))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}function Ls(e,n){return{responder:e,props:n}}var Us=K.ReactCurrentDispatcher,js=K.ReactCurrentBatchConfig,Ds=0,Fs=null,Rs=null,Ys=null,Qs=!1;function Ws(){throw Error(r(321))}function Vs(e,n){if(null===n)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!La(e[t],n[t]))return!1;return!0}function Hs(e,n,t,a,i,s){if(Ds=s,Fs=n,n.memoizedState=null,n.updateQueue=null,n.expirationTime=0,Us.current=null===e||null===e.memoizedState?hr:Ar,e=t(a,i),n.expirationTime===Ds){s=0;do{if(n.expirationTime=0,!(25>s))throw Error(r(301));s+=1,Ys=Rs=null,n.updateQueue=null,Us.current=kr,e=t(a,i)}while(n.expirationTime===Ds)}if(Us.current=mr,n=null!==Rs&&null!==Rs.next,Ds=0,Ys=Rs=Fs=null,Qs=!1,n)throw Error(r(300));return e}function $s(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Ys?Fs.memoizedState=Ys=e:Ys=Ys.next=e,Ys}function Xs(){if(null===Rs){var e=Fs.alternate;e=null!==e?e.memoizedState:null}else e=Rs.next;var n=null===Ys?Fs.memoizedState:Ys.next;if(null!==n)Ys=n,Rs=e;else{if(null===e)throw Error(r(310));e={memoizedState:(Rs=e).memoizedState,baseState:Rs.baseState,baseQueue:Rs.baseQueue,queue:Rs.queue,next:null},null===Ys?Fs.memoizedState=Ys=e:Ys=Ys.next=e}return Ys}function Ks(e,n){return"function"==typeof n?n(e):n}function Zs(e){var n=Xs(),t=n.queue;if(null===t)throw Error(r(311));t.lastRenderedReducer=e;var a=Rs,i=a.baseQueue,s=t.pending;if(null!==s){if(null!==i){var o=i.next;i.next=s.next,s.next=o}a.baseQueue=i=s,t.pending=null}if(null!==i){i=i.next,a=a.baseState;var c=o=s=null,l=i;do{var p=l.expirationTime;if(p<Ds){var f={expirationTime:l.expirationTime,suspenseConfig:l.suspenseConfig,action:l.action,eagerReducer:l.eagerReducer,eagerState:l.eagerState,next:null};null===c?(o=c=f,s=a):c=c.next=f,p>Fs.expirationTime&&(Fs.expirationTime=p,rc(p))}else null!==c&&(c=c.next={expirationTime:1073741823,suspenseConfig:l.suspenseConfig,action:l.action,eagerReducer:l.eagerReducer,eagerState:l.eagerState,next:null}),sc(p,l.suspenseConfig),a=l.eagerReducer===e?l.eagerState:e(a,l.action);l=l.next}while(null!==l&&l!==i);null===c?s=a:c.next=o,La(a,n.memoizedState)||(Tr=!0),n.memoizedState=a,n.baseState=s,n.baseQueue=c,t.lastRenderedState=a}return[n.memoizedState,t.dispatch]}function Gs(e){var n=Xs(),t=n.queue;if(null===t)throw Error(r(311));t.lastRenderedReducer=e;var a=t.dispatch,i=t.pending,s=n.memoizedState;if(null!==i){t.pending=null;var o=i=i.next;do{s=e(s,o.action),o=o.next}while(o!==i);La(s,n.memoizedState)||(Tr=!0),n.memoizedState=s,null===n.baseQueue&&(n.baseState=s),t.lastRenderedState=s}return[s,a]}function Js(e){var n=$s();return"function"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e=(e=n.queue={pending:null,dispatch:null,lastRenderedReducer:Ks,lastRenderedState:e}).dispatch=gr.bind(null,Fs,e),[n.memoizedState,e]}function er(e,n,t,a){return e={tag:e,create:n,destroy:t,deps:a,next:null},null===(n=Fs.updateQueue)?(n={lastEffect:null},Fs.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(a=t.next,t.next=e,e.next=a,n.lastEffect=e),e}function nr(){return Xs().memoizedState}function tr(e,n,t,a){var i=$s();Fs.effectTag|=e,i.memoizedState=er(1|n,t,void 0,void 0===a?null:a)}function ar(e,n,t,a){var i=Xs();a=void 0===a?null:a;var s=void 0;if(null!==Rs){var r=Rs.memoizedState;if(s=r.destroy,null!==a&&Vs(a,r.deps))return void er(n,t,s,a)}Fs.effectTag|=e,i.memoizedState=er(1|n,t,s,a)}function ir(e,n){return tr(516,4,e,n)}function sr(e,n){return ar(516,4,e,n)}function rr(e,n){return ar(4,2,e,n)}function or(e,n){return"function"==typeof n?(e=e(),n(e),function(){n(null)}):null!=n?(e=e(),n.current=e,function(){n.current=null}):void 0}function cr(e,n,t){return t=null!=t?t.concat([e]):null,ar(4,2,or.bind(null,n,e),t)}function lr(){}function pr(e,n){return $s().memoizedState=[e,void 0===n?null:n],e}function fr(e,n){var t=Xs();n=void 0===n?null:n;var a=t.memoizedState;return null!==a&&null!==n&&Vs(n,a[1])?a[0]:(t.memoizedState=[e,n],e)}function ur(e,n){var t=Xs();n=void 0===n?null:n;var a=t.memoizedState;return null!==a&&null!==n&&Vs(n,a[1])?a[0]:(e=e(),t.memoizedState=[e,n],e)}function dr(e,n,t){var a=Di();Ri(98>a?98:a,(function(){e(!0)})),Ri(97<a?97:a,(function(){var a=js.suspense;js.suspense=void 0===n?null:n;try{e(!1),t()}finally{js.suspense=a}}))}function gr(e,n,t){var a=Vo(),i=us.suspense;i={expirationTime:a=Ho(a,e,i),suspenseConfig:i,action:t,eagerReducer:null,eagerState:null,next:null};var s=n.pending;if(null===s?i.next=i:(i.next=s.next,s.next=i),n.pending=i,s=e.alternate,e===Fs||null!==s&&s===Fs)Qs=!0,i.expirationTime=Ds,Fs.expirationTime=Ds;else{if(0===e.expirationTime&&(null===s||0===s.expirationTime)&&null!==(s=n.lastRenderedReducer))try{var r=n.lastRenderedState,o=s(r,t);if(i.eagerReducer=s,i.eagerState=o,La(o,r))return}catch(e){}$o(e,a)}}var mr={readContext:as,useCallback:Ws,useContext:Ws,useEffect:Ws,useImperativeHandle:Ws,useLayoutEffect:Ws,useMemo:Ws,useReducer:Ws,useRef:Ws,useState:Ws,useDebugValue:Ws,useResponder:Ws,useDeferredValue:Ws,useTransition:Ws},hr={readContext:as,useCallback:pr,useContext:as,useEffect:ir,useImperativeHandle:function(e,n,t){return t=null!=t?t.concat([e]):null,tr(4,2,or.bind(null,n,e),t)},useLayoutEffect:function(e,n){return tr(4,2,e,n)},useMemo:function(e,n){var t=$s();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var a=$s();return n=void 0!==t?t(n):n,a.memoizedState=a.baseState=n,e=(e=a.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:n}).dispatch=gr.bind(null,Fs,e),[a.memoizedState,e]},useRef:function(e){return e={current:e},$s().memoizedState=e},useState:Js,useDebugValue:lr,useResponder:Ls,useDeferredValue:function(e,n){var t=Js(e),a=t[0],i=t[1];return ir((function(){var t=js.suspense;js.suspense=void 0===n?null:n;try{i(e)}finally{js.suspense=t}}),[e,n]),a},useTransition:function(e){var n=Js(!1),t=n[0];return n=n[1],[pr(dr.bind(null,n,e),[n,e]),t]}},Ar={readContext:as,useCallback:fr,useContext:as,useEffect:sr,useImperativeHandle:cr,useLayoutEffect:rr,useMemo:ur,useReducer:Zs,useRef:nr,useState:function(){return Zs(Ks)},useDebugValue:lr,useResponder:Ls,useDeferredValue:function(e,n){var t=Zs(Ks),a=t[0],i=t[1];return sr((function(){var t=js.suspense;js.suspense=void 0===n?null:n;try{i(e)}finally{js.suspense=t}}),[e,n]),a},useTransition:function(e){var n=Zs(Ks),t=n[0];return n=n[1],[fr(dr.bind(null,n,e),[n,e]),t]}},kr={readContext:as,useCallback:fr,useContext:as,useEffect:sr,useImperativeHandle:cr,useLayoutEffect:rr,useMemo:ur,useReducer:Gs,useRef:nr,useState:function(){return Gs(Ks)},useDebugValue:lr,useResponder:Ls,useDeferredValue:function(e,n){var t=Gs(Ks),a=t[0],i=t[1];return sr((function(){var t=js.suspense;js.suspense=void 0===n?null:n;try{i(e)}finally{js.suspense=t}}),[e,n]),a},useTransition:function(e){var n=Gs(Ks),t=n[0];return n=n[1],[fr(dr.bind(null,n,e),[n,e]),t]}},yr=null,br=null,_r=!1;function vr(e,n){var t=Ec(5,null,null,0);t.elementType="DELETED",t.type="DELETED",t.stateNode=n,t.return=e,t.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=t,e.lastEffect=t):e.firstEffect=e.lastEffect=t}function wr(e,n){switch(e.tag){case 5:var t=e.type;return null!==(n=1!==n.nodeType||t.toLowerCase()!==n.nodeName.toLowerCase()?null:n)&&(e.stateNode=n,!0);case 6:return null!==(n=""===e.pendingProps||3!==n.nodeType?null:n)&&(e.stateNode=n,!0);case 13:default:return!1}}function Er(e){if(_r){var n=br;if(n){var t=n;if(!wr(e,n)){if(!(n=_t(t.nextSibling))||!wr(e,n))return e.effectTag=-1025&e.effectTag|2,_r=!1,void(yr=e);vr(yr,t)}yr=e,br=_t(n.firstChild)}else e.effectTag=-1025&e.effectTag|2,_r=!1,yr=e}}function Cr(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;yr=e}function xr(e){if(e!==yr)return!1;if(!_r)return Cr(e),_r=!0,!1;var n=e.type;if(5!==e.tag||"head"!==n&&"body"!==n&&!kt(n,e.memoizedProps))for(n=br;n;)vr(e,n),n=_t(n.nextSibling);if(Cr(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(r(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType){var t=e.data;if("/$"===t){if(0===n){br=_t(e.nextSibling);break e}n--}else"$"!==t&&"$!"!==t&&"$?"!==t||n++}e=e.nextSibling}br=null}}else br=yr?_t(e.stateNode.nextSibling):null;return!0}function Br(){br=yr=null,_r=!1}var Sr=K.ReactCurrentOwner,Tr=!1;function Pr(e,n,t,a){n.child=null===e?Cs(n,null,t,a):Es(n,e.child,t,a)}function Nr(e,n,t,a,i){t=t.render;var s=n.ref;return ts(n,i),a=Hs(e,n,t,a,s,i),null===e||Tr?(n.effectTag|=1,Pr(e,n,a,i),n.child):(n.updateQueue=e.updateQueue,n.effectTag&=-517,e.expirationTime<=i&&(e.expirationTime=0),Hr(e,n,i))}function Mr(e,n,t,a,i,s){if(null===e){var r=t.type;return"function"!=typeof r||Cc(r)||void 0!==r.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Bc(t.type,null,a,null,n.mode,s)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=r,qr(e,n,r,a,i,s))}return r=e.child,i<s&&(i=r.memoizedProps,(t=null!==(t=t.compare)?t:ja)(i,a)&&e.ref===n.ref)?Hr(e,n,s):(n.effectTag|=1,(e=xc(r,a)).ref=n.ref,e.return=n,n.child=e)}function qr(e,n,t,a,i,s){return null!==e&&ja(e.memoizedProps,a)&&e.ref===n.ref&&(Tr=!1,i<s)?(n.expirationTime=e.expirationTime,Hr(e,n,s)):Or(e,n,t,a,s)}function Ir(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.effectTag|=128)}function Or(e,n,t,a,i){var s=mi(t)?di:fi.current;return s=gi(n,s),ts(n,i),t=Hs(e,n,t,a,s,i),null===e||Tr?(n.effectTag|=1,Pr(e,n,t,i),n.child):(n.updateQueue=e.updateQueue,n.effectTag&=-517,e.expirationTime<=i&&(e.expirationTime=0),Hr(e,n,i))}function zr(e,n,t,a,i){if(mi(t)){var s=!0;yi(n)}else s=!1;if(ts(n,i),null===n.stateNode)null!==e&&(e.alternate=null,n.alternate=null,n.effectTag|=2),As(n,t,a),ys(n,t,a,i),a=!0;else if(null===e){var r=n.stateNode,o=n.memoizedProps;r.props=o;var c=r.context,l=t.contextType;"object"==typeof l&&null!==l?l=as(l):l=gi(n,l=mi(t)?di:fi.current);var p=t.getDerivedStateFromProps,f="function"==typeof p||"function"==typeof r.getSnapshotBeforeUpdate;f||"function"!=typeof r.UNSAFE_componentWillReceiveProps&&"function"!=typeof r.componentWillReceiveProps||(o!==a||c!==l)&&ks(n,r,a,l),is=!1;var u=n.memoizedState;r.state=u,ps(n,a,r,i),c=n.memoizedState,o!==a||u!==c||ui.current||is?("function"==typeof p&&(gs(n,t,p,a),c=n.memoizedState),(o=is||hs(n,t,o,a,u,c,l))?(f||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||("function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount()),"function"==typeof r.componentDidMount&&(n.effectTag|=4)):("function"==typeof r.componentDidMount&&(n.effectTag|=4),n.memoizedProps=a,n.memoizedState=c),r.props=a,r.state=c,r.context=l,a=o):("function"==typeof r.componentDidMount&&(n.effectTag|=4),a=!1)}else r=n.stateNode,rs(e,n),o=n.memoizedProps,r.props=n.type===n.elementType?o:$i(n.type,o),c=r.context,"object"==typeof(l=t.contextType)&&null!==l?l=as(l):l=gi(n,l=mi(t)?di:fi.current),(f="function"==typeof(p=t.getDerivedStateFromProps)||"function"==typeof r.getSnapshotBeforeUpdate)||"function"!=typeof r.UNSAFE_componentWillReceiveProps&&"function"!=typeof r.componentWillReceiveProps||(o!==a||c!==l)&&ks(n,r,a,l),is=!1,c=n.memoizedState,r.state=c,ps(n,a,r,i),u=n.memoizedState,o!==a||c!==u||ui.current||is?("function"==typeof p&&(gs(n,t,p,a),u=n.memoizedState),(p=is||hs(n,t,o,a,c,u,l))?(f||"function"!=typeof r.UNSAFE_componentWillUpdate&&"function"!=typeof r.componentWillUpdate||("function"==typeof r.componentWillUpdate&&r.componentWillUpdate(a,u,l),"function"==typeof r.UNSAFE_componentWillUpdate&&r.UNSAFE_componentWillUpdate(a,u,l)),"function"==typeof r.componentDidUpdate&&(n.effectTag|=4),"function"==typeof r.getSnapshotBeforeUpdate&&(n.effectTag|=256)):("function"!=typeof r.componentDidUpdate||o===e.memoizedProps&&c===e.memoizedState||(n.effectTag|=4),"function"!=typeof r.getSnapshotBeforeUpdate||o===e.memoizedProps&&c===e.memoizedState||(n.effectTag|=256),n.memoizedProps=a,n.memoizedState=u),r.props=a,r.state=u,r.context=l,a=p):("function"!=typeof r.componentDidUpdate||o===e.memoizedProps&&c===e.memoizedState||(n.effectTag|=4),"function"!=typeof r.getSnapshotBeforeUpdate||o===e.memoizedProps&&c===e.memoizedState||(n.effectTag|=256),a=!1);return Lr(e,n,t,a,s,i)}function Lr(e,n,t,a,i,s){Ir(e,n);var r=0!=(64&n.effectTag);if(!a&&!r)return i&&bi(n,t,!1),Hr(e,n,s);a=n.stateNode,Sr.current=n;var o=r&&"function"!=typeof t.getDerivedStateFromError?null:a.render();return n.effectTag|=1,null!==e&&r?(n.child=Es(n,e.child,null,s),n.child=Es(n,null,o,s)):Pr(e,n,o,s),n.memoizedState=a.state,i&&bi(n,t,!0),n.child}function Ur(e){var n=e.stateNode;n.pendingContext?Ai(0,n.pendingContext,n.pendingContext!==n.context):n.context&&Ai(0,n.context,!1),Ns(e,n.containerInfo)}var jr,Dr,Fr,Rr={dehydrated:null,retryTime:0};function Yr(e,n,t){var a,i=n.mode,s=n.pendingProps,r=Os.current,o=!1;if((a=0!=(64&n.effectTag))||(a=0!=(2&r)&&(null===e||null!==e.memoizedState)),a?(o=!0,n.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===s.fallback||!0===s.unstable_avoidThisFallback||(r|=1),li(Os,1&r),null===e){if(void 0!==s.fallback&&Er(n),o){if(o=s.fallback,(s=Sc(null,i,0,null)).return=n,0==(2&n.mode))for(e=null!==n.memoizedState?n.child.child:n.child,s.child=e;null!==e;)e.return=s,e=e.sibling;return(t=Sc(o,i,t,null)).return=n,s.sibling=t,n.memoizedState=Rr,n.child=s,t}return i=s.children,n.memoizedState=null,n.child=Cs(n,null,i,t)}if(null!==e.memoizedState){if(i=(e=e.child).sibling,o){if(s=s.fallback,(t=xc(e,e.pendingProps)).return=n,0==(2&n.mode)&&(o=null!==n.memoizedState?n.child.child:n.child)!==e.child)for(t.child=o;null!==o;)o.return=t,o=o.sibling;return(i=xc(i,s)).return=n,t.sibling=i,t.childExpirationTime=0,n.memoizedState=Rr,n.child=t,i}return t=Es(n,e.child,s.children,t),n.memoizedState=null,n.child=t}if(e=e.child,o){if(o=s.fallback,(s=Sc(null,i,0,null)).return=n,s.child=e,null!==e&&(e.return=s),0==(2&n.mode))for(e=null!==n.memoizedState?n.child.child:n.child,s.child=e;null!==e;)e.return=s,e=e.sibling;return(t=Sc(o,i,t,null)).return=n,s.sibling=t,t.effectTag|=2,s.childExpirationTime=0,n.memoizedState=Rr,n.child=s,t}return n.memoizedState=null,n.child=Es(n,e,s.children,t)}function Qr(e,n){e.expirationTime<n&&(e.expirationTime=n);var t=e.alternate;null!==t&&t.expirationTime<n&&(t.expirationTime=n),ns(e.return,n)}function Wr(e,n,t,a,i,s){var r=e.memoizedState;null===r?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:a,tail:t,tailExpiration:0,tailMode:i,lastEffect:s}:(r.isBackwards=n,r.rendering=null,r.renderingStartTime=0,r.last=a,r.tail=t,r.tailExpiration=0,r.tailMode=i,r.lastEffect=s)}function Vr(e,n,t){var a=n.pendingProps,i=a.revealOrder,s=a.tail;if(Pr(e,n,a.children,t),0!=(2&(a=Os.current)))a=1&a|2,n.effectTag|=64;else{if(null!==e&&0!=(64&e.effectTag))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Qr(e,t);else if(19===e.tag)Qr(e,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}a&=1}if(li(Os,a),0==(2&n.mode))n.memoizedState=null;else switch(i){case"forwards":for(t=n.child,i=null;null!==t;)null!==(e=t.alternate)&&null===zs(e)&&(i=t),t=t.sibling;null===(t=i)?(i=n.child,n.child=null):(i=t.sibling,t.sibling=null),Wr(n,!1,i,t,s,n.lastEffect);break;case"backwards":for(t=null,i=n.child,n.child=null;null!==i;){if(null!==(e=i.alternate)&&null===zs(e)){n.child=i;break}e=i.sibling,i.sibling=t,t=i,i=e}Wr(n,!0,t,null,s,n.lastEffect);break;case"together":Wr(n,!1,null,null,void 0,n.lastEffect);break;default:n.memoizedState=null}return n.child}function Hr(e,n,t){null!==e&&(n.dependencies=e.dependencies);var a=n.expirationTime;if(0!==a&&rc(a),n.childExpirationTime<t)return null;if(null!==e&&n.child!==e.child)throw Error(r(153));if(null!==n.child){for(t=xc(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=xc(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function $r(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var a=null;null!==t;)null!==t.alternate&&(a=t),t=t.sibling;null===a?n||null===e.tail?e.tail=null:e.tail.sibling=null:a.sibling=null}}function Xr(e,n,t){var a=n.pendingProps;switch(n.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return mi(n.type)&&hi(),null;case 3:return Ms(),ci(ui),ci(fi),(t=n.stateNode).pendingContext&&(t.context=t.pendingContext,t.pendingContext=null),null!==e&&null!==e.child||!xr(n)||(n.effectTag|=4),null;case 5:Is(n),t=Ps(Ts.current);var s=n.type;if(null!==e&&null!=n.stateNode)Dr(e,n,s,a,t),e.ref!==n.ref&&(n.effectTag|=128);else{if(!a){if(null===n.stateNode)throw Error(r(166));return null}if(e=Ps(Bs.current),xr(n)){a=n.stateNode,s=n.type;var o=n.memoizedProps;switch(a[Et]=n,a[Ct]=o,s){case"iframe":case"object":case"embed":$n("load",a);break;case"video":case"audio":for(e=0;e<Ke.length;e++)$n(Ke[e],a);break;case"source":$n("error",a);break;case"img":case"image":case"link":$n("error",a),$n("load",a);break;case"form":$n("reset",a),$n("submit",a);break;case"details":$n("toggle",a);break;case"input":we(a,o),$n("invalid",a),ct(t,"onChange");break;case"select":a._wrapperState={wasMultiple:!!o.multiple},$n("invalid",a),ct(t,"onChange");break;case"textarea":Ne(a,o),$n("invalid",a),ct(t,"onChange")}for(var c in st(s,o),e=null,o)if(o.hasOwnProperty(c)){var l=o[c];"children"===c?"string"==typeof l?a.textContent!==l&&(e=["children",l]):"number"==typeof l&&a.textContent!==""+l&&(e=["children",""+l]):E.hasOwnProperty(c)&&null!=l&&ct(t,c)}switch(s){case"input":be(a),xe(a,o,!0);break;case"textarea":be(a),qe(a);break;case"select":case"option":break;default:"function"==typeof o.onClick&&(a.onclick=lt)}t=e,n.updateQueue=t,null!==t&&(n.effectTag|=4)}else{switch(c=9===t.nodeType?t:t.ownerDocument,e===ot&&(e=ze(s)),e===ot?"script"===s?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof a.is?e=c.createElement(s,{is:a.is}):(e=c.createElement(s),"select"===s&&(c=e,a.multiple?c.multiple=!0:a.size&&(c.size=a.size))):e=c.createElementNS(e,s),e[Et]=n,e[Ct]=a,jr(e,n),n.stateNode=e,c=rt(s,a),s){case"iframe":case"object":case"embed":$n("load",e),l=a;break;case"video":case"audio":for(l=0;l<Ke.length;l++)$n(Ke[l],e);l=a;break;case"source":$n("error",e),l=a;break;case"img":case"image":case"link":$n("error",e),$n("load",e),l=a;break;case"form":$n("reset",e),$n("submit",e),l=a;break;case"details":$n("toggle",e),l=a;break;case"input":we(e,a),l=ve(e,a),$n("invalid",e),ct(t,"onChange");break;case"option":l=Se(e,a);break;case"select":e._wrapperState={wasMultiple:!!a.multiple},l=i({},a,{value:void 0}),$n("invalid",e),ct(t,"onChange");break;case"textarea":Ne(e,a),l=Pe(e,a),$n("invalid",e),ct(t,"onChange");break;default:l=a}st(s,l);var p=l;for(o in p)if(p.hasOwnProperty(o)){var f=p[o];"style"===o?at(e,f):"dangerouslySetInnerHTML"===o?null!=(f=f?f.__html:void 0)&&je(e,f):"children"===o?"string"==typeof f?("textarea"!==s||""!==f)&&De(e,f):"number"==typeof f&&De(e,""+f):"suppressContentEditableWarning"!==o&&"suppressHydrationWarning"!==o&&"autoFocus"!==o&&(E.hasOwnProperty(o)?null!=f&&ct(t,o):null!=f&&Z(e,o,f,c))}switch(s){case"input":be(e),xe(e,a,!1);break;case"textarea":be(e),qe(e);break;case"option":null!=a.value&&e.setAttribute("value",""+ke(a.value));break;case"select":e.multiple=!!a.multiple,null!=(t=a.value)?Te(e,!!a.multiple,t,!1):null!=a.defaultValue&&Te(e,!!a.multiple,a.defaultValue,!0);break;default:"function"==typeof l.onClick&&(e.onclick=lt)}At(s,a)&&(n.effectTag|=4)}null!==n.ref&&(n.effectTag|=128)}return null;case 6:if(e&&null!=n.stateNode)Fr(0,n,e.memoizedProps,a);else{if("string"!=typeof a&&null===n.stateNode)throw Error(r(166));t=Ps(Ts.current),Ps(Bs.current),xr(n)?(t=n.stateNode,a=n.memoizedProps,t[Et]=n,t.nodeValue!==a&&(n.effectTag|=4)):((t=(9===t.nodeType?t:t.ownerDocument).createTextNode(a))[Et]=n,n.stateNode=t)}return null;case 13:return ci(Os),a=n.memoizedState,0!=(64&n.effectTag)?(n.expirationTime=t,n):(t=null!==a,a=!1,null===e?void 0!==n.memoizedProps.fallback&&xr(n):(a=null!==(s=e.memoizedState),t||null===s||null!==(s=e.child.sibling)&&(null!==(o=n.firstEffect)?(n.firstEffect=s,s.nextEffect=o):(n.firstEffect=n.lastEffect=s,s.nextEffect=null),s.effectTag=8)),t&&!a&&0!=(2&n.mode)&&(null===e&&!0!==n.memoizedProps.unstable_avoidThisFallback||0!=(1&Os.current)?Bo===bo&&(Bo=_o):(Bo!==bo&&Bo!==_o||(Bo=vo),0!==Mo&&null!==Eo&&(qc(Eo,xo),Ic(Eo,Mo)))),(t||a)&&(n.effectTag|=4),null);case 4:return Ms(),null;case 10:return es(n),null;case 17:return mi(n.type)&&hi(),null;case 19:if(ci(Os),null===(a=n.memoizedState))return null;if(s=0!=(64&n.effectTag),null===(o=a.rendering)){if(s)$r(a,!1);else if(Bo!==bo||null!==e&&0!=(64&e.effectTag))for(o=n.child;null!==o;){if(null!==(e=zs(o))){for(n.effectTag|=64,$r(a,!1),null!==(s=e.updateQueue)&&(n.updateQueue=s,n.effectTag|=4),null===a.lastEffect&&(n.firstEffect=null),n.lastEffect=a.lastEffect,a=n.child;null!==a;)o=t,(s=a).effectTag&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(e=s.alternate)?(s.childExpirationTime=0,s.expirationTime=o,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null):(s.childExpirationTime=e.childExpirationTime,s.expirationTime=e.expirationTime,s.child=e.child,s.memoizedProps=e.memoizedProps,s.memoizedState=e.memoizedState,s.updateQueue=e.updateQueue,o=e.dependencies,s.dependencies=null===o?null:{expirationTime:o.expirationTime,firstContext:o.firstContext,responders:o.responders}),a=a.sibling;return li(Os,1&Os.current|2),n.child}o=o.sibling}}else{if(!s)if(null!==(e=zs(o))){if(n.effectTag|=64,s=!0,null!==(t=e.updateQueue)&&(n.updateQueue=t,n.effectTag|=4),$r(a,!0),null===a.tail&&"hidden"===a.tailMode&&!o.alternate)return null!==(n=n.lastEffect=a.lastEffect)&&(n.nextEffect=null),null}else 2*ji()-a.renderingStartTime>a.tailExpiration&&1<t&&(n.effectTag|=64,s=!0,$r(a,!1),n.expirationTime=n.childExpirationTime=t-1);a.isBackwards?(o.sibling=n.child,n.child=o):(null!==(t=a.last)?t.sibling=o:n.child=o,a.last=o)}return null!==a.tail?(0===a.tailExpiration&&(a.tailExpiration=ji()+500),t=a.tail,a.rendering=t,a.tail=t.sibling,a.lastEffect=n.lastEffect,a.renderingStartTime=ji(),t.sibling=null,n=Os.current,li(Os,s?1&n|2:1&n),t):null}throw Error(r(156,n.tag))}function Kr(e){switch(e.tag){case 1:mi(e.type)&&hi();var n=e.effectTag;return 4096&n?(e.effectTag=-4097&n|64,e):null;case 3:if(Ms(),ci(ui),ci(fi),0!=(64&(n=e.effectTag)))throw Error(r(285));return e.effectTag=-4097&n|64,e;case 5:return Is(e),null;case 13:return ci(Os),4096&(n=e.effectTag)?(e.effectTag=-4097&n|64,e):null;case 19:return ci(Os),null;case 4:return Ms(),null;case 10:return es(e),null;default:return null}}function Zr(e,n){return{value:e,source:n,stack:Ae(n)}}jr=function(e,n){for(var t=n.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Dr=function(e,n,t,a,s){var r=e.memoizedProps;if(r!==a){var o,c,l=n.stateNode;switch(Ps(Bs.current),e=null,t){case"input":r=ve(l,r),a=ve(l,a),e=[];break;case"option":r=Se(l,r),a=Se(l,a),e=[];break;case"select":r=i({},r,{value:void 0}),a=i({},a,{value:void 0}),e=[];break;case"textarea":r=Pe(l,r),a=Pe(l,a),e=[];break;default:"function"!=typeof r.onClick&&"function"==typeof a.onClick&&(l.onclick=lt)}for(o in st(t,a),t=null,r)if(!a.hasOwnProperty(o)&&r.hasOwnProperty(o)&&null!=r[o])if("style"===o)for(c in l=r[o])l.hasOwnProperty(c)&&(t||(t={}),t[c]="");else"dangerouslySetInnerHTML"!==o&&"children"!==o&&"suppressContentEditableWarning"!==o&&"suppressHydrationWarning"!==o&&"autoFocus"!==o&&(E.hasOwnProperty(o)?e||(e=[]):(e=e||[]).push(o,null));for(o in a){var p=a[o];if(l=null!=r?r[o]:void 0,a.hasOwnProperty(o)&&p!==l&&(null!=p||null!=l))if("style"===o)if(l){for(c in l)!l.hasOwnProperty(c)||p&&p.hasOwnProperty(c)||(t||(t={}),t[c]="");for(c in p)p.hasOwnProperty(c)&&l[c]!==p[c]&&(t||(t={}),t[c]=p[c])}else t||(e||(e=[]),e.push(o,t)),t=p;else"dangerouslySetInnerHTML"===o?(p=p?p.__html:void 0,l=l?l.__html:void 0,null!=p&&l!==p&&(e=e||[]).push(o,p)):"children"===o?l===p||"string"!=typeof p&&"number"!=typeof p||(e=e||[]).push(o,""+p):"suppressContentEditableWarning"!==o&&"suppressHydrationWarning"!==o&&(E.hasOwnProperty(o)?(null!=p&&ct(s,o),e||l===p||(e=[])):(e=e||[]).push(o,p))}t&&(e=e||[]).push("style",t),s=e,(n.updateQueue=s)&&(n.effectTag|=4)}},Fr=function(e,n,t,a){t!==a&&(n.effectTag|=4)};var Gr="function"==typeof WeakSet?WeakSet:Set;function Jr(e,n){var t=n.source,a=n.stack;null===a&&null!==t&&(a=Ae(t)),null!==t&&he(t.type),n=n.value,null!==e&&1===e.tag&&he(e.type);try{console.error(n)}catch(e){setTimeout((function(){throw e}))}}function eo(e){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(n){kc(e,n)}else n.current=null}function no(e,n){switch(n.tag){case 0:case 11:case 15:case 22:return;case 1:if(256&n.effectTag&&null!==e){var t=e.memoizedProps,a=e.memoizedState;n=(e=n.stateNode).getSnapshotBeforeUpdate(n.elementType===n.type?t:$i(n.type,t),a),e.__reactInternalSnapshotBeforeUpdate=n}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(r(163))}function to(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var a=t.destroy;t.destroy=void 0,void 0!==a&&a()}t=t.next}while(t!==n)}}function ao(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var a=t.create;t.destroy=a()}t=t.next}while(t!==n)}}function io(e,n,t){switch(t.tag){case 0:case 11:case 15:case 22:return void ao(3,t);case 1:if(e=t.stateNode,4&t.effectTag)if(null===n)e.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:$i(t.type,n.memoizedProps);e.componentDidUpdate(a,n.memoizedState,e.__reactInternalSnapshotBeforeUpdate)}return void(null!==(n=t.updateQueue)&&fs(t,n,e));case 3:if(null!==(n=t.updateQueue)){if(e=null,null!==t.child)switch(t.child.tag){case 5:e=t.child.stateNode;break;case 1:e=t.child.stateNode}fs(t,n,e)}return;case 5:return e=t.stateNode,void(null===n&&4&t.effectTag&&At(t.type,t.memoizedProps)&&e.focus());case 6:case 4:case 12:return;case 13:return void(null===t.memoizedState&&(t=t.alternate,null!==t&&(t=t.memoizedState,null!==t&&(t=t.dehydrated,null!==t&&Ln(t)))));case 19:case 17:case 20:case 21:return}throw Error(r(163))}function so(e,n,t){switch("function"==typeof vc&&vc(n),n.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=n.updateQueue)&&null!==(e=e.lastEffect)){var a=e.next;Ri(97<t?97:t,(function(){var e=a;do{var t=e.destroy;if(void 0!==t){var i=n;try{t()}catch(e){kc(i,e)}}e=e.next}while(e!==a)}))}break;case 1:eo(n),"function"==typeof(t=n.stateNode).componentWillUnmount&&function(e,n){try{n.props=e.memoizedProps,n.state=e.memoizedState,n.componentWillUnmount()}catch(n){kc(e,n)}}(n,t);break;case 5:eo(n);break;case 4:lo(e,n,t)}}function ro(e){var n=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,e.stateNode=null,null!==n&&ro(n)}function oo(e){return 5===e.tag||3===e.tag||4===e.tag}function co(e){e:{for(var n=e.return;null!==n;){if(oo(n)){var t=n;break e}n=n.return}throw Error(r(160))}switch(n=t.stateNode,t.tag){case 5:var a=!1;break;case 3:case 4:n=n.containerInfo,a=!0;break;default:throw Error(r(161))}16&t.effectTag&&(De(n,""),t.effectTag&=-17);e:n:for(t=e;;){for(;null===t.sibling;){if(null===t.return||oo(t.return)){t=null;break e}t=t.return}for(t.sibling.return=t.return,t=t.sibling;5!==t.tag&&6!==t.tag&&18!==t.tag;){if(2&t.effectTag)continue n;if(null===t.child||4===t.tag)continue n;t.child.return=t,t=t.child}if(!(2&t.effectTag)){t=t.stateNode;break e}}a?function e(n,t,a){var i=n.tag,s=5===i||6===i;if(s)n=s?n.stateNode:n.stateNode.instance,t?8===a.nodeType?a.parentNode.insertBefore(n,t):a.insertBefore(n,t):(8===a.nodeType?(t=a.parentNode).insertBefore(n,a):(t=a).appendChild(n),null!==(a=a._reactRootContainer)&&void 0!==a||null!==t.onclick||(t.onclick=lt));else if(4!==i&&null!==(n=n.child))for(e(n,t,a),n=n.sibling;null!==n;)e(n,t,a),n=n.sibling}(e,t,n):function e(n,t,a){var i=n.tag,s=5===i||6===i;if(s)n=s?n.stateNode:n.stateNode.instance,t?a.insertBefore(n,t):a.appendChild(n);else if(4!==i&&null!==(n=n.child))for(e(n,t,a),n=n.sibling;null!==n;)e(n,t,a),n=n.sibling}(e,t,n)}function lo(e,n,t){for(var a,i,s=n,o=!1;;){if(!o){o=s.return;e:for(;;){if(null===o)throw Error(r(160));switch(a=o.stateNode,o.tag){case 5:i=!1;break e;case 3:case 4:a=a.containerInfo,i=!0;break e}o=o.return}o=!0}if(5===s.tag||6===s.tag){e:for(var c=e,l=s,p=t,f=l;;)if(so(c,f,p),null!==f.child&&4!==f.tag)f.child.return=f,f=f.child;else{if(f===l)break e;for(;null===f.sibling;){if(null===f.return||f.return===l)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}i?(c=a,l=s.stateNode,8===c.nodeType?c.parentNode.removeChild(l):c.removeChild(l)):a.removeChild(s.stateNode)}else if(4===s.tag){if(null!==s.child){a=s.stateNode.containerInfo,i=!0,s.child.return=s,s=s.child;continue}}else if(so(e,s,t),null!==s.child){s.child.return=s,s=s.child;continue}if(s===n)break;for(;null===s.sibling;){if(null===s.return||s.return===n)return;4===(s=s.return).tag&&(o=!1)}s.sibling.return=s.return,s=s.sibling}}function po(e,n){switch(n.tag){case 0:case 11:case 14:case 15:case 22:return void to(3,n);case 1:return;case 5:var t=n.stateNode;if(null!=t){var a=n.memoizedProps,i=null!==e?e.memoizedProps:a;e=n.type;var s=n.updateQueue;if(n.updateQueue=null,null!==s){for(t[Ct]=a,"input"===e&&"radio"===a.type&&null!=a.name&&Ee(t,a),rt(e,i),n=rt(e,a),i=0;i<s.length;i+=2){var o=s[i],c=s[i+1];"style"===o?at(t,c):"dangerouslySetInnerHTML"===o?je(t,c):"children"===o?De(t,c):Z(t,o,c,n)}switch(e){case"input":Ce(t,a);break;case"textarea":Me(t,a);break;case"select":n=t._wrapperState.wasMultiple,t._wrapperState.wasMultiple=!!a.multiple,null!=(e=a.value)?Te(t,!!a.multiple,e,!1):n!==!!a.multiple&&(null!=a.defaultValue?Te(t,!!a.multiple,a.defaultValue,!0):Te(t,!!a.multiple,a.multiple?[]:"",!1))}}}return;case 6:if(null===n.stateNode)throw Error(r(162));return void(n.stateNode.nodeValue=n.memoizedProps);case 3:return void((n=n.stateNode).hydrate&&(n.hydrate=!1,Ln(n.containerInfo)));case 12:return;case 13:if(t=n,null===n.memoizedState?a=!1:(a=!0,t=n.child,Io=ji()),null!==t)e:for(e=t;;){if(5===e.tag)s=e.stateNode,a?"function"==typeof(s=s.style).setProperty?s.setProperty("display","none","important"):s.display="none":(s=e.stateNode,i=null!=(i=e.memoizedProps.style)&&i.hasOwnProperty("display")?i.display:null,s.style.display=tt("display",i));else if(6===e.tag)e.stateNode.nodeValue=a?"":e.memoizedProps;else{if(13===e.tag&&null!==e.memoizedState&&null===e.memoizedState.dehydrated){(s=e.child.sibling).return=e,e=s;continue}if(null!==e.child){e.child.return=e,e=e.child;continue}}if(e===t)break;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}return void fo(n);case 19:return void fo(n);case 17:return}throw Error(r(163))}function fo(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new Gr),n.forEach((function(n){var a=bc.bind(null,e,n);t.has(n)||(t.add(n),n.then(a,a))}))}}var uo="function"==typeof WeakMap?WeakMap:Map;function go(e,n,t){(t=os(t,null)).tag=3,t.payload={element:null};var a=n.value;return t.callback=function(){zo||(zo=!0,Lo=a),Jr(e,n)},t}function mo(e,n,t){(t=os(t,null)).tag=3;var a=e.type.getDerivedStateFromError;if("function"==typeof a){var i=n.value;t.payload=function(){return Jr(e,n),a(i)}}var s=e.stateNode;return null!==s&&"function"==typeof s.componentDidCatch&&(t.callback=function(){"function"!=typeof a&&(null===Uo?Uo=new Set([this]):Uo.add(this),Jr(e,n));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}var ho,Ao=Math.ceil,ko=K.ReactCurrentDispatcher,yo=K.ReactCurrentOwner,bo=0,_o=3,vo=4,wo=0,Eo=null,Co=null,xo=0,Bo=bo,So=null,To=1073741823,Po=1073741823,No=null,Mo=0,qo=!1,Io=0,Oo=null,zo=!1,Lo=null,Uo=null,jo=!1,Do=null,Fo=90,Ro=null,Yo=0,Qo=null,Wo=0;function Vo(){return 0!=(48&wo)?1073741821-(ji()/10|0):0!==Wo?Wo:Wo=1073741821-(ji()/10|0)}function Ho(e,n,t){if(0==(2&(n=n.mode)))return 1073741823;var a=Di();if(0==(4&n))return 99===a?1073741823:1073741822;if(0!=(16&wo))return xo;if(null!==t)e=Hi(e,0|t.timeoutMs||5e3,250);else switch(a){case 99:e=1073741823;break;case 98:e=Hi(e,150,100);break;case 97:case 96:e=Hi(e,5e3,250);break;case 95:e=2;break;default:throw Error(r(326))}return null!==Eo&&e===xo&&--e,e}function $o(e,n){if(50<Yo)throw Yo=0,Qo=null,Error(r(185));if(null!==(e=Xo(e,n))){var t=Di();1073741823===n?0!=(8&wo)&&0==(48&wo)?Jo(e):(Zo(e),0===wo&&Wi()):Zo(e),0==(4&wo)||98!==t&&99!==t||(null===Ro?Ro=new Map([[e,n]]):(void 0===(t=Ro.get(e))||t>n)&&Ro.set(e,n))}}function Xo(e,n){e.expirationTime<n&&(e.expirationTime=n);var t=e.alternate;null!==t&&t.expirationTime<n&&(t.expirationTime=n);var a=e.return,i=null;if(null===a&&3===e.tag)i=e.stateNode;else for(;null!==a;){if(t=a.alternate,a.childExpirationTime<n&&(a.childExpirationTime=n),null!==t&&t.childExpirationTime<n&&(t.childExpirationTime=n),null===a.return&&3===a.tag){i=a.stateNode;break}a=a.return}return null!==i&&(Eo===i&&(rc(n),Bo===vo&&qc(i,xo)),Ic(i,n)),i}function Ko(e){var n=e.lastExpiredTime;if(0!==n)return n;if(!Mc(e,n=e.firstPendingTime))return n;var t=e.lastPingedTime;return 2>=(e=t>(e=e.nextKnownPendingLevel)?t:e)&&n!==e?0:e}function Zo(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=Qi(Jo.bind(null,e));else{var n=Ko(e),t=e.callbackNode;if(0===n)null!==t&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var a=Vo();if(1073741823===n?a=99:1===n||2===n?a=95:a=0>=(a=10*(1073741821-n)-10*(1073741821-a))?99:250>=a?98:5250>=a?97:95,null!==t){var i=e.callbackPriority;if(e.callbackExpirationTime===n&&i>=a)return;t!==Mi&&wi(t)}e.callbackExpirationTime=n,e.callbackPriority=a,n=1073741823===n?Qi(Jo.bind(null,e)):Yi(a,Go.bind(null,e),{timeout:10*(1073741821-n)-ji()}),e.callbackNode=n}}}function Go(e,n){if(Wo=0,n)return Oc(e,n=Vo()),Zo(e),null;var t=Ko(e);if(0!==t){if(n=e.callbackNode,0!=(48&wo))throw Error(r(327));if(mc(),e===Eo&&t===xo||tc(e,t),null!==Co){var a=wo;wo|=16;for(var i=ic();;)try{cc();break}catch(n){ac(e,n)}if(Ji(),wo=a,ko.current=i,1===Bo)throw n=So,tc(e,t),qc(e,t),Zo(e),n;if(null===Co)switch(i=e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,a=Bo,Eo=null,a){case bo:case 1:throw Error(r(345));case 2:Oc(e,2<t?2:t);break;case _o:if(qc(e,t),t===(a=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=fc(i)),1073741823===To&&10<(i=Io+500-ji())){if(qo){var s=e.lastPingedTime;if(0===s||s>=t){e.lastPingedTime=t,tc(e,t);break}}if(0!==(s=Ko(e))&&s!==t)break;if(0!==a&&a!==t){e.lastPingedTime=a;break}e.timeoutHandle=yt(uc.bind(null,e),i);break}uc(e);break;case vo:if(qc(e,t),t===(a=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=fc(i)),qo&&(0===(i=e.lastPingedTime)||i>=t)){e.lastPingedTime=t,tc(e,t);break}if(0!==(i=Ko(e))&&i!==t)break;if(0!==a&&a!==t){e.lastPingedTime=a;break}if(1073741823!==Po?a=10*(1073741821-Po)-ji():1073741823===To?a=0:(a=10*(1073741821-To)-5e3,0>(a=(i=ji())-a)&&(a=0),(t=10*(1073741821-t)-i)<(a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*Ao(a/1960))-a)&&(a=t)),10<a){e.timeoutHandle=yt(uc.bind(null,e),a);break}uc(e);break;case 5:if(1073741823!==To&&null!==No){s=To;var o=No;if(0>=(a=0|o.busyMinDurationMs)?a=0:(i=0|o.busyDelayMs,a=(s=ji()-(10*(1073741821-s)-(0|o.timeoutMs||5e3)))<=i?0:i+a-s),10<a){qc(e,t),e.timeoutHandle=yt(uc.bind(null,e),a);break}}uc(e);break;default:throw Error(r(329))}if(Zo(e),e.callbackNode===n)return Go.bind(null,e)}}return null}function Jo(e){var n=e.lastExpiredTime;if(n=0!==n?n:1073741823,0!=(48&wo))throw Error(r(327));if(mc(),e===Eo&&n===xo||tc(e,n),null!==Co){var t=wo;wo|=16;for(var a=ic();;)try{oc();break}catch(n){ac(e,n)}if(Ji(),wo=t,ko.current=a,1===Bo)throw t=So,tc(e,n),qc(e,n),Zo(e),t;if(null!==Co)throw Error(r(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,Eo=null,uc(e),Zo(e)}return null}function ec(e,n){var t=wo;wo|=1;try{return e(n)}finally{0===(wo=t)&&Wi()}}function nc(e,n){var t=wo;wo&=-2,wo|=8;try{return e(n)}finally{0===(wo=t)&&Wi()}}function tc(e,n){e.finishedWork=null,e.finishedExpirationTime=0;var t=e.timeoutHandle;if(-1!==t&&(e.timeoutHandle=-1,bt(t)),null!==Co)for(t=Co.return;null!==t;){var a=t;switch(a.tag){case 1:null!=(a=a.type.childContextTypes)&&hi();break;case 3:Ms(),ci(ui),ci(fi);break;case 5:Is(a);break;case 4:Ms();break;case 13:case 19:ci(Os);break;case 10:es(a)}t=t.return}Eo=e,Co=xc(e.current,null),xo=n,Bo=bo,So=null,Po=To=1073741823,No=null,Mo=0,qo=!1}function ac(e,n){for(;;){try{if(Ji(),Us.current=mr,Qs)for(var t=Fs.memoizedState;null!==t;){var a=t.queue;null!==a&&(a.pending=null),t=t.next}if(Ds=0,Ys=Rs=Fs=null,Qs=!1,null===Co||null===Co.return)return Bo=1,So=n,Co=null;e:{var i=e,s=Co.return,r=Co,o=n;if(n=xo,r.effectTag|=2048,r.firstEffect=r.lastEffect=null,null!==o&&"object"==typeof o&&"function"==typeof o.then){var c=o;if(0==(2&r.mode)){var l=r.alternate;l?(r.updateQueue=l.updateQueue,r.memoizedState=l.memoizedState,r.expirationTime=l.expirationTime):(r.updateQueue=null,r.memoizedState=null)}var p=0!=(1&Os.current),f=s;do{var u;if(u=13===f.tag){var d=f.memoizedState;if(null!==d)u=null!==d.dehydrated;else{var g=f.memoizedProps;u=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!p)}}if(u){var m=f.updateQueue;if(null===m){var h=new Set;h.add(c),f.updateQueue=h}else m.add(c);if(0==(2&f.mode)){if(f.effectTag|=64,r.effectTag&=-2981,1===r.tag)if(null===r.alternate)r.tag=17;else{var A=os(1073741823,null);A.tag=2,cs(r,A)}r.expirationTime=1073741823;break e}o=void 0,r=n;var k=i.pingCache;if(null===k?(k=i.pingCache=new uo,o=new Set,k.set(c,o)):void 0===(o=k.get(c))&&(o=new Set,k.set(c,o)),!o.has(r)){o.add(r);var y=yc.bind(null,i,c,r);c.then(y,y)}f.effectTag|=4096,f.expirationTime=n;break e}f=f.return}while(null!==f);o=Error((he(r.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+Ae(r))}5!==Bo&&(Bo=2),o=Zr(o,r),f=s;do{switch(f.tag){case 3:c=o,f.effectTag|=4096,f.expirationTime=n,ls(f,go(f,c,n));break e;case 1:c=o;var b=f.type,_=f.stateNode;if(0==(64&f.effectTag)&&("function"==typeof b.getDerivedStateFromError||null!==_&&"function"==typeof _.componentDidCatch&&(null===Uo||!Uo.has(_)))){f.effectTag|=4096,f.expirationTime=n,ls(f,mo(f,c,n));break e}}f=f.return}while(null!==f)}Co=pc(Co)}catch(e){n=e;continue}break}}function ic(){var e=ko.current;return ko.current=mr,null===e?mr:e}function sc(e,n){e<To&&2<e&&(To=e),null!==n&&e<Po&&2<e&&(Po=e,No=n)}function rc(e){e>Mo&&(Mo=e)}function oc(){for(;null!==Co;)Co=lc(Co)}function cc(){for(;null!==Co&&!qi();)Co=lc(Co)}function lc(e){var n=ho(e.alternate,e,xo);return e.memoizedProps=e.pendingProps,null===n&&(n=pc(e)),yo.current=null,n}function pc(e){Co=e;do{var n=Co.alternate;if(e=Co.return,0==(2048&Co.effectTag)){if(n=Xr(n,Co,xo),1===xo||1!==Co.childExpirationTime){for(var t=0,a=Co.child;null!==a;){var i=a.expirationTime,s=a.childExpirationTime;i>t&&(t=i),s>t&&(t=s),a=a.sibling}Co.childExpirationTime=t}if(null!==n)return n;null!==e&&0==(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=Co.firstEffect),null!==Co.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=Co.firstEffect),e.lastEffect=Co.lastEffect),1<Co.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=Co:e.firstEffect=Co,e.lastEffect=Co))}else{if(null!==(n=Kr(Co)))return n.effectTag&=2047,n;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(n=Co.sibling))return n;Co=e}while(null!==Co);return Bo===bo&&(Bo=5),null}function fc(e){var n=e.expirationTime;return n>(e=e.childExpirationTime)?n:e}function uc(e){var n=Di();return Ri(99,dc.bind(null,e,n)),null}function dc(e,n){do{mc()}while(null!==Do);if(0!=(48&wo))throw Error(r(327));var t=e.finishedWork,a=e.finishedExpirationTime;if(null===t)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,t===e.current)throw Error(r(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var i=fc(t);if(e.firstPendingTime=i,a<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:a<=e.firstSuspendedTime&&(e.firstSuspendedTime=a-1),a<=e.lastPingedTime&&(e.lastPingedTime=0),a<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===Eo&&(Co=Eo=null,xo=0),1<t.effectTag?null!==t.lastEffect?(t.lastEffect.nextEffect=t,i=t.firstEffect):i=t:i=t.firstEffect,null!==i){var s=wo;wo|=32,yo.current=null,mt=Hn;var o=dt();if(gt(o)){if("selectionStart"in o)var c={start:o.selectionStart,end:o.selectionEnd};else e:{var l=(c=(c=o.ownerDocument)&&c.defaultView||window).getSelection&&c.getSelection();if(l&&0!==l.rangeCount){c=l.anchorNode;var p=l.anchorOffset,f=l.focusNode;l=l.focusOffset;try{c.nodeType,f.nodeType}catch(e){c=null;break e}var u=0,d=-1,g=-1,m=0,h=0,A=o,k=null;n:for(;;){for(var y;A!==c||0!==p&&3!==A.nodeType||(d=u+p),A!==f||0!==l&&3!==A.nodeType||(g=u+l),3===A.nodeType&&(u+=A.nodeValue.length),null!==(y=A.firstChild);)k=A,A=y;for(;;){if(A===o)break n;if(k===c&&++m===p&&(d=u),k===f&&++h===l&&(g=u),null!==(y=A.nextSibling))break;k=(A=k).parentNode}A=y}c=-1===d||-1===g?null:{start:d,end:g}}else c=null}c=c||{start:0,end:0}}else c=null;ht={activeElementDetached:null,focusedElem:o,selectionRange:c},Hn=!1,Oo=i;do{try{gc()}catch(e){if(null===Oo)throw Error(r(330));kc(Oo,e),Oo=Oo.nextEffect}}while(null!==Oo);Oo=i;do{try{for(o=e,c=n;null!==Oo;){var b=Oo.effectTag;if(16&b&&De(Oo.stateNode,""),128&b){var _=Oo.alternate;if(null!==_){var v=_.ref;null!==v&&("function"==typeof v?v(null):v.current=null)}}switch(1038&b){case 2:co(Oo),Oo.effectTag&=-3;break;case 6:co(Oo),Oo.effectTag&=-3,po(Oo.alternate,Oo);break;case 1024:Oo.effectTag&=-1025;break;case 1028:Oo.effectTag&=-1025,po(Oo.alternate,Oo);break;case 4:po(Oo.alternate,Oo);break;case 8:lo(o,p=Oo,c),ro(p)}Oo=Oo.nextEffect}}catch(e){if(null===Oo)throw Error(r(330));kc(Oo,e),Oo=Oo.nextEffect}}while(null!==Oo);if(v=ht,_=dt(),b=v.focusedElem,c=v.selectionRange,_!==b&&b&&b.ownerDocument&&function e(n,t){return!(!n||!t)&&(n===t||(!n||3!==n.nodeType)&&(t&&3===t.nodeType?e(n,t.parentNode):"contains"in n?n.contains(t):!!n.compareDocumentPosition&&!!(16&n.compareDocumentPosition(t))))}(b.ownerDocument.documentElement,b)){null!==c&>(b)&&(_=c.start,void 0===(v=c.end)&&(v=_),"selectionStart"in b?(b.selectionStart=_,b.selectionEnd=Math.min(v,b.value.length)):(v=(_=b.ownerDocument||document)&&_.defaultView||window).getSelection&&(v=v.getSelection(),p=b.textContent.length,o=Math.min(c.start,p),c=void 0===c.end?o:Math.min(c.end,p),!v.extend&&o>c&&(p=c,c=o,o=p),p=ut(b,o),f=ut(b,c),p&&f&&(1!==v.rangeCount||v.anchorNode!==p.node||v.anchorOffset!==p.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&((_=_.createRange()).setStart(p.node,p.offset),v.removeAllRanges(),o>c?(v.addRange(_),v.extend(f.node,f.offset)):(_.setEnd(f.node,f.offset),v.addRange(_))))),_=[];for(v=b;v=v.parentNode;)1===v.nodeType&&_.push({element:v,left:v.scrollLeft,top:v.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<_.length;b++)(v=_[b]).element.scrollLeft=v.left,v.element.scrollTop=v.top}Hn=!!mt,ht=mt=null,e.current=t,Oo=i;do{try{for(b=e;null!==Oo;){var w=Oo.effectTag;if(36&w&&io(b,Oo.alternate,Oo),128&w){_=void 0;var E=Oo.ref;if(null!==E){var C=Oo.stateNode;switch(Oo.tag){case 5:_=C;break;default:_=C}"function"==typeof E?E(_):E.current=_}}Oo=Oo.nextEffect}}catch(e){if(null===Oo)throw Error(r(330));kc(Oo,e),Oo=Oo.nextEffect}}while(null!==Oo);Oo=null,Ii(),wo=s}else e.current=t;if(jo)jo=!1,Do=e,Fo=n;else for(Oo=i;null!==Oo;)n=Oo.nextEffect,Oo.nextEffect=null,Oo=n;if(0===(n=e.firstPendingTime)&&(Uo=null),1073741823===n?e===Qo?Yo++:(Yo=0,Qo=e):Yo=0,"function"==typeof _c&&_c(t.stateNode,a),Zo(e),zo)throw zo=!1,e=Lo,Lo=null,e;return 0!=(8&wo)||Wi(),null}function gc(){for(;null!==Oo;){var e=Oo.effectTag;0!=(256&e)&&no(Oo.alternate,Oo),0==(512&e)||jo||(jo=!0,Yi(97,(function(){return mc(),null}))),Oo=Oo.nextEffect}}function mc(){if(90!==Fo){var e=97<Fo?97:Fo;return Fo=90,Ri(e,hc)}}function hc(){if(null===Do)return!1;var e=Do;if(Do=null,0!=(48&wo))throw Error(r(331));var n=wo;for(wo|=32,e=e.current.firstEffect;null!==e;){try{var t=e;if(0!=(512&t.effectTag))switch(t.tag){case 0:case 11:case 15:case 22:to(5,t),ao(5,t)}}catch(n){if(null===e)throw Error(r(330));kc(e,n)}t=e.nextEffect,e.nextEffect=null,e=t}return wo=n,Wi(),!0}function Ac(e,n,t){cs(e,n=go(e,n=Zr(t,n),1073741823)),null!==(e=Xo(e,1073741823))&&Zo(e)}function kc(e,n){if(3===e.tag)Ac(e,e,n);else for(var t=e.return;null!==t;){if(3===t.tag){Ac(t,e,n);break}if(1===t.tag){var a=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof a.componentDidCatch&&(null===Uo||!Uo.has(a))){cs(t,e=mo(t,e=Zr(n,e),1073741823)),null!==(t=Xo(t,1073741823))&&Zo(t);break}}t=t.return}}function yc(e,n,t){var a=e.pingCache;null!==a&&a.delete(n),Eo===e&&xo===t?Bo===vo||Bo===_o&&1073741823===To&&ji()-Io<500?tc(e,xo):qo=!0:Mc(e,t)&&(0!==(n=e.lastPingedTime)&&n<t||(e.lastPingedTime=t,Zo(e)))}function bc(e,n){var t=e.stateNode;null!==t&&t.delete(n),0===(n=0)&&(n=Ho(n=Vo(),e,null)),null!==(e=Xo(e,n))&&Zo(e)}ho=function(e,n,t){var a=n.expirationTime;if(null!==e){var i=n.pendingProps;if(e.memoizedProps!==i||ui.current)Tr=!0;else{if(a<t){switch(Tr=!1,n.tag){case 3:Ur(n),Br();break;case 5:if(qs(n),4&n.mode&&1!==t&&i.hidden)return n.expirationTime=n.childExpirationTime=1,null;break;case 1:mi(n.type)&&yi(n);break;case 4:Ns(n,n.stateNode.containerInfo);break;case 10:a=n.memoizedProps.value,i=n.type._context,li(Xi,i._currentValue),i._currentValue=a;break;case 13:if(null!==n.memoizedState)return 0!==(a=n.child.childExpirationTime)&&a>=t?Yr(e,n,t):(li(Os,1&Os.current),null!==(n=Hr(e,n,t))?n.sibling:null);li(Os,1&Os.current);break;case 19:if(a=n.childExpirationTime>=t,0!=(64&e.effectTag)){if(a)return Vr(e,n,t);n.effectTag|=64}if(null!==(i=n.memoizedState)&&(i.rendering=null,i.tail=null),li(Os,Os.current),!a)return null}return Hr(e,n,t)}Tr=!1}}else Tr=!1;switch(n.expirationTime=0,n.tag){case 2:if(a=n.type,null!==e&&(e.alternate=null,n.alternate=null,n.effectTag|=2),e=n.pendingProps,i=gi(n,fi.current),ts(n,t),i=Hs(null,n,a,e,i,t),n.effectTag|=1,"object"==typeof i&&null!==i&&"function"==typeof i.render&&void 0===i.$$typeof){if(n.tag=1,n.memoizedState=null,n.updateQueue=null,mi(a)){var s=!0;yi(n)}else s=!1;n.memoizedState=null!==i.state&&void 0!==i.state?i.state:null,ss(n);var o=a.getDerivedStateFromProps;"function"==typeof o&&gs(n,a,o,e),i.updater=ms,n.stateNode=i,i._reactInternalFiber=n,ys(n,a,e,t),n=Lr(null,n,a,!0,s,t)}else n.tag=0,Pr(null,n,i,t),n=n.child;return n;case 16:e:{if(i=n.elementType,null!==e&&(e.alternate=null,n.alternate=null,n.effectTag|=2),e=n.pendingProps,function(e){if(-1===e._status){e._status=0;var n=e._ctor;n=n(),e._result=n,n.then((function(n){0===e._status&&(n=n.default,e._status=1,e._result=n)}),(function(n){0===e._status&&(e._status=2,e._result=n)}))}}(i),1!==i._status)throw i._result;switch(i=i._result,n.type=i,s=n.tag=function(e){if("function"==typeof e)return Cc(e)?1:0;if(null!=e){if((e=e.$$typeof)===ce)return 11;if(e===fe)return 14}return 2}(i),e=$i(i,e),s){case 0:n=Or(null,n,i,e,t);break e;case 1:n=zr(null,n,i,e,t);break e;case 11:n=Nr(null,n,i,e,t);break e;case 14:n=Mr(null,n,i,$i(i.type,e),a,t);break e}throw Error(r(306,i,""))}return n;case 0:return a=n.type,i=n.pendingProps,Or(e,n,a,i=n.elementType===a?i:$i(a,i),t);case 1:return a=n.type,i=n.pendingProps,zr(e,n,a,i=n.elementType===a?i:$i(a,i),t);case 3:if(Ur(n),a=n.updateQueue,null===e||null===a)throw Error(r(282));if(a=n.pendingProps,i=null!==(i=n.memoizedState)?i.element:null,rs(e,n),ps(n,a,null,t),(a=n.memoizedState.element)===i)Br(),n=Hr(e,n,t);else{if((i=n.stateNode.hydrate)&&(br=_t(n.stateNode.containerInfo.firstChild),yr=n,i=_r=!0),i)for(t=Cs(n,null,a,t),n.child=t;t;)t.effectTag=-3&t.effectTag|1024,t=t.sibling;else Pr(e,n,a,t),Br();n=n.child}return n;case 5:return qs(n),null===e&&Er(n),a=n.type,i=n.pendingProps,s=null!==e?e.memoizedProps:null,o=i.children,kt(a,i)?o=null:null!==s&&kt(a,s)&&(n.effectTag|=16),Ir(e,n),4&n.mode&&1!==t&&i.hidden?(n.expirationTime=n.childExpirationTime=1,n=null):(Pr(e,n,o,t),n=n.child),n;case 6:return null===e&&Er(n),null;case 13:return Yr(e,n,t);case 4:return Ns(n,n.stateNode.containerInfo),a=n.pendingProps,null===e?n.child=Es(n,null,a,t):Pr(e,n,a,t),n.child;case 11:return a=n.type,i=n.pendingProps,Nr(e,n,a,i=n.elementType===a?i:$i(a,i),t);case 7:return Pr(e,n,n.pendingProps,t),n.child;case 8:case 12:return Pr(e,n,n.pendingProps.children,t),n.child;case 10:e:{a=n.type._context,i=n.pendingProps,o=n.memoizedProps,s=i.value;var c=n.type._context;if(li(Xi,c._currentValue),c._currentValue=s,null!==o)if(c=o.value,0===(s=La(c,s)?0:0|("function"==typeof a._calculateChangedBits?a._calculateChangedBits(c,s):1073741823))){if(o.children===i.children&&!ui.current){n=Hr(e,n,t);break e}}else for(null!==(c=n.child)&&(c.return=n);null!==c;){var l=c.dependencies;if(null!==l){o=c.child;for(var p=l.firstContext;null!==p;){if(p.context===a&&0!=(p.observedBits&s)){1===c.tag&&((p=os(t,null)).tag=2,cs(c,p)),c.expirationTime<t&&(c.expirationTime=t),null!==(p=c.alternate)&&p.expirationTime<t&&(p.expirationTime=t),ns(c.return,t),l.expirationTime<t&&(l.expirationTime=t);break}p=p.next}}else o=10===c.tag&&c.type===n.type?null:c.child;if(null!==o)o.return=c;else for(o=c;null!==o;){if(o===n){o=null;break}if(null!==(c=o.sibling)){c.return=o.return,o=c;break}o=o.return}c=o}Pr(e,n,i.children,t),n=n.child}return n;case 9:return i=n.type,a=(s=n.pendingProps).children,ts(n,t),a=a(i=as(i,s.unstable_observedBits)),n.effectTag|=1,Pr(e,n,a,t),n.child;case 14:return s=$i(i=n.type,n.pendingProps),Mr(e,n,i,s=$i(i.type,s),a,t);case 15:return qr(e,n,n.type,n.pendingProps,a,t);case 17:return a=n.type,i=n.pendingProps,i=n.elementType===a?i:$i(a,i),null!==e&&(e.alternate=null,n.alternate=null,n.effectTag|=2),n.tag=1,mi(a)?(e=!0,yi(n)):e=!1,ts(n,t),As(n,a,i),ys(n,a,i,t),Lr(null,n,a,!0,e,t);case 19:return Vr(e,n,t)}throw Error(r(156,n.tag))};var _c=null,vc=null;function wc(e,n,t,a){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Ec(e,n,t,a){return new wc(e,n,t,a)}function Cc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function xc(e,n){var t=e.alternate;return null===t?((t=Ec(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.effectTag=0,t.nextEffect=null,t.firstEffect=null,t.lastEffect=null),t.childExpirationTime=e.childExpirationTime,t.expirationTime=e.expirationTime,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{expirationTime:n.expirationTime,firstContext:n.firstContext,responders:n.responders},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Bc(e,n,t,a,i,s){var o=2;if(a=e,"function"==typeof e)Cc(e)&&(o=1);else if("string"==typeof e)o=5;else e:switch(e){case te:return Sc(t.children,i,s,n);case oe:o=8,i|=7;break;case ae:o=8,i|=1;break;case ie:return(e=Ec(12,t,n,8|i)).elementType=ie,e.type=ie,e.expirationTime=s,e;case le:return(e=Ec(13,t,n,i)).type=le,e.elementType=le,e.expirationTime=s,e;case pe:return(e=Ec(19,t,n,i)).elementType=pe,e.expirationTime=s,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case se:o=10;break e;case re:o=9;break e;case ce:o=11;break e;case fe:o=14;break e;case ue:o=16,a=null;break e;case de:o=22;break e}throw Error(r(130,null==e?e:typeof e,""))}return(n=Ec(o,t,n,i)).elementType=e,n.type=a,n.expirationTime=s,n}function Sc(e,n,t,a){return(e=Ec(7,e,a,n)).expirationTime=t,e}function Tc(e,n,t){return(e=Ec(6,e,null,n)).expirationTime=t,e}function Pc(e,n,t){return(n=Ec(4,null!==e.children?e.children:[],e.key,n)).expirationTime=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Nc(e,n,t){this.tag=n,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function Mc(e,n){var t=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==t&&t>=n&&e<=n}function qc(e,n){var t=e.firstSuspendedTime,a=e.lastSuspendedTime;t<n&&(e.firstSuspendedTime=n),(a>n||0===t)&&(e.lastSuspendedTime=n),n<=e.lastPingedTime&&(e.lastPingedTime=0),n<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Ic(e,n){n>e.firstPendingTime&&(e.firstPendingTime=n);var t=e.firstSuspendedTime;0!==t&&(n>=t?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:n>=e.lastSuspendedTime&&(e.lastSuspendedTime=n+1),n>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=n))}function Oc(e,n){var t=e.lastExpiredTime;(0===t||t>n)&&(e.lastExpiredTime=n)}function zc(e,n,t,a){var i=n.current,s=Vo(),o=us.suspense;s=Ho(s,i,o);e:if(t){n:{if(Je(t=t._reactInternalFiber)!==t||1!==t.tag)throw Error(r(170));var c=t;do{switch(c.tag){case 3:c=c.stateNode.context;break n;case 1:if(mi(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break n}}c=c.return}while(null!==c);throw Error(r(171))}if(1===t.tag){var l=t.type;if(mi(l)){t=ki(t,l,c);break e}}t=c}else t=pi;return null===n.context?n.context=t:n.pendingContext=t,(n=os(s,o)).payload={element:e},null!==(a=void 0===a?null:a)&&(n.callback=a),cs(i,n),$o(i,s),s}function Lc(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Uc(e,n){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retryTime<n&&(e.retryTime=n)}function jc(e,n){Uc(e,n),(e=e.alternate)&&Uc(e,n)}function Dc(e,n,t){var a=new Nc(e,n,t=null!=t&&!0===t.hydrate),i=Ec(3,null,null,2===n?7:1===n?3:0);a.current=i,i.stateNode=a,ss(i),e[xt]=a.current,t&&0!==n&&function(e,n){var t=Ge(n);Bn.forEach((function(e){mn(e,n,t)})),Sn.forEach((function(e){mn(e,n,t)}))}(0,9===e.nodeType?e:e.ownerDocument),this._internalRoot=a}function Fc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Rc(e,n,t,a,i){var s=t._reactRootContainer;if(s){var r=s._internalRoot;if("function"==typeof i){var o=i;i=function(){var e=Lc(r);o.call(e)}}zc(n,r,e,i)}else{if(s=t._reactRootContainer=function(e,n){if(n||(n=!(!(n=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==n.nodeType||!n.hasAttribute("data-reactroot"))),!n)for(var t;t=e.lastChild;)e.removeChild(t);return new Dc(e,0,n?{hydrate:!0}:void 0)}(t,a),r=s._internalRoot,"function"==typeof i){var c=i;i=function(){var e=Lc(r);c.call(e)}}nc((function(){zc(n,r,e,i)}))}return Lc(r)}function Yc(e,n,t){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ne,key:null==a?null:""+a,children:e,containerInfo:n,implementation:t}}function Qc(e,n){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Fc(n))throw Error(r(200));return Yc(e,n,null,t)}Dc.prototype.render=function(e){zc(e,this._internalRoot,null,null)},Dc.prototype.unmount=function(){var e=this._internalRoot,n=e.containerInfo;zc(null,e,null,(function(){n[xt]=null}))},hn=function(e){if(13===e.tag){var n=Hi(Vo(),150,100);$o(e,n),jc(e,n)}},An=function(e){13===e.tag&&($o(e,3),jc(e,3))},kn=function(e){if(13===e.tag){var n=Vo();$o(e,n=Ho(n,e,null)),jc(e,n)}},S=function(e,n,t){switch(n){case"input":if(Ce(e,t),n=t.name,"radio"===t.type&&null!=n){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),n=0;n<t.length;n++){var a=t[n];if(a!==e&&a.form===e.form){var i=Pt(a);if(!i)throw Error(r(90));_e(a),Ce(a,i)}}}break;case"textarea":Me(e,t);break;case"select":null!=(n=t.value)&&Te(e,!!t.multiple,n,!1)}},I=ec,O=function(e,n,t,a,i){var s=wo;wo|=4;try{return Ri(98,e.bind(null,n,t,a,i))}finally{0===(wo=s)&&Wi()}},z=function(){0==(49&wo)&&(function(){if(null!==Ro){var e=Ro;Ro=null,e.forEach((function(e,n){Oc(n,e),Zo(n)})),Wi()}}(),mc())},L=function(e,n){var t=wo;wo|=2;try{return e(n)}finally{0===(wo=t)&&Wi()}};var Wc,Vc,Hc={Events:[St,Tt,Pt,x,w,Lt,function(e){sn(e,zt)},M,q,Gn,cn,mc,{current:!1}]};Vc=(Wc={findFiberByHostInstance:Bt,bundleType:0,version:"16.14.0",rendererPackageName:"react-dom"}).findFiberByHostInstance,function(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var n=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(n.isDisabled||!n.supportsFiber)return!0;try{var t=n.inject(e);_c=function(e){try{n.onCommitFiberRoot(t,e,void 0,64==(64&e.current.effectTag))}catch(e){}},vc=function(e){try{n.onCommitFiberUnmount(t,e)}catch(e){}}}catch(e){}}(i({},Wc,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:K.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=tn(e))?null:e.stateNode},findFiberByHostInstance:function(e){return Vc?Vc(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null})),n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Hc,n.createPortal=Qc,n.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var n=e._reactInternalFiber;if(void 0===n){if("function"==typeof e.render)throw Error(r(188));throw Error(r(268,Object.keys(e)))}return e=null===(e=tn(n))?null:e.stateNode},n.flushSync=function(e,n){if(0!=(48&wo))throw Error(r(187));var t=wo;wo|=1;try{return Ri(99,e.bind(null,n))}finally{wo=t,Wi()}},n.hydrate=function(e,n,t){if(!Fc(n))throw Error(r(200));return Rc(null,e,n,!0,t)},n.render=function(e,n,t){if(!Fc(n))throw Error(r(200));return Rc(null,e,n,!1,t)},n.unmountComponentAtNode=function(e){if(!Fc(e))throw Error(r(40));return!!e._reactRootContainer&&(nc((function(){Rc(null,null,e,!1,(function(){e._reactRootContainer=null,e[xt]=null}))})),!0)},n.unstable_batchedUpdates=ec,n.unstable_createPortal=function(e,n){return Qc(e,n,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},n.unstable_renderSubtreeIntoContainer=function(e,n,t,a){if(!Fc(t))throw Error(r(200));if(null==e||void 0===e._reactInternalFiber)throw Error(r(38));return Rc(e,n,t,!1,a)},n.version="16.14.0"},function(e,n,t){"use strict";e.exports=t(23)},function(e,n,t){"use strict";
|
28 |
+
/** @license React v0.19.1
|
29 |
+
* scheduler.production.min.js
|
30 |
+
*
|
31 |
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
32 |
+
*
|
33 |
+
* This source code is licensed under the MIT license found in the
|
34 |
+
* LICENSE file in the root directory of this source tree.
|
35 |
+
*/var a,i,s,r,o;if("undefined"==typeof window||"function"!=typeof MessageChannel){var c=null,l=null,p=function(){if(null!==c)try{var e=n.unstable_now();c(!0,e),c=null}catch(e){throw setTimeout(p,0),e}},f=Date.now();n.unstable_now=function(){return Date.now()-f},a=function(e){null!==c?setTimeout(a,0,e):(c=e,setTimeout(p,0))},i=function(e,n){l=setTimeout(e,n)},s=function(){clearTimeout(l)},r=function(){return!1},o=n.unstable_forceFrameRate=function(){}}else{var u=window.performance,d=window.Date,g=window.setTimeout,m=window.clearTimeout;if("undefined"!=typeof console){var h=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof h&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof u&&"function"==typeof u.now)n.unstable_now=function(){return u.now()};else{var A=d.now();n.unstable_now=function(){return d.now()-A}}var k=!1,y=null,b=-1,_=5,v=0;r=function(){return n.unstable_now()>=v},o=function(){},n.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):_=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==y){var e=n.unstable_now();v=e+_;try{y(!0,e)?E.postMessage(null):(k=!1,y=null)}catch(e){throw E.postMessage(null),e}}else k=!1},a=function(e){y=e,k||(k=!0,E.postMessage(null))},i=function(e,t){b=g((function(){e(n.unstable_now())}),t)},s=function(){m(b),b=-1}}function C(e,n){var t=e.length;e.push(n);e:for(;;){var a=t-1>>>1,i=e[a];if(!(void 0!==i&&0<S(i,n)))break e;e[a]=n,e[t]=i,t=a}}function x(e){return void 0===(e=e[0])?null:e}function B(e){var n=e[0];if(void 0!==n){var t=e.pop();if(t!==n){e[0]=t;e:for(var a=0,i=e.length;a<i;){var s=2*(a+1)-1,r=e[s],o=s+1,c=e[o];if(void 0!==r&&0>S(r,t))void 0!==c&&0>S(c,r)?(e[a]=c,e[o]=t,a=o):(e[a]=r,e[s]=t,a=s);else{if(!(void 0!==c&&0>S(c,t)))break e;e[a]=c,e[o]=t,a=o}}}return n}return null}function S(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}var T=[],P=[],N=1,M=null,q=3,I=!1,O=!1,z=!1;function L(e){for(var n=x(P);null!==n;){if(null===n.callback)B(P);else{if(!(n.startTime<=e))break;B(P),n.sortIndex=n.expirationTime,C(T,n)}n=x(P)}}function U(e){if(z=!1,L(e),!O)if(null!==x(T))O=!0,a(j);else{var n=x(P);null!==n&&i(U,n.startTime-e)}}function j(e,t){O=!1,z&&(z=!1,s()),I=!0;var a=q;try{for(L(t),M=x(T);null!==M&&(!(M.expirationTime>t)||e&&!r());){var o=M.callback;if(null!==o){M.callback=null,q=M.priorityLevel;var c=o(M.expirationTime<=t);t=n.unstable_now(),"function"==typeof c?M.callback=c:M===x(T)&&B(T),L(t)}else B(T);M=x(T)}if(null!==M)var l=!0;else{var p=x(P);null!==p&&i(U,p.startTime-t),l=!1}return l}finally{M=null,q=a,I=!1}}function D(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var F=o;n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_continueExecution=function(){O||I||(O=!0,a(j))},n.unstable_getCurrentPriorityLevel=function(){return q},n.unstable_getFirstCallbackNode=function(){return x(T)},n.unstable_next=function(e){switch(q){case 1:case 2:case 3:var n=3;break;default:n=q}var t=q;q=n;try{return e()}finally{q=t}},n.unstable_pauseExecution=function(){},n.unstable_requestPaint=F,n.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=q;q=e;try{return n()}finally{q=t}},n.unstable_scheduleCallback=function(e,t,r){var o=n.unstable_now();if("object"==typeof r&&null!==r){var c=r.delay;c="number"==typeof c&&0<c?o+c:o,r="number"==typeof r.timeout?r.timeout:D(e)}else r=D(e),c=o;return e={id:N++,callback:t,priorityLevel:e,startTime:c,expirationTime:r=c+r,sortIndex:-1},c>o?(e.sortIndex=c,C(P,e),null===x(T)&&e===x(P)&&(z?s():z=!0,i(U,c-o))):(e.sortIndex=r,C(T,e),O||I||(O=!0,a(j))),e},n.unstable_shouldYield=function(){var e=n.unstable_now();L(e);var t=x(T);return t!==M&&null!==M&&null!==t&&null!==t.callback&&t.startTime<=e&&t.expirationTime<M.expirationTime||r()},n.unstable_wrapCallback=function(e){var n=q;return function(){var t=q;q=n;try{return e.apply(this,arguments)}finally{q=t}}}},function(e,n,t){var a=t(25),i=t(26);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var s={insert:"head",singleton:!1};a(i,s);e.exports=i.locals||{}},function(e,n,t){"use strict";var a,i=function(){return void 0===a&&(a=Boolean(window&&document&&document.all&&!window.atob)),a},s=function(){var e={};return function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}e[n]=t}return e[n]}}(),r=[];function o(e){for(var n=-1,t=0;t<r.length;t++)if(r[t].identifier===e){n=t;break}return n}function c(e,n){for(var t={},a=[],i=0;i<e.length;i++){var s=e[i],c=n.base?s[0]+n.base:s[0],l=t[c]||0,p="".concat(c," ").concat(l);t[c]=l+1;var f=o(p),u={css:s[1],media:s[2],sourceMap:s[3]};-1!==f?(r[f].references++,r[f].updater(u)):r.push({identifier:p,updater:h(u,n),references:1}),a.push(p)}return a}function l(e){var n=document.createElement("style"),a=e.attributes||{};if(void 0===a.nonce){var i=t.nc;i&&(a.nonce=i)}if(Object.keys(a).forEach((function(e){n.setAttribute(e,a[e])})),"function"==typeof e.insert)e.insert(n);else{var r=s(e.insert||"head");if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}return n}var p,f=(p=[],function(e,n){return p[e]=n,p.filter(Boolean).join("\n")});function u(e,n,t,a){var i=t?"":a.media?"@media ".concat(a.media," {").concat(a.css,"}"):a.css;if(e.styleSheet)e.styleSheet.cssText=f(n,i);else{var s=document.createTextNode(i),r=e.childNodes;r[n]&&e.removeChild(r[n]),r.length?e.insertBefore(s,r[n]):e.appendChild(s)}}function d(e,n,t){var a=t.css,i=t.media,s=t.sourceMap;if(i?e.setAttribute("media",i):e.removeAttribute("media"),s&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),e.styleSheet)e.styleSheet.cssText=a;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(a))}}var g=null,m=0;function h(e,n){var t,a,i;if(n.singleton){var s=m++;t=g||(g=l(n)),a=u.bind(null,t,s,!1),i=u.bind(null,t,s,!0)}else t=l(n),a=d.bind(null,t,n),i=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)};return a(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap)return;a(e=n)}else i()}}e.exports=function(e,n){(n=n||{}).singleton||"boolean"==typeof n.singleton||(n.singleton=i());var t=c(e=e||[],n);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var a=0;a<t.length;a++){var i=o(t[a]);r[i].references--}for(var s=c(e,n),l=0;l<t.length;l++){var p=o(t[l]);0===r[p].references&&(r[p].updater(),r.splice(p,1))}t=s}}}},function(e,n,t){"use strict";t.r(n);var a=t(7),i=t.n(a)()(!0);i.push([e.i,'#root, #fs_pricing_wrapper {\n background: #f1f1f1;\n height: auto;\n line-height: normal;\n font-size: 13px;\n margin: 0;\n /**\n * MAIN HEADER\n */\n /**\n * MAIN SECTIONS CONTAINER\n */ }\n #root, #root span, #root input, #root select, #root label, #root a, #root div, #root th, #root td, #fs_pricing_wrapper, #fs_pricing_wrapper span, #fs_pricing_wrapper input, #fs_pricing_wrapper select, #fs_pricing_wrapper label, #fs_pricing_wrapper a, #fs_pricing_wrapper div, #fs_pricing_wrapper th, #fs_pricing_wrapper td {\n font-family: "Open Sans", sans-serif; }\n #root h1, #root h2, #root h3, #root h4, #root ul, #root blockquote, #fs_pricing_wrapper h1, #fs_pricing_wrapper h2, #fs_pricing_wrapper h3, #fs_pricing_wrapper h4, #fs_pricing_wrapper ul, #fs_pricing_wrapper blockquote {\n margin: 0;\n padding: 0;\n text-align: center; }\n #root h1, #fs_pricing_wrapper h1 {\n font-size: 2.5em; }\n #root h2, #fs_pricing_wrapper h2 {\n font-size: 1.5em; }\n #root h3, #fs_pricing_wrapper h3 {\n font-size: 1.2em; }\n #root ul, #fs_pricing_wrapper ul {\n list-style-type: none; }\n #root p, #fs_pricing_wrapper p {\n font-size: 0.9em; }\n #root p, #root blockquote, #fs_pricing_wrapper p, #fs_pricing_wrapper blockquote {\n color: #606060; }\n #root strong, #fs_pricing_wrapper strong {\n font-weight: bold; }\n #root li, #root dd, #fs_pricing_wrapper li, #fs_pricing_wrapper dd {\n margin: 0; }\n #root .fs-app-header .fs-page-title, #fs_pricing_wrapper .fs-app-header .fs-page-title {\n margin: 15px 0;\n text-align: left; }\n #root .fs-app-header .fs-page-title h2, #root .fs-app-header .fs-page-title h3, #fs_pricing_wrapper .fs-app-header .fs-page-title h2, #fs_pricing_wrapper .fs-app-header .fs-page-title h3 {\n display: inline-block; }\n #root .fs-app-header .fs-page-title h2, #fs_pricing_wrapper .fs-app-header .fs-page-title h2 {\n vertical-align: middle; }\n #root .fs-app-header .fs-page-title h3, #fs_pricing_wrapper .fs-app-header .fs-page-title h3 {\n font-size: small;\n margin-left: 15px;\n background: #e0e0e0;\n padding: 3px;\n border-radius: 2px;\n vertical-align: sub; }\n #root .fs-app-header .fs-plugin-title-and-logo, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo {\n background: #fff;\n padding-top: 12px;\n padding-bottom: 12px;\n border: 1px solid #ccc;\n border-radius: 3px;\n text-align: center;\n background: #fff; }\n #root .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo, #root .fs-app-header .fs-plugin-title-and-logo h1, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo h1 {\n display: inline-block;\n vertical-align: middle;\n margin: 0 10px; }\n #root .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo {\n width: 48px;\n height: 48px; }\n #root .fs-trial-message, #fs_pricing_wrapper .fs-trial-message {\n padding: 20px;\n background: #FFE4BF;\n color: #E07B00;\n font-weight: bold;\n text-align: center;\n border: 2px solid darkorange;\n font-size: 1.2em; }\n #root .fs-app-main, #fs_pricing_wrapper .fs-app-main {\n text-align: center; }\n #root .fs-app-main .fs-section, #fs_pricing_wrapper .fs-app-main .fs-section {\n margin: auto;\n display: block; }\n #root .fs-app-main .fs-section .fs-section-header, #fs_pricing_wrapper .fs-app-main .fs-section .fs-section-header {\n font-weight: bold; }\n #root .fs-app-main > .fs-section, #fs_pricing_wrapper .fs-app-main > .fs-section {\n padding: 20px;\n margin: 4em auto 0 auto; }\n #root .fs-app-main > .fs-section:nth-child(even), #fs_pricing_wrapper .fs-app-main > .fs-section:nth-child(even) {\n background: white; }\n #root .fs-app-main > .fs-section > header, #fs_pricing_wrapper .fs-app-main > .fs-section > header {\n margin: 0 0 3em 0; }\n #root .fs-app-main > .fs-section > header h2, #fs_pricing_wrapper .fs-app-main > .fs-section > header h2 {\n margin: 0;\n font-size: 2.5em; }\n #root .fs-app-main .fs-section--plans-and-pricing, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing {\n padding: 20px 60px;\n margin-top: 0; }\n #root .fs-app-main .fs-section--plans-and-pricing > .fs-section, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing > .fs-section {\n margin: 1.5em auto 0; }\n #root .fs-app-main .fs-section--plans-and-pricing > .fs-section:first-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing > .fs-section:first-child {\n margin-top: 0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-annual-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-annual-discount {\n font-weight: bold;\n font-size: small; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header {\n text-align: center;\n background: #f9f9f9;\n padding: 20px;\n border-radius: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h2, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h2 {\n margin-bottom: 10px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h4, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h4 {\n font-weight: normal; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles {\n display: inline-block;\n vertical-align: middle;\n padding: 0 10px;\n width: auto; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles {\n border: 1px solid #ccc;\n border-radius: 20px;\n overflow: hidden; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li {\n display: inline-block;\n font-weight: bold;\n margin: 0;\n padding: 10px 10px;\n cursor: pointer; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li.fs-selected-billing-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li.fs-selected-billing-cycle {\n background: #1fbc99;\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li:not(:last-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li:not(:last-child) {\n border-right: 1px solid #ccc; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages {\n display: inline-block;\n width: 100%;\n position: relative; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {\n display: none;\n flex-wrap: wrap;\n justify-content: center; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab {\n display: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab {\n display: inline-block;\n flex: 1; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab a, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab a {\n display: block;\n padding: 4px 10px 7px;\n border-bottom: 2px solid transparent;\n color: #000;\n text-align: center;\n text-decoration: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab.fs-package-tab--selected a, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab.fs-package-tab--selected a {\n border-color: #0085ba; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav {\n position: relative;\n overflow: hidden;\n margin: auto; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:before, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:after {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 60px;\n margin-top: 2.8em;\n z-index: 1;\n margin-bottom: 32px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-previous-plan:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-previous-plan:before {\n content: "";\n left: 0;\n background: linear-gradient(to right, #cccccc96, transparent); }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-next-plan:after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-next-plan:after {\n content: "";\n right: 0;\n background: linear-gradient(to left, #cccccc96, transparent); }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package {\n position: absolute;\n top: 50%;\n margin-top: -11px;\n cursor: pointer;\n font-size: 48px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package {\n visibility: hidden; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages {\n width: auto;\n display: inline-block;\n margin-bottom: 30px;\n border-top-right-radius: 10px;\n position: relative;\n transition: left 500ms ease,right 500ms ease;\n padding-top: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages.fs-has-featured-plan, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages.fs-has-featured-plan {\n margin-top: 2.8em; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages:before {\n content: \'\';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100px;\n height: 100px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package {\n display: inline-block;\n vertical-align: top;\n background: #fff;\n border-bottom: 3px solid #e8e8e8;\n width: 315px;\n box-sizing: border-box; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:first-child, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package + .fs-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:first-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package + .fs-package {\n border-left: 1px solid #e8e8e8; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:last-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:last-child {\n border-right: 1px solid #e8e8e8; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child .fs-plan-title {\n border-top-left-radius: 10px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-package-content, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-package-content {\n vertical-align: middle;\n padding-bottom: 30px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title {\n padding: 10px 0;\n background: #f8f8f9;\n text-transform: uppercase;\n border-bottom: 1px solid #f1f1f2;\n border-right: 1px solid #f1f1f2;\n width: 100%;\n text-align: center; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title:last-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title:last-child {\n border-right: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-licenses, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-licenses, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features {\n margin-top: 10px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description {\n text-transform: uppercase; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price {\n margin: auto;\n position: relative;\n display: inline-block;\n color: #808080;\n top: 6px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price::after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price::after {\n content: \'\';\n border-bottom: 1px solid #dd89a8;\n position: absolute;\n left: -2px;\n top: 50%;\n width: 100%;\n padding: 0px 2px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount {\n margin: 5px 0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol {\n font-size: 39px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer {\n font-size: 58px;\n margin: 0 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container {\n display: inline-block;\n vertical-align: middle; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol:not(.fs-selected-pricing-amount-integer),\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer:not(.fs-selected-pricing-amount-integer),\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container:not(.fs-selected-pricing-amount-integer), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol:not(.fs-selected-pricing-amount-integer),\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer:not(.fs-selected-pricing-amount-integer),\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container:not(.fs-selected-pricing-amount-integer) {\n line-height: 18px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle {\n display: block;\n font-size: 12px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction {\n vertical-align: top; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle {\n vertical-align: bottom; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container {\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount-free, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount-free {\n font-size: 48px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-cycle {\n margin-bottom: 5px;\n text-transform: uppercase;\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity {\n color: #47aed6; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity .fs-tooltip, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity .fs-tooltip {\n margin-left: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container {\n padding: 0 13px;\n display: block; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container .fs-upgrade-button {\n margin-top: 20px;\n margin-bottom: 5px;\n outline: none;\n cursor: pointer; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features {\n text-align: left;\n margin-left: 13px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li {\n font-size: 16px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li:not(:first-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li:not(:first-child) {\n margin-top: 8px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li > span, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li > span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip {\n font-size: small;\n vertical-align: middle;\n display: inline-block; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-feature-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-feature-title {\n margin: 0 5px;\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-icon, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip {\n color: #2da1d0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features {\n margin-top: 12px;\n padding-top: 18px;\n padding-bottom: 18px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-support, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-support {\n margin-bottom: 15px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li {\n font-size: small; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li .fs-feature-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li .fs-feature-title {\n margin: 0 2px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li:not(:first-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li:not(:first-child) {\n margin-top: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities {\n border-collapse: collapse;\n position: relative;\n width: 100%; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities input, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities input {\n cursor: pointer; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span {\n background: #2da1d0;\n color: #fff;\n display: inline;\n padding: 4px 8px;\n border-radius: 4px;\n font-weight: bold;\n margin: 0 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span.fs-license-quantity-no-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span.fs-license-quantity-no-discount {\n visibility: hidden; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container {\n line-height: 30px;\n border-top: 1px solid #f0f0f0;\n border-bottom: 1px solid #f0f0f0;\n font-size: small; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected {\n background: #2da1d0;\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected .fs-license-quantity-discount > span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected .fs-license-quantity-discount > span {\n background: #fff;\n color: #2da1d0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container > td:not(.fs-license-quantity-discount), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container > td:not(.fs-license-quantity-discount) {\n text-align: left; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price {\n vertical-align: middle;\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity {\n position: relative; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity input, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity input {\n position: relative;\n margin-top: -1px;\n margin-left: 7px;\n margin-right: 7px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price {\n position: relative;\n margin-right: auto;\n padding-right: 7px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-free-plan .fs-license-quantity-container:not(:last-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-free-plan .fs-license-quantity-container:not(:last-child) {\n border-color: transparent; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title {\n background: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-most-popular, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-most-popular {\n display: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-most-popular, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-most-popular {\n display: block;\n line-height: 2.8em;\n margin-top: -2.8em;\n border-radius: 20px 20px 0 0;\n color: #fff;\n background: #158369;\n text-transform: uppercase;\n font-size: 14px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title {\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-selected-pricing-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-selected-pricing-license-quantity {\n color: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity:before {\n content: "";\n position: absolute;\n top: 0;\n bottom: 0;\n left: -1px;\n border-left: 2px solid #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity-price:after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity-price:after {\n content: "";\n position: absolute;\n top: 0;\n bottom: 0;\n right: -1px;\n border-right: 2px solid #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected {\n background: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected .fs-license-quantity-discount > span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected .fs-license-quantity-discount > span {\n color: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-discount span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-discount span {\n background: #1fbc99;\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button {\n border-bottom: 3px solid #15846a; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-tooltip .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-tooltip .fs-icon {\n color: #1fbc99 !important; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-discount, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-price {\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation {\n padding: 15px 15px;\n background: #fff;\n border: 1px solid #ccc;\n border-radius: 8px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation h2, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation h2 {\n margin-bottom: 10px;\n font-weight: bold; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation p, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation p {\n font-size: small;\n margin: 0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee {\n max-width: 857px;\n margin: 30px auto;\n position: relative; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-title {\n color: #1fbc99;\n font-weight: bold;\n margin-bottom: 15px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-message, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-message {\n font-size: small;\n line-height: 20px;\n margin-bottom: 15px;\n padding: 0 15px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee img, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee img {\n position: absolute;\n width: 90px;\n top: 50%;\n right: 0;\n margin-top: -45px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge {\n display: inline-block;\n vertical-align: middle;\n position: relative;\n box-shadow: none;\n background: transparent; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge + .fs-badge, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge + .fs-badge {\n margin-left: 20px;\n margin-top: 13px; }\n #root .fs-app-main .fs-section--testimonials, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials {\n border-top: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n padding: 4em 4em 1.6em 4em; }\n #root .fs-app-main .fs-section--testimonials .fs-section-header, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-section-header {\n color: #2da1d0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav {\n margin: auto;\n margin-top: 40px;\n display: block;\n width: auto;\n position: relative; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next {\n top: 50%;\n border: 1px solid #c9c9c9;\n border-radius: 14px;\n cursor: pointer;\n margin-top: 11px;\n position: absolute; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev .fs-icon, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next .fs-icon {\n display: inline-block;\n height: 1em;\n width: 1em;\n line-height: 1em;\n color: #c9c9c9;\n padding: 5px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev {\n margin-left: -30px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next {\n right: -30px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials-track, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials-track {\n margin: auto;\n overflow: hidden;\n position: relative;\n display: block;\n padding-top: 45px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials {\n width: 10000px;\n display: block;\n position: relative;\n transition: left 500ms ease,right 500ms ease; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial {\n float: left;\n font-size: small;\n border-radius: 15px;\n position: relative;\n width: 340px;\n box-sizing: border-box;\n margin: 0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section {\n box-sizing: border-box; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-rating, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-rating {\n color: #f7941d; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section {\n background: #f7f7f7;\n padding: 10px;\n margin: 0 2em;\n border: 1px solid #e2e2e2; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section {\n border-radius: 0 0 20px 20px;\n border-top: 0 none; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header {\n border-bottom: 0 none;\n border-radius: 20px 20px 0 0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo {\n border: 1px solid #e4e4e4;\n border-radius: 44px;\n padding: 5px;\n background: #fff;\n width: 76px;\n height: 76px;\n position: relative;\n margin-top: -54px;\n left: 50%;\n margin-left: -44px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo object, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo img, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo object, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo img {\n max-width: 100%;\n border-radius: 40px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header h4, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header h4 {\n margin: 15px 0 6px 0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-icon-quote, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-icon-quote {\n color: #2da1d0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-message, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-message {\n line-height: 18px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author {\n margin-top: 35px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author .fs-testimonial-author-name, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author .fs-testimonial-author-name {\n font-weight: bold;\n margin-bottom: 2px;\n color: #505050; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author:last-child, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author:last-child {\n color: #8f8f8f; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination {\n margin: 45px 0 25px 0;\n position: relative; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li {\n position: relative;\n display: inline-block;\n margin: 0 8px; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button {\n cursor: pointer;\n border: 1px solid #d2d2d2;\n vertical-align: middle;\n display: inline-block;\n line-height: 0;\n width: 8px;\n height: 8px;\n padding: 0;\n color: transparent;\n outline: none;\n border-radius: 4px;\n overflow: hidden; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button span, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button span {\n display: inline-block;\n width: 100%;\n height: 100%;\n background: #f7f7f7; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button {\n border: 0 none; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button.fs-round-button span, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button.fs-round-button span {\n background: #c9c9c9; }\n #root .fs-app-main .fs-section--faq, #fs_pricing_wrapper .fs-app-main .fs-section--faq {\n background: #f1f1f1; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items {\n max-width: 850px;\n text-align: left;\n columns: 2;\n column-gap: 20px; }\n @media only screen and (max-width: 600px) {\n #root .fs-app-main .fs-section--faq .fs-section--faq-items, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items {\n columns: 1; } }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item {\n width: 100%;\n display: inline-block;\n vertical-align: top;\n margin: 0 0 20px 0;\n overflow: hidden; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3, #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p {\n margin: 0;\n text-align: left; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3 {\n background: #f7f7f7;\n padding: 15px;\n font-weight: bold;\n border: 1px solid #dbdbdb;\n border-bottom: 1px solid #dedede;\n border-radius: 3px 3px 0 0; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p {\n background: #fff;\n font-size: small;\n padding: 15px;\n line-height: 20px;\n border: 1px solid #dbdbdb;\n border-top: 0 none;\n border-radius: 0 0 3px 3px; }\n #root .fs-button, #fs_pricing_wrapper .fs-button {\n background: #e0e0e0;\n padding: 10px;\n display: inline-block;\n text-transform: uppercase;\n font-weight: bold;\n font-size: 18px;\n width: 100%;\n border-radius: 4px;\n border-bottom: 3px solid #a0a0a0; }\n #root .fs-button.fs-button--size-small, #fs_pricing_wrapper .fs-button.fs-button--size-small {\n font-size: 14px;\n width: auto; }\n #root .fs-tooltip, #fs_pricing_wrapper .fs-tooltip {\n cursor: help;\n position: relative;\n color: #2da1d0 !important; }\n #root .fs-tooltip .fs-tooltip-message, #fs_pricing_wrapper .fs-tooltip .fs-tooltip-message {\n position: absolute;\n width: 200px;\n background: #000;\n z-index: 1;\n display: none;\n border-radius: 4px;\n color: #fff;\n padding: 8px;\n text-align: left;\n line-height: 18px;\n transform: translate(0, -50%);\n left: 30px;\n top: 8px; }\n #root .fs-tooltip .fs-tooltip-message:before, #fs_pricing_wrapper .fs-tooltip .fs-tooltip-message:before {\n content: "";\n position: absolute;\n left: -8px;\n z-index: 1;\n top: 50%;\n margin-top: -6px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 8px solid #000; }\n #root .fs-tooltip:hover .fs-tooltip-message, #fs_pricing_wrapper .fs-tooltip:hover .fs-tooltip-message {\n display: block; }\n #root .fs-placeholder:before, #fs_pricing_wrapper .fs-placeholder:before {\n content: "";\n display: inline-block; }\n #root .fs-modal, #fs_pricing_wrapper .fs-modal {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n z-index: 1000;\n zoom: 1;\n text-align: left;\n display: block important; }\n #root .fs-modal .fs-modal-content-container, #fs_pricing_wrapper .fs-modal .fs-modal-content-container {\n display: block;\n position: absolute;\n left: 50%;\n background: #fff;\n box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.3); }\n #root .fs-modal .fs-modal-content-container .fs-modal-header, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-header {\n background: #534741;\n padding: 15px; }\n #root .fs-modal .fs-modal-content-container .fs-modal-header h3, #root .fs-modal .fs-modal-content-container .fs-modal-header .fs-modal-close, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-header h3, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-header .fs-modal-close {\n color: #fff; }\n #root .fs-modal .fs-modal-content-container .fs-modal-content, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-content {\n font-size: 1.2em; }\n #root .fs-modal--loading, #fs_pricing_wrapper .fs-modal--loading {\n background-color: rgba(0, 0, 0, 0.3); }\n #root .fs-modal--loading .fs-modal-content-container, #fs_pricing_wrapper .fs-modal--loading .fs-modal-content-container {\n width: 220px;\n margin-left: -126px;\n padding: 15px;\n border: 1px solid #ccc;\n text-align: center;\n top: 50%; }\n #root .fs-modal--loading .fs-modal-content-container span, #fs_pricing_wrapper .fs-modal--loading .fs-modal-content-container span {\n display: block;\n font-weight: bold;\n font-size: 16px;\n text-align: center;\n color: #29abe1;\n margin-bottom: 10px; }\n #root .fs-modal--loading .fs-modal-content-container i, #fs_pricing_wrapper .fs-modal--loading .fs-modal-content-container i {\n display: block;\n width: 128px;\n margin: 0 auto;\n height: 15px;\n background: url(//img.freemius.com/blue-loader.gif); }\n #root .fs-modal--refund-policy, #root .fs-modal--trial-confirmation, #fs_pricing_wrapper .fs-modal--refund-policy, #fs_pricing_wrapper .fs-modal--trial-confirmation {\n background: rgba(0, 0, 0, 0.7); }\n #root .fs-modal--refund-policy .fs-modal-content-container, #root .fs-modal--trial-confirmation .fs-modal-content-container, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container {\n width: 510px;\n margin-left: -255px;\n top: 20%; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-header .fs-modal-close, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-header .fs-modal-close, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-header .fs-modal-close, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-header .fs-modal-close {\n line-height: 24px;\n font-size: 24px;\n position: absolute;\n top: -12px;\n right: -12px;\n cursor: pointer; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-content, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-content, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-content, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-content {\n background: #f2f2f2;\n height: 100%;\n padding: 1px 15px; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer {\n padding: 20px;\n text-align: right;\n border-top: 1px solid #e4e4e4;\n background: #f2f2f2; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial {\n margin: 0 7px; }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button {\n width: auto;\n font-size: 13px;\n line-height: 26px;\n height: 28px;\n padding: 0 10px 1px;\n border-width: 1px;\n text-transform: none;\n font-weight: normal;\n box-shadow: 0 1px 0 #cccccc;\n background: #f7f7f7;\n border-color: #cccccc;\n color: #555;\n cursor: pointer;\n outline: none; }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:hover, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:hover {\n background: #fafafa;\n border-color: #999;\n color: #23282d; }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:active, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:active {\n background: #eee;\n border-color: #999;\n box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);\n transform: translateY(1px); }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button.fs-button--primary, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button.fs-button--primary {\n background: #0085ba;\n border-color: #0073aa #006799 #006799;\n box-shadow: 0 1px 0 #006799;\n color: #fff;\n text-decoration: none; }\n @media only screen and (max-width: 768px) {\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package, #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package {\n display: none; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {\n display: block;\n font-size: 24px; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab {\n display: flex;\n font-size: 24px; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-most-popular, #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package .fs-most-popular, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-most-popular, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package .fs-most-popular {\n display: none; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {\n display: flex; } }\n @media only screen and (max-width: 400px) {\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package {\n width: 100%; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial {\n width: auto; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--billing-cycles .fs-billing-cycles li.fs-period--annual span, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--billing-cycles .fs-billing-cycles li.fs-period--annual span {\n display: none; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing {\n padding: 10px; } }\n @media only screen and (max-width: 375px) {\n #root #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package {\n width: 100%; }\n #root #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial {\n width: auto; } }\n',"",{version:3,sources:["webpack://src/assets/scss/App.scss"],names:[],mappings:"AAAA;EACE,mBAAmB;EACnB,YAAY;EACZ,mBAAmB;EACnB,eAAe;EACf,SAAS;EACT;;IAEE;EACF;;IAEE,EAAE;EACJ;IACE,oCAAoC,EAAE;EACxC;IACE,SAAS;IACT,UAAU;IACV,kBAAkB,EAAE;EACtB;IACE,gBAAgB,EAAE;EACpB;IACE,gBAAgB,EAAE;EACpB;IACE,gBAAgB,EAAE;EACpB;IACE,qBAAqB,EAAE;EACzB;IACE,gBAAgB,EAAE;EACpB;IACE,cAAc,EAAE;EAClB;IACE,iBAAiB,EAAE;EACrB;IACE,SAAS,EAAE;EACb;IACE,cAAc;IACd,gBAAgB,EAAE;IAClB;MACE,qBAAqB,EAAE;IACzB;MACE,sBAAsB,EAAE;IAC1B;MACE,gBAAgB;MAChB,iBAAiB;MACjB,mBAAmB;MACnB,YAAY;MACZ,kBAAkB;MAClB,mBAAmB,EAAE;EACzB;IACE,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB,EAAE;IAClB;MACE,qBAAqB;MACrB,sBAAsB;MACtB,cAAc,EAAE;IAClB;MACE,WAAW;MACX,YAAY,EAAE;EAClB;IACE,aAAa;IACb,mBAAmB;IACnB,cAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,4BAA4B;IAC5B,gBAAgB,EAAE;EACpB;IACE,kBAAkB,EAAE;IACpB;MACE,YAAY;MACZ,cAAc,EAAE;MAChB;QACE,iBAAiB,EAAE;IACvB;MACE,aAAa;MACb,uBAAuB,EAAE;MACzB;QACE,iBAAiB,EAAE;MACrB;QACE,iBAAiB,EAAE;QACnB;UACE,SAAS;UACT,gBAAgB,EAAE;IACxB;MACE,kBAAkB;MAClB,aAAa,EAAE;MACf;QACE,oBAAoB,EAAE;QACtB;UACE,aAAa,EAAE;MACnB;QACE,iBAAiB;QACjB,gBAAgB,EAAE;MACpB;QACE,kBAAkB;QAClB,mBAAmB;QACnB,aAAa;QACb,kBAAkB,EAAE;QACpB;UACE,mBAAmB,EAAE;QACvB;UACE,mBAAmB,EAAE;MACzB;QACE,qBAAqB;QACrB,sBAAsB;QACtB,eAAe;QACf,WAAW,EAAE;QACb;UACE,sBAAsB;UACtB,mBAAmB;UACnB,gBAAgB,EAAE;UAClB;YACE,qBAAqB;YACrB,iBAAiB;YACjB,SAAS;YACT,kBAAkB;YAClB,eAAe,EAAE;YACjB;cACE,mBAAmB;cACnB,WAAW,EAAE;YACf;cACE,4BAA4B,EAAE;MACtC;QACE,qBAAqB;QACrB,WAAW;QACX,kBAAkB,EAAE;QACpB;UACE,aAAa;UACb,eAAe;UACf,uBAAuB,EAAE;QAC3B;UACE,aAAa,EAAE;QACjB;UACE,qBAAqB;UACrB,OAAO,EAAE;UACT;YACE,cAAc;YACd,qBAAqB;YACrB,oCAAoC;YACpC,WAAW;YACX,kBAAkB;YAClB,qBAAqB,EAAE;UACzB;YACE,qBAAqB,EAAE;QAC3B;UACE,kBAAkB;UAClB,gBAAgB;UAChB,YAAY,EAAE;UACd;YACE,kBAAkB;YAClB,MAAM;YACN,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,UAAU;YACV,mBAAmB,EAAE;UACvB;YACE,WAAW;YACX,OAAO;YACP,6DAA6D,EAAE;UACjE;YACE,WAAW;YACX,QAAQ;YACR,4DAA4D,EAAE;QAClE;UACE,kBAAkB;UAClB,QAAQ;UACR,iBAAiB;UACjB,eAAe;UACf,eAAe,EAAE;QACnB;UACE,kBAAkB,EAAE;QACtB;UACE,WAAW;UACX,qBAAqB;UACrB,mBAAmB;UACnB,6BAA6B;UAC7B,kBAAkB;UAClB,4CAA4C;UAC5C,gBAAgB,EAAE;UAClB;YACE,iBAAiB,EAAE;UACrB;YACE,WAAW;YACX,kBAAkB;YAClB,MAAM;YACN,QAAQ;YACR,SAAS;YACT,YAAY;YACZ,aAAa,EAAE;UACjB;YACE,qBAAqB;YACrB,mBAAmB;YACnB,gBAAgB;YAChB,gCAAgC;YAChC,YAAY;YACZ,sBAAsB,EAAE;YACxB;cACE,8BAA8B,EAAE;YAClC;cACE,+BAA+B,EAAE;YACnC;cACE,4BAA4B,EAAE;YAChC;cACE,sBAAsB;cACtB,oBAAoB,EAAE;YACxB;cACE,eAAe;cACf,mBAAmB;cACnB,yBAAyB;cACzB,gCAAgC;cAChC,+BAA+B;cAC/B,WAAW;cACX,kBAAkB,EAAE;cACpB;gBACE,kBAAkB,EAAE;YACxB;cACE,gBAAgB,EAAE;YACpB;cACE,yBAAyB,EAAE;YAC7B;cACE,YAAY;cACZ,kBAAkB;cAClB,qBAAqB;cACrB,cAAc;cACd,QAAQ,EAAE;cACV;gBACE,WAAW;gBACX,gCAAgC;gBAChC,kBAAkB;gBAClB,UAAU;gBACV,QAAQ;gBACR,WAAW;gBACX,gBAAgB,EAAE;YACtB;cACE,aAAa,EAAE;cACf;gBACE,eAAe,EAAE;cACnB;gBACE,eAAe;gBACf,aAAa,EAAE;cACjB;;;;;gBAKE,qBAAqB;gBACrB,sBAAsB,EAAE;gBACxB;;;;;kBAKE,iBAAiB,EAAE;gBACrB;;;;;;;;;;;kBAWE,cAAc;kBACd,eAAe,EAAE;gBACnB;;;;;kBAKE,mBAAmB,EAAE;gBACvB;;;;;kBAKE,sBAAsB,EAAE;cAC5B;gBACE,cAAc,EAAE;YACpB;cACE,eAAe,EAAE;YACnB;cACE,kBAAkB;cAClB,yBAAyB;cACzB,cAAc,EAAE;YAClB;cACE,cAAc,EAAE;cAChB;gBACE,gBAAgB,EAAE;YACtB;cACE,eAAe;cACf,cAAc,EAAE;cAChB;gBACE,gBAAgB;gBAChB,kBAAkB;gBAClB,aAAa;gBACb,eAAe,EAAE;YACrB;cACE,gBAAgB;cAChB,iBAAiB,EAAE;cACnB;gBACE,eAAe,EAAE;gBACjB;kBACE,eAAe,EAAE;gBACnB;kBACE,gBAAgB;kBAChB,sBAAsB;kBACtB,qBAAqB,EAAE;gBACzB;kBACE,aAAa;kBACb,cAAc,EAAE;gBAClB;kBACE,cAAc,EAAE;YACtB;cACE,gBAAgB;cAChB,iBAAiB;cACjB,oBAAoB,EAAE;cACtB;gBACE,mBAAmB,EAAE;cACvB;gBACE,gBAAgB,EAAE;gBAClB;kBACE,aAAa,EAAE;gBACjB;kBACE,eAAe,EAAE;YACvB;cACE,yBAAyB;cACzB,kBAAkB;cAClB,WAAW,EAAE;cACb;gBACE,eAAe,EAAE;cACnB;gBACE,mBAAmB;gBACnB,WAAW;gBACX,eAAe;gBACf,gBAAgB;gBAChB,kBAAkB;gBAClB,iBAAiB;gBACjB,aAAa,EAAE;gBACf;kBACE,kBAAkB,EAAE;cACxB;gBACE,iBAAiB;gBACjB,6BAA6B;gBAC7B,gCAAgC;gBAChC,gBAAgB,EAAE;gBAClB;kBACE,mBAAmB;kBACnB,WAAW,EAAE;kBACb;oBACE,gBAAgB;oBAChB,cAAc,EAAE;gBACpB;kBACE,gBAAgB,EAAE;cACtB;gBACE,sBAAsB;gBACtB,cAAc,EAAE;cAClB;gBACE,kBAAkB,EAAE;gBACpB;kBACE,kBAAkB;kBAClB,gBAAgB;kBAChB,gBAAgB;kBAChB,iBAAiB,EAAE;cACvB;gBACE,kBAAkB;gBAClB,kBAAkB;gBAClB,kBAAkB,EAAE;YACxB;cACE,yBAAyB,EAAE;YAC7B;cACE,mBAAmB,EAAE;YACvB;cACE,aAAa,EAAE;YACjB;cACE,cAAc;cACd,kBAAkB;cAClB,kBAAkB;cAClB,4BAA4B;cAC5B,WAAW;cACX,mBAAmB;cACnB,yBAAyB;cACzB,eAAe,EAAE;YACnB;cACE,WAAW,EAAE;YACf;cACE,cAAc,EAAE;YAClB;cACE,WAAW;cACX,kBAAkB;cAClB,MAAM;cACN,SAAS;cACT,UAAU;cACV,8BAA8B,EAAE;YAClC;cACE,WAAW;cACX,kBAAkB;cAClB,MAAM;cACN,SAAS;cACT,WAAW;cACX,+BAA+B,EAAE;YACnC;cACE,mBAAmB,EAAE;cACrB;gBACE,cAAc,EAAE;YACpB;cACE,mBAAmB;cACnB,WAAW,EAAE;YACf;cACE,gCAAgC,EAAE;YACpC;cACE,yBAAyB,EAAE;YAC7B;cACE,WAAW,EAAE;MACrB;QACE,kBAAkB;QAClB,gBAAgB;QAChB,sBAAsB;QACtB,kBAAkB,EAAE;QACpB;UACE,mBAAmB;UACnB,iBAAiB,EAAE;QACrB;UACE,gBAAgB;UAChB,SAAS,EAAE;MACf;QACE,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB,EAAE;QACpB;UACE,cAAc;UACd,iBAAiB;UACjB,mBAAmB,EAAE;QACvB;UACE,gBAAgB;UAChB,iBAAiB;UACjB,mBAAmB;UACnB,eAAe,EAAE;QACnB;UACE,kBAAkB;UAClB,WAAW;UACX,QAAQ;UACR,QAAQ;UACR,iBAAiB,EAAE;MACvB;QACE,qBAAqB;QACrB,sBAAsB;QACtB,kBAAkB;QAClB,gBAAgB;QAChB,uBAAuB,EAAE;QACzB;UACE,iBAAiB;UACjB,gBAAgB,EAAE;IACxB;MACE,0BAA0B;MAC1B,6BAA6B;MAC7B,0BAA0B,EAAE;MAC5B;QACE,cAAc,EAAE;MAClB;QACE,YAAY;QACZ,gBAAgB;QAChB,cAAc;QACd,WAAW;QACX,kBAAkB,EAAE;QACpB;UACE,QAAQ;UACR,yBAAyB;UACzB,mBAAmB;UACnB,eAAe;UACf,gBAAgB;UAChB,kBAAkB,EAAE;UACpB;YACE,qBAAqB;YACrB,WAAW;YACX,UAAU;YACV,gBAAgB;YAChB,cAAc;YACd,YAAY,EAAE;QAClB;UACE,kBAAkB,EAAE;QACtB;UACE,YAAY,EAAE;QAChB;UACE,YAAY;UACZ,gBAAgB;UAChB,kBAAkB;UAClB,cAAc;UACd,iBAAiB,EAAE;QACrB;UACE,cAAc;UACd,cAAc;UACd,kBAAkB;UAClB,4CAA4C,EAAE;UAC9C;YACE,WAAW;YACX,gBAAgB;YAChB,mBAAmB;YACnB,kBAAkB;YAClB,YAAY;YACZ,sBAAsB;YACtB,SAAS,EAAE;YACX;cACE,sBAAsB,EAAE;YAC1B;cACE,cAAc,EAAE;YAClB;cACE,mBAAmB;cACnB,aAAa;cACb,aAAa;cACb,yBAAyB,EAAE;YAC7B;cACE,4BAA4B;cAC5B,kBAAkB,EAAE;YACtB;cACE,qBAAqB;cACrB,4BAA4B,EAAE;cAC9B;gBACE,yBAAyB;gBACzB,mBAAmB;gBACnB,YAAY;gBACZ,gBAAgB;gBAChB,WAAW;gBACX,YAAY;gBACZ,kBAAkB;gBAClB,iBAAiB;gBACjB,SAAS;gBACT,kBAAkB,EAAE;gBACpB;kBACE,eAAe;kBACf,mBAAmB,EAAE;cACzB;gBACE,oBAAoB,EAAE;YAC1B;cACE,cAAc,EAAE;YAClB;cACE,iBAAiB,EAAE;YACrB;cACE,gBAAgB,EAAE;cAClB;gBACE,iBAAiB;gBACjB,kBAAkB;gBAClB,cAAc,EAAE;cAClB;gBACE,cAAc,EAAE;MAC1B;QACE,qBAAqB;QACrB,kBAAkB,EAAE;QACpB;UACE,kBAAkB;UAClB,qBAAqB;UACrB,aAAa,EAAE;UACf;YACE,eAAe;YACf,yBAAyB;YACzB,sBAAsB;YACtB,qBAAqB;YACrB,cAAc;YACd,UAAU;YACV,WAAW;YACX,UAAU;YACV,kBAAkB;YAClB,aAAa;YACb,kBAAkB;YAClB,gBAAgB,EAAE;YAClB;cACE,qBAAqB;cACrB,WAAW;cACX,YAAY;cACZ,mBAAmB,EAAE;UACzB;YACE,cAAc,EAAE;UAClB;YACE,mBAAmB,EAAE;IAC7B;MACE,mBAAmB,EAAE;MACrB;QACE,gBAAgB;QAChB,gBAAgB;QAChB,UAAU;QACV,gBAAgB,EAAE;QAClB;UACE;YACE,UAAU,EAAE,EAAE;QAClB;UACE,WAAW;UACX,qBAAqB;UACrB,mBAAmB;UACnB,kBAAkB;UAClB,gBAAgB,EAAE;UAClB;YACE,SAAS;YACT,gBAAgB,EAAE;UACpB;YACE,mBAAmB;YACnB,aAAa;YACb,iBAAiB;YACjB,yBAAyB;YACzB,gCAAgC;YAChC,0BAA0B,EAAE;UAC9B;YACE,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,yBAAyB;YACzB,kBAAkB;YAClB,0BAA0B,EAAE;EACtC;IACE,mBAAmB;IACnB,aAAa;IACb,qBAAqB;IACrB,yBAAyB;IACzB,iBAAiB;IACjB,eAAe;IACf,WAAW;IACX,kBAAkB;IAClB,gCAAgC,EAAE;IAClC;MACE,eAAe;MACf,WAAW,EAAE;EACjB;IACE,YAAY;IACZ,kBAAkB;IAClB,yBAAyB,EAAE;IAC3B;MACE,kBAAkB;MAClB,YAAY;MACZ,gBAAgB;MAChB,UAAU;MACV,aAAa;MACb,kBAAkB;MAClB,WAAW;MACX,YAAY;MACZ,gBAAgB;MAChB,iBAAiB;MACjB,6BAA6B;MAC7B,UAAU;MACV,QAAQ,EAAE;MACV;QACE,WAAW;QACX,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,QAAQ;QACR,gBAAgB;QAChB,iCAAiC;QACjC,oCAAoC;QACpC,4BAA4B,EAAE;IAClC;MACE,cAAc,EAAE;EACpB;IACE,WAAW;IACX,qBAAqB,EAAE;EACzB;IACE,eAAe;IACf,MAAM;IACN,QAAQ;IACR,OAAO;IACP,SAAS;IACT,aAAa;IACb,OAAO;IACP,gBAAgB;IAChB,wBAAwB,EAAE;IAC1B;MACE,cAAc;MACd,kBAAkB;MAClB,SAAS;MACT,gBAAgB;MAChB,0CAA0C,EAAE;MAC5C;QACE,mBAAmB;QACnB,aAAa,EAAE;QACf;UACE,WAAW,EAAE;MACjB;QACE,gBAAgB,EAAE;EACxB;IACE,oCAAoC,EAAE;IACtC;MACE,YAAY;MACZ,mBAAmB;MACnB,aAAa;MACb,sBAAsB;MACtB,kBAAkB;MAClB,QAAQ,EAAE;MACV;QACE,cAAc;QACd,iBAAiB;QACjB,eAAe;QACf,kBAAkB;QAClB,cAAc;QACd,mBAAmB,EAAE;MACvB;QACE,cAAc;QACd,YAAY;QACZ,cAAc;QACd,YAAY;QACZ,mDAAmD,EAAE;EAC3D;IACE,8BAA8B,EAAE;IAChC;MACE,YAAY;MACZ,mBAAmB;MACnB,QAAQ,EAAE;MACV;QACE,iBAAiB;QACjB,eAAe;QACf,kBAAkB;QAClB,UAAU;QACV,YAAY;QACZ,eAAe,EAAE;MACnB;QACE,mBAAmB;QACnB,YAAY;QACZ,iBAAiB,EAAE;MACrB;QACE,aAAa;QACb,iBAAiB;QACjB,6BAA6B;QAC7B,mBAAmB,EAAE;QACrB;UACE,aAAa,EAAE;EACvB;IACE,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,YAAY;IACZ,mBAAmB;IACnB,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;IACnB,2BAA2B;IAC3B,mBAAmB;IACnB,qBAAqB;IACrB,WAAW;IACX,eAAe;IACf,aAAa,EAAE;IACf;MACE,mBAAmB;MACnB,kBAAkB;MAClB,cAAc,EAAE;IAClB;MACE,gBAAgB;MAChB,kBAAkB;MAClB,mDAAmD;MACnD,0BAA0B,EAAE;IAC9B;MACE,mBAAmB;MACnB,qCAAqC;MACrC,2BAA2B;MAC3B,WAAW;MACX,qBAAqB,EAAE;EAC3B;IACE;MACE,aAAa,EAAE;IACjB;MACE,cAAc;MACd,eAAe,EAAE;IACnB;MACE,aAAa;MACb,eAAe,EAAE;IACnB;MACE,aAAa,EAAE;IACjB;MACE,aAAa,EAAE,EAAE;EACrB;IACE;MACE,WAAW,EAAE;IACf;MACE,WAAW,EAAE;IACf;MACE,aAAa,EAAE;IACjB;MACE,aAAa,EAAE,EAAE;EACrB;IACE;MACE,WAAW,EAAE;IACf;MACE,WAAW,EAAE,EAAE",sourcesContent:['#root, #fs_pricing_wrapper {\n background: #f1f1f1;\n height: auto;\n line-height: normal;\n font-size: 13px;\n margin: 0;\n /**\n * MAIN HEADER\n */\n /**\n * MAIN SECTIONS CONTAINER\n */ }\n #root, #root span, #root input, #root select, #root label, #root a, #root div, #root th, #root td, #fs_pricing_wrapper, #fs_pricing_wrapper span, #fs_pricing_wrapper input, #fs_pricing_wrapper select, #fs_pricing_wrapper label, #fs_pricing_wrapper a, #fs_pricing_wrapper div, #fs_pricing_wrapper th, #fs_pricing_wrapper td {\n font-family: "Open Sans", sans-serif; }\n #root h1, #root h2, #root h3, #root h4, #root ul, #root blockquote, #fs_pricing_wrapper h1, #fs_pricing_wrapper h2, #fs_pricing_wrapper h3, #fs_pricing_wrapper h4, #fs_pricing_wrapper ul, #fs_pricing_wrapper blockquote {\n margin: 0;\n padding: 0;\n text-align: center; }\n #root h1, #fs_pricing_wrapper h1 {\n font-size: 2.5em; }\n #root h2, #fs_pricing_wrapper h2 {\n font-size: 1.5em; }\n #root h3, #fs_pricing_wrapper h3 {\n font-size: 1.2em; }\n #root ul, #fs_pricing_wrapper ul {\n list-style-type: none; }\n #root p, #fs_pricing_wrapper p {\n font-size: 0.9em; }\n #root p, #root blockquote, #fs_pricing_wrapper p, #fs_pricing_wrapper blockquote {\n color: #606060; }\n #root strong, #fs_pricing_wrapper strong {\n font-weight: bold; }\n #root li, #root dd, #fs_pricing_wrapper li, #fs_pricing_wrapper dd {\n margin: 0; }\n #root .fs-app-header .fs-page-title, #fs_pricing_wrapper .fs-app-header .fs-page-title {\n margin: 15px 0;\n text-align: left; }\n #root .fs-app-header .fs-page-title h2, #root .fs-app-header .fs-page-title h3, #fs_pricing_wrapper .fs-app-header .fs-page-title h2, #fs_pricing_wrapper .fs-app-header .fs-page-title h3 {\n display: inline-block; }\n #root .fs-app-header .fs-page-title h2, #fs_pricing_wrapper .fs-app-header .fs-page-title h2 {\n vertical-align: middle; }\n #root .fs-app-header .fs-page-title h3, #fs_pricing_wrapper .fs-app-header .fs-page-title h3 {\n font-size: small;\n margin-left: 15px;\n background: #e0e0e0;\n padding: 3px;\n border-radius: 2px;\n vertical-align: sub; }\n #root .fs-app-header .fs-plugin-title-and-logo, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo {\n background: #fff;\n padding-top: 12px;\n padding-bottom: 12px;\n border: 1px solid #ccc;\n border-radius: 3px;\n text-align: center;\n background: #fff; }\n #root .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo, #root .fs-app-header .fs-plugin-title-and-logo h1, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo h1 {\n display: inline-block;\n vertical-align: middle;\n margin: 0 10px; }\n #root .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo, #fs_pricing_wrapper .fs-app-header .fs-plugin-title-and-logo .fs-plugin-logo {\n width: 48px;\n height: 48px; }\n #root .fs-trial-message, #fs_pricing_wrapper .fs-trial-message {\n padding: 20px;\n background: #FFE4BF;\n color: #E07B00;\n font-weight: bold;\n text-align: center;\n border: 2px solid darkorange;\n font-size: 1.2em; }\n #root .fs-app-main, #fs_pricing_wrapper .fs-app-main {\n text-align: center; }\n #root .fs-app-main .fs-section, #fs_pricing_wrapper .fs-app-main .fs-section {\n margin: auto;\n display: block; }\n #root .fs-app-main .fs-section .fs-section-header, #fs_pricing_wrapper .fs-app-main .fs-section .fs-section-header {\n font-weight: bold; }\n #root .fs-app-main > .fs-section, #fs_pricing_wrapper .fs-app-main > .fs-section {\n padding: 20px;\n margin: 4em auto 0 auto; }\n #root .fs-app-main > .fs-section:nth-child(even), #fs_pricing_wrapper .fs-app-main > .fs-section:nth-child(even) {\n background: white; }\n #root .fs-app-main > .fs-section > header, #fs_pricing_wrapper .fs-app-main > .fs-section > header {\n margin: 0 0 3em 0; }\n #root .fs-app-main > .fs-section > header h2, #fs_pricing_wrapper .fs-app-main > .fs-section > header h2 {\n margin: 0;\n font-size: 2.5em; }\n #root .fs-app-main .fs-section--plans-and-pricing, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing {\n padding: 20px 60px;\n margin-top: 0; }\n #root .fs-app-main .fs-section--plans-and-pricing > .fs-section, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing > .fs-section {\n margin: 1.5em auto 0; }\n #root .fs-app-main .fs-section--plans-and-pricing > .fs-section:first-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing > .fs-section:first-child {\n margin-top: 0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-annual-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-annual-discount {\n font-weight: bold;\n font-size: small; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header {\n text-align: center;\n background: #f9f9f9;\n padding: 20px;\n border-radius: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h2, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h2 {\n margin-bottom: 10px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h4, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--trial-header h4 {\n font-weight: normal; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles {\n display: inline-block;\n vertical-align: middle;\n padding: 0 10px;\n width: auto; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles {\n border: 1px solid #ccc;\n border-radius: 20px;\n overflow: hidden; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li {\n display: inline-block;\n font-weight: bold;\n margin: 0;\n padding: 10px 10px;\n cursor: pointer; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li.fs-selected-billing-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li.fs-selected-billing-cycle {\n background: #1fbc99;\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li:not(:last-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--billing-cycles .fs-billing-cycles li:not(:last-child) {\n border-right: 1px solid #ccc; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages {\n display: inline-block;\n width: 100%;\n position: relative; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {\n display: none;\n flex-wrap: wrap;\n justify-content: center; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab {\n display: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab {\n display: inline-block;\n flex: 1; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab a, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab a {\n display: block;\n padding: 4px 10px 7px;\n border-bottom: 2px solid transparent;\n color: #000;\n text-align: center;\n text-decoration: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab.fs-package-tab--selected a, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package-tab.fs-package-tab--selected a {\n border-color: #0085ba; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav {\n position: relative;\n overflow: hidden;\n margin: auto; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:before, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav:after {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 60px;\n margin-top: 2.8em;\n z-index: 1;\n margin-bottom: 32px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-previous-plan:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-previous-plan:before {\n content: "";\n left: 0;\n background: linear-gradient(to right, #cccccc96, transparent); }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-next-plan:after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-nav.fs-has-next-plan:after {\n content: "";\n right: 0;\n background: linear-gradient(to left, #cccccc96, transparent); }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package {\n position: absolute;\n top: 50%;\n margin-top: -11px;\n cursor: pointer;\n font-size: 48px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package {\n visibility: hidden; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages {\n width: auto;\n display: inline-block;\n margin-bottom: 30px;\n border-top-right-radius: 10px;\n position: relative;\n transition: left 500ms ease,right 500ms ease;\n padding-top: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages.fs-has-featured-plan, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages.fs-has-featured-plan {\n margin-top: 2.8em; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages:before {\n content: \'\';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100px;\n height: 100px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package {\n display: inline-block;\n vertical-align: top;\n background: #fff;\n border-bottom: 3px solid #e8e8e8;\n width: 315px;\n box-sizing: border-box; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:first-child, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package + .fs-package, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:first-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package + .fs-package {\n border-left: 1px solid #e8e8e8; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:last-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:last-child {\n border-right: 1px solid #e8e8e8; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package:not(.fs-featured-plan):first-child .fs-plan-title {\n border-top-left-radius: 10px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-package-content, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-package-content {\n vertical-align: middle;\n padding-bottom: 30px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title {\n padding: 10px 0;\n background: #f8f8f9;\n text-transform: uppercase;\n border-bottom: 1px solid #f1f1f2;\n border-right: 1px solid #f1f1f2;\n width: 100%;\n text-align: center; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title:last-child, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-title:last-child {\n border-right: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-licenses, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-licenses, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features {\n margin-top: 10px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-description {\n text-transform: uppercase; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price {\n margin: auto;\n position: relative;\n display: inline-block;\n color: #808080;\n top: 6px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price::after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-undiscounted-price::after {\n content: \'\';\n border-bottom: 1px solid #dd89a8;\n position: absolute;\n left: -2px;\n top: 50%;\n width: 100%;\n padding: 0px 2px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount {\n margin: 5px 0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol {\n font-size: 39px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer {\n font-size: 58px;\n margin: 0 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container {\n display: inline-block;\n vertical-align: middle; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol:not(.fs-selected-pricing-amount-integer),\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer:not(.fs-selected-pricing-amount-integer),\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container:not(.fs-selected-pricing-amount-integer), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol:not(.fs-selected-pricing-amount-integer),\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer:not(.fs-selected-pricing-amount-integer),\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container:not(.fs-selected-pricing-amount-integer) {\n line-height: 18px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle {\n display: block;\n font-size: 12px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-fraction,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-fraction {\n vertical-align: top; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-currency-symbol .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-integer .fs-selected-pricing-amount-cycle,\n #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container .fs-selected-pricing-amount-cycle {\n vertical-align: bottom; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount .fs-selected-pricing-amount-fraction-container {\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount-free, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-amount-free {\n font-size: 48px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-cycle, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-cycle {\n margin-bottom: 5px;\n text-transform: uppercase;\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity {\n color: #47aed6; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity .fs-tooltip, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-selected-pricing-license-quantity .fs-tooltip {\n margin-left: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container {\n padding: 0 13px;\n display: block; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-upgrade-button-container .fs-upgrade-button {\n margin-top: 20px;\n margin-bottom: 5px;\n outline: none;\n cursor: pointer; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features {\n text-align: left;\n margin-left: 13px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li {\n font-size: 16px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li:not(:first-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li:not(:first-child) {\n margin-top: 8px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li > span, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li > span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip {\n font-size: small;\n vertical-align: middle;\n display: inline-block; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-feature-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-feature-title {\n margin: 0 5px;\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-icon, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-plan-features li .fs-tooltip {\n color: #2da1d0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features {\n margin-top: 12px;\n padding-top: 18px;\n padding-bottom: 18px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-support, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-support {\n margin-bottom: 15px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li {\n font-size: small; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li .fs-feature-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li .fs-feature-title {\n margin: 0 2px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li:not(:first-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-support-and-main-features .fs-plan-features-with-value li:not(:first-child) {\n margin-top: 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities {\n border-collapse: collapse;\n position: relative;\n width: 100%; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities input, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities input {\n cursor: pointer; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span {\n background: #2da1d0;\n color: #fff;\n display: inline;\n padding: 4px 8px;\n border-radius: 4px;\n font-weight: bold;\n margin: 0 5px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span.fs-license-quantity-no-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount span.fs-license-quantity-no-discount {\n visibility: hidden; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container {\n line-height: 30px;\n border-top: 1px solid #f0f0f0;\n border-bottom: 1px solid #f0f0f0;\n font-size: small; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected {\n background: #2da1d0;\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected .fs-license-quantity-discount > span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container.fs-license-quantity-selected .fs-license-quantity-discount > span {\n background: #fff;\n color: #2da1d0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container > td:not(.fs-license-quantity-discount), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-container > td:not(.fs-license-quantity-discount) {\n text-align: left; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price {\n vertical-align: middle;\n color: #606060; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity {\n position: relative; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity input, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity input {\n position: relative;\n margin-top: -1px;\n margin-left: 7px;\n margin-right: 7px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantities .fs-license-quantity-price {\n position: relative;\n margin-right: auto;\n padding-right: 7px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-free-plan .fs-license-quantity-container:not(:last-child), #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-free-plan .fs-license-quantity-container:not(:last-child) {\n border-color: transparent; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title {\n background: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-most-popular, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-most-popular {\n display: none; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-most-popular, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-most-popular {\n display: block;\n line-height: 2.8em;\n margin-top: -2.8em;\n border-radius: 20px 20px 0 0;\n color: #fff;\n background: #158369;\n text-transform: uppercase;\n font-size: 14px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-plan-title {\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-selected-pricing-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-selected-pricing-license-quantity {\n color: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity:before, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity:before {\n content: "";\n position: absolute;\n top: 0;\n bottom: 0;\n left: -1px;\n border-left: 2px solid #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity-price:after, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantity-selected .fs-license-quantity-price:after {\n content: "";\n position: absolute;\n top: 0;\n bottom: 0;\n right: -1px;\n border-right: 2px solid #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected {\n background: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected .fs-license-quantity-discount > span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-selected .fs-license-quantity-discount > span {\n color: #1fbc99; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-discount span, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-license-quantities .fs-license-quantity-discount span {\n background: #1fbc99;\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-upgrade-button {\n border-bottom: 3px solid #15846a; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-tooltip .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package.fs-featured-plan .fs-tooltip .fs-icon {\n color: #1fbc99 !important; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-discount, #root .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-price, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-discount, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package .fs-license-quantity-selected .fs-license-quantity-price {\n color: #fff; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation {\n padding: 15px 15px;\n background: #fff;\n border: 1px solid #ccc;\n border-radius: 8px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation h2, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation h2 {\n margin-bottom: 10px;\n font-weight: bold; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation p, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--custom-implementation p {\n font-size: small;\n margin: 0; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee {\n max-width: 857px;\n margin: 30px auto;\n position: relative; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-title, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-title {\n color: #1fbc99;\n font-weight: bold;\n margin-bottom: 15px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-message, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee .fs-money-back-guarantee-message {\n font-size: small;\n line-height: 20px;\n margin-bottom: 15px;\n padding: 0 15px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee img, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--money-back-guarantee img {\n position: absolute;\n width: 90px;\n top: 50%;\n right: 0;\n margin-top: -45px; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge {\n display: inline-block;\n vertical-align: middle;\n position: relative;\n box-shadow: none;\n background: transparent; }\n #root .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge + .fs-badge, #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--badges .fs-badge + .fs-badge {\n margin-left: 20px;\n margin-top: 13px; }\n #root .fs-app-main .fs-section--testimonials, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials {\n border-top: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n padding: 4em 4em 1.6em 4em; }\n #root .fs-app-main .fs-section--testimonials .fs-section-header, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-section-header {\n color: #2da1d0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav {\n margin: auto;\n margin-top: 40px;\n display: block;\n width: auto;\n position: relative; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next {\n top: 50%;\n border: 1px solid #c9c9c9;\n border-radius: 14px;\n cursor: pointer;\n margin-top: 11px;\n position: absolute; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev .fs-icon, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev .fs-icon, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next .fs-icon {\n display: inline-block;\n height: 1em;\n width: 1em;\n line-height: 1em;\n color: #c9c9c9;\n padding: 5px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-prev {\n margin-left: -30px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-nav.fs-nav-next {\n right: -30px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials-track, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials-track {\n margin: auto;\n overflow: hidden;\n position: relative;\n display: block;\n padding-top: 45px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials {\n width: 10000px;\n display: block;\n position: relative;\n transition: left 500ms ease,right 500ms ease; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial {\n float: left;\n font-size: small;\n border-radius: 15px;\n position: relative;\n width: 340px;\n box-sizing: border-box;\n margin: 0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section {\n box-sizing: border-box; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-rating, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-rating {\n color: #f7941d; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section {\n background: #f7f7f7;\n padding: 10px;\n margin: 0 2em;\n border: 1px solid #e2e2e2; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial > section {\n border-radius: 0 0 20px 20px;\n border-top: 0 none; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header {\n border-bottom: 0 none;\n border-radius: 20px 20px 0 0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo {\n border: 1px solid #e4e4e4;\n border-radius: 44px;\n padding: 5px;\n background: #fff;\n width: 76px;\n height: 76px;\n position: relative;\n margin-top: -54px;\n left: 50%;\n margin-left: -44px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo object, #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo img, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo object, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header .fs-testimonial-logo img {\n max-width: 100%;\n border-radius: 40px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header h4, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-header h4 {\n margin: 15px 0 6px 0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-icon-quote, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-icon-quote {\n color: #2da1d0; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-message, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-message {\n line-height: 18px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author {\n margin-top: 35px; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author .fs-testimonial-author-name, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author .fs-testimonial-author-name {\n font-weight: bold;\n margin-bottom: 2px;\n color: #505050; }\n #root .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author:last-child, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial .fs-testimonial-author:last-child {\n color: #8f8f8f; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination {\n margin: 45px 0 25px 0;\n position: relative; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li {\n position: relative;\n display: inline-block;\n margin: 0 8px; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button {\n cursor: pointer;\n border: 1px solid #d2d2d2;\n vertical-align: middle;\n display: inline-block;\n line-height: 0;\n width: 8px;\n height: 8px;\n padding: 0;\n color: transparent;\n outline: none;\n border-radius: 4px;\n overflow: hidden; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button span, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li button.fs-round-button span {\n display: inline-block;\n width: 100%;\n height: 100%;\n background: #f7f7f7; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button {\n border: 0 none; }\n #root .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button.fs-round-button span, #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-nav-pagination li.selected button.fs-round-button span {\n background: #c9c9c9; }\n #root .fs-app-main .fs-section--faq, #fs_pricing_wrapper .fs-app-main .fs-section--faq {\n background: #f1f1f1; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items {\n max-width: 850px;\n text-align: left;\n columns: 2;\n column-gap: 20px; }\n @media only screen and (max-width: 600px) {\n #root .fs-app-main .fs-section--faq .fs-section--faq-items, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items {\n columns: 1; } }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item {\n width: 100%;\n display: inline-block;\n vertical-align: top;\n margin: 0 0 20px 0;\n overflow: hidden; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3, #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p {\n margin: 0;\n text-align: left; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item h3 {\n background: #f7f7f7;\n padding: 15px;\n font-weight: bold;\n border: 1px solid #dbdbdb;\n border-bottom: 1px solid #dedede;\n border-radius: 3px 3px 0 0; }\n #root .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p, #fs_pricing_wrapper .fs-app-main .fs-section--faq .fs-section--faq-items .fs-section--faq-item p {\n background: #fff;\n font-size: small;\n padding: 15px;\n line-height: 20px;\n border: 1px solid #dbdbdb;\n border-top: 0 none;\n border-radius: 0 0 3px 3px; }\n #root .fs-button, #fs_pricing_wrapper .fs-button {\n background: #e0e0e0;\n padding: 10px;\n display: inline-block;\n text-transform: uppercase;\n font-weight: bold;\n font-size: 18px;\n width: 100%;\n border-radius: 4px;\n border-bottom: 3px solid #a0a0a0; }\n #root .fs-button.fs-button--size-small, #fs_pricing_wrapper .fs-button.fs-button--size-small {\n font-size: 14px;\n width: auto; }\n #root .fs-tooltip, #fs_pricing_wrapper .fs-tooltip {\n cursor: help;\n position: relative;\n color: #2da1d0 !important; }\n #root .fs-tooltip .fs-tooltip-message, #fs_pricing_wrapper .fs-tooltip .fs-tooltip-message {\n position: absolute;\n width: 200px;\n background: #000;\n z-index: 1;\n display: none;\n border-radius: 4px;\n color: #fff;\n padding: 8px;\n text-align: left;\n line-height: 18px;\n transform: translate(0, -50%);\n left: 30px;\n top: 8px; }\n #root .fs-tooltip .fs-tooltip-message:before, #fs_pricing_wrapper .fs-tooltip .fs-tooltip-message:before {\n content: "";\n position: absolute;\n left: -8px;\n z-index: 1;\n top: 50%;\n margin-top: -6px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 8px solid #000; }\n #root .fs-tooltip:hover .fs-tooltip-message, #fs_pricing_wrapper .fs-tooltip:hover .fs-tooltip-message {\n display: block; }\n #root .fs-placeholder:before, #fs_pricing_wrapper .fs-placeholder:before {\n content: "";\n display: inline-block; }\n #root .fs-modal, #fs_pricing_wrapper .fs-modal {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n z-index: 1000;\n zoom: 1;\n text-align: left;\n display: block important; }\n #root .fs-modal .fs-modal-content-container, #fs_pricing_wrapper .fs-modal .fs-modal-content-container {\n display: block;\n position: absolute;\n left: 50%;\n background: #fff;\n box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.3); }\n #root .fs-modal .fs-modal-content-container .fs-modal-header, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-header {\n background: #534741;\n padding: 15px; }\n #root .fs-modal .fs-modal-content-container .fs-modal-header h3, #root .fs-modal .fs-modal-content-container .fs-modal-header .fs-modal-close, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-header h3, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-header .fs-modal-close {\n color: #fff; }\n #root .fs-modal .fs-modal-content-container .fs-modal-content, #fs_pricing_wrapper .fs-modal .fs-modal-content-container .fs-modal-content {\n font-size: 1.2em; }\n #root .fs-modal--loading, #fs_pricing_wrapper .fs-modal--loading {\n background-color: rgba(0, 0, 0, 0.3); }\n #root .fs-modal--loading .fs-modal-content-container, #fs_pricing_wrapper .fs-modal--loading .fs-modal-content-container {\n width: 220px;\n margin-left: -126px;\n padding: 15px;\n border: 1px solid #ccc;\n text-align: center;\n top: 50%; }\n #root .fs-modal--loading .fs-modal-content-container span, #fs_pricing_wrapper .fs-modal--loading .fs-modal-content-container span {\n display: block;\n font-weight: bold;\n font-size: 16px;\n text-align: center;\n color: #29abe1;\n margin-bottom: 10px; }\n #root .fs-modal--loading .fs-modal-content-container i, #fs_pricing_wrapper .fs-modal--loading .fs-modal-content-container i {\n display: block;\n width: 128px;\n margin: 0 auto;\n height: 15px;\n background: url(//img.freemius.com/blue-loader.gif); }\n #root .fs-modal--refund-policy, #root .fs-modal--trial-confirmation, #fs_pricing_wrapper .fs-modal--refund-policy, #fs_pricing_wrapper .fs-modal--trial-confirmation {\n background: rgba(0, 0, 0, 0.7); }\n #root .fs-modal--refund-policy .fs-modal-content-container, #root .fs-modal--trial-confirmation .fs-modal-content-container, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container {\n width: 510px;\n margin-left: -255px;\n top: 20%; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-header .fs-modal-close, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-header .fs-modal-close, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-header .fs-modal-close, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-header .fs-modal-close {\n line-height: 24px;\n font-size: 24px;\n position: absolute;\n top: -12px;\n right: -12px;\n cursor: pointer; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-content, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-content, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-content, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-content {\n background: #f2f2f2;\n height: 100%;\n padding: 1px 15px; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer {\n padding: 20px;\n text-align: right;\n border-top: 1px solid #e4e4e4;\n background: #f2f2f2; }\n #root .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial, #root .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial, #fs_pricing_wrapper .fs-modal--refund-policy .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial, #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-modal-content-container .fs-modal-footer .fs-button--approve-trial {\n margin: 0 7px; }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button {\n width: auto;\n font-size: 13px;\n line-height: 26px;\n height: 28px;\n padding: 0 10px 1px;\n border-width: 1px;\n text-transform: none;\n font-weight: normal;\n box-shadow: 0 1px 0 #cccccc;\n background: #f7f7f7;\n border-color: #cccccc;\n color: #555;\n cursor: pointer;\n outline: none; }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:hover, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:hover {\n background: #fafafa;\n border-color: #999;\n color: #23282d; }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:active, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button:active {\n background: #eee;\n border-color: #999;\n box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);\n transform: translateY(1px); }\n #root #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button.fs-button--primary, #fs_pricing_wrapper #fs_pricing_wrapper .fs-modal--trial-confirmation .fs-button.fs-button--primary {\n background: #0085ba;\n border-color: #0073aa #006799 #006799;\n box-shadow: 0 1px 0 #006799;\n color: #fff;\n text-decoration: none; }\n @media only screen and (max-width: 768px) {\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package, #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-next-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-prev-package {\n display: none; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {\n display: block;\n font-size: 24px; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-tab {\n display: flex;\n font-size: 24px; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-most-popular, #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package .fs-most-popular, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-most-popular, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-package .fs-most-popular {\n display: none; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages-menu {\n display: flex; } }\n @media only screen and (max-width: 400px) {\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package {\n width: 100%; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial {\n width: auto; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--billing-cycles .fs-billing-cycles li.fs-period--annual span, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--billing-cycles .fs-billing-cycles li.fs-period--annual span {\n display: none; }\n #root #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing {\n padding: 10px; } }\n @media only screen and (max-width: 375px) {\n #root #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--plans-and-pricing .fs-section--packages .fs-packages .fs-package {\n width: 100%; }\n #root #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial, #fs_pricing_wrapper #fs_pricing_wrapper .fs-app-main #fs_pricing_wrapper .fs-app-main .fs-section--testimonials .fs-testimonials-nav .fs-testimonials .fs-testimonial {\n width: auto; } }\n'],sourceRoot:""}]),n.default=i},function(e,n,t){(function(e){var a=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function s(e,n){this._id=e,this._clearFn=n}n.setTimeout=function(){return new s(i.call(setTimeout,a,arguments),clearTimeout)},n.setInterval=function(){return new s(i.call(setInterval,a,arguments),clearInterval)},n.clearTimeout=n.clearInterval=function(e){e&&e.close()},s.prototype.unref=s.prototype.ref=function(){},s.prototype.close=function(){this._clearFn.call(a,this._id)},n.enroll=function(e,n){clearTimeout(e._idleTimeoutId),e._idleTimeout=n},n.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},n._unrefActive=n.active=function(e){clearTimeout(e._idleTimeoutId);var n=e._idleTimeout;n>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),n))},t(28),n.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,n.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,t(3))},function(e,n,t){(function(e,n){!function(e,t){"use strict";if(!e.setImmediate){var a,i,s,r,o,c=1,l={},p=!1,f=e.document,u=Object.getPrototypeOf&&Object.getPrototypeOf(e);u=u&&u.setTimeout?u:e,"[object process]"==={}.toString.call(e.process)?a=function(e){n.nextTick((function(){g(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var n=!0,t=e.onmessage;return e.onmessage=function(){n=!1},e.postMessage("","*"),e.onmessage=t,n}}()?e.MessageChannel?((s=new MessageChannel).port1.onmessage=function(e){g(e.data)},a=function(e){s.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,a=function(e){var n=f.createElement("script");n.onreadystatechange=function(){g(e),n.onreadystatechange=null,i.removeChild(n),n=null},i.appendChild(n)}):a=function(e){setTimeout(g,0,e)}:(r="setImmediate$"+Math.random()+"$",o=function(n){n.source===e&&"string"==typeof n.data&&0===n.data.indexOf(r)&&g(+n.data.slice(r.length))},e.addEventListener?e.addEventListener("message",o,!1):e.attachEvent("onmessage",o),a=function(n){e.postMessage(r+n,"*")}),u.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var n=new Array(arguments.length-1),t=0;t<n.length;t++)n[t]=arguments[t+1];var i={callback:e,args:n};return l[c]=i,a(c),c++},u.clearImmediate=d}function d(e){delete l[e]}function g(e){if(p)setTimeout(g,0,e);else{var n=l[e];if(n){p=!0;try{!function(e){var n=e.callback,t=e.args;switch(t.length){case 0:n();break;case 1:n(t[0]);break;case 2:n(t[0],t[1]);break;case 3:n(t[0],t[1],t[2]);break;default:n.apply(void 0,t)}}(n)}finally{d(e),p=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,t(3),t(29))},function(e,n){var t,a,i=e.exports={};function s(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(t===setTimeout)return setTimeout(e,0);if((t===s||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:s}catch(e){t=s}try{a="function"==typeof clearTimeout?clearTimeout:r}catch(e){a=r}}();var c,l=[],p=!1,f=-1;function u(){p&&c&&(p=!1,c.length?l=c.concat(l):f=-1,l.length&&d())}function d(){if(!p){var e=o(u);p=!0;for(var n=l.length;n;){for(c=l,l=[];++f<n;)c&&c[f].run();f=-1,n=l.length}c=null,p=!1,function(e){if(a===clearTimeout)return clearTimeout(e);if((a===r||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(e);try{a(e)}catch(n){try{return a.call(null,e)}catch(n){return a.call(this,e)}}}(e)}}function g(e,n){this.fun=e,this.array=n}function m(){}i.nextTick=function(e){var n=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t<arguments.length;t++)n[t-1]=arguments[t];l.push(new g(e,n)),1!==l.length||p||o(d)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,n,t){"use strict";var a=t(31);function i(){}function s(){}s.resetWarningCache=i,e.exports=function(){function e(e,n,t,i,s,r){if(r!==a){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function n(){return e}e.isRequired=e;var t={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:s,resetWarningCache:i};return t.PropTypes=t,t}},function(e,n,t){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,n){var t,a;t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a={rotl:function(e,n){return e<<n|e>>>32-n},rotr:function(e,n){return e<<32-n|e>>>n},endian:function(e){if(e.constructor==Number)return 16711935&a.rotl(e,8)|4278255360&a.rotl(e,24);for(var n=0;n<e.length;n++)e[n]=a.endian(e[n]);return e},randomBytes:function(e){for(var n=[];e>0;e--)n.push(Math.floor(256*Math.random()));return n},bytesToWords:function(e){for(var n=[],t=0,a=0;t<e.length;t++,a+=8)n[a>>>5]|=e[t]<<24-a%32;return n},wordsToBytes:function(e){for(var n=[],t=0;t<32*e.length;t+=8)n.push(e[t>>>5]>>>24-t%32&255);return n},bytesToHex:function(e){for(var n=[],t=0;t<e.length;t++)n.push((e[t]>>>4).toString(16)),n.push((15&e[t]).toString(16));return n.join("")},hexToBytes:function(e){for(var n=[],t=0;t<e.length;t+=2)n.push(parseInt(e.substr(t,2),16));return n},bytesToBase64:function(e){for(var n=[],a=0;a<e.length;a+=3)for(var i=e[a]<<16|e[a+1]<<8|e[a+2],s=0;s<4;s++)8*a+6*s<=8*e.length?n.push(t.charAt(i>>>6*(3-s)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],a=0,i=0;a<e.length;i=++a%4)0!=i&&n.push((t.indexOf(e.charAt(a-1))&Math.pow(2,-2*i+8)-1)<<2*i|t.indexOf(e.charAt(a))>>>6-2*i);return n}},e.exports=a},function(e,n){function t(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}
|
36 |
+
/*!
|
37 |
+
* Determine if an object is a Buffer
|
38 |
+
*
|
39 |
+
* @author Feross Aboukhadijeh <https://feross.org>
|
40 |
+
* @license MIT
|
41 |
+
*/
|
42 |
+
e.exports=function(e){return null!=e&&(t(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},function(e,n){},function(e,n,t){"use strict";t.r(n),t.d(n,"pricing",(function(){return fn})),t.d(n,"FSConfig",(function(){return pn}));t(19);var a=t(0),i=t.n(a),s=t(6),r=t.n(s),o=(t(24),t.p+"b4f3b958f4a019862d81b15f3f8eee3a.svg"),c=t.p+"e366d70661d8ad2493bd6afbd779f125.png",l=t.p+"5480ed23b199531a8cbc05924f26952b.png",p=t.p+"dd89563360f0272635c8f0ab7d7f1402.png",f=t.p+"4375c4a3ddc6f637c2ab9a2d7220f91e.png",u=t.p+"fde48e4609a6ddc11d639fc2421f2afd.png";const d={inArray:function(e,n){return-1!==n.indexOf(e)},isNumeric:function(e){return null!=e&&!isNaN(parseFloat(e))&&""!==e},isNonEmptyString:function(e){return("string"==typeof e||e instanceof String)&&e.trim().length>0},isUndefinedOrNull:function(e){return null==e},formatNumber:function(e,n){return e.toLocaleString(n||void 0,{maximumFractionDigits:2})},ucfirst:function(e){return""!=e?e.charAt(0).toUpperCase()+e.slice(1):e},formatFraction:function(e){return e?e.toString().length>=2?e:e+"0":"00"}};function g(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}class m{constructor(e=null){if(g(this,"is_block_features",!0),g(this,"is_block_features_monthly",!0),g(this,"is_require_subscription",!0),g(this,"is_success_manager",!1),g(this,"support_email",""),g(this,"support_forum",""),g(this,"support_phone",""),g(this,"support_skype",""),g(this,"trial_period",0),null!=e)for(const n in e)e.hasOwnProperty(n)&&(this[n]=e[n])}hasAnySupport(){return this.hasEmailSupport()||this.hasForumSupport()||this.hasPhoneSupport()||this.hasSkypeSupport()||this.hasSuccessManagerSupport()}hasEmailSupport(){return d.isNonEmptyString(this.support_email)}hasForumSupport(){return d.isNonEmptyString(this.support_forum)}hasKnowledgeBaseSupport(){return d.isNonEmptyString(this.support_kb)}hasPhoneSupport(){return d.isNonEmptyString(this.support_phone)}hasSkypeSupport(){return d.isNonEmptyString(this.support_skype)}hasSuccessManagerSupport(){return 1==this.is_success_manager}hasTrial(){return d.isNumeric(this.trial_period)&&this.trial_period>0}isBlockingMonthly(){return 1==this.is_block_features_monthly}isBlockingAnnually(){return 1==this.is_block_features}requiresSubscription(){return this.is_require_subscription}}function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const A=Object.freeze({USD:"$",GBP:"£",EUR:"€"}),k=1,y=12,b=0,_="monthly",v="annual",w="lifetime";class E{constructor(e=null){if(h(this,"plan_id",null),h(this,"licenses",1),h(this,"monthly_price",null),h(this,"annual_price",null),h(this,"lifetime_price",null),h(this,"currency","usd"),h(this,"is_hidden",!1),null!=e)for(const n in e)e.hasOwnProperty(n)&&(this[n]=e[n])}static getBillingCyclePeriod(e){if(!d.isNumeric(e))return d.isNonEmptyString(e)&&d.inArray(e,[_,v,w])||(e=v),e;switch(e=parseInt(e)){case k:return _;case b:return w;case y:default:return v}}static getBillingCycleInMonths(e){if(d.isNumeric(e))return e=parseInt(e),d.inArray(e,[k,y,b])||(e=y),e;if(!d.isNonEmptyString(e))return y;switch(e){case _:return k;case w:return b;case v:default:return y}}getAmount(e,n,t){let a=0;switch(e){case k:a=this.monthly_price;break;case y:a=this.annual_price;break;case b:a=this.lifetime_price}return a=parseFloat(a),n&&(a=d.formatNumber(a,t)),a}getMonthlyAmount(e,n,t){let a=0;switch(e){case k:a=this.hasMonthlyPrice()?this.monthly_price:this.annual_price/12;break;case y:a=this.hasAnnualPrice()?this.annual_price/12:this.monthly_price}return a=parseFloat(a),n&&(a=d.formatNumber(a,t)),a}getLicenses(){return this.isUnlimited()?99999:this.licenses}hasAnnualPrice(){return d.isNumeric(this.annual_price)&&this.annual_price>0}hasLifetimePrice(){return d.isNumeric(this.lifetime_price)&&this.lifetime_price>0}hasMonthlyPrice(){return d.isNumeric(this.monthly_price)&&this.monthly_price>0}isFree(){return!this.hasMonthlyPrice()&&!this.hasAnnualPrice()&&!this.hasLifetimePrice()}isSingleSite(){return 1==this.licenses}isUnlimited(){return null==this.licenses}sitesLabel(){let e="";return e=this.isSingleSite()?"Single":this.isUnlimited()?"Unlimited":this.licenses,e+" Site"+(this.isSingleSite()?"":"s")}supportsBillingCycle(e){return null!==this[e+"_price"]}}function C(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const x=Object.freeze({DOLLAR:"dollar",PERCENTAGE:"percentage"}),B=Object.freeze({FLEXIBLE:"flexible",MODERATE:"moderate",STRICT:"strict"});class S{constructor(e=null){if(C(this,"is_wp_org_compliant",!0),C(this,"money_back_period",0),C(this,"parent_plugin_id",null),C(this,"refund_policy",null),C(this,"renewals_discount_type",null),C(this,"type","plugin"),null!=e)for(const n in e)e.hasOwnProperty(n)&&(this[n]=e[n])}getFormattedRenewalsDiscount(e,n){let t=this.getRenewalsDiscount(e);return this.renewals_discount_type===x.DOLLAR?n+d.formatNumber(t):t+"%"}getRenewalsDiscount(e){return this.hasRenewalsDiscount(e)?this[E.getBillingCyclePeriod(e)+"_renewals_discount"]:0}hasMoneyBackPeriod(){return d.isNumeric(this.money_back_period)&&this.money_back_period>0}hasRefundPolicy(){return this.hasMoneyBackPeriod()&&null!==this.refund_policy}hasRenewalsDiscount(e){let n=E.getBillingCyclePeriod(e)+"_renewals_discount";return null!==this[n]&&d.isNumeric(this[n])&&this[n]>0}hasWordPressOrgVersion(){return null!==this.is_wp_org_compliant}isAddOn(){return d.isNumeric(this.parent_plugin_id)&&this.parent_plugin_id>0}moduleLabel(){return this.isAddOn()?"add-on":this.type}}let T=null,P=[],N=[];function M(e){return null!==T||(P=e,N=function(e){let n=[];for(let t of e)t.pricing&&(n=n.concat(t.pricing));if(n.length>0){for(let e=0;e<n.length;e++)n[e]=new E(n[e]);!function(e){e.sort((function(e,n){return e.licenses==n.licenses?0:n.isUnlimited()||!e.isUnlimited()&&e.licenses<n.licenses?-1:e.isUnlimited()||!n.isUnlimited()&&e.licenses>n.licenses?1:void 0}))}(n)}return n}(e),T={calculateMultiSiteDiscount:function(e,n){if(e.isUnlimited()||1==e.licenses)return 0;let t=E.getBillingCycleInMonths(n),a=t,i=0,s=e[n+"_price"];return e.hasMonthlyPrice()&&y===t?(s=e.getMonthlyAmount(t),i=this.tryCalcSingleSitePrice(e,y)/12,a=k):i=this.tryCalcSingleSitePrice(e,t),Math.floor((i*e.licenses-s)/(this.tryCalcSingleSitePrice(e,a)*e.licenses)*100)},getPlanByID:function(e){for(let n of P)if(n.id==e)return n;return null},tryCalcSingleSitePrice:function(e,n,t,a){return this.tryCalcSingleSitePrices(e,n,t,a)},tryCalcSingleSitePrices:function(e,n,t,a){return b!==n?this.tryCalcSingleSiteSubscriptionPrice(e,n,t,a):this.tryCalcSingleSiteLifetimePrice(e,t,a)},tryCalcSingleSiteSubscriptionPrice(e,n,t,a){let i=k===n,s=0;for(let r of N)if(e.plan_id===r.plan_id&&e.currency===r.currency&&(r.hasMonthlyPrice()||r.hasAnnualPrice())){s=i?r.getMonthlyAmount(n):r.hasAnnualPrice()?parseFloat(r.annual_price):12*r.monthly_price,!e.isUnlimited()&&!r.isUnlimited()&&r.licenses>1&&(s/=r.licenses),t&&(s=d.formatNumber(s,a));break}return s},tryCalcSingleSiteLifetimePrice(e,n,t){let a=0;for(let i of N)if(e.plan_id===i.plan_id&&e.currency===i.currency){a=i.getAmount(b),!i.isUnlimited()&&i.licenses>1&&(a/=i.licenses),n&&(a=d.formatNumber(a,t));break}return a},annualDiscountPercentage(e){return Math.round(this.annualSavings(e)/(12*e.getMonthlyAmount(k)*(e.isUnlimited()?1:e.licenses))*100)},annualSavings(e){let n=0;if(e.isUnlimited())n=12*e.getMonthlyAmount(k)-this.annual_price;else{let t=this.tryCalcSingleSitePrice(e,k,!1);if(t>0){n=(12*t-this.tryCalcSingleSitePrice(e,y,!1))*e.licenses}}return Math.max(n,0)},largestAnnualDiscount(e){let n=0;for(let t of e)t.isSingleSite()&&(n=Math.max(n,this.annualDiscountPercentage(t)));return Math.round(n)},getSingleSitePricing(e,n){let t=e.length;if(!e||0===t)return!1;for(let a=0;a<t;a++){let t=e[a];if(n===t.currency&&t.isSingleSite())return t}return null},isFreePlan(e){if(d.isUndefinedOrNull(e))return!0;if(0===e.length)return!0;for(let n=0;n<e.length;n++){if(!e[n].isFree())return!1}return!0},isHiddenOrFreePlan(e){return e.is_hidden||this.isFreePlan(e.pricing)},isPaidPlan(e){return!this.isFreePlan(e)}}),T}const q=function(e){return M(e)};var I=i.a.createContext({});class O extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("section",{className:"fs-section fs-section--"+this.props["fs-section"]+(this.props.className?" "+this.props.className:"")},this.props.children)}}var z,L,U,j=O;class D extends a.Component{constructor(e){super(e)}annualDiscountLabel(){return this.context.annualDiscount>0?`(up to ${this.context.annualDiscount}% off)`:""}render(){return i.a.createElement("ul",{className:"fs-billing-cycles"},this.context.billingCycles.map(e=>{let n=v===e?"Annually":d.ucfirst(e);return i.a.createElement("li",{className:"fs-period--"+e+(this.context.selectedBillingCycle===e?" fs-selected-billing-cycle":""),key:e,"data-billing-cycle":e,onClick:this.props.handler},n," ",v===e&&i.a.createElement("span",null,this.annualDiscountLabel()))}))}}U=I,(L="contextType")in(z=D)?Object.defineProperty(z,L,{value:U,enumerable:!0,configurable:!0,writable:!0}):z[L]=U;var F=D;class R extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("select",{className:"fs-currencies",onChange:this.props.handler,value:this.context.selectedCurrency},this.context.currencies.map(e=>i.a.createElement("option",{key:e,value:e},this.context.currencySymbols[e]," - ",e.toUpperCase())))}}!function(e,n,t){n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}(R,"contextType",I);var Y=R,Q=t(2),W=t(1),V=t.n(W);function H(e){return(H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function $(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function X(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function K(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?X(Object(t),!0).forEach((function(n){$(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):X(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function Z(e,n){if(null==e)return{};var t,a,i=function(e,n){if(null==e)return{};var t,a,i={},s=Object.keys(e);for(a=0;a<s.length;a++)t=s[a],n.indexOf(t)>=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)t=s[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}function G(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function J(e){return function(e){return(e-=0)==e}(e)?e:(e=e.replace(/[\-_\s]+(.)?/g,(function(e,n){return n?n.toUpperCase():""}))).substr(0,1).toLowerCase()+e.substr(1)}function ee(e){return e.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,n){var t,a=n.indexOf(":"),i=J(n.slice(0,a)),s=n.slice(a+1).trim();return i.startsWith("webkit")?e[(t=i,t.charAt(0).toUpperCase()+t.slice(1))]=s:e[i]=s,e}),{})}var ne=!1;try{ne=!0}catch(e){}function te(e){return Q.c.icon?Q.c.icon(e):null===e?null:"object"===H(e)&&e.prefix&&e.iconName?e:Array.isArray(e)&&2===e.length?{prefix:e[0],iconName:e[1]}:"string"==typeof e?{prefix:"fas",iconName:e}:void 0}function ae(e,n){return Array.isArray(n)&&n.length>0||!Array.isArray(n)&&n?$({},e,n):{}}function ie(e){var n=e.forwardedRef,t=Z(e,["forwardedRef"]),a=t.icon,i=t.mask,s=t.symbol,r=t.className,o=t.title,c=t.titleId,l=te(a),p=ae("classes",[].concat(G(function(e){var n,t=e.spin,a=e.pulse,i=e.fixedWidth,s=e.inverse,r=e.border,o=e.listItem,c=e.flip,l=e.size,p=e.rotation,f=e.pull,u=($(n={"fa-spin":t,"fa-pulse":a,"fa-fw":i,"fa-inverse":s,"fa-border":r,"fa-li":o,"fa-flip-horizontal":"horizontal"===c||"both"===c,"fa-flip-vertical":"vertical"===c||"both"===c},"fa-".concat(l),null!=l),$(n,"fa-rotate-".concat(p),null!=p&&0!==p),$(n,"fa-pull-".concat(f),null!=f),$(n,"fa-swap-opacity",e.swapOpacity),n);return Object.keys(u).map((function(e){return u[e]?e:null})).filter((function(e){return e}))}(t)),G(r.split(" ")))),f=ae("transform","string"==typeof t.transform?Q.c.transform(t.transform):t.transform),u=ae("mask",te(i)),d=Object(Q.a)(l,K({},p,{},f,{},u,{symbol:s,title:o,titleId:c}));if(!d)return function(){var e;!ne&&console&&"function"==typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",l),null;var g=d.abstract,m={ref:n};return Object.keys(t).forEach((function(e){ie.defaultProps.hasOwnProperty(e)||(m[e]=t[e])})),se(g[0],m)}ie.displayName="FontAwesomeIcon",ie.propTypes={border:V.a.bool,className:V.a.string,mask:V.a.oneOfType([V.a.object,V.a.array,V.a.string]),fixedWidth:V.a.bool,inverse:V.a.bool,flip:V.a.oneOf(["horizontal","vertical","both"]),icon:V.a.oneOfType([V.a.object,V.a.array,V.a.string]),listItem:V.a.bool,pull:V.a.oneOf(["right","left"]),pulse:V.a.bool,rotation:V.a.oneOf([0,90,180,270]),size:V.a.oneOf(["lg","xs","sm","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:V.a.bool,symbol:V.a.oneOfType([V.a.bool,V.a.string]),title:V.a.string,transform:V.a.oneOfType([V.a.string,V.a.object]),swapOpacity:V.a.bool},ie.defaultProps={border:!1,className:"",mask:null,fixedWidth:!1,inverse:!1,flip:null,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,symbol:!1,title:"",transform:null,swapOpacity:!1};var se=function e(n,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"==typeof t)return t;var i=(t.children||[]).map((function(t){return e(n,t)})),s=Object.keys(t.attributes||{}).reduce((function(e,n){var a=t.attributes[n];switch(n){case"class":e.attrs.className=a,delete t.attributes.class;break;case"style":e.attrs.style=ee(a);break;default:0===n.indexOf("aria-")||0===n.indexOf("data-")?e.attrs[n.toLowerCase()]=a:e.attrs[J(n)]=a}return e}),{attrs:{}}),r=a.style,o=void 0===r?{}:r,c=Z(a,["style"]);return s.attrs.style=K({},s.attrs.style,{},o),n.apply(void 0,[t.tag,K({},s.attrs,{},c)].concat(G(i)))}.bind(null,i.a.createElement);class re extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("span",{className:"fs-icon"},i.a.createElement(ie,this.props))}}var oe=re;class ce extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("span",{className:"fs-tooltip"},i.a.createElement(oe,{icon:"question-circle"}),i.a.createElement("span",{className:"fs-tooltip-message"},this.props.children))}}var le=ce;class pe extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("div",{className:"fs-placeholder"})}}var fe=pe;function ue(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}class de extends a.Component{constructor(e){super(e),ue(this,"previouslySelectedPricingByPlan",{})}billingCycleLabel(){let e="Billed ";return v===this.context.selectedBillingCycle?e+="Annually":w===this.context.selectedBillingCycle?e+="Once":e+="Monthly",e}changeLicenses(e){let n=e.currentTarget;"tr"!==n.tagName.toLowerCase()&&(n=n.closest("tr"));let t=n.dataset.pricingId;document.getElementById("pricing_"+t).click()}getCtaButtonLabel(e,n){if(this.context.isActivatingTrial&&this.context.upgradingToPlanID==e.id)return"Activating...";let t=!d.isUndefinedOrNull(this.context.install),s=t&&this.context.install.plan_id==e.id,r=n,o=q().isFreePlan(e.pricing);s&&(de.contextInstallPlanFound=!0);let c="",l=s?e:t?q().getPlanByID(this.context.install.plan_id):null,p=!this.context.isTrial&&null!==l&&!this.isInstallInTrial(this.context.install)&&q().isPaidPlan(l.pricing);return c=s||!t&&o?r>1?"Downgrade":1==r?"Your Plan":"Upgrade":o?"Downgrade":this.context.isTrial&&e.hasTrial()?i.a.createElement(a.Fragment,null,"Start my free ",i.a.createElement("nobr",null,e.trial_period," days")):p&&!de.contextInstallPlanFound?"Downgrade":"Upgrade Now",c}getUndiscountedPrice(e,n){return v===this.context.selectedBillingCycle&&this.context.annualDiscount>0?e.is_free_plan||null===n?i.a.createElement(fe,{className:"fs-undiscounted-price"}):i.a.createElement("div",{className:"fs-undiscounted-price"},"Normally ",this.context.currencySymbols[this.context.selectedCurrency],n.getMonthlyAmount(k,!0,de.locale)," / mo"):i.a.createElement(fe,{className:"fs-undiscounted-price"})}getSitesLabel(e,n,t){return e.is_free_plan?i.a.createElement(fe,null):i.a.createElement("div",{className:"fs-selected-pricing-license-quantity"},n.sitesLabel(),!e.is_free_plan&&i.a.createElement(le,null,i.a.createElement(a.Fragment,null,"If you are running a multi-site network, each site in the network requires a license.",t.length>0?"Therefore, if you need to use it on multiple sites, check out our multi-site prices.":"")))}priceLabel(e,n){let t=this.context,a="",i=e[t.selectedBillingCycle+"_price"];return a+=t.currencySymbols[t.selectedCurrency],a+=d.formatNumber(i,n),_===t.selectedBillingCycle?a+=" / mo":v===t.selectedBillingCycle&&(a+=" / year"),a}isInstallInTrial(e){return!(!d.isNumeric(e.trial_plan_id)||d.isUndefinedOrNull(e.trial_ends))&&Date.parse(e.trial_ends)>(new Date).getTime()}render(){let e=this.props.isSinglePlan,n=this.props.planPackage,t=this.props.installPlanLicensesCount,s=this.props.currentLicenseQuantities,r=null,o=this.context.selectedLicenseQuantity,c={},l=null,p=null,f=null;if(this.props.isFirstPlanPackage&&(de.contextInstallPlanFound=!1,de.noBillingCycleSupportLicenses={}),n.is_free_plan||(c=n.pricingCollection,r=n.pricingLicenses,l=n.selectedPricing,l||(this.previouslySelectedPricingByPlan[n.id]&&this.context.selectedCurrency===this.previouslySelectedPricingByPlan[n.id].currency&&this.previouslySelectedPricingByPlan[n.id].supportsBillingCycle(this.context.selectedBillingCycle)||(this.previouslySelectedPricingByPlan[n.id]=c[r[0]]),l=this.previouslySelectedPricingByPlan[n.id],o=l.getLicenses()),this.previouslySelectedPricingByPlan[n.id]=l,p=(v===this.context.selectedBillingCycle?d.formatNumber(l.getMonthlyAmount(y),"en-US"):l[this.context.selectedBillingCycle+"_price"]).toString()),n.hasAnySupport())if(n.hasSuccessManagerSupport())f="Priority Phone, Email & Chat Support";else{let e=[];n.hasPhoneSupport()&&e.push("Phone"),n.hasSkypeSupport()&&e.push("Skype"),n.hasEmailSupport()&&e.push((this.context.priorityEmailSupportPlanID==n.id?"Priority ":"")+"Email"),n.hasForumSupport()&&e.push("Forum"),n.hasKnowledgeBaseSupport()&&e.push("Help Center"),f=1===e.length?e[0]+" Support":e.slice(0,e.length-1).join(", ")+" & "+e[e.length-1]+" Support"}else f="No Support";let u="fs-package";n.is_free_plan?u+=" fs-free-plan":!e&&n.is_featured&&(u+=" fs-featured-plan");const g=d.formatNumber(.1,de.locale)[1];let m,h;if(p){const e=p.split(".");m=d.formatNumber(parseInt(e[0],10)),h=d.formatFraction(e[1])}return i.a.createElement("li",{key:n.id,className:u},i.a.createElement("div",{className:"fs-most-popular"},i.a.createElement("h4",null,i.a.createElement("strong",null,"Most Popular"))),i.a.createElement("div",{className:"fs-package-content"},i.a.createElement("h2",{className:"fs-plan-title"},i.a.createElement("strong",null,n.title)),i.a.createElement("h3",{className:"fs-plan-description"},i.a.createElement("strong",null,n.description_lines)),this.getUndiscountedPrice(n,l),i.a.createElement("div",{className:"fs-selected-pricing-amount"},i.a.createElement("strong",{className:"fs-currency-symbol"},n.is_free_plan?"":this.context.currencySymbols[this.context.selectedCurrency]),i.a.createElement("span",{className:"fs-selected-pricing-amount-integer"},i.a.createElement("strong",null,n.is_free_plan?"Free":m)),i.a.createElement("span",{className:"fs-selected-pricing-amount-fraction-container"},i.a.createElement("strong",{className:"fs-selected-pricing-amount-fraction"},n.is_free_plan?"":g+h),!n.is_free_plan&&w!==this.context.selectedBillingCycle&&i.a.createElement("sub",{className:"fs-selected-pricing-amount-cycle"},"/ mo"))),i.a.createElement("div",{className:"fs-selected-pricing-cycle"},n.is_free_plan?i.a.createElement(fe,null):i.a.createElement("strong",null,this.billingCycleLabel())),this.getSitesLabel(n,l,r),i.a.createElement("div",{className:"fs-support-and-main-features"},null!==f&&i.a.createElement("div",{className:"fs-plan-support"},i.a.createElement("strong",null,f)),i.a.createElement("ul",{className:"fs-plan-features-with-value"},n.highlighted_features.map(e=>d.isNonEmptyString(e.title)?i.a.createElement("li",{key:e.id},i.a.createElement("span",{className:"fs-feature-title"},i.a.createElement("span",null,i.a.createElement("strong",null,e.value)),i.a.createElement("span",{className:"fs-feature-title"},e.title)),d.isNonEmptyString(e.description)&&i.a.createElement(le,null,i.a.createElement(a.Fragment,null,e.description))):i.a.createElement("li",{key:e.id},i.a.createElement(fe,null))))),!e&&i.a.createElement("table",{className:"fs-license-quantities"},i.a.createElement("tbody",null,Object.keys(s).map(t=>{let a=c[t];if(d.isUndefinedOrNull(a))return i.a.createElement("tr",{className:"fs-license-quantity-container",key:t},i.a.createElement("td",null,i.a.createElement(fe,null)),i.a.createElement("td",null),i.a.createElement("td",null));let s=o==t,r=q().calculateMultiSiteDiscount(a,this.context.selectedBillingCycle);return i.a.createElement("tr",{key:a.id,"data-pricing-id":a.id,className:"fs-license-quantity-container"+(s?" fs-license-quantity-selected":""),onClick:this.changeLicenses},i.a.createElement("td",{className:"fs-license-quantity"},i.a.createElement("input",{type:"radio",id:"pricing_"+a.id,name:"fs_plan_"+n.id+"_licenses"+(e?l.id:""),value:a.id,checked:s||e,onChange:this.props.changeLicensesHandler}),a.sitesLabel()),r>0?i.a.createElement("td",{className:"fs-license-quantity-discount"},i.a.createElement("span",null,"Save ",r,"%")):i.a.createElement("td",null),i.a.createElement("td",{className:"fs-license-quantity-price"},this.priceLabel(a,de.locale)))}))),i.a.createElement("div",{className:"fs-upgrade-button-container"},i.a.createElement("button",{className:"fs-button fs-button--size-large fs-upgrade-button",onClick:()=>{this.props.upgradeHandler(n,l)}},this.getCtaButtonLabel(n,t))),i.a.createElement("ul",{className:"fs-plan-features"},n.nonhighlighted_features.map(e=>{if(!d.isNonEmptyString(e.title))return i.a.createElement("li",{key:e.id},i.a.createElement(fe,null));const n=0===e.id.indexOf("all_plan_")?i.a.createElement("strong",null,e.title):e.title;return i.a.createElement("li",{key:e.id},i.a.createElement(oe,{icon:["fas","check"]}),i.a.createElement("span",{className:"fs-feature-title"},n),d.isNonEmptyString(e.description)&&i.a.createElement(le,null,i.a.createElement(a.Fragment,null,e.description)))}))))}}ue(de,"contextType",I),ue(de,"noBillingCycleSupportLicenses",{}),ue(de,"contextInstallPlanFound",!1),ue(de,"locale","en-US");var ge=de;function me(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}class he extends a.Component{constructor(e){super(e),me(this,"slider",null)}billingCycleLabel(){let e="Billed ";return v===this.context.selectedBillingCycle?e+="Annually":w===this.context.selectedBillingCycle?e+="Once":e+="Monthly",e}priceLabel(e){let n=this.context,t="",a=e[n.selectedBillingCycle+"_price"];return t+=n.currencySymbols[n.selectedCurrency],t+=d.formatNumber(a),_===n.selectedBillingCycle?t+=" / mo":v===n.selectedBillingCycle&&(t+=" / year"),t}initSlider(){setTimeout(()=>{null===this.slider?this.slider=function(){let e,n,t,a,i,s,r,o,c,l,p,f,u,d,g,m,h=function(){e=0,n=document.querySelector(".fs-section--plans-and-pricing"),t=n.querySelector(".fs-section--packages"),a=t.querySelectorAll(".fs-package"),i=t.querySelector(".fs-packages"),s=n.querySelector(".fs-next-package"),r=n.querySelector(".fs-prev-package"),o=n.querySelector(".fs-packages-menu"),c=n.querySelector(".fs-packages-tab"),l=60,p=315,f=768},A=function(e,n){let t=-1*e*u+(n||0);i.style.left=t+"px"},k=function(){e++;let n=0;g>f&&(n=l,e+m>=a.length&&(s.style.visibility="hidden",i.parentNode.classList.remove("fs-has-next-plan"),e-1>0&&(n*=2)),e>0&&(r.style.visibility="visible",i.parentNode.classList.add("fs-has-previous-plan"))),A(e,n)},y=function(){i.parentNode.classList.remove("fs-has-previous-plan"),i.parentNode.classList.remove("fs-has-next-plan"),g=window.outerWidth;let t=window.getComputedStyle(n),h=parseFloat(t.width),A=g<=f;if(d=l,A?(m=1,u=h):(m=Math.floor(h/p),m===a.length?d=0:m<a.length&&(m=Math.floor((h-d)/p),m+1<a.length&&(d*=2,m=Math.floor((h-d)/p))),u=p),i.style.width=u*a.length+"px",h=m*u+(A?0:d),i.parentNode.style.width=h+"px",i.style.left="0px",!A&&m<a.length){s.style.visibility="visible";let e=parseFloat(window.getComputedStyle(i.parentNode).marginLeft),n=parseFloat(t.paddingLeft),a=-n,o=h+e,c=parseFloat(window.getComputedStyle(s).width);r.style.left=a+(n+e-c)/2+"px",s.style.left=o+(n+e-c)/2+"px",i.parentNode.classList.add("fs-has-next-plan")}else r.style.visibility="hidden",s.style.visibility="hidden";for(let e of a)e.style.width=u+"px";if(o)e=o.selectedIndex;else if(c){let n=c.querySelectorAll("li");for(let t=0;t<n.length;t++){if(n[t].classList.contains("fs-package-tab--selected")){e=t;break}}}e>0&&(e--,k())};return h(),y(),o&&o.addEventListener("change",(function(n){e=n.target.selectedIndex-1,k()})),s.addEventListener("click",k),r.addEventListener("click",(function(){e--;let n=0;g>f&&(e-1<0&&(r.style.visibility="hidden",i.parentNode.classList.remove("fs-has-previous-plan")),e+m<=a.length&&(s.style.visibility="visible",i.parentNode.classList.add("fs-has-next-plan"),e>0&&(n=l))),A(e,n)})),window.addEventListener("resize",y),{adjustPackages:function(){h(),y()}}}():this.slider.adjustPackages()},10)}render(){let e=null,n=this.context.licenseQuantities[this.context.selectedCurrency],t=Object.keys(n).length,s={},r=!1;if(this.context.paidPlansCount>1||1===t)e=this.context.plans;else{e=[];let n=null;for(n of this.context.plans)if(!q().isHiddenOrFreePlan(n))break;for(let t of n.pricing){if(t.is_hidden||this.context.selectedCurrency!==t.currency||!t.supportsBillingCycle(this.context.selectedBillingCycle))continue;let a=Object.assign(new m,n);a.pricing=[t],e.push(a)}r=!0}let o=[],c=0,l=0,p={},f=0,u=null,g=0;for(let n of e){if(n.is_hidden)continue;let e=q().isFreePlan(n.pricing);if(e){if(this.context.paidPlansCount>=3)continue;n.is_free_plan=e}else{n.pricingCollection={},n.pricing.map(e=>{let t=e.getLicenses();!e.is_hidden&&this.context.selectedCurrency===e.currency&&d.isUndefinedOrNull(ge.noBillingCycleSupportLicenses[t])&&(e.supportsBillingCycle(this.context.selectedBillingCycle)?(n.pricingCollection[t]=e,(r||this.context.selectedLicenseQuantity==t)&&(n.selectedPricing=e),this.context.license&&this.context.license.pricing_id==e.id&&(g=e.licenses)):ge.noBillingCycleSupportLicenses[t]=!0)});let e=Object.keys(n.pricingCollection);if(0===e.length)continue;n.pricingLicenses=e}if(n.highlighted_features=[],n.nonhighlighted_features=[],null!==u&&n.nonhighlighted_features.push({id:`all_plan_${u.id}_features`,title:`All ${u.title} Features`}),n.hasSuccessManagerSupport()&&n.nonhighlighted_features.push({id:`plan_${n.id}_personal_success_manager`,title:"Personal Success Manager"}),d.isNonEmptyString(n.description)?n.description_lines=n.description.split("\n").map((e,n)=>i.a.createElement(a.Fragment,{key:n},e,i.a.createElement("br",null))):n.description_lines=[],f=Math.max(f,n.description_lines.length),o.push(n),!d.isUndefinedOrNull(n.features)){for(let e of n.features)e.is_featured&&(d.isNonEmptyString(e.value)||d.isNumeric(e.value)?n.highlighted_features.push(e):(r||d.isUndefinedOrNull(p["f_"+e.id]))&&(n.nonhighlighted_features.push(e),p["f_"+e.id]=!0));if(c=Math.max(c,n.highlighted_features.length),l=Math.max(l,n.nonhighlighted_features.length),!e)for(let e of n.pricing)!e.is_hidden&&this.context.selectedCurrency===e.currency&&e.supportsBillingCycle(this.context.selectedBillingCycle)&&(s[e.getLicenses()]=!0);r||(u=n)}}let h=[],A=!0,k=!1,y=[],b=[],_=this.context.selectedPlanID;for(let e of o){if(e.highlighted_features.length<c){const n=c-e.highlighted_features.length;for(let t=0;t<n;t++)e.highlighted_features.push({id:"filler_"+t})}if(e.nonhighlighted_features.length<l){const n=l-e.nonhighlighted_features.length;for(let t=0;t<n;t++)e.nonhighlighted_features.push({id:"filler_"+t})}if(e.description_lines.length<f){const n=f-e.description_lines.length;for(let t=0;t<n;t++)e.description_lines.push(i.a.createElement(fe,{key:"filler_"+t}))}e.is_featured&&!r&&this.context.paidPlansCount>1&&(k=!0),!_&&A&&(_=e.id),y.push(i.a.createElement("li",{key:e.id,className:"fs-package-tab"+(e.id==_?" fs-package-tab--selected":""),"data-plan-id":e.id,onClick:this.props.changePlanHandler},i.a.createElement("a",{href:"#"},e.title))),b.push(i.a.createElement("option",{key:e.id,className:"fs-package-option",id:`fs_package_${e.id}_option`,value:e.id},(e.id==_||A?"Selected Plan: ":"")+e.title)),h.push(i.a.createElement(ge,{key:r?e.pricing[0].id:e.id,isFirstPlanPackage:A,installPlanLicensesCount:g,isSinglePlan:r,maxHighlightedFeaturesCount:c,maxNonHighlightedFeaturesCount:l,licenseQuantities:n,currentLicenseQuantities:s,planPackage:e,changeLicensesHandler:this.props.changeLicensesHandler,upgradeHandler:this.props.upgradeHandler})),A&&(A=!1)}return this.initSlider(),i.a.createElement(a.Fragment,null,i.a.createElement("nav",{className:"fs-prev-package"},i.a.createElement(oe,{icon:["fas","chevron-left"]})),i.a.createElement("section",{className:"fs-packages-nav"},h.length>3&&i.a.createElement("select",{className:"fs-packages-menu",onChange:this.props.changePlanHandler,value:_},b),h.length<=3&&i.a.createElement("ul",{className:"fs-packages-tab"},y),i.a.createElement("ul",{className:"fs-packages"+(k?" fs-has-featured-plan":"")},h)),i.a.createElement("nav",{className:"fs-next-package"},i.a.createElement(oe,{icon:["fas","chevron-right"]})))}}me(he,"contextType",I);var Ae=he;class ke extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("ul",null,this.props.badges.map(e=>{let n=i.a.createElement("img",{src:e.src,alt:e.alt});return d.isNonEmptyString(e.link)&&(n=i.a.createElement("a",{href:e.link,target:"_blank"},n)),i.a.createElement("li",{key:e.key,className:"fs-badge"},n)}))}}var ye=ke,be=t(8),_e=t.n(be);class ve extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("button",{className:"fs-round-button",type:"button",role:"button",tabIndex:"0"},i.a.createElement("span",null))}}var we=ve,Ee=t.p+"27b5a722a5553d9de0170325267fccec.png",Ce=t.p+"c03f665db27af43971565560adfba594.png",xe=t.p+"cb5fc4f6ec7ada72e986f6e7dde365bf.png",Be=t.p+"f3aac72a8e63997d6bb888f816457e9b.png",Se=t.p+"178afa6030e76635dbe835e111d2c507.png";class Te extends a.Component{constructor(e){super(e),this.getReviewRating=this.getReviewRating.bind(this),this.defaultProfilePics=[Ee,Ce,xe,Be,Se]}getReviewRating(e){let n=Math.ceil(e.rate/100*5),t=[];for(let e=0;e<n;e++)t.push(i.a.createElement(oe,{key:e,icon:["fas","star"]}));return t}render(){let e=this.context;setTimeout((function(){let e,n,t,a=null,i=0,s=document.querySelector(".fs-section--testimonials"),r=s.querySelector(".fs-testimonials-track"),o=r.querySelectorAll(".fs-testimonial"),c=r.querySelectorAll(".fs-testimonial.clone"),l=o.length-c.length,p=r.querySelector(".fs-testimonials"),f=!1,u=function(e,a){(a=a||!1)&&s.classList.remove("ready");let r=3+e,c=(e%l+l)%l;s.querySelector(".slick-dots li.selected").classList.remove("selected"),Array.from(s.querySelectorAll(".slick-dots li")).forEach(e=>{c==e.getAttribute("data-index")&&e.classList.add("selected")}),p.style.left=r*t*-1+"px";for(let e of o)e.setAttribute("aria-hidden","true");for(let e=0;e<n;e++)o[e+r].setAttribute("aria-hidden","false");a&&setTimeout((function(){s.classList.add("ready")}),500),e==l&&(i=0,setTimeout((function(){u(i,!0)}),1e3)),e==-n&&(i=e+l,setTimeout((function(){u(i,!0)}),1e3))},d=function(){a&&(clearInterval(a),a=null)},g=function(){i++,u(i)},m=function(){f&&n<o.length&&(a=setInterval((function(){g()}),1e4))},h=function(){d(),s.classList.remove("ready"),e=parseFloat(window.getComputedStyle(r).width),n=Math.min(3,Math.floor(e/250)),t=Math.floor(e/n),p.style.width=o.length*t+"px";for(let e of o)e.style.width=t+"px";let a=0,c=0;for(let e=0;e<o.length;e++){let n=o[e],t=n.querySelector("header"),i=n.querySelector("section");a=Math.max(a,parseFloat(window.getComputedStyle(t).height)),c=Math.max(c,parseFloat(window.getComputedStyle(i).height))}for(let e=0;e<o.length;e++){let n=o[e],t=n.querySelector("header"),i=n.querySelector("section");t.style.height=a+"px",i.style.height=c+"px"}p.style.left=(i+3)*t*-1+"px",s.classList.add("ready"),f=l>n,Array.from(s.querySelectorAll(".slick-arrow, .slick-dots")).forEach(e=>{e.style.display=f?"block":"none"})};h(),m(),s.querySelector(".fs-nav-next").addEventListener("click",(function(){d(),g(),m()})),s.querySelector(".fs-nav-prev").addEventListener("click",(function(){d(),i--,u(i),m()})),Array.from(s.querySelectorAll(".slick-dots li")).forEach(e=>{e.addEventListener("click",(function(e){let n=null;n="span"===e.target.tagName.toLowerCase()?e.target.parentNode.parentNode:"button"===e.target.tagName.toLowerCase()?e.target.parentNode:e.target,n.classList.contains("selected")||(d(),i=parseInt(n.getAttribute("data-index")),u(i),m())}))}),window.addEventListener("resize",(function(){h(),m()}))}),10);let n=[],t=e.reviews.length,s=[];for(let a=-3;a<t+3;a++){let s=e.reviews[(a%t+t)%t],r=s.email?(s.email.charAt(0).toLowerCase().charCodeAt(0)-"a".charCodeAt(0))%5:Math.floor(4*Math.random()),o=this.defaultProfilePics[r];n.push(i.a.createElement("section",{className:"fs-testimonial"+(a<0||a>=t?" clone":""),"data-index":a,"data-id":s.id,key:a},i.a.createElement("header",{className:"fs-testimonial-header"},i.a.createElement("div",{className:"fs-testimonial-logo"},i.a.createElement("object",{data:s.email?"//gravatar.com/avatar/"+_e()(s.email)+"?s=80&d="+encodeURIComponent(o):o,type:"image/png"},i.a.createElement("img",{src:o}))),i.a.createElement("h4",null,s.title),i.a.createElement("div",{className:"fs-testimonial-rating"},this.getReviewRating(s))),i.a.createElement("section",null,i.a.createElement(oe,{icon:["fas","quote-left"],className:"fs-icon-quote"}),i.a.createElement("blockquote",{className:"fs-testimonial-message",dangerouslySetInnerHTML:{__html:s.text}}),i.a.createElement("section",{className:"fs-testimonial-author"},i.a.createElement("div",{className:"fs-testimonial-author-name"},s.name),i.a.createElement("div",null,s.job_title?s.job_title+", ":"",s.company)))))}for(let e=0;e<t;e++)s.push(i.a.createElement("li",{className:0==e?"selected":"",key:e,"data-index":e,"aria-hidden":"true",role:"presentation","aria-selected":0==e?"true":"false","aria-controls":"navigation"+e},i.a.createElement(we,{type:"button",role:"button",tabIndex:"0"})));return i.a.createElement(a.Fragment,null,e.active_installs>1e3&&i.a.createElement("header",{className:"fs-section-header"},i.a.createElement("h2",null,"Trusted by More than ",d.formatNumber(1e3*Math.ceil(e.active_installs/1e3))," Blogs, Online Shops & Websites!")),e.active_installs<=1e3&&e.downloads>1e3&&i.a.createElement("header",{className:"fs-section-header"},i.a.createElement("h2",null,"Downloaded More than ",d.formatNumber(1e3*Math.ceil(e.downloads/1e3))," Times!")),i.a.createElement("section",{className:"fs-testimonials-nav"},i.a.createElement("nav",{className:"fs-nav fs-nav-prev"},i.a.createElement(oe,{icon:["fas","arrow-left"]})),i.a.createElement("div",{className:"fs-testimonials-track"},i.a.createElement("section",{className:"fs-testimonials"},n)),i.a.createElement("nav",{className:"fs-nav fs-nav-next"},i.a.createElement(oe,{icon:["fas","arrow-right"]}))),i.a.createElement("ul",{className:"fs-nav fs-nav-pagination slick-dots",role:"tablist"},s))}}!function(e,n,t){n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}(Te,"contextType",I);var Pe=Te;let Ne=null;const Me=function(){return null!==Ne||(Ne={buildQueryString:function(e){const n=[];for(let t in e)e.hasOwnProperty(t)&&n.push(encodeURIComponent(t)+"="+encodeURIComponent(e[t]));return n.join("&")},request:function(e,n){return n={...n,...pn},fetch(ze.getInstance().addQueryArgs(e,n),{method:"GET",headers:{"Content-Type":"application/json"}}).then(e=>{let n=e.json();return n.success&&d.isNonEmptyString(n.next_page)&&(window.location.href=n.next_page),n})}}),Ne};t(34);let qe=null;!function(e){let n=this||{};n.FS=n.FS||{},qe=n.FS,null==n.FS.PostMessage&&(n.FS.PostMessage=function(){let e,n,t,a=!1,i=!1,s=new NoJQueryPostMessageMixin("postMessage","receiveMessage"),r={},o=!1,c=function(e){n=e,t=e.substring(0,e.indexOf("/","https://"===e.substring(0,"https://".length)?8:7)),o=""!==e},l=-1,p=!0;try{p=window.self!==window.top}catch(e){}return p&&c(decodeURIComponent(document.location.hash.replace(/^#/,""))),{init:function(n,t){e=n,s.receiveMessage((function(e){let n;try{if(null!=e&&e.origin&&(e.origin.indexOf("js.stripe.com")>0||e.origin.indexOf("www.paypal.com")>0))return;if(n=d.isNonEmptyString(e.data)?JSON.parse(e.data):e.data,r[n.type])for(let e=0;e<r[n.type].length;e++)r[n.type][e](n.data)}catch(n){console.error("FS.PostMessage.receiveMessage",n.message),console.log(e.data)}}),e),Ie.PostMessage.receiveOnce("forward",(function(e){window.location=e.url})),(t=t||[]).length>0&&window.addEventListener("scroll",(function(){for(var e=0;e<t.length;e++)Ie.PostMessage.postScroll(t[e])}))},init_child:function(e){e&&c(e),this.init(t),a=!0,i=!0,window.addEventListener("load",(function(){Ie.PostMessage.postHeight(),Ie.PostMessage.post("loaded")})),window.addEventListener("resize",(function(){Ie.PostMessage.postHeight(),Ie.PostMessage.post("resize")}))},hasParent:function(){return o},getElementAbsoluteHeight:function(e){let n=window.getComputedStyle(e),t=parseFloat(n.marginTop)+parseFloat(n.marginBottom);return Math.ceil(e.offsetHeight+t)},postHeight:function(e,n){e=e||0,(n=document.getElementById(n||"fs_pricing_page_container"))||(n=document.getElementsByTagName("html")[0]);var t=e+this.getElementAbsoluteHeight(n);return t!=l&&(this.post("height",{height:t}),l=t,!0)},postScroll:function(e){let n=window.getComputedStyle(document.getElementsByTagName("html")[0]);var t=document.documentElement,a=(window.pageXOffset||t.scrollLeft,t.clientLeft,(window.pageYOffset||t.scrollTop)-(t.clientTop||0));this.post("scroll",{top:a,height:window.innerHeight-parseFloat(n.getPropertyValue("padding-top"))-parseFloat(n.getPropertyValue("margin-top"))},e)},post:function(e,t,a){console.debug("PostMessage.post",e),a?s.postMessage(JSON.stringify({type:e,data:t}),a.src,a.contentWindow):s.postMessage(JSON.stringify({type:e,data:t}),n,window.parent)},receive:function(e,n){console.debug("PostMessage.receive",e),null==r[e]&&(r[e]=[]),r[e].push(n)},receiveOnce:function(e,n,t){(t=void 0!==t&&t)&&this.unset(e),this.is_set(e)||this.receive(e,n)},is_set:function(e){return null!=r[e]},unset:function(e){r[e]=null},parent_url:function(){return n},parent_subdomain:function(){return t},isChildInitialized:function(){return i}}}())}();const Ie=qe;let Oe=null;const ze={getInstance:function(){return null!==Oe||(Oe={addQueryArgs:function(e,n){return d.isNonEmptyString(e)?(n&&(-1===e.indexOf("?")?e+="?":e+="&",e+=Me().buildQueryString(n)),e):e},getContactUrl(e,n){let t=d.isNonEmptyString(pn.contact_url)?pn.contact_url:Ie.PostMessage.parent_url();return d.isNonEmptyString(t)||(t=(-1===["3000","8080"].indexOf(window.location.port)?"https://wp.freemius.com":"http://wp.freemius:8080")+`/contact/?page=${e.slug}-contact&plugin_id=${e.id}&plugin_public_key=${e.public_key}`),this.addQueryArgs(t,{topic:n})},getQuerystringParam:function(e,n){let t="",a=e.indexOf("#");-1<a&&(t=e.substr(a),e=e.substr(0,a));let i="",s=e.indexOf("?");if(-1<s&&(i=e.substr(s+1),e=e.substr(0,s)),""!==i){let e=i.split("&");for(let t=0,a=e.length;t<a;t++){let a=e[t].split("=",2);if(a.length>0&&n==a[0])return a[1]}}return null},redirect:function(e,n){window.location.href=this.addQueryArgs(e,n)}}),Oe}};class Le extends a.Component{constructor(e){super(e)}render(){let e=this.context;if(!e||!e.plugin||!d.isNumeric(e.plugin.id))return null;let n=[],t="",s=!1,r=!1,o=e.hasAnnualCycle,c=e.hasLifetimePricing,l=e.hasMonthlyCycle,p=e.plugin.moduleLabel();e.hasEmailSupportForAllPlans?t="Yes! Top-notch customer support is key for a quality product, so we'll do our very best to resolve any issues you encounter via our support page.":e.hasEmailSupportForAllPaidPlans?t="Yes! Top-notch customer support for our paid customers is key for a quality product, so we'll do our very best to resolve any issues you encounter via our support page.":e.hasAnyPlanWithSupport?t="Yes! Top-notch customer support is key for a quality product, so we'll do our very best to resolve any issues you encounter. Note, each plan provides a different level of support.":e.plugin.hasWordPressOrgVersion()&&(t=i.a.createElement(a.Fragment,null,"You can post your questions in our ",i.a.createElement("a",{href:"https://wordpress.org/support/plugin/"+e.plugin.slug,target:"_blank"},"WordPress Support Forum")," to get help from the community. Unfortunately extra support is currently not provided.")),e.hasPremiumVersion&&n.push({q:"Is there a setup fee?",a:"No. There are no setup fees on any of our plans."}),null!==e.firstPaidPlan&&(r=e.firstPaidPlan.isBlockingMonthly(),s=e.firstPaidPlan.isBlockingAnnually());let f=r&&s,u=!r&&!s;if(n.push({q:"Can I cancel my account at any time?",a:`Yes, if you ever decide that ${e.plugin.title} isn't the best ${p} for your business, simply cancel your account from your Account panel.`+(f?"":(u?" You'll":" If you cancel "+(s?"a monthly":"an annual")+" subscription, you'll")+` still be able to use the ${p} without updates or support.`)}),l||o){let e="";l&&o&&c?e="All plans are month-to-month unless you subscribe for an annual or lifetime plan.":l&&o?e="All plans are month-to-month unless you subscribe for an annual plan.":l&&c?e="All plans are month to month unless you purchase a lifetime plan.":o&&c?e="All plans are year-to-year unless you purchase a lifetime plan.":l?e="All plans are month-to-month.":o&&(e="All plans are year-to-year."),n.push({q:"What's the time span for your contracts?",a:e})}e.annualDiscount>0&&n.push({q:"Do you offer any discounted plans?",a:`Yes, we offer up to ${e.annualDiscount}% discount on an annual plans, when they are paid upfront.`}),o&&e.plugin.hasRenewalsDiscount(y)&&n.push({q:"Do you offer a renewals discount?",a:`Yes, you get ${e.plugin.getFormattedRenewalsDiscount(y)} discount for all annual plan automatic renewals. The renewal price will never be increased so long as the subscription is not cancelled.`}),e.plansCount>1&&n.push({q:"Can I change my plan later on?",a:"Absolutely! You can upgrade or downgrade your plan at any time."}),n.push({q:"What payment methods are accepted?",a:e.isPayPalSupported?"We accept all major credit cards including Visa, Mastercard, American Express, as well as PayPal payments.":i.a.createElement(a.Fragment,null,"We accept all major credit cards including Visa, Mastercard and American Express.",i.a.createElement("br",null),"Unfortunately, due to regulations in your country related to PayPal’s subscriptions, we won’t be able to accept payments via PayPal.")});let g=`We don't offer refunds, but we do offer a free version of the ${p} (the one you are using right now).`;e.plugin.hasRefundPolicy()&&(g=B.STRICT!==e.plugin.refund_policy?i.a.createElement(a.Fragment,null,i.a.createElement("a",{className:"message-trigger",onClick:e=>this.props.toggleRefundPolicyModal(e),href:"#"},"Yes we do!")," We stand behind the quality of our product and will refund 100% of your money if you are unhappy with the plugin."):i.a.createElement(a.Fragment,null,i.a.createElement("a",{className:"message-trigger",onClick:e=>this.props.toggleRefundPolicyModal(e),href:"#"},"Yes we do!")," We stand behind the quality of our product and will refund 100% of your money if you experience an issue that makes the plugin unusable and we are unable to resolve it.")),n.push({q:"Do you offer refunds?",a:g}),e.hasPremiumVersion&&n.push({q:`Do I get updates for the premium ${p}?`,a:`Yes! Automatic updates to our premium ${p} are available free of charge as long as you stay our paying customer.`+(f?"":" If you cancel your "+(u?"subscription":s?"monthly subscription":"annual subscription")+`, you'll still be able to use our ${p} without updates or support.`)}),""!==t&&n.push({q:"Do you offer support if I need help?",a:t}),n.push({q:"I have other pre-sale questions, can you help?",a:i.a.createElement(a.Fragment,null,"Yes! You can ask us any question through our ",i.a.createElement("a",{className:"contact-link",href:ze.getInstance().getContactUrl(this.context.plugin,"pre_sale_question")},"support page"),".")});let m=[];for(let e=0;e<n.length;e++)m.push(i.a.createElement(j,{key:e,"fs-section":"faq-item"},i.a.createElement("h3",null,n[e].q),i.a.createElement("p",null,n[e].a)));return i.a.createElement(a.Fragment,null,i.a.createElement("header",{className:"fs-section-header"},i.a.createElement("h2",null,"Frequently Asked Questions")),i.a.createElement(j,{"fs-section":"faq-items"},m))}}!function(e,n,t){n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}(Le,"contextType",I);var Ue=Le,je=t.p+"f928f1be99776af83e8e6be4baf8ffe7.svg";class De extends a.Component{constructor(e){super(e)}render(){let e=this.context;if(!e||!e.plugin||!d.isNumeric(e.plugin.id))return null;let n=e.plugin,t="",s="";switch(n.refund_policy){case B.FLEXIBLE:t="Double Guarantee",s=i.a.createElement(a.Fragment,null,"You are fully protected by our 100% No-Risk Double Guarantee. If you don't like our ",n.moduleLabel()," over the next ",n.money_back_period," days, we'll happily refund 100% of your money. ",i.a.createElement("b",null,"No questions asked."));break;case B.MODERATE:t="Satisfaction Guarantee",s=`You are fully protected by our 100% Satisfaction Guarantee. If over the next ${n.money_back_period} days you are unhappy with our ${n.moduleLabel()} or have an issue that we are unable to resolve, we'll happily consider offering a 100% refund of your money.`;break;case B.STRICT:default:t="Money Back Guarantee",s=`You are fully protected by our 100% Money Back Guarantee. If during the next ${n.money_back_period} days you experience an issue that makes the ${n.moduleLabel()} unusable and we are unable to resolve it, we'll happily consider offering a full refund of your money.`}return i.a.createElement(a.Fragment,null,i.a.createElement("h2",{className:"fs-money-back-guarantee-title"},n.money_back_period,"-day ",t),i.a.createElement("p",{className:"fs-money-back-guarantee-message"},s),i.a.createElement("button",{className:"fs-button fs-button--size-small",onClick:e=>this.props.toggleRefundPolicyModal(e)},"Learn More"),i.a.createElement("img",{src:je}),this.context.showRefundPolicyModal&&i.a.createElement("div",{className:"fs-modal fs-modal--refund-policy"},i.a.createElement("section",{className:"fs-modal-content-container"},i.a.createElement("header",{className:"fs-modal-header"},i.a.createElement("h3",null,"Refund Policy"),i.a.createElement("i",{className:"fs-modal-close"},i.a.createElement(oe,{icon:["fas","times-circle"],onClick:e=>this.props.toggleRefundPolicyModal(e)}))),i.a.createElement("div",{className:"fs-modal-content"},i.a.createElement("p",null,s),i.a.createElement("p",null,"Just start a refund ticket through the \"Contact Us\" in the plugin's admin settings and we'll process a refund."),i.a.createElement("p",null,"To submit a refund request, please open a ",i.a.createElement("a",{className:"fs-contact-link",href:ze.getInstance().getContactUrl(this.context.plugin,"refund")},"refund support ticket"),".")))))}}!function(e,n,t){n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}(De,"contextType",I);var Fe=De;let Re=null,Ye=[],Qe=null;const We=function(e){return function(e){return null!==Re||(Ye=e,Re={getTrackingPath:function(e){let n="/"+(Ye.isProduction?"":"local/")+"pricing/"+Ye.pageMode+"/"+Ye.type+"/"+Ye.pluginID+"/"+(Ye.isTrialMode&&!Ye.isPaidTrial?"":"plan/all/billing/"+Ye.billingCycle+"/licenses/all/");return Ye.isTrialMode?n+=(Ye.isPaidTrial?"paid-trial":"trial")+"/":n+="buy/",n+e+".html"},track:function(e){if(!d.isUndefinedOrNull(window.ga)){null===Qe&&(Qe=window.ga,Qe("create","UA-59907393-2","auto"),null!==Ye.uid&&Qe("set","&uid",Ye.uid.toString()));try{d.isNumeric(Ye.userID)&&Qe("set","userId",Ye.userID),Qe("send",{hitType:"pageview",page:this.getTrackingPath(e)})}catch(e){console.log(e)}}}}),Re}(e)};function Ve(){return(Ve=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a])}return e}).apply(this,arguments)}class He extends a.Component{constructor(e){super(e)}render(){return i.a.createElement("div",Ve({className:"fs-modal fs-modal--loading"},this.props),i.a.createElement("section",{className:"fs-modal-content-container"},i.a.createElement("div",{className:"fs-modal-content"},d.isNonEmptyString(this.props.title)&&i.a.createElement("span",null,this.props.title),i.a.createElement("i",null))))}}var $e=He;class Xe extends a.Component{constructor(e){super(e)}render(){let e=this.context.pendingConfirmationTrialPlan,n=this.context.plugin;return i.a.createElement("div",{className:"fs-modal fs-modal--trial-confirmation"},i.a.createElement("section",{className:"fs-modal-content-container"},i.a.createElement("header",{className:"fs-modal-header"},i.a.createElement("h3",null,"Start Free Trial")),i.a.createElement("div",{className:"fs-modal-content"},i.a.createElement("p",null,i.a.createElement("strong",null,"You are 1-click away from starting your ",e.trial_period,"-day free trial of the ",e.title," plan.")),i.a.createElement("p",null,"For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the ",n.type," to periodically send data to ",i.a.createElement("a",{href:"https://freemius.com",target:"_blank"},"freemius.com")," to check for version updates and to validate your trial.")),i.a.createElement("div",{className:"fs-modal-footer"},i.a.createElement("button",{className:"fs-button fs-button--close",onClick:this.props.cancelTrialHandler},"Cancel"),i.a.createElement("button",{className:"fs-button fs-button--primary fs-button--approve-trial",onClick:()=>this.props.startTrialHandler(e.id)},"Approve & Start Trial"))))}}!function(e,n,t){n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}(Xe,"contextType",I);var Ke=Xe;class Ze extends a.Component{constructor(e){super(e),this.state={active_installs:0,annualDiscount:0,billingCycles:[],currencies:[],downloads:0,faq:[],firstPaidPlan:null,featuredPlan:null,isActivatingTrial:!1,isPayPalSupported:!1,isNetworkTrial:!1,isTrial:"true"===pn.trial||!0===pn.trial,pendingConfirmationTrialPlan:null,plugin:{},plans:[],selectedPlanID:null,reviews:[],selectedBillingCycle:E.getBillingCyclePeriod(pn.billing_cycle),selectedCurrency:this.getDefaultCurrency(),selectedLicenseQuantity:this.getDefaultLicenseQuantity(),upgradingToPlanID:null},this.changeBillingCycle=this.changeBillingCycle.bind(this),this.changeCurrency=this.changeCurrency.bind(this),this.changeLicenses=this.changeLicenses.bind(this),this.changePlan=this.changePlan.bind(this),this.getModuleIcon=this.getModuleIcon.bind(this),this.startTrial=this.startTrial.bind(this),this.toggleRefundPolicyModal=this.toggleRefundPolicyModal.bind(this),this.upgrade=this.upgrade.bind(this)}appendScripts(){let e=null;var n,t,a,i,s,r;this.hasInstallContext()||(e=document.createElement("script"),e.src=(this.isProduction()?"https://checkout.freemius.com":"http://checkout.freemius-local.com:8080")+"/checkout.js",e.async=!0,document.body.appendChild(e)),this.isSandboxPaymentsMode()||(n=window,t=document,a="script",i="ga",n.GoogleAnalyticsObject=i,n.ga=n.ga||function(){(n.ga.q=n.ga.q||[]).push(arguments)},n.ga.l=1*new Date,s=t.createElement(a),r=t.getElementsByTagName(a)[0],s.async=1,s.src="//www.google-analytics.com/analytics.js",r.parentNode.insertBefore(s,r))}changeBillingCycle(e){this.setState({selectedBillingCycle:e.currentTarget.dataset.billingCycle})}changeCurrency(e){this.setState({selectedCurrency:e.currentTarget.value})}changeLicenses(e){let n=e.currentTarget.value,t=this.state.selectedLicenseQuantity;for(let e of this.state.plans)if(!d.isUndefinedOrNull(e.pricing))for(let a of e.pricing)if(n==a.id){t=a.getLicenses();break}this.setState({selectedLicenseQuantity:t})}changePlan(e){let n=e.target.value?e.target.value:e.target.dataset.planId?e.target.dataset.planId:e.target.parentNode.dataset.planId;e.preventDefault(),this.setState({selectedPlanID:n})}getModuleIcon(){let e="theme"===this.state.plugin.type?u:f;return i.a.createElement("object",{data:this.state.plugin.icon,className:"fs-plugin-logo",type:"image/png"},i.a.createElement("img",{src:e,className:"fs-plugin-logo",alt:this.state.plugin.type+"-logo"}))}componentDidMount(){this.fetchPricingData()}getDefaultCurrency(){return d.isNonEmptyString(pn.currency)||A[pn.currency]?pn.currency:"usd"}getDefaultLicenseQuantity(){return"unlimited"===pn.licenses?0:d.isNumeric(pn.licenses)?pn.licenses:1}getSelectedPlanPricing(e){for(let n of this.state.plans)if(e==n.id)for(let e of n.pricing)if(e.getLicenses()==this.state.selectedLicenseQuantity&&e.currency===this.state.selectedCurrency)return e;return null}hasInstallContext(){return!d.isUndefinedOrNull(this.state.install)}isDashboardMode(){return"dashboard"===pn.mode}isEmbeddedDashboardMode(){return!!this.isDashboardMode()&&d.isUndefinedOrNull(Ie.PostMessage.parent_url())}isProduction(){return d.isUndefinedOrNull(pn.is_production)?-1===["3000","8080"].indexOf(window.location.port):pn.is_production}isSandboxPaymentsMode(){return d.isNonEmptyString(pn.sandbox)&&d.isNumeric(pn.s_ctx_ts)}startTrial(e){this.setState({isActivatingTrial:!0,upgradingToPlanID:e});let n=this.isEmbeddedDashboardMode()?pn.request_handler_url:pn.fs_wp_endpoint_url+"/action/service/subscribe/trial/";Me().request(n,{prev_url:window.location.href,pricing_action:"start_trial",plan_id:e}).then(e=>{if(e.success){this.trackingManager.track("started");const e=Ie.PostMessage.parent_url();d.isNonEmptyString(e)?Ie.PostMessage.post("forward",{url:ze.getInstance().addQueryArgs(e,{page:this.state.plugin.menu_slug+"-account",fs_action:this.state.plugin.unique_affix+"_sync_license",plugin_id:this.state.plugin.id})}):d.isNonEmptyString(pn.next)&&ze.getInstance().redirect(pn.next)}this.setState({isActivatingTrial:!1,pendingConfirmationTrialPlan:null,upgradingToPlanID:null})})}toggleRefundPolicyModal(e){e.preventDefault(),this.setState({showRefundPolicyModal:!this.state.showRefundPolicyModal})}upgrade(e,n){if(!q().isFreePlan(e.pricing)){if(!this.isEmbeddedDashboardMode()){let t=window.FS.Checkout.configure({plugin_id:this.state.plugin.id,public_key:this.state.plugin.public_key,sandbox_token:d.isNonEmptyString(pn.sandbox_token)?pn.sandbox_token:null,timestamp:d.isNonEmptyString(pn.sandbox_token)?pn.timestamp:null}),a={name:this.state.plugin.title,plan_id:e.id,success:function(e){console.log(e)}};return null!==n?a.pricing_id=n.id:a.licenses=99999==this.state.selectedLicenseQuantity?null:this.state.selectedLicenseQuantity,void t.open(a)}if(this.state.isTrial)this.hasInstallContext()?this.startTrial(e.id):d.isUndefinedOrNull(Ie.PostMessage.parent_url())?this.setState({pendingConfirmationTrialPlan:e}):Ie.PostMessage.post("start_trial",{plugin_id:this.state.plugin.id,plan_id:e.id,plan_name:e.name,plan_title:e.title,trial_period:e.trial_period});else{null===n&&(n=this.getSelectedPlanPricing(e.id));let t=Ie.PostMessage.parent_url(),a=d.isNonEmptyString(t),i=this.state.selectedBillingCycle;if(this.state.skipDirectlyToPayPal){let t={},s=e.trial_period;s>0&&(t.trial_period=s,this.hasInstallContext()&&(t.user_id=this.state.install.user_id));let r={plan_id:e.id,pricing_id:n.id,billing_cycle:i};a?Ie.PostMessage.post("forward",{url:ze.getInstance().addQueryArgs(pn.fs_wp_endpoint_url+"/action/service/paypal/express-checkout/",r)}):(r.prev_url=window.location.href,ze.getInstance().redirect(pn.fs_wp_endpoint_url+"/action/service/paypal/express-checkout/",r))}else{let s={checkout:"true",plan_id:e.id,plan_name:e.name,billing_cycle:i,pricing_id:n.id,currency:this.state.selectedCurrency};a?Ie.PostMessage.post("forward",{url:ze.getInstance().addQueryArgs(t,{...s,page:this.state.plugin.menu_slug+"-pricing"})}):ze.getInstance().redirect(window.location.href,s)}}}}fetchPricingData(){let e={pricing_action:"fetch_pricing_data",trial:this.state.isTrial,is_sandbox:this.isSandboxPaymentsMode()};Me().request(pn.request_handler_url,e).then(e=>{if(e.data&&(e=e.data),!e.plans)return;let n={},t={},a=!1,i=!1,s=!0,r=!0,o=null,c=null,l=!1,p=!1,f={},u=0,g=q(e.plans),h=0,A=[],k=null,y=this.state.selectedBillingCycle,b=null,C=!1,x="true"===e.trial_mode||!0===e.trial_mode,B="true"===e.trial_utilized||!0===e.trial_utilized;for(let a=0;a<e.plans.length;a++){if(!e.plans.hasOwnProperty(a))continue;if(e.plans[a].is_hidden){e.plans.splice(a,1),a--;continue}h++,e.plans[a]=new m(e.plans[a]);let l=e.plans[a];l.is_featured&&(o=l),d.isUndefinedOrNull(l.features)&&(l.features=[]);let p=l.pricing;if(d.isUndefinedOrNull(p))continue;for(let e=0;e<p.length;e++){if(!p.hasOwnProperty(e))continue;p[e]=new E(p[e]);let a=p[e];null!=a.monthly_price&&(n[_]=!0),null!=a.annual_price&&(n[v]=!0),null!=a.lifetime_price&&(n[w]=!0),t[a.currency]=!0;let i=a.getLicenses();f[a.currency]||(f[a.currency]={}),f[a.currency][i]=!0}let y=g.isPaidPlan(p);if(y&&null===c&&(c=l),l.hasEmailSupport()?l.hasSuccessManagerSupport()||(k=l.id):(r=!1,y&&(s=!1)),!i&&l.hasAnySupport()&&(i=!0),y){u++;let e=g.getSingleSitePricing(p,this.state.selectedCurrency);null!==e&&A.push(e)}}if(!x||d.isUndefinedOrNull(pn.is_network_admin)||"true"!==pn.is_network_admin&&!0!==pn.is_network_admin||(C=!0,x=!1),x){for(let n of e.plans)if(!n.is_hidden&&n.pricing&&!g.isFreePlan(n.pricing)&&n.hasTrial()){b=n;break}null===b&&(x=!1)}null!=n.annual&&(a=!0),null!=n.monthly&&(p=!0),null!=n.lifetime&&(l=!0);let T=new S(e.plugin),P=Ie.PostMessage.parent_url();if(d.isNonEmptyString(pn.menu_slug))T.menu_slug=pn.menu_slug;else if(d.isNonEmptyString(P)){let e=ze.getInstance().getQuerystringParam(P,"page");T.menu_slug=e.substring(0,e.length-"-pricing".length)}T.unique_affix=d.isUndefinedOrNull(pn.unique_affix)?T.slug+("theme"===T.type?"-theme":""):pn.unique_affix,this.setState({active_installs:e.active_installs,allPlansSingleSitePrices:e.all_plans_single_site_pricing,annualDiscount:a&&p?g.largestAnnualDiscount(A):0,billingCycles:Object.keys(n),currencies:Object.keys(t),currencySymbols:{usd:"$",eur:"€",gbp:"£"},downloads:e.downloads,hasAnnualCycle:a,hasEmailSupportForAllPaidPlans:s,hasEmailSupportForAllPlans:r,featuredPlan:o,firstPaidPlan:c,hasLifetimePricing:l,hasMonthlyCycle:p,hasPremiumVersion:"true"===e.plugin.has_premium_version||!0===e.plugin.has_premium_version,install:e.install,isPayPalSupported:"true"===e.is_paypal_supported||!0===e.is_paypal_supported,licenseQuantities:f,paidPlansCount:u,paidPlanWithTrial:b,plans:e.plans,plansCount:h,plugin:T,priorityEmailSupportPlanID:k,reviews:e.reviews,selectedBillingCycle:y,skipDirectlyToPayPal:"true"===e.skip_directly_to_paypal||!0===e.skip_directly_to_paypal,isNetworkTrial:C,isTrial:x,trialUtilized:B,showRefundPolicyModal:!1}),this.appendScripts(),this.trackingManager=We({billingCycle:E.getBillingCyclePeriod(this.state.selectedBillingCycle),isTrialMode:this.state.isTrial,isSandbox:this.isSandboxPaymentsMode(),isPaidTrial:!1,isProduction:this.isProduction(),pageMode:this.isDashboardMode()?"dashboard":"page",pluginID:this.state.plugin.id,type:this.state.plugin.type,uid:this.hasInstallContext()?this.state.install.id:null,userID:this.hasInstallContext()?this.state.install.user_id:null}),Ie.PostMessage.init_child(),Ie.PostMessage.postHeight()})}render(){let e=this.state;if(!e.plugin.id){const e=document.querySelector(pn.selector).getBoundingClientRect().left;return i.a.createElement($e,{style:{left:e+"px"}})}let n=e.featuredPlan;if(null!==n){let t=!1;for(let a of n.pricing){if(a.is_hidden)continue;if(a.getLicenses()==e.selectedLicenseQuantity&&(a.currency==e.selectedCurrency&&a.supportsBillingCycle(e.selectedBillingCycle))){t=!0;break}}t||(n=null)}let t=null;if(e.trialUtilized||e.isNetworkTrial){if(e.isNetworkTrial)t="Multisite network level trials are currently not supported. Apologies for the inconvenience.";else if(e.isTrial)t="Trial was already utilized for this site and only enabled for testing purposes since you are running in a sandbox mode.";else{let e=this.state.plugin.main_support_email_address;t=i.a.createElement(a.Fragment,null,"Sorry, but you have already utilized a trial. Please ",i.a.createElement("a",{href:"mailto:"+e},"contact us")," if you still want to test the paid version.")}t=i.a.createElement("div",{className:"fs-trial-message"},t)}return i.a.createElement(I.Provider,{value:this.state},i.a.createElement("div",{id:"fs_pricing_wrapper"},t,i.a.createElement("header",{className:"fs-app-header"},i.a.createElement("section",{className:"fs-page-title"},i.a.createElement("h2",null,"Plans and Pricing"),i.a.createElement("h3",null,"Choose your plan and upgrade in minutes!")),i.a.createElement("section",{className:"fs-plugin-title-and-logo"},this.getModuleIcon(),i.a.createElement("h1",null,i.a.createElement("strong",null,e.plugin.title)))),i.a.createElement("main",{className:"fs-app-main"},i.a.createElement(j,{"fs-section":"plans-and-pricing"},e.annualDiscount>0&&i.a.createElement(j,{"fs-section":"annual-discount"},i.a.createElement("div",{className:"fs-annual-discount"},"Save up to ",e.annualDiscount,"% on Yearly Pricing!")),this.state.isTrial&&i.a.createElement(j,{"fs-section":"trial-header"},i.a.createElement("h2",null,"Start your ",e.paidPlanWithTrial.trial_period,"-day free trial"),i.a.createElement("h4",null,e.paidPlanWithTrial.requiresSubscription()?`No commitment for ${e.paidPlanWithTrial.trial_period} days - cancel anytime!`:"No credit card required, includes all available features.")),e.billingCycles.length>1&&(!this.state.isTrial||e.paidPlanWithTrial.requiresSubscription())&&i.a.createElement(j,{"fs-section":"billing-cycles"},i.a.createElement(F,{handler:this.changeBillingCycle,billingCycleDescription:this.billingCycleDescription})),e.currencies.length>1&&i.a.createElement(j,{"fs-section":"currencies"},i.a.createElement(Y,{handler:this.changeCurrency})),i.a.createElement(j,{"fs-section":"packages"},i.a.createElement(Ae,{changeLicensesHandler:this.changeLicenses,changePlanHandler:this.changePlan,upgradeHandler:this.upgrade})),i.a.createElement(j,{"fs-section":"custom-implementation"},i.a.createElement("h2",null,"Need more sites, custom implementation and dedicated support?"),i.a.createElement("p",null,"We got you covered! ",i.a.createElement("a",{href:ze.getInstance().getContactUrl(this.state.plugin,"pre_sale_question")},"Click here to contact us")," and we'll scope a plan that's tailored to your needs.")),e.plugin.hasRefundPolicy()&&(!this.state.isTrial||!1)&&i.a.createElement(j,{"fs-section":"money-back-guarantee"},i.a.createElement(Fe,{toggleRefundPolicyModal:this.toggleRefundPolicyModal})),i.a.createElement(j,{"fs-section":"badges"},i.a.createElement(ye,{badges:[{key:"fs-badges",src:o,alt:"Secure payments by Freemius - Sell and market freemium and premium WordPress plugins & themes",link:"https://freemius.com/?badge=secure_payments&version=light#utm_source=wpadmin&utm_medium=payments_badge&utm_campaign=pricing_page"},{key:"mcafee",src:c,alt:"McAfee Badge",link:"https://www.mcafeesecure.com/verify?host=freemius.com"},{key:"paypal",src:l,alt:"PayPal Verified Badge"},{key:"comodo",src:p,alt:"Comodo Secure SSL Badge"}]}))),!d.isUndefinedOrNull(this.state.reviews)&&this.state.reviews.length>0&&i.a.createElement(j,{"fs-section":"testimonials"},i.a.createElement(Pe,null)),i.a.createElement(j,{"fs-section":"faq"},i.a.createElement(Ue,{toggleRefundPolicyModal:this.toggleRefundPolicyModal}))),e.isActivatingTrial&&i.a.createElement($e,{title:"Activating trial..."}),!e.isActivatingTrial&&null!==e.pendingConfirmationTrialPlan&&i.a.createElement(Ke,{cancelTrialHandler:()=>this.setState({pendingConfirmationTrialPlan:null}),startTrialHandler:this.startTrial})))}}!function(e,n,t){n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}(Ze,"contextType",I);var Ge=Ze,Je=t(14),en=t(9),nn=t(10),tn=t(11),an=t(12),sn=t(13),rn=t(15),on=t(16),cn=t(17),ln=t(18);Q.b.add(en.faArrowLeft,nn.faChevronLeft,tn.faArrowRight,an.faChevronRight,sn.faCheck,Je.faCircle,rn.faQuestionCircle,on.faQuoteLeft,cn.faStar,ln.faTimesCircle);let pn=null,fn={new:e=>{pn=e,r.a.render(i.a.createElement(Ge,null),document.querySelector(e.selector))}}}])}));
|
43 |
+
//# sourceMappingURL=freemius-pricing.js.map
|
languages/wp-security-audit-log.pot
CHANGED
@@ -16,2804 +16,2803 @@ msgstr ""
|
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
-
#: defaults.php:
|
20 |
msgid "Critical severity events."
|
21 |
msgstr ""
|
22 |
|
23 |
-
#: defaults.php:
|
24 |
msgid "High severity events."
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: defaults.php:
|
28 |
msgid "Medium severity events."
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: defaults.php:
|
32 |
msgid "Low severity events."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: defaults.php:
|
36 |
msgid "Informational events."
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: defaults.php:
|
40 |
msgid "Users Logins & Sessions Events"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: defaults.php:
|
44 |
msgid "User Activity"
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: defaults.php:
|
48 |
msgid "User logged in"
|
49 |
msgstr ""
|
50 |
|
51 |
-
#: defaults.php:
|
52 |
msgid "User logged in."
|
53 |
msgstr ""
|
54 |
|
55 |
-
#: defaults.php:
|
56 |
msgid "User logged out"
|
57 |
msgstr ""
|
58 |
|
59 |
-
#: defaults.php:
|
60 |
msgid "User logged out."
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: defaults.php:
|
64 |
msgid "Login failed"
|
65 |
msgstr ""
|
66 |
|
67 |
-
#: defaults.php:
|
68 |
msgid "%Attempts% failed login(s)."
|
69 |
msgstr ""
|
70 |
|
71 |
-
#: defaults.php:
|
72 |
msgid "Login failed / non existing user"
|
73 |
msgstr ""
|
74 |
|
75 |
-
#: defaults.php:
|
76 |
msgid "Login blocked"
|
77 |
msgstr ""
|
78 |
|
79 |
-
#: defaults.php:
|
80 |
msgid "Login blocked because other session(s) already exist for this user."
|
81 |
msgstr ""
|
82 |
|
83 |
-
#: defaults.php:
|
84 |
msgid "IP address"
|
85 |
msgstr ""
|
86 |
|
87 |
-
#: defaults.php:
|
88 |
msgid "User logged in with existing session(s)"
|
89 |
msgstr ""
|
90 |
|
91 |
-
#: defaults.php:
|
92 |
msgid "User logged in however there are other session(s) already for this user."
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: defaults.php:
|
96 |
msgid "IP address(es)"
|
97 |
msgstr ""
|
98 |
|
99 |
-
#: defaults.php:
|
100 |
msgid "User logged out all other sessions with the same username"
|
101 |
msgstr ""
|
102 |
|
103 |
-
#: defaults.php:
|
104 |
msgid "Logged out all other sessions with the same user."
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: defaults.php:
|
108 |
msgid "User session destroyed and logged out"
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: defaults.php:
|
112 |
msgid "Terminated the session of the user %TargetUserName%."
|
113 |
msgstr ""
|
114 |
|
115 |
-
#: defaults.php:
|
116 |
msgid "Role"
|
117 |
msgstr ""
|
118 |
|
119 |
-
#: defaults.php:
|
120 |
msgid "Session ID"
|
121 |
msgstr ""
|
122 |
|
123 |
-
#: defaults.php:
|
124 |
msgid "Switched to another user"
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: defaults.php:
|
128 |
msgid "Switched the session to being logged in as %TargetUserName%."
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: defaults.php:
|
132 |
msgid "User uploaded file to the Uploads directory"
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: defaults.php:
|
136 |
msgid "Uploaded a file called %FileName%."
|
137 |
msgstr ""
|
138 |
|
139 |
-
#: defaults.php:
|
140 |
msgid "Directory"
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: defaults.php:
|
144 |
msgid "User deleted file from Uploads directory"
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: defaults.php:
|
148 |
msgid "Deleted the file %FileName%."
|
149 |
msgstr ""
|
150 |
|
151 |
-
#: defaults.php:
|
152 |
msgid "User requested a password reset"
|
153 |
msgstr ""
|
154 |
|
155 |
-
#: defaults.php:
|
156 |
msgid "User requested a password reset. This does not mean that the password was changed."
|
157 |
msgstr ""
|
158 |
|
159 |
-
#: defaults.php:
|
160 |
msgid "Content & Comments"
|
161 |
msgstr ""
|
162 |
|
163 |
-
#: defaults.php:
|
164 |
msgid "Content"
|
165 |
msgstr ""
|
166 |
|
167 |
-
#: defaults.php:
|
168 |
msgid "User created a new post and saved it as draft"
|
169 |
msgstr ""
|
170 |
|
171 |
-
#: defaults.php:
|
172 |
msgid "Created the post %PostTitle%."
|
173 |
msgstr ""
|
174 |
|
175 |
-
#: defaults.php:
|
176 |
msgid "Post ID"
|
177 |
msgstr ""
|
178 |
|
179 |
-
#: defaults.php:
|
180 |
msgid "Post type"
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: defaults.php:
|
184 |
msgid "Post status"
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: defaults.php:
|
188 |
msgid "User published a post"
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: defaults.php:
|
192 |
msgid "Published the post %PostTitle%."
|
193 |
msgstr ""
|
194 |
|
195 |
-
#: defaults.php:
|
196 |
msgid "User modified a post"
|
197 |
msgstr ""
|
198 |
|
199 |
-
#: defaults.php:
|
200 |
msgid "Modified the post %PostTitle%."
|
201 |
msgstr ""
|
202 |
|
203 |
-
#: defaults.php:
|
204 |
msgid "User permanently deleted a post from the trash"
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: defaults.php:
|
208 |
msgid "Permanently deleted the post %PostTitle%."
|
209 |
msgstr ""
|
210 |
|
211 |
-
#: defaults.php:
|
212 |
msgid "User moved a post to the trash"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: defaults.php:
|
216 |
msgid "Moved the post %PostTitle% to trash."
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: defaults.php:
|
220 |
msgid "User restored a post from trash"
|
221 |
msgstr ""
|
222 |
|
223 |
-
#: defaults.php:
|
224 |
msgid "Restored the post %PostTitle% from trash."
|
225 |
msgstr ""
|
226 |
|
227 |
-
#: defaults.php:
|
228 |
msgid "User changed post URL"
|
229 |
msgstr ""
|
230 |
|
231 |
-
#: defaults.php:
|
232 |
msgid "Changed the URL of the post %PostTitle%."
|
233 |
msgstr ""
|
234 |
|
235 |
-
#: defaults.php:
|
236 |
msgid "Previous URL"
|
237 |
msgstr ""
|
238 |
|
239 |
-
#: defaults.php:
|
240 |
msgid "New URL"
|
241 |
msgstr ""
|
242 |
|
243 |
-
#: defaults.php:
|
244 |
msgid "User changed post author"
|
245 |
msgstr ""
|
246 |
|
247 |
-
#: defaults.php:
|
248 |
msgid "Changed the author of the post %PostTitle% to %NewAuthor%."
|
249 |
msgstr ""
|
250 |
|
251 |
-
#: defaults.php:
|
252 |
msgid "Previous author"
|
253 |
msgstr ""
|
254 |
|
255 |
-
#: defaults.php:
|
256 |
msgid "User changed post status"
|
257 |
msgstr ""
|
258 |
|
259 |
-
#: defaults.php:
|
260 |
msgid "Changed the status of the post %PostTitle% to %NewStatus%."
|
261 |
msgstr ""
|
262 |
|
263 |
-
#: defaults.php:
|
264 |
msgid "Previous status"
|
265 |
msgstr ""
|
266 |
|
267 |
-
#: defaults.php:
|
268 |
msgid "User changed the visibility of a post"
|
269 |
msgstr ""
|
270 |
|
271 |
-
#: defaults.php:
|
272 |
msgid "Changed the visibility of the post %PostTitle% to %NewVisibility%."
|
273 |
msgstr ""
|
274 |
|
275 |
-
#: defaults.php:
|
276 |
msgid "Previous visibility status"
|
277 |
msgstr ""
|
278 |
|
279 |
-
#: defaults.php:
|
280 |
msgid "User changed the date of a post"
|
281 |
msgstr ""
|
282 |
|
283 |
-
#: defaults.php:
|
284 |
msgid "Changed the date of the post %PostTitle% to %NewDate%."
|
285 |
msgstr ""
|
286 |
|
287 |
-
#: defaults.php:
|
288 |
msgid "Previous date"
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: defaults.php:
|
292 |
msgid "User changed the parent of a page"
|
293 |
msgstr ""
|
294 |
|
295 |
-
#: defaults.php:
|
296 |
msgid "Changed the parent of the post %PostTitle% to %NewParentName%."
|
297 |
msgstr ""
|
298 |
|
299 |
-
#: defaults.php:
|
300 |
msgid "Previous parent"
|
301 |
msgstr ""
|
302 |
|
303 |
-
#: defaults.php:
|
304 |
msgid "User changed the template of a page"
|
305 |
msgstr ""
|
306 |
|
307 |
-
#: defaults.php:
|
308 |
msgid "Changed the template of the post %PostTitle% to %NewTemplate%."
|
309 |
msgstr ""
|
310 |
|
311 |
-
#: defaults.php:
|
312 |
msgid "Previous template"
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: defaults.php:
|
316 |
msgid "User set a post as sticky"
|
317 |
msgstr ""
|
318 |
|
319 |
-
#: defaults.php:
|
320 |
msgid "Set the post %PostTitle% as sticky."
|
321 |
msgstr ""
|
322 |
|
323 |
-
#: defaults.php:
|
324 |
msgid "User removed post from sticky"
|
325 |
msgstr ""
|
326 |
|
327 |
-
#: defaults.php:
|
328 |
msgid "Removed the post %PostTitle% from sticky."
|
329 |
msgstr ""
|
330 |
|
331 |
-
#: defaults.php:
|
332 |
msgid "User modified the content of a post"
|
333 |
msgstr ""
|
334 |
|
335 |
-
#: defaults.php:
|
336 |
msgid "Modified the content of the post %PostTitle%."
|
337 |
msgstr ""
|
338 |
|
339 |
-
#: defaults.php:
|
340 |
msgid "User submitted a post for review"
|
341 |
msgstr ""
|
342 |
|
343 |
-
#: defaults.php:
|
344 |
msgid "Submitted the post %PostTitle% for review."
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: defaults.php:
|
348 |
msgid "User scheduled a post"
|
349 |
msgstr ""
|
350 |
|
351 |
-
#: defaults.php:
|
352 |
msgid "Scheduled the post %PostTitle% to be published on %PublishingDate%."
|
353 |
msgstr ""
|
354 |
|
355 |
-
#: defaults.php:
|
356 |
msgid "User changed title of a post"
|
357 |
msgstr ""
|
358 |
|
359 |
-
#: defaults.php:
|
360 |
msgid "Changed the title of the post %OldTitle% to %NewTitle%."
|
361 |
msgstr ""
|
362 |
|
363 |
-
#: defaults.php:
|
364 |
msgid "User opened a post in the editor"
|
365 |
msgstr ""
|
366 |
|
367 |
-
#: defaults.php:
|
368 |
msgid "Opened the post %PostTitle% in the editor."
|
369 |
msgstr ""
|
370 |
|
371 |
-
#: defaults.php:
|
372 |
msgid "User viewed a post"
|
373 |
msgstr ""
|
374 |
|
375 |
-
#: defaults.php:
|
376 |
msgid "Viewed the post %PostTitle%."
|
377 |
msgstr ""
|
378 |
|
379 |
-
#: defaults.php:
|
380 |
msgid "User enabled/disabled comments in a post"
|
381 |
msgstr ""
|
382 |
|
383 |
-
#: defaults.php:
|
384 |
msgid "Comments in the post %PostTitle%."
|
385 |
msgstr ""
|
386 |
|
387 |
-
#: defaults.php:
|
388 |
msgid "User enabled/disabled trackbacks and pingbacks in a post"
|
389 |
msgstr ""
|
390 |
|
391 |
-
#: defaults.php:
|
392 |
msgid "Pingbacks and Trackbacks in the post %PostTitle%."
|
393 |
msgstr ""
|
394 |
|
395 |
-
#: defaults.php:
|
396 |
msgid "User updated the excerpt in a post"
|
397 |
msgstr ""
|
398 |
|
399 |
-
#: defaults.php:
|
400 |
msgid "The excerpt of the post %PostTitle%."
|
401 |
msgstr ""
|
402 |
|
403 |
-
#: defaults.php:
|
404 |
msgid "Previous excerpt entry"
|
405 |
msgstr ""
|
406 |
|
407 |
-
#: defaults.php:
|
408 |
msgid "New excerpt entry"
|
409 |
msgstr ""
|
410 |
|
411 |
-
#: defaults.php:
|
412 |
msgid "User updated the featured image in a post"
|
413 |
msgstr ""
|
414 |
|
415 |
-
#: defaults.php:
|
416 |
msgid "The featured image of the post %PostTitle%."
|
417 |
msgstr ""
|
418 |
|
419 |
-
#: defaults.php:
|
420 |
msgid "Previous image"
|
421 |
msgstr ""
|
422 |
|
423 |
-
#: defaults.php:
|
424 |
msgid "New image"
|
425 |
msgstr ""
|
426 |
|
427 |
-
#: defaults.php:
|
428 |
msgid "Tags"
|
429 |
msgstr ""
|
430 |
|
431 |
-
#: defaults.php:
|
432 |
msgid "User added post tag"
|
433 |
msgstr ""
|
434 |
|
435 |
-
#: defaults.php:
|
436 |
msgid "Added tag(s) to the post %PostTitle%."
|
437 |
msgstr ""
|
438 |
|
439 |
-
#: defaults.php:
|
440 |
msgid "ID"
|
441 |
msgstr ""
|
442 |
|
443 |
-
#: defaults.php:
|
444 |
msgid "Type"
|
445 |
msgstr ""
|
446 |
|
447 |
-
#: defaults.php:
|
448 |
msgid "Status"
|
449 |
msgstr ""
|
450 |
|
451 |
-
#: defaults.php:
|
452 |
msgid "Added tag(s)"
|
453 |
msgstr ""
|
454 |
|
455 |
-
#: defaults.php:
|
456 |
msgid "User removed post tag"
|
457 |
msgstr ""
|
458 |
|
459 |
-
#: defaults.php:
|
460 |
msgid "Removed tag(s) from the post %PostTitle%."
|
461 |
msgstr ""
|
462 |
|
463 |
-
#: defaults.php:
|
464 |
msgid "Removed tag(s)"
|
465 |
msgstr ""
|
466 |
|
467 |
-
#: defaults.php:
|
468 |
msgid "User created new tag"
|
469 |
msgstr ""
|
470 |
|
471 |
-
#: defaults.php:
|
472 |
msgid "Created the tag %TagName%."
|
473 |
msgstr ""
|
474 |
|
475 |
-
#: defaults.php:
|
476 |
msgid "Slug"
|
477 |
msgstr ""
|
478 |
|
479 |
-
#: defaults.php:
|
480 |
msgid "User deleted tag"
|
481 |
msgstr ""
|
482 |
|
483 |
-
#: defaults.php:
|
484 |
msgid "Deleted the tag %TagName%."
|
485 |
msgstr ""
|
486 |
|
487 |
-
#: defaults.php:
|
488 |
msgid "Renamed the tag %old_name% to %new_name%."
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: defaults.php:
|
492 |
msgid "User changed tag slug"
|
493 |
msgstr ""
|
494 |
|
495 |
-
#: defaults.php:
|
496 |
msgid "Changed the slug of the tag %tag% to %new_slug%."
|
497 |
msgstr ""
|
498 |
|
499 |
-
#: defaults.php:
|
500 |
msgid "Previous slug"
|
501 |
msgstr ""
|
502 |
|
503 |
-
#: defaults.php:
|
504 |
msgid "User changed tag description"
|
505 |
msgstr ""
|
506 |
|
507 |
-
#: defaults.php:
|
508 |
msgid "Changed the description of the tag %tag%."
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: defaults.php:
|
512 |
msgid "Previous description"
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: defaults.php:
|
516 |
msgid "New description"
|
517 |
msgstr ""
|
518 |
|
519 |
-
#: defaults.php:
|
520 |
msgid "Categories"
|
521 |
msgstr ""
|
522 |
|
523 |
-
#: defaults.php:
|
524 |
msgid "User changed post category"
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: defaults.php:
|
528 |
msgid "Changed the category(ies) of the post %PostTitle% to %NewCategories%."
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: defaults.php:
|
532 |
msgid "Previous category(ies)"
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: defaults.php:
|
536 |
msgid "User created new category"
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: defaults.php:
|
540 |
msgid "Created the category %CategoryName%."
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: defaults.php:
|
544 |
msgid "User deleted category"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: defaults.php:
|
548 |
msgid "Deleted the category %CategoryName%."
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: defaults.php:
|
552 |
msgid "Changed the parent of a category"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: defaults.php:
|
556 |
msgid "Changed the parent of the category %CategoryName% to %NewParent%."
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: defaults.php:
|
560 |
msgid "User changed category name"
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: defaults.php:
|
564 |
msgid "Renamed the category %old_name% to %new_name%."
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: defaults.php:
|
568 |
msgid "User changed category slug"
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: defaults.php:
|
572 |
msgid "Changed the slug of the category %CategoryName% to %new_slug%."
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: defaults.php:
|
576 |
msgid "Custom Fields"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: defaults.php:
|
580 |
msgid "User created a custom field for a post"
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: defaults.php:
|
584 |
msgid "Created the new custom field %MetaKey% in the post %PostTitle%."
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: defaults.php:
|
588 |
msgid "Custom field value"
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: defaults.php:
|
592 |
msgid "User updated a custom field value for a post"
|
593 |
msgstr ""
|
594 |
|
595 |
-
#: defaults.php:
|
596 |
msgid "Modified the value of the custom field %MetaName% in the post %PostTitle%."
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: defaults.php:
|
600 |
msgid "Previous custom field value"
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: defaults.php:
|
604 |
msgid "New custom field value"
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: defaults.php:
|
608 |
msgid "User deleted a custom field from a post"
|
609 |
msgstr ""
|
610 |
|
611 |
-
#: defaults.php:
|
612 |
msgid "Deleted the custom field %MetaKey% from the post %PostTitle%."
|
613 |
msgstr ""
|
614 |
|
615 |
-
#: defaults.php:
|
616 |
msgid "User updated a custom field name for a post"
|
617 |
msgstr ""
|
618 |
|
619 |
-
#: defaults.php:
|
620 |
msgid "Renamed the custom field %MetaKeyOld% on post %PostTitle% to %MetaKeNew%."
|
621 |
msgstr ""
|
622 |
|
623 |
-
#: defaults.php:
|
624 |
msgid "Post"
|
625 |
msgstr ""
|
626 |
|
627 |
-
#: defaults.php:
|
628 |
msgid "Custom Fields (ACF)"
|
629 |
msgstr ""
|
630 |
|
631 |
-
#: defaults.php:
|
632 |
msgid "User added relationship to a custom field value for a post"
|
633 |
msgstr ""
|
634 |
|
635 |
-
#: defaults.php:
|
636 |
msgid "Added relationships to the custom field %MetaKey% in the post %PostTitle%."
|
637 |
msgstr ""
|
638 |
|
639 |
-
#: defaults.php:
|
640 |
msgid "New relationships"
|
641 |
msgstr ""
|
642 |
|
643 |
-
#: defaults.php:
|
644 |
msgid "User removed relationship from a custom field value for a post"
|
645 |
msgstr ""
|
646 |
|
647 |
-
#: defaults.php:
|
648 |
msgid "Removed relationships from the custom field %MetaKey% in the post %PostTitle%."
|
649 |
msgstr ""
|
650 |
|
651 |
-
#: defaults.php:
|
652 |
msgid "Removed relationships"
|
653 |
msgstr ""
|
654 |
|
655 |
-
#: defaults.php:
|
656 |
msgid "Comments"
|
657 |
msgstr ""
|
658 |
|
659 |
-
#: defaults.php:
|
660 |
msgid "User approved a comment"
|
661 |
msgstr ""
|
662 |
|
663 |
-
#: defaults.php:
|
664 |
msgid "Approved the comment posted by %Author% on the post %PostTitle%."
|
665 |
msgstr ""
|
666 |
|
667 |
-
#: defaults.php:
|
668 |
msgid "Comment ID"
|
669 |
msgstr ""
|
670 |
|
671 |
-
#: defaults.php:
|
672 |
msgid "User unapproved a comment"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: defaults.php:
|
676 |
msgid "Unapproved the comment posted by %Author% on the post %PostTitle%."
|
677 |
msgstr ""
|
678 |
|
679 |
-
#: defaults.php:
|
680 |
msgid "User replied to a comment"
|
681 |
msgstr ""
|
682 |
|
683 |
-
#: defaults.php:
|
684 |
msgid "Replied to the comment posted by %Author% on the post %PostTitle%."
|
685 |
msgstr ""
|
686 |
|
687 |
-
#: defaults.php:
|
688 |
msgid "User edited a comment"
|
689 |
msgstr ""
|
690 |
|
691 |
-
#: defaults.php:
|
692 |
msgid "Edited the comment posted by %Author% on the post %PostTitle%."
|
693 |
msgstr ""
|
694 |
|
695 |
-
#: defaults.php:
|
696 |
msgid "User marked a comment as Spam"
|
697 |
msgstr ""
|
698 |
|
699 |
-
#: defaults.php:
|
700 |
msgid "Marked the comment posted by %Author% on the post %PostTitle% as spam."
|
701 |
msgstr ""
|
702 |
|
703 |
-
#: defaults.php:
|
704 |
msgid "User marked a comment as Not Spam"
|
705 |
msgstr ""
|
706 |
|
707 |
-
#: defaults.php:
|
708 |
msgid "Marked the comment posted by %Author% on the post %PostTitle% as not spam."
|
709 |
msgstr ""
|
710 |
|
711 |
-
#: defaults.php:
|
712 |
msgid "User moved a comment to trash"
|
713 |
msgstr ""
|
714 |
|
715 |
-
#: defaults.php:
|
716 |
msgid "Moved the comment posted by %Author% on the post %PostTitle% to trash."
|
717 |
msgstr ""
|
718 |
|
719 |
-
#: defaults.php:
|
720 |
msgid "User restored a comment from the trash"
|
721 |
msgstr ""
|
722 |
|
723 |
-
#: defaults.php:
|
724 |
msgid "Restored the comment posted by %Author% on the post %PostTitle% from trash."
|
725 |
msgstr ""
|
726 |
|
727 |
-
#: defaults.php:
|
728 |
msgid "User permanently deleted a comment"
|
729 |
msgstr ""
|
730 |
|
731 |
-
#: defaults.php:
|
732 |
msgid "Permanently deleted the comment posted by %Author% on the post %PostTitle%."
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: defaults.php:
|
736 |
msgid "User posted a comment"
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: defaults.php:
|
740 |
msgid "Posted a comment on the post %PostTitle%."
|
741 |
msgstr ""
|
742 |
|
743 |
-
#: defaults.php:
|
744 |
msgid "Visitor posted a comment"
|
745 |
msgstr ""
|
746 |
|
747 |
-
#: defaults.php:
|
748 |
msgid "Widgets"
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: defaults.php:
|
752 |
msgid "User added a new widget"
|
753 |
msgstr ""
|
754 |
|
755 |
-
#: defaults.php:
|
756 |
msgid "Added a new %WidgetName% widget in %Sidebar%."
|
757 |
msgstr ""
|
758 |
|
759 |
-
#: defaults.php:
|
760 |
msgid "User modified a widget"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: defaults.php:
|
764 |
msgid "Modified the %WidgetName% widget in %Sidebar%."
|
765 |
msgstr ""
|
766 |
|
767 |
-
#: defaults.php:
|
768 |
msgid "User deleted widget"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: defaults.php:
|
772 |
msgid "Deleted the %WidgetName% widget from %Sidebar%."
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: defaults.php:
|
776 |
msgid "User moved widget"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: defaults.php:
|
780 |
msgid "Moved the %WidgetName% widget."
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: defaults.php:
|
784 |
msgid "From"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: defaults.php:
|
788 |
msgid "To"
|
789 |
msgstr ""
|
790 |
|
791 |
-
#: defaults.php:
|
792 |
msgid "User changed widget position"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: defaults.php:
|
796 |
msgid "Changed the position of the %WidgetName% widget in %Sidebar%."
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: defaults.php:
|
800 |
msgid "Menus"
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: defaults.php:
|
804 |
msgid "User created new menu"
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: defaults.php:
|
808 |
msgid "New menu called %MenuName%."
|
809 |
msgstr ""
|
810 |
|
811 |
-
#: defaults.php:
|
812 |
msgid "User added content to a menu"
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: defaults.php:
|
816 |
msgid "Added the item %ContentName% to the menu %MenuName%."
|
817 |
msgstr ""
|
818 |
|
819 |
-
#: defaults.php:
|
820 |
msgid "Item type"
|
821 |
msgstr ""
|
822 |
|
823 |
-
#: defaults.php:
|
824 |
msgid "User removed content from a menu"
|
825 |
msgstr ""
|
826 |
|
827 |
-
#: defaults.php:
|
828 |
msgid "Removed the item %ContentName% from the menu %MenuName%."
|
829 |
msgstr ""
|
830 |
|
831 |
-
#: defaults.php:
|
832 |
msgid "User deleted menu"
|
833 |
msgstr ""
|
834 |
|
835 |
-
#: defaults.php:
|
836 |
msgid "Deleted the menu %MenuName%."
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: defaults.php:
|
840 |
msgid "User changed menu setting"
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: defaults.php:
|
844 |
msgid "The setting %MenuSetting% in the menu %MenuName%."
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: defaults.php:
|
848 |
msgid "User modified content in a menu"
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: defaults.php:
|
852 |
msgid "Modified the item %ContentName% in the menu %MenuName%."
|
853 |
msgstr ""
|
854 |
|
855 |
-
#: defaults.php:
|
856 |
msgid "User changed name of a menu"
|
857 |
msgstr ""
|
858 |
|
859 |
-
#: defaults.php:
|
860 |
msgid "Renamed the menu %OldMenuName% to %MenuName%."
|
861 |
msgstr ""
|
862 |
|
863 |
-
#: defaults.php:
|
864 |
msgid "User changed order of the objects in a menu"
|
865 |
msgstr ""
|
866 |
|
867 |
-
#: defaults.php:
|
868 |
msgid "Changed the order of the items in the menu %MenuName%."
|
869 |
msgstr ""
|
870 |
|
871 |
-
#: defaults.php:
|
872 |
msgid "User moved objects as a sub-item"
|
873 |
msgstr ""
|
874 |
|
875 |
-
#: defaults.php:
|
876 |
msgid "Moved items as sub-items in the menu %MenuName%."
|
877 |
msgstr ""
|
878 |
|
879 |
-
#: defaults.php:
|
880 |
msgid "Moved item"
|
881 |
msgstr ""
|
882 |
|
883 |
-
#: defaults.php:
|
884 |
msgid "as a sub-item of"
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: defaults.php:
|
888 |
msgid "Custom Post Types"
|
889 |
msgstr ""
|
890 |
|
891 |
-
#: defaults.php:
|
892 |
msgid "User modified a draft blog post"
|
893 |
msgstr ""
|
894 |
|
895 |
-
#: defaults.php:
|
896 |
msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
|
897 |
msgstr ""
|
898 |
|
899 |
-
#: defaults.php:
|
900 |
msgid "User created a new post with custom post type and saved it as draft"
|
901 |
msgstr ""
|
902 |
|
903 |
-
#: defaults.php:
|
904 |
msgid "Created a new custom post called %PostTitle% of type %PostType%. %EditorLinkPost%."
|
905 |
msgstr ""
|
906 |
|
907 |
-
#: defaults.php:
|
908 |
msgid "User published a post with custom post type"
|
909 |
msgstr ""
|
910 |
|
911 |
-
#: defaults.php:
|
912 |
msgid "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%."
|
913 |
msgstr ""
|
914 |
|
915 |
-
#: defaults.php:
|
916 |
msgid "User modified a post with custom post type"
|
917 |
msgstr ""
|
918 |
|
919 |
-
#: defaults.php:
|
920 |
msgid "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%."
|
921 |
msgstr ""
|
922 |
|
923 |
-
#: defaults.php:
|
924 |
msgid "User modified a draft post with custom post type"
|
925 |
msgstr ""
|
926 |
|
927 |
-
#: defaults.php:
|
928 |
msgid "Modified the draft custom post %PostTitle% of type is %PostType%. %EditorLinkPost%."
|
929 |
msgstr ""
|
930 |
|
931 |
-
#: defaults.php:
|
932 |
msgid "User permanently deleted post with custom post type"
|
933 |
msgstr ""
|
934 |
|
935 |
-
#: defaults.php:
|
936 |
msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
|
937 |
msgstr ""
|
938 |
|
939 |
-
#: defaults.php:
|
940 |
msgid "User moved post with custom post type to trash"
|
941 |
msgstr ""
|
942 |
|
943 |
-
#: defaults.php:
|
944 |
msgid "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was %PostUrl%."
|
945 |
msgstr ""
|
946 |
|
947 |
-
#: defaults.php:
|
948 |
msgid "User restored post with custom post type from trash"
|
949 |
msgstr ""
|
950 |
|
951 |
-
#: defaults.php:
|
952 |
msgid "The custom post %PostTitle% of type %PostType% has been restored from trash. %EditorLinkPost%."
|
953 |
msgstr ""
|
954 |
|
955 |
-
#: defaults.php:
|
956 |
msgid "User changed the category of a post with custom post type"
|
957 |
msgstr ""
|
958 |
|
959 |
-
#: defaults.php:
|
960 |
msgid "Changed the category(ies) of the custom post %PostTitle% of type %PostType% from %OldCategories% to %NewCategories%. %EditorLinkPost%."
|
961 |
msgstr ""
|
962 |
|
963 |
-
#: defaults.php:
|
964 |
msgid "User changed the URL of a post with custom post type"
|
965 |
msgstr ""
|
966 |
|
967 |
-
#: defaults.php:
|
968 |
msgid "Changed the URL of the custom post %PostTitle% of type %PostType% from %OldUrl% to %NewUrl%. %EditorLinkPost%."
|
969 |
msgstr ""
|
970 |
|
971 |
-
#: defaults.php:
|
972 |
msgid "User changed the author or post with custom post type"
|
973 |
msgstr ""
|
974 |
|
975 |
-
#: defaults.php:
|
976 |
msgid "Changed the author of custom post %PostTitle% of type %PostType% from %OldAuthor% to %NewAuthor%. %EditorLinkPost%."
|
977 |
msgstr ""
|
978 |
|
979 |
-
#: defaults.php:
|
980 |
msgid "User changed the status of post with custom post type"
|
981 |
msgstr ""
|
982 |
|
983 |
-
#: defaults.php:
|
984 |
msgid "Changed the status of custom post %PostTitle% of type %PostType% from %OldStatus% to %NewStatus%. %EditorLinkPost%."
|
985 |
msgstr ""
|
986 |
|
987 |
-
#: defaults.php:
|
988 |
msgid "User changed the visibility of a post with custom post type"
|
989 |
msgstr ""
|
990 |
|
991 |
-
#: defaults.php:
|
992 |
msgid "Changed the visibility of the custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
|
993 |
msgstr ""
|
994 |
|
995 |
-
#: defaults.php:
|
996 |
msgid "User changed the date of post with custom post type"
|
997 |
msgstr ""
|
998 |
|
999 |
-
#: defaults.php:
|
1000 |
msgid "Changed the date of the custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%. %EditorLinkPost%."
|
1001 |
msgstr ""
|
1002 |
|
1003 |
-
#: defaults.php:
|
1004 |
msgid "User created a custom field for a custom post type"
|
1005 |
msgstr ""
|
1006 |
|
1007 |
-
#: defaults.php:
|
1008 |
msgid "Created a new custom field %MetaKey% with value %MetaValue% in custom post %PostTitle% of type %PostType%. %EditorLinkPost%.<br>%MetaLink%."
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: defaults.php:
|
1012 |
msgid "User updated a custom field for a custom post type"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
-
#: defaults.php:
|
1016 |
msgid "Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
|
1017 |
msgstr ""
|
1018 |
|
1019 |
-
#: defaults.php:
|
1020 |
msgid "User deleted a custom field from a custom post type"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: defaults.php:
|
1024 |
msgid "Deleted the custom field %MetaKey% with id %MetaID% from custom post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
|
1025 |
msgstr ""
|
1026 |
|
1027 |
-
#: defaults.php:
|
1028 |
msgid "User updated a custom field name for a custom post type"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
-
#: defaults.php:
|
1032 |
msgid "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
|
1033 |
msgstr ""
|
1034 |
|
1035 |
-
#: defaults.php:
|
1036 |
msgid "User modified content for a published custom post type"
|
1037 |
msgstr ""
|
1038 |
|
1039 |
-
#: defaults.php:
|
1040 |
msgid "Modified the content of the published custom post type %PostTitle%. Post URL is %PostUrl%. %EditorLinkPost%."
|
1041 |
msgstr ""
|
1042 |
|
1043 |
-
#: defaults.php:
|
1044 |
msgid "User modified content for a draft post"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
-
#: defaults.php:
|
1048 |
msgid "Modified the content of the draft post %PostTitle%.%RevisionLink% %EditorLinkPost%."
|
1049 |
msgstr ""
|
1050 |
|
1051 |
-
#: defaults.php:
|
1052 |
msgid "User modified content for a draft custom post type"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: defaults.php:
|
1056 |
msgid "Modified the content of the draft custom post type %PostTitle%.%EditorLinkPost%."
|
1057 |
msgstr ""
|
1058 |
|
1059 |
-
#: defaults.php:
|
1060 |
msgid "User modified content of a post"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
-
#: defaults.php:
|
1064 |
msgid "Modified the content of post %PostTitle% which is submitted for review.%RevisionLink% %EditorLinkPost%."
|
1065 |
msgstr ""
|
1066 |
|
1067 |
-
#: defaults.php:
|
1068 |
msgid "User scheduled a custom post type"
|
1069 |
msgstr ""
|
1070 |
|
1071 |
-
#: defaults.php:
|
1072 |
msgid "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. %EditorLinkPost%."
|
1073 |
msgstr ""
|
1074 |
|
1075 |
-
#: defaults.php:
|
1076 |
msgid "User changed title of a custom post type"
|
1077 |
msgstr ""
|
1078 |
|
1079 |
-
#: defaults.php:
|
1080 |
msgid "Changed the title of the custom post %OldTitle% to %NewTitle%. %EditorLinkPost%."
|
1081 |
msgstr ""
|
1082 |
|
1083 |
-
#: defaults.php:
|
1084 |
msgid "User opened a custom post type in the editor"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: defaults.php:
|
1088 |
msgid "Opened the custom post %PostTitle% of type %PostType% in the editor. View the post: %EditorLinkPost%."
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: defaults.php:
|
1092 |
msgid "User viewed a custom post type"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: defaults.php:
|
1096 |
msgid "Viewed the custom post %PostTitle% of type %PostType%. View the post: %PostUrl%."
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: defaults.php:
|
1100 |
msgid "A plugin created a custom post"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: defaults.php:
|
1104 |
msgid "A plugin automatically created the following custom post: %PostTitle%."
|
1105 |
msgstr ""
|
1106 |
|
1107 |
-
#: defaults.php:
|
1108 |
msgid "A plugin deleted a custom post"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
-
#: defaults.php:
|
1112 |
msgid "A plugin automatically deleted the following custom post: %PostTitle%."
|
1113 |
msgstr ""
|
1114 |
|
1115 |
-
#: defaults.php:
|
1116 |
msgid "A plugin modified a custom post"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: defaults.php:
|
1120 |
msgid "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: defaults.php:
|
1124 |
msgid "Pages"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: defaults.php:
|
1128 |
msgid "User created a new WordPress page and saved it as draft"
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: defaults.php:
|
1132 |
msgid "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage%."
|
1133 |
msgstr ""
|
1134 |
|
1135 |
-
#: defaults.php:
|
1136 |
msgid "User published a WordPress page"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: defaults.php:
|
1140 |
msgid "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
|
1141 |
msgstr ""
|
1142 |
|
1143 |
-
#: defaults.php:
|
1144 |
msgid "User modified a published WordPress page"
|
1145 |
msgstr ""
|
1146 |
|
1147 |
-
#: defaults.php:
|
1148 |
msgid "Modified the published page %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
|
1149 |
msgstr ""
|
1150 |
|
1151 |
-
#: defaults.php:
|
1152 |
msgid "User modified a draft WordPress page"
|
1153 |
msgstr ""
|
1154 |
|
1155 |
-
#: defaults.php:
|
1156 |
msgid "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: defaults.php:
|
1160 |
msgid "User permanently deleted a page from the trash"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
-
#: defaults.php:
|
1164 |
msgid "Permanently deleted the page %PostTitle%."
|
1165 |
msgstr ""
|
1166 |
|
1167 |
-
#: defaults.php:
|
1168 |
msgid "User moved WordPress page to the trash"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#: defaults.php:
|
1172 |
msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: defaults.php:
|
1176 |
msgid "User restored a WordPress page from trash"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
-
#: defaults.php:
|
1180 |
msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
-
#: defaults.php:
|
1184 |
msgid "User changed page URL"
|
1185 |
msgstr ""
|
1186 |
|
1187 |
-
#: defaults.php:
|
1188 |
msgid "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPage%."
|
1189 |
msgstr ""
|
1190 |
|
1191 |
-
#: defaults.php:
|
1192 |
msgid "User changed page author"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
-
#: defaults.php:
|
1196 |
msgid "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. %EditorLinkPage%."
|
1197 |
msgstr ""
|
1198 |
|
1199 |
-
#: defaults.php:
|
1200 |
msgid "User changed page status"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
-
#: defaults.php:
|
1204 |
msgid "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. %EditorLinkPage%."
|
1205 |
msgstr ""
|
1206 |
|
1207 |
-
#: defaults.php:
|
1208 |
msgid "User changed the visibility of a page post"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
-
#: defaults.php:
|
1212 |
msgid "Changed the visibility of the page %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPage%."
|
1213 |
msgstr ""
|
1214 |
|
1215 |
-
#: defaults.php:
|
1216 |
msgid "User changed the date of a page post"
|
1217 |
msgstr ""
|
1218 |
|
1219 |
-
#: defaults.php:
|
1220 |
msgid "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPage%."
|
1221 |
msgstr ""
|
1222 |
|
1223 |
-
#: defaults.php:
|
1224 |
msgid "User created a custom field for a page"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
-
#: defaults.php:
|
1228 |
msgid "Created a new custom field called %MetaKey% with value %MetaValue% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
|
1229 |
msgstr ""
|
1230 |
|
1231 |
-
#: defaults.php:
|
1232 |
msgid "User updated a custom field value for a page"
|
1233 |
msgstr ""
|
1234 |
|
1235 |
-
#: defaults.php:
|
1236 |
msgid "Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
|
1237 |
msgstr ""
|
1238 |
|
1239 |
-
#: defaults.php:
|
1240 |
msgid "User deleted a custom field from a page"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
-
#: defaults.php:
|
1244 |
msgid "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% %EditorLinkPage%<br>%MetaLink%."
|
1245 |
msgstr ""
|
1246 |
|
1247 |
-
#: defaults.php:
|
1248 |
msgid "User updated a custom field name for a page"
|
1249 |
msgstr ""
|
1250 |
|
1251 |
-
#: defaults.php:
|
1252 |
msgid "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
|
1253 |
msgstr ""
|
1254 |
|
1255 |
-
#: defaults.php:
|
1256 |
msgid "User modified content for a published page"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
-
#: defaults.php:
|
1260 |
msgid "Modified the content of the published page %PostTitle%. Page URL is %PostUrl%. %RevisionLink% %EditorLinkPage%."
|
1261 |
msgstr ""
|
1262 |
|
1263 |
-
#: defaults.php:
|
1264 |
msgid "User modified content for a draft page"
|
1265 |
msgstr ""
|
1266 |
|
1267 |
-
#: defaults.php:
|
1268 |
msgid "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage%."
|
1269 |
msgstr ""
|
1270 |
|
1271 |
-
#: defaults.php:
|
1272 |
msgid "User scheduled a page"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
-
#: defaults.php:
|
1276 |
msgid "Scheduled the page %PostTitle% to be published %PublishingDate%. %EditorLinkPage%."
|
1277 |
msgstr ""
|
1278 |
|
1279 |
-
#: defaults.php:
|
1280 |
msgid "User changed title of a page"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
-
#: defaults.php:
|
1284 |
msgid "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
|
1285 |
msgstr ""
|
1286 |
|
1287 |
-
#: defaults.php:
|
1288 |
msgid "User opened a page in the editor"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
-
#: defaults.php:
|
1292 |
msgid "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
|
1293 |
msgstr ""
|
1294 |
|
1295 |
-
#: defaults.php:
|
1296 |
msgid "User viewed a page"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
-
#: defaults.php:
|
1300 |
msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
|
1301 |
msgstr ""
|
1302 |
|
1303 |
-
#: defaults.php:
|
1304 |
msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
-
#: defaults.php:
|
1308 |
msgid "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
|
1309 |
msgstr ""
|
1310 |
|
1311 |
-
#: defaults.php:
|
1312 |
msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
-
#: defaults.php:
|
1316 |
msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
|
1317 |
msgstr ""
|
1318 |
|
1319 |
-
#: defaults.php:
|
1320 |
msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
|
1321 |
msgstr ""
|
1322 |
|
1323 |
-
#: defaults.php:
|
1324 |
msgid "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
|
1325 |
msgstr ""
|
1326 |
|
1327 |
-
#: defaults.php:
|
1328 |
msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
|
1329 |
msgstr ""
|
1330 |
|
1331 |
-
#: defaults.php:
|
1332 |
msgid "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
|
1333 |
msgstr ""
|
1334 |
|
1335 |
-
#: defaults.php:
|
1336 |
msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#: defaults.php:
|
1340 |
msgid "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#: defaults.php:
|
1344 |
msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: defaults.php:
|
1348 |
msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: defaults.php:
|
1352 |
msgid "A plugin created a page"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: defaults.php:
|
1356 |
msgid "A plugin automatically created the following page: %PostTitle%."
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: defaults.php:
|
1360 |
msgid "A plugin deleted a page"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#: defaults.php:
|
1364 |
msgid "A plugin automatically deleted the following page: %PostTitle%."
|
1365 |
msgstr ""
|
1366 |
|
1367 |
-
#: defaults.php:
|
1368 |
msgid "A plugin modified a page"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
-
#: defaults.php:
|
1372 |
msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#: defaults.php:
|
1376 |
msgid "User Accounts"
|
1377 |
msgstr ""
|
1378 |
|
1379 |
-
#: defaults.php:
|
1380 |
msgid "User Profiles"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
-
#: defaults.php:
|
1384 |
msgid "New user was created on WordPress"
|
1385 |
msgstr ""
|
1386 |
|
1387 |
-
#: defaults.php:
|
1388 |
msgid "A new user %NewUserData->Username% is created via registration."
|
1389 |
msgstr ""
|
1390 |
|
1391 |
-
#: defaults.php:
|
1392 |
msgid "User"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
-
#: defaults.php:
|
1396 |
msgid "User created another WordPress user"
|
1397 |
msgstr ""
|
1398 |
|
1399 |
-
#: defaults.php:
|
1400 |
msgid "Created the new user: %NewUserData->Username%."
|
1401 |
msgstr ""
|
1402 |
|
1403 |
-
#: defaults.php:
|
1404 |
msgid "First name"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
-
#: defaults.php:
|
1408 |
msgid "Last name"
|
1409 |
msgstr ""
|
1410 |
|
1411 |
-
#: defaults.php:
|
1412 |
msgid "The role of a user was changed by another WordPress user"
|
1413 |
msgstr ""
|
1414 |
|
1415 |
-
#: defaults.php:
|
1416 |
msgid "Changed the role of user %TargetUsername% to %NewRole%."
|
1417 |
msgstr ""
|
1418 |
|
1419 |
-
#: defaults.php:
|
1420 |
msgid "Previous role"
|
1421 |
msgstr ""
|
1422 |
|
1423 |
-
#: defaults.php:
|
1424 |
msgid "User has changed his or her password"
|
1425 |
msgstr ""
|
1426 |
|
1427 |
-
#: defaults.php:
|
1428 |
msgid "Changed the password."
|
1429 |
msgstr ""
|
1430 |
|
1431 |
-
#: defaults.php:
|
1432 |
msgid "User changed another user's password"
|
1433 |
msgstr ""
|
1434 |
|
1435 |
-
#: defaults.php:
|
1436 |
msgid "Changed the password of the user %TargetUserData->Username%."
|
1437 |
msgstr ""
|
1438 |
|
1439 |
-
#: defaults.php:
|
1440 |
msgid "User changed his or her email address"
|
1441 |
msgstr ""
|
1442 |
|
1443 |
-
#: defaults.php:
|
1444 |
msgid "Changed the email address to %NewEmail%."
|
1445 |
msgstr ""
|
1446 |
|
1447 |
-
#: defaults.php:
|
1448 |
msgid "Previous email address"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
-
#: defaults.php:
|
1452 |
msgid "User changed another user's email address"
|
1453 |
msgstr ""
|
1454 |
|
1455 |
-
#: defaults.php:
|
1456 |
msgid "Changed the email address of the user %TargetUsername% to %NewEmail%."
|
1457 |
msgstr ""
|
1458 |
|
1459 |
-
#: defaults.php:
|
1460 |
msgid "User was deleted by another user"
|
1461 |
msgstr ""
|
1462 |
|
1463 |
-
#: defaults.php:
|
1464 |
msgid "Deleted the user %TargetUserData->Username%."
|
1465 |
msgstr ""
|
1466 |
|
1467 |
-
#: defaults.php:
|
1468 |
msgid "User opened the profile page of another user"
|
1469 |
msgstr ""
|
1470 |
|
1471 |
-
#: defaults.php:
|
1472 |
msgid "Opened the profile page of user %TargetUsername%."
|
1473 |
msgstr ""
|
1474 |
|
1475 |
-
#: defaults.php:
|
1476 |
msgid "User updated a custom field value for a user"
|
1477 |
msgstr ""
|
1478 |
|
1479 |
-
#: defaults.php:
|
1480 |
msgid "Changed the value of the custom field %custom_field_name% in the user profile %TargetUsername%."
|
1481 |
msgstr ""
|
1482 |
|
1483 |
-
#: defaults.php:
|
1484 |
msgid "Previous value"
|
1485 |
msgstr ""
|
1486 |
|
1487 |
-
#: defaults.php:
|
1488 |
msgid "New value"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
-
#: defaults.php:
|
1492 |
msgid "User created a custom field value for a user"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
-
#: defaults.php:
|
1496 |
msgid "Created the custom field %custom_field_name% in the user profile %TargetUsername%."
|
1497 |
msgstr ""
|
1498 |
|
1499 |
-
#: defaults.php:
|
1500 |
msgid "User changed first name for a user"
|
1501 |
msgstr ""
|
1502 |
|
1503 |
-
#: defaults.php:
|
1504 |
msgid "Changed the first name of the user %TargetUsername% to %new_firstname%."
|
1505 |
msgstr ""
|
1506 |
|
1507 |
-
#: defaults.php:
|
1508 |
msgid "Previous name"
|
1509 |
msgstr ""
|
1510 |
|
1511 |
-
#: defaults.php:
|
1512 |
msgid "User changed last name for a user"
|
1513 |
msgstr ""
|
1514 |
|
1515 |
-
#: defaults.php:
|
1516 |
msgid "Changed the last name of the user %TargetUsername% to %new_lastname%."
|
1517 |
msgstr ""
|
1518 |
|
1519 |
-
#: defaults.php:
|
1520 |
msgid "Previous last name"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
-
#: defaults.php:
|
1524 |
msgid "User changed nickname for a user"
|
1525 |
msgstr ""
|
1526 |
|
1527 |
-
#: defaults.php:
|
1528 |
msgid "Changed the nickname of the user %TargetUsername% to %new_nickname%."
|
1529 |
msgstr ""
|
1530 |
|
1531 |
-
#: defaults.php:
|
1532 |
msgid "Previous nickname"
|
1533 |
msgstr ""
|
1534 |
|
1535 |
-
#: defaults.php:
|
1536 |
msgid "User changed the display name for a user"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
-
#: defaults.php:
|
1540 |
msgid "Changed the display name of the user %TargetUsername% to %new_displayname%."
|
1541 |
msgstr ""
|
1542 |
|
1543 |
-
#: defaults.php:
|
1544 |
msgid "Previous display name"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
-
#: defaults.php:
|
1548 |
msgid "User created an application password"
|
1549 |
msgstr ""
|
1550 |
|
1551 |
-
#: defaults.php:
|
1552 |
msgid "The application password %friendly_name%."
|
1553 |
msgstr ""
|
1554 |
|
1555 |
-
#: defaults.php:
|
1556 |
msgid "The application password %friendly_name% for the user %login%."
|
1557 |
msgstr ""
|
1558 |
|
1559 |
-
#: defaults.php:
|
1560 |
msgid "User revoked all application passwords"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
-
#: defaults.php:
|
1564 |
msgid "All application passwords."
|
1565 |
msgstr ""
|
1566 |
|
1567 |
-
#: defaults.php:
|
1568 |
msgid "User revoked all application passwords for a user"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
-
#: defaults.php:
|
1572 |
msgid "All application passwords from the user %login%."
|
1573 |
msgstr ""
|
1574 |
|
1575 |
-
#: defaults.php:
|
1576 |
msgid "Admin sent a password reset request to a user"
|
1577 |
msgstr ""
|
1578 |
|
1579 |
-
#: defaults.php:
|
1580 |
msgid "Sent a password reset request to the user %login%."
|
1581 |
msgstr ""
|
1582 |
|
1583 |
-
#: defaults.php:
|
1584 |
msgid "Multisite User Profiles"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
-
#: defaults.php:
|
1588 |
msgid "User granted Super Admin privileges"
|
1589 |
msgstr ""
|
1590 |
|
1591 |
-
#: defaults.php:
|
1592 |
msgid "Granted Super Admin privileges to the user %TargetUsername%."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: defaults.php:
|
1596 |
msgid "User revoked from Super Admin privileges"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
-
#: defaults.php:
|
1600 |
msgid "Revoked Super Admin privileges from %TargetUsername%."
|
1601 |
msgstr ""
|
1602 |
|
1603 |
-
#: defaults.php:
|
1604 |
msgid "Existing user added to a site"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
-
#: defaults.php:
|
1608 |
msgid "Added user %TargetUsername% to the site %SiteName%."
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: defaults.php:
|
1612 |
msgid "User removed from site"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
-
#: defaults.php:
|
1616 |
msgid "Removed user %TargetUsername% from the site %SiteName%"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
-
#: defaults.php:
|
1620 |
msgid "Site role"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: defaults.php:
|
1624 |
msgid "New network user created"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: defaults.php:
|
1628 |
msgid "Created the new network user %NewUserData->Username%."
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: defaults.php:
|
1632 |
msgid "Plugins & Themes"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: defaults.php:
|
1636 |
msgid "Plugins"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
-
#: defaults.php:
|
1640 |
msgid "User installed a plugin"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
-
#: defaults.php:
|
1644 |
msgid "Installed the plugin %Plugin->Name%."
|
1645 |
msgstr ""
|
1646 |
|
1647 |
-
#: defaults.php:
|
1648 |
msgid "Version"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: defaults.php:
|
1652 |
msgid "Install location"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: defaults.php:
|
1656 |
msgid "User activated a WordPress plugin"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: defaults.php:
|
1660 |
msgid "Activated the plugin %PluginData->Name%."
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: defaults.php:
|
1664 |
msgid "User deactivated a WordPress plugin"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
-
#: defaults.php:
|
1668 |
msgid "Deactivated the plugin %PluginData->Name%."
|
1669 |
msgstr ""
|
1670 |
|
1671 |
-
#: defaults.php:
|
1672 |
msgid "User uninstalled a plugin"
|
1673 |
msgstr ""
|
1674 |
|
1675 |
-
#: defaults.php:
|
1676 |
msgid "Uninstalled the plugin %PluginData->Name%."
|
1677 |
msgstr ""
|
1678 |
|
1679 |
-
#: defaults.php:
|
1680 |
msgid "User upgraded a plugin"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
-
#: defaults.php:
|
1684 |
msgid "Updated the plugin %PluginData->Name%."
|
1685 |
msgstr ""
|
1686 |
|
1687 |
-
#: defaults.php:
|
1688 |
msgid "Updated version"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
-
#: defaults.php:
|
1692 |
msgid "Plugin created table"
|
1693 |
msgstr ""
|
1694 |
|
1695 |
-
#: defaults.php:
|
1696 |
msgid "The plugin %Plugin->Name% created this table in the database."
|
1697 |
msgstr ""
|
1698 |
|
1699 |
-
#: defaults.php:
|
1700 |
msgid "Table"
|
1701 |
msgstr ""
|
1702 |
|
1703 |
-
#: defaults.php:
|
1704 |
msgid "Plugin modified table structure"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
-
#: defaults.php:
|
1708 |
msgid "The plugin %Plugin->Name% modified the structure of a database table."
|
1709 |
msgstr ""
|
1710 |
|
1711 |
-
#: defaults.php:
|
1712 |
msgid "Plugin deleted table"
|
1713 |
msgstr ""
|
1714 |
|
1715 |
-
#: defaults.php:
|
1716 |
msgid "The plugin %Plugin->Name% deleted this table from the database."
|
1717 |
msgstr ""
|
1718 |
|
1719 |
-
#: defaults.php:
|
1720 |
msgid "A plugin created a post"
|
1721 |
msgstr ""
|
1722 |
|
1723 |
-
#: defaults.php:
|
1724 |
msgid "The plugin created the post %PostTitle%."
|
1725 |
msgstr ""
|
1726 |
|
1727 |
-
#: defaults.php:
|
1728 |
msgid "Plugin"
|
1729 |
msgstr ""
|
1730 |
|
1731 |
-
#: defaults.php:
|
1732 |
msgid "A plugin deleted a post"
|
1733 |
msgstr ""
|
1734 |
|
1735 |
-
#: defaults.php:
|
1736 |
msgid "A plugin deleted the post %PostTitle%."
|
1737 |
msgstr ""
|
1738 |
|
1739 |
-
#: defaults.php:
|
1740 |
msgid "User changed a file using the plugin editor"
|
1741 |
msgstr ""
|
1742 |
|
1743 |
-
#: defaults.php:
|
1744 |
msgid "Modified the file %File% with the plugin editor."
|
1745 |
msgstr ""
|
1746 |
|
1747 |
-
#: defaults.php:
|
1748 |
msgid "Themes"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
-
#: defaults.php:
|
1752 |
msgid "User installed a theme"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
-
#: defaults.php:
|
1756 |
msgid "Installed the theme %Theme->Name%."
|
1757 |
msgstr ""
|
1758 |
|
1759 |
-
#: defaults.php:
|
1760 |
msgid "User activated a theme"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
-
#: defaults.php:
|
1764 |
msgid "Activated the theme %Theme->Name%."
|
1765 |
msgstr ""
|
1766 |
|
1767 |
-
#: defaults.php:
|
1768 |
msgid "User uninstalled a theme"
|
1769 |
msgstr ""
|
1770 |
|
1771 |
-
#: defaults.php:
|
1772 |
msgid "Deleted the theme %Theme->Name%."
|
1773 |
msgstr ""
|
1774 |
|
1775 |
-
#: defaults.php:
|
1776 |
msgid "Theme created tables"
|
1777 |
msgstr ""
|
1778 |
|
1779 |
-
#: defaults.php:
|
1780 |
msgid "The theme %Theme->Name% created this tables in the database."
|
1781 |
msgstr ""
|
1782 |
|
1783 |
-
#: defaults.php:
|
1784 |
msgid "Theme modified tables structure"
|
1785 |
msgstr ""
|
1786 |
|
1787 |
-
#: defaults.php:
|
1788 |
msgid "The theme %Theme->Name% modified the structure of this database table"
|
1789 |
msgstr ""
|
1790 |
|
1791 |
-
#: defaults.php:
|
1792 |
msgid "Theme deleted tables"
|
1793 |
msgstr ""
|
1794 |
|
1795 |
-
#: defaults.php:
|
1796 |
msgid "The theme %Theme->Name% deleted this table from the database."
|
1797 |
msgstr ""
|
1798 |
|
1799 |
-
#: defaults.php:
|
1800 |
msgid "Tables"
|
1801 |
msgstr ""
|
1802 |
|
1803 |
-
#: defaults.php:
|
1804 |
msgid "User updated a theme"
|
1805 |
msgstr ""
|
1806 |
|
1807 |
-
#: defaults.php:
|
1808 |
msgid "Updated the theme %Theme->Name%."
|
1809 |
msgstr ""
|
1810 |
|
1811 |
-
#: defaults.php:
|
1812 |
msgid "New version"
|
1813 |
msgstr ""
|
1814 |
|
1815 |
-
#: defaults.php:
|
1816 |
msgid "User changed a file using the theme editor"
|
1817 |
msgstr ""
|
1818 |
|
1819 |
-
#: defaults.php:
|
1820 |
msgid "Modified the file %Theme%/%File% with the theme editor."
|
1821 |
msgstr ""
|
1822 |
|
1823 |
-
#: defaults.php:
|
1824 |
msgid "Themes on Multisite"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
-
#: defaults.php:
|
1828 |
msgid "Activated theme on network"
|
1829 |
msgstr ""
|
1830 |
|
1831 |
-
#: defaults.php:
|
1832 |
msgid "Network activated the theme %Theme->Name%."
|
1833 |
msgstr ""
|
1834 |
|
1835 |
-
#: defaults.php:
|
1836 |
msgid "Deactivated theme from network"
|
1837 |
msgstr ""
|
1838 |
|
1839 |
-
#: defaults.php:
|
1840 |
msgid "Network deactivated the theme %Theme->Name%."
|
1841 |
msgstr ""
|
1842 |
|
1843 |
-
#: defaults.php:
|
1844 |
msgid "Database Events"
|
1845 |
msgstr ""
|
1846 |
|
1847 |
-
#: defaults.php:
|
1848 |
msgid "Unknown component created tables"
|
1849 |
msgstr ""
|
1850 |
|
1851 |
-
#: defaults.php:
|
1852 |
msgid "An unknown component created these tables in the database."
|
1853 |
msgstr ""
|
1854 |
|
1855 |
-
#: defaults.php:
|
1856 |
msgid "Unknown component modified tables structure"
|
1857 |
msgstr ""
|
1858 |
|
1859 |
-
#: defaults.php:
|
1860 |
msgid "An unknown component modified the structure of these database tables."
|
1861 |
msgstr ""
|
1862 |
|
1863 |
-
#: defaults.php:
|
1864 |
msgid "Unknown component deleted tables"
|
1865 |
msgstr ""
|
1866 |
|
1867 |
-
#: defaults.php:
|
1868 |
msgid "An unknown component deleted these tables from the database."
|
1869 |
msgstr ""
|
1870 |
|
1871 |
-
#: defaults.php:
|
1872 |
msgid "WordPress created tables"
|
1873 |
msgstr ""
|
1874 |
|
1875 |
-
#: defaults.php:
|
1876 |
msgid "WordPress has created these tables in the database."
|
1877 |
msgstr ""
|
1878 |
|
1879 |
-
#: defaults.php:
|
1880 |
msgid "WordPress modified tables structure"
|
1881 |
msgstr ""
|
1882 |
|
1883 |
-
#: defaults.php:
|
1884 |
msgid "WordPress modified the structure of these database tables."
|
1885 |
msgstr ""
|
1886 |
|
1887 |
-
#: defaults.php:
|
1888 |
msgid "WordPress deleted tables"
|
1889 |
msgstr ""
|
1890 |
|
1891 |
-
#: defaults.php:
|
1892 |
msgid "WordPress deleted these tables from the database."
|
1893 |
msgstr ""
|
1894 |
|
1895 |
-
#: defaults.php:
|
1896 |
msgid "WordPress & System"
|
1897 |
msgstr ""
|
1898 |
|
1899 |
-
#: defaults.php:
|
1900 |
msgid "System"
|
1901 |
msgstr ""
|
1902 |
|
1903 |
-
#: defaults.php:
|
1904 |
msgid "Unknown Error"
|
1905 |
msgstr ""
|
1906 |
|
1907 |
-
#: defaults.php:
|
1908 |
msgid "An unexpected error has occurred."
|
1909 |
msgstr ""
|
1910 |
|
1911 |
-
#: defaults.php:
|
1912 |
msgid "PHP error"
|
1913 |
msgstr ""
|
1914 |
|
1915 |
-
#: defaults.php:
|
1916 |
msgid "%Message%."
|
1917 |
msgstr ""
|
1918 |
|
1919 |
-
#: defaults.php:
|
1920 |
msgid "PHP warning"
|
1921 |
msgstr ""
|
1922 |
|
1923 |
-
#: defaults.php:
|
1924 |
msgid "PHP notice"
|
1925 |
msgstr ""
|
1926 |
|
1927 |
-
#: defaults.php:
|
1928 |
msgid "PHP exception"
|
1929 |
msgstr ""
|
1930 |
|
1931 |
-
#: defaults.php:
|
1932 |
msgid "PHP shutdown error"
|
1933 |
msgstr ""
|
1934 |
|
1935 |
-
#: defaults.php:
|
1936 |
msgid "WordPress was updated"
|
1937 |
msgstr ""
|
1938 |
|
1939 |
-
#: defaults.php:
|
1940 |
msgid "Updated WordPress."
|
1941 |
msgstr ""
|
1942 |
|
1943 |
-
#: defaults.php:
|
1944 |
msgid "Previous version"
|
1945 |
msgstr ""
|
1946 |
|
1947 |
-
#: defaults.php:
|
1948 |
msgid "Advertising Extensions"
|
1949 |
msgstr ""
|
1950 |
|
1951 |
-
#: defaults.php:
|
1952 |
msgid "%PromoName% %PromoMessage%"
|
1953 |
msgstr ""
|
1954 |
|
1955 |
-
#: defaults.php:
|
1956 |
msgid "Activity log plugin"
|
1957 |
msgstr ""
|
1958 |
|
1959 |
-
#: defaults.php:
|
1960 |
msgid "Events automatically pruned by system"
|
1961 |
msgstr ""
|
1962 |
|
1963 |
-
#: defaults.php:
|
1964 |
msgid "System automatically deleted %EventCount% events from the activity log."
|
1965 |
msgstr ""
|
1966 |
|
1967 |
-
#: defaults.php:
|
1968 |
msgid "Reset the plugin's settings to default"
|
1969 |
msgstr ""
|
1970 |
|
1971 |
-
#: defaults.php:
|
1972 |
msgid "Reset the activity log plugin's settings to default."
|
1973 |
msgstr ""
|
1974 |
|
1975 |
-
#: defaults.php:
|
1976 |
msgid "Purged the activity log"
|
1977 |
msgstr ""
|
1978 |
|
1979 |
-
#: defaults.php:
|
1980 |
msgid "Purged the activity log."
|
1981 |
msgstr ""
|
1982 |
|
1983 |
-
#: defaults.php:
|
1984 |
msgid "Some WP Activity Log plugin settings on this site were propagated and overridden from the MainWP dashboard"
|
1985 |
msgstr ""
|
1986 |
|
1987 |
-
#: defaults.php:
|
1988 |
msgid "Some <strong>WP Activity Log</strong> plugin settings on this site were propagated and overridden from the MainWP dashboard."
|
1989 |
msgstr ""
|
1990 |
|
1991 |
-
#: defaults.php:
|
1992 |
msgid "WordPress Site Settings"
|
1993 |
msgstr ""
|
1994 |
|
1995 |
-
#: defaults.php:
|
1996 |
msgid "Option Anyone Can Register in WordPress settings changed"
|
1997 |
msgstr ""
|
1998 |
|
1999 |
-
#: defaults.php:
|
2000 |
msgid "The <strong>Membership</strong> setting <strong>Anyone can register</strong>."
|
2001 |
msgstr ""
|
2002 |
|
2003 |
-
#: defaults.php:
|
2004 |
msgid "New User Default Role changed"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
-
#: defaults.php:
|
2008 |
msgid "Changed the <strong>New user default role</strong> WordPress setting."
|
2009 |
msgstr ""
|
2010 |
|
2011 |
-
#: defaults.php:
|
2012 |
msgid "New role"
|
2013 |
msgstr ""
|
2014 |
|
2015 |
-
#: defaults.php:
|
2016 |
msgid "WordPress Administrator Notification email changed"
|
2017 |
msgstr ""
|
2018 |
|
2019 |
-
#: defaults.php:
|
2020 |
msgid "Change the <strong>Administrator email address</strong> in the WordPress settings."
|
2021 |
msgstr ""
|
2022 |
|
2023 |
-
#: defaults.php:
|
2024 |
msgid "Previous address"
|
2025 |
msgstr ""
|
2026 |
|
2027 |
-
#: defaults.php:
|
2028 |
msgid "New address"
|
2029 |
msgstr ""
|
2030 |
|
2031 |
-
#: defaults.php:
|
2032 |
msgid "User changes the WordPress Permalinks"
|
2033 |
msgstr ""
|
2034 |
|
2035 |
-
#: defaults.php:
|
2036 |
msgid "Changed the <strong>WordPress permalinks</strong>."
|
2037 |
msgstr ""
|
2038 |
|
2039 |
-
#: defaults.php:
|
2040 |
msgid "Previous permalinks"
|
2041 |
msgstr ""
|
2042 |
|
2043 |
-
#: defaults.php:
|
2044 |
msgid "New permalinks"
|
2045 |
msgstr ""
|
2046 |
|
2047 |
-
#: defaults.php:
|
2048 |
msgid "Enabled/Disabled the option Discourage search engines from indexing this site"
|
2049 |
msgstr ""
|
2050 |
|
2051 |
-
#: defaults.php:
|
2052 |
msgid "Changed the status of the WordPress setting <strong>Search engine visibility</strong> (Discourage search engines from indexing this site)"
|
2053 |
msgstr ""
|
2054 |
|
2055 |
-
#: defaults.php:
|
2056 |
msgid "Enabled/Disabled comments on all the website"
|
2057 |
msgstr ""
|
2058 |
|
2059 |
-
#: defaults.php:
|
2060 |
msgid "Changed the status of the WordPress setting <strong>Allow people to submit comments on new posts</strong>."
|
2061 |
msgstr ""
|
2062 |
|
2063 |
-
#: defaults.php:
|
2064 |
msgid "Enabled/Disabled the option Comment author must fill out name and email"
|
2065 |
msgstr ""
|
2066 |
|
2067 |
-
#: defaults.php:
|
2068 |
msgid "Changed the status of the WordPress setting <strong>.Comment author must fill out name and email</strong>."
|
2069 |
msgstr ""
|
2070 |
|
2071 |
-
#: defaults.php:
|
2072 |
msgid "Enabled/Disabled the option Users must be logged in and registered to comment"
|
2073 |
msgstr ""
|
2074 |
|
2075 |
-
#: defaults.php:
|
2076 |
msgid "Changed the status of the WordPress setting <strong>Users must be registered and logged in to comment</strong>."
|
2077 |
msgstr ""
|
2078 |
|
2079 |
-
#: defaults.php:
|
2080 |
msgid "Enabled/Disabled the option to automatically close comments"
|
2081 |
msgstr ""
|
2082 |
|
2083 |
-
#: defaults.php:
|
2084 |
msgid "Changed the status of the WordPress setting <strong>Automatically close comments after %Value% days</strong>."
|
2085 |
msgstr ""
|
2086 |
|
2087 |
-
#: defaults.php:
|
2088 |
msgid "Changed the value of the option Automatically close comments"
|
2089 |
msgstr ""
|
2090 |
|
2091 |
-
#: defaults.php:
|
2092 |
msgid "Changed the value of the WordPress setting <strong>Automatically close comments after a number of days</strong> to %NewValue%."
|
2093 |
msgstr ""
|
2094 |
|
2095 |
-
#: defaults.php:
|
2096 |
msgid "Enabled/Disabled the option for comments to be manually approved"
|
2097 |
msgstr ""
|
2098 |
|
2099 |
-
#: defaults.php:
|
2100 |
msgid "Changed the value of the WordPress setting <strong>Comments must be manualy approved</strong>."
|
2101 |
msgstr ""
|
2102 |
|
2103 |
-
#: defaults.php:
|
2104 |
msgid "Enabled/Disabled the option for an author to have previously approved comments for the comments to appear"
|
2105 |
msgstr ""
|
2106 |
|
2107 |
-
#: defaults.php:
|
2108 |
msgid "Changed the value of the WordPress setting <strong>Comment author must have a previously approved comment</strong>."
|
2109 |
msgstr ""
|
2110 |
|
2111 |
-
#: defaults.php:
|
2112 |
msgid "Changed the number of links that a comment must have to be held in the queue"
|
2113 |
msgstr ""
|
2114 |
|
2115 |
-
#: defaults.php:
|
2116 |
msgid "Changed the value of the WordPress setting <strong>Hold a comment in the queue if it contains links</strong> to %NewValue% links."
|
2117 |
msgstr ""
|
2118 |
|
2119 |
-
#: defaults.php:
|
2120 |
msgid "Modified the list of keywords for comments moderation"
|
2121 |
msgstr ""
|
2122 |
|
2123 |
-
#: defaults.php:
|
2124 |
msgid "Modified the list of keywords for comments medoration in WordPress."
|
2125 |
msgstr ""
|
2126 |
|
2127 |
-
#: defaults.php:
|
2128 |
msgid "Modified the list of keywords for comments blacklisting"
|
2129 |
msgstr ""
|
2130 |
|
2131 |
-
#: defaults.php:
|
2132 |
msgid "Modified the list of <strong>Disallowed comment keys</strong> (keywords) for comments blacklisting in WordPress."
|
2133 |
msgstr ""
|
2134 |
|
2135 |
-
#: defaults.php:
|
2136 |
msgid "Option WordPress Address (URL) in WordPress settings changed"
|
2137 |
msgstr ""
|
2138 |
|
2139 |
-
#: defaults.php:
|
2140 |
msgid "Changed the <strong>WordPress address (URL)</strong> tp %new_url%."
|
2141 |
msgstr ""
|
2142 |
|
2143 |
-
#: defaults.php:
|
2144 |
msgid "Option Site Address (URL) in WordPress settings changed"
|
2145 |
msgstr ""
|
2146 |
|
2147 |
-
#: defaults.php:
|
2148 |
msgid "Changed the <strong>Site address (URL)</strong> to %new_url%."
|
2149 |
msgstr ""
|
2150 |
|
2151 |
-
#: defaults.php:
|
2152 |
msgid "Option Your homepage displays in WordPress settings changed"
|
2153 |
msgstr ""
|
2154 |
|
2155 |
-
#: defaults.php:
|
2156 |
msgid "Changed the <strong>Your homepage displays</strong> WordPress setting to %new_homepage%."
|
2157 |
msgstr ""
|
2158 |
|
2159 |
-
#: defaults.php:
|
2160 |
msgid "Previous setting"
|
2161 |
msgstr ""
|
2162 |
|
2163 |
-
#: defaults.php:
|
2164 |
msgid "Option homepage in WordPress settings changed"
|
2165 |
msgstr ""
|
2166 |
|
2167 |
-
#: defaults.php:
|
2168 |
msgid "Changed the <strong>Homepage</strong> in the WordPress settings to %new_page%."
|
2169 |
msgstr ""
|
2170 |
|
2171 |
-
#: defaults.php:
|
2172 |
msgid "Previous page"
|
2173 |
msgstr ""
|
2174 |
|
2175 |
-
#: defaults.php:
|
2176 |
msgid "Option posts page in WordPress settings changed"
|
2177 |
msgstr ""
|
2178 |
|
2179 |
-
#: defaults.php:
|
2180 |
msgid "Changed the <strong> Posts</strong> page in the WordPress settings to %new_page%."
|
2181 |
msgstr ""
|
2182 |
|
2183 |
-
#: defaults.php:
|
2184 |
msgid "Option Timezone in WordPress settings changed"
|
2185 |
msgstr ""
|
2186 |
|
2187 |
-
#: defaults.php:
|
2188 |
msgid "Changed the <strong>Timezone</strong> in the WordPress settings to %new_timezone%."
|
2189 |
msgstr ""
|
2190 |
|
2191 |
-
#: defaults.php:
|
2192 |
msgid "Previous timezone"
|
2193 |
msgstr ""
|
2194 |
|
2195 |
-
#: defaults.php:
|
2196 |
msgid "Option Date format in WordPress settings changed"
|
2197 |
msgstr ""
|
2198 |
|
2199 |
-
#: defaults.php:
|
2200 |
msgid "Changed the <strong>Date format</strong> in the WordPress settings to %new_date_format%."
|
2201 |
msgstr ""
|
2202 |
|
2203 |
-
#: defaults.php:
|
2204 |
msgid "Previous format"
|
2205 |
msgstr ""
|
2206 |
|
2207 |
-
#: defaults.php:
|
2208 |
msgid "Option Time format in WordPress settings changed"
|
2209 |
msgstr ""
|
2210 |
|
2211 |
-
#: defaults.php:
|
2212 |
msgid "Changed the <strong>Time format</strong> in the WordPress settings to %new_time_format%."
|
2213 |
msgstr ""
|
2214 |
|
2215 |
-
#: defaults.php:
|
2216 |
msgid "Option Automatic updates setting changed"
|
2217 |
msgstr ""
|
2218 |
|
2219 |
-
#: defaults.php:
|
2220 |
msgid "Changed the <strong>Automatic updates</strong> setting."
|
2221 |
msgstr ""
|
2222 |
|
2223 |
-
#: defaults.php:
|
2224 |
msgid "New setting status"
|
2225 |
msgstr ""
|
2226 |
|
2227 |
-
#: defaults.php:
|
2228 |
msgid "Option Site Language setting changed"
|
2229 |
msgstr ""
|
2230 |
|
2231 |
-
#: defaults.php:
|
2232 |
msgid "Changed the <strong>Site Language</strong> to %new_value%."
|
2233 |
msgstr ""
|
2234 |
|
2235 |
-
#: defaults.php:
|
2236 |
msgid "Multisite Network Sites"
|
2237 |
msgstr ""
|
2238 |
|
2239 |
-
#: defaults.php:
|
2240 |
msgid "MultiSite"
|
2241 |
msgstr ""
|
2242 |
|
2243 |
-
#: defaults.php:
|
2244 |
msgid "New site added on the network"
|
2245 |
msgstr ""
|
2246 |
|
2247 |
-
#: defaults.php:
|
2248 |
msgid "Added the new site %SiteName% to the network."
|
2249 |
msgstr ""
|
2250 |
|
2251 |
-
#: defaults.php:
|
2252 |
msgid "URL"
|
2253 |
msgstr ""
|
2254 |
|
2255 |
-
#: defaults.php:
|
2256 |
msgid "Existing site archived"
|
2257 |
msgstr ""
|
2258 |
|
2259 |
-
#: defaults.php:
|
2260 |
msgid "Archived the site %SiteName% on the network."
|
2261 |
msgstr ""
|
2262 |
|
2263 |
-
#: defaults.php:
|
2264 |
msgid "Archived site has been unarchived"
|
2265 |
msgstr ""
|
2266 |
|
2267 |
-
#: defaults.php:
|
2268 |
msgid "Unarchived the site %SiteName%."
|
2269 |
msgstr ""
|
2270 |
|
2271 |
-
#: defaults.php:
|
2272 |
msgid "Deactivated site has been activated"
|
2273 |
msgstr ""
|
2274 |
|
2275 |
-
#: defaults.php:
|
2276 |
msgid "Activated the site %SiteName% on the network."
|
2277 |
msgstr ""
|
2278 |
|
2279 |
-
#: defaults.php:
|
2280 |
msgid "Site has been deactivated"
|
2281 |
msgstr ""
|
2282 |
|
2283 |
-
#: defaults.php:
|
2284 |
msgid "Deactiveated the site %SiteName% on the network."
|
2285 |
msgstr ""
|
2286 |
|
2287 |
-
#: defaults.php:
|
2288 |
msgid "Existing site deleted from network"
|
2289 |
msgstr ""
|
2290 |
|
2291 |
-
#: defaults.php:
|
2292 |
msgid "The site: %SiteName%."
|
2293 |
msgstr ""
|
2294 |
|
2295 |
-
#: defaults.php:
|
2296 |
msgid "Allow site administrators to add new users to their sites settings changed"
|
2297 |
msgstr ""
|
2298 |
|
2299 |
-
#: defaults.php:
|
2300 |
msgid "Changed the status of the network setting <strong>Allow site administrators to add new users to their sites</strong>."
|
2301 |
msgstr ""
|
2302 |
|
2303 |
-
#: defaults.php:
|
2304 |
msgid "Site upload space settings changed"
|
2305 |
msgstr ""
|
2306 |
|
2307 |
-
#: defaults.php:
|
2308 |
msgid "Changed the status of the network setting <strong>Site upload space</strong> (to limit space allocated for each site's upload directory)."
|
2309 |
msgstr ""
|
2310 |
|
2311 |
-
#: defaults.php:
|
2312 |
msgid "Site upload space file size settings changed"
|
2313 |
msgstr ""
|
2314 |
|
2315 |
-
#: defaults.php:
|
2316 |
msgid "Changed the file size in the <strong>Site upload space</strong> network setting to %new_value%."
|
2317 |
msgstr ""
|
2318 |
|
2319 |
-
#: defaults.php:
|
2320 |
msgid "Previous size (MB)"
|
2321 |
msgstr ""
|
2322 |
|
2323 |
-
#: defaults.php:
|
2324 |
msgid "Site Upload file types settings changed"
|
2325 |
msgstr ""
|
2326 |
|
2327 |
-
#: defaults.php:
|
2328 |
msgid "Changed the network setting <strong>Upload file types (list of allowed file types)</strong>."
|
2329 |
msgstr ""
|
2330 |
|
2331 |
-
#: defaults.php:
|
2332 |
msgid "Site Max upload file size settings changed"
|
2333 |
msgstr ""
|
2334 |
|
2335 |
-
#: defaults.php:
|
2336 |
msgid "Changed the <strong>Max upload file size</strong> network setting to %new_value%."
|
2337 |
msgstr ""
|
2338 |
|
2339 |
-
#: defaults.php:
|
2340 |
msgid "Previous size (KB)"
|
2341 |
msgstr ""
|
2342 |
|
2343 |
-
#: defaults.php:
|
2344 |
msgid "Allow new registrations settings changed"
|
2345 |
msgstr ""
|
2346 |
|
2347 |
-
#: defaults.php:
|
2348 |
msgid "Changed the <strong>Allow new registrations</strong> setting to %new_setting%."
|
2349 |
msgstr ""
|
2350 |
|
2351 |
-
#: defaults.php:
|
2352 |
msgid "File Changes"
|
2353 |
msgstr ""
|
2354 |
|
2355 |
-
#: defaults.php:
|
2356 |
msgid "Monitor File Changes"
|
2357 |
msgstr ""
|
2358 |
|
2359 |
-
#: defaults.php:
|
2360 |
msgid "Dummy"
|
2361 |
msgstr ""
|
2362 |
|
2363 |
#. translators: Username
|
2364 |
#. translators: Username
|
2365 |
-
#: wp-security-audit-log.php:
|
2366 |
msgid "Hey %1$s"
|
2367 |
msgstr ""
|
2368 |
|
2369 |
-
#: wp-security-audit-log.php:
|
2370 |
msgid "Never miss an important update! Opt-in to our security and feature updates notifications, and non-sensitive diagnostic tracking with freemius.com."
|
2371 |
msgstr ""
|
2372 |
|
2373 |
-
#: wp-security-audit-log.php:
|
2374 |
msgid "Note: "
|
2375 |
msgstr ""
|
2376 |
|
2377 |
-
#: wp-security-audit-log.php:
|
2378 |
msgid "NO ACTIVITY LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS."
|
2379 |
msgstr ""
|
2380 |
|
2381 |
#. translators: 1: Plugin name. 2: Freemius link.
|
2382 |
-
#: wp-security-audit-log.php:
|
2383 |
msgid "Please help us improve %2$s! If you opt-in, some non-sensitive data about your usage of %2$s will be sent to %5$s, a diagnostic tracking service we use. If you skip this, that's okay! %2$s will still work just fine."
|
2384 |
msgstr ""
|
2385 |
|
2386 |
#. translators: Plugin name
|
2387 |
-
#: wp-security-audit-log.php:
|
2388 |
msgid "Get a free 7-day trial of the premium edition of %s. No credit card required, no commitments!"
|
2389 |
msgstr ""
|
2390 |
|
2391 |
-
#: wp-security-audit-log.php:
|
2392 |
msgid "WP Activity Log"
|
2393 |
msgstr ""
|
2394 |
|
2395 |
-
#: wp-security-audit-log.php:
|
2396 |
msgid "Start free trial"
|
2397 |
msgstr ""
|
2398 |
|
2399 |
-
#: wp-security-audit-log.php:
|
2400 |
msgid "You need to activate the licence key to use WP Activity Log Premium. %2$s"
|
2401 |
msgstr ""
|
2402 |
|
2403 |
-
#: wp-security-audit-log.php:
|
2404 |
msgid "Activate the licence key now"
|
2405 |
msgstr ""
|
2406 |
|
2407 |
#. translators: Number of sites
|
2408 |
-
#: wp-security-audit-log.php:
|
2409 |
msgid "The license is limited to %s sub-sites. You need to upgrade your license to cover all the sub-sites on this network."
|
2410 |
msgstr ""
|
2411 |
|
2412 |
-
#: wp-security-audit-log.php:
|
2413 |
msgid "%s You need to renew your license to continue using premium features."
|
2414 |
msgstr ""
|
2415 |
|
2416 |
-
#: wp-security-audit-log.php:
|
2417 |
msgid "Error: You do not have sufficient permissions to disable this custom field."
|
2418 |
msgstr ""
|
2419 |
|
2420 |
-
#: wp-security-audit-log.php:
|
2421 |
msgid "Custom Field <strong>%1$s</strong> is no longer being monitored.<br />Enable the monitoring of this custom field again from the"
|
2422 |
msgstr ""
|
2423 |
|
2424 |
-
#: wp-security-audit-log.php:
|
2425 |
msgid "Excluded Objects"
|
2426 |
msgstr ""
|
2427 |
|
2428 |
-
#: wp-security-audit-log.php:
|
2429 |
msgid " tab in the plugin settings"
|
2430 |
msgstr ""
|
2431 |
|
2432 |
-
#: wp-security-audit-log.php:
|
2433 |
msgid "Error: You do not have sufficient permissions to disable this alert."
|
2434 |
msgstr ""
|
2435 |
|
2436 |
-
#: wp-security-audit-log.php:
|
2437 |
msgid "Alert %1$s is no longer being monitored.<br /> %2$s"
|
2438 |
msgstr ""
|
2439 |
|
2440 |
-
#: wp-security-audit-log.php:
|
2441 |
msgid "You can enable this alert again from the Enable/Disable Alerts node in the plugin menu."
|
2442 |
msgstr ""
|
2443 |
|
2444 |
-
#: wp-security-audit-log.php:
|
2445 |
msgid "Installing, please wait"
|
2446 |
msgstr ""
|
2447 |
|
2448 |
-
#: wp-security-audit-log.php:
|
2449 |
msgid "Already installed"
|
2450 |
msgstr ""
|
2451 |
|
2452 |
-
#: wp-security-audit-log.php:
|
2453 |
msgid "Extension installed"
|
2454 |
msgstr ""
|
2455 |
|
2456 |
-
#: wp-security-audit-log.php:
|
2457 |
msgid "Extension activated"
|
2458 |
msgstr ""
|
2459 |
|
2460 |
-
#: wp-security-audit-log.php:
|
2461 |
msgid "Install failed"
|
2462 |
msgstr ""
|
2463 |
|
2464 |
#. translators: %s: PHP Version
|
2465 |
-
#: wp-security-audit-log.php:
|
2466 |
msgid "You are using a version of PHP that is older than %s, which is no longer supported."
|
2467 |
msgstr ""
|
2468 |
|
2469 |
-
#: wp-security-audit-log.php:
|
2470 |
msgid "Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com\">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you are using."
|
2471 |
msgstr ""
|
2472 |
|
2473 |
#. translators: %s: Activity Log for MainWP plugin hyperlink
|
2474 |
-
#: wp-security-audit-log.php:
|
2475 |
msgid "Please install the %s plugin on the MainWP dashboard."
|
2476 |
msgstr ""
|
2477 |
|
2478 |
-
#: wp-security-audit-log.php:
|
2479 |
msgid "Activity Log for MainWP"
|
2480 |
msgstr ""
|
2481 |
|
2482 |
#. translators: %s: Getting started guide hyperlink
|
2483 |
-
#: wp-security-audit-log.php:
|
2484 |
msgid "The WP Activity Log should be installed on the child sites only. Refer to the %s for more information."
|
2485 |
msgstr ""
|
2486 |
|
2487 |
-
#: wp-security-audit-log.php:
|
2488 |
msgid "getting started guide"
|
2489 |
msgstr ""
|
2490 |
|
2491 |
-
#: wp-security-audit-log.php:
|
2492 |
msgid "For security and auditing purposes, a record of all of your logged-in actions and changes within the WordPress dashboard will be recorded in an activity log with the <a href=\"https://wpactivitylog.com/\" target=\"_blank\">WP Activity Log plugin</a>. The audit log also includes the IP address where you accessed this site from."
|
2493 |
msgstr ""
|
2494 |
|
2495 |
-
#: wp-security-audit-log.php:
|
2496 |
msgid "Every 6 hours"
|
2497 |
msgstr ""
|
2498 |
|
2499 |
-
#: wp-security-audit-log.php:
|
2500 |
msgid "Every 45 minutes"
|
2501 |
msgstr ""
|
2502 |
|
2503 |
-
#: wp-security-audit-log.php:
|
2504 |
msgid "Every 30 minutes"
|
2505 |
msgstr ""
|
2506 |
|
2507 |
-
#: wp-security-audit-log.php:
|
2508 |
msgid "Every 15 minutes"
|
2509 |
msgstr ""
|
2510 |
|
2511 |
-
#: wp-security-audit-log.php:
|
2512 |
msgid "Every 10 minutes"
|
2513 |
msgstr ""
|
2514 |
|
2515 |
-
#: wp-security-audit-log.php:
|
2516 |
msgid "Every 1 minute"
|
2517 |
msgstr ""
|
2518 |
|
2519 |
#. translators: 1. Deprecated method name 2. Version since deprecated
|
2520 |
-
#: wp-security-audit-log.php:
|
2521 |
msgid "Method %1$s is deprecated since version %2$s!"
|
2522 |
msgstr ""
|
2523 |
|
2524 |
-
#: classes/AlertFormatter.php:
|
2525 |
msgid "Exclude Custom Field from the Monitoring"
|
2526 |
msgstr ""
|
2527 |
|
2528 |
-
#: classes/AlertFormatter.php:
|
2529 |
msgid "unknown"
|
2530 |
msgstr ""
|
2531 |
|
2532 |
-
#: classes/AlertFormatter.php:
|
2533 |
msgid "Download the log file."
|
2534 |
msgstr ""
|
2535 |
|
2536 |
-
#: classes/AlertFormatter.php:
|
2537 |
msgid "published"
|
2538 |
msgstr ""
|
2539 |
|
2540 |
#. translators: Event ID
|
2541 |
-
#: classes/AlertManager.php:
|
2542 |
msgid "Event with code %d has not be registered."
|
2543 |
msgstr ""
|
2544 |
|
2545 |
#. translators: Event ID
|
2546 |
-
#: classes/AlertManager.php:
|
2547 |
msgid "Event %s already registered with WP Activity Log."
|
2548 |
msgstr ""
|
2549 |
|
2550 |
-
#: classes/AlertManager.php:
|
2551 |
msgid "You have custom events that are using the same ID or IDs which are already registered in the plugin, so they have been disabled."
|
2552 |
msgstr ""
|
2553 |
|
2554 |
#. translators: 1.CSS classes, 2. Notice, 3. Contact us link
|
2555 |
-
#: classes/AlertManager.php:
|
2556 |
msgid "%4$s to help you solve this issue."
|
2557 |
msgstr ""
|
2558 |
|
2559 |
-
#: classes/AlertManager.php:
|
2560 |
msgid "ERROR:"
|
2561 |
msgstr ""
|
2562 |
|
2563 |
-
#: classes/AlertManager.php:
|
2564 |
msgid "Contact us"
|
2565 |
msgstr ""
|
2566 |
|
2567 |
-
#: classes/AlertManager.php:
|
2568 |
msgid "Database"
|
2569 |
msgstr ""
|
2570 |
|
2571 |
-
#: classes/AlertManager.php:
|
2572 |
msgid "File"
|
2573 |
msgstr ""
|
2574 |
|
2575 |
-
#: classes/AlertManager.php:
|
2576 |
msgid "Tag"
|
2577 |
msgstr ""
|
2578 |
|
2579 |
-
#: classes/AlertManager.php:
|
2580 |
msgid "Comment"
|
2581 |
msgstr ""
|
2582 |
|
2583 |
-
#: classes/AlertManager.php:
|
2584 |
msgid "Setting"
|
2585 |
msgstr ""
|
2586 |
|
2587 |
-
#: classes/AlertManager.php:
|
2588 |
msgid "System Setting"
|
2589 |
msgstr ""
|
2590 |
|
2591 |
-
#: classes/AlertManager.php:
|
2592 |
msgid "MainWP Network"
|
2593 |
msgstr ""
|
2594 |
|
2595 |
-
#: classes/AlertManager.php:
|
2596 |
msgid "MainWP"
|
2597 |
msgstr ""
|
2598 |
|
2599 |
-
#: classes/AlertManager.php:
|
2600 |
msgid "Category"
|
2601 |
msgstr ""
|
2602 |
|
2603 |
-
#: classes/AlertManager.php:
|
2604 |
msgid "Custom Field"
|
2605 |
msgstr ""
|
2606 |
|
2607 |
-
#: classes/AlertManager.php:
|
2608 |
msgid "Widget"
|
2609 |
msgstr ""
|
2610 |
|
2611 |
-
#: classes/AlertManager.php:
|
2612 |
msgid "Menu"
|
2613 |
msgstr ""
|
2614 |
|
2615 |
-
#: classes/AlertManager.php:
|
2616 |
msgid "Theme"
|
2617 |
msgstr ""
|
2618 |
|
2619 |
-
#: classes/AlertManager.php:
|
2620 |
msgid "Activity log"
|
2621 |
msgstr ""
|
2622 |
|
2623 |
-
#: classes/AlertManager.php:
|
2624 |
msgid "Multisite Network"
|
2625 |
msgstr ""
|
2626 |
|
2627 |
-
#: classes/AlertManager.php:
|
2628 |
msgid "IP Address"
|
2629 |
msgstr ""
|
2630 |
|
2631 |
-
#: classes/AlertManager.php:
|
2632 |
msgid "unknown object"
|
2633 |
msgstr ""
|
2634 |
|
2635 |
-
#: classes/AlertManager.php:
|
2636 |
msgid "Login"
|
2637 |
msgstr ""
|
2638 |
|
2639 |
-
#: classes/AlertManager.php:
|
2640 |
msgid "Logout"
|
2641 |
msgstr ""
|
2642 |
|
2643 |
-
#: classes/AlertManager.php:
|
2644 |
msgid "Installed"
|
2645 |
msgstr ""
|
2646 |
|
2647 |
-
#: classes/AlertManager.php:
|
2648 |
msgid "Activated"
|
2649 |
msgstr ""
|
2650 |
|
2651 |
-
#: classes/AlertManager.php:
|
2652 |
msgid "Deactivated"
|
2653 |
msgstr ""
|
2654 |
|
2655 |
-
#: classes/AlertManager.php:
|
2656 |
msgid "Uninstalled"
|
2657 |
msgstr ""
|
2658 |
|
2659 |
-
#: classes/AlertManager.php:
|
2660 |
msgid "Updated"
|
2661 |
msgstr ""
|
2662 |
|
2663 |
-
#: classes/AlertManager.php:
|
2664 |
msgid "Created"
|
2665 |
msgstr ""
|
2666 |
|
2667 |
-
#: classes/AlertManager.php:
|
2668 |
msgid "Modified"
|
2669 |
msgstr ""
|
2670 |
|
2671 |
-
#: classes/AlertManager.php:
|
2672 |
msgid "Deleted"
|
2673 |
msgstr ""
|
2674 |
|
2675 |
-
#: classes/AlertManager.php:
|
2676 |
msgid "Published"
|
2677 |
msgstr ""
|
2678 |
|
2679 |
-
#: classes/AlertManager.php:
|
2680 |
msgid "Approved"
|
2681 |
msgstr ""
|
2682 |
|
2683 |
-
#: classes/AlertManager.php:
|
2684 |
msgid "Unapproved"
|
2685 |
msgstr ""
|
2686 |
|
2687 |
-
#: classes/AlertManager.php:
|
2688 |
msgid "Enabled"
|
2689 |
msgstr ""
|
2690 |
|
2691 |
-
#: classes/AlertManager.php:
|
2692 |
msgid "Disabled"
|
2693 |
msgstr ""
|
2694 |
|
2695 |
-
#: classes/AlertManager.php:
|
2696 |
msgid "Added"
|
2697 |
msgstr ""
|
2698 |
|
2699 |
-
#: classes/AlertManager.php:
|
2700 |
msgid "Failed Login"
|
2701 |
msgstr ""
|
2702 |
|
2703 |
-
#: classes/AlertManager.php:
|
2704 |
msgid "Blocked"
|
2705 |
msgstr ""
|
2706 |
|
2707 |
-
#: classes/AlertManager.php:
|
2708 |
msgid "Uploaded"
|
2709 |
msgstr ""
|
2710 |
|
2711 |
-
#: classes/AlertManager.php:
|
2712 |
msgid "Restored"
|
2713 |
msgstr ""
|
2714 |
|
2715 |
-
#: classes/AlertManager.php:
|
2716 |
msgid "Opened"
|
2717 |
msgstr ""
|
2718 |
|
2719 |
-
#: classes/AlertManager.php:
|
2720 |
msgid "Viewed"
|
2721 |
msgstr ""
|
2722 |
|
2723 |
-
#: classes/AlertManager.php:
|
2724 |
msgid "Started"
|
2725 |
msgstr ""
|
2726 |
|
2727 |
-
#: classes/AlertManager.php:
|
2728 |
msgid "Stopped"
|
2729 |
msgstr ""
|
2730 |
|
2731 |
-
#: classes/AlertManager.php:
|
2732 |
msgid "Removed"
|
2733 |
msgstr ""
|
2734 |
|
2735 |
-
#: classes/AlertManager.php:
|
2736 |
msgid "Unblocked"
|
2737 |
msgstr ""
|
2738 |
|
2739 |
-
#: classes/AlertManager.php:
|
2740 |
msgid "Renamed"
|
2741 |
msgstr ""
|
2742 |
|
2743 |
-
#: classes/AlertManager.php:
|
2744 |
msgid "Duplicated"
|
2745 |
msgstr ""
|
2746 |
|
2747 |
-
#: classes/AlertManager.php:
|
2748 |
msgid "Submitted"
|
2749 |
msgstr ""
|
2750 |
|
2751 |
-
#: classes/AlertManager.php:
|
2752 |
msgid "Revoked"
|
2753 |
msgstr ""
|
2754 |
|
2755 |
-
#: classes/AlertManager.php:
|
2756 |
msgid "unknown type"
|
2757 |
msgstr ""
|
2758 |
|
2759 |
-
#: classes/AlertManager.php:
|
2760 |
msgid "Unknown error code."
|
2761 |
msgstr ""
|
2762 |
|
2763 |
-
|
2764 |
-
#: classes/AlertManager.php:1907, classes/AlertManager.php:1895, extensions/external-db/classes/Common.php:885, extensions/reports/classes/Common.php:1238, extensions/reports/classes/Common.php:1228
|
2765 |
msgid "Unknown Site"
|
2766 |
msgstr ""
|
2767 |
|
2768 |
-
#: classes/AuditLogGridView.php:104, classes/AuditLogListView.php:
|
2769 |
msgid "No events so far."
|
2770 |
msgstr ""
|
2771 |
|
2772 |
-
#: classes/AuditLogGridView.php:141, classes/AuditLogListView.php:
|
2773 |
msgid "List View"
|
2774 |
msgstr ""
|
2775 |
|
2776 |
-
#: classes/AuditLogGridView.php:142, classes/AuditLogListView.php:
|
2777 |
msgid "Grid View"
|
2778 |
msgstr ""
|
2779 |
|
2780 |
-
#: classes/AuditLogGridView.php:167, classes/AuditLogListView.php:
|
2781 |
msgid "Show "
|
2782 |
msgstr ""
|
2783 |
|
2784 |
-
#: classes/AuditLogGridView.php:175, classes/AuditLogListView.php:
|
2785 |
msgid " Items"
|
2786 |
msgstr ""
|
2787 |
|
2788 |
-
#: classes/AuditLogGridView.php:182, classes/AuditLogListView.php:
|
2789 |
msgid "— End of Activity Log —"
|
2790 |
msgstr ""
|
2791 |
|
2792 |
-
#: classes/AuditLogGridView.php:203, classes/AuditLogListView.php:
|
2793 |
msgid "All Sites"
|
2794 |
msgstr ""
|
2795 |
|
2796 |
-
#: classes/AuditLogGridView.php:231, classes/AuditLogListView.php:
|
2797 |
msgid "Live Database"
|
2798 |
msgstr ""
|
2799 |
|
2800 |
-
#: classes/AuditLogGridView.php:234, classes/AuditLogListView.php:
|
2801 |
msgid "Archive Database"
|
2802 |
msgstr ""
|
2803 |
|
2804 |
-
#: classes/AuditLogGridView.php:289, classes/AuditLogGridView.php:315, classes/AuditLogListView.php:
|
2805 |
msgid "Severity"
|
2806 |
msgstr ""
|
2807 |
|
2808 |
-
#: classes/AuditLogGridView.php:290, extensions/search/classes/Filters/CodeFilter.php:
|
2809 |
msgid "Info"
|
2810 |
msgstr ""
|
2811 |
|
2812 |
-
#: classes/AuditLogGridView.php:295, classes/AuditLogListView.php:
|
2813 |
msgid "Site"
|
2814 |
msgstr ""
|
2815 |
|
2816 |
-
#: classes/AuditLogGridView.php:298, classes/AuditLogGridView.php:321, classes/AuditLogListView.php:
|
2817 |
msgid "Message"
|
2818 |
msgstr ""
|
2819 |
|
@@ -2821,87 +2820,87 @@ msgstr ""
|
|
2821 |
msgid "Grid"
|
2822 |
msgstr ""
|
2823 |
|
2824 |
-
#: classes/AuditLogGridView.php:386, classes/AuditLogListView.php:
|
2825 |
msgid "Disable this type of events."
|
2826 |
msgstr ""
|
2827 |
|
2828 |
-
#: classes/AuditLogGridView.php:
|
2829 |
msgid "Unknown"
|
2830 |
msgstr ""
|
2831 |
|
2832 |
-
#: classes/AuditLogGridView.php:
|
2833 |
msgid "Unregistered user"
|
2834 |
msgstr ""
|
2835 |
|
2836 |
-
#: classes/AuditLogGridView.php:
|
2837 |
msgid "Show me all activity by this User"
|
2838 |
msgstr ""
|
2839 |
|
2840 |
-
#: classes/AuditLogGridView.php:
|
2841 |
msgid "Show me all activity originating from this IP Address"
|
2842 |
msgstr ""
|
2843 |
|
2844 |
-
#: classes/AuditLogGridView.php:
|
2845 |
msgid "View all details of this change"
|
2846 |
msgstr ""
|
2847 |
|
2848 |
-
#: classes/AuditLogGridView.php:
|
2849 |
msgid "Alert Data Inspector"
|
2850 |
msgstr ""
|
2851 |
|
2852 |
-
#: classes/AuditLogListView.php:
|
2853 |
msgid "Date"
|
2854 |
msgstr ""
|
2855 |
|
2856 |
-
#: classes/AuditLogListView.php:
|
2857 |
msgid "IP"
|
2858 |
msgstr ""
|
2859 |
|
2860 |
-
#: classes/AuditLogListView.php:
|
2861 |
msgid "Object"
|
2862 |
msgstr ""
|
2863 |
|
2864 |
-
#: classes/AuditLogListView.php:
|
2865 |
msgid "Event Type"
|
2866 |
msgstr ""
|
2867 |
|
2868 |
-
#: classes/AuditLogListView.php:
|
2869 |
msgid "Click to toggle."
|
2870 |
msgstr ""
|
2871 |
|
2872 |
-
#: classes/AuditLogListView.php:
|
2873 |
msgid "Alert message not found."
|
2874 |
msgstr ""
|
2875 |
|
2876 |
-
#: classes/AuditLogListView.php:
|
2877 |
msgid "Alert description not found."
|
2878 |
msgstr ""
|
2879 |
|
2880 |
-
#: classes/ConstantManager.php:
|
2881 |
msgid "Informational"
|
2882 |
msgstr ""
|
2883 |
|
2884 |
-
#: classes/ConstantManager.php:
|
2885 |
msgid "Low"
|
2886 |
msgstr ""
|
2887 |
|
2888 |
-
#: classes/ConstantManager.php:
|
2889 |
msgid "Medium"
|
2890 |
msgstr ""
|
2891 |
|
2892 |
-
#: classes/ConstantManager.php:
|
2893 |
msgid "High"
|
2894 |
msgstr ""
|
2895 |
|
2896 |
-
#: classes/ConstantManager.php:
|
2897 |
msgid "Critical"
|
2898 |
msgstr ""
|
2899 |
|
2900 |
-
#: classes/ConstantManager.php:
|
2901 |
msgid "Notification"
|
2902 |
msgstr ""
|
2903 |
|
2904 |
-
#: classes/ConstantManager.php:
|
2905 |
msgid "Warning"
|
2906 |
msgstr ""
|
2907 |
|
@@ -2909,35 +2908,35 @@ msgstr ""
|
|
2909 |
msgid "This function is deprecated"
|
2910 |
msgstr ""
|
2911 |
|
2912 |
-
#: classes/Settings.php:
|
2913 |
msgid "Root directory of WordPress (excluding sub directories)"
|
2914 |
msgstr ""
|
2915 |
|
2916 |
-
#: classes/Settings.php:
|
2917 |
msgid "WP Admin directory (/wp-admin/)"
|
2918 |
msgstr ""
|
2919 |
|
2920 |
-
#: classes/Settings.php:
|
2921 |
msgid "WP Includes directory (/wp-includes/)"
|
2922 |
msgstr ""
|
2923 |
|
2924 |
-
#: classes/Settings.php:
|
2925 |
msgid "/wp-content/ directory (excluding plugins, themes & uploads directories)"
|
2926 |
msgstr ""
|
2927 |
|
2928 |
-
#: classes/Settings.php:
|
2929 |
msgid "Themes directory (/wp-content/themes/)"
|
2930 |
msgstr ""
|
2931 |
|
2932 |
-
#: classes/Settings.php:
|
2933 |
msgid "Plugins directory (/wp-content/plugins/)"
|
2934 |
msgstr ""
|
2935 |
|
2936 |
-
#: classes/Settings.php:
|
2937 |
msgid "Uploads directory (/wp-content/uploads/)"
|
2938 |
msgstr ""
|
2939 |
|
2940 |
-
#: classes/Settings.php:
|
2941 |
msgid "Uploads directory of all sub sites on this network (/wp-content/sites/*)"
|
2942 |
msgstr ""
|
2943 |
|
@@ -2953,7 +2952,7 @@ msgstr ""
|
|
2953 |
msgid "Latest Events"
|
2954 |
msgstr ""
|
2955 |
|
2956 |
-
#: classes/WidgetManager.php:79, classes/Views/ToggleAlerts.php:
|
2957 |
msgid "Description"
|
2958 |
msgstr ""
|
2959 |
|
@@ -2961,61 +2960,49 @@ msgstr ""
|
|
2961 |
msgid "No events found."
|
2962 |
msgstr ""
|
2963 |
|
2964 |
-
#: extensions/class-wsal-extension-manager.php:216, extensions/external-db/classes/Settings.php:109, extensions/external-db/classes/Settings.php:619
|
2965 |
-
msgid "External Storage"
|
2966 |
-
msgstr ""
|
2967 |
-
|
2968 |
-
#: extensions/class-wsal-extension-manager.php:321, extensions/class-wsal-extension-manager.php:297, extensions/class-wsal-extension-manager.php:257, extensions/external-db/classes/Mirroring.php:658, extensions/external-db/classes/Settings.php:121
|
2969 |
-
msgid "Mirroring"
|
2970 |
-
msgstr ""
|
2971 |
-
|
2972 |
-
#: extensions/class-wsal-extension-manager.php:374, extensions/external-db/classes/Settings.php:115, extensions/external-db/classes/Settings.php:828
|
2973 |
-
msgid "Archiving"
|
2974 |
-
msgstr ""
|
2975 |
-
|
2976 |
#. translators: 1 - mysqli error code, 2 - mysqli error message
|
2977 |
#: classes/Connector/MySQLDB.php:68
|
2978 |
msgid "Code %1$d: %2$s"
|
2979 |
msgstr ""
|
2980 |
|
2981 |
-
#: classes/Models/Occurrence.php:
|
2982 |
msgid "WFCM"
|
2983 |
msgstr ""
|
2984 |
|
2985 |
#. translators: 1: html that opens a link, 2: html that closes a link.
|
2986 |
-
#: classes/Models/Occurrence.php:
|
2987 |
msgid "This type of activity / change is no longer monitored. You can create your own custom event IDs to keep a log of such change. Read more about custom events %1$shere%2$s."
|
2988 |
msgstr ""
|
2989 |
|
2990 |
-
#: classes/Sensors/Content.php:
|
2991 |
msgid "Default template"
|
2992 |
msgstr ""
|
2993 |
|
2994 |
-
#: classes/Sensors/Content.php:
|
2995 |
msgid "Default"
|
2996 |
msgstr ""
|
2997 |
|
2998 |
-
#: classes/Sensors/Content.php:
|
2999 |
msgid "No previous image"
|
3000 |
msgstr ""
|
3001 |
|
3002 |
-
#: classes/Sensors/Content.php:
|
3003 |
msgid "No image"
|
3004 |
msgstr ""
|
3005 |
|
3006 |
-
#: classes/Sensors/Content.php:
|
3007 |
msgid "Public"
|
3008 |
msgstr ""
|
3009 |
|
3010 |
-
#: classes/Sensors/Content.php:
|
3011 |
msgid "Private"
|
3012 |
msgstr ""
|
3013 |
|
3014 |
-
#: classes/Sensors/Content.php:
|
3015 |
msgid "Password Protected"
|
3016 |
msgstr ""
|
3017 |
|
3018 |
-
#: classes/Sensors/Content.php:
|
3019 |
msgid "no tags"
|
3020 |
msgstr ""
|
3021 |
|
@@ -3197,7 +3184,7 @@ msgstr ""
|
|
3197 |
msgid "Log Viewer"
|
3198 |
msgstr ""
|
3199 |
|
3200 |
-
#: classes/Views/AuditLog.php:540, classes/Views/Settings.php:326, classes/Views/ToggleAlerts.php:109, extensions/email-notifications/classes/AddNotification.php:227, extensions/email-notifications/classes/AddNotification.php:260, extensions/email-notifications/classes/EditNotification.php:232, extensions/email-notifications/classes/EditNotification.php:240, extensions/email-notifications/classes/EditNotification.php:236, extensions/email-notifications/classes/EditNotification.php:245, extensions/email-notifications/classes/EditNotification.php:273, extensions/external-db/classes/Settings.php:
|
3201 |
msgid "You do not have sufficient permissions to access this page."
|
3202 |
msgstr ""
|
3203 |
|
@@ -3221,7 +3208,7 @@ msgstr ""
|
|
3221 |
msgid "No Results"
|
3222 |
msgstr ""
|
3223 |
|
3224 |
-
#: classes/Views/AuditLog.php:795, classes/Views/AuditLog.php:838, classes/Views/AuditLog.php:1108, classes/Views/AuditLog.php:1170, classes/Views/AuditLog.php:1223, classes/Views/Settings.php:235, classes/Views/Settings.php:1602, classes/Views/Settings.php:1630, classes/Views/Settings.php:1660, classes/Views/SetupWizard.php:96, extensions/search/search-init.php:399, extensions/search/search-init.php:447, extensions/email-notifications/classes/Notifications.php:498, extensions/external-db/classes/Connections.php:
|
3225 |
msgid "Nonce verification failed."
|
3226 |
msgstr ""
|
3227 |
|
@@ -3650,7 +3637,7 @@ msgstr ""
|
|
3650 |
msgid "Unknown settings tab."
|
3651 |
msgstr ""
|
3652 |
|
3653 |
-
#: classes/Views/Settings.php:220, classes/Views/Settings.php:1690, classes/Views/Settings.php:1713, classes/Views/SetupWizard.php:83, extensions/email-notifications/classes/Notifications.php:117, extensions/external-db/classes/Connections.php:
|
3654 |
msgid "Access Denied."
|
3655 |
msgstr ""
|
3656 |
|
@@ -3658,7 +3645,7 @@ msgstr ""
|
|
3658 |
msgid "Invalid input."
|
3659 |
msgstr ""
|
3660 |
|
3661 |
-
#: classes/Views/Settings.php:342, classes/Views/ToggleAlerts.php:126, extensions/external-db/classes/Settings.php:
|
3662 |
msgid "Settings have been saved."
|
3663 |
msgstr ""
|
3664 |
|
@@ -3666,7 +3653,7 @@ msgstr ""
|
|
3666 |
msgid "Message sent successfully."
|
3667 |
msgstr ""
|
3668 |
|
3669 |
-
#: classes/Views/Settings.php:348, classes/Views/ToggleAlerts.php:132, extensions/external-db/classes/Settings.php:
|
3670 |
msgid "Error: "
|
3671 |
msgstr ""
|
3672 |
|
@@ -4011,7 +3998,7 @@ msgstr ""
|
|
4011 |
msgid "Date & Time"
|
4012 |
msgstr ""
|
4013 |
|
4014 |
-
#: classes/Views/Settings.php:1088, extensions/email-notifications/classes/Common.php:
|
4015 |
msgid "Event ID"
|
4016 |
msgstr ""
|
4017 |
|
@@ -4035,19 +4022,19 @@ msgstr ""
|
|
4035 |
msgid "Website File Changes plugin settings"
|
4036 |
msgstr ""
|
4037 |
|
4038 |
-
#: classes/Views/Settings.php:1180, classes/Views/ToggleAlerts.php:
|
4039 |
msgid "Website File Changes Monitor"
|
4040 |
msgstr ""
|
4041 |
|
4042 |
-
#: classes/Views/Settings.php:1181, classes/Views/ToggleAlerts.php:
|
4043 |
msgid "To keep a log of file changes please install Website File Changes Monitor, a plugin which is also developed by us."
|
4044 |
msgstr ""
|
4045 |
|
4046 |
-
#: classes/Views/Settings.php:1182, classes/Views/ToggleAlerts.php:
|
4047 |
msgid "Install plugin now"
|
4048 |
msgstr ""
|
4049 |
|
4050 |
-
#: classes/Views/Settings.php:1182, classes/Views/ToggleAlerts.php:
|
4051 |
msgid "Learn More"
|
4052 |
msgstr ""
|
4053 |
|
@@ -4328,7 +4315,7 @@ msgstr ""
|
|
4328 |
msgid "Note: You can change the WordPress logging level from the plugin’s settings anytime."
|
4329 |
msgstr ""
|
4330 |
|
4331 |
-
#: classes/Views/SetupWizard.php:468, classes/Views/SetupWizard.php:468, classes/Views/SetupWizard.php:525, classes/Views/SetupWizard.php:525, classes/Views/SetupWizard.php:574, classes/Views/SetupWizard.php:574, classes/Views/SetupWizard.php:634, classes/Views/SetupWizard.php:635, classes/Views/SetupWizard.php:851, classes/Views/SetupWizard.php:852, extensions/external-db/classes/Connections.php:
|
4332 |
msgid "Next"
|
4333 |
msgstr ""
|
4334 |
|
@@ -4432,112 +4419,112 @@ msgstr ""
|
|
4432 |
msgid "Custom"
|
4433 |
msgstr ""
|
4434 |
|
4435 |
-
#: classes/Views/ToggleAlerts.php:
|
4436 |
msgid "Log Level: "
|
4437 |
msgstr ""
|
4438 |
|
4439 |
-
#: classes/Views/ToggleAlerts.php:
|
4440 |
msgid "Use the Log level drop down menu above to use one of our preset log levels. Alternatively you can enable or disable any of the individual events from the below tabs. Refer to <a href=\"https://wpactivitylog.com/support/kb/list-wordpress-activity-log-event-ids/\" target=\"_blank\">the complete list of WordPress activity log event IDs</a> for reference on all the events the plugin can keep a log of."
|
4441 |
msgstr ""
|
4442 |
|
4443 |
-
#: classes/Views/ToggleAlerts.php:
|
4444 |
msgid "Third party plugins"
|
4445 |
msgstr ""
|
4446 |
|
4447 |
-
#: classes/Views/ToggleAlerts.php:
|
4448 |
msgid "Code"
|
4449 |
msgstr ""
|
4450 |
|
4451 |
-
#: classes/Views/ToggleAlerts.php:
|
4452 |
msgid "Logins & Logouts"
|
4453 |
msgstr ""
|
4454 |
|
4455 |
-
#: classes/Views/ToggleAlerts.php:
|
4456 |
msgid "Your website is a single site so the multisite events have been disabled."
|
4457 |
msgstr ""
|
4458 |
|
4459 |
-
#: classes/Views/ToggleAlerts.php:
|
4460 |
msgid "The plugin WooCommerce is not installed on your website so these events have been disabled."
|
4461 |
msgstr ""
|
4462 |
|
4463 |
-
#: classes/Views/ToggleAlerts.php:
|
4464 |
msgid "Products"
|
4465 |
msgstr ""
|
4466 |
|
4467 |
-
#: classes/Views/ToggleAlerts.php:
|
4468 |
msgid "Post Changes"
|
4469 |
msgstr ""
|
4470 |
|
4471 |
-
#: classes/Views/ToggleAlerts.php:
|
4472 |
msgid "<strong>Note:</strong> Post refers to any type of content, i.e. blog post, page or a post with a custom post type."
|
4473 |
msgstr ""
|
4474 |
|
4475 |
-
#: classes/Views/ToggleAlerts.php:
|
4476 |
msgid "Not Implemented"
|
4477 |
msgstr ""
|
4478 |
|
4479 |
-
#: classes/Views/ToggleAlerts.php:
|
4480 |
msgid "Not Available"
|
4481 |
msgstr ""
|
4482 |
|
4483 |
-
#: classes/Views/ToggleAlerts.php:
|
4484 |
msgid "User Logins/Logouts"
|
4485 |
msgstr ""
|
4486 |
|
4487 |
-
#: classes/Views/ToggleAlerts.php:
|
4488 |
msgid "User Sessions"
|
4489 |
msgstr ""
|
4490 |
|
4491 |
-
#: classes/Views/ToggleAlerts.php:
|
4492 |
msgid "Files"
|
4493 |
msgstr ""
|
4494 |
|
4495 |
-
#: classes/Views/ToggleAlerts.php:
|
4496 |
msgid "Post Settings"
|
4497 |
msgstr ""
|
4498 |
|
4499 |
-
#: classes/Views/ToggleAlerts.php:
|
4500 |
msgid "Keep a log when a visitor registers a user on the website. Only enable this if you allow visitors to register as users on your website. User registration is disabled by default in WordPress."
|
4501 |
msgstr ""
|
4502 |
|
4503 |
-
#: classes/Views/ToggleAlerts.php:
|
4504 |
msgid "Number of login attempts to log. Enter 0 to log all failed login attempts. (By default the plugin only logs up to 10 failed login because the process can be very resource intensive in case of a brute force attack)"
|
4505 |
msgstr ""
|
4506 |
|
4507 |
-
#: classes/Views/ToggleAlerts.php:
|
4508 |
msgid "Keep a log of user log in activity on custom login forms (such as WooCommerce & membership plugins)"
|
4509 |
msgstr ""
|
4510 |
|
4511 |
-
#: classes/Views/ToggleAlerts.php:
|
4512 |
msgid "Save Changes"
|
4513 |
msgstr ""
|
4514 |
|
4515 |
-
#: classes/Views/ToggleAlerts.php:
|
4516 |
msgid "Log Level Updated"
|
4517 |
msgstr ""
|
4518 |
|
4519 |
#. translators: Alerts log level.
|
4520 |
-
#: classes/Views/ToggleAlerts.php:
|
4521 |
msgid "The %s log level has been successfully loaded and applied."
|
4522 |
msgstr ""
|
4523 |
|
4524 |
-
#: classes/Views/ToggleAlerts.php:
|
4525 |
msgid "OK"
|
4526 |
msgstr ""
|
4527 |
|
4528 |
-
#: classes/Views/ToggleAlerts.php:
|
4529 |
msgid "Enable File Integrity Scanner"
|
4530 |
msgstr ""
|
4531 |
|
4532 |
-
#: classes/Views/ToggleAlerts.php:
|
4533 |
msgid "The file integrity scanner is switched off. To enable this event it has to be switched on."
|
4534 |
msgstr ""
|
4535 |
|
4536 |
-
#: classes/Views/ToggleAlerts.php:
|
4537 |
msgid "SWITCH ON"
|
4538 |
msgstr ""
|
4539 |
|
4540 |
-
#: classes/Views/ToggleAlerts.php:
|
4541 |
msgid "DISABLE EVENT"
|
4542 |
msgstr ""
|
4543 |
|
@@ -4573,11 +4560,11 @@ msgstr ""
|
|
4573 |
msgid "Load & Run"
|
4574 |
msgstr ""
|
4575 |
|
4576 |
-
#: extensions/search/search-init.php:299, extensions/email-notifications/classes/NotificationBuilder.php:76, extensions/email-notifications/classes/Notifications.php:1844, extensions/email-notifications/classes/Notifications.php:1907, extensions/email-notifications/classes/Notifications.php:1922, extensions/external-db/classes/Connections.php:
|
4577 |
msgid "Delete"
|
4578 |
msgstr ""
|
4579 |
|
4580 |
-
#: extensions/search/search-init.php:300, extensions/external-db/classes/Connections.php:
|
4581 |
msgid "Deleting..."
|
4582 |
msgstr ""
|
4583 |
|
@@ -4701,7 +4688,7 @@ msgstr ""
|
|
4701 |
msgid "Use event specific email template"
|
4702 |
msgstr ""
|
4703 |
|
4704 |
-
#: extensions/email-notifications/classes/AddNotification.php:336, extensions/email-notifications/classes/EditNotification.php:429, extensions/external-db/classes/Connections.php:
|
4705 |
msgid "Name"
|
4706 |
msgstr ""
|
4707 |
|
@@ -4790,186 +4777,186 @@ msgstr ""
|
|
4790 |
msgid "Internal Error. Please reload the page and try again."
|
4791 |
msgstr ""
|
4792 |
|
4793 |
-
#: extensions/email-notifications/classes/Common.php:
|
4794 |
msgid "Title is required."
|
4795 |
msgstr ""
|
4796 |
|
4797 |
-
#: extensions/email-notifications/classes/Common.php:
|
4798 |
msgid "Title is not valid."
|
4799 |
msgstr ""
|
4800 |
|
4801 |
-
#: extensions/email-notifications/classes/Common.php:
|
4802 |
msgid "Please add at least one condition."
|
4803 |
msgstr ""
|
4804 |
|
4805 |
-
#: extensions/email-notifications/classes/Common.php:
|
4806 |
msgid "The form is not valid. Please refresh the page and try again."
|
4807 |
msgstr ""
|
4808 |
|
4809 |
-
#: extensions/email-notifications/classes/Common.php:
|
4810 |
msgid "A trigger's condition must not be longer than 50 characters."
|
4811 |
msgstr ""
|
4812 |
|
4813 |
-
#: extensions/email-notifications/classes/Common.php:
|
4814 |
msgid "Email or Username is not valid."
|
4815 |
msgstr ""
|
4816 |
|
4817 |
-
#: extensions/email-notifications/classes/Common.php:
|
4818 |
msgid "Mobile number is not valid."
|
4819 |
msgstr ""
|
4820 |
|
4821 |
-
#: extensions/email-notifications/classes/Common.php:
|
4822 |
msgid "Email or Username is required."
|
4823 |
msgstr ""
|
4824 |
|
4825 |
-
#: extensions/email-notifications/classes/Common.php:
|
4826 |
msgid "Mobile number is required."
|
4827 |
msgstr ""
|
4828 |
|
4829 |
-
#: extensions/email-notifications/classes/Common.php:
|
4830 |
msgid "Notification could not be saved."
|
4831 |
msgstr ""
|
4832 |
|
4833 |
-
#: extensions/email-notifications/classes/Common.php:
|
4834 |
msgid "Notification successfully saved."
|
4835 |
msgstr ""
|
4836 |
|
4837 |
-
#: extensions/email-notifications/classes/Common.php:
|
4838 |
msgid "Notification Title"
|
4839 |
msgstr ""
|
4840 |
|
4841 |
-
#: extensions/email-notifications/classes/Common.php:
|
4842 |
msgid "Website Name"
|
4843 |
msgstr ""
|
4844 |
|
4845 |
-
#: extensions/email-notifications/classes/Common.php:
|
4846 |
msgid "User Login Name"
|
4847 |
msgstr ""
|
4848 |
|
4849 |
-
#: extensions/email-notifications/classes/Common.php:
|
4850 |
msgid "Role(s) of the User"
|
4851 |
msgstr ""
|
4852 |
|
4853 |
-
#: extensions/email-notifications/classes/Common.php:
|
4854 |
msgid "Event generated on Date and Time"
|
4855 |
msgstr ""
|
4856 |
|
4857 |
-
#: extensions/email-notifications/classes/Common.php:
|
4858 |
msgid "Event Code"
|
4859 |
msgstr ""
|
4860 |
|
4861 |
-
#: extensions/email-notifications/classes/Common.php:
|
4862 |
msgid "Event Severity"
|
4863 |
msgstr ""
|
4864 |
|
4865 |
-
#: extensions/email-notifications/classes/Common.php:
|
4866 |
msgid "Event Message"
|
4867 |
msgstr ""
|
4868 |
|
4869 |
-
#: extensions/email-notifications/classes/Common.php:
|
4870 |
msgid "Event Metadata"
|
4871 |
msgstr ""
|
4872 |
|
4873 |
-
#: extensions/email-notifications/classes/Common.php:
|
4874 |
msgid "Event Links"
|
4875 |
msgstr ""
|
4876 |
|
4877 |
-
#: extensions/email-notifications/classes/Common.php:
|
4878 |
msgid "Client IP Address"
|
4879 |
msgstr ""
|
4880 |
|
4881 |
-
#: extensions/email-notifications/classes/Common.php:
|
4882 |
msgid "Event Object"
|
4883 |
msgstr ""
|
4884 |
|
4885 |
-
#: extensions/email-notifications/classes/Common.php:
|
4886 |
msgid "Notification {title} on website {site} triggered"
|
4887 |
msgstr ""
|
4888 |
|
4889 |
-
#: extensions/email-notifications/classes/Common.php:
|
4890 |
msgid "Notification <strong>{title}</strong> was triggered. Below are the notification details:"
|
4891 |
msgstr ""
|
4892 |
|
4893 |
-
#: extensions/email-notifications/classes/Common.php:
|
4894 |
msgid "Website"
|
4895 |
msgstr ""
|
4896 |
|
4897 |
-
#: extensions/email-notifications/classes/Common.php:
|
4898 |
msgid "Username"
|
4899 |
msgstr ""
|
4900 |
|
4901 |
-
#: extensions/email-notifications/classes/Common.php:
|
4902 |
msgid "User role"
|
4903 |
msgstr ""
|
4904 |
|
4905 |
-
#: extensions/email-notifications/classes/Common.php:
|
4906 |
msgid "Event generated on"
|
4907 |
msgstr ""
|
4908 |
|
4909 |
-
#: extensions/email-notifications/classes/Common.php:
|
4910 |
msgid "These email notifications are sent with <a href=\"http://wpactivitylog.com\">WP Activity Log</a>, the most comprehensive WordPress activity log plugin solution."
|
4911 |
msgstr ""
|
4912 |
|
4913 |
-
#: extensions/email-notifications/classes/Common.php:
|
4914 |
msgid "User/Role"
|
4915 |
msgstr ""
|
4916 |
|
4917 |
-
#: extensions/email-notifications/classes/Common.php:
|
4918 |
msgid "Event type"
|
4919 |
msgstr ""
|
4920 |
|
4921 |
-
#: extensions/email-notifications/classes/Common.php:
|
4922 |
msgid "User Role"
|
4923 |
msgstr ""
|
4924 |
|
4925 |
-
#: extensions/email-notifications/classes/Common.php:
|
4926 |
msgid "Generated On"
|
4927 |
msgstr ""
|
4928 |
|
4929 |
-
#: extensions/email-notifications/classes/Common.php:
|
4930 |
msgid "Monitoring of WordPress and Email Notifications provided by <a href=\"http://wpactivitylog.com\">WP Activity Log, WordPress most comprehensive audit trail plugin</a>."
|
4931 |
msgstr ""
|
4932 |
|
4933 |
-
#: extensions/email-notifications/classes/Common.php:
|
4934 |
msgid "Event"
|
4935 |
msgstr ""
|
4936 |
|
4937 |
-
#: extensions/email-notifications/classes/Common.php:
|
4938 |
msgid "Subject "
|
4939 |
msgstr ""
|
4940 |
|
4941 |
-
#: extensions/email-notifications/classes/Common.php:
|
4942 |
msgid "Body "
|
4943 |
msgstr ""
|
4944 |
|
4945 |
-
#: extensions/email-notifications/classes/Common.php:
|
4946 |
msgid "HTML is accepted. Available template tags:"
|
4947 |
msgstr ""
|
4948 |
|
4949 |
#. translators: singular or plural form of a login total count.
|
4950 |
-
#: extensions/email-notifications/classes/DailyNotification.php:
|
4951 |
msgid "was %d login"
|
4952 |
msgid_plural "were %d logins"
|
4953 |
msgstr[0] ""
|
4954 |
msgstr[1] ""
|
4955 |
|
4956 |
#. translators: a number that is total count of unique users in a login group.
|
4957 |
-
#: extensions/email-notifications/classes/DailyNotification.php:
|
4958 |
msgid "%d unique user"
|
4959 |
msgid_plural "%d unique users"
|
4960 |
msgstr[0] ""
|
4961 |
msgstr[1] ""
|
4962 |
|
4963 |
#. translators: 1 - number of logins. 2 - total unique users
|
4964 |
-
#: extensions/email-notifications/classes/DailyNotification.php:
|
4965 |
msgid "There %1$s on your site today from %2$s. Below is a list of the users and the IP addresses they logged in from:"
|
4966 |
msgstr ""
|
4967 |
|
4968 |
-
#: extensions/email-notifications/classes/DailyNotification.php:
|
4969 |
msgid "There were failed logins due to a wrong password from the following IP addresses:"
|
4970 |
msgstr ""
|
4971 |
|
4972 |
-
#: extensions/email-notifications/classes/DailyNotification.php:
|
4973 |
msgid "There were failed logins due to a wrong username from the following IP addresses:"
|
4974 |
msgstr ""
|
4975 |
|
@@ -5123,7 +5110,7 @@ msgstr ""
|
|
5123 |
msgid "Send"
|
5124 |
msgstr ""
|
5125 |
|
5126 |
-
#: extensions/email-notifications/classes/Notifications.php:881, extensions/external-db/classes/Connections.php:
|
5127 |
msgid "Cancel"
|
5128 |
msgstr ""
|
5129 |
|
@@ -5340,11 +5327,11 @@ msgstr ""
|
|
5340 |
msgid "Bulk actions"
|
5341 |
msgstr ""
|
5342 |
|
5343 |
-
#: extensions/email-notifications/classes/Notifications.php:1842, extensions/email-notifications/classes/Notifications.php:1903, extensions/email-notifications/classes/Notifications.php:1920, extensions/external-db/classes/
|
5344 |
msgid "Enable"
|
5345 |
msgstr ""
|
5346 |
|
5347 |
-
#: extensions/email-notifications/classes/Notifications.php:1843, extensions/email-notifications/classes/Notifications.php:1901, extensions/email-notifications/classes/Notifications.php:1921, extensions/external-db/classes/Mirroring.php:
|
5348 |
msgid "Disable"
|
5349 |
msgstr ""
|
5350 |
|
@@ -5518,7 +5505,7 @@ msgstr ""
|
|
5518 |
msgid "SMS Provider"
|
5519 |
msgstr ""
|
5520 |
|
5521 |
-
#: extensions/email-notifications/classes/SMSProviderSettings.php:148, extensions/email-notifications/classes/SMSProviderSettings.php:146, extensions/external-db/classes/Connections.php:
|
5522 |
msgid "Test"
|
5523 |
msgstr ""
|
5524 |
|
@@ -5585,706 +5572,650 @@ msgstr ""
|
|
5585 |
msgid "The text of the message you want to send, limited to 1600 characters."
|
5586 |
msgstr ""
|
5587 |
|
5588 |
-
#: extensions/external-db/classes/Common.php:1009
|
5589 |
-
msgid "Event Message:"
|
5590 |
-
msgstr ""
|
5591 |
-
|
5592 |
#: extensions/external-db/classes/Connections.php:18, extensions/external-db/classes/Mirroring.php:18, extensions/external-db/classes/Settings.php:17
|
5593 |
msgid "You are not allowed to view this page."
|
5594 |
msgstr ""
|
5595 |
|
5596 |
-
#. translators:
|
5597 |
-
#: extensions/external-db/classes/Connections.php:
|
5598 |
-
msgid "In this section you can %
|
5599 |
msgstr ""
|
5600 |
|
5601 |
-
#: extensions/external-db/classes/Connections.php:
|
5602 |
-
msgid "create and configure databases"
|
5603 |
msgstr ""
|
5604 |
|
5605 |
#: extensions/external-db/classes/Connections.php:89
|
5606 |
msgid "Create a Connection"
|
5607 |
msgstr ""
|
5608 |
|
5609 |
-
#: extensions/external-db/classes/Connections.php:
|
5610 |
msgid "Connections"
|
5611 |
msgstr ""
|
5612 |
|
5613 |
-
#: extensions/external-db/classes/Connections.php:
|
5614 |
msgid "Used for"
|
5615 |
msgstr ""
|
5616 |
|
5617 |
-
#: extensions/external-db/classes/Connections.php:
|
5618 |
msgid "Configure"
|
5619 |
msgstr ""
|
5620 |
|
5621 |
-
#: extensions/external-db/classes/Connections.php:
|
5622 |
msgid "Send a test message"
|
5623 |
msgstr ""
|
5624 |
|
5625 |
-
#: extensions/external-db/classes/Connections.php:
|
5626 |
msgid "No connections so far."
|
5627 |
msgstr ""
|
5628 |
|
5629 |
-
#: extensions/external-db/classes/Connections.php:
|
5630 |
-
msgid "
|
5631 |
-
msgstr ""
|
5632 |
-
|
5633 |
-
#: extensions/external-db/classes/Connections.php:176, extensions/external-db/classes/Mirroring.php:253
|
5634 |
-
msgid "Step 2"
|
5635 |
-
msgstr ""
|
5636 |
-
|
5637 |
-
#: extensions/external-db/classes/Connections.php:177, extensions/external-db/classes/Mirroring.php:254
|
5638 |
-
msgid "Step 3"
|
5639 |
-
msgstr ""
|
5640 |
-
|
5641 |
-
#: extensions/external-db/classes/Connections.php:184
|
5642 |
-
msgid "Select the type of connection"
|
5643 |
-
msgstr ""
|
5644 |
-
|
5645 |
-
#: extensions/external-db/classes/Connections.php:185
|
5646 |
-
msgid "Select the type of connection you would like to setup."
|
5647 |
-
msgstr ""
|
5648 |
-
|
5649 |
-
#: extensions/external-db/classes/Connections.php:189
|
5650 |
-
msgid "Type of Connection"
|
5651 |
msgstr ""
|
5652 |
|
5653 |
#: extensions/external-db/classes/Connections.php:193
|
5654 |
-
msgid "
|
5655 |
-
msgstr ""
|
5656 |
-
|
5657 |
-
#: extensions/external-db/classes/Connections.php:194
|
5658 |
-
msgid "Syslog Server"
|
5659 |
-
msgstr ""
|
5660 |
-
|
5661 |
-
#: extensions/external-db/classes/Connections.php:195, extensions/external-db/classes/Mirroring.php:102
|
5662 |
-
msgid "Slack"
|
5663 |
-
msgstr ""
|
5664 |
-
|
5665 |
-
#: extensions/external-db/classes/Connections.php:196, extensions/external-db/classes/Mirroring.php:107
|
5666 |
-
msgid "Papertrail"
|
5667 |
-
msgstr ""
|
5668 |
-
|
5669 |
-
#: extensions/external-db/classes/Connections.php:208
|
5670 |
-
msgid "Name the connection"
|
5671 |
-
msgstr ""
|
5672 |
-
|
5673 |
-
#: extensions/external-db/classes/Connections.php:209
|
5674 |
-
msgid "Please specify a friendly name for the connection. Connection names can be 25 characters long and can only contain letters, numbers and underscores."
|
5675 |
-
msgstr ""
|
5676 |
-
|
5677 |
-
#: extensions/external-db/classes/Connections.php:213
|
5678 |
-
msgid "Save Connection"
|
5679 |
msgstr ""
|
5680 |
|
5681 |
-
#: extensions/external-db/classes/Connections.php:
|
5682 |
msgid "Configure the connection"
|
5683 |
msgstr ""
|
5684 |
|
5685 |
-
#: extensions/external-db/classes/Connections.php:
|
5686 |
msgid "Configure the connection details."
|
5687 |
msgstr ""
|
5688 |
|
5689 |
-
#: extensions/external-db/classes/Connections.php:
|
5690 |
-
msgid "
|
5691 |
-
msgstr ""
|
5692 |
-
|
5693 |
-
#: extensions/external-db/classes/Connections.php:256
|
5694 |
-
msgid "Configure Connection → "
|
5695 |
-
msgstr ""
|
5696 |
-
|
5697 |
-
#: extensions/external-db/classes/Connections.php:487
|
5698 |
-
msgid "Bot Name"
|
5699 |
-
msgstr ""
|
5700 |
-
|
5701 |
-
#: extensions/external-db/classes/Connections.php:492
|
5702 |
-
msgid "* Invalid Bot Name"
|
5703 |
-
msgstr ""
|
5704 |
-
|
5705 |
-
#: extensions/external-db/classes/Connections.php:493
|
5706 |
-
msgid "The name to be used in the slack channel for all the WordPress activity log events sent from the plugin."
|
5707 |
-
msgstr ""
|
5708 |
-
|
5709 |
-
#: extensions/external-db/classes/Connections.php:498
|
5710 |
-
msgid "WebHook URL"
|
5711 |
-
msgstr ""
|
5712 |
-
|
5713 |
-
#: extensions/external-db/classes/Connections.php:503
|
5714 |
-
msgid "* Invalid WebHook URL"
|
5715 |
-
msgstr ""
|
5716 |
-
|
5717 |
-
#. translators: Slack help HTML link.
|
5718 |
-
#: extensions/external-db/classes/Connections.php:507
|
5719 |
-
msgid "If you are not familiar with incoming WebHooks for Slack please refer to %s."
|
5720 |
-
msgstr ""
|
5721 |
-
|
5722 |
-
#: extensions/external-db/classes/Connections.php:507
|
5723 |
-
msgid "Slack help"
|
5724 |
-
msgstr ""
|
5725 |
-
|
5726 |
-
#: extensions/external-db/classes/Connections.php:447
|
5727 |
-
msgid "Syslog Location"
|
5728 |
-
msgstr ""
|
5729 |
-
|
5730 |
-
#: extensions/external-db/classes/Connections.php:453
|
5731 |
-
msgid "Write to local syslog file"
|
5732 |
-
msgstr ""
|
5733 |
-
|
5734 |
-
#: extensions/external-db/classes/Connections.php:458
|
5735 |
-
msgid "Send messages to remote syslog server"
|
5736 |
-
msgstr ""
|
5737 |
-
|
5738 |
-
#: extensions/external-db/classes/Connections.php:462
|
5739 |
-
msgid "IP Address / Hostname"
|
5740 |
-
msgstr ""
|
5741 |
-
|
5742 |
-
#: extensions/external-db/classes/Connections.php:465
|
5743 |
-
msgid "* Invalid IP/Hostname"
|
5744 |
-
msgstr ""
|
5745 |
-
|
5746 |
-
#: extensions/external-db/classes/Connections.php:469
|
5747 |
-
msgid "Port"
|
5748 |
-
msgstr ""
|
5749 |
-
|
5750 |
-
#: extensions/external-db/classes/Connections.php:472
|
5751 |
-
msgid "* Invalid Port"
|
5752 |
-
msgstr ""
|
5753 |
-
|
5754 |
-
#: extensions/external-db/classes/Connections.php:409
|
5755 |
-
msgid "Destination"
|
5756 |
-
msgstr ""
|
5757 |
-
|
5758 |
-
#: extensions/external-db/classes/Connections.php:413
|
5759 |
-
msgid "* Invalid Papertrail Destination"
|
5760 |
-
msgstr ""
|
5761 |
-
|
5762 |
-
#: extensions/external-db/classes/Connections.php:418
|
5763 |
-
msgid "Specify your destination. You can find your Papertrail Destination in the %s section of your Papertrail account page. It should have the following format: logs4.papertrailapp.com:54321"
|
5764 |
-
msgstr ""
|
5765 |
-
|
5766 |
-
#: extensions/external-db/classes/Connections.php:419
|
5767 |
-
msgid "Log Destinations"
|
5768 |
-
msgstr ""
|
5769 |
-
|
5770 |
-
#: extensions/external-db/classes/Connections.php:427
|
5771 |
-
msgid "Colorization"
|
5772 |
msgstr ""
|
5773 |
|
5774 |
-
#: extensions/external-db/classes/Connections.php:
|
5775 |
msgid "Database Name"
|
5776 |
msgstr ""
|
5777 |
|
5778 |
-
#: extensions/external-db/classes/Connections.php:
|
5779 |
msgid "Specify the name of the database where you will store the WordPress activity log."
|
5780 |
msgstr ""
|
5781 |
|
5782 |
-
#: extensions/external-db/classes/Connections.php:
|
5783 |
msgid "Database User"
|
5784 |
msgstr ""
|
5785 |
|
5786 |
-
#: extensions/external-db/classes/Connections.php:
|
5787 |
msgid "Specify the username to be used to connect to the database."
|
5788 |
msgstr ""
|
5789 |
|
5790 |
-
#: extensions/external-db/classes/Connections.php:
|
5791 |
msgid "Database Password"
|
5792 |
msgstr ""
|
5793 |
|
5794 |
-
#: extensions/external-db/classes/Connections.php:
|
5795 |
msgid "Specify the password each time you want to submit new changes. For security reasons, the plugin does not store the password in this form."
|
5796 |
msgstr ""
|
5797 |
|
5798 |
-
#: extensions/external-db/classes/Connections.php:
|
5799 |
msgid "Database Hostname"
|
5800 |
msgstr ""
|
5801 |
|
5802 |
-
#: extensions/external-db/classes/Connections.php:
|
5803 |
msgid "Specify the hostname or IP address of the database server."
|
5804 |
msgstr ""
|
5805 |
|
5806 |
-
#: extensions/external-db/classes/Connections.php:
|
5807 |
msgid "Database Base Prefix"
|
5808 |
msgstr ""
|
5809 |
|
5810 |
-
#: extensions/external-db/classes/Connections.php:
|
5811 |
msgid "Specify a prefix for the database tables of the activity log. Ideally this prefix should be different from the one you use for WordPress so it is not guessable."
|
5812 |
msgstr ""
|
5813 |
|
5814 |
-
#: extensions/external-db/classes/Connections.php:
|
5815 |
msgid "Use website URL as table prefix"
|
5816 |
msgstr ""
|
5817 |
|
5818 |
-
#: extensions/external-db/classes/Connections.php:
|
5819 |
msgid "SSL/TLS"
|
5820 |
msgstr ""
|
5821 |
|
5822 |
-
#: extensions/external-db/classes/Connections.php:
|
5823 |
msgid "Enable to use SSL/TLS to connect with the MySQL server."
|
5824 |
msgstr ""
|
5825 |
|
5826 |
-
#: extensions/external-db/classes/Connections.php:
|
5827 |
msgid "Client Certificate"
|
5828 |
msgstr ""
|
5829 |
|
5830 |
-
#: extensions/external-db/classes/Connections.php:
|
|
|
|
|
|
|
|
|
5831 |
msgid "CA SSL Certificate (--ssl-ca)"
|
5832 |
msgstr ""
|
5833 |
|
5834 |
-
#: extensions/external-db/classes/Connections.php:
|
5835 |
msgid "Server SSL Certificate (--ssl-cert)"
|
5836 |
msgstr ""
|
5837 |
|
5838 |
-
#: extensions/external-db/classes/Connections.php:
|
5839 |
msgid "Client Certificate (--ssl-key)"
|
5840 |
msgstr ""
|
5841 |
|
5842 |
-
#: extensions/external-db/classes/Connections.php:
|
5843 |
msgid "Connection Name"
|
5844 |
msgstr ""
|
5845 |
|
5846 |
-
#: extensions/external-db/classes/Connections.php:
|
5847 |
-
msgid "
|
5848 |
msgstr ""
|
5849 |
|
5850 |
-
#: extensions/external-db/classes/Connections.php:
|
5851 |
-
msgid "
|
5852 |
msgstr ""
|
5853 |
|
5854 |
-
#: extensions/external-db/classes/Connections.php:
|
5855 |
-
msgid "
|
5856 |
msgstr ""
|
5857 |
|
5858 |
-
#: extensions/external-db/classes/Connections.php:
|
5859 |
-
msgid "Connection
|
5860 |
msgstr ""
|
5861 |
|
5862 |
-
#: extensions/external-db/classes/Connections.php:
|
5863 |
-
msgid "
|
5864 |
msgstr ""
|
5865 |
|
5866 |
-
#: extensions/external-db/classes/Connections.php:
|
5867 |
-
msgid "
|
5868 |
msgstr ""
|
5869 |
|
5870 |
-
#: extensions/external-db/classes/Connections.php:
|
5871 |
-
msgid "
|
5872 |
msgstr ""
|
5873 |
|
5874 |
-
#: extensions/external-db/classes/Connections.php:
|
5875 |
-
msgid "
|
5876 |
msgstr ""
|
5877 |
|
5878 |
-
#: extensions/external-db/classes/Connections.php:
|
5879 |
-
msgid "
|
5880 |
msgstr ""
|
5881 |
|
5882 |
-
#: extensions/external-db/classes/Connections.php:
|
5883 |
-
msgid "
|
5884 |
msgstr ""
|
5885 |
|
5886 |
-
#: extensions/external-db/classes/Connections.php:
|
5887 |
-
msgid "
|
5888 |
msgstr ""
|
5889 |
|
5890 |
-
#: extensions/external-db/classes/Connections.php:
|
5891 |
-
msgid "
|
5892 |
msgstr ""
|
5893 |
|
5894 |
-
#: extensions/external-db/classes/Connections.php:
|
5895 |
-
msgid "
|
5896 |
msgstr ""
|
5897 |
|
5898 |
-
#: extensions/external-db/classes/Connections.php:
|
5899 |
-
msgid "
|
5900 |
msgstr ""
|
5901 |
|
5902 |
-
#: extensions/external-db/classes/Connections.php:
|
5903 |
-
msgid "
|
5904 |
msgstr ""
|
5905 |
|
5906 |
-
#: extensions/external-db/classes/Connections.php:
|
5907 |
-
msgid "
|
5908 |
msgstr ""
|
5909 |
|
5910 |
-
#: extensions/external-db/classes/Connections.php:
|
5911 |
-
msgid "
|
5912 |
msgstr ""
|
5913 |
|
5914 |
-
#: extensions/external-db/classes/
|
5915 |
-
msgid "
|
5916 |
msgstr ""
|
5917 |
|
5918 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5919 |
-
msgid "
|
5920 |
msgstr ""
|
5921 |
|
5922 |
-
#: extensions/external-db/classes/
|
5923 |
-
msgid "
|
5924 |
msgstr ""
|
5925 |
|
5926 |
-
#: extensions/external-db/classes/
|
5927 |
-
msgid "
|
5928 |
msgstr ""
|
5929 |
|
5930 |
-
#: extensions/external-db/classes/
|
5931 |
-
msgid "
|
5932 |
msgstr ""
|
5933 |
|
5934 |
-
#: extensions/external-db/classes/
|
5935 |
-
msgid "
|
5936 |
msgstr ""
|
5937 |
|
5938 |
-
#: extensions/external-db/classes/
|
5939 |
-
msgid "
|
5940 |
msgstr ""
|
5941 |
|
5942 |
-
#: extensions/external-db/classes/
|
5943 |
-
msgid "
|
5944 |
msgstr ""
|
5945 |
|
5946 |
-
#: extensions/external-db/classes/
|
5947 |
-
msgid "
|
5948 |
msgstr ""
|
5949 |
|
5950 |
-
#: extensions/external-db/classes/
|
5951 |
-
msgid "
|
5952 |
msgstr ""
|
5953 |
|
5954 |
-
|
5955 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5956 |
msgstr ""
|
5957 |
|
5958 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5959 |
-
msgid "
|
5960 |
msgstr ""
|
5961 |
|
5962 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5963 |
msgid "No mirrors so far."
|
5964 |
msgstr ""
|
5965 |
|
5966 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5967 |
-
msgid "
|
5968 |
msgstr ""
|
5969 |
|
5970 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5971 |
-
msgid "
|
5972 |
msgstr ""
|
5973 |
|
5974 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5975 |
-
msgid "
|
|
|
|
|
|
|
|
|
5976 |
msgstr ""
|
5977 |
|
5978 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5979 |
-
msgid "
|
5980 |
msgstr ""
|
5981 |
|
5982 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5983 |
-
msgid "
|
5984 |
msgstr ""
|
5985 |
|
5986 |
-
#: extensions/external-db/classes/Mirroring.php:
|
|
|
|
|
|
|
|
|
5987 |
msgid "Start once configured?"
|
5988 |
msgstr ""
|
5989 |
|
5990 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5991 |
msgid "Tick this checkbox to enable the mirror and start sending data once set up."
|
5992 |
msgstr ""
|
5993 |
|
5994 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5995 |
msgid "Configure Filtering"
|
5996 |
msgstr ""
|
5997 |
|
5998 |
-
#: extensions/external-db/classes/Mirroring.php:
|
5999 |
msgid "Configure any filtering you’d like to apply to this mirroring connection:"
|
6000 |
msgstr ""
|
6001 |
|
6002 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6003 |
msgid "Save Mirror"
|
6004 |
msgstr ""
|
6005 |
|
6006 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6007 |
msgid "No mirror name specified!"
|
6008 |
msgstr ""
|
6009 |
|
6010 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6011 |
msgid "Configure Mirror → "
|
6012 |
msgstr ""
|
6013 |
|
6014 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6015 |
msgid "Configure the mirror"
|
6016 |
msgstr ""
|
6017 |
|
6018 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6019 |
msgid "Configure the mirror details."
|
6020 |
msgstr ""
|
6021 |
|
6022 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6023 |
msgid "Mirror Events"
|
6024 |
msgstr ""
|
6025 |
|
6026 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6027 |
msgid "Send all events"
|
6028 |
msgstr ""
|
6029 |
|
6030 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6031 |
msgid "Only send events with these IDs:"
|
6032 |
msgstr ""
|
6033 |
|
6034 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6035 |
-
msgid "Send all events BUT those with these IDs:"
|
6036 |
msgstr ""
|
6037 |
|
6038 |
#. translators: Events and Event IDs hyperlink.
|
6039 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6040 |
msgid "Refer to the %s for more information."
|
6041 |
msgstr ""
|
6042 |
|
6043 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6044 |
msgid "list of events and events IDs"
|
6045 |
msgstr ""
|
6046 |
|
6047 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6048 |
msgid "Connection"
|
6049 |
msgstr ""
|
6050 |
|
6051 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6052 |
msgid "Select a connection"
|
6053 |
msgstr ""
|
6054 |
|
6055 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6056 |
-
msgid "Mirror
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6057 |
msgstr ""
|
6058 |
|
6059 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6060 |
msgid "* Invalid Mirror Name"
|
6061 |
msgstr ""
|
6062 |
|
6063 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6064 |
msgid "Mirroring Wizard"
|
6065 |
msgstr ""
|
6066 |
|
6067 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6068 |
msgid "Enabling..."
|
6069 |
msgstr ""
|
6070 |
|
6071 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6072 |
msgid "Disabling..."
|
6073 |
msgstr ""
|
6074 |
|
6075 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6076 |
msgid "Running..."
|
6077 |
msgstr ""
|
6078 |
|
6079 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6080 |
msgid "Mirror Complete!"
|
6081 |
msgstr ""
|
6082 |
|
6083 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6084 |
msgid "Failed!"
|
6085 |
msgstr ""
|
6086 |
|
6087 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6088 |
msgid "Are you sure that you want to delete this mirror?"
|
6089 |
msgstr ""
|
6090 |
|
6091 |
-
#: extensions/external-db/classes/Mirroring.php:
|
6092 |
msgid "Select Event Code(s)"
|
6093 |
msgstr ""
|
6094 |
|
6095 |
-
#: extensions/external-db/classes/
|
6096 |
-
msgid "
|
6097 |
msgstr ""
|
6098 |
|
6099 |
-
#: extensions/external-db/classes/Settings.php:
|
6100 |
-
msgid "
|
6101 |
msgstr ""
|
6102 |
|
6103 |
-
#: extensions/external-db/classes/Settings.php:
|
6104 |
-
msgid "
|
6105 |
msgstr ""
|
6106 |
|
6107 |
-
#: extensions/external-db/classes/Settings.php:
|
6108 |
-
msgid "
|
6109 |
msgstr ""
|
6110 |
|
6111 |
-
#: extensions/external-db/classes/Settings.php:
|
6112 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6113 |
msgstr ""
|
6114 |
|
6115 |
-
#: extensions/external-db/classes/Settings.php:
|
6116 |
msgid "Please do not close this window while migrating events."
|
6117 |
msgstr ""
|
6118 |
|
6119 |
#. translators: 1 is the help type being linked
|
6120 |
#. translators: 1 is the help type being linked
|
6121 |
-
#: extensions/external-db/classes/Settings.php:
|
6122 |
msgid "Read more on %1$s."
|
6123 |
msgstr ""
|
6124 |
|
6125 |
-
#: extensions/external-db/classes/Settings.php:
|
6126 |
msgid "external storage for activity logs"
|
6127 |
msgstr ""
|
6128 |
|
6129 |
-
#: extensions/external-db/classes/Settings.php:
|
6130 |
msgid "In this section you can configure the plugin to store the WordPress activity log in an external storage rather than the WordPress database. This could be another database on a remote server."
|
6131 |
msgstr ""
|
6132 |
|
6133 |
-
#: extensions/external-db/classes/Settings.php:
|
6134 |
msgid "Store WordPress Activity Log in this External Storage"
|
6135 |
msgstr ""
|
6136 |
|
6137 |
-
#: extensions/external-db/classes/Settings.php:
|
6138 |
msgid "Use buffer"
|
6139 |
msgstr ""
|
6140 |
|
6141 |
-
#: extensions/external-db/classes/Settings.php:
|
6142 |
msgid "Send the events through the buffer so if the connection to the external database is slow the performance of the website is not affected."
|
6143 |
msgstr ""
|
6144 |
|
6145 |
-
#: extensions/external-db/classes/Settings.php:
|
6146 |
msgid "When the buffer is enabled events are sent to the database every 10 minutes, so the activity log is not updated in real time. Use the button below to clear the buffer and send the events now."
|
6147 |
msgstr ""
|
6148 |
|
6149 |
-
#: extensions/external-db/classes/Settings.php:
|
6150 |
msgid "Send Events to Database"
|
6151 |
msgstr ""
|
6152 |
|
6153 |
-
#: extensions/external-db/classes/Settings.php:
|
6154 |
msgid "Current Connection Details"
|
6155 |
msgstr ""
|
6156 |
|
6157 |
-
#: extensions/external-db/classes/Settings.php:
|
|
|
|
|
|
|
|
|
6158 |
msgid "Currently Connected to database"
|
6159 |
msgstr ""
|
6160 |
|
6161 |
-
#: extensions/external-db/classes/Settings.php:
|
6162 |
msgid "Save & Test Changes"
|
6163 |
msgstr ""
|
6164 |
|
6165 |
-
#: extensions/external-db/classes/Settings.php:
|
6166 |
msgid "Test Connection"
|
6167 |
msgstr ""
|
6168 |
|
6169 |
-
#: extensions/external-db/classes/Settings.php:
|
6170 |
msgid "Migrate Events to External Storage"
|
6171 |
msgstr ""
|
6172 |
|
6173 |
-
#: extensions/external-db/classes/Settings.php:
|
6174 |
msgid "Migrate existing WordPress Security Events from the WordPress database to the new external database."
|
6175 |
msgstr ""
|
6176 |
|
6177 |
-
#: extensions/external-db/classes/Settings.php:
|
6178 |
msgid "Migrate Events to WordPress Database"
|
6179 |
msgstr ""
|
6180 |
|
6181 |
-
#: extensions/external-db/classes/Settings.php:
|
6182 |
msgid "Remove the external database and start using the WordPress database again. In the process the events will be automatically migrated to the WordPress database."
|
6183 |
msgstr ""
|
6184 |
|
6185 |
-
#: extensions/external-db/classes/Settings.php:
|
6186 |
msgid "archiving activity log data"
|
6187 |
msgstr ""
|
6188 |
|
6189 |
-
#: extensions/external-db/classes/Settings.php:
|
6190 |
msgid "In this section you can configure the archiving of old events to an archive database. Archives events can still be accessed and are included in search results and reports."
|
6191 |
msgstr ""
|
6192 |
|
6193 |
-
#: extensions/external-db/classes/Settings.php:
|
6194 |
msgid "Archive the WordPress Activity Log to this Database"
|
6195 |
msgstr ""
|
6196 |
|
6197 |
-
#: extensions/external-db/classes/Settings.php:
|
6198 |
msgid "Archive events that are older than"
|
6199 |
msgstr ""
|
6200 |
|
6201 |
-
#: extensions/external-db/classes/Settings.php:
|
6202 |
msgid "Archiving Options"
|
6203 |
msgstr ""
|
6204 |
|
6205 |
-
#: extensions/external-db/classes/Settings.php:
|
6206 |
msgid "Archive events older than"
|
6207 |
msgstr ""
|
6208 |
|
6209 |
-
#: extensions/external-db/classes/Settings.php:
|
6210 |
msgid "months"
|
6211 |
msgstr ""
|
6212 |
|
6213 |
-
#: extensions/external-db/classes/Settings.php:
|
6214 |
msgid "years"
|
6215 |
msgstr ""
|
6216 |
|
6217 |
-
#: extensions/external-db/classes/Settings.php:
|
6218 |
msgid "The configured archiving options will override the Security Events Pruning settings configured in the plugin’s settings."
|
6219 |
msgstr ""
|
6220 |
|
6221 |
-
#: extensions/external-db/classes/Settings.php:
|
6222 |
msgid "WordPress Activity Log Data Retention"
|
6223 |
msgstr ""
|
6224 |
|
6225 |
-
#: extensions/external-db/classes/Settings.php:
|
6226 |
msgid "Once you configure archiving these data retention settings will be used instead of the ones configured in the plugin's general settings."
|
6227 |
msgstr ""
|
6228 |
|
6229 |
-
#: extensions/external-db/classes/Settings.php:
|
6230 |
msgid "Execute Archiving Now"
|
6231 |
msgstr ""
|
6232 |
|
6233 |
-
#: extensions/external-db/classes/Settings.php:
|
6234 |
msgid "Reset Archiving Settings"
|
6235 |
msgstr ""
|
6236 |
|
6237 |
-
#: extensions/external-db/classes/Settings.php:
|
6238 |
msgid "Click the button below to disable archiving and reset the settings to no archiving. Note that the archived data will not be deleted."
|
6239 |
msgstr ""
|
6240 |
|
6241 |
-
#: extensions/external-db/classes/Settings.php:
|
6242 |
msgid "Disable Archiving & Reset Settings"
|
6243 |
msgstr ""
|
6244 |
|
6245 |
-
#: extensions/external-db/classes/Settings.php:
|
6246 |
msgid "Run the Archiving Process Every"
|
6247 |
msgstr ""
|
6248 |
|
6249 |
-
#: extensions/external-db/classes/Settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6250 |
msgid "Stop Archiving"
|
6251 |
msgstr ""
|
6252 |
|
6253 |
-
#: extensions/external-db/classes/Settings.php:
|
6254 |
msgid "Attention!"
|
6255 |
msgstr ""
|
6256 |
|
6257 |
#. translators: %1$s: Alerts Pruning Period, %2$s: Alerts Archiving Period
|
6258 |
-
#: extensions/external-db/classes/Settings.php:
|
6259 |
msgid "The activity log retention setting is configured to delete events older than %1$s. This period should be longer than the configured %2$s archiving period otherwise events will be deleted and not archived."
|
6260 |
msgstr ""
|
6261 |
|
6262 |
-
#: extensions/external-db/classes/Settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6263 |
msgid "Resetting..."
|
6264 |
msgstr ""
|
6265 |
|
6266 |
-
#: extensions/external-db/classes/Settings.php:
|
6267 |
msgid "Resetting Failed!"
|
6268 |
msgstr ""
|
6269 |
|
6270 |
#. translators: %d: Number of events.
|
6271 |
-
#: extensions/external-db/classes/Settings.php:
|
6272 |
msgid " So far %d events have been migrated."
|
6273 |
msgstr ""
|
6274 |
|
6275 |
-
#: extensions/external-db/classes/Settings.php:
|
6276 |
msgid "WordPress security events successfully migrated to WordPress database."
|
6277 |
msgstr ""
|
6278 |
|
6279 |
-
#: extensions/external-db/classes/Settings.php:
|
6280 |
msgid "WordPress security events successfully migrated to the external database."
|
6281 |
msgstr ""
|
6282 |
|
6283 |
-
#: extensions/external-db/classes/Settings.php:
|
6284 |
msgid "No events to migrate."
|
6285 |
msgstr ""
|
6286 |
|
6287 |
-
#: extensions/external-db/classes/Settings.php:
|
6288 |
msgid "Mirror not found."
|
6289 |
msgstr ""
|
6290 |
|
@@ -6720,6 +6651,10 @@ msgstr ""
|
|
6720 |
msgid "Report Name"
|
6721 |
msgstr ""
|
6722 |
|
|
|
|
|
|
|
|
|
6723 |
#: extensions/reports/inc/wsal-reporting-view.inc.php:1434
|
6724 |
msgid "Daily"
|
6725 |
msgstr ""
|
@@ -6848,7 +6783,7 @@ msgstr ""
|
|
6848 |
msgid "Name can only be 12 characters long and only letters, numbers and underscore are allowed."
|
6849 |
msgstr ""
|
6850 |
|
6851 |
-
#: extensions/search/classes/FilterManager.php:405, extensions/user-sessions/classes/View/Settings.php:96, extensions/user-sessions/classes/View/Options/Policies.php:
|
6852 |
msgid "Save"
|
6853 |
msgstr ""
|
6854 |
|
@@ -7009,7 +6944,7 @@ msgstr ""
|
|
7009 |
msgid "Users sessions termination is in progress. Please wait..."
|
7010 |
msgstr ""
|
7011 |
|
7012 |
-
#: extensions/user-sessions/classes/Views.php:431, extensions/reports/classes/Views/Main.php:
|
7013 |
msgid "You do not have sufficient permissions."
|
7014 |
msgstr ""
|
7015 |
|
@@ -7037,6 +6972,184 @@ msgstr ""
|
|
7037 |
msgid "Nonce check failed."
|
7038 |
msgstr ""
|
7039 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7040 |
#: extensions/reports/classes/Views/Main.php:72
|
7041 |
msgid "Reporting"
|
7042 |
msgstr ""
|
@@ -7053,19 +7166,19 @@ msgstr ""
|
|
7053 |
msgid "There are no alerts that match your filtering criteria."
|
7054 |
msgstr ""
|
7055 |
|
7056 |
-
#: extensions/reports/classes/Views/Main.php:
|
7057 |
msgid " Generating reports. Please do not close this window."
|
7058 |
msgstr ""
|
7059 |
|
7060 |
-
#: extensions/reports/classes/Views/Main.php:
|
7061 |
msgid "To generate a report or configure automated scheduled report please contact the administrator of this multisite network on "
|
7062 |
msgstr ""
|
7063 |
|
7064 |
-
#: extensions/reports/classes/Views/Main.php:
|
7065 |
msgid "The %s directory which the Reports plugin uses to create reports in was either not found or is not accessible."
|
7066 |
msgstr ""
|
7067 |
|
7068 |
-
#: extensions/reports/classes/Views/Main.php:
|
7069 |
msgid "In order for the plugin to function, the directory %1$s must be created and the plugin should have access to write to this directory, so please configure the following permissions: 0755. If you have any questions or need further assistance please %2$s"
|
7070 |
msgstr ""
|
7071 |
|
@@ -7141,7 +7254,7 @@ msgstr ""
|
|
7141 |
msgid "Select a user role to filter"
|
7142 |
msgstr ""
|
7143 |
|
7144 |
-
#: extensions/user-sessions/classes/Sensors/UserSessionsTracking.php:307, extensions/user-sessions/classes/View/Options/Policies.php:
|
7145 |
msgid "ERROR: Your session was blocked with the <a href=\"https://en-gb.wordpress.org/plugins/wp-security-audit-log\" target=\"_blank\">WP Activity Log plugin</a> because there is already another user logged in with the same username. Please contact the site administrator for more information."
|
7146 |
msgstr ""
|
7147 |
|
@@ -7250,119 +7363,119 @@ msgstr ""
|
|
7250 |
msgid "Main Policies"
|
7251 |
msgstr ""
|
7252 |
|
7253 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7254 |
msgid "Do not enforce policies on users with this role"
|
7255 |
msgstr ""
|
7256 |
|
7257 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7258 |
msgid "Inherit the sessions policies"
|
7259 |
msgstr ""
|
7260 |
|
7261 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7262 |
msgid "Users sessions policies"
|
7263 |
msgstr ""
|
7264 |
|
7265 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7266 |
msgid "Use the settings below to configure the policies to manage the users' sessions policies. These policies are automatically inherited by all profiles. However, you can disable the inheritance or configure different policies for specific roles in the role's tab."
|
7267 |
msgstr ""
|
7268 |
|
7269 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7270 |
msgid "Enable session policies"
|
7271 |
msgstr ""
|
7272 |
|
7273 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7274 |
msgid "By default WordPress does not limit how many times the same user can connect simultaneously. So two different users can login at the same time using the same username. Use the settings below to limit and also block simultaneous connections for the same username."
|
7275 |
msgstr ""
|
7276 |
|
7277 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7278 |
msgid "Do you want to allow two or more people to login simultaneously with the same username?"
|
7279 |
msgstr ""
|
7280 |
|
7281 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7282 |
msgid "By allowing multiple sessions two or more people can login to WordPress using the same username. By blocking them, once a person is logged in with a username, if another person tries to login with the same username they will be blocked."
|
7283 |
msgstr ""
|
7284 |
|
7285 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7286 |
msgid "Multiple Sessions"
|
7287 |
msgstr ""
|
7288 |
|
7289 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7290 |
msgid "Allow one session only"
|
7291 |
msgstr ""
|
7292 |
|
7293 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7294 |
msgid "Allow one session only and override current session"
|
7295 |
msgstr ""
|
7296 |
|
7297 |
#. translators: Number of sessions input tag
|
7298 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7299 |
msgid "Allow up to %s sessions and block the rest"
|
7300 |
msgstr ""
|
7301 |
|
7302 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7303 |
msgid "Configure a Blocked Session Notification for Users"
|
7304 |
msgstr ""
|
7305 |
|
7306 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7307 |
msgid "This error message is shown to users when they try to login with a username that already has a session and their session is blocked. You can change this message by editing the text in the below placeholder. Only <a href> HTML code is allowed."
|
7308 |
msgstr ""
|
7309 |
|
7310 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7311 |
msgid "Blocked Sessions Error"
|
7312 |
msgstr ""
|
7313 |
|
7314 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7315 |
msgid "Do you want to terminate idle sessions automatically?"
|
7316 |
msgstr ""
|
7317 |
|
7318 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7319 |
msgid "If a session has been idle for more than the configured number of hours, it will be automatically destroyed by the plugin."
|
7320 |
msgstr ""
|
7321 |
|
7322 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7323 |
msgid "Terminate Idle Sessions"
|
7324 |
msgstr ""
|
7325 |
|
7326 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7327 |
msgid "1"
|
7328 |
msgstr ""
|
7329 |
|
7330 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7331 |
msgid "4"
|
7332 |
msgstr ""
|
7333 |
|
7334 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7335 |
msgid "8"
|
7336 |
msgstr ""
|
7337 |
|
7338 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7339 |
msgid "12"
|
7340 |
msgstr ""
|
7341 |
|
7342 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7343 |
msgid "24"
|
7344 |
msgstr ""
|
7345 |
|
7346 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7347 |
msgid "32"
|
7348 |
msgstr ""
|
7349 |
|
7350 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7351 |
msgid "48"
|
7352 |
msgstr ""
|
7353 |
|
7354 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7355 |
msgid "terminate sessions if they have been idle for more than"
|
7356 |
msgstr ""
|
7357 |
|
7358 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7359 |
msgid " hour"
|
7360 |
msgstr ""
|
7361 |
|
7362 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7363 |
msgid " hours"
|
7364 |
msgstr ""
|
7365 |
|
7366 |
-
#: extensions/user-sessions/classes/View/Options/Policies.php:
|
7367 |
msgid " seconds (Testing)"
|
7368 |
msgstr ""
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
+
#: defaults.php:173
|
20 |
msgid "Critical severity events."
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: defaults.php:175
|
24 |
msgid "High severity events."
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: defaults.php:177
|
28 |
msgid "Medium severity events."
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: defaults.php:179
|
32 |
msgid "Low severity events."
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: defaults.php:181
|
36 |
msgid "Informational events."
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: defaults.php:186
|
40 |
msgid "Users Logins & Sessions Events"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: defaults.php:187, extensions/email-notifications/classes/Notifications.php:1265
|
44 |
msgid "User Activity"
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: defaults.php:191
|
48 |
msgid "User logged in"
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: defaults.php:192
|
52 |
msgid "User logged in."
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: defaults.php:201
|
56 |
msgid "User logged out"
|
57 |
msgstr ""
|
58 |
|
59 |
+
#: defaults.php:202
|
60 |
msgid "User logged out."
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: defaults.php:211
|
64 |
msgid "Login failed"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: defaults.php:212, defaults.php:222
|
68 |
msgid "%Attempts% failed login(s)."
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: defaults.php:221
|
72 |
msgid "Login failed / non existing user"
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: defaults.php:231
|
76 |
msgid "Login blocked"
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: defaults.php:232
|
80 |
msgid "Login blocked because other session(s) already exist for this user."
|
81 |
msgstr ""
|
82 |
|
83 |
+
#: defaults.php:234, extensions/email-notifications/classes/Common.php:1092
|
84 |
msgid "IP address"
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: defaults.php:243
|
88 |
msgid "User logged in with existing session(s)"
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: defaults.php:244
|
92 |
msgid "User logged in however there are other session(s) already for this user."
|
93 |
msgstr ""
|
94 |
|
95 |
+
#: defaults.php:246, extensions/reports/classes/HtmlReportGenerator.php:134
|
96 |
msgid "IP address(es)"
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: defaults.php:255
|
100 |
msgid "User logged out all other sessions with the same username"
|
101 |
msgstr ""
|
102 |
|
103 |
+
#: defaults.php:256
|
104 |
msgid "Logged out all other sessions with the same user."
|
105 |
msgstr ""
|
106 |
|
107 |
+
#: defaults.php:265
|
108 |
msgid "User session destroyed and logged out"
|
109 |
msgstr ""
|
110 |
|
111 |
+
#: defaults.php:266
|
112 |
msgid "Terminated the session of the user %TargetUserName%."
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: defaults.php:268, defaults.php:281, defaults.php:1701, defaults.php:1729, defaults.php:1743, defaults.php:1757, defaults.php:1772, defaults.php:1787, defaults.php:1801, defaults.php:1815, defaults.php:1831, defaults.php:1846, defaults.php:1860, defaults.php:1874, defaults.php:1889, defaults.php:1905, defaults.php:1919, defaults.php:1934, defaults.php:1948, defaults.php:1962, defaults.php:1979, defaults.php:1993, defaults.php:2007, extensions/reports/classes/CsvReportGenerator.php:88, extensions/reports/classes/CsvReportGenerator.php:72, extensions/reports/classes/HtmlReportGenerator.php:250, extensions/reports/classes/HtmlReportGenerator.php:226
|
116 |
msgid "Role"
|
117 |
msgstr ""
|
118 |
|
119 |
+
#: defaults.php:269
|
120 |
msgid "Session ID"
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: defaults.php:278
|
124 |
msgid "Switched to another user"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: defaults.php:279
|
128 |
msgid "Switched the session to being logged in as %TargetUserName%."
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: defaults.php:290
|
132 |
msgid "User uploaded file to the Uploads directory"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: defaults.php:291
|
136 |
msgid "Uploaded a file called %FileName%."
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: defaults.php:293, defaults.php:305
|
140 |
msgid "Directory"
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: defaults.php:302
|
144 |
msgid "User deleted file from Uploads directory"
|
145 |
msgstr ""
|
146 |
|
147 |
+
#: defaults.php:303
|
148 |
msgid "Deleted the file %FileName%."
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: defaults.php:314
|
152 |
msgid "User requested a password reset"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: defaults.php:315
|
156 |
msgid "User requested a password reset. This does not mean that the password was changed."
|
157 |
msgstr ""
|
158 |
|
159 |
+
#: defaults.php:324
|
160 |
msgid "Content & Comments"
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: defaults.php:325
|
164 |
msgid "Content"
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: defaults.php:329
|
168 |
msgid "User created a new post and saved it as draft"
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: defaults.php:330
|
172 |
msgid "Created the post %PostTitle%."
|
173 |
msgstr ""
|
174 |
|
175 |
+
#: defaults.php:332, defaults.php:346, defaults.php:360, defaults.php:374, defaults.php:388, defaults.php:402, defaults.php:416, defaults.php:432, defaults.php:447, defaults.php:461, defaults.php:476, defaults.php:491, defaults.php:506, defaults.php:521, defaults.php:535, defaults.php:549, defaults.php:563, defaults.php:577, defaults.php:591, defaults.php:605, defaults.php:619, defaults.php:633, defaults.php:647, defaults.php:661, defaults.php:677, defaults.php:791, defaults.php:870, defaults.php:885, defaults.php:901, defaults.php:916, defaults.php:933, defaults.php:948, defaults.php:969, defaults.php:984, defaults.php:999, defaults.php:1014, defaults.php:1029, defaults.php:1044, defaults.php:1059, defaults.php:1074, defaults.php:1089, defaults.php:1104, defaults.php:1123, defaults.php:2154, defaults.php:2169, extensions/search/classes/FilterManager.php:502, extensions/search/classes/Filters/PostIDFilter.php:29, extensions/search/classes/Filters/PostIDFilter.php:57
|
176 |
msgid "Post ID"
|
177 |
msgstr ""
|
178 |
|
179 |
+
#: defaults.php:333, defaults.php:347, defaults.php:361, defaults.php:375, defaults.php:389, defaults.php:403, defaults.php:417, defaults.php:433, defaults.php:448, defaults.php:462, defaults.php:477, defaults.php:492, defaults.php:507, defaults.php:522, defaults.php:536, defaults.php:550, defaults.php:564, defaults.php:578, defaults.php:592, defaults.php:606, defaults.php:620, defaults.php:634, defaults.php:648, defaults.php:662, defaults.php:678, defaults.php:792, defaults.php:871, defaults.php:886, defaults.php:902, defaults.php:917, defaults.php:934, defaults.php:949, defaults.php:970, defaults.php:985, defaults.php:1000, defaults.php:1015, defaults.php:1030, defaults.php:1045, defaults.php:1060, defaults.php:1075, defaults.php:1090, defaults.php:1105, defaults.php:1124, defaults.php:2155, defaults.php:2170
|
180 |
msgid "Post type"
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: defaults.php:334, defaults.php:348, defaults.php:362, defaults.php:376, defaults.php:390, defaults.php:404, defaults.php:418, defaults.php:434, defaults.php:463, defaults.php:478, defaults.php:493, defaults.php:508, defaults.php:523, defaults.php:537, defaults.php:551, defaults.php:565, defaults.php:579, defaults.php:593, defaults.php:607, defaults.php:621, defaults.php:635, defaults.php:649, defaults.php:663, defaults.php:679, defaults.php:793, defaults.php:872, defaults.php:887, defaults.php:903, defaults.php:918, defaults.php:935, defaults.php:950, defaults.php:971, defaults.php:986, defaults.php:1001, defaults.php:1016, defaults.php:1031, defaults.php:1046, defaults.php:1061, defaults.php:1076, defaults.php:1091, defaults.php:1106, defaults.php:1125, defaults.php:2156, defaults.php:2171
|
184 |
msgid "Post status"
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: defaults.php:343
|
188 |
msgid "User published a post"
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: defaults.php:344
|
192 |
msgid "Published the post %PostTitle%."
|
193 |
msgstr ""
|
194 |
|
195 |
+
#: defaults.php:357
|
196 |
msgid "User modified a post"
|
197 |
msgstr ""
|
198 |
|
199 |
+
#: defaults.php:358
|
200 |
msgid "Modified the post %PostTitle%."
|
201 |
msgstr ""
|
202 |
|
203 |
+
#: defaults.php:371
|
204 |
msgid "User permanently deleted a post from the trash"
|
205 |
msgstr ""
|
206 |
|
207 |
+
#: defaults.php:372
|
208 |
msgid "Permanently deleted the post %PostTitle%."
|
209 |
msgstr ""
|
210 |
|
211 |
+
#: defaults.php:385
|
212 |
msgid "User moved a post to the trash"
|
213 |
msgstr ""
|
214 |
|
215 |
+
#: defaults.php:386
|
216 |
msgid "Moved the post %PostTitle% to trash."
|
217 |
msgstr ""
|
218 |
|
219 |
+
#: defaults.php:399
|
220 |
msgid "User restored a post from trash"
|
221 |
msgstr ""
|
222 |
|
223 |
+
#: defaults.php:400
|
224 |
msgid "Restored the post %PostTitle% from trash."
|
225 |
msgstr ""
|
226 |
|
227 |
+
#: defaults.php:413
|
228 |
msgid "User changed post URL"
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: defaults.php:414
|
232 |
msgid "Changed the URL of the post %PostTitle%."
|
233 |
msgstr ""
|
234 |
|
235 |
+
#: defaults.php:419, defaults.php:2676, defaults.php:2688
|
236 |
msgid "Previous URL"
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: defaults.php:420
|
240 |
msgid "New URL"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: defaults.php:429
|
244 |
msgid "User changed post author"
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: defaults.php:430
|
248 |
msgid "Changed the author of the post %PostTitle% to %NewAuthor%."
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: defaults.php:435
|
252 |
msgid "Previous author"
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: defaults.php:444
|
256 |
msgid "User changed post status"
|
257 |
msgstr ""
|
258 |
|
259 |
+
#: defaults.php:445
|
260 |
msgid "Changed the status of the post %PostTitle% to %NewStatus%."
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: defaults.php:449
|
264 |
msgid "Previous status"
|
265 |
msgstr ""
|
266 |
|
267 |
+
#: defaults.php:458
|
268 |
msgid "User changed the visibility of a post"
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: defaults.php:459
|
272 |
msgid "Changed the visibility of the post %PostTitle% to %NewVisibility%."
|
273 |
msgstr ""
|
274 |
|
275 |
+
#: defaults.php:464
|
276 |
msgid "Previous visibility status"
|
277 |
msgstr ""
|
278 |
|
279 |
+
#: defaults.php:473
|
280 |
msgid "User changed the date of a post"
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: defaults.php:474
|
284 |
msgid "Changed the date of the post %PostTitle% to %NewDate%."
|
285 |
msgstr ""
|
286 |
|
287 |
+
#: defaults.php:479
|
288 |
msgid "Previous date"
|
289 |
msgstr ""
|
290 |
|
291 |
+
#: defaults.php:488
|
292 |
msgid "User changed the parent of a page"
|
293 |
msgstr ""
|
294 |
|
295 |
+
#: defaults.php:489
|
296 |
msgid "Changed the parent of the post %PostTitle% to %NewParentName%."
|
297 |
msgstr ""
|
298 |
|
299 |
+
#: defaults.php:494, defaults.php:831
|
300 |
msgid "Previous parent"
|
301 |
msgstr ""
|
302 |
|
303 |
+
#: defaults.php:503
|
304 |
msgid "User changed the template of a page"
|
305 |
msgstr ""
|
306 |
|
307 |
+
#: defaults.php:504
|
308 |
msgid "Changed the template of the post %PostTitle% to %NewTemplate%."
|
309 |
msgstr ""
|
310 |
|
311 |
+
#: defaults.php:509
|
312 |
msgid "Previous template"
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: defaults.php:518
|
316 |
msgid "User set a post as sticky"
|
317 |
msgstr ""
|
318 |
|
319 |
+
#: defaults.php:519
|
320 |
msgid "Set the post %PostTitle% as sticky."
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: defaults.php:532
|
324 |
msgid "User removed post from sticky"
|
325 |
msgstr ""
|
326 |
|
327 |
+
#: defaults.php:533
|
328 |
msgid "Removed the post %PostTitle% from sticky."
|
329 |
msgstr ""
|
330 |
|
331 |
+
#: defaults.php:546
|
332 |
msgid "User modified the content of a post"
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: defaults.php:547
|
336 |
msgid "Modified the content of the post %PostTitle%."
|
337 |
msgstr ""
|
338 |
|
339 |
+
#: defaults.php:560
|
340 |
msgid "User submitted a post for review"
|
341 |
msgstr ""
|
342 |
|
343 |
+
#: defaults.php:561
|
344 |
msgid "Submitted the post %PostTitle% for review."
|
345 |
msgstr ""
|
346 |
|
347 |
+
#: defaults.php:574
|
348 |
msgid "User scheduled a post"
|
349 |
msgstr ""
|
350 |
|
351 |
+
#: defaults.php:575
|
352 |
msgid "Scheduled the post %PostTitle% to be published on %PublishingDate%."
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: defaults.php:588
|
356 |
msgid "User changed title of a post"
|
357 |
msgstr ""
|
358 |
|
359 |
+
#: defaults.php:589
|
360 |
msgid "Changed the title of the post %OldTitle% to %NewTitle%."
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: defaults.php:602
|
364 |
msgid "User opened a post in the editor"
|
365 |
msgstr ""
|
366 |
|
367 |
+
#: defaults.php:603
|
368 |
msgid "Opened the post %PostTitle% in the editor."
|
369 |
msgstr ""
|
370 |
|
371 |
+
#: defaults.php:616
|
372 |
msgid "User viewed a post"
|
373 |
msgstr ""
|
374 |
|
375 |
+
#: defaults.php:617
|
376 |
msgid "Viewed the post %PostTitle%."
|
377 |
msgstr ""
|
378 |
|
379 |
+
#: defaults.php:630
|
380 |
msgid "User enabled/disabled comments in a post"
|
381 |
msgstr ""
|
382 |
|
383 |
+
#: defaults.php:631
|
384 |
msgid "Comments in the post %PostTitle%."
|
385 |
msgstr ""
|
386 |
|
387 |
+
#: defaults.php:644
|
388 |
msgid "User enabled/disabled trackbacks and pingbacks in a post"
|
389 |
msgstr ""
|
390 |
|
391 |
+
#: defaults.php:645
|
392 |
msgid "Pingbacks and Trackbacks in the post %PostTitle%."
|
393 |
msgstr ""
|
394 |
|
395 |
+
#: defaults.php:658
|
396 |
msgid "User updated the excerpt in a post"
|
397 |
msgstr ""
|
398 |
|
399 |
+
#: defaults.php:659
|
400 |
msgid "The excerpt of the post %PostTitle%."
|
401 |
msgstr ""
|
402 |
|
403 |
+
#: defaults.php:664
|
404 |
msgid "Previous excerpt entry"
|
405 |
msgstr ""
|
406 |
|
407 |
+
#: defaults.php:665
|
408 |
msgid "New excerpt entry"
|
409 |
msgstr ""
|
410 |
|
411 |
+
#: defaults.php:674
|
412 |
msgid "User updated the featured image in a post"
|
413 |
msgstr ""
|
414 |
|
415 |
+
#: defaults.php:675
|
416 |
msgid "The featured image of the post %PostTitle%."
|
417 |
msgstr ""
|
418 |
|
419 |
+
#: defaults.php:680
|
420 |
msgid "Previous image"
|
421 |
msgstr ""
|
422 |
|
423 |
+
#: defaults.php:681
|
424 |
msgid "New image"
|
425 |
msgstr ""
|
426 |
|
427 |
+
#: defaults.php:689
|
428 |
msgid "Tags"
|
429 |
msgstr ""
|
430 |
|
431 |
+
#: defaults.php:693
|
432 |
msgid "User added post tag"
|
433 |
msgstr ""
|
434 |
|
435 |
+
#: defaults.php:694
|
436 |
msgid "Added tag(s) to the post %PostTitle%."
|
437 |
msgstr ""
|
438 |
|
439 |
+
#: defaults.php:696, defaults.php:711, classes/AuditLogGridView.php:288, classes/AuditLogGridView.php:312, classes/AuditLogListView.php:287, classes/AuditLogListView.php:315
|
440 |
msgid "ID"
|
441 |
msgstr ""
|
442 |
|
443 |
+
#: defaults.php:697, defaults.php:712, extensions/external-db/classes/Connections.php:97, extensions/external-db/classes/Connections.php:502, extensions/external-db/classes/Mirroring.php:91, extensions/reports/classes/CsvReportGenerator.php:84, extensions/reports/classes/HtmlReportGenerator.php:246
|
444 |
msgid "Type"
|
445 |
msgstr ""
|
446 |
|
447 |
+
#: defaults.php:698, defaults.php:713
|
448 |
msgid "Status"
|
449 |
msgstr ""
|
450 |
|
451 |
+
#: defaults.php:699
|
452 |
msgid "Added tag(s)"
|
453 |
msgstr ""
|
454 |
|
455 |
+
#: defaults.php:708
|
456 |
msgid "User removed post tag"
|
457 |
msgstr ""
|
458 |
|
459 |
+
#: defaults.php:709
|
460 |
msgid "Removed tag(s) from the post %PostTitle%."
|
461 |
msgstr ""
|
462 |
|
463 |
+
#: defaults.php:714
|
464 |
msgid "Removed tag(s)"
|
465 |
msgstr ""
|
466 |
|
467 |
+
#: defaults.php:723
|
468 |
msgid "User created new tag"
|
469 |
msgstr ""
|
470 |
|
471 |
+
#: defaults.php:724
|
472 |
msgid "Created the tag %TagName%."
|
473 |
msgstr ""
|
474 |
|
475 |
+
#: defaults.php:726, defaults.php:738, defaults.php:750, defaults.php:774, defaults.php:806, defaults.php:818, defaults.php:830, defaults.php:843
|
476 |
msgid "Slug"
|
477 |
msgstr ""
|
478 |
|
479 |
+
#: defaults.php:735
|
480 |
msgid "User deleted tag"
|
481 |
msgstr ""
|
482 |
|
483 |
+
#: defaults.php:736
|
484 |
msgid "Deleted the tag %TagName%."
|
485 |
msgstr ""
|
486 |
|
487 |
+
#: defaults.php:747
|
488 |
msgid "Renamed the tag %old_name% to %new_name%."
|
489 |
msgstr ""
|
490 |
|
491 |
+
#: defaults.php:759
|
492 |
msgid "User changed tag slug"
|
493 |
msgstr ""
|
494 |
|
495 |
+
#: defaults.php:760
|
496 |
msgid "Changed the slug of the tag %tag% to %new_slug%."
|
497 |
msgstr ""
|
498 |
|
499 |
+
#: defaults.php:762, defaults.php:855
|
500 |
msgid "Previous slug"
|
501 |
msgstr ""
|
502 |
|
503 |
+
#: defaults.php:771
|
504 |
msgid "User changed tag description"
|
505 |
msgstr ""
|
506 |
|
507 |
+
#: defaults.php:772
|
508 |
msgid "Changed the description of the tag %tag%."
|
509 |
msgstr ""
|
510 |
|
511 |
+
#: defaults.php:775
|
512 |
msgid "Previous description"
|
513 |
msgstr ""
|
514 |
|
515 |
+
#: defaults.php:776
|
516 |
msgid "New description"
|
517 |
msgstr ""
|
518 |
|
519 |
+
#: defaults.php:784
|
520 |
msgid "Categories"
|
521 |
msgstr ""
|
522 |
|
523 |
+
#: defaults.php:788
|
524 |
msgid "User changed post category"
|
525 |
msgstr ""
|
526 |
|
527 |
+
#: defaults.php:789
|
528 |
msgid "Changed the category(ies) of the post %PostTitle% to %NewCategories%."
|
529 |
msgstr ""
|
530 |
|
531 |
+
#: defaults.php:794
|
532 |
msgid "Previous category(ies)"
|
533 |
msgstr ""
|
534 |
|
535 |
+
#: defaults.php:803
|
536 |
msgid "User created new category"
|
537 |
msgstr ""
|
538 |
|
539 |
+
#: defaults.php:804
|
540 |
msgid "Created the category %CategoryName%."
|
541 |
msgstr ""
|
542 |
|
543 |
+
#: defaults.php:815
|
544 |
msgid "User deleted category"
|
545 |
msgstr ""
|
546 |
|
547 |
+
#: defaults.php:816
|
548 |
msgid "Deleted the category %CategoryName%."
|
549 |
msgstr ""
|
550 |
|
551 |
+
#: defaults.php:827
|
552 |
msgid "Changed the parent of a category"
|
553 |
msgstr ""
|
554 |
|
555 |
+
#: defaults.php:828
|
556 |
msgid "Changed the parent of the category %CategoryName% to %NewParent%."
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: defaults.php:840
|
560 |
msgid "User changed category name"
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: defaults.php:841
|
564 |
msgid "Renamed the category %old_name% to %new_name%."
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: defaults.php:852
|
568 |
msgid "User changed category slug"
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: defaults.php:853
|
572 |
msgid "Changed the slug of the category %CategoryName% to %new_slug%."
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: defaults.php:863
|
576 |
msgid "Custom Fields"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: defaults.php:867
|
580 |
msgid "User created a custom field for a post"
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: defaults.php:868
|
584 |
msgid "Created the new custom field %MetaKey% in the post %PostTitle%."
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: defaults.php:873, defaults.php:1834
|
588 |
msgid "Custom field value"
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: defaults.php:882
|
592 |
msgid "User updated a custom field value for a post"
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: defaults.php:883
|
596 |
msgid "Modified the value of the custom field %MetaName% in the post %PostTitle%."
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: defaults.php:888
|
600 |
msgid "Previous custom field value"
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: defaults.php:889
|
604 |
msgid "New custom field value"
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: defaults.php:898
|
608 |
msgid "User deleted a custom field from a post"
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: defaults.php:899
|
612 |
msgid "Deleted the custom field %MetaKey% from the post %PostTitle%."
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: defaults.php:912
|
616 |
msgid "User updated a custom field name for a post"
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: defaults.php:913
|
620 |
msgid "Renamed the custom field %MetaKeyOld% on post %PostTitle% to %MetaKeNew%."
|
621 |
msgstr ""
|
622 |
|
623 |
+
#: defaults.php:915, classes/AlertManager.php:1150
|
624 |
msgid "Post"
|
625 |
msgstr ""
|
626 |
|
627 |
+
#: defaults.php:926
|
628 |
msgid "Custom Fields (ACF)"
|
629 |
msgstr ""
|
630 |
|
631 |
+
#: defaults.php:930
|
632 |
msgid "User added relationship to a custom field value for a post"
|
633 |
msgstr ""
|
634 |
|
635 |
+
#: defaults.php:931
|
636 |
msgid "Added relationships to the custom field %MetaKey% in the post %PostTitle%."
|
637 |
msgstr ""
|
638 |
|
639 |
+
#: defaults.php:936
|
640 |
msgid "New relationships"
|
641 |
msgstr ""
|
642 |
|
643 |
+
#: defaults.php:945
|
644 |
msgid "User removed relationship from a custom field value for a post"
|
645 |
msgstr ""
|
646 |
|
647 |
+
#: defaults.php:946
|
648 |
msgid "Removed relationships from the custom field %MetaKey% in the post %PostTitle%."
|
649 |
msgstr ""
|
650 |
|
651 |
+
#: defaults.php:951
|
652 |
msgid "Removed relationships"
|
653 |
msgstr ""
|
654 |
|
655 |
+
#: defaults.php:962
|
656 |
msgid "Comments"
|
657 |
msgstr ""
|
658 |
|
659 |
+
#: defaults.php:966
|
660 |
msgid "User approved a comment"
|
661 |
msgstr ""
|
662 |
|
663 |
+
#: defaults.php:967
|
664 |
msgid "Approved the comment posted by %Author% on the post %PostTitle%."
|
665 |
msgstr ""
|
666 |
|
667 |
+
#: defaults.php:972, defaults.php:987, defaults.php:1002, defaults.php:1017, defaults.php:1032, defaults.php:1047, defaults.php:1062, defaults.php:1077, defaults.php:1092, defaults.php:1107, defaults.php:1126
|
668 |
msgid "Comment ID"
|
669 |
msgstr ""
|
670 |
|
671 |
+
#: defaults.php:981
|
672 |
msgid "User unapproved a comment"
|
673 |
msgstr ""
|
674 |
|
675 |
+
#: defaults.php:982
|
676 |
msgid "Unapproved the comment posted by %Author% on the post %PostTitle%."
|
677 |
msgstr ""
|
678 |
|
679 |
+
#: defaults.php:996
|
680 |
msgid "User replied to a comment"
|
681 |
msgstr ""
|
682 |
|
683 |
+
#: defaults.php:997
|
684 |
msgid "Replied to the comment posted by %Author% on the post %PostTitle%."
|
685 |
msgstr ""
|
686 |
|
687 |
+
#: defaults.php:1011
|
688 |
msgid "User edited a comment"
|
689 |
msgstr ""
|
690 |
|
691 |
+
#: defaults.php:1012
|
692 |
msgid "Edited the comment posted by %Author% on the post %PostTitle%."
|
693 |
msgstr ""
|
694 |
|
695 |
+
#: defaults.php:1026
|
696 |
msgid "User marked a comment as Spam"
|
697 |
msgstr ""
|
698 |
|
699 |
+
#: defaults.php:1027
|
700 |
msgid "Marked the comment posted by %Author% on the post %PostTitle% as spam."
|
701 |
msgstr ""
|
702 |
|
703 |
+
#: defaults.php:1041
|
704 |
msgid "User marked a comment as Not Spam"
|
705 |
msgstr ""
|
706 |
|
707 |
+
#: defaults.php:1042
|
708 |
msgid "Marked the comment posted by %Author% on the post %PostTitle% as not spam."
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: defaults.php:1056
|
712 |
msgid "User moved a comment to trash"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: defaults.php:1057
|
716 |
msgid "Moved the comment posted by %Author% on the post %PostTitle% to trash."
|
717 |
msgstr ""
|
718 |
|
719 |
+
#: defaults.php:1071
|
720 |
msgid "User restored a comment from the trash"
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: defaults.php:1072
|
724 |
msgid "Restored the comment posted by %Author% on the post %PostTitle% from trash."
|
725 |
msgstr ""
|
726 |
|
727 |
+
#: defaults.php:1086
|
728 |
msgid "User permanently deleted a comment"
|
729 |
msgstr ""
|
730 |
|
731 |
+
#: defaults.php:1087
|
732 |
msgid "Permanently deleted the comment posted by %Author% on the post %PostTitle%."
|
733 |
msgstr ""
|
734 |
|
735 |
+
#: defaults.php:1101
|
736 |
msgid "User posted a comment"
|
737 |
msgstr ""
|
738 |
|
739 |
+
#: defaults.php:1102, defaults.php:1121
|
740 |
msgid "Posted a comment on the post %PostTitle%."
|
741 |
msgstr ""
|
742 |
|
743 |
+
#: defaults.php:1120
|
744 |
msgid "Visitor posted a comment"
|
745 |
msgstr ""
|
746 |
|
747 |
+
#: defaults.php:1137
|
748 |
msgid "Widgets"
|
749 |
msgstr ""
|
750 |
|
751 |
+
#: defaults.php:1141
|
752 |
msgid "User added a new widget"
|
753 |
msgstr ""
|
754 |
|
755 |
+
#: defaults.php:1142
|
756 |
msgid "Added a new %WidgetName% widget in %Sidebar%."
|
757 |
msgstr ""
|
758 |
|
759 |
+
#: defaults.php:1151
|
760 |
msgid "User modified a widget"
|
761 |
msgstr ""
|
762 |
|
763 |
+
#: defaults.php:1152
|
764 |
msgid "Modified the %WidgetName% widget in %Sidebar%."
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: defaults.php:1161
|
768 |
msgid "User deleted widget"
|
769 |
msgstr ""
|
770 |
|
771 |
+
#: defaults.php:1162
|
772 |
msgid "Deleted the %WidgetName% widget from %Sidebar%."
|
773 |
msgstr ""
|
774 |
|
775 |
+
#: defaults.php:1171
|
776 |
msgid "User moved widget"
|
777 |
msgstr ""
|
778 |
|
779 |
+
#: defaults.php:1172
|
780 |
msgid "Moved the %WidgetName% widget."
|
781 |
msgstr ""
|
782 |
|
783 |
+
#: defaults.php:1174, extensions/reports/inc/wsal-reporting-view.inc.php:1505
|
784 |
msgid "From"
|
785 |
msgstr ""
|
786 |
|
787 |
+
#: defaults.php:1175, extensions/reports/inc/wsal-reporting-view.inc.php:1514
|
788 |
msgid "To"
|
789 |
msgstr ""
|
790 |
|
791 |
+
#: defaults.php:1184
|
792 |
msgid "User changed widget position"
|
793 |
msgstr ""
|
794 |
|
795 |
+
#: defaults.php:1185
|
796 |
msgid "Changed the position of the %WidgetName% widget in %Sidebar%."
|
797 |
msgstr ""
|
798 |
|
799 |
+
#: defaults.php:1196
|
800 |
msgid "Menus"
|
801 |
msgstr ""
|
802 |
|
803 |
+
#: defaults.php:1200
|
804 |
msgid "User created new menu"
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: defaults.php:1201
|
808 |
msgid "New menu called %MenuName%."
|
809 |
msgstr ""
|
810 |
|
811 |
+
#: defaults.php:1210
|
812 |
msgid "User added content to a menu"
|
813 |
msgstr ""
|
814 |
|
815 |
+
#: defaults.php:1211
|
816 |
msgid "Added the item %ContentName% to the menu %MenuName%."
|
817 |
msgstr ""
|
818 |
|
819 |
+
#: defaults.php:1213, defaults.php:1225, defaults.php:1257
|
820 |
msgid "Item type"
|
821 |
msgstr ""
|
822 |
|
823 |
+
#: defaults.php:1222
|
824 |
msgid "User removed content from a menu"
|
825 |
msgstr ""
|
826 |
|
827 |
+
#: defaults.php:1223
|
828 |
msgid "Removed the item %ContentName% from the menu %MenuName%."
|
829 |
msgstr ""
|
830 |
|
831 |
+
#: defaults.php:1234
|
832 |
msgid "User deleted menu"
|
833 |
msgstr ""
|
834 |
|
835 |
+
#: defaults.php:1235
|
836 |
msgid "Deleted the menu %MenuName%."
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: defaults.php:1244
|
840 |
msgid "User changed menu setting"
|
841 |
msgstr ""
|
842 |
|
843 |
+
#: defaults.php:1245
|
844 |
msgid "The setting %MenuSetting% in the menu %MenuName%."
|
845 |
msgstr ""
|
846 |
|
847 |
+
#: defaults.php:1254
|
848 |
msgid "User modified content in a menu"
|
849 |
msgstr ""
|
850 |
|
851 |
+
#: defaults.php:1255
|
852 |
msgid "Modified the item %ContentName% in the menu %MenuName%."
|
853 |
msgstr ""
|
854 |
|
855 |
+
#: defaults.php:1266
|
856 |
msgid "User changed name of a menu"
|
857 |
msgstr ""
|
858 |
|
859 |
+
#: defaults.php:1267
|
860 |
msgid "Renamed the menu %OldMenuName% to %MenuName%."
|
861 |
msgstr ""
|
862 |
|
863 |
+
#: defaults.php:1276
|
864 |
msgid "User changed order of the objects in a menu"
|
865 |
msgstr ""
|
866 |
|
867 |
+
#: defaults.php:1277
|
868 |
msgid "Changed the order of the items in the menu %MenuName%."
|
869 |
msgstr ""
|
870 |
|
871 |
+
#: defaults.php:1286
|
872 |
msgid "User moved objects as a sub-item"
|
873 |
msgstr ""
|
874 |
|
875 |
+
#: defaults.php:1287
|
876 |
msgid "Moved items as sub-items in the menu %MenuName%."
|
877 |
msgstr ""
|
878 |
|
879 |
+
#: defaults.php:1289
|
880 |
msgid "Moved item"
|
881 |
msgstr ""
|
882 |
|
883 |
+
#: defaults.php:1290
|
884 |
msgid "as a sub-item of"
|
885 |
msgstr ""
|
886 |
|
887 |
+
#: defaults.php:1306, extensions/reports/classes/HtmlReportGenerator.php:545
|
888 |
msgid "Custom Post Types"
|
889 |
msgstr ""
|
890 |
|
891 |
+
#: defaults.php:1310
|
892 |
msgid "User modified a draft blog post"
|
893 |
msgstr ""
|
894 |
|
895 |
+
#: defaults.php:1311
|
896 |
msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
|
897 |
msgstr ""
|
898 |
|
899 |
+
#: defaults.php:1316
|
900 |
msgid "User created a new post with custom post type and saved it as draft"
|
901 |
msgstr ""
|
902 |
|
903 |
+
#: defaults.php:1317
|
904 |
msgid "Created a new custom post called %PostTitle% of type %PostType%. %EditorLinkPost%."
|
905 |
msgstr ""
|
906 |
|
907 |
+
#: defaults.php:1322
|
908 |
msgid "User published a post with custom post type"
|
909 |
msgstr ""
|
910 |
|
911 |
+
#: defaults.php:1323
|
912 |
msgid "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%."
|
913 |
msgstr ""
|
914 |
|
915 |
+
#: defaults.php:1328
|
916 |
msgid "User modified a post with custom post type"
|
917 |
msgstr ""
|
918 |
|
919 |
+
#: defaults.php:1329
|
920 |
msgid "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%."
|
921 |
msgstr ""
|
922 |
|
923 |
+
#: defaults.php:1334
|
924 |
msgid "User modified a draft post with custom post type"
|
925 |
msgstr ""
|
926 |
|
927 |
+
#: defaults.php:1335
|
928 |
msgid "Modified the draft custom post %PostTitle% of type is %PostType%. %EditorLinkPost%."
|
929 |
msgstr ""
|
930 |
|
931 |
+
#: defaults.php:1340
|
932 |
msgid "User permanently deleted post with custom post type"
|
933 |
msgstr ""
|
934 |
|
935 |
+
#: defaults.php:1341
|
936 |
msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
|
937 |
msgstr ""
|
938 |
|
939 |
+
#: defaults.php:1346
|
940 |
msgid "User moved post with custom post type to trash"
|
941 |
msgstr ""
|
942 |
|
943 |
+
#: defaults.php:1347
|
944 |
msgid "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was %PostUrl%."
|
945 |
msgstr ""
|
946 |
|
947 |
+
#: defaults.php:1352
|
948 |
msgid "User restored post with custom post type from trash"
|
949 |
msgstr ""
|
950 |
|
951 |
+
#: defaults.php:1353
|
952 |
msgid "The custom post %PostTitle% of type %PostType% has been restored from trash. %EditorLinkPost%."
|
953 |
msgstr ""
|
954 |
|
955 |
+
#: defaults.php:1358
|
956 |
msgid "User changed the category of a post with custom post type"
|
957 |
msgstr ""
|
958 |
|
959 |
+
#: defaults.php:1359
|
960 |
msgid "Changed the category(ies) of the custom post %PostTitle% of type %PostType% from %OldCategories% to %NewCategories%. %EditorLinkPost%."
|
961 |
msgstr ""
|
962 |
|
963 |
+
#: defaults.php:1364
|
964 |
msgid "User changed the URL of a post with custom post type"
|
965 |
msgstr ""
|
966 |
|
967 |
+
#: defaults.php:1365
|
968 |
msgid "Changed the URL of the custom post %PostTitle% of type %PostType% from %OldUrl% to %NewUrl%. %EditorLinkPost%."
|
969 |
msgstr ""
|
970 |
|
971 |
+
#: defaults.php:1370
|
972 |
msgid "User changed the author or post with custom post type"
|
973 |
msgstr ""
|
974 |
|
975 |
+
#: defaults.php:1371
|
976 |
msgid "Changed the author of custom post %PostTitle% of type %PostType% from %OldAuthor% to %NewAuthor%. %EditorLinkPost%."
|
977 |
msgstr ""
|
978 |
|
979 |
+
#: defaults.php:1376
|
980 |
msgid "User changed the status of post with custom post type"
|
981 |
msgstr ""
|
982 |
|
983 |
+
#: defaults.php:1377
|
984 |
msgid "Changed the status of custom post %PostTitle% of type %PostType% from %OldStatus% to %NewStatus%. %EditorLinkPost%."
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: defaults.php:1382
|
988 |
msgid "User changed the visibility of a post with custom post type"
|
989 |
msgstr ""
|
990 |
|
991 |
+
#: defaults.php:1383
|
992 |
msgid "Changed the visibility of the custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
|
993 |
msgstr ""
|
994 |
|
995 |
+
#: defaults.php:1388
|
996 |
msgid "User changed the date of post with custom post type"
|
997 |
msgstr ""
|
998 |
|
999 |
+
#: defaults.php:1389
|
1000 |
msgid "Changed the date of the custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%. %EditorLinkPost%."
|
1001 |
msgstr ""
|
1002 |
|
1003 |
+
#: defaults.php:1394
|
1004 |
msgid "User created a custom field for a custom post type"
|
1005 |
msgstr ""
|
1006 |
|
1007 |
+
#: defaults.php:1395
|
1008 |
msgid "Created a new custom field %MetaKey% with value %MetaValue% in custom post %PostTitle% of type %PostType%. %EditorLinkPost%.<br>%MetaLink%."
|
1009 |
msgstr ""
|
1010 |
|
1011 |
+
#: defaults.php:1400
|
1012 |
msgid "User updated a custom field for a custom post type"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
+
#: defaults.php:1401
|
1016 |
msgid "Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
|
1017 |
msgstr ""
|
1018 |
|
1019 |
+
#: defaults.php:1406
|
1020 |
msgid "User deleted a custom field from a custom post type"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
+
#: defaults.php:1407
|
1024 |
msgid "Deleted the custom field %MetaKey% with id %MetaID% from custom post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
|
1025 |
msgstr ""
|
1026 |
|
1027 |
+
#: defaults.php:1412
|
1028 |
msgid "User updated a custom field name for a custom post type"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
+
#: defaults.php:1413
|
1032 |
msgid "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
|
1033 |
msgstr ""
|
1034 |
|
1035 |
+
#: defaults.php:1418
|
1036 |
msgid "User modified content for a published custom post type"
|
1037 |
msgstr ""
|
1038 |
|
1039 |
+
#: defaults.php:1419
|
1040 |
msgid "Modified the content of the published custom post type %PostTitle%. Post URL is %PostUrl%. %EditorLinkPost%."
|
1041 |
msgstr ""
|
1042 |
|
1043 |
+
#: defaults.php:1424
|
1044 |
msgid "User modified content for a draft post"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
+
#: defaults.php:1425
|
1048 |
msgid "Modified the content of the draft post %PostTitle%.%RevisionLink% %EditorLinkPost%."
|
1049 |
msgstr ""
|
1050 |
|
1051 |
+
#: defaults.php:1430
|
1052 |
msgid "User modified content for a draft custom post type"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
+
#: defaults.php:1431
|
1056 |
msgid "Modified the content of the draft custom post type %PostTitle%.%EditorLinkPost%."
|
1057 |
msgstr ""
|
1058 |
|
1059 |
+
#: defaults.php:1436
|
1060 |
msgid "User modified content of a post"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
+
#: defaults.php:1437
|
1064 |
msgid "Modified the content of post %PostTitle% which is submitted for review.%RevisionLink% %EditorLinkPost%."
|
1065 |
msgstr ""
|
1066 |
|
1067 |
+
#: defaults.php:1442
|
1068 |
msgid "User scheduled a custom post type"
|
1069 |
msgstr ""
|
1070 |
|
1071 |
+
#: defaults.php:1443
|
1072 |
msgid "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. %EditorLinkPost%."
|
1073 |
msgstr ""
|
1074 |
|
1075 |
+
#: defaults.php:1448
|
1076 |
msgid "User changed title of a custom post type"
|
1077 |
msgstr ""
|
1078 |
|
1079 |
+
#: defaults.php:1449
|
1080 |
msgid "Changed the title of the custom post %OldTitle% to %NewTitle%. %EditorLinkPost%."
|
1081 |
msgstr ""
|
1082 |
|
1083 |
+
#: defaults.php:1454
|
1084 |
msgid "User opened a custom post type in the editor"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
+
#: defaults.php:1455
|
1088 |
msgid "Opened the custom post %PostTitle% of type %PostType% in the editor. View the post: %EditorLinkPost%."
|
1089 |
msgstr ""
|
1090 |
|
1091 |
+
#: defaults.php:1460
|
1092 |
msgid "User viewed a custom post type"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
+
#: defaults.php:1461
|
1096 |
msgid "Viewed the custom post %PostTitle% of type %PostType%. View the post: %PostUrl%."
|
1097 |
msgstr ""
|
1098 |
|
1099 |
+
#: defaults.php:1466
|
1100 |
msgid "A plugin created a custom post"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
+
#: defaults.php:1467
|
1104 |
msgid "A plugin automatically created the following custom post: %PostTitle%."
|
1105 |
msgstr ""
|
1106 |
|
1107 |
+
#: defaults.php:1472
|
1108 |
msgid "A plugin deleted a custom post"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
+
#: defaults.php:1473
|
1112 |
msgid "A plugin automatically deleted the following custom post: %PostTitle%."
|
1113 |
msgstr ""
|
1114 |
|
1115 |
+
#: defaults.php:1478
|
1116 |
msgid "A plugin modified a custom post"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
+
#: defaults.php:1479
|
1120 |
msgid "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
+
#: defaults.php:1491, extensions/reports/classes/HtmlReportGenerator.php:540
|
1124 |
msgid "Pages"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
+
#: defaults.php:1495
|
1128 |
msgid "User created a new WordPress page and saved it as draft"
|
1129 |
msgstr ""
|
1130 |
|
1131 |
+
#: defaults.php:1496
|
1132 |
msgid "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage%."
|
1133 |
msgstr ""
|
1134 |
|
1135 |
+
#: defaults.php:1501
|
1136 |
msgid "User published a WordPress page"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
+
#: defaults.php:1502
|
1140 |
msgid "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
|
1141 |
msgstr ""
|
1142 |
|
1143 |
+
#: defaults.php:1507
|
1144 |
msgid "User modified a published WordPress page"
|
1145 |
msgstr ""
|
1146 |
|
1147 |
+
#: defaults.php:1508
|
1148 |
msgid "Modified the published page %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
|
1149 |
msgstr ""
|
1150 |
|
1151 |
+
#: defaults.php:1513
|
1152 |
msgid "User modified a draft WordPress page"
|
1153 |
msgstr ""
|
1154 |
|
1155 |
+
#: defaults.php:1514
|
1156 |
msgid "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
|
1157 |
msgstr ""
|
1158 |
|
1159 |
+
#: defaults.php:1519
|
1160 |
msgid "User permanently deleted a page from the trash"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
+
#: defaults.php:1520
|
1164 |
msgid "Permanently deleted the page %PostTitle%."
|
1165 |
msgstr ""
|
1166 |
|
1167 |
+
#: defaults.php:1525
|
1168 |
msgid "User moved WordPress page to the trash"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: defaults.php:1526
|
1172 |
msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: defaults.php:1531
|
1176 |
msgid "User restored a WordPress page from trash"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
+
#: defaults.php:1532
|
1180 |
msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
+
#: defaults.php:1537
|
1184 |
msgid "User changed page URL"
|
1185 |
msgstr ""
|
1186 |
|
1187 |
+
#: defaults.php:1538
|
1188 |
msgid "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPage%."
|
1189 |
msgstr ""
|
1190 |
|
1191 |
+
#: defaults.php:1543
|
1192 |
msgid "User changed page author"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
+
#: defaults.php:1544
|
1196 |
msgid "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. %EditorLinkPage%."
|
1197 |
msgstr ""
|
1198 |
|
1199 |
+
#: defaults.php:1549
|
1200 |
msgid "User changed page status"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
+
#: defaults.php:1550
|
1204 |
msgid "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. %EditorLinkPage%."
|
1205 |
msgstr ""
|
1206 |
|
1207 |
+
#: defaults.php:1555
|
1208 |
msgid "User changed the visibility of a page post"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
+
#: defaults.php:1556
|
1212 |
msgid "Changed the visibility of the page %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPage%."
|
1213 |
msgstr ""
|
1214 |
|
1215 |
+
#: defaults.php:1561
|
1216 |
msgid "User changed the date of a page post"
|
1217 |
msgstr ""
|
1218 |
|
1219 |
+
#: defaults.php:1562
|
1220 |
msgid "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPage%."
|
1221 |
msgstr ""
|
1222 |
|
1223 |
+
#: defaults.php:1567
|
1224 |
msgid "User created a custom field for a page"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
+
#: defaults.php:1568
|
1228 |
msgid "Created a new custom field called %MetaKey% with value %MetaValue% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
|
1229 |
msgstr ""
|
1230 |
|
1231 |
+
#: defaults.php:1573
|
1232 |
msgid "User updated a custom field value for a page"
|
1233 |
msgstr ""
|
1234 |
|
1235 |
+
#: defaults.php:1574
|
1236 |
msgid "Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
|
1237 |
msgstr ""
|
1238 |
|
1239 |
+
#: defaults.php:1579
|
1240 |
msgid "User deleted a custom field from a page"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
+
#: defaults.php:1580
|
1244 |
msgid "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% %EditorLinkPage%<br>%MetaLink%."
|
1245 |
msgstr ""
|
1246 |
|
1247 |
+
#: defaults.php:1585
|
1248 |
msgid "User updated a custom field name for a page"
|
1249 |
msgstr ""
|
1250 |
|
1251 |
+
#: defaults.php:1586
|
1252 |
msgid "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
|
1253 |
msgstr ""
|
1254 |
|
1255 |
+
#: defaults.php:1591
|
1256 |
msgid "User modified content for a published page"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
+
#: defaults.php:1592
|
1260 |
msgid "Modified the content of the published page %PostTitle%. Page URL is %PostUrl%. %RevisionLink% %EditorLinkPage%."
|
1261 |
msgstr ""
|
1262 |
|
1263 |
+
#: defaults.php:1597
|
1264 |
msgid "User modified content for a draft page"
|
1265 |
msgstr ""
|
1266 |
|
1267 |
+
#: defaults.php:1598
|
1268 |
msgid "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage%."
|
1269 |
msgstr ""
|
1270 |
|
1271 |
+
#: defaults.php:1603
|
1272 |
msgid "User scheduled a page"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
+
#: defaults.php:1604
|
1276 |
msgid "Scheduled the page %PostTitle% to be published %PublishingDate%. %EditorLinkPage%."
|
1277 |
msgstr ""
|
1278 |
|
1279 |
+
#: defaults.php:1609
|
1280 |
msgid "User changed title of a page"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
+
#: defaults.php:1610
|
1284 |
msgid "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
|
1285 |
msgstr ""
|
1286 |
|
1287 |
+
#: defaults.php:1615
|
1288 |
msgid "User opened a page in the editor"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
+
#: defaults.php:1616
|
1292 |
msgid "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
|
1293 |
msgstr ""
|
1294 |
|
1295 |
+
#: defaults.php:1621
|
1296 |
msgid "User viewed a page"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
+
#: defaults.php:1622
|
1300 |
msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
|
1301 |
msgstr ""
|
1302 |
|
1303 |
+
#: defaults.php:1627
|
1304 |
msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
+
#: defaults.php:1628
|
1308 |
msgid "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
|
1309 |
msgstr ""
|
1310 |
|
1311 |
+
#: defaults.php:1633
|
1312 |
msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
+
#: defaults.php:1634
|
1316 |
msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
|
1317 |
msgstr ""
|
1318 |
|
1319 |
+
#: defaults.php:1639
|
1320 |
msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
|
1321 |
msgstr ""
|
1322 |
|
1323 |
+
#: defaults.php:1640
|
1324 |
msgid "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
|
1325 |
msgstr ""
|
1326 |
|
1327 |
+
#: defaults.php:1645
|
1328 |
msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
|
1329 |
msgstr ""
|
1330 |
|
1331 |
+
#: defaults.php:1646
|
1332 |
msgid "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
|
1333 |
msgstr ""
|
1334 |
|
1335 |
+
#: defaults.php:1651
|
1336 |
msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
|
1337 |
msgstr ""
|
1338 |
|
1339 |
+
#: defaults.php:1652
|
1340 |
msgid "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
|
1341 |
msgstr ""
|
1342 |
|
1343 |
+
#: defaults.php:1657
|
1344 |
msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
+
#: defaults.php:1658
|
1348 |
msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
|
1349 |
msgstr ""
|
1350 |
|
1351 |
+
#: defaults.php:1663
|
1352 |
msgid "A plugin created a page"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
+
#: defaults.php:1664
|
1356 |
msgid "A plugin automatically created the following page: %PostTitle%."
|
1357 |
msgstr ""
|
1358 |
|
1359 |
+
#: defaults.php:1669
|
1360 |
msgid "A plugin deleted a page"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
+
#: defaults.php:1670
|
1364 |
msgid "A plugin automatically deleted the following page: %PostTitle%."
|
1365 |
msgstr ""
|
1366 |
|
1367 |
+
#: defaults.php:1675
|
1368 |
msgid "A plugin modified a page"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
+
#: defaults.php:1676
|
1372 |
msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
|
1373 |
msgstr ""
|
1374 |
|
1375 |
+
#: defaults.php:1681
|
1376 |
msgid "User Accounts"
|
1377 |
msgstr ""
|
1378 |
|
1379 |
+
#: defaults.php:1682
|
1380 |
msgid "User Profiles"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
+
#: defaults.php:1686
|
1384 |
msgid "New user was created on WordPress"
|
1385 |
msgstr ""
|
1386 |
|
1387 |
+
#: defaults.php:1687
|
1388 |
msgid "A new user %NewUserData->Username% is created via registration."
|
1389 |
msgstr ""
|
1390 |
|
1391 |
+
#: defaults.php:1689, classes/AlertManager.php:1146, classes/AuditLogListView.php:290, classes/AuditLogListView.php:324, classes/WidgetManager.php:76, classes/Views/Settings.php:1094, extensions/reports/classes/CsvReportGenerator.php:87, extensions/reports/classes/CsvReportGenerator.php:71, extensions/reports/classes/HtmlReportGenerator.php:249, extensions/reports/classes/HtmlReportGenerator.php:225, extensions/search/classes/Filters/UserNameFilter.php:44, extensions/user-sessions/classes/View/Sessions.php:138
|
1392 |
msgid "User"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
+
#: defaults.php:1698
|
1396 |
msgid "User created another WordPress user"
|
1397 |
msgstr ""
|
1398 |
|
1399 |
+
#: defaults.php:1699
|
1400 |
msgid "Created the new user: %NewUserData->Username%."
|
1401 |
msgstr ""
|
1402 |
|
1403 |
+
#: defaults.php:1702, defaults.php:1716, defaults.php:1730, defaults.php:1744, defaults.php:1758, defaults.php:1773, defaults.php:1788, defaults.php:1802, defaults.php:1816, defaults.php:1832, defaults.php:1861, defaults.php:1875, defaults.php:1890, defaults.php:1906, defaults.php:1920, defaults.php:1935, defaults.php:1949, defaults.php:1963, defaults.php:1980, defaults.php:1994, defaults.php:2008, defaults.php:2022, defaults.php:2035
|
1404 |
msgid "First name"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
+
#: defaults.php:1703, defaults.php:1717, defaults.php:1731, defaults.php:1745, defaults.php:1759, defaults.php:1774, defaults.php:1789, defaults.php:1803, defaults.php:1817, defaults.php:1833, defaults.php:1848, defaults.php:1876, defaults.php:1891, defaults.php:1907, defaults.php:1921, defaults.php:1936, defaults.php:1950, defaults.php:1964, defaults.php:1981, defaults.php:1995, defaults.php:2009, defaults.php:2023, defaults.php:2036
|
1408 |
msgid "Last name"
|
1409 |
msgstr ""
|
1410 |
|
1411 |
+
#: defaults.php:1712
|
1412 |
msgid "The role of a user was changed by another WordPress user"
|
1413 |
msgstr ""
|
1414 |
|
1415 |
+
#: defaults.php:1713
|
1416 |
msgid "Changed the role of user %TargetUsername% to %NewRole%."
|
1417 |
msgstr ""
|
1418 |
|
1419 |
+
#: defaults.php:1715, defaults.php:2522
|
1420 |
msgid "Previous role"
|
1421 |
msgstr ""
|
1422 |
|
1423 |
+
#: defaults.php:1726
|
1424 |
msgid "User has changed his or her password"
|
1425 |
msgstr ""
|
1426 |
|
1427 |
+
#: defaults.php:1727
|
1428 |
msgid "Changed the password."
|
1429 |
msgstr ""
|
1430 |
|
1431 |
+
#: defaults.php:1740
|
1432 |
msgid "User changed another user's password"
|
1433 |
msgstr ""
|
1434 |
|
1435 |
+
#: defaults.php:1741
|
1436 |
msgid "Changed the password of the user %TargetUserData->Username%."
|
1437 |
msgstr ""
|
1438 |
|
1439 |
+
#: defaults.php:1754
|
1440 |
msgid "User changed his or her email address"
|
1441 |
msgstr ""
|
1442 |
|
1443 |
+
#: defaults.php:1755
|
1444 |
msgid "Changed the email address to %NewEmail%."
|
1445 |
msgstr ""
|
1446 |
|
1447 |
+
#: defaults.php:1760, defaults.php:1775
|
1448 |
msgid "Previous email address"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
+
#: defaults.php:1769
|
1452 |
msgid "User changed another user's email address"
|
1453 |
msgstr ""
|
1454 |
|
1455 |
+
#: defaults.php:1770
|
1456 |
msgid "Changed the email address of the user %TargetUsername% to %NewEmail%."
|
1457 |
msgstr ""
|
1458 |
|
1459 |
+
#: defaults.php:1784
|
1460 |
msgid "User was deleted by another user"
|
1461 |
msgstr ""
|
1462 |
|
1463 |
+
#: defaults.php:1785
|
1464 |
msgid "Deleted the user %TargetUserData->Username%."
|
1465 |
msgstr ""
|
1466 |
|
1467 |
+
#: defaults.php:1798
|
1468 |
msgid "User opened the profile page of another user"
|
1469 |
msgstr ""
|
1470 |
|
1471 |
+
#: defaults.php:1799
|
1472 |
msgid "Opened the profile page of user %TargetUsername%."
|
1473 |
msgstr ""
|
1474 |
|
1475 |
+
#: defaults.php:1812
|
1476 |
msgid "User updated a custom field value for a user"
|
1477 |
msgstr ""
|
1478 |
|
1479 |
+
#: defaults.php:1813
|
1480 |
msgid "Changed the value of the custom field %custom_field_name% in the user profile %TargetUsername%."
|
1481 |
msgstr ""
|
1482 |
|
1483 |
+
#: defaults.php:1818, defaults.php:2612, defaults.php:2644, defaults.php:2908
|
1484 |
msgid "Previous value"
|
1485 |
msgstr ""
|
1486 |
|
1487 |
+
#: defaults.php:1819, defaults.php:2909
|
1488 |
msgid "New value"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
+
#: defaults.php:1828
|
1492 |
msgid "User created a custom field value for a user"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
+
#: defaults.php:1829
|
1496 |
msgid "Created the custom field %custom_field_name% in the user profile %TargetUsername%."
|
1497 |
msgstr ""
|
1498 |
|
1499 |
+
#: defaults.php:1843
|
1500 |
msgid "User changed first name for a user"
|
1501 |
msgstr ""
|
1502 |
|
1503 |
+
#: defaults.php:1844
|
1504 |
msgid "Changed the first name of the user %TargetUsername% to %new_firstname%."
|
1505 |
msgstr ""
|
1506 |
|
1507 |
+
#: defaults.php:1847
|
1508 |
msgid "Previous name"
|
1509 |
msgstr ""
|
1510 |
|
1511 |
+
#: defaults.php:1857
|
1512 |
msgid "User changed last name for a user"
|
1513 |
msgstr ""
|
1514 |
|
1515 |
+
#: defaults.php:1858
|
1516 |
msgid "Changed the last name of the user %TargetUsername% to %new_lastname%."
|
1517 |
msgstr ""
|
1518 |
|
1519 |
+
#: defaults.php:1862
|
1520 |
msgid "Previous last name"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
+
#: defaults.php:1871
|
1524 |
msgid "User changed nickname for a user"
|
1525 |
msgstr ""
|
1526 |
|
1527 |
+
#: defaults.php:1872
|
1528 |
msgid "Changed the nickname of the user %TargetUsername% to %new_nickname%."
|
1529 |
msgstr ""
|
1530 |
|
1531 |
+
#: defaults.php:1877
|
1532 |
msgid "Previous nickname"
|
1533 |
msgstr ""
|
1534 |
|
1535 |
+
#: defaults.php:1886
|
1536 |
msgid "User changed the display name for a user"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
+
#: defaults.php:1887
|
1540 |
msgid "Changed the display name of the user %TargetUsername% to %new_displayname%."
|
1541 |
msgstr ""
|
1542 |
|
1543 |
+
#: defaults.php:1892
|
1544 |
msgid "Previous display name"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
+
#: defaults.php:1902, defaults.php:1916
|
1548 |
msgid "User created an application password"
|
1549 |
msgstr ""
|
1550 |
|
1551 |
+
#: defaults.php:1903
|
1552 |
msgid "The application password %friendly_name%."
|
1553 |
msgstr ""
|
1554 |
|
1555 |
+
#: defaults.php:1917
|
1556 |
msgid "The application password %friendly_name% for the user %login%."
|
1557 |
msgstr ""
|
1558 |
|
1559 |
+
#: defaults.php:1931
|
1560 |
msgid "User revoked all application passwords"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
+
#: defaults.php:1932
|
1564 |
msgid "All application passwords."
|
1565 |
msgstr ""
|
1566 |
|
1567 |
+
#: defaults.php:1945
|
1568 |
msgid "User revoked all application passwords for a user"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
+
#: defaults.php:1946
|
1572 |
msgid "All application passwords from the user %login%."
|
1573 |
msgstr ""
|
1574 |
|
1575 |
+
#: defaults.php:1959
|
1576 |
msgid "Admin sent a password reset request to a user"
|
1577 |
msgstr ""
|
1578 |
|
1579 |
+
#: defaults.php:1960
|
1580 |
msgid "Sent a password reset request to the user %login%."
|
1581 |
msgstr ""
|
1582 |
|
1583 |
+
#: defaults.php:1972
|
1584 |
msgid "Multisite User Profiles"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
+
#: defaults.php:1976
|
1588 |
msgid "User granted Super Admin privileges"
|
1589 |
msgstr ""
|
1590 |
|
1591 |
+
#: defaults.php:1977
|
1592 |
msgid "Granted Super Admin privileges to the user %TargetUsername%."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
+
#: defaults.php:1990
|
1596 |
msgid "User revoked from Super Admin privileges"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
+
#: defaults.php:1991
|
1600 |
msgid "Revoked Super Admin privileges from %TargetUsername%."
|
1601 |
msgstr ""
|
1602 |
|
1603 |
+
#: defaults.php:2004
|
1604 |
msgid "Existing user added to a site"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
+
#: defaults.php:2005
|
1608 |
msgid "Added user %TargetUsername% to the site %SiteName%."
|
1609 |
msgstr ""
|
1610 |
|
1611 |
+
#: defaults.php:2018
|
1612 |
msgid "User removed from site"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
+
#: defaults.php:2019
|
1616 |
msgid "Removed user %TargetUsername% from the site %SiteName%"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: defaults.php:2021
|
1620 |
msgid "Site role"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
+
#: defaults.php:2032
|
1624 |
msgid "New network user created"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
+
#: defaults.php:2033
|
1628 |
msgid "Created the new network user %NewUserData->Username%."
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: defaults.php:2045
|
1632 |
msgid "Plugins & Themes"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: defaults.php:2046, classes/AuditLogGridView.php:467, classes/AuditLogListView.php:463
|
1636 |
msgid "Plugins"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
+
#: defaults.php:2050
|
1640 |
msgid "User installed a plugin"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
+
#: defaults.php:2051
|
1644 |
msgid "Installed the plugin %Plugin->Name%."
|
1645 |
msgstr ""
|
1646 |
|
1647 |
+
#: defaults.php:2053, defaults.php:2066, defaults.php:2079, defaults.php:2092, defaults.php:2197, defaults.php:2210, defaults.php:2223, defaults.php:2298, defaults.php:2311
|
1648 |
msgid "Version"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
+
#: defaults.php:2054, defaults.php:2067, defaults.php:2080, defaults.php:2093, defaults.php:2106, defaults.php:2198, defaults.php:2211, defaults.php:2224, defaults.php:2273, defaults.php:2299, defaults.php:2312
|
1652 |
msgid "Install location"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
+
#: defaults.php:2063
|
1656 |
msgid "User activated a WordPress plugin"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
+
#: defaults.php:2064
|
1660 |
msgid "Activated the plugin %PluginData->Name%."
|
1661 |
msgstr ""
|
1662 |
|
1663 |
+
#: defaults.php:2076
|
1664 |
msgid "User deactivated a WordPress plugin"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: defaults.php:2077
|
1668 |
msgid "Deactivated the plugin %PluginData->Name%."
|
1669 |
msgstr ""
|
1670 |
|
1671 |
+
#: defaults.php:2089
|
1672 |
msgid "User uninstalled a plugin"
|
1673 |
msgstr ""
|
1674 |
|
1675 |
+
#: defaults.php:2090
|
1676 |
msgid "Uninstalled the plugin %PluginData->Name%."
|
1677 |
msgstr ""
|
1678 |
|
1679 |
+
#: defaults.php:2102
|
1680 |
msgid "User upgraded a plugin"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
+
#: defaults.php:2103
|
1684 |
msgid "Updated the plugin %PluginData->Name%."
|
1685 |
msgstr ""
|
1686 |
|
1687 |
+
#: defaults.php:2105
|
1688 |
msgid "Updated version"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
+
#: defaults.php:2115
|
1692 |
msgid "Plugin created table"
|
1693 |
msgstr ""
|
1694 |
|
1695 |
+
#: defaults.php:2116
|
1696 |
msgid "The plugin %Plugin->Name% created this table in the database."
|
1697 |
msgstr ""
|
1698 |
|
1699 |
+
#: defaults.php:2118, defaults.php:2130, defaults.php:2142, defaults.php:2236, defaults.php:2248
|
1700 |
msgid "Table"
|
1701 |
msgstr ""
|
1702 |
|
1703 |
+
#: defaults.php:2127
|
1704 |
msgid "Plugin modified table structure"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
+
#: defaults.php:2128
|
1708 |
msgid "The plugin %Plugin->Name% modified the structure of a database table."
|
1709 |
msgstr ""
|
1710 |
|
1711 |
+
#: defaults.php:2139
|
1712 |
msgid "Plugin deleted table"
|
1713 |
msgstr ""
|
1714 |
|
1715 |
+
#: defaults.php:2140
|
1716 |
msgid "The plugin %Plugin->Name% deleted this table from the database."
|
1717 |
msgstr ""
|
1718 |
|
1719 |
+
#: defaults.php:2151
|
1720 |
msgid "A plugin created a post"
|
1721 |
msgstr ""
|
1722 |
|
1723 |
+
#: defaults.php:2152
|
1724 |
msgid "The plugin created the post %PostTitle%."
|
1725 |
msgstr ""
|
1726 |
|
1727 |
+
#: defaults.php:2157, defaults.php:2172, classes/AlertManager.php:1148, classes/AuditLogGridView.php:464, classes/AuditLogListView.php:461
|
1728 |
msgid "Plugin"
|
1729 |
msgstr ""
|
1730 |
|
1731 |
+
#: defaults.php:2166
|
1732 |
msgid "A plugin deleted a post"
|
1733 |
msgstr ""
|
1734 |
|
1735 |
+
#: defaults.php:2167
|
1736 |
msgid "A plugin deleted the post %PostTitle%."
|
1737 |
msgstr ""
|
1738 |
|
1739 |
+
#: defaults.php:2181
|
1740 |
msgid "User changed a file using the plugin editor"
|
1741 |
msgstr ""
|
1742 |
|
1743 |
+
#: defaults.php:2182
|
1744 |
msgid "Modified the file %File% with the plugin editor."
|
1745 |
msgstr ""
|
1746 |
|
1747 |
+
#: defaults.php:2190
|
1748 |
msgid "Themes"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
+
#: defaults.php:2194
|
1752 |
msgid "User installed a theme"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
+
#: defaults.php:2195
|
1756 |
msgid "Installed the theme %Theme->Name%."
|
1757 |
msgstr ""
|
1758 |
|
1759 |
+
#: defaults.php:2207
|
1760 |
msgid "User activated a theme"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
+
#: defaults.php:2208
|
1764 |
msgid "Activated the theme %Theme->Name%."
|
1765 |
msgstr ""
|
1766 |
|
1767 |
+
#: defaults.php:2220
|
1768 |
msgid "User uninstalled a theme"
|
1769 |
msgstr ""
|
1770 |
|
1771 |
+
#: defaults.php:2221
|
1772 |
msgid "Deleted the theme %Theme->Name%."
|
1773 |
msgstr ""
|
1774 |
|
1775 |
+
#: defaults.php:2233
|
1776 |
msgid "Theme created tables"
|
1777 |
msgstr ""
|
1778 |
|
1779 |
+
#: defaults.php:2234
|
1780 |
msgid "The theme %Theme->Name% created this tables in the database."
|
1781 |
msgstr ""
|
1782 |
|
1783 |
+
#: defaults.php:2245
|
1784 |
msgid "Theme modified tables structure"
|
1785 |
msgstr ""
|
1786 |
|
1787 |
+
#: defaults.php:2246
|
1788 |
msgid "The theme %Theme->Name% modified the structure of this database table"
|
1789 |
msgstr ""
|
1790 |
|
1791 |
+
#: defaults.php:2257
|
1792 |
msgid "Theme deleted tables"
|
1793 |
msgstr ""
|
1794 |
|
1795 |
+
#: defaults.php:2258
|
1796 |
msgid "The theme %Theme->Name% deleted this table from the database."
|
1797 |
msgstr ""
|
1798 |
|
1799 |
+
#: defaults.php:2260, defaults.php:2327, defaults.php:2339, defaults.php:2351, defaults.php:2363, defaults.php:2375, defaults.php:2387
|
1800 |
msgid "Tables"
|
1801 |
msgstr ""
|
1802 |
|
1803 |
+
#: defaults.php:2269
|
1804 |
msgid "User updated a theme"
|
1805 |
msgstr ""
|
1806 |
|
1807 |
+
#: defaults.php:2270
|
1808 |
msgid "Updated the theme %Theme->Name%."
|
1809 |
msgstr ""
|
1810 |
|
1811 |
+
#: defaults.php:2272, defaults.php:2441
|
1812 |
msgid "New version"
|
1813 |
msgstr ""
|
1814 |
|
1815 |
+
#: defaults.php:2282
|
1816 |
msgid "User changed a file using the theme editor"
|
1817 |
msgstr ""
|
1818 |
|
1819 |
+
#: defaults.php:2283
|
1820 |
msgid "Modified the file %Theme%/%File% with the theme editor."
|
1821 |
msgstr ""
|
1822 |
|
1823 |
+
#: defaults.php:2291
|
1824 |
msgid "Themes on Multisite"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
+
#: defaults.php:2295
|
1828 |
msgid "Activated theme on network"
|
1829 |
msgstr ""
|
1830 |
|
1831 |
+
#: defaults.php:2296
|
1832 |
msgid "Network activated the theme %Theme->Name%."
|
1833 |
msgstr ""
|
1834 |
|
1835 |
+
#: defaults.php:2308
|
1836 |
msgid "Deactivated theme from network"
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: defaults.php:2309
|
1840 |
msgid "Network deactivated the theme %Theme->Name%."
|
1841 |
msgstr ""
|
1842 |
|
1843 |
+
#: defaults.php:2320
|
1844 |
msgid "Database Events"
|
1845 |
msgstr ""
|
1846 |
|
1847 |
+
#: defaults.php:2324
|
1848 |
msgid "Unknown component created tables"
|
1849 |
msgstr ""
|
1850 |
|
1851 |
+
#: defaults.php:2325
|
1852 |
msgid "An unknown component created these tables in the database."
|
1853 |
msgstr ""
|
1854 |
|
1855 |
+
#: defaults.php:2336
|
1856 |
msgid "Unknown component modified tables structure"
|
1857 |
msgstr ""
|
1858 |
|
1859 |
+
#: defaults.php:2337
|
1860 |
msgid "An unknown component modified the structure of these database tables."
|
1861 |
msgstr ""
|
1862 |
|
1863 |
+
#: defaults.php:2348
|
1864 |
msgid "Unknown component deleted tables"
|
1865 |
msgstr ""
|
1866 |
|
1867 |
+
#: defaults.php:2349
|
1868 |
msgid "An unknown component deleted these tables from the database."
|
1869 |
msgstr ""
|
1870 |
|
1871 |
+
#: defaults.php:2360
|
1872 |
msgid "WordPress created tables"
|
1873 |
msgstr ""
|
1874 |
|
1875 |
+
#: defaults.php:2361
|
1876 |
msgid "WordPress has created these tables in the database."
|
1877 |
msgstr ""
|
1878 |
|
1879 |
+
#: defaults.php:2372
|
1880 |
msgid "WordPress modified tables structure"
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: defaults.php:2373
|
1884 |
msgid "WordPress modified the structure of these database tables."
|
1885 |
msgstr ""
|
1886 |
|
1887 |
+
#: defaults.php:2384
|
1888 |
msgid "WordPress deleted tables"
|
1889 |
msgstr ""
|
1890 |
|
1891 |
+
#: defaults.php:2385
|
1892 |
msgid "WordPress deleted these tables from the database."
|
1893 |
msgstr ""
|
1894 |
|
1895 |
+
#: defaults.php:2396
|
1896 |
msgid "WordPress & System"
|
1897 |
msgstr ""
|
1898 |
|
1899 |
+
#: defaults.php:2397, classes/AlertManager.php:1147, classes/AlertManager.php:1936, classes/AuditLogGridView.php:473, classes/AuditLogListView.php:467, extensions/email-notifications/classes/DailyNotification.php:243, extensions/email-notifications/classes/Notifier.php:642, extensions/reports/classes/Common.php:1258
|
1900 |
msgid "System"
|
1901 |
msgstr ""
|
1902 |
|
1903 |
+
#: defaults.php:2401
|
1904 |
msgid "Unknown Error"
|
1905 |
msgstr ""
|
1906 |
|
1907 |
+
#: defaults.php:2402
|
1908 |
msgid "An unexpected error has occurred."
|
1909 |
msgstr ""
|
1910 |
|
1911 |
+
#: defaults.php:2407
|
1912 |
msgid "PHP error"
|
1913 |
msgstr ""
|
1914 |
|
1915 |
+
#: defaults.php:2408, defaults.php:2414, defaults.php:2420, defaults.php:2426, defaults.php:2432
|
1916 |
msgid "%Message%."
|
1917 |
msgstr ""
|
1918 |
|
1919 |
+
#: defaults.php:2413
|
1920 |
msgid "PHP warning"
|
1921 |
msgstr ""
|
1922 |
|
1923 |
+
#: defaults.php:2419
|
1924 |
msgid "PHP notice"
|
1925 |
msgstr ""
|
1926 |
|
1927 |
+
#: defaults.php:2425
|
1928 |
msgid "PHP exception"
|
1929 |
msgstr ""
|
1930 |
|
1931 |
+
#: defaults.php:2431
|
1932 |
msgid "PHP shutdown error"
|
1933 |
msgstr ""
|
1934 |
|
1935 |
+
#: defaults.php:2437
|
1936 |
msgid "WordPress was updated"
|
1937 |
msgstr ""
|
1938 |
|
1939 |
+
#: defaults.php:2438
|
1940 |
msgid "Updated WordPress."
|
1941 |
msgstr ""
|
1942 |
|
1943 |
+
#: defaults.php:2440
|
1944 |
msgid "Previous version"
|
1945 |
msgstr ""
|
1946 |
|
1947 |
+
#: defaults.php:2457
|
1948 |
msgid "Advertising Extensions"
|
1949 |
msgstr ""
|
1950 |
|
1951 |
+
#: defaults.php:2458
|
1952 |
msgid "%PromoName% %PromoMessage%"
|
1953 |
msgstr ""
|
1954 |
|
1955 |
+
#: defaults.php:2462
|
1956 |
msgid "Activity log plugin"
|
1957 |
msgstr ""
|
1958 |
|
1959 |
+
#: defaults.php:2466
|
1960 |
msgid "Events automatically pruned by system"
|
1961 |
msgstr ""
|
1962 |
|
1963 |
+
#: defaults.php:2467
|
1964 |
msgid "System automatically deleted %EventCount% events from the activity log."
|
1965 |
msgstr ""
|
1966 |
|
1967 |
+
#: defaults.php:2476
|
1968 |
msgid "Reset the plugin's settings to default"
|
1969 |
msgstr ""
|
1970 |
|
1971 |
+
#: defaults.php:2477
|
1972 |
msgid "Reset the activity log plugin's settings to default."
|
1973 |
msgstr ""
|
1974 |
|
1975 |
+
#: defaults.php:2486
|
1976 |
msgid "Purged the activity log"
|
1977 |
msgstr ""
|
1978 |
|
1979 |
+
#: defaults.php:2487
|
1980 |
msgid "Purged the activity log."
|
1981 |
msgstr ""
|
1982 |
|
1983 |
+
#: defaults.php:2496
|
1984 |
msgid "Some WP Activity Log plugin settings on this site were propagated and overridden from the MainWP dashboard"
|
1985 |
msgstr ""
|
1986 |
|
1987 |
+
#: defaults.php:2497
|
1988 |
msgid "Some <strong>WP Activity Log</strong> plugin settings on this site were propagated and overridden from the MainWP dashboard."
|
1989 |
msgstr ""
|
1990 |
|
1991 |
+
#: defaults.php:2505
|
1992 |
msgid "WordPress Site Settings"
|
1993 |
msgstr ""
|
1994 |
|
1995 |
+
#: defaults.php:2509
|
1996 |
msgid "Option Anyone Can Register in WordPress settings changed"
|
1997 |
msgstr ""
|
1998 |
|
1999 |
+
#: defaults.php:2510
|
2000 |
msgid "The <strong>Membership</strong> setting <strong>Anyone can register</strong>."
|
2001 |
msgstr ""
|
2002 |
|
2003 |
+
#: defaults.php:2519
|
2004 |
msgid "New User Default Role changed"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
+
#: defaults.php:2520
|
2008 |
msgid "Changed the <strong>New user default role</strong> WordPress setting."
|
2009 |
msgstr ""
|
2010 |
|
2011 |
+
#: defaults.php:2523
|
2012 |
msgid "New role"
|
2013 |
msgstr ""
|
2014 |
|
2015 |
+
#: defaults.php:2532
|
2016 |
msgid "WordPress Administrator Notification email changed"
|
2017 |
msgstr ""
|
2018 |
|
2019 |
+
#: defaults.php:2533
|
2020 |
msgid "Change the <strong>Administrator email address</strong> in the WordPress settings."
|
2021 |
msgstr ""
|
2022 |
|
2023 |
+
#: defaults.php:2535
|
2024 |
msgid "Previous address"
|
2025 |
msgstr ""
|
2026 |
|
2027 |
+
#: defaults.php:2536
|
2028 |
msgid "New address"
|
2029 |
msgstr ""
|
2030 |
|
2031 |
+
#: defaults.php:2545
|
2032 |
msgid "User changes the WordPress Permalinks"
|
2033 |
msgstr ""
|
2034 |
|
2035 |
+
#: defaults.php:2546
|
2036 |
msgid "Changed the <strong>WordPress permalinks</strong>."
|
2037 |
msgstr ""
|
2038 |
|
2039 |
+
#: defaults.php:2548
|
2040 |
msgid "Previous permalinks"
|
2041 |
msgstr ""
|
2042 |
|
2043 |
+
#: defaults.php:2549
|
2044 |
msgid "New permalinks"
|
2045 |
msgstr ""
|
2046 |
|
2047 |
+
#: defaults.php:2558
|
2048 |
msgid "Enabled/Disabled the option Discourage search engines from indexing this site"
|
2049 |
msgstr ""
|
2050 |
|
2051 |
+
#: defaults.php:2559
|
2052 |
msgid "Changed the status of the WordPress setting <strong>Search engine visibility</strong> (Discourage search engines from indexing this site)"
|
2053 |
msgstr ""
|
2054 |
|
2055 |
+
#: defaults.php:2568
|
2056 |
msgid "Enabled/Disabled comments on all the website"
|
2057 |
msgstr ""
|
2058 |
|
2059 |
+
#: defaults.php:2569
|
2060 |
msgid "Changed the status of the WordPress setting <strong>Allow people to submit comments on new posts</strong>."
|
2061 |
msgstr ""
|
2062 |
|
2063 |
+
#: defaults.php:2579
|
2064 |
msgid "Enabled/Disabled the option Comment author must fill out name and email"
|
2065 |
msgstr ""
|
2066 |
|
2067 |
+
#: defaults.php:2580
|
2068 |
msgid "Changed the status of the WordPress setting <strong>.Comment author must fill out name and email</strong>."
|
2069 |
msgstr ""
|
2070 |
|
2071 |
+
#: defaults.php:2589
|
2072 |
msgid "Enabled/Disabled the option Users must be logged in and registered to comment"
|
2073 |
msgstr ""
|
2074 |
|
2075 |
+
#: defaults.php:2590
|
2076 |
msgid "Changed the status of the WordPress setting <strong>Users must be registered and logged in to comment</strong>."
|
2077 |
msgstr ""
|
2078 |
|
2079 |
+
#: defaults.php:2599
|
2080 |
msgid "Enabled/Disabled the option to automatically close comments"
|
2081 |
msgstr ""
|
2082 |
|
2083 |
+
#: defaults.php:2600
|
2084 |
msgid "Changed the status of the WordPress setting <strong>Automatically close comments after %Value% days</strong>."
|
2085 |
msgstr ""
|
2086 |
|
2087 |
+
#: defaults.php:2609
|
2088 |
msgid "Changed the value of the option Automatically close comments"
|
2089 |
msgstr ""
|
2090 |
|
2091 |
+
#: defaults.php:2610
|
2092 |
msgid "Changed the value of the WordPress setting <strong>Automatically close comments after a number of days</strong> to %NewValue%."
|
2093 |
msgstr ""
|
2094 |
|
2095 |
+
#: defaults.php:2621
|
2096 |
msgid "Enabled/Disabled the option for comments to be manually approved"
|
2097 |
msgstr ""
|
2098 |
|
2099 |
+
#: defaults.php:2622
|
2100 |
msgid "Changed the value of the WordPress setting <strong>Comments must be manualy approved</strong>."
|
2101 |
msgstr ""
|
2102 |
|
2103 |
+
#: defaults.php:2631
|
2104 |
msgid "Enabled/Disabled the option for an author to have previously approved comments for the comments to appear"
|
2105 |
msgstr ""
|
2106 |
|
2107 |
+
#: defaults.php:2632
|
2108 |
msgid "Changed the value of the WordPress setting <strong>Comment author must have a previously approved comment</strong>."
|
2109 |
msgstr ""
|
2110 |
|
2111 |
+
#: defaults.php:2641
|
2112 |
msgid "Changed the number of links that a comment must have to be held in the queue"
|
2113 |
msgstr ""
|
2114 |
|
2115 |
+
#: defaults.php:2642
|
2116 |
msgid "Changed the value of the WordPress setting <strong>Hold a comment in the queue if it contains links</strong> to %NewValue% links."
|
2117 |
msgstr ""
|
2118 |
|
2119 |
+
#: defaults.php:2653
|
2120 |
msgid "Modified the list of keywords for comments moderation"
|
2121 |
msgstr ""
|
2122 |
|
2123 |
+
#: defaults.php:2654
|
2124 |
msgid "Modified the list of keywords for comments medoration in WordPress."
|
2125 |
msgstr ""
|
2126 |
|
2127 |
+
#: defaults.php:2663
|
2128 |
msgid "Modified the list of keywords for comments blacklisting"
|
2129 |
msgstr ""
|
2130 |
|
2131 |
+
#: defaults.php:2664
|
2132 |
msgid "Modified the list of <strong>Disallowed comment keys</strong> (keywords) for comments blacklisting in WordPress."
|
2133 |
msgstr ""
|
2134 |
|
2135 |
+
#: defaults.php:2673
|
2136 |
msgid "Option WordPress Address (URL) in WordPress settings changed"
|
2137 |
msgstr ""
|
2138 |
|
2139 |
+
#: defaults.php:2674
|
2140 |
msgid "Changed the <strong>WordPress address (URL)</strong> tp %new_url%."
|
2141 |
msgstr ""
|
2142 |
|
2143 |
+
#: defaults.php:2685
|
2144 |
msgid "Option Site Address (URL) in WordPress settings changed"
|
2145 |
msgstr ""
|
2146 |
|
2147 |
+
#: defaults.php:2686
|
2148 |
msgid "Changed the <strong>Site address (URL)</strong> to %new_url%."
|
2149 |
msgstr ""
|
2150 |
|
2151 |
+
#: defaults.php:2697
|
2152 |
msgid "Option Your homepage displays in WordPress settings changed"
|
2153 |
msgstr ""
|
2154 |
|
2155 |
+
#: defaults.php:2698
|
2156 |
msgid "Changed the <strong>Your homepage displays</strong> WordPress setting to %new_homepage%."
|
2157 |
msgstr ""
|
2158 |
|
2159 |
+
#: defaults.php:2700, defaults.php:2787, defaults.php:2933
|
2160 |
msgid "Previous setting"
|
2161 |
msgstr ""
|
2162 |
|
2163 |
+
#: defaults.php:2709
|
2164 |
msgid "Option homepage in WordPress settings changed"
|
2165 |
msgstr ""
|
2166 |
|
2167 |
+
#: defaults.php:2710
|
2168 |
msgid "Changed the <strong>Homepage</strong> in the WordPress settings to %new_page%."
|
2169 |
msgstr ""
|
2170 |
|
2171 |
+
#: defaults.php:2712, defaults.php:2724
|
2172 |
msgid "Previous page"
|
2173 |
msgstr ""
|
2174 |
|
2175 |
+
#: defaults.php:2721
|
2176 |
msgid "Option posts page in WordPress settings changed"
|
2177 |
msgstr ""
|
2178 |
|
2179 |
+
#: defaults.php:2722
|
2180 |
msgid "Changed the <strong> Posts</strong> page in the WordPress settings to %new_page%."
|
2181 |
msgstr ""
|
2182 |
|
2183 |
+
#: defaults.php:2734
|
2184 |
msgid "Option Timezone in WordPress settings changed"
|
2185 |
msgstr ""
|
2186 |
|
2187 |
+
#: defaults.php:2735
|
2188 |
msgid "Changed the <strong>Timezone</strong> in the WordPress settings to %new_timezone%."
|
2189 |
msgstr ""
|
2190 |
|
2191 |
+
#: defaults.php:2737
|
2192 |
msgid "Previous timezone"
|
2193 |
msgstr ""
|
2194 |
|
2195 |
+
#: defaults.php:2746
|
2196 |
msgid "Option Date format in WordPress settings changed"
|
2197 |
msgstr ""
|
2198 |
|
2199 |
+
#: defaults.php:2747
|
2200 |
msgid "Changed the <strong>Date format</strong> in the WordPress settings to %new_date_format%."
|
2201 |
msgstr ""
|
2202 |
|
2203 |
+
#: defaults.php:2749, defaults.php:2761
|
2204 |
msgid "Previous format"
|
2205 |
msgstr ""
|
2206 |
|
2207 |
+
#: defaults.php:2758
|
2208 |
msgid "Option Time format in WordPress settings changed"
|
2209 |
msgstr ""
|
2210 |
|
2211 |
+
#: defaults.php:2759
|
2212 |
msgid "Changed the <strong>Time format</strong> in the WordPress settings to %new_time_format%."
|
2213 |
msgstr ""
|
2214 |
|
2215 |
+
#: defaults.php:2771
|
2216 |
msgid "Option Automatic updates setting changed"
|
2217 |
msgstr ""
|
2218 |
|
2219 |
+
#: defaults.php:2772
|
2220 |
msgid "Changed the <strong>Automatic updates</strong> setting."
|
2221 |
msgstr ""
|
2222 |
|
2223 |
+
#: defaults.php:2774
|
2224 |
msgid "New setting status"
|
2225 |
msgstr ""
|
2226 |
|
2227 |
+
#: defaults.php:2784
|
2228 |
msgid "Option Site Language setting changed"
|
2229 |
msgstr ""
|
2230 |
|
2231 |
+
#: defaults.php:2785
|
2232 |
msgid "Changed the <strong>Site Language</strong> to %new_value%."
|
2233 |
msgstr ""
|
2234 |
|
2235 |
+
#: defaults.php:2796
|
2236 |
msgid "Multisite Network Sites"
|
2237 |
msgstr ""
|
2238 |
|
2239 |
+
#: defaults.php:2797
|
2240 |
msgid "MultiSite"
|
2241 |
msgstr ""
|
2242 |
|
2243 |
+
#: defaults.php:2801
|
2244 |
msgid "New site added on the network"
|
2245 |
msgstr ""
|
2246 |
|
2247 |
+
#: defaults.php:2802
|
2248 |
msgid "Added the new site %SiteName% to the network."
|
2249 |
msgstr ""
|
2250 |
|
2251 |
+
#: defaults.php:2804, defaults.php:2816, defaults.php:2828, defaults.php:2840, defaults.php:2852, defaults.php:2864
|
2252 |
msgid "URL"
|
2253 |
msgstr ""
|
2254 |
|
2255 |
+
#: defaults.php:2813
|
2256 |
msgid "Existing site archived"
|
2257 |
msgstr ""
|
2258 |
|
2259 |
+
#: defaults.php:2814
|
2260 |
msgid "Archived the site %SiteName% on the network."
|
2261 |
msgstr ""
|
2262 |
|
2263 |
+
#: defaults.php:2825
|
2264 |
msgid "Archived site has been unarchived"
|
2265 |
msgstr ""
|
2266 |
|
2267 |
+
#: defaults.php:2826
|
2268 |
msgid "Unarchived the site %SiteName%."
|
2269 |
msgstr ""
|
2270 |
|
2271 |
+
#: defaults.php:2837
|
2272 |
msgid "Deactivated site has been activated"
|
2273 |
msgstr ""
|
2274 |
|
2275 |
+
#: defaults.php:2838
|
2276 |
msgid "Activated the site %SiteName% on the network."
|
2277 |
msgstr ""
|
2278 |
|
2279 |
+
#: defaults.php:2849
|
2280 |
msgid "Site has been deactivated"
|
2281 |
msgstr ""
|
2282 |
|
2283 |
+
#: defaults.php:2850
|
2284 |
msgid "Deactiveated the site %SiteName% on the network."
|
2285 |
msgstr ""
|
2286 |
|
2287 |
+
#: defaults.php:2861
|
2288 |
msgid "Existing site deleted from network"
|
2289 |
msgstr ""
|
2290 |
|
2291 |
+
#: defaults.php:2862
|
2292 |
msgid "The site: %SiteName%."
|
2293 |
msgstr ""
|
2294 |
|
2295 |
+
#: defaults.php:2873
|
2296 |
msgid "Allow site administrators to add new users to their sites settings changed"
|
2297 |
msgstr ""
|
2298 |
|
2299 |
+
#: defaults.php:2874
|
2300 |
msgid "Changed the status of the network setting <strong>Allow site administrators to add new users to their sites</strong>."
|
2301 |
msgstr ""
|
2302 |
|
2303 |
+
#: defaults.php:2883
|
2304 |
msgid "Site upload space settings changed"
|
2305 |
msgstr ""
|
2306 |
|
2307 |
+
#: defaults.php:2884
|
2308 |
msgid "Changed the status of the network setting <strong>Site upload space</strong> (to limit space allocated for each site's upload directory)."
|
2309 |
msgstr ""
|
2310 |
|
2311 |
+
#: defaults.php:2893
|
2312 |
msgid "Site upload space file size settings changed"
|
2313 |
msgstr ""
|
2314 |
|
2315 |
+
#: defaults.php:2894
|
2316 |
msgid "Changed the file size in the <strong>Site upload space</strong> network setting to %new_value%."
|
2317 |
msgstr ""
|
2318 |
|
2319 |
+
#: defaults.php:2896
|
2320 |
msgid "Previous size (MB)"
|
2321 |
msgstr ""
|
2322 |
|
2323 |
+
#: defaults.php:2905
|
2324 |
msgid "Site Upload file types settings changed"
|
2325 |
msgstr ""
|
2326 |
|
2327 |
+
#: defaults.php:2906
|
2328 |
msgid "Changed the network setting <strong>Upload file types (list of allowed file types)</strong>."
|
2329 |
msgstr ""
|
2330 |
|
2331 |
+
#: defaults.php:2918
|
2332 |
msgid "Site Max upload file size settings changed"
|
2333 |
msgstr ""
|
2334 |
|
2335 |
+
#: defaults.php:2919
|
2336 |
msgid "Changed the <strong>Max upload file size</strong> network setting to %new_value%."
|
2337 |
msgstr ""
|
2338 |
|
2339 |
+
#: defaults.php:2921
|
2340 |
msgid "Previous size (KB)"
|
2341 |
msgstr ""
|
2342 |
|
2343 |
+
#: defaults.php:2930
|
2344 |
msgid "Allow new registrations settings changed"
|
2345 |
msgstr ""
|
2346 |
|
2347 |
+
#: defaults.php:2931
|
2348 |
msgid "Changed the <strong>Allow new registrations</strong> setting to %new_setting%."
|
2349 |
msgstr ""
|
2350 |
|
2351 |
+
#: defaults.php:2947, classes/Views/Settings.php:99
|
2352 |
msgid "File Changes"
|
2353 |
msgstr ""
|
2354 |
|
2355 |
+
#: defaults.php:2948
|
2356 |
msgid "Monitor File Changes"
|
2357 |
msgstr ""
|
2358 |
|
2359 |
+
#: defaults.php:2952
|
2360 |
msgid "Dummy"
|
2361 |
msgstr ""
|
2362 |
|
2363 |
#. translators: Username
|
2364 |
#. translators: Username
|
2365 |
+
#: wp-security-audit-log.php:930, wp-security-audit-log.php:957
|
2366 |
msgid "Hey %1$s"
|
2367 |
msgstr ""
|
2368 |
|
2369 |
+
#: wp-security-audit-log.php:931
|
2370 |
msgid "Never miss an important update! Opt-in to our security and feature updates notifications, and non-sensitive diagnostic tracking with freemius.com."
|
2371 |
msgstr ""
|
2372 |
|
2373 |
+
#: wp-security-audit-log.php:932, wp-security-audit-log.php:960
|
2374 |
msgid "Note: "
|
2375 |
msgstr ""
|
2376 |
|
2377 |
+
#: wp-security-audit-log.php:933, wp-security-audit-log.php:961
|
2378 |
msgid "NO ACTIVITY LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS."
|
2379 |
msgstr ""
|
2380 |
|
2381 |
#. translators: 1: Plugin name. 2: Freemius link.
|
2382 |
+
#: wp-security-audit-log.php:959
|
2383 |
msgid "Please help us improve %2$s! If you opt-in, some non-sensitive data about your usage of %2$s will be sent to %5$s, a diagnostic tracking service we use. If you skip this, that's okay! %2$s will still work just fine."
|
2384 |
msgstr ""
|
2385 |
|
2386 |
#. translators: Plugin name
|
2387 |
+
#: wp-security-audit-log.php:981
|
2388 |
msgid "Get a free 7-day trial of the premium edition of %s. No credit card required, no commitments!"
|
2389 |
msgstr ""
|
2390 |
|
2391 |
+
#: wp-security-audit-log.php:982, classes/AlertManager.php:1165
|
2392 |
msgid "WP Activity Log"
|
2393 |
msgstr ""
|
2394 |
|
2395 |
+
#: wp-security-audit-log.php:986
|
2396 |
msgid "Start free trial"
|
2397 |
msgstr ""
|
2398 |
|
2399 |
+
#: wp-security-audit-log.php:1054
|
2400 |
msgid "You need to activate the licence key to use WP Activity Log Premium. %2$s"
|
2401 |
msgstr ""
|
2402 |
|
2403 |
+
#: wp-security-audit-log.php:1055
|
2404 |
msgid "Activate the licence key now"
|
2405 |
msgstr ""
|
2406 |
|
2407 |
#. translators: Number of sites
|
2408 |
+
#: wp-security-audit-log.php:1077
|
2409 |
msgid "The license is limited to %s sub-sites. You need to upgrade your license to cover all the sub-sites on this network."
|
2410 |
msgstr ""
|
2411 |
|
2412 |
+
#: wp-security-audit-log.php:1073
|
2413 |
msgid "%s You need to renew your license to continue using premium features."
|
2414 |
msgstr ""
|
2415 |
|
2416 |
+
#: wp-security-audit-log.php:1188
|
2417 |
msgid "Error: You do not have sufficient permissions to disable this custom field."
|
2418 |
msgstr ""
|
2419 |
|
2420 |
+
#: wp-security-audit-log.php:1223
|
2421 |
msgid "Custom Field <strong>%1$s</strong> is no longer being monitored.<br />Enable the monitoring of this custom field again from the"
|
2422 |
msgstr ""
|
2423 |
|
2424 |
+
#: wp-security-audit-log.php:1226
|
2425 |
msgid "Excluded Objects"
|
2426 |
msgstr ""
|
2427 |
|
2428 |
+
#: wp-security-audit-log.php:1227
|
2429 |
msgid " tab in the plugin settings"
|
2430 |
msgstr ""
|
2431 |
|
2432 |
+
#: wp-security-audit-log.php:1240
|
2433 |
msgid "Error: You do not have sufficient permissions to disable this alert."
|
2434 |
msgstr ""
|
2435 |
|
2436 |
+
#: wp-security-audit-log.php:1264
|
2437 |
msgid "Alert %1$s is no longer being monitored.<br /> %2$s"
|
2438 |
msgstr ""
|
2439 |
|
2440 |
+
#: wp-security-audit-log.php:1264
|
2441 |
msgid "You can enable this alert again from the Enable/Disable Alerts node in the plugin menu."
|
2442 |
msgstr ""
|
2443 |
|
2444 |
+
#: wp-security-audit-log.php:1289, classes/Views/SetupWizard.php:270
|
2445 |
msgid "Installing, please wait"
|
2446 |
msgstr ""
|
2447 |
|
2448 |
+
#: wp-security-audit-log.php:1290, classes/Views/SetupWizard.php:271
|
2449 |
msgid "Already installed"
|
2450 |
msgstr ""
|
2451 |
|
2452 |
+
#: wp-security-audit-log.php:1291, classes/Utilities/PluginInstallAndActivate.php:108, classes/Views/SetupWizard.php:272, classes/Views/SetupWizard.php:836
|
2453 |
msgid "Extension installed"
|
2454 |
msgstr ""
|
2455 |
|
2456 |
+
#: wp-security-audit-log.php:1292, classes/Views/SetupWizard.php:273
|
2457 |
msgid "Extension activated"
|
2458 |
msgstr ""
|
2459 |
|
2460 |
+
#: wp-security-audit-log.php:1293, classes/Views/SetupWizard.php:274
|
2461 |
msgid "Install failed"
|
2462 |
msgstr ""
|
2463 |
|
2464 |
#. translators: %s: PHP Version
|
2465 |
+
#: wp-security-audit-log.php:1345
|
2466 |
msgid "You are using a version of PHP that is older than %s, which is no longer supported."
|
2467 |
msgstr ""
|
2468 |
|
2469 |
+
#: wp-security-audit-log.php:1347
|
2470 |
msgid "Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com\">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you are using."
|
2471 |
msgstr ""
|
2472 |
|
2473 |
#. translators: %s: Activity Log for MainWP plugin hyperlink
|
2474 |
+
#: wp-security-audit-log.php:1352
|
2475 |
msgid "Please install the %s plugin on the MainWP dashboard."
|
2476 |
msgstr ""
|
2477 |
|
2478 |
+
#: wp-security-audit-log.php:1352
|
2479 |
msgid "Activity Log for MainWP"
|
2480 |
msgstr ""
|
2481 |
|
2482 |
#. translators: %s: Getting started guide hyperlink
|
2483 |
+
#: wp-security-audit-log.php:1354
|
2484 |
msgid "The WP Activity Log should be installed on the child sites only. Refer to the %s for more information."
|
2485 |
msgstr ""
|
2486 |
|
2487 |
+
#: wp-security-audit-log.php:1354
|
2488 |
msgid "getting started guide"
|
2489 |
msgstr ""
|
2490 |
|
2491 |
+
#: wp-security-audit-log.php:1902
|
2492 |
msgid "For security and auditing purposes, a record of all of your logged-in actions and changes within the WordPress dashboard will be recorded in an activity log with the <a href=\"https://wpactivitylog.com/\" target=\"_blank\">WP Activity Log plugin</a>. The audit log also includes the IP address where you accessed this site from."
|
2493 |
msgstr ""
|
2494 |
|
2495 |
+
#: wp-security-audit-log.php:1921
|
2496 |
msgid "Every 6 hours"
|
2497 |
msgstr ""
|
2498 |
|
2499 |
+
#: wp-security-audit-log.php:1925
|
2500 |
msgid "Every 45 minutes"
|
2501 |
msgstr ""
|
2502 |
|
2503 |
+
#: wp-security-audit-log.php:1929
|
2504 |
msgid "Every 30 minutes"
|
2505 |
msgstr ""
|
2506 |
|
2507 |
+
#: wp-security-audit-log.php:1933
|
2508 |
msgid "Every 15 minutes"
|
2509 |
msgstr ""
|
2510 |
|
2511 |
+
#: wp-security-audit-log.php:1937
|
2512 |
msgid "Every 10 minutes"
|
2513 |
msgstr ""
|
2514 |
|
2515 |
+
#: wp-security-audit-log.php:1941
|
2516 |
msgid "Every 1 minute"
|
2517 |
msgstr ""
|
2518 |
|
2519 |
#. translators: 1. Deprecated method name 2. Version since deprecated
|
2520 |
+
#: wp-security-audit-log.php:1955
|
2521 |
msgid "Method %1$s is deprecated since version %2$s!"
|
2522 |
msgstr ""
|
2523 |
|
2524 |
+
#: classes/AlertFormatter.php:62
|
2525 |
msgid "Exclude Custom Field from the Monitoring"
|
2526 |
msgstr ""
|
2527 |
|
2528 |
+
#: classes/AlertFormatter.php:87
|
2529 |
msgid "unknown"
|
2530 |
msgstr ""
|
2531 |
|
2532 |
+
#: classes/AlertFormatter.php:134, classes/AlertFormatter.php:134
|
2533 |
msgid "Download the log file."
|
2534 |
msgstr ""
|
2535 |
|
2536 |
+
#: classes/AlertFormatter.php:142
|
2537 |
msgid "published"
|
2538 |
msgstr ""
|
2539 |
|
2540 |
#. translators: Event ID
|
2541 |
+
#: classes/AlertManager.php:412
|
2542 |
msgid "Event with code %d has not be registered."
|
2543 |
msgstr ""
|
2544 |
|
2545 |
#. translators: Event ID
|
2546 |
+
#: classes/AlertManager.php:496
|
2547 |
msgid "Event %s already registered with WP Activity Log."
|
2548 |
msgstr ""
|
2549 |
|
2550 |
+
#: classes/AlertManager.php:527
|
2551 |
msgid "You have custom events that are using the same ID or IDs which are already registered in the plugin, so they have been disabled."
|
2552 |
msgstr ""
|
2553 |
|
2554 |
#. translators: 1.CSS classes, 2. Notice, 3. Contact us link
|
2555 |
+
#: classes/AlertManager.php:530
|
2556 |
msgid "%4$s to help you solve this issue."
|
2557 |
msgstr ""
|
2558 |
|
2559 |
+
#: classes/AlertManager.php:532
|
2560 |
msgid "ERROR:"
|
2561 |
msgstr ""
|
2562 |
|
2563 |
+
#: classes/AlertManager.php:534
|
2564 |
msgid "Contact us"
|
2565 |
msgstr ""
|
2566 |
|
2567 |
+
#: classes/AlertManager.php:1149
|
2568 |
msgid "Database"
|
2569 |
msgstr ""
|
2570 |
|
2571 |
+
#: classes/AlertManager.php:1151, classes/AlertManager.php:1155
|
2572 |
msgid "File"
|
2573 |
msgstr ""
|
2574 |
|
2575 |
+
#: classes/AlertManager.php:1152
|
2576 |
msgid "Tag"
|
2577 |
msgstr ""
|
2578 |
|
2579 |
+
#: classes/AlertManager.php:1153
|
2580 |
msgid "Comment"
|
2581 |
msgstr ""
|
2582 |
|
2583 |
+
#: classes/AlertManager.php:1154
|
2584 |
msgid "Setting"
|
2585 |
msgstr ""
|
2586 |
|
2587 |
+
#: classes/AlertManager.php:1156
|
2588 |
msgid "System Setting"
|
2589 |
msgstr ""
|
2590 |
|
2591 |
+
#: classes/AlertManager.php:1157
|
2592 |
msgid "MainWP Network"
|
2593 |
msgstr ""
|
2594 |
|
2595 |
+
#: classes/AlertManager.php:1158
|
2596 |
msgid "MainWP"
|
2597 |
msgstr ""
|
2598 |
|
2599 |
+
#: classes/AlertManager.php:1159
|
2600 |
msgid "Category"
|
2601 |
msgstr ""
|
2602 |
|
2603 |
+
#: classes/AlertManager.php:1160
|
2604 |
msgid "Custom Field"
|
2605 |
msgstr ""
|
2606 |
|
2607 |
+
#: classes/AlertManager.php:1161
|
2608 |
msgid "Widget"
|
2609 |
msgstr ""
|
2610 |
|
2611 |
+
#: classes/AlertManager.php:1162
|
2612 |
msgid "Menu"
|
2613 |
msgstr ""
|
2614 |
|
2615 |
+
#: classes/AlertManager.php:1163
|
2616 |
msgid "Theme"
|
2617 |
msgstr ""
|
2618 |
|
2619 |
+
#: classes/AlertManager.php:1164
|
2620 |
msgid "Activity log"
|
2621 |
msgstr ""
|
2622 |
|
2623 |
+
#: classes/AlertManager.php:1166
|
2624 |
msgid "Multisite Network"
|
2625 |
msgstr ""
|
2626 |
|
2627 |
+
#: classes/AlertManager.php:1167, extensions/email-notifications/classes/Common.php:1122, extensions/search/classes/Filters/IpFilter.php:87, extensions/user-sessions/classes/View/Sessions.php:298
|
2628 |
msgid "IP Address"
|
2629 |
msgstr ""
|
2630 |
|
2631 |
+
#: classes/AlertManager.php:1183
|
2632 |
msgid "unknown object"
|
2633 |
msgstr ""
|
2634 |
|
2635 |
+
#: classes/AlertManager.php:1220
|
2636 |
msgid "Login"
|
2637 |
msgstr ""
|
2638 |
|
2639 |
+
#: classes/AlertManager.php:1221
|
2640 |
msgid "Logout"
|
2641 |
msgstr ""
|
2642 |
|
2643 |
+
#: classes/AlertManager.php:1222
|
2644 |
msgid "Installed"
|
2645 |
msgstr ""
|
2646 |
|
2647 |
+
#: classes/AlertManager.php:1223
|
2648 |
msgid "Activated"
|
2649 |
msgstr ""
|
2650 |
|
2651 |
+
#: classes/AlertManager.php:1224
|
2652 |
msgid "Deactivated"
|
2653 |
msgstr ""
|
2654 |
|
2655 |
+
#: classes/AlertManager.php:1225
|
2656 |
msgid "Uninstalled"
|
2657 |
msgstr ""
|
2658 |
|
2659 |
+
#: classes/AlertManager.php:1226
|
2660 |
msgid "Updated"
|
2661 |
msgstr ""
|
2662 |
|
2663 |
+
#: classes/AlertManager.php:1227, extensions/user-sessions/classes/View/Sessions.php:145
|
2664 |
msgid "Created"
|
2665 |
msgstr ""
|
2666 |
|
2667 |
+
#: classes/AlertManager.php:1228
|
2668 |
msgid "Modified"
|
2669 |
msgstr ""
|
2670 |
|
2671 |
+
#: classes/AlertManager.php:1229, extensions/search/search-init.php:301
|
2672 |
msgid "Deleted"
|
2673 |
msgstr ""
|
2674 |
|
2675 |
+
#: classes/AlertManager.php:1230, extensions/reports/classes/CsvReportGenerator.php:276, extensions/reports/classes/HtmlReportGenerator.php:453
|
2676 |
msgid "Published"
|
2677 |
msgstr ""
|
2678 |
|
2679 |
+
#: classes/AlertManager.php:1231
|
2680 |
msgid "Approved"
|
2681 |
msgstr ""
|
2682 |
|
2683 |
+
#: classes/AlertManager.php:1232
|
2684 |
msgid "Unapproved"
|
2685 |
msgstr ""
|
2686 |
|
2687 |
+
#: classes/AlertManager.php:1233
|
2688 |
msgid "Enabled"
|
2689 |
msgstr ""
|
2690 |
|
2691 |
+
#: classes/AlertManager.php:1234, extensions/email-notifications/classes/Notifications.php:1820
|
2692 |
msgid "Disabled"
|
2693 |
msgstr ""
|
2694 |
|
2695 |
+
#: classes/AlertManager.php:1235
|
2696 |
msgid "Added"
|
2697 |
msgstr ""
|
2698 |
|
2699 |
+
#: classes/AlertManager.php:1236
|
2700 |
msgid "Failed Login"
|
2701 |
msgstr ""
|
2702 |
|
2703 |
+
#: classes/AlertManager.php:1237
|
2704 |
msgid "Blocked"
|
2705 |
msgstr ""
|
2706 |
|
2707 |
+
#: classes/AlertManager.php:1238
|
2708 |
msgid "Uploaded"
|
2709 |
msgstr ""
|
2710 |
|
2711 |
+
#: classes/AlertManager.php:1239
|
2712 |
msgid "Restored"
|
2713 |
msgstr ""
|
2714 |
|
2715 |
+
#: classes/AlertManager.php:1240
|
2716 |
msgid "Opened"
|
2717 |
msgstr ""
|
2718 |
|
2719 |
+
#: classes/AlertManager.php:1241
|
2720 |
msgid "Viewed"
|
2721 |
msgstr ""
|
2722 |
|
2723 |
+
#: classes/AlertManager.php:1242
|
2724 |
msgid "Started"
|
2725 |
msgstr ""
|
2726 |
|
2727 |
+
#: classes/AlertManager.php:1243
|
2728 |
msgid "Stopped"
|
2729 |
msgstr ""
|
2730 |
|
2731 |
+
#: classes/AlertManager.php:1244
|
2732 |
msgid "Removed"
|
2733 |
msgstr ""
|
2734 |
|
2735 |
+
#: classes/AlertManager.php:1245
|
2736 |
msgid "Unblocked"
|
2737 |
msgstr ""
|
2738 |
|
2739 |
+
#: classes/AlertManager.php:1246
|
2740 |
msgid "Renamed"
|
2741 |
msgstr ""
|
2742 |
|
2743 |
+
#: classes/AlertManager.php:1247
|
2744 |
msgid "Duplicated"
|
2745 |
msgstr ""
|
2746 |
|
2747 |
+
#: classes/AlertManager.php:1248
|
2748 |
msgid "Submitted"
|
2749 |
msgstr ""
|
2750 |
|
2751 |
+
#: classes/AlertManager.php:1249
|
2752 |
msgid "Revoked"
|
2753 |
msgstr ""
|
2754 |
|
2755 |
+
#: classes/AlertManager.php:1266
|
2756 |
msgid "unknown type"
|
2757 |
msgstr ""
|
2758 |
|
2759 |
+
#: classes/AlertManager.php:1893, classes/ConstantManager.php:146
|
2760 |
msgid "Unknown error code."
|
2761 |
msgstr ""
|
2762 |
|
2763 |
+
#: classes/AlertManager.php:1912, classes/AlertManager.php:1900, extensions/reports/classes/Common.php:1238, extensions/reports/classes/Common.php:1228
|
|
|
2764 |
msgid "Unknown Site"
|
2765 |
msgstr ""
|
2766 |
|
2767 |
+
#: classes/AuditLogGridView.php:104, classes/AuditLogListView.php:95
|
2768 |
msgid "No events so far."
|
2769 |
msgstr ""
|
2770 |
|
2771 |
+
#: classes/AuditLogGridView.php:141, classes/AuditLogListView.php:139
|
2772 |
msgid "List View"
|
2773 |
msgstr ""
|
2774 |
|
2775 |
+
#: classes/AuditLogGridView.php:142, classes/AuditLogListView.php:140
|
2776 |
msgid "Grid View"
|
2777 |
msgstr ""
|
2778 |
|
2779 |
+
#: classes/AuditLogGridView.php:167, classes/AuditLogListView.php:165
|
2780 |
msgid "Show "
|
2781 |
msgstr ""
|
2782 |
|
2783 |
+
#: classes/AuditLogGridView.php:175, classes/AuditLogListView.php:173
|
2784 |
msgid " Items"
|
2785 |
msgstr ""
|
2786 |
|
2787 |
+
#: classes/AuditLogGridView.php:182, classes/AuditLogListView.php:180
|
2788 |
msgid "— End of Activity Log —"
|
2789 |
msgstr ""
|
2790 |
|
2791 |
+
#: classes/AuditLogGridView.php:203, classes/AuditLogListView.php:201, classes/Views/AuditLog.php:624, extensions/reports/inc/wsal-reporting-view.inc.php:610
|
2792 |
msgid "All Sites"
|
2793 |
msgstr ""
|
2794 |
|
2795 |
+
#: classes/AuditLogGridView.php:231, classes/AuditLogListView.php:230
|
2796 |
msgid "Live Database"
|
2797 |
msgstr ""
|
2798 |
|
2799 |
+
#: classes/AuditLogGridView.php:234, classes/AuditLogListView.php:233
|
2800 |
msgid "Archive Database"
|
2801 |
msgstr ""
|
2802 |
|
2803 |
+
#: classes/AuditLogGridView.php:289, classes/AuditLogGridView.php:315, classes/AuditLogListView.php:288, classes/AuditLogListView.php:318, classes/Views/Settings.php:1090, classes/Views/ToggleAlerts.php:299, extensions/search/classes/Filters/CodeFilter.php:43, extensions/search/classes/Filters/CodeFilter.php:69
|
2804 |
msgid "Severity"
|
2805 |
msgstr ""
|
2806 |
|
2807 |
+
#: classes/AuditLogGridView.php:290, extensions/search/classes/Filters/CodeFilter.php:76
|
2808 |
msgid "Info"
|
2809 |
msgstr ""
|
2810 |
|
2811 |
+
#: classes/AuditLogGridView.php:295, classes/AuditLogListView.php:298, classes/AuditLogListView.php:330, extensions/email-notifications/classes/Common.php:1120, extensions/email-notifications/classes/Common.php:1181, extensions/search/classes/Filters/SiteFilter.php:29
|
2812 |
msgid "Site"
|
2813 |
msgstr ""
|
2814 |
|
2815 |
+
#: classes/AuditLogGridView.php:298, classes/AuditLogGridView.php:321, classes/AuditLogListView.php:301, classes/AuditLogListView.php:339, extensions/email-notifications/classes/Common.php:1125, extensions/email-notifications/classes/Common.php:1155, extensions/reports/classes/CsvReportGenerator.php:92, extensions/reports/classes/HtmlReportGenerator.php:254
|
2816 |
msgid "Message"
|
2817 |
msgstr ""
|
2818 |
|
2820 |
msgid "Grid"
|
2821 |
msgstr ""
|
2822 |
|
2823 |
+
#: classes/AuditLogGridView.php:386, classes/AuditLogListView.php:421
|
2824 |
msgid "Disable this type of events."
|
2825 |
msgstr ""
|
2826 |
|
2827 |
+
#: classes/AuditLogGridView.php:418, classes/AuditLogGridView.php:422, classes/AuditLogGridView.php:461, classes/AuditLogListView.php:436, classes/AuditLogListView.php:458
|
2828 |
msgid "Unknown"
|
2829 |
msgstr ""
|
2830 |
|
2831 |
+
#: classes/AuditLogGridView.php:470, classes/AuditLogListView.php:465
|
2832 |
msgid "Unregistered user"
|
2833 |
msgstr ""
|
2834 |
|
2835 |
+
#: classes/AuditLogGridView.php:446
|
2836 |
msgid "Show me all activity by this User"
|
2837 |
msgstr ""
|
2838 |
|
2839 |
+
#: classes/AuditLogGridView.php:507, classes/AuditLogGridView.php:520, classes/AuditLogListView.php:498, classes/AuditLogListView.php:511
|
2840 |
msgid "Show me all activity originating from this IP Address"
|
2841 |
msgstr ""
|
2842 |
|
2843 |
+
#: classes/AuditLogGridView.php:577, classes/AuditLogListView.php:540
|
2844 |
msgid "View all details of this change"
|
2845 |
msgstr ""
|
2846 |
|
2847 |
+
#: classes/AuditLogGridView.php:578, classes/AuditLogListView.php:541
|
2848 |
msgid "Alert Data Inspector"
|
2849 |
msgstr ""
|
2850 |
|
2851 |
+
#: classes/AuditLogListView.php:289, classes/AuditLogListView.php:321, extensions/reports/classes/CsvReportGenerator.php:85, extensions/reports/classes/CsvReportGenerator.php:257, extensions/reports/classes/CsvReportGenerator.php:266, extensions/reports/classes/CsvReportGenerator.php:275, extensions/reports/classes/HtmlReportGenerator.php:247, extensions/reports/classes/HtmlReportGenerator.php:397, extensions/reports/classes/HtmlReportGenerator.php:415, extensions/reports/classes/HtmlReportGenerator.php:452, extensions/search/classes/Filters/DateFilter.php:27
|
2852 |
msgid "Date"
|
2853 |
msgstr ""
|
2854 |
|
2855 |
+
#: classes/AuditLogListView.php:291, classes/AuditLogListView.php:327, extensions/search/classes/Filters/IpFilter.php:45
|
2856 |
msgid "IP"
|
2857 |
msgstr ""
|
2858 |
|
2859 |
+
#: classes/AuditLogListView.php:292, classes/AuditLogListView.php:333, classes/WidgetManager.php:77, extensions/email-notifications/classes/Common.php:1093, extensions/search/classes/Filters/ObjectFilter.php:29, extensions/search/classes/Filters/ObjectFilter.php:53
|
2860 |
msgid "Object"
|
2861 |
msgstr ""
|
2862 |
|
2863 |
+
#: classes/AuditLogListView.php:293, classes/AuditLogListView.php:336, classes/WidgetManager.php:78, extensions/email-notifications/classes/Common.php:1039, extensions/email-notifications/classes/Common.php:1094, extensions/reports/classes/CsvReportGenerator.php:90, extensions/reports/classes/HtmlReportGenerator.php:252, extensions/search/classes/Filters/EventTypeFilter.php:29, extensions/search/classes/Filters/EventTypeFilter.php:53
|
2864 |
msgid "Event Type"
|
2865 |
msgstr ""
|
2866 |
|
2867 |
+
#: classes/AuditLogListView.php:400
|
2868 |
msgid "Click to toggle."
|
2869 |
msgstr ""
|
2870 |
|
2871 |
+
#: classes/AuditLogListView.php:405, classes/Models/Occurrence.php:83
|
2872 |
msgid "Alert message not found."
|
2873 |
msgstr ""
|
2874 |
|
2875 |
+
#: classes/AuditLogListView.php:406, classes/Models/Occurrence.php:84
|
2876 |
msgid "Alert description not found."
|
2877 |
msgstr ""
|
2878 |
|
2879 |
+
#: classes/ConstantManager.php:172, classes/Views/ToggleAlerts.php:444
|
2880 |
msgid "Informational"
|
2881 |
msgstr ""
|
2882 |
|
2883 |
+
#: classes/ConstantManager.php:170, classes/Views/ToggleAlerts.php:442, extensions/search/classes/Filters/CodeFilter.php:75
|
2884 |
msgid "Low"
|
2885 |
msgstr ""
|
2886 |
|
2887 |
+
#: classes/ConstantManager.php:168, classes/Views/ToggleAlerts.php:440, extensions/search/classes/Filters/CodeFilter.php:74
|
2888 |
msgid "Medium"
|
2889 |
msgstr ""
|
2890 |
|
2891 |
+
#: classes/ConstantManager.php:166, classes/Views/ToggleAlerts.php:438, extensions/search/classes/Filters/CodeFilter.php:73
|
2892 |
msgid "High"
|
2893 |
msgstr ""
|
2894 |
|
2895 |
+
#: classes/ConstantManager.php:164, classes/ConstantManager.php:158, classes/Views/ToggleAlerts.php:436, classes/Views/ToggleAlerts.php:430, extensions/search/classes/Filters/CodeFilter.php:72
|
2896 |
msgid "Critical"
|
2897 |
msgstr ""
|
2898 |
|
2899 |
+
#: classes/ConstantManager.php:162, classes/Views/ToggleAlerts.php:446, classes/Views/ToggleAlerts.php:434
|
2900 |
msgid "Notification"
|
2901 |
msgstr ""
|
2902 |
|
2903 |
+
#: classes/ConstantManager.php:160, classes/Views/ToggleAlerts.php:432
|
2904 |
msgid "Warning"
|
2905 |
msgstr ""
|
2906 |
|
2908 |
msgid "This function is deprecated"
|
2909 |
msgstr ""
|
2910 |
|
2911 |
+
#: classes/Settings.php:1628
|
2912 |
msgid "Root directory of WordPress (excluding sub directories)"
|
2913 |
msgstr ""
|
2914 |
|
2915 |
+
#: classes/Settings.php:1629
|
2916 |
msgid "WP Admin directory (/wp-admin/)"
|
2917 |
msgstr ""
|
2918 |
|
2919 |
+
#: classes/Settings.php:1630
|
2920 |
msgid "WP Includes directory (/wp-includes/)"
|
2921 |
msgstr ""
|
2922 |
|
2923 |
+
#: classes/Settings.php:1631
|
2924 |
msgid "/wp-content/ directory (excluding plugins, themes & uploads directories)"
|
2925 |
msgstr ""
|
2926 |
|
2927 |
+
#: classes/Settings.php:1632
|
2928 |
msgid "Themes directory (/wp-content/themes/)"
|
2929 |
msgstr ""
|
2930 |
|
2931 |
+
#: classes/Settings.php:1633
|
2932 |
msgid "Plugins directory (/wp-content/plugins/)"
|
2933 |
msgstr ""
|
2934 |
|
2935 |
+
#: classes/Settings.php:1634
|
2936 |
msgid "Uploads directory (/wp-content/uploads/)"
|
2937 |
msgstr ""
|
2938 |
|
2939 |
+
#: classes/Settings.php:1639
|
2940 |
msgid "Uploads directory of all sub sites on this network (/wp-content/sites/*)"
|
2941 |
msgstr ""
|
2942 |
|
2952 |
msgid "Latest Events"
|
2953 |
msgstr ""
|
2954 |
|
2955 |
+
#: classes/WidgetManager.php:79, classes/Views/ToggleAlerts.php:300
|
2956 |
msgid "Description"
|
2957 |
msgstr ""
|
2958 |
|
2960 |
msgid "No events found."
|
2961 |
msgstr ""
|
2962 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2963 |
#. translators: 1 - mysqli error code, 2 - mysqli error message
|
2964 |
#: classes/Connector/MySQLDB.php:68
|
2965 |
msgid "Code %1$d: %2$s"
|
2966 |
msgstr ""
|
2967 |
|
2968 |
+
#: classes/Models/Occurrence.php:202
|
2969 |
msgid "WFCM"
|
2970 |
msgstr ""
|
2971 |
|
2972 |
#. translators: 1: html that opens a link, 2: html that closes a link.
|
2973 |
+
#: classes/Models/Occurrence.php:227
|
2974 |
msgid "This type of activity / change is no longer monitored. You can create your own custom event IDs to keep a log of such change. Read more about custom events %1$shere%2$s."
|
2975 |
msgstr ""
|
2976 |
|
2977 |
+
#: classes/Sensors/Content.php:690
|
2978 |
msgid "Default template"
|
2979 |
msgstr ""
|
2980 |
|
2981 |
+
#: classes/Sensors/Content.php:691, extensions/external-db/classes/Settings.php:466
|
2982 |
msgid "Default"
|
2983 |
msgstr ""
|
2984 |
|
2985 |
+
#: classes/Sensors/Content.php:733
|
2986 |
msgid "No previous image"
|
2987 |
msgstr ""
|
2988 |
|
2989 |
+
#: classes/Sensors/Content.php:734
|
2990 |
msgid "No image"
|
2991 |
msgstr ""
|
2992 |
|
2993 |
+
#: classes/Sensors/Content.php:1092, classes/Sensors/Content.php:1100
|
2994 |
msgid "Public"
|
2995 |
msgstr ""
|
2996 |
|
2997 |
+
#: classes/Sensors/Content.php:1090, classes/Sensors/Content.php:1098
|
2998 |
msgid "Private"
|
2999 |
msgstr ""
|
3000 |
|
3001 |
+
#: classes/Sensors/Content.php:1088, classes/Sensors/Content.php:1096
|
3002 |
msgid "Password Protected"
|
3003 |
msgstr ""
|
3004 |
|
3005 |
+
#: classes/Sensors/Content.php:1263
|
3006 |
msgid "no tags"
|
3007 |
msgstr ""
|
3008 |
|
3184 |
msgid "Log Viewer"
|
3185 |
msgstr ""
|
3186 |
|
3187 |
+
#: classes/Views/AuditLog.php:540, classes/Views/Settings.php:326, classes/Views/ToggleAlerts.php:109, extensions/email-notifications/classes/AddNotification.php:227, extensions/email-notifications/classes/AddNotification.php:260, extensions/email-notifications/classes/EditNotification.php:232, extensions/email-notifications/classes/EditNotification.php:240, extensions/email-notifications/classes/EditNotification.php:236, extensions/email-notifications/classes/EditNotification.php:245, extensions/email-notifications/classes/EditNotification.php:273, extensions/external-db/classes/Settings.php:352
|
3188 |
msgid "You do not have sufficient permissions to access this page."
|
3189 |
msgstr ""
|
3190 |
|
3208 |
msgid "No Results"
|
3209 |
msgstr ""
|
3210 |
|
3211 |
+
#: classes/Views/AuditLog.php:795, classes/Views/AuditLog.php:838, classes/Views/AuditLog.php:1108, classes/Views/AuditLog.php:1170, classes/Views/AuditLog.php:1223, classes/Views/Settings.php:235, classes/Views/Settings.php:1602, classes/Views/Settings.php:1630, classes/Views/Settings.php:1660, classes/Views/SetupWizard.php:96, extensions/search/search-init.php:399, extensions/search/search-init.php:447, extensions/email-notifications/classes/Notifications.php:498, extensions/external-db/classes/Connections.php:826, extensions/external-db/classes/Connections.php:851, extensions/external-db/classes/Connections.php:977, extensions/external-db/classes/Settings.php:288, extensions/external-db/classes/Settings.php:962, extensions/external-db/classes/Settings.php:1158, extensions/external-db/classes/Settings.php:1206, extensions/external-db/classes/Settings.php:1239, extensions/user-sessions/classes/Views.php:516, extensions/reports/classes/Views/Main.php:709
|
3212 |
msgid "Nonce verification failed."
|
3213 |
msgstr ""
|
3214 |
|
3637 |
msgid "Unknown settings tab."
|
3638 |
msgstr ""
|
3639 |
|
3640 |
+
#: classes/Views/Settings.php:220, classes/Views/Settings.php:1690, classes/Views/Settings.php:1713, classes/Views/SetupWizard.php:83, extensions/email-notifications/classes/Notifications.php:117, extensions/external-db/classes/Connections.php:811, extensions/external-db/classes/Connections.php:842, extensions/external-db/classes/Connections.php:865, extensions/external-db/classes/Connections.php:973, extensions/external-db/classes/Settings.php:258, extensions/external-db/classes/Settings.php:949, extensions/external-db/classes/Settings.php:1111, extensions/external-db/classes/Settings.php:1175, extensions/external-db/classes/Settings.php:1223
|
3641 |
msgid "Access Denied."
|
3642 |
msgstr ""
|
3643 |
|
3645 |
msgid "Invalid input."
|
3646 |
msgstr ""
|
3647 |
|
3648 |
+
#: classes/Views/Settings.php:342, classes/Views/ToggleAlerts.php:126, extensions/external-db/classes/Settings.php:363
|
3649 |
msgid "Settings have been saved."
|
3650 |
msgstr ""
|
3651 |
|
3653 |
msgid "Message sent successfully."
|
3654 |
msgstr ""
|
3655 |
|
3656 |
+
#: classes/Views/Settings.php:348, classes/Views/ToggleAlerts.php:132, extensions/external-db/classes/Settings.php:368, extensions/user-sessions/classes/View/Sessions.php:130
|
3657 |
msgid "Error: "
|
3658 |
msgstr ""
|
3659 |
|
3998 |
msgid "Date & Time"
|
3999 |
msgstr ""
|
4000 |
|
4001 |
+
#: classes/Views/Settings.php:1088, extensions/email-notifications/classes/Common.php:1089, extensions/email-notifications/classes/Common.php:1123, extensions/email-notifications/classes/Common.php:1152, extensions/search/classes/Filters/AlertFilter.php:26, extensions/search/classes/Filters/AlertFilter.php:51
|
4002 |
msgid "Event ID"
|
4003 |
msgstr ""
|
4004 |
|
4022 |
msgid "Website File Changes plugin settings"
|
4023 |
msgstr ""
|
4024 |
|
4025 |
+
#: classes/Views/Settings.php:1180, classes/Views/ToggleAlerts.php:522
|
4026 |
msgid "Website File Changes Monitor"
|
4027 |
msgstr ""
|
4028 |
|
4029 |
+
#: classes/Views/Settings.php:1181, classes/Views/ToggleAlerts.php:523
|
4030 |
msgid "To keep a log of file changes please install Website File Changes Monitor, a plugin which is also developed by us."
|
4031 |
msgstr ""
|
4032 |
|
4033 |
+
#: classes/Views/Settings.php:1182, classes/Views/ToggleAlerts.php:524
|
4034 |
msgid "Install plugin now"
|
4035 |
msgstr ""
|
4036 |
|
4037 |
+
#: classes/Views/Settings.php:1182, classes/Views/ToggleAlerts.php:524
|
4038 |
msgid "Learn More"
|
4039 |
msgstr ""
|
4040 |
|
4315 |
msgid "Note: You can change the WordPress logging level from the plugin’s settings anytime."
|
4316 |
msgstr ""
|
4317 |
|
4318 |
+
#: classes/Views/SetupWizard.php:468, classes/Views/SetupWizard.php:468, classes/Views/SetupWizard.php:525, classes/Views/SetupWizard.php:525, classes/Views/SetupWizard.php:574, classes/Views/SetupWizard.php:574, classes/Views/SetupWizard.php:634, classes/Views/SetupWizard.php:635, classes/Views/SetupWizard.php:851, classes/Views/SetupWizard.php:852, extensions/external-db/classes/Connections.php:628, extensions/external-db/classes/Mirroring.php:201, extensions/external-db/classes/Mirroring.php:498
|
4319 |
msgid "Next"
|
4320 |
msgstr ""
|
4321 |
|
4419 |
msgid "Custom"
|
4420 |
msgstr ""
|
4421 |
|
4422 |
+
#: classes/Views/ToggleAlerts.php:180
|
4423 |
msgid "Log Level: "
|
4424 |
msgstr ""
|
4425 |
|
4426 |
+
#: classes/Views/ToggleAlerts.php:187
|
4427 |
msgid "Use the Log level drop down menu above to use one of our preset log levels. Alternatively you can enable or disable any of the individual events from the below tabs. Refer to <a href=\"https://wpactivitylog.com/support/kb/list-wordpress-activity-log-event-ids/\" target=\"_blank\">the complete list of WordPress activity log event IDs</a> for reference on all the events the plugin can keep a log of."
|
4428 |
msgstr ""
|
4429 |
|
4430 |
+
#: classes/Views/ToggleAlerts.php:197
|
4431 |
msgid "Third party plugins"
|
4432 |
msgstr ""
|
4433 |
|
4434 |
+
#: classes/Views/ToggleAlerts.php:298, extensions/reports/classes/CsvReportGenerator.php:83, extensions/reports/classes/HtmlReportGenerator.php:245
|
4435 |
msgid "Code"
|
4436 |
msgstr ""
|
4437 |
|
4438 |
+
#: classes/Views/ToggleAlerts.php:341
|
4439 |
msgid "Logins & Logouts"
|
4440 |
msgstr ""
|
4441 |
|
4442 |
+
#: classes/Views/ToggleAlerts.php:334
|
4443 |
msgid "Your website is a single site so the multisite events have been disabled."
|
4444 |
msgstr ""
|
4445 |
|
4446 |
+
#: classes/Views/ToggleAlerts.php:314
|
4447 |
msgid "The plugin WooCommerce is not installed on your website so these events have been disabled."
|
4448 |
msgstr ""
|
4449 |
|
4450 |
+
#: classes/Views/ToggleAlerts.php:321
|
4451 |
msgid "Products"
|
4452 |
msgstr ""
|
4453 |
|
4454 |
+
#: classes/Views/ToggleAlerts.php:327
|
4455 |
msgid "Post Changes"
|
4456 |
msgstr ""
|
4457 |
|
4458 |
+
#: classes/Views/ToggleAlerts.php:307
|
4459 |
msgid "<strong>Note:</strong> Post refers to any type of content, i.e. blog post, page or a post with a custom post type."
|
4460 |
msgstr ""
|
4461 |
|
4462 |
+
#: classes/Views/ToggleAlerts.php:364
|
4463 |
msgid "Not Implemented"
|
4464 |
msgstr ""
|
4465 |
|
4466 |
+
#: classes/Views/ToggleAlerts.php:367
|
4467 |
msgid "Not Available"
|
4468 |
msgstr ""
|
4469 |
|
4470 |
+
#: classes/Views/ToggleAlerts.php:382
|
4471 |
msgid "User Logins/Logouts"
|
4472 |
msgstr ""
|
4473 |
|
4474 |
+
#: classes/Views/ToggleAlerts.php:385
|
4475 |
msgid "User Sessions"
|
4476 |
msgstr ""
|
4477 |
|
4478 |
+
#: classes/Views/ToggleAlerts.php:388
|
4479 |
msgid "Files"
|
4480 |
msgstr ""
|
4481 |
|
4482 |
+
#: classes/Views/ToggleAlerts.php:391
|
4483 |
msgid "Post Settings"
|
4484 |
msgstr ""
|
4485 |
|
4486 |
+
#: classes/Views/ToggleAlerts.php:461
|
4487 |
msgid "Keep a log when a visitor registers a user on the website. Only enable this if you allow visitors to register as users on your website. User registration is disabled by default in WordPress."
|
4488 |
msgstr ""
|
4489 |
|
4490 |
+
#: classes/Views/ToggleAlerts.php:475, classes/Views/ToggleAlerts.php:488
|
4491 |
msgid "Number of login attempts to log. Enter 0 to log all failed login attempts. (By default the plugin only logs up to 10 failed login because the process can be very resource intensive in case of a brute force attack)"
|
4492 |
msgstr ""
|
4493 |
|
4494 |
+
#: classes/Views/ToggleAlerts.php:502
|
4495 |
msgid "Keep a log of user log in activity on custom login forms (such as WooCommerce & membership plugins)"
|
4496 |
msgstr ""
|
4497 |
|
4498 |
+
#: classes/Views/ToggleAlerts.php:548
|
4499 |
msgid "Save Changes"
|
4500 |
msgstr ""
|
4501 |
|
4502 |
+
#: classes/Views/ToggleAlerts.php:555
|
4503 |
msgid "Log Level Updated"
|
4504 |
msgstr ""
|
4505 |
|
4506 |
#. translators: Alerts log level.
|
4507 |
+
#: classes/Views/ToggleAlerts.php:559
|
4508 |
msgid "The %s log level has been successfully loaded and applied."
|
4509 |
msgstr ""
|
4510 |
|
4511 |
+
#: classes/Views/ToggleAlerts.php:563, extensions/email-notifications/classes/Notifications.php:298, extensions/email-notifications/classes/Notifications.php:888, extensions/email-notifications/classes/Notifications.php:1934
|
4512 |
msgid "OK"
|
4513 |
msgstr ""
|
4514 |
|
4515 |
+
#: classes/Views/ToggleAlerts.php:578
|
4516 |
msgid "Enable File Integrity Scanner"
|
4517 |
msgstr ""
|
4518 |
|
4519 |
+
#: classes/Views/ToggleAlerts.php:580
|
4520 |
msgid "The file integrity scanner is switched off. To enable this event it has to be switched on."
|
4521 |
msgstr ""
|
4522 |
|
4523 |
+
#: classes/Views/ToggleAlerts.php:584
|
4524 |
msgid "SWITCH ON"
|
4525 |
msgstr ""
|
4526 |
|
4527 |
+
#: classes/Views/ToggleAlerts.php:585
|
4528 |
msgid "DISABLE EVENT"
|
4529 |
msgstr ""
|
4530 |
|
4560 |
msgid "Load & Run"
|
4561 |
msgstr ""
|
4562 |
|
4563 |
+
#: extensions/search/search-init.php:299, extensions/email-notifications/classes/NotificationBuilder.php:76, extensions/email-notifications/classes/Notifications.php:1844, extensions/email-notifications/classes/Notifications.php:1907, extensions/email-notifications/classes/Notifications.php:1922, extensions/external-db/classes/Connections.php:157, extensions/external-db/classes/Mirroring.php:128
|
4564 |
msgid "Delete"
|
4565 |
msgstr ""
|
4566 |
|
4567 |
+
#: extensions/search/search-init.php:300, extensions/external-db/classes/Connections.php:626, extensions/external-db/classes/Mirroring.php:486
|
4568 |
msgid "Deleting..."
|
4569 |
msgstr ""
|
4570 |
|
4688 |
msgid "Use event specific email template"
|
4689 |
msgstr ""
|
4690 |
|
4691 |
+
#: extensions/email-notifications/classes/AddNotification.php:336, extensions/email-notifications/classes/EditNotification.php:429, extensions/external-db/classes/Connections.php:96, extensions/external-db/classes/Connections.php:550, extensions/external-db/classes/Mirroring.php:90
|
4692 |
msgid "Name"
|
4693 |
msgstr ""
|
4694 |
|
4777 |
msgid "Internal Error. Please reload the page and try again."
|
4778 |
msgstr ""
|
4779 |
|
4780 |
+
#: extensions/email-notifications/classes/Common.php:788, extensions/email-notifications/classes/Common.php:816, extensions/email-notifications/classes/Common.php:818
|
4781 |
msgid "Title is required."
|
4782 |
msgstr ""
|
4783 |
|
4784 |
+
#: extensions/email-notifications/classes/Common.php:825
|
4785 |
msgid "Title is not valid."
|
4786 |
msgstr ""
|
4787 |
|
4788 |
+
#: extensions/email-notifications/classes/Common.php:835
|
4789 |
msgid "Please add at least one condition."
|
4790 |
msgstr ""
|
4791 |
|
4792 |
+
#: extensions/email-notifications/classes/Common.php:883, extensions/email-notifications/classes/Common.php:889, extensions/email-notifications/classes/Common.php:894
|
4793 |
msgid "The form is not valid. Please refresh the page and try again."
|
4794 |
msgstr ""
|
4795 |
|
4796 |
+
#: extensions/email-notifications/classes/Common.php:903
|
4797 |
msgid "A trigger's condition must not be longer than 50 characters."
|
4798 |
msgstr ""
|
4799 |
|
4800 |
+
#: extensions/email-notifications/classes/Common.php:939
|
4801 |
msgid "Email or Username is not valid."
|
4802 |
msgstr ""
|
4803 |
|
4804 |
+
#: extensions/email-notifications/classes/Common.php:946
|
4805 |
msgid "Mobile number is not valid."
|
4806 |
msgstr ""
|
4807 |
|
4808 |
+
#: extensions/email-notifications/classes/Common.php:933
|
4809 |
msgid "Email or Username is required."
|
4810 |
msgstr ""
|
4811 |
|
4812 |
+
#: extensions/email-notifications/classes/Common.php:934
|
4813 |
msgid "Mobile number is required."
|
4814 |
msgstr ""
|
4815 |
|
4816 |
+
#: extensions/email-notifications/classes/Common.php:998, extensions/email-notifications/classes/Notifications.php:588
|
4817 |
msgid "Notification could not be saved."
|
4818 |
msgstr ""
|
4819 |
|
4820 |
+
#: extensions/email-notifications/classes/Common.php:1005, extensions/email-notifications/classes/Notifications.php:647
|
4821 |
msgid "Notification successfully saved."
|
4822 |
msgstr ""
|
4823 |
|
4824 |
+
#: extensions/email-notifications/classes/Common.php:1027
|
4825 |
msgid "Notification Title"
|
4826 |
msgstr ""
|
4827 |
|
4828 |
+
#: extensions/email-notifications/classes/Common.php:1028
|
4829 |
msgid "Website Name"
|
4830 |
msgstr ""
|
4831 |
|
4832 |
+
#: extensions/email-notifications/classes/Common.php:1029
|
4833 |
msgid "User Login Name"
|
4834 |
msgstr ""
|
4835 |
|
4836 |
+
#: extensions/email-notifications/classes/Common.php:1030
|
4837 |
msgid "Role(s) of the User"
|
4838 |
msgstr ""
|
4839 |
|
4840 |
+
#: extensions/email-notifications/classes/Common.php:1031
|
4841 |
msgid "Event generated on Date and Time"
|
4842 |
msgstr ""
|
4843 |
|
4844 |
+
#: extensions/email-notifications/classes/Common.php:1032
|
4845 |
msgid "Event Code"
|
4846 |
msgstr ""
|
4847 |
|
4848 |
+
#: extensions/email-notifications/classes/Common.php:1033
|
4849 |
msgid "Event Severity"
|
4850 |
msgstr ""
|
4851 |
|
4852 |
+
#: extensions/email-notifications/classes/Common.php:1034, extensions/email-notifications/classes/Common.php:1095
|
4853 |
msgid "Event Message"
|
4854 |
msgstr ""
|
4855 |
|
4856 |
+
#: extensions/email-notifications/classes/Common.php:1035
|
4857 |
msgid "Event Metadata"
|
4858 |
msgstr ""
|
4859 |
|
4860 |
+
#: extensions/email-notifications/classes/Common.php:1036
|
4861 |
msgid "Event Links"
|
4862 |
msgstr ""
|
4863 |
|
4864 |
+
#: extensions/email-notifications/classes/Common.php:1037
|
4865 |
msgid "Client IP Address"
|
4866 |
msgstr ""
|
4867 |
|
4868 |
+
#: extensions/email-notifications/classes/Common.php:1038
|
4869 |
msgid "Event Object"
|
4870 |
msgstr ""
|
4871 |
|
4872 |
+
#: extensions/email-notifications/classes/Common.php:1085, extensions/email-notifications/classes/Common.php:1149
|
4873 |
msgid "Notification {title} on website {site} triggered"
|
4874 |
msgstr ""
|
4875 |
|
4876 |
+
#: extensions/email-notifications/classes/Common.php:1086, extensions/email-notifications/classes/Common.php:1150
|
4877 |
msgid "Notification <strong>{title}</strong> was triggered. Below are the notification details:"
|
4878 |
msgstr ""
|
4879 |
|
4880 |
+
#: extensions/email-notifications/classes/Common.php:1088
|
4881 |
msgid "Website"
|
4882 |
msgstr ""
|
4883 |
|
4884 |
+
#: extensions/email-notifications/classes/Common.php:1090, extensions/email-notifications/classes/Common.php:1153, extensions/reports/classes/CsvReportGenerator.php:86, extensions/reports/classes/CsvReportGenerator.php:70, extensions/reports/classes/CsvReportGenerator.php:200, extensions/reports/classes/HtmlReportGenerator.php:248, extensions/reports/classes/HtmlReportGenerator.php:224, extensions/reports/classes/HtmlReportGenerator.php:362, extensions/search/classes/FilterManager.php:474, extensions/user-sessions/classes/View/Sessions.php:140, extensions/user-sessions/classes/View/Sessions.php:294
|
4885 |
msgid "Username"
|
4886 |
msgstr ""
|
4887 |
|
4888 |
+
#: extensions/email-notifications/classes/Common.php:1091
|
4889 |
msgid "User role"
|
4890 |
msgstr ""
|
4891 |
|
4892 |
+
#: extensions/email-notifications/classes/Common.php:1096
|
4893 |
msgid "Event generated on"
|
4894 |
msgstr ""
|
4895 |
|
4896 |
+
#: extensions/email-notifications/classes/Common.php:1098
|
4897 |
msgid "These email notifications are sent with <a href=\"http://wpactivitylog.com\">WP Activity Log</a>, the most comprehensive WordPress activity log plugin solution."
|
4898 |
msgstr ""
|
4899 |
|
4900 |
+
#: extensions/email-notifications/classes/Common.php:1121, extensions/email-notifications/classes/Common.php:1182
|
4901 |
msgid "User/Role"
|
4902 |
msgstr ""
|
4903 |
|
4904 |
+
#: extensions/email-notifications/classes/Common.php:1124
|
4905 |
msgid "Event type"
|
4906 |
msgstr ""
|
4907 |
|
4908 |
+
#: extensions/email-notifications/classes/Common.php:1154, extensions/search/classes/FilterManager.php:486, extensions/search/classes/Filters/userrolefilter.php:49, extensions/search/classes/Filters/userrolefilter.php:87, extensions/user-sessions/classes/View/Sessions.php:299
|
4909 |
msgid "User Role"
|
4910 |
msgstr ""
|
4911 |
|
4912 |
+
#: extensions/email-notifications/classes/Common.php:1156
|
4913 |
msgid "Generated On"
|
4914 |
msgstr ""
|
4915 |
|
4916 |
+
#: extensions/email-notifications/classes/Common.php:1158
|
4917 |
msgid "Monitoring of WordPress and Email Notifications provided by <a href=\"http://wpactivitylog.com\">WP Activity Log, WordPress most comprehensive audit trail plugin</a>."
|
4918 |
msgstr ""
|
4919 |
|
4920 |
+
#: extensions/email-notifications/classes/Common.php:1183
|
4921 |
msgid "Event"
|
4922 |
msgstr ""
|
4923 |
|
4924 |
+
#: extensions/email-notifications/classes/Common.php:1198
|
4925 |
msgid "Subject "
|
4926 |
msgstr ""
|
4927 |
|
4928 |
+
#: extensions/email-notifications/classes/Common.php:1207
|
4929 |
msgid "Body "
|
4930 |
msgstr ""
|
4931 |
|
4932 |
+
#: extensions/email-notifications/classes/Common.php:1210
|
4933 |
msgid "HTML is accepted. Available template tags:"
|
4934 |
msgstr ""
|
4935 |
|
4936 |
#. translators: singular or plural form of a login total count.
|
4937 |
+
#: extensions/email-notifications/classes/DailyNotification.php:343
|
4938 |
msgid "was %d login"
|
4939 |
msgid_plural "were %d logins"
|
4940 |
msgstr[0] ""
|
4941 |
msgstr[1] ""
|
4942 |
|
4943 |
#. translators: a number that is total count of unique users in a login group.
|
4944 |
+
#: extensions/email-notifications/classes/DailyNotification.php:349
|
4945 |
msgid "%d unique user"
|
4946 |
msgid_plural "%d unique users"
|
4947 |
msgstr[0] ""
|
4948 |
msgstr[1] ""
|
4949 |
|
4950 |
#. translators: 1 - number of logins. 2 - total unique users
|
4951 |
+
#: extensions/email-notifications/classes/DailyNotification.php:356
|
4952 |
msgid "There %1$s on your site today from %2$s. Below is a list of the users and the IP addresses they logged in from:"
|
4953 |
msgstr ""
|
4954 |
|
4955 |
+
#: extensions/email-notifications/classes/DailyNotification.php:388
|
4956 |
msgid "There were failed logins due to a wrong password from the following IP addresses:"
|
4957 |
msgstr ""
|
4958 |
|
4959 |
+
#: extensions/email-notifications/classes/DailyNotification.php:410
|
4960 |
msgid "There were failed logins due to a wrong username from the following IP addresses:"
|
4961 |
msgstr ""
|
4962 |
|
5110 |
msgid "Send"
|
5111 |
msgstr ""
|
5112 |
|
5113 |
+
#: extensions/email-notifications/classes/Notifications.php:881, extensions/external-db/classes/Connections.php:618, extensions/external-db/classes/Mirroring.php:202
|
5114 |
msgid "Cancel"
|
5115 |
msgstr ""
|
5116 |
|
5327 |
msgid "Bulk actions"
|
5328 |
msgstr ""
|
5329 |
|
5330 |
+
#: extensions/email-notifications/classes/Notifications.php:1842, extensions/email-notifications/classes/Notifications.php:1903, extensions/email-notifications/classes/Notifications.php:1920, extensions/external-db/classes/Mirroring.php:117, extensions/external-db/classes/Settings.php:1138, extensions/external-db/classes/mirrors/PapertrailConnection.php:44
|
5331 |
msgid "Enable"
|
5332 |
msgstr ""
|
5333 |
|
5334 |
+
#: extensions/email-notifications/classes/Notifications.php:1843, extensions/email-notifications/classes/Notifications.php:1901, extensions/email-notifications/classes/Notifications.php:1921, extensions/external-db/classes/Mirroring.php:120, extensions/external-db/classes/Settings.php:1141
|
5335 |
msgid "Disable"
|
5336 |
msgstr ""
|
5337 |
|
5505 |
msgid "SMS Provider"
|
5506 |
msgstr ""
|
5507 |
|
5508 |
+
#: extensions/email-notifications/classes/SMSProviderSettings.php:148, extensions/email-notifications/classes/SMSProviderSettings.php:146, extensions/external-db/classes/Connections.php:142, extensions/external-db/classes/Connections.php:543
|
5509 |
msgid "Test"
|
5510 |
msgstr ""
|
5511 |
|
5572 |
msgid "The text of the message you want to send, limited to 1600 characters."
|
5573 |
msgstr ""
|
5574 |
|
|
|
|
|
|
|
|
|
5575 |
#: extensions/external-db/classes/Connections.php:18, extensions/external-db/classes/Mirroring.php:18, extensions/external-db/classes/Settings.php:17
|
5576 |
msgid "You are not allowed to view this page."
|
5577 |
msgstr ""
|
5578 |
|
5579 |
+
#. translators: A string wrapped in a link saying to create and configure databases and services connections.
|
5580 |
+
#: extensions/external-db/classes/Connections.php:78
|
5581 |
+
msgid "In this section you can %s. Database connections can be used as an external database and for activity log archiving. Third party services connections can be used to mirror the activity logs into them. You can have multiple connections. Please note that connections that are in use cannot be deleted."
|
5582 |
msgstr ""
|
5583 |
|
5584 |
+
#: extensions/external-db/classes/Connections.php:82
|
5585 |
+
msgid "create and configure databases and services connections"
|
5586 |
msgstr ""
|
5587 |
|
5588 |
#: extensions/external-db/classes/Connections.php:89
|
5589 |
msgid "Create a Connection"
|
5590 |
msgstr ""
|
5591 |
|
5592 |
+
#: extensions/external-db/classes/Connections.php:92, extensions/external-db/classes/Settings.php:103
|
5593 |
msgid "Connections"
|
5594 |
msgstr ""
|
5595 |
|
5596 |
+
#: extensions/external-db/classes/Connections.php:98
|
5597 |
msgid "Used for"
|
5598 |
msgstr ""
|
5599 |
|
5600 |
+
#: extensions/external-db/classes/Connections.php:126, extensions/external-db/classes/Connections.php:533, extensions/external-db/classes/Mirroring.php:126
|
5601 |
msgid "Configure"
|
5602 |
msgstr ""
|
5603 |
|
5604 |
+
#: extensions/external-db/classes/Connections.php:140
|
5605 |
msgid "Send a test message"
|
5606 |
msgstr ""
|
5607 |
|
5608 |
+
#: extensions/external-db/classes/Connections.php:108
|
5609 |
msgid "No connections so far."
|
5610 |
msgstr ""
|
5611 |
|
5612 |
+
#: extensions/external-db/classes/Connections.php:180
|
5613 |
+
msgid "No connection name specified!"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5614 |
msgstr ""
|
5615 |
|
5616 |
#: extensions/external-db/classes/Connections.php:193
|
5617 |
+
msgid "Configure Connection → "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5618 |
msgstr ""
|
5619 |
|
5620 |
+
#: extensions/external-db/classes/Connections.php:198, extensions/external-db/classes/Connections.php:535
|
5621 |
msgid "Configure the connection"
|
5622 |
msgstr ""
|
5623 |
|
5624 |
+
#: extensions/external-db/classes/Connections.php:199, extensions/external-db/classes/Connections.php:536
|
5625 |
msgid "Configure the connection details."
|
5626 |
msgstr ""
|
5627 |
|
5628 |
+
#: extensions/external-db/classes/Connections.php:203, extensions/external-db/classes/Connections.php:501, extensions/external-db/classes/Connections.php:627
|
5629 |
+
msgid "Save Connection"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5630 |
msgstr ""
|
5631 |
|
5632 |
+
#: extensions/external-db/classes/Connections.php:239
|
5633 |
msgid "Database Name"
|
5634 |
msgstr ""
|
5635 |
|
5636 |
+
#: extensions/external-db/classes/Connections.php:245
|
5637 |
msgid "Specify the name of the database where you will store the WordPress activity log."
|
5638 |
msgstr ""
|
5639 |
|
5640 |
+
#: extensions/external-db/classes/Connections.php:251
|
5641 |
msgid "Database User"
|
5642 |
msgstr ""
|
5643 |
|
5644 |
+
#: extensions/external-db/classes/Connections.php:257
|
5645 |
msgid "Specify the username to be used to connect to the database."
|
5646 |
msgstr ""
|
5647 |
|
5648 |
+
#: extensions/external-db/classes/Connections.php:263
|
5649 |
msgid "Database Password"
|
5650 |
msgstr ""
|
5651 |
|
5652 |
+
#: extensions/external-db/classes/Connections.php:268
|
5653 |
msgid "Specify the password each time you want to submit new changes. For security reasons, the plugin does not store the password in this form."
|
5654 |
msgstr ""
|
5655 |
|
5656 |
+
#: extensions/external-db/classes/Connections.php:274
|
5657 |
msgid "Database Hostname"
|
5658 |
msgstr ""
|
5659 |
|
5660 |
+
#: extensions/external-db/classes/Connections.php:280
|
5661 |
msgid "Specify the hostname or IP address of the database server."
|
5662 |
msgstr ""
|
5663 |
|
5664 |
+
#: extensions/external-db/classes/Connections.php:286
|
5665 |
msgid "Database Base Prefix"
|
5666 |
msgstr ""
|
5667 |
|
5668 |
+
#: extensions/external-db/classes/Connections.php:294
|
5669 |
msgid "Specify a prefix for the database tables of the activity log. Ideally this prefix should be different from the one you use for WordPress so it is not guessable."
|
5670 |
msgstr ""
|
5671 |
|
5672 |
+
#: extensions/external-db/classes/Connections.php:300
|
5673 |
msgid "Use website URL as table prefix"
|
5674 |
msgstr ""
|
5675 |
|
5676 |
+
#: extensions/external-db/classes/Connections.php:306
|
5677 |
msgid "SSL/TLS"
|
5678 |
msgstr ""
|
5679 |
|
5680 |
+
#: extensions/external-db/classes/Connections.php:312
|
5681 |
msgid "Enable to use SSL/TLS to connect with the MySQL server."
|
5682 |
msgstr ""
|
5683 |
|
5684 |
+
#: extensions/external-db/classes/Connections.php:319
|
5685 |
msgid "Client Certificate"
|
5686 |
msgstr ""
|
5687 |
|
5688 |
+
#: extensions/external-db/classes/Connections.php:326
|
5689 |
+
msgid "Enable to use SSL/TLS certificates below to connect with the MySQL server."
|
5690 |
+
msgstr ""
|
5691 |
+
|
5692 |
+
#: extensions/external-db/classes/Connections.php:331
|
5693 |
msgid "CA SSL Certificate (--ssl-ca)"
|
5694 |
msgstr ""
|
5695 |
|
5696 |
+
#: extensions/external-db/classes/Connections.php:336
|
5697 |
msgid "Server SSL Certificate (--ssl-cert)"
|
5698 |
msgstr ""
|
5699 |
|
5700 |
+
#: extensions/external-db/classes/Connections.php:341
|
5701 |
msgid "Client Certificate (--ssl-key)"
|
5702 |
msgstr ""
|
5703 |
|
5704 |
+
#: extensions/external-db/classes/Connections.php:223
|
5705 |
msgid "Connection Name"
|
5706 |
msgstr ""
|
5707 |
|
5708 |
+
#: extensions/external-db/classes/Connections.php:488
|
5709 |
+
msgid "MySQL Database"
|
5710 |
msgstr ""
|
5711 |
|
5712 |
+
#: extensions/external-db/classes/Connections.php:504
|
5713 |
+
msgid "Select the type of connection"
|
5714 |
msgstr ""
|
5715 |
|
5716 |
+
#: extensions/external-db/classes/Connections.php:505
|
5717 |
+
msgid "Select the type of connection you would like to setup."
|
5718 |
msgstr ""
|
5719 |
|
5720 |
+
#: extensions/external-db/classes/Connections.php:510
|
5721 |
+
msgid "Type of Connection"
|
5722 |
msgstr ""
|
5723 |
|
5724 |
+
#: extensions/external-db/classes/Connections.php:526
|
5725 |
+
msgid "Requirements"
|
5726 |
msgstr ""
|
5727 |
|
5728 |
+
#: extensions/external-db/classes/Connections.php:528
|
5729 |
+
msgid "Requirements check"
|
5730 |
msgstr ""
|
5731 |
|
5732 |
+
#: extensions/external-db/classes/Connections.php:545
|
5733 |
+
msgid "Connectivity test"
|
5734 |
msgstr ""
|
5735 |
|
5736 |
+
#: extensions/external-db/classes/Connections.php:552
|
5737 |
+
msgid "Name the connection"
|
5738 |
msgstr ""
|
5739 |
|
5740 |
+
#: extensions/external-db/classes/Connections.php:553
|
5741 |
+
msgid "Please specify a friendly name for the connection. Connection names can be 25 characters long and can only contain letters, numbers and underscores."
|
5742 |
msgstr ""
|
5743 |
|
5744 |
+
#: extensions/external-db/classes/Connections.php:619
|
5745 |
+
msgid "Checking requirements..."
|
5746 |
msgstr ""
|
5747 |
|
5748 |
+
#: extensions/external-db/classes/Connections.php:621, extensions/external-db/classes/Mirroring.php:494
|
5749 |
+
msgid "Are you sure that you want to delete this connection?"
|
5750 |
msgstr ""
|
5751 |
|
5752 |
+
#: extensions/external-db/classes/Connections.php:622, extensions/external-db/classes/Mirroring.php:489
|
5753 |
+
msgid "Connection Failed!"
|
5754 |
msgstr ""
|
5755 |
|
5756 |
+
#: extensions/external-db/classes/Connections.php:623
|
5757 |
+
msgid "Connection test failed! Please check the connection configuration or try again later."
|
5758 |
msgstr ""
|
5759 |
|
5760 |
+
#: extensions/external-db/classes/Connections.php:624, extensions/external-db/classes/Mirroring.php:490
|
5761 |
+
msgid "Connected"
|
5762 |
msgstr ""
|
5763 |
|
5764 |
+
#: extensions/external-db/classes/Connections.php:625, extensions/external-db/classes/Mirroring.php:485
|
5765 |
+
msgid "Testing..."
|
5766 |
msgstr ""
|
5767 |
|
5768 |
+
#: extensions/external-db/classes/Connections.php:629
|
5769 |
+
msgid "Previous"
|
5770 |
msgstr ""
|
5771 |
|
5772 |
+
#: extensions/external-db/classes/Connections.php:630
|
5773 |
+
msgid "Unable to check the requirements at the moment. Communication with the server failed. Try again later."
|
5774 |
msgstr ""
|
5775 |
|
5776 |
+
#: extensions/external-db/classes/Connections.php:631
|
5777 |
+
msgid "Sending a test message..."
|
5778 |
msgstr ""
|
5779 |
|
5780 |
+
#: extensions/external-db/classes/Connections.php:633, extensions/external-db/classes/Mirroring.php:483
|
5781 |
+
msgid "Connections Wizard"
|
5782 |
msgstr ""
|
5783 |
|
5784 |
+
#: extensions/external-db/classes/Connections.php:798
|
5785 |
+
msgid "Connection failed. Please check the configuration again."
|
5786 |
msgstr ""
|
5787 |
|
5788 |
+
#: extensions/external-db/classes/Connections.php:961
|
5789 |
+
msgid "Unknown connection type."
|
5790 |
msgstr ""
|
5791 |
|
5792 |
+
#: extensions/external-db/classes/Connections.php:956, extensions/external-db/classes/Connections.php:924
|
5793 |
+
msgid "Connection successful."
|
5794 |
msgstr ""
|
5795 |
|
5796 |
+
#: extensions/external-db/classes/Connections.php:982
|
5797 |
+
msgid "Connection type is missing."
|
5798 |
msgstr ""
|
5799 |
|
5800 |
+
#: extensions/external-db/classes/Connections.php:994
|
5801 |
+
msgid "Unrecognized mirror type."
|
5802 |
msgstr ""
|
5803 |
|
5804 |
+
#: extensions/external-db/classes/Connections.php:1001
|
5805 |
+
msgid "Requirements check failed."
|
5806 |
msgstr ""
|
5807 |
|
5808 |
+
#: extensions/external-db/classes/Connections.php:1006
|
5809 |
+
msgid "All requirements are met. Your system is ready to use the selected connection type."
|
5810 |
msgstr ""
|
5811 |
|
5812 |
+
#: extensions/external-db/classes/Connections.php:1009
|
5813 |
+
msgid "Selected connection type cannot be used on your system at the moment. The following requirements are not met."
|
5814 |
msgstr ""
|
5815 |
|
5816 |
+
#. translators: A string wrapped in a link saying activity log mirroring.
|
5817 |
+
#: extensions/external-db/classes/Mirroring.php:75
|
5818 |
+
msgid "In this section you can configure the mirroring of the WordPress activity log to third party services. You can mirror the activity logs to multiple third party services at the same time. For more information on mirroring and the supported third party services refer to %s."
|
5819 |
+
msgstr ""
|
5820 |
+
|
5821 |
+
#: extensions/external-db/classes/Mirroring.php:79
|
5822 |
+
msgid "activity log mirroring"
|
5823 |
+
msgstr ""
|
5824 |
+
|
5825 |
+
#: extensions/external-db/classes/Mirroring.php:84
|
5826 |
+
msgid "Setup an Activity Log Mirror"
|
5827 |
msgstr ""
|
5828 |
|
5829 |
+
#: extensions/external-db/classes/Mirroring.php:86
|
5830 |
+
msgid "The WordPress activity log is currently being mirrored to:"
|
5831 |
msgstr ""
|
5832 |
|
5833 |
+
#: extensions/external-db/classes/Mirroring.php:100
|
5834 |
msgid "No mirrors so far."
|
5835 |
msgstr ""
|
5836 |
|
5837 |
+
#: extensions/external-db/classes/Mirroring.php:169
|
5838 |
+
msgid "Step 1"
|
5839 |
msgstr ""
|
5840 |
|
5841 |
+
#: extensions/external-db/classes/Mirroring.php:170
|
5842 |
+
msgid "Step 2"
|
5843 |
msgstr ""
|
5844 |
|
5845 |
+
#: extensions/external-db/classes/Mirroring.php:171
|
5846 |
+
msgid "Step 3"
|
5847 |
+
msgstr ""
|
5848 |
+
|
5849 |
+
#: extensions/external-db/classes/Mirroring.php:179
|
5850 |
+
msgid "Select the connection where to mirror to the activity log"
|
5851 |
msgstr ""
|
5852 |
|
5853 |
+
#: extensions/external-db/classes/Mirroring.php:180, extensions/external-db/classes/Mirroring.php:235
|
5854 |
+
msgid "Please specify a friendly name for the mirroring connection. Connection names can be 25 characters long, and can only contain letters, numbers and underscores."
|
5855 |
msgstr ""
|
5856 |
|
5857 |
+
#: extensions/external-db/classes/Mirroring.php:182, extensions/external-db/classes/Mirroring.php:237
|
5858 |
+
msgid "This identifier will be used as the source in the logs, so you can easily identify which are the logs being mirrored from this website."
|
5859 |
msgstr ""
|
5860 |
|
5861 |
+
#: extensions/external-db/classes/Mirroring.php:184
|
5862 |
+
msgid "Select one of the connections you have configured to where you want to mirror the activity log."
|
5863 |
+
msgstr ""
|
5864 |
+
|
5865 |
+
#: extensions/external-db/classes/Mirroring.php:188
|
5866 |
msgid "Start once configured?"
|
5867 |
msgstr ""
|
5868 |
|
5869 |
+
#: extensions/external-db/classes/Mirroring.php:191
|
5870 |
msgid "Tick this checkbox to enable the mirror and start sending data once set up."
|
5871 |
msgstr ""
|
5872 |
|
5873 |
+
#: extensions/external-db/classes/Mirroring.php:195
|
5874 |
msgid "Configure Filtering"
|
5875 |
msgstr ""
|
5876 |
|
5877 |
+
#: extensions/external-db/classes/Mirroring.php:196
|
5878 |
msgid "Configure any filtering you’d like to apply to this mirroring connection:"
|
5879 |
msgstr ""
|
5880 |
|
5881 |
+
#: extensions/external-db/classes/Mirroring.php:200, extensions/external-db/classes/Mirroring.php:243
|
5882 |
msgid "Save Mirror"
|
5883 |
msgstr ""
|
5884 |
|
5885 |
+
#: extensions/external-db/classes/Mirroring.php:219
|
5886 |
msgid "No mirror name specified!"
|
5887 |
msgstr ""
|
5888 |
|
5889 |
+
#: extensions/external-db/classes/Mirroring.php:227
|
5890 |
msgid "Configure Mirror → "
|
5891 |
msgstr ""
|
5892 |
|
5893 |
+
#: extensions/external-db/classes/Mirroring.php:238
|
5894 |
msgid "Configure the mirror"
|
5895 |
msgstr ""
|
5896 |
|
5897 |
+
#: extensions/external-db/classes/Mirroring.php:239
|
5898 |
msgid "Configure the mirror details."
|
5899 |
msgstr ""
|
5900 |
|
5901 |
+
#: extensions/external-db/classes/Mirroring.php:328
|
5902 |
msgid "Mirror Events"
|
5903 |
msgstr ""
|
5904 |
|
5905 |
+
#: extensions/external-db/classes/Mirroring.php:344
|
5906 |
msgid "Send all events"
|
5907 |
msgstr ""
|
5908 |
|
5909 |
+
#: extensions/external-db/classes/Mirroring.php:349
|
5910 |
msgid "Only send events with these IDs:"
|
5911 |
msgstr ""
|
5912 |
|
5913 |
+
#: extensions/external-db/classes/Mirroring.php:382
|
5914 |
+
msgid "Send all events BUT NOT those with these IDs:"
|
5915 |
msgstr ""
|
5916 |
|
5917 |
#. translators: Events and Event IDs hyperlink.
|
5918 |
+
#: extensions/external-db/classes/Mirroring.php:415
|
5919 |
msgid "Refer to the %s for more information."
|
5920 |
msgstr ""
|
5921 |
|
5922 |
+
#: extensions/external-db/classes/Mirroring.php:415
|
5923 |
msgid "list of events and events IDs"
|
5924 |
msgstr ""
|
5925 |
|
5926 |
+
#: extensions/external-db/classes/Mirroring.php:285, extensions/external-db/classes/Settings.php:435, extensions/external-db/classes/Settings.php:612
|
5927 |
msgid "Connection"
|
5928 |
msgstr ""
|
5929 |
|
5930 |
+
#: extensions/external-db/classes/Mirroring.php:296, extensions/external-db/classes/Settings.php:1026
|
5931 |
msgid "Select a connection"
|
5932 |
msgstr ""
|
5933 |
|
5934 |
+
#: extensions/external-db/classes/Mirroring.php:273
|
5935 |
+
msgid "Mirror identifier in logs"
|
5936 |
+
msgstr ""
|
5937 |
+
|
5938 |
+
#: extensions/external-db/classes/Mirroring.php:277
|
5939 |
+
msgid "* Invalid mirror identifier"
|
5940 |
+
msgstr ""
|
5941 |
+
|
5942 |
+
#: extensions/external-db/classes/Mirroring.php:261
|
5943 |
+
msgid "Mirror connection friendly name"
|
5944 |
msgstr ""
|
5945 |
|
5946 |
+
#: extensions/external-db/classes/Mirroring.php:265
|
5947 |
msgid "* Invalid Mirror Name"
|
5948 |
msgstr ""
|
5949 |
|
5950 |
+
#: extensions/external-db/classes/Mirroring.php:484
|
5951 |
msgid "Mirroring Wizard"
|
5952 |
msgstr ""
|
5953 |
|
5954 |
+
#: extensions/external-db/classes/Mirroring.php:487
|
5955 |
msgid "Enabling..."
|
5956 |
msgstr ""
|
5957 |
|
5958 |
+
#: extensions/external-db/classes/Mirroring.php:488
|
5959 |
msgid "Disabling..."
|
5960 |
msgstr ""
|
5961 |
|
5962 |
+
#: extensions/external-db/classes/Mirroring.php:491
|
5963 |
msgid "Running..."
|
5964 |
msgstr ""
|
5965 |
|
5966 |
+
#: extensions/external-db/classes/Mirroring.php:492
|
5967 |
msgid "Mirror Complete!"
|
5968 |
msgstr ""
|
5969 |
|
5970 |
+
#: extensions/external-db/classes/Mirroring.php:493
|
5971 |
msgid "Failed!"
|
5972 |
msgstr ""
|
5973 |
|
5974 |
+
#: extensions/external-db/classes/Mirroring.php:495
|
5975 |
msgid "Are you sure that you want to delete this mirror?"
|
5976 |
msgstr ""
|
5977 |
|
5978 |
+
#: extensions/external-db/classes/Mirroring.php:496, extensions/reports/inc/wsal-reporting-view.inc.php:996
|
5979 |
msgid "Select Event Code(s)"
|
5980 |
msgstr ""
|
5981 |
|
5982 |
+
#: extensions/external-db/classes/Mirroring.php:497
|
5983 |
+
msgid "Configure and create connection"
|
5984 |
msgstr ""
|
5985 |
|
5986 |
+
#: extensions/external-db/classes/Mirroring.php:555, extensions/external-db/classes/Settings.php:120
|
5987 |
+
msgid "Mirroring"
|
5988 |
msgstr ""
|
5989 |
|
5990 |
+
#: extensions/external-db/classes/Settings.php:108, extensions/external-db/classes/Settings.php:560
|
5991 |
+
msgid "External Storage"
|
5992 |
msgstr ""
|
5993 |
|
5994 |
+
#: extensions/external-db/classes/Settings.php:114, extensions/external-db/classes/Settings.php:755
|
5995 |
+
msgid "Archiving"
|
5996 |
msgstr ""
|
5997 |
|
5998 |
+
#: extensions/external-db/classes/Settings.php:162
|
5999 |
+
msgid "Integrations - external databases & third party services configuration"
|
6000 |
+
msgstr ""
|
6001 |
+
|
6002 |
+
#: extensions/external-db/classes/Settings.php:176
|
6003 |
+
msgid "Integrations"
|
6004 |
+
msgstr ""
|
6005 |
+
|
6006 |
+
#: extensions/external-db/classes/Settings.php:280
|
6007 |
+
msgid "An error occurred while sending events to database."
|
6008 |
+
msgstr ""
|
6009 |
+
|
6010 |
+
#: extensions/external-db/classes/Settings.php:273
|
6011 |
+
msgid "Events successfully sent to database."
|
6012 |
msgstr ""
|
6013 |
|
6014 |
+
#: extensions/external-db/classes/Settings.php:375
|
6015 |
msgid "Please do not close this window while migrating events."
|
6016 |
msgstr ""
|
6017 |
|
6018 |
#. translators: 1 is the help type being linked
|
6019 |
#. translators: 1 is the help type being linked
|
6020 |
+
#: extensions/external-db/classes/Settings.php:419, extensions/external-db/classes/Settings.php:596
|
6021 |
msgid "Read more on %1$s."
|
6022 |
msgstr ""
|
6023 |
|
6024 |
+
#: extensions/external-db/classes/Settings.php:423
|
6025 |
msgid "external storage for activity logs"
|
6026 |
msgstr ""
|
6027 |
|
6028 |
+
#: extensions/external-db/classes/Settings.php:427
|
6029 |
msgid "In this section you can configure the plugin to store the WordPress activity log in an external storage rather than the WordPress database. This could be another database on a remote server."
|
6030 |
msgstr ""
|
6031 |
|
6032 |
+
#: extensions/external-db/classes/Settings.php:433
|
6033 |
msgid "Store WordPress Activity Log in this External Storage"
|
6034 |
msgstr ""
|
6035 |
|
6036 |
+
#: extensions/external-db/classes/Settings.php:442
|
6037 |
msgid "Use buffer"
|
6038 |
msgstr ""
|
6039 |
|
6040 |
+
#: extensions/external-db/classes/Settings.php:451
|
6041 |
msgid "Send the events through the buffer so if the connection to the external database is slow the performance of the website is not affected."
|
6042 |
msgstr ""
|
6043 |
|
6044 |
+
#: extensions/external-db/classes/Settings.php:454
|
6045 |
msgid "When the buffer is enabled events are sent to the database every 10 minutes, so the activity log is not updated in real time. Use the button below to clear the buffer and send the events now."
|
6046 |
msgstr ""
|
6047 |
|
6048 |
+
#: extensions/external-db/classes/Settings.php:457
|
6049 |
msgid "Send Events to Database"
|
6050 |
msgstr ""
|
6051 |
|
6052 |
+
#: extensions/external-db/classes/Settings.php:462
|
6053 |
msgid "Current Connection Details"
|
6054 |
msgstr ""
|
6055 |
|
6056 |
+
#: extensions/external-db/classes/Settings.php:467
|
6057 |
+
msgid "Current"
|
6058 |
+
msgstr ""
|
6059 |
+
|
6060 |
+
#: extensions/external-db/classes/Settings.php:476
|
6061 |
msgid "Currently Connected to database"
|
6062 |
msgstr ""
|
6063 |
|
6064 |
+
#: extensions/external-db/classes/Settings.php:484
|
6065 |
msgid "Save & Test Changes"
|
6066 |
msgstr ""
|
6067 |
|
6068 |
+
#: extensions/external-db/classes/Settings.php:486, extensions/external-db/classes/Settings.php:679
|
6069 |
msgid "Test Connection"
|
6070 |
msgstr ""
|
6071 |
|
6072 |
+
#: extensions/external-db/classes/Settings.php:497
|
6073 |
msgid "Migrate Events to External Storage"
|
6074 |
msgstr ""
|
6075 |
|
6076 |
+
#: extensions/external-db/classes/Settings.php:499
|
6077 |
msgid "Migrate existing WordPress Security Events from the WordPress database to the new external database."
|
6078 |
msgstr ""
|
6079 |
|
6080 |
+
#: extensions/external-db/classes/Settings.php:510
|
6081 |
msgid "Migrate Events to WordPress Database"
|
6082 |
msgstr ""
|
6083 |
|
6084 |
+
#: extensions/external-db/classes/Settings.php:512
|
6085 |
msgid "Remove the external database and start using the WordPress database again. In the process the events will be automatically migrated to the WordPress database."
|
6086 |
msgstr ""
|
6087 |
|
6088 |
+
#: extensions/external-db/classes/Settings.php:600
|
6089 |
msgid "archiving activity log data"
|
6090 |
msgstr ""
|
6091 |
|
6092 |
+
#: extensions/external-db/classes/Settings.php:604
|
6093 |
msgid "In this section you can configure the archiving of old events to an archive database. Archives events can still be accessed and are included in search results and reports."
|
6094 |
msgstr ""
|
6095 |
|
6096 |
+
#: extensions/external-db/classes/Settings.php:610
|
6097 |
msgid "Archive the WordPress Activity Log to this Database"
|
6098 |
msgstr ""
|
6099 |
|
6100 |
+
#: extensions/external-db/classes/Settings.php:621
|
6101 |
msgid "Archive events that are older than"
|
6102 |
msgstr ""
|
6103 |
|
6104 |
+
#: extensions/external-db/classes/Settings.php:623
|
6105 |
msgid "Archiving Options"
|
6106 |
msgstr ""
|
6107 |
|
6108 |
+
#: extensions/external-db/classes/Settings.php:637
|
6109 |
msgid "Archive events older than"
|
6110 |
msgstr ""
|
6111 |
|
6112 |
+
#: extensions/external-db/classes/Settings.php:641
|
6113 |
msgid "months"
|
6114 |
msgstr ""
|
6115 |
|
6116 |
+
#: extensions/external-db/classes/Settings.php:644
|
6117 |
msgid "years"
|
6118 |
msgstr ""
|
6119 |
|
6120 |
+
#: extensions/external-db/classes/Settings.php:650
|
6121 |
msgid "The configured archiving options will override the Security Events Pruning settings configured in the plugin’s settings."
|
6122 |
msgstr ""
|
6123 |
|
6124 |
+
#: extensions/external-db/classes/Settings.php:656
|
6125 |
msgid "WordPress Activity Log Data Retention"
|
6126 |
msgstr ""
|
6127 |
|
6128 |
+
#: extensions/external-db/classes/Settings.php:657
|
6129 |
msgid "Once you configure archiving these data retention settings will be used instead of the ones configured in the plugin's general settings."
|
6130 |
msgstr ""
|
6131 |
|
6132 |
+
#: extensions/external-db/classes/Settings.php:680
|
6133 |
msgid "Execute Archiving Now"
|
6134 |
msgstr ""
|
6135 |
|
6136 |
+
#: extensions/external-db/classes/Settings.php:683
|
6137 |
msgid "Reset Archiving Settings"
|
6138 |
msgstr ""
|
6139 |
|
6140 |
+
#: extensions/external-db/classes/Settings.php:684
|
6141 |
msgid "Click the button below to disable archiving and reset the settings to no archiving. Note that the archived data will not be deleted."
|
6142 |
msgstr ""
|
6143 |
|
6144 |
+
#: extensions/external-db/classes/Settings.php:685
|
6145 |
msgid "Disable Archiving & Reset Settings"
|
6146 |
msgstr ""
|
6147 |
|
6148 |
+
#: extensions/external-db/classes/Settings.php:787
|
6149 |
msgid "Run the Archiving Process Every"
|
6150 |
msgstr ""
|
6151 |
|
6152 |
+
#: extensions/external-db/classes/Settings.php:798
|
6153 |
+
msgid "15 minutes"
|
6154 |
+
msgstr ""
|
6155 |
+
|
6156 |
+
#: extensions/external-db/classes/Settings.php:801
|
6157 |
+
msgid "1 hour"
|
6158 |
+
msgstr ""
|
6159 |
+
|
6160 |
+
#: extensions/external-db/classes/Settings.php:804
|
6161 |
+
msgid "6 hours"
|
6162 |
+
msgstr ""
|
6163 |
+
|
6164 |
+
#: extensions/external-db/classes/Settings.php:807
|
6165 |
+
msgid "12 hours"
|
6166 |
+
msgstr ""
|
6167 |
+
|
6168 |
+
#: extensions/external-db/classes/Settings.php:810
|
6169 |
+
msgid "24 hours"
|
6170 |
+
msgstr ""
|
6171 |
+
|
6172 |
+
#: extensions/external-db/classes/Settings.php:816
|
6173 |
msgid "Stop Archiving"
|
6174 |
msgstr ""
|
6175 |
|
6176 |
+
#: extensions/external-db/classes/Settings.php:917
|
6177 |
msgid "Attention!"
|
6178 |
msgstr ""
|
6179 |
|
6180 |
#. translators: %1$s: Alerts Pruning Period, %2$s: Alerts Archiving Period
|
6181 |
+
#: extensions/external-db/classes/Settings.php:921
|
6182 |
msgid "The activity log retention setting is configured to delete events older than %1$s. This period should be longer than the configured %2$s archiving period otherwise events will be deleted and not archived."
|
6183 |
msgstr ""
|
6184 |
|
6185 |
+
#: extensions/external-db/classes/Settings.php:973, extensions/external-db/classes/Settings.php:984
|
6186 |
+
msgid "No connection found."
|
6187 |
+
msgstr ""
|
6188 |
+
|
6189 |
+
#: extensions/external-db/classes/Settings.php:996
|
6190 |
+
msgid "Successfully connected to database."
|
6191 |
+
msgstr ""
|
6192 |
+
|
6193 |
+
#: extensions/external-db/classes/Settings.php:1086
|
6194 |
msgid "Resetting..."
|
6195 |
msgstr ""
|
6196 |
|
6197 |
+
#: extensions/external-db/classes/Settings.php:1087
|
6198 |
msgid "Resetting Failed!"
|
6199 |
msgstr ""
|
6200 |
|
6201 |
#. translators: %d: Number of events.
|
6202 |
+
#: extensions/external-db/classes/Settings.php:1089
|
6203 |
msgid " So far %d events have been migrated."
|
6204 |
msgstr ""
|
6205 |
|
6206 |
+
#: extensions/external-db/classes/Settings.php:1090
|
6207 |
msgid "WordPress security events successfully migrated to WordPress database."
|
6208 |
msgstr ""
|
6209 |
|
6210 |
+
#: extensions/external-db/classes/Settings.php:1091
|
6211 |
msgid "WordPress security events successfully migrated to the external database."
|
6212 |
msgstr ""
|
6213 |
|
6214 |
+
#: extensions/external-db/classes/Settings.php:1092
|
6215 |
msgid "No events to migrate."
|
6216 |
msgstr ""
|
6217 |
|
6218 |
+
#: extensions/external-db/classes/Settings.php:1131
|
6219 |
msgid "Mirror not found."
|
6220 |
msgstr ""
|
6221 |
|
6651 |
msgid "Report Name"
|
6652 |
msgstr ""
|
6653 |
|
6654 |
+
#: extensions/reports/inc/wsal-reporting-view.inc.php:1432
|
6655 |
+
msgid "Frequency"
|
6656 |
+
msgstr ""
|
6657 |
+
|
6658 |
#: extensions/reports/inc/wsal-reporting-view.inc.php:1434
|
6659 |
msgid "Daily"
|
6660 |
msgstr ""
|
6783 |
msgid "Name can only be 12 characters long and only letters, numbers and underscore are allowed."
|
6784 |
msgstr ""
|
6785 |
|
6786 |
+
#: extensions/search/classes/FilterManager.php:405, extensions/user-sessions/classes/View/Settings.php:96, extensions/user-sessions/classes/View/Options/Policies.php:315
|
6787 |
msgid "Save"
|
6788 |
msgstr ""
|
6789 |
|
6944 |
msgid "Users sessions termination is in progress. Please wait..."
|
6945 |
msgstr ""
|
6946 |
|
6947 |
+
#: extensions/user-sessions/classes/Views.php:431, extensions/reports/classes/Views/Main.php:694
|
6948 |
msgid "You do not have sufficient permissions."
|
6949 |
msgstr ""
|
6950 |
|
6972 |
msgid "Nonce check failed."
|
6973 |
msgstr ""
|
6974 |
|
6975 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:22
|
6976 |
+
msgid "AWS CloudWatch"
|
6977 |
+
msgstr ""
|
6978 |
+
|
6979 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:27, extensions/external-db/classes/mirrors/LogglyConnection.php:27, extensions/external-db/classes/mirrors/PapertrailConnection.php:27, extensions/external-db/classes/mirrors/SlackConnection.php:28, extensions/external-db/classes/mirrors/SyslogConnection.php:27
|
6980 |
+
msgid "General mirror connection description."
|
6981 |
+
msgstr ""
|
6982 |
+
|
6983 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:30
|
6984 |
+
msgid "Region"
|
6985 |
+
msgstr ""
|
6986 |
+
|
6987 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:57
|
6988 |
+
msgid "AWS Key"
|
6989 |
+
msgstr ""
|
6990 |
+
|
6991 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:62
|
6992 |
+
msgid "AWS Secret"
|
6993 |
+
msgstr ""
|
6994 |
+
|
6995 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:67
|
6996 |
+
msgid "AWS Session Token"
|
6997 |
+
msgstr ""
|
6998 |
+
|
6999 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:69
|
7000 |
+
msgid "This is optional."
|
7001 |
+
msgstr ""
|
7002 |
+
|
7003 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:72
|
7004 |
+
msgid "Log group name"
|
7005 |
+
msgstr ""
|
7006 |
+
|
7007 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:76
|
7008 |
+
msgid "Invalid AWS group name. It must satisfy regular expression pattern: %s"
|
7009 |
+
msgstr ""
|
7010 |
+
|
7011 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:80
|
7012 |
+
msgid "If you do not specify a group name, one will be created using the default group name \"%s\"."
|
7013 |
+
msgstr ""
|
7014 |
+
|
7015 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:85
|
7016 |
+
msgid "Log stream name"
|
7017 |
+
msgstr ""
|
7018 |
+
|
7019 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:87
|
7020 |
+
msgid "If you do not specify a stream name, one will be created using the site name as stream name."
|
7021 |
+
msgstr ""
|
7022 |
+
|
7023 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:90
|
7024 |
+
msgid "Retention"
|
7025 |
+
msgstr ""
|
7026 |
+
|
7027 |
+
#: extensions/external-db/classes/mirrors/AWSCloudWatchConnection.php:112
|
7028 |
+
msgid "Days to keep logs."
|
7029 |
+
msgstr ""
|
7030 |
+
|
7031 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:22
|
7032 |
+
msgid "Log file(s)"
|
7033 |
+
msgstr ""
|
7034 |
+
|
7035 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:27
|
7036 |
+
msgid "WP Activity Log can write the WordPress activity log to a log file.."
|
7037 |
+
msgstr ""
|
7038 |
+
|
7039 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:30
|
7040 |
+
msgid "Log file(s) rotation"
|
7041 |
+
msgstr ""
|
7042 |
+
|
7043 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:33
|
7044 |
+
msgid "daily"
|
7045 |
+
msgstr ""
|
7046 |
+
|
7047 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:34
|
7048 |
+
msgid "monthly"
|
7049 |
+
msgstr ""
|
7050 |
+
|
7051 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:35
|
7052 |
+
msgid "yearly"
|
7053 |
+
msgstr ""
|
7054 |
+
|
7055 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:39
|
7056 |
+
msgid "Log file prefix"
|
7057 |
+
msgstr ""
|
7058 |
+
|
7059 |
+
#: extensions/external-db/classes/mirrors/LogFileConnection.php:42
|
7060 |
+
msgid "Optional. Default prefix is %s."
|
7061 |
+
msgstr ""
|
7062 |
+
|
7063 |
+
#: extensions/external-db/classes/mirrors/LogglyConnection.php:22
|
7064 |
+
msgid "Loggly"
|
7065 |
+
msgstr ""
|
7066 |
+
|
7067 |
+
#: extensions/external-db/classes/mirrors/LogglyConnection.php:30
|
7068 |
+
msgid "Loggly token"
|
7069 |
+
msgstr ""
|
7070 |
+
|
7071 |
+
#: extensions/external-db/classes/mirrors/LogglyConnection.php:34
|
7072 |
+
msgid "The Loggly token required here is the \"Customer token\" and you can get it from the following URL: %s"
|
7073 |
+
msgstr ""
|
7074 |
+
|
7075 |
+
#: extensions/external-db/classes/mirrors/PapertrailConnection.php:22
|
7076 |
+
msgid "Papertrail"
|
7077 |
+
msgstr ""
|
7078 |
+
|
7079 |
+
#: extensions/external-db/classes/mirrors/PapertrailConnection.php:30
|
7080 |
+
msgid "Destination"
|
7081 |
+
msgstr ""
|
7082 |
+
|
7083 |
+
#. translators: %s: Log destinations link
|
7084 |
+
#: extensions/external-db/classes/mirrors/PapertrailConnection.php:36
|
7085 |
+
msgid "Specify your destination. You can find your Papertrail Destination in the %s section of your Papertrail account page. It should have the following format: logs4.papertrailapp.com:54321"
|
7086 |
+
msgstr ""
|
7087 |
+
|
7088 |
+
#: extensions/external-db/classes/mirrors/PapertrailConnection.php:37
|
7089 |
+
msgid "Log Destinations"
|
7090 |
+
msgstr ""
|
7091 |
+
|
7092 |
+
#: extensions/external-db/classes/mirrors/PapertrailConnection.php:39
|
7093 |
+
msgid "Invalid Papertrail Destination"
|
7094 |
+
msgstr ""
|
7095 |
+
|
7096 |
+
#: extensions/external-db/classes/mirrors/PapertrailConnection.php:42
|
7097 |
+
msgid "Colorization"
|
7098 |
+
msgstr ""
|
7099 |
+
|
7100 |
+
#: extensions/external-db/classes/mirrors/SlackConnection.php:22
|
7101 |
+
msgid "Slack"
|
7102 |
+
msgstr ""
|
7103 |
+
|
7104 |
+
#: extensions/external-db/classes/mirrors/SlackConnection.php:31
|
7105 |
+
msgid "Webhook URL"
|
7106 |
+
msgstr ""
|
7107 |
+
|
7108 |
+
#. translators: hyperlink to the Slack webhook documentation page
|
7109 |
+
#: extensions/external-db/classes/mirrors/SlackConnection.php:35
|
7110 |
+
msgid "If you are not familiar with incoming WebHooks on Slack, please refer to %s."
|
7111 |
+
msgstr ""
|
7112 |
+
|
7113 |
+
#: extensions/external-db/classes/mirrors/SlackConnection.php:39
|
7114 |
+
msgid "Slack webhooks documentation"
|
7115 |
+
msgstr ""
|
7116 |
+
|
7117 |
+
#: extensions/external-db/classes/mirrors/SlackConnection.php:44
|
7118 |
+
msgid "Invalid Webhook URL"
|
7119 |
+
msgstr ""
|
7120 |
+
|
7121 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:22
|
7122 |
+
msgid "Syslog Server"
|
7123 |
+
msgstr ""
|
7124 |
+
|
7125 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:30
|
7126 |
+
msgid "Syslog Location"
|
7127 |
+
msgstr ""
|
7128 |
+
|
7129 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:35
|
7130 |
+
msgid " Write to local syslog file"
|
7131 |
+
msgstr ""
|
7132 |
+
|
7133 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:38
|
7134 |
+
msgid " Send messages to remote syslog server"
|
7135 |
+
msgstr ""
|
7136 |
+
|
7137 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:41
|
7138 |
+
msgid "IP Address / Hostname"
|
7139 |
+
msgstr ""
|
7140 |
+
|
7141 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:45
|
7142 |
+
msgid "Invalid Invalid IP/Hostname"
|
7143 |
+
msgstr ""
|
7144 |
+
|
7145 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:48
|
7146 |
+
msgid "Port"
|
7147 |
+
msgstr ""
|
7148 |
+
|
7149 |
+
#: extensions/external-db/classes/mirrors/SyslogConnection.php:52
|
7150 |
+
msgid "Invalid Port"
|
7151 |
+
msgstr ""
|
7152 |
+
|
7153 |
#: extensions/reports/classes/Views/Main.php:72
|
7154 |
msgid "Reporting"
|
7155 |
msgstr ""
|
7166 |
msgid "There are no alerts that match your filtering criteria."
|
7167 |
msgstr ""
|
7168 |
|
7169 |
+
#: extensions/reports/classes/Views/Main.php:619
|
7170 |
msgid " Generating reports. Please do not close this window."
|
7171 |
msgstr ""
|
7172 |
|
7173 |
+
#: extensions/reports/classes/Views/Main.php:632
|
7174 |
msgid "To generate a report or configure automated scheduled report please contact the administrator of this multisite network on "
|
7175 |
msgstr ""
|
7176 |
|
7177 |
+
#: extensions/reports/classes/Views/Main.php:650
|
7178 |
msgid "The %s directory which the Reports plugin uses to create reports in was either not found or is not accessible."
|
7179 |
msgstr ""
|
7180 |
|
7181 |
+
#: extensions/reports/classes/Views/Main.php:654
|
7182 |
msgid "In order for the plugin to function, the directory %1$s must be created and the plugin should have access to write to this directory, so please configure the following permissions: 0755. If you have any questions or need further assistance please %2$s"
|
7183 |
msgstr ""
|
7184 |
|
7254 |
msgid "Select a user role to filter"
|
7255 |
msgstr ""
|
7256 |
|
7257 |
+
#: extensions/user-sessions/classes/Sensors/UserSessionsTracking.php:307, extensions/user-sessions/classes/View/Options/Policies.php:235
|
7258 |
msgid "ERROR: Your session was blocked with the <a href=\"https://en-gb.wordpress.org/plugins/wp-security-audit-log\" target=\"_blank\">WP Activity Log plugin</a> because there is already another user logged in with the same username. Please contact the site administrator for more information."
|
7259 |
msgstr ""
|
7260 |
|
7363 |
msgid "Main Policies"
|
7364 |
msgstr ""
|
7365 |
|
7366 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:141
|
7367 |
msgid "Do not enforce policies on users with this role"
|
7368 |
msgstr ""
|
7369 |
|
7370 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:159
|
7371 |
msgid "Inherit the sessions policies"
|
7372 |
msgstr ""
|
7373 |
|
7374 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:111
|
7375 |
msgid "Users sessions policies"
|
7376 |
msgstr ""
|
7377 |
|
7378 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:113
|
7379 |
msgid "Use the settings below to configure the policies to manage the users' sessions policies. These policies are automatically inherited by all profiles. However, you can disable the inheritance or configure different policies for specific roles in the role's tab."
|
7380 |
msgstr ""
|
7381 |
|
7382 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:118
|
7383 |
msgid "Enable session policies"
|
7384 |
msgstr ""
|
7385 |
|
7386 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:179
|
7387 |
msgid "By default WordPress does not limit how many times the same user can connect simultaneously. So two different users can login at the same time using the same username. Use the settings below to limit and also block simultaneous connections for the same username."
|
7388 |
msgstr ""
|
7389 |
|
7390 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:181
|
7391 |
msgid "Do you want to allow two or more people to login simultaneously with the same username?"
|
7392 |
msgstr ""
|
7393 |
|
7394 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:183
|
7395 |
msgid "By allowing multiple sessions two or more people can login to WordPress using the same username. By blocking them, once a person is logged in with a username, if another person tries to login with the same username they will be blocked."
|
7396 |
msgstr ""
|
7397 |
|
7398 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:188
|
7399 |
msgid "Multiple Sessions"
|
7400 |
msgstr ""
|
7401 |
|
7402 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:197
|
7403 |
msgid "Allow one session only"
|
7404 |
msgstr ""
|
7405 |
|
7406 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:203
|
7407 |
msgid "Allow one session only and override current session"
|
7408 |
msgstr ""
|
7409 |
|
7410 |
#. translators: Number of sessions input tag
|
7411 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:213
|
7412 |
msgid "Allow up to %s sessions and block the rest"
|
7413 |
msgstr ""
|
7414 |
|
7415 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:224
|
7416 |
msgid "Configure a Blocked Session Notification for Users"
|
7417 |
msgstr ""
|
7418 |
|
7419 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:226
|
7420 |
msgid "This error message is shown to users when they try to login with a username that already has a session and their session is blocked. You can change this message by editing the text in the below placeholder. Only <a href> HTML code is allowed."
|
7421 |
msgstr ""
|
7422 |
|
7423 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:231
|
7424 |
msgid "Blocked Sessions Error"
|
7425 |
msgstr ""
|
7426 |
|
7427 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:249
|
7428 |
msgid "Do you want to terminate idle sessions automatically?"
|
7429 |
msgstr ""
|
7430 |
|
7431 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:251
|
7432 |
msgid "If a session has been idle for more than the configured number of hours, it will be automatically destroyed by the plugin."
|
7433 |
msgstr ""
|
7434 |
|
7435 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:256
|
7436 |
msgid "Terminate Idle Sessions"
|
7437 |
msgstr ""
|
7438 |
|
7439 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:273
|
7440 |
msgid "1"
|
7441 |
msgstr ""
|
7442 |
|
7443 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:274
|
7444 |
msgid "4"
|
7445 |
msgstr ""
|
7446 |
|
7447 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:275
|
7448 |
msgid "8"
|
7449 |
msgstr ""
|
7450 |
|
7451 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:276
|
7452 |
msgid "12"
|
7453 |
msgstr ""
|
7454 |
|
7455 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:277
|
7456 |
msgid "24"
|
7457 |
msgstr ""
|
7458 |
|
7459 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:278
|
7460 |
msgid "32"
|
7461 |
msgstr ""
|
7462 |
|
7463 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:279
|
7464 |
msgid "48"
|
7465 |
msgstr ""
|
7466 |
|
7467 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:286
|
7468 |
msgid "terminate sessions if they have been idle for more than"
|
7469 |
msgstr ""
|
7470 |
|
7471 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:297
|
7472 |
msgid " hour"
|
7473 |
msgstr ""
|
7474 |
|
7475 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:297, extensions/user-sessions/classes/View/Options/Policies.php:304
|
7476 |
msgid " hours"
|
7477 |
msgstr ""
|
7478 |
|
7479 |
+
#: extensions/user-sessions/classes/View/Options/Policies.php:290
|
7480 |
msgid " seconds (Testing)"
|
7481 |
msgstr ""
|
readme.txt
CHANGED
@@ -5,9 +5,9 @@ License: GPLv3
|
|
5 |
License URI: https://www.gnu.org/licenses/gpl.html
|
6 |
Tags: activity log, wordpress activity logs, security audit log, audit log, user tracking, security event log, audit trail, wordpress security monitor, wordpress admin, wordpress admin monitoring, user activity, admin, multisite, SMS alerts, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
|
7 |
Requires at least: 4.4
|
8 |
-
Tested up to: 5.
|
9 |
-
Stable tag: 4.
|
10 |
-
Requires PHP:
|
11 |
|
12 |
The #1 user-rated activity log plugin. Keep a comprehensive log of the changes that happen on your site with this easy to use plugin.
|
13 |
|
@@ -24,18 +24,18 @@ Keep an [activity log](https://wpactivitylog.com/wordpress-activity-log/?utm_sou
|
|
24 |
* Better manage & organize your WordPress site & users
|
25 |
* Easily spot suspicious behavior before there are security problems.
|
26 |
|
27 |
-
[WP Activity Log](https://wpactivitylog.com/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) is the most comprehensive real time user activity and monitoring log plugin. It helps thousands of WordPress administrators and security professionals keep an eye on what is happening on their websites
|
|
|
|
|
28 |
|
29 |
[youtube https://www.youtube.com/watch?v=pgFEMIvKFTA]
|
30 |
|
31 |
-
> <strong>Note</strong>: The
|
32 |
>
|
33 |
|
34 |
#### Maintained & Supported by WP White Security
|
35 |
|
36 |
-
WP White Security builds high-quality
|
37 |
-
|
38 |
-
Browse our list of [WordPress plugins](https://www.wpwhitesecurity.com/wordpress-plugins/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=all+plugins&utm_content=plugin+repos+description) that can help you better manage and improve the security of your WordPress websites and users.
|
39 |
|
40 |
### WordPress Changes & Details the Plugin Keeps a Log Of
|
41 |
As a comprehensive & complete WordPress activity log solution WP Activity Log does not just tell you that a post, a user profile, or an object was updated. It tells you exactly what was changed within the post, the user profile, or the object.
|
@@ -70,52 +70,54 @@ For every event that the plugin records it also reports the:
|
|
70 |
|
71 |
* Date & time (and milliseconds) of when it happened,
|
72 |
* User & role of the user who did the change,
|
73 |
-
* Source IP address from where the change happened
|
|
|
74 |
|
75 |
-
Refer to [WordPress activity log event IDs](https://wpactivitylog.com/support/kb/list-wordpress-activity-log-event-ids/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) for a complete list of all the changes WP Activity Log can keep a record of.
|
76 |
|
77 |
### Extend the Functionality of WP Activity Log
|
78 |
<strong>[Upgrade to WP Activity Log Premium](https://wpactivitylog.com/pricing/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong> to:
|
79 |
|
80 |
-
* See who is logged,
|
81 |
* See what everyone is doing in real-time,
|
82 |
* Log off any user with just a click,
|
83 |
* Generate HTML and CSV reports,
|
84 |
-
* Export the activity log in CSV (ideal for integrations),
|
85 |
* Get notified via email of important changes,
|
86 |
-
* Get instant SMS message
|
87 |
-
* Search the activity log using text-based searches
|
88 |
-
*
|
89 |
-
*
|
90 |
-
*
|
|
|
|
|
|
|
91 |
|
92 |
-
Refer to the [features and benefits page](https://wpactivitylog.com/features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) for more detailed information on the plugin
|
93 |
|
94 |
### Free and Premium Support
|
95 |
|
96 |
Support for WP Activity Log is free on the WordPress support forums.
|
97 |
|
98 |
-
Premium world-class support is available via email to all [WP Activity Log Premium](https://wpactivitylog.com/features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
99 |
|
100 |
-
> <strong>Note</strong>: paid
|
101 |
>
|
102 |
|
103 |
#### Other Noteworthy Features
|
104 |
On top of the comprehensive activity log, WP Activity Log also has a number of non-logging specific features that make it a complete WordPress logging solution, such as:
|
105 |
|
106 |
* Full [WordPress multisite support](https://wpactivitylog.com/support/kb/activity-log-multisite-network-features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
107 |
-
* Easily [create your custom alerts](https://wpactivitylog.com/support/kb/create-custom-events-wordpress-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) to monitor additional functionality
|
108 |
* Built-in [support for reverse proxies and web application firewalls](https://wpactivitylog.com/support/kb/support-reverse-proxies-web-application-firewalls/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
109 |
-
* Integration with WhatIsMyIpAddress.com
|
110 |
-
* Limit who can view the WordPress activity log by
|
111 |
-
* Limit who can manage the plugin
|
112 |
* Settings to [toggle (enable/disable) individual event IDs from the activity log](https://wpactivitylog.com/support/kb/exclude-logging-specific-change-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
113 |
* Configurable dashboard widget highlighting the most recent critical activity
|
114 |
* Configurable [WordPress activity log retention policies](https://wpactivitylog.com/support/kb/activity-log-retention-policies/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
115 |
* User avatar is displayed in the events for better recognizability
|
116 |
* and much more...
|
117 |
|
118 |
-
Refer to the <strong>[WordPress activity log plugin datasheet](https://wpactivitylog.com/activity-log-plugin-datasheet/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong> for a complete list of features.
|
119 |
|
120 |
### As Featured On:
|
121 |
|
@@ -133,6 +135,7 @@ Refer to the <strong>[WordPress activity log plugin datasheet](https://wpactivit
|
|
133 |
* [Cloudways](https://www.cloudways.com/blog/monitor-wordpress-with-wp-security-audit-log-plugin/)
|
134 |
* [Collective Ray](https://www.collectiveray.com/wp/plugins/wordpress-security-audit-log)
|
135 |
* [BlogVault](https://blogvault.net/wp-security-audit-log-plugin-review/)
|
|
|
136 |
* [Firewall.cx](http://www.firewall.cx/general-topics-reviews/security-articles/1146-wordpress-audit-monitor-log-site-security-alerts.html)
|
137 |
* [Design Wall](http://www.designwall.com/blog/10-wordpress-multisite-plugins-you-shouldnt-live-without/)
|
138 |
* [Tidy Repo](https://tidyrepo.com/wp-security-audit-log-wordpress-activity-log/)
|
@@ -140,11 +143,10 @@ Refer to the <strong>[WordPress activity log plugin datasheet](https://wpactivit
|
|
140 |
* [The Darknet](http://www.darknet.org.uk/2015/10/wp-security-audit-log-a-complete-audit-log-plugin-for-wordpress/)
|
141 |
* [WebEmpresa](https://www.webempresa.com/blog/auditando-cambios-en-wordpress.html)
|
142 |
* [KitPloit](http://www.kitploit.com/2016/10/wp-security-audit-log-ultimate.html)
|
143 |
-
* [EHacking](https://www.ehacking.net/2018/10/how-activity-log-wordpress-plugin.html)
|
144 |
|
145 |
#### WP Activity Log extensions for third party plugins
|
146 |
|
147 |
-
WP Activity Log can keep a detailed log of changes that happen on other plugins
|
148 |
|
149 |
* <strong>[WP Activity Log for WooCommerce](https://wpactivitylog.com/extensions/woocommerce-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong>: Install this extension to keep a log of changes you and yourr team do in the WooCommerce store settings, orders, products, coupons and much more.
|
150 |
* <strong>[WP Activity Log for Yoast SEO](https://wpactivitylog.com/extensions/yoast-seo-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong>: Install this extension to keep a log of the Yoast SEO plugin settings changes, and also of the on-page SEO changes you and your team make in the Yoast SEO meta box.
|
@@ -206,36 +208,15 @@ Please refer to our [support pages](https://wpactivitylog.com/support/?utm_sourc
|
|
206 |
|
207 |
== Changelog ==
|
208 |
|
209 |
-
= 4.
|
210 |
-
|
211 |
-
**Improvements**
|
212 |
-
* Redefined and improved the definitions of the [activity log events](https://wpactivitylog.com/support/kb/list-wordpress-activity-log-event-ids/).
|
213 |
-
* Improved text for all the activity log events.
|
214 |
-
|
215 |
-
= 4.2.1 (2021-03-17) =
|
216 |
-
|
217 |
-
Release notes: [WP Activity Log 4.2.1: Maintenance update & new event IDs](https://wpactivitylog.com/wsal-4-2-1/)
|
218 |
|
219 |
-
**Improved activity log coverage**
|
220 |
-
* 6045: user changed the site language
|
221 |
-
* 4029: admin initatiated a user password reset
|
222 |
-
|
223 |
**Improvements**
|
224 |
-
*
|
225 |
-
* Added
|
226 |
-
* Plugin reports email address used in failed login attempt instead of System.
|
227 |
-
* Added nonce to daily email notification trigger to prevent possible CSRF issues.
|
228 |
-
* Updated some plugin settings so they can be centrally managed from the [Activity Log for MainWP extension](https://wpactivitylog.com/extensions/mainwp-activity-log/).
|
229 |
-
* Added more user privileges checks in the plugin (better restricted access to users who has read only access to the activity log).
|
230 |
-
* [Activity log extensions](https://wpactivitylog.com/extensions/) name is now displayed in admin notices.
|
231 |
-
* Sorted the activity log extensions in alphabetical order in the plugin UI.
|
232 |
-
* Improved the Search filters labels.
|
233 |
|
234 |
**Bug fixes**
|
235 |
-
*
|
236 |
-
*
|
237 |
-
*
|
238 |
-
* Site administrators could see some plugin pages on a multisite network (help and about).
|
239 |
-
* Fixed some formatting issues with some of the event IDs.
|
240 |
|
241 |
Refer to the [complete plugin changelog](https://wpactivitylog.com/support/kb/plugin-changelog/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) for more detailed information about what was new, improved and fixed in previous versions of the WP Activity Log plugin.
|
5 |
License URI: https://www.gnu.org/licenses/gpl.html
|
6 |
Tags: activity log, wordpress activity logs, security audit log, audit log, user tracking, security event log, audit trail, wordpress security monitor, wordpress admin, wordpress admin monitoring, user activity, admin, multisite, SMS alerts, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
|
7 |
Requires at least: 4.4
|
8 |
+
Tested up to: 5.8
|
9 |
+
Stable tag: 4.3.1
|
10 |
+
Requires PHP: 7.0
|
11 |
|
12 |
The #1 user-rated activity log plugin. Keep a comprehensive log of the changes that happen on your site with this easy to use plugin.
|
13 |
|
24 |
* Better manage & organize your WordPress site & users
|
25 |
* Easily spot suspicious behavior before there are security problems.
|
26 |
|
27 |
+
[WP Activity Log](https://wpactivitylog.com/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) is the most comprehensive real time user activity and monitoring log plugin. It helps hundreds of thousands of WordPress administrators and security professionals keep an eye on what is happening on their websites and is the most highly rated WordPress activity log plugin.
|
28 |
+
|
29 |
+
WP Activity Log has been featured on the websites of some of the most popular and leading businesses in the WordPress ecosystem, such as WPBeginner, GoDaddy, and Kinsta.
|
30 |
|
31 |
[youtube https://www.youtube.com/watch?v=pgFEMIvKFTA]
|
32 |
|
33 |
+
> <strong>Note</strong>: The activity log for WordPress is FREE and you can keep as much logs as you want. Additional features such as reports, email notifications, SMS alerts, search & filters, integrations with logs management system, and many others are available in the <Strong>[Premium Edition](https://wpactivitylog.com/features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong>.
|
34 |
>
|
35 |
|
36 |
#### Maintained & Supported by WP White Security
|
37 |
|
38 |
+
WP White Security is a European development company that builds high-quality WordPress security & management plugins. Check out our list of [WordPress plugins](https://www.wpwhitesecurity.com/wordpress-plugins/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=all+plugins&utm_content=plugin+repos+description) that can help you better manage and improve the security of your WordPress websites and users.
|
|
|
|
|
39 |
|
40 |
### WordPress Changes & Details the Plugin Keeps a Log Of
|
41 |
As a comprehensive & complete WordPress activity log solution WP Activity Log does not just tell you that a post, a user profile, or an object was updated. It tells you exactly what was changed within the post, the user profile, or the object.
|
70 |
|
71 |
* Date & time (and milliseconds) of when it happened,
|
72 |
* User & role of the user who did the change,
|
73 |
+
* Source IP address from where the change happened,
|
74 |
+
* The object on which the change has taken place.
|
75 |
|
76 |
+
Refer to [WordPress activity log event IDs](https://wpactivitylog.com/support/kb/list-wordpress-activity-log-event-ids/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) for a complete list of all the changes WP Activity Log can keep a record of and a detailed explanation of what change every event ID represents.
|
77 |
|
78 |
### Extend the Functionality of WP Activity Log
|
79 |
<strong>[Upgrade to WP Activity Log Premium](https://wpactivitylog.com/pricing/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong> to:
|
80 |
|
81 |
+
* See who is logged to your website in real-time,
|
82 |
* See what everyone is doing in real-time,
|
83 |
* Log off any user with just a click,
|
84 |
* Generate HTML and CSV reports,
|
|
|
85 |
* Get notified via email of important changes,
|
86 |
+
* Get instant SMS message alerts of critical site changes,
|
87 |
+
* Search the activity log using text-based searches,
|
88 |
+
* Use the built-in filters to fine tune the search results,
|
89 |
+
* Store activity log in an external database to improve security and scalability,
|
90 |
+
* Mirror the activity log to logs management systems such as AWS CloudWatch, Loggly and Papertrail in real-time,
|
91 |
+
* Easily mirror the logs in real-time to business communication systems such as Slack,
|
92 |
+
* Send a copy of your websites' activity log to a log file on your web server in real-time,
|
93 |
+
* Archive old activity log data to another database for better storage and log management.
|
94 |
|
95 |
+
Refer to the [features and benefits page](https://wpactivitylog.com/features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) for more detailed information on the features of the WP Activity Log plugin.
|
96 |
|
97 |
### Free and Premium Support
|
98 |
|
99 |
Support for WP Activity Log is free on the WordPress support forums.
|
100 |
|
101 |
+
Premium world-class support is available via email to all [WP Activity Log Premium](https://wpactivitylog.com/features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) users.
|
102 |
|
103 |
+
> <strong>Note</strong>: paid customer support is given priority and is provided via one-to-one email and over the phone. [Upgrade to Premium](https://wpactivitylog.com/pricing/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) to benefit from priority support.
|
104 |
>
|
105 |
|
106 |
#### Other Noteworthy Features
|
107 |
On top of the comprehensive activity log, WP Activity Log also has a number of non-logging specific features that make it a complete WordPress logging solution, such as:
|
108 |
|
109 |
* Full [WordPress multisite support](https://wpactivitylog.com/support/kb/activity-log-multisite-network-features/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
110 |
+
* Easily [create your custom alerts ¬ifications](https://wpactivitylog.com/support/kb/create-custom-events-wordpress-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) to monitor additional functionality
|
111 |
* Built-in [support for reverse proxies and web application firewalls](https://wpactivitylog.com/support/kb/support-reverse-proxies-web-application-firewalls/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
112 |
+
* Integration with WhatIsMyIpAddress.com allow you to get all information about an IP address with just a mouse click.
|
113 |
+
* Limit who can view the WordPress activity log by users or roles
|
|
|
114 |
* Settings to [toggle (enable/disable) individual event IDs from the activity log](https://wpactivitylog.com/support/kb/exclude-logging-specific-change-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
115 |
* Configurable dashboard widget highlighting the most recent critical activity
|
116 |
* Configurable [WordPress activity log retention policies](https://wpactivitylog.com/support/kb/activity-log-retention-policies/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)
|
117 |
* User avatar is displayed in the events for better recognizability
|
118 |
* and much more...
|
119 |
|
120 |
+
Refer to the <strong>[WordPress activity log plugin datasheet](https://wpactivitylog.com/activity-log-plugin-datasheet/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong> for a complete list of all the plugin's features.
|
121 |
|
122 |
### As Featured On:
|
123 |
|
135 |
* [Cloudways](https://www.cloudways.com/blog/monitor-wordpress-with-wp-security-audit-log-plugin/)
|
136 |
* [Collective Ray](https://www.collectiveray.com/wp/plugins/wordpress-security-audit-log)
|
137 |
* [BlogVault](https://blogvault.net/wp-security-audit-log-plugin-review/)
|
138 |
+
* [EHacking](https://www.ehacking.net/2018/10/how-activity-log-wordpress-plugin.html)
|
139 |
* [Firewall.cx](http://www.firewall.cx/general-topics-reviews/security-articles/1146-wordpress-audit-monitor-log-site-security-alerts.html)
|
140 |
* [Design Wall](http://www.designwall.com/blog/10-wordpress-multisite-plugins-you-shouldnt-live-without/)
|
141 |
* [Tidy Repo](https://tidyrepo.com/wp-security-audit-log-wordpress-activity-log/)
|
143 |
* [The Darknet](http://www.darknet.org.uk/2015/10/wp-security-audit-log-a-complete-audit-log-plugin-for-wordpress/)
|
144 |
* [WebEmpresa](https://www.webempresa.com/blog/auditando-cambios-en-wordpress.html)
|
145 |
* [KitPloit](http://www.kitploit.com/2016/10/wp-security-audit-log-ultimate.html)
|
|
|
146 |
|
147 |
#### WP Activity Log extensions for third party plugins
|
148 |
|
149 |
+
WP Activity Log can keep also a detailed log of changes that happen on other plugins. Below is the list of the [activity log extensions for third party plugins](https://wpactivitylog.com/extensions/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description):
|
150 |
|
151 |
* <strong>[WP Activity Log for WooCommerce](https://wpactivitylog.com/extensions/woocommerce-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong>: Install this extension to keep a log of changes you and yourr team do in the WooCommerce store settings, orders, products, coupons and much more.
|
152 |
* <strong>[WP Activity Log for Yoast SEO](https://wpactivitylog.com/extensions/yoast-seo-activity-log/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description)</strong>: Install this extension to keep a log of the Yoast SEO plugin settings changes, and also of the on-page SEO changes you and your team make in the Yoast SEO meta box.
|
208 |
|
209 |
== Changelog ==
|
210 |
|
211 |
+
= 4.3.1 (2021-06-03) =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
|
|
|
|
|
|
|
|
|
213 |
**Improvements**
|
214 |
+
* Minimum version of PHP required now is 7.0.
|
215 |
+
* Added a custom prefix to libraries and dependencies used in the plugin to ensure there are no conflicts.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
|
217 |
**Bug fixes**
|
218 |
+
* Corrected logic in code to ensure all sessions are handled and checked when destroying idle sessions.
|
219 |
+
* Fixed an issue causing create/expired times in the "Logged in users" view to appear incorrectly.
|
220 |
+
* Implemented a missing function without with events were not retreived from the MainWP extension.
|
|
|
|
|
221 |
|
222 |
Refer to the [complete plugin changelog](https://wpactivitylog.com/support/kb/plugin-changelog/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=WSAL&utm_content=plugin+repos+description) for more detailed information about what was new, improved and fixed in previous versions of the WP Activity Log plugin.
|
sdk/wsal-freemius.php
CHANGED
@@ -13,71 +13,74 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
function wsal_freemius() {
|
27 |
-
global $wsal_freemius;
|
28 |
-
|
29 |
-
if ( ! isset( $wsal_freemius ) && ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
|
30 |
-
define( 'WP_FS__PRODUCT_94_MULTISITE', true );
|
31 |
|
32 |
-
|
33 |
-
|
34 |
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
|
|
|
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
50 |
|
51 |
-
|
52 |
-
|
53 |
-
'id' => '94',
|
54 |
-
'slug' => 'wp-security-audit-log',
|
55 |
-
'type' => 'plugin',
|
56 |
-
'public_key' => 'pk_d602740d3088272d75906045af9fa',
|
57 |
-
'premium_suffix' => '(Premium)',
|
58 |
-
'is_premium' => $is_premium,
|
59 |
-
'has_addons' => false,
|
60 |
-
'has_paid_plans' => true,
|
61 |
-
'trial' => $trial_args,
|
62 |
-
'has_affiliation' => false,
|
63 |
-
'menu' => array(
|
64 |
-
'slug' => 'wsal-auditlog',
|
65 |
-
'support' => false,
|
66 |
-
'affiliation' => false,
|
67 |
-
'network' => true,
|
68 |
-
),
|
69 |
-
'anonymous_mode' => $is_anonymous,
|
70 |
-
'live' => true,
|
71 |
-
)
|
72 |
-
);
|
73 |
}
|
74 |
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
77 |
|
78 |
-
|
79 |
-
wsal_freemius();
|
80 |
-
|
81 |
-
// Signal that SDK was initiated.
|
82 |
-
do_action( 'wsal_freemius_loaded' );
|
83 |
}
|
|
|
|
|
|
|
|
|
|
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
/**
|
17 |
+
* Freemius SDK
|
18 |
+
*
|
19 |
+
* Create a helper function for easy SDK access.
|
20 |
+
*
|
21 |
+
* @return Freemius
|
22 |
+
* @throws Freemius_Exception
|
23 |
+
*/
|
24 |
+
function wsal_freemius() {
|
25 |
+
global $wsal_freemius;
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
+
if ( ! isset( $wsal_freemius ) && ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
|
28 |
+
define( 'WP_FS__PRODUCT_94_MULTISITE', true );
|
29 |
|
30 |
+
// Include Freemius SDK.
|
31 |
+
require_once dirname( __FILE__ ) . DIRECTORY_SEPARATOR . implode( DIRECTORY_SEPARATOR, [
|
32 |
+
'..',
|
33 |
+
'third-party',
|
34 |
+
'freemius',
|
35 |
+
'wordpress-sdk',
|
36 |
+
'start.php'
|
37 |
+
] );
|
38 |
|
39 |
+
// Check anonymous mode.
|
40 |
+
$freemius_state = \WSAL\Helpers\Options::get_option_value_ignore_prefix( 'wsal_freemius_state', 'anonymous' );
|
41 |
+
$is_anonymous = ( 'anonymous' === $freemius_state || 'skipped' === $freemius_state );
|
42 |
+
$is_premium = false;
|
43 |
+
$is_anonymous = $is_premium ? false : $is_anonymous;
|
44 |
|
45 |
+
// Trial arguments.
|
46 |
+
$trial_args = array(
|
47 |
+
'days' => 7,
|
48 |
+
'is_require_payment' => false,
|
49 |
+
);
|
50 |
|
51 |
+
if ( WpSecurityAuditLog::is_mainwp_active() && ! is_multisite() ) {
|
52 |
+
$trial_args = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
}
|
54 |
|
55 |
+
$wsal_freemius = fs_dynamic_init(
|
56 |
+
array(
|
57 |
+
'id' => '94',
|
58 |
+
'slug' => 'wp-security-audit-log',
|
59 |
+
'type' => 'plugin',
|
60 |
+
'public_key' => 'pk_d602740d3088272d75906045af9fa',
|
61 |
+
'premium_suffix' => '(Premium)',
|
62 |
+
'is_premium' => $is_premium,
|
63 |
+
'has_addons' => false,
|
64 |
+
'has_paid_plans' => true,
|
65 |
+
'trial' => $trial_args,
|
66 |
+
'has_affiliation' => false,
|
67 |
+
'menu' => array(
|
68 |
+
'slug' => 'wsal-auditlog',
|
69 |
+
'support' => false,
|
70 |
+
'affiliation' => false,
|
71 |
+
'network' => true,
|
72 |
+
),
|
73 |
+
'anonymous_mode' => $is_anonymous,
|
74 |
+
'live' => true,
|
75 |
+
)
|
76 |
+
);
|
77 |
}
|
78 |
|
79 |
+
return apply_filters( 'wsal_freemius_sdk_object', $wsal_freemius );
|
|
|
|
|
|
|
|
|
80 |
}
|
81 |
+
|
82 |
+
// Init Freemius.
|
83 |
+
wsal_freemius();
|
84 |
+
|
85 |
+
// Signal that SDK was initiated.
|
86 |
+
do_action( 'wsal_freemius_loaded' );
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/LICENSE.txt
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/README.md
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/account.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/add-ons.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/affiliation.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/checkout.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/common.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/connect.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/debug.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/dialog-boxes.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/gdpr-optin-notice.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/plugins.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/customizer.css
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/img/index.php
RENAMED
File without changes
|
third-party/freemius/wordpress-sdk/assets/img/plugin-icon.png
ADDED
Binary file
|
third-party/freemius/wordpress-sdk/assets/img/theme-icon.png
ADDED
Binary file
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/nojquery.ba-postmessage.js
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/nojquery.ba-postmessage.min.js
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/postmessage.js
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/config.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-freemius-abstract.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-freemius.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-admin-notices.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-api.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-logger.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-options.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-plugin-updater.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-security.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-storage.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-user-lock.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/class-fs-customizer-support-section.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/class-fs-customizer-upsell-control.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/class-fs-debug-bar-panel.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/debug-bar-start.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-affiliate-terms.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-affiliate.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-billing.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-entity.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-payment.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-info.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-license.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-plan.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-tag.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-pricing.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-scope-entity.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-site.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-subscription.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-user.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-core-functions.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-essential-functions.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-plugin-info-dialog.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/i18n.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/l10n.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-admin-menu-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-admin-notice-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-cache-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-gdpr-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-key-value-storage.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-license-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-option-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-plan-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-plugin-manager.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/ArgumentNotExistException.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/EmptyArgumentException.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/Exception.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/InvalidArgumentException.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/OAuthException.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/FreemiusBase.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/FreemiusWordPress.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/LICENSE.txt
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/fs-essential-functions-1.1.7.1.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/fs-essential-functions-2.2.1.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-cs_CZ.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-da_DK.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-en.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-es_ES.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-fr_FR.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-he_IL.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-hu_HU.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-it_IT.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ja.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-nl_NL.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ru_RU.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ta.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-zh_CN.mo
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius.pot
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/languages/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/package.json
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/require.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/start.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/billing.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/activate-license-button.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/addon.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/deactivate-license-button.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/site.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/payments.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/add-ons.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/add-trial-to-pricing.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/admin-notice.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/ajax-loader.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/auto-installation.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/checkout.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/connect.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/contact.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/api-calls.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/logger.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/plugins-themes-sync.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/scheduled-crons.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/email.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/firewall-issues-js.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/affiliation.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/data-debug-mode.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/contact.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/form.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/retry-skip.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/license-activation.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/optout.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/premium-versions-upgrade-handler.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/premium-versions-upgrade-metadata.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/resend-key.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/subscription-cancellation.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/trial-start.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/user-change.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/gdpr-optin-js.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/jquery.content-change.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/open-license-activation.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/style-premium-theme.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/partials/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/partials/network-activation.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-icon.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/description.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/features.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/index.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/screenshots.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/powered-by.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/pricing.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/secure-https-header.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/sticky-admin-notice-js.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/tabs-capture-js.php
RENAMED
File without changes
|
{sdk/freemius → third-party/freemius/wordpress-sdk}/templates/tabs.php
RENAMED
File without changes
|
wp-security-audit-log.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin URI: http://wpactivitylog.com/
|
5 |
* Description: Identify WordPress security issues before they become a problem. Keep track of everything happening on your WordPress including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Activity Log generates a security alert for everything that happens on your WordPress blogs and websites. Use the Activity log viewer included in the plugin to see all the security alerts.
|
6 |
* Author: WP White Security
|
7 |
-
* Version: 4.
|
8 |
* Text Domain: wp-security-audit-log
|
9 |
* Author URI: https://www.wpwhitesecurity.com/
|
10 |
* License: GPL2
|
@@ -17,7 +17,7 @@
|
|
17 |
|
18 |
/*
|
19 |
WP Activity Log
|
20 |
-
Copyright(c)
|
21 |
|
22 |
This program is free software; you can redistribute it and/or modify
|
23 |
it under the terms of the GNU General Public License, version 2, as
|
@@ -35,1381 +35,1395 @@
|
|
35 |
|
36 |
if ( ! function_exists( 'wsal_freemius' ) ) {
|
37 |
|
38 |
-
|
39 |
-
* WSAL Main Class.
|
40 |
-
*
|
41 |
-
* @package Wsal
|
42 |
-
*/
|
43 |
-
class WpSecurityAuditLog {
|
44 |
|
45 |
-
|
46 |
-
*
|
47 |
-
*
|
48 |
-
* @var string
|
49 |
-
*/
|
50 |
-
public $version = '4.2.2';
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Plugin constants.
|
54 |
*
|
55 |
-
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
-
|
67 |
-
* New option name prefix.
|
68 |
-
*
|
69 |
-
* @var string
|
70 |
-
*/
|
71 |
-
const OPTIONS_PREFIX = 'wsal_';
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Views supervisor.
|
75 |
-
*
|
76 |
-
* @var WSAL_ViewManager
|
77 |
-
*/
|
78 |
-
public $views;
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Logger supervisor.
|
82 |
-
*
|
83 |
-
* @var WSAL_AlertManager
|
84 |
-
*/
|
85 |
-
public $alerts;
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Sensors supervisor.
|
89 |
-
*
|
90 |
-
* @var WSAL_SensorManager
|
91 |
-
*/
|
92 |
-
public $sensors;
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Settings manager. Accessed via $this->settings, which lazy-loads it.
|
96 |
-
*
|
97 |
-
* @var WSAL_Settings
|
98 |
-
*/
|
99 |
-
protected $_settings;
|
100 |
-
|
101 |
-
/**
|
102 |
-
* Class loading manager.
|
103 |
-
*
|
104 |
-
* @var WSAL_Autoloader
|
105 |
-
*/
|
106 |
-
public $autoloader;
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Constants manager.
|
110 |
-
*
|
111 |
-
* @var WSAL_ConstantManager
|
112 |
-
*/
|
113 |
-
public $constants;
|
114 |
-
|
115 |
-
/**
|
116 |
-
* WP Options table options handler.
|
117 |
-
*
|
118 |
-
* @var WSAL\Helpers\Options;
|
119 |
-
*/
|
120 |
-
public $options_helper;
|
121 |
-
|
122 |
-
/**
|
123 |
-
* Contains a list of cleanup callbacks.
|
124 |
-
*
|
125 |
-
* @var callable[]
|
126 |
-
*/
|
127 |
-
protected $_cleanup_hooks = array();
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Add-ons Manager.
|
131 |
-
*
|
132 |
-
* @var WSAL_Extension_Manager
|
133 |
-
*/
|
134 |
-
public $extensions;
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Allowed HTML Tags for strings.
|
138 |
-
*
|
139 |
-
* @var array
|
140 |
-
*/
|
141 |
-
public $allowed_html_tags = array();
|
142 |
-
|
143 |
-
/**
|
144 |
-
* Standard singleton pattern.
|
145 |
-
* WARNING! To ensure the system always works as expected, AVOID using this method.
|
146 |
-
* Instead, make use of the plugin instance provided by 'wsal_init' action.
|
147 |
-
*
|
148 |
-
* @return WpSecurityAuditLog Returns the current plugin instance.
|
149 |
-
*/
|
150 |
-
public static function GetInstance() {
|
151 |
-
static $instance = null;
|
152 |
-
if ( ! $instance ) {
|
153 |
-
$instance = new self();
|
154 |
-
}
|
155 |
-
return $instance;
|
156 |
-
}
|
157 |
|
158 |
-
|
159 |
-
|
160 |
-
*/
|
161 |
-
public function __construct() {
|
162 |
-
$bootstrap_hook = [ 'plugins_loaded', 9 ];
|
163 |
-
|
164 |
-
// plugin should be initialised later in the WordPress bootstrap process to minimize overhead
|
165 |
-
if ( self::is_frontend() ) {
|
166 |
-
// to track sessions on frontend logins we need to attach the
|
167 |
-
// the tracker and all the interfaces and classes it depends on.
|
168 |
-
add_action( $bootstrap_hook[0], array( $this, 'maybe_add_sessions_trackers_early' ), $bootstrap_hook[1] );
|
169 |
-
$bootstrap_hook = [ 'wp_loaded', 0 ];
|
170 |
-
}
|
171 |
|
172 |
-
|
|
|
173 |
|
174 |
-
|
175 |
-
|
176 |
|
177 |
-
|
178 |
-
|
|
|
179 |
|
180 |
-
|
181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
|
183 |
-
|
184 |
-
|
185 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
* If the frontend login tracking is not enabled don't add anything.
|
199 |
-
*/
|
200 |
-
$frontend_events = WSAL_Settings::get_frontend_events();
|
201 |
-
if ( empty( $frontend_events['login'] ) ) {
|
202 |
-
return;
|
203 |
-
}
|
204 |
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
require_once $base_path . 'extensions/user-sessions/classes/Adapters/SessionAdapter.php';
|
215 |
-
require_once $base_path . 'extensions/user-sessions/classes/Models/Session.php';
|
216 |
-
require_once $base_path . 'extensions/user-sessions/classes/Helpers.php';
|
217 |
-
require_once $base_path . 'extensions/user-sessions/user-sessions.php';
|
218 |
-
|
219 |
-
$session_tracking = new WSAL_Sensors_UserSessionsTracking( $this );
|
220 |
-
$session_tracking->init();
|
221 |
-
}
|
222 |
-
}
|
223 |
|
224 |
-
|
225 |
-
|
226 |
-
*
|
227 |
-
* @param string $property - Class property.
|
228 |
-
* @return object
|
229 |
-
*/
|
230 |
-
public function __get( $property ) {
|
231 |
-
if ( 'settings' === $property ) {
|
232 |
-
return $this->settings();
|
233 |
-
}
|
234 |
-
}
|
235 |
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
|
|
|
|
|
|
|
|
|
|
245 |
|
246 |
-
|
247 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
|
249 |
-
|
250 |
-
|
251 |
-
*
|
252 |
-
* @method include_options_helper
|
253 |
-
* @since 4.0.3
|
254 |
-
* @return \WSAL\Helpers\Options
|
255 |
-
*/
|
256 |
-
public function include_options_helper() {
|
257 |
-
require_once 'classes/Helpers/Options.php';
|
258 |
-
if ( ! isset( $this->options_helper ) ) {
|
259 |
-
$this->options_helper = new \WSAL\Helpers\Options( self::OPTIONS_PREFIX );
|
260 |
-
}
|
261 |
-
return $this->options_helper;
|
262 |
-
}
|
263 |
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
* If we have both a url and a request patch check if this is
|
278 |
-
* a rest request.
|
279 |
-
*
|
280 |
-
* @since 4.0..3
|
281 |
-
*/
|
282 |
-
if ( $rest_url_path && $request_path ) {
|
283 |
-
$is_rest = ( strpos( $request_path, $rest_url_path ) === 0 ) || isset( $_GET['rest_route'] );
|
284 |
-
}
|
285 |
-
}
|
286 |
|
287 |
-
|
288 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
289 |
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
return ! is_admin()
|
297 |
-
&& ! self::is_login_screen()
|
298 |
-
&& ( ! defined( 'WP_CLI' ) || ! WP_CLI )
|
299 |
-
&& ( ! defined( 'DOING_CRON' ) || ! DOING_CRON )
|
300 |
-
&& ! self::is_rest_api()
|
301 |
-
&& ! self::is_admin_blocking_plugins_support_enabled();
|
302 |
-
}
|
303 |
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
*/
|
309 |
-
public function setup() {
|
310 |
-
if ( ! $this->should_load() ) {
|
311 |
-
return;
|
312 |
-
}
|
313 |
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
|
|
|
|
|
|
|
|
320 |
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
|
|
325 |
|
326 |
-
|
327 |
-
* Returns whether the plugin should load.
|
328 |
-
*
|
329 |
-
* @return bool Whether the plugin should load.
|
330 |
-
*/
|
331 |
-
public function should_load() {
|
332 |
-
// Always load on the admin.
|
333 |
-
if ( is_admin() ) {
|
334 |
-
return true;
|
335 |
-
}
|
336 |
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
}
|
342 |
|
343 |
-
|
|
|
344 |
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
349 |
|
350 |
-
|
351 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
public static function should_load_frontend() {
|
359 |
-
$frontend_events = WSAL_Settings::get_frontend_events();
|
360 |
-
$should_load = ! empty( $frontend_events['register'] ) || ! empty( $frontend_events['login'] ) || ! empty( $frontend_events['woocommerce'] );
|
361 |
-
|
362 |
-
// Allow extensions to manually allow a sensor to load.
|
363 |
-
return apply_filters( 'wsal_load_on_frontend', $should_load, $frontend_events );
|
364 |
-
}
|
365 |
-
|
366 |
-
/**
|
367 |
-
* Include Plugin Files.
|
368 |
-
*
|
369 |
-
* @since 3.3
|
370 |
-
*/
|
371 |
-
public function includes() {
|
372 |
-
require_once 'classes/Models/ActiveRecord.php';
|
373 |
-
|
374 |
-
if ( is_admin() ) {
|
375 |
-
// Models.
|
376 |
-
require_once 'classes/Models/Meta.php';
|
377 |
-
require_once 'classes/Models/Occurrence.php';
|
378 |
-
require_once 'classes/Models/Query.php';
|
379 |
-
require_once 'classes/Models/OccurrenceQuery.php';
|
380 |
-
require_once 'classes/Models/TmpUser.php';
|
381 |
-
|
382 |
-
// Data helper.
|
383 |
-
require_once 'classes/Helpers/DataHelper.php';
|
384 |
-
|
385 |
-
// Managers.
|
386 |
-
require_once 'classes/ViewManager.php';
|
387 |
-
require_once 'classes/WidgetManager.php';
|
388 |
-
|
389 |
-
// Views.
|
390 |
-
require_once 'classes/AbstractView.php';
|
391 |
-
require_once 'classes/ExtensionPlaceholderView.php';
|
392 |
-
require_once 'classes/AuditLogListView.php';
|
393 |
-
require_once 'classes/AuditLogGridView.php';
|
394 |
-
require_once 'classes/Views/AuditLog.php';
|
395 |
-
require_once 'classes/Views/EmailNotifications.php';
|
396 |
-
require_once 'classes/Views/ExternalDB.php';
|
397 |
-
require_once 'classes/Views/Help.php';
|
398 |
-
require_once 'classes/Views/LogInUsers.php';
|
399 |
-
require_once 'classes/Views/Reports.php';
|
400 |
-
require_once 'classes/Views/Search.php';
|
401 |
-
require_once 'classes/Views/Settings.php';
|
402 |
-
require_once 'classes/Views/ToggleAlerts.php';
|
403 |
-
|
404 |
-
// Utilities.
|
405 |
-
require_once 'classes/Utilities/PluginInstallAndActivate.php';
|
406 |
-
require_once 'classes/Utilities/PluginInstallerAction.php';
|
407 |
-
require_once 'classes/Utilities/RequestUtils.php';
|
408 |
-
|
409 |
-
// Third party extensions.
|
410 |
-
require_once 'classes/ThirdPartyExtensions/AbstractExtension.php';
|
411 |
-
require_once 'classes/ThirdPartyExtensions/YoastSeoExtension.php';
|
412 |
-
require_once 'classes/ThirdPartyExtensions/BBPressExtension.php';
|
413 |
-
require_once 'classes/ThirdPartyExtensions/WPFormsExtension.php';
|
414 |
-
require_once 'classes/ThirdPartyExtensions/WooCommerceExtension.php';
|
415 |
-
require_once 'classes/ThirdPartyExtensions/GravityFormsExtension.php';
|
416 |
-
}
|
417 |
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
require_once 'classes/Adapters/ActiveRecordInterface.php';
|
426 |
-
require_once 'classes/Adapters/MetaInterface.php';
|
427 |
-
require_once 'classes/Adapters/OccurrenceInterface.php';
|
428 |
-
require_once 'classes/Adapters/QueryInterface.php';
|
429 |
-
|
430 |
-
// Third party extensions with public sensors.
|
431 |
-
require_once 'classes/ThirdPartyExtensions/AbstractExtension.php';
|
432 |
-
require_once 'classes/ThirdPartyExtensions/WooCommerceExtension.php';
|
433 |
-
|
434 |
-
// Only include these if we are in multisite envirnoment.
|
435 |
-
if ( $this->isMultisite() ) {
|
436 |
-
require_once 'classes/Multisite/NetworkWide/TrackerInterface.php';
|
437 |
-
require_once 'classes/Multisite/NetworkWide/AbstractTracker.php';
|
438 |
-
require_once 'classes/Multisite/NetworkWide/CPTsTracker.php';
|
439 |
-
// setup the CPT tracker across the network.
|
440 |
-
$cpts_tracker = new \WSAL\Multisite\NetworkWide\CPTsTracker( $this );
|
441 |
-
$cpts_tracker->setup();
|
442 |
-
}
|
443 |
|
444 |
-
|
445 |
-
|
446 |
-
$this->autoloader = new WSAL_Autoloader( $this );
|
447 |
-
$this->autoloader->Register( self::PLG_CLS_PRFX, $this->GetBaseDir() . 'classes' . DIRECTORY_SEPARATOR );
|
448 |
-
}
|
449 |
|
450 |
-
|
451 |
-
* Initialize Plugin Hooks.
|
452 |
-
*
|
453 |
-
* @since 3.3
|
454 |
-
*/
|
455 |
-
public function init_hooks() {
|
456 |
-
add_action( 'init', array( $this, 'init' ), 5 );
|
457 |
|
458 |
-
|
459 |
-
|
460 |
|
461 |
-
|
462 |
-
|
|
|
|
|
463 |
|
464 |
-
|
465 |
-
|
466 |
-
add_action( 'admin_init', array( $this, 'wsal_plugin_redirect' ) );
|
467 |
-
}
|
468 |
|
469 |
-
|
470 |
-
|
471 |
|
472 |
-
|
473 |
-
|
474 |
|
475 |
-
|
476 |
-
|
|
|
|
|
|
|
477 |
|
478 |
-
|
479 |
-
add_action( 'wsal_delete_logins', array( $this, 'delete_failed_logins' ) );
|
480 |
-
if ( ! wp_next_scheduled( 'wsal_delete_logins' ) ) {
|
481 |
-
wp_schedule_event( time(), 'daily', 'wsal_delete_logins' );
|
482 |
-
}
|
483 |
|
484 |
-
|
485 |
|
486 |
-
|
487 |
|
488 |
-
|
489 |
|
490 |
-
|
|
|
|
|
|
|
491 |
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
|
|
496 |
|
497 |
-
|
498 |
-
|
499 |
-
$wpforms_addon = new WSAL_WPFormsExtension;
|
500 |
-
$gravityforms_addon = new WSAL_GravityFormsExtension;
|
501 |
-
}
|
502 |
|
503 |
-
|
504 |
-
|
|
|
505 |
|
506 |
-
|
507 |
-
|
508 |
-
|
|
|
|
|
|
|
|
|
|
|
509 |
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
return parse_url( site_url( 'wp-login.php' ), PHP_URL_PATH ) === parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
|
517 |
-
}
|
518 |
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
|
|
|
|
|
|
|
|
|
|
525 |
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
* @uses is_plugin_active() Uses this WP core function after making sure that this function is available.
|
530 |
-
* @param string $plugin Path to the main plugin file from plugins directory.
|
531 |
-
* @return bool True, if in the active plugins list. False, not in the list.
|
532 |
-
*/
|
533 |
-
public static function is_plugin_active( $plugin ) {
|
534 |
-
if ( ! function_exists( 'is_plugin_active' ) ) {
|
535 |
-
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
536 |
-
}
|
537 |
|
538 |
-
|
539 |
-
|
540 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
541 |
|
542 |
-
|
543 |
-
|
544 |
-
$our_plugins = array_column( WSAL_PluginInstallAndActivate::get_installable_plugins(), 'plugin_basename' );
|
545 |
-
// Check if we are dealing with one of our extensions.
|
546 |
-
if ( in_array( basename( $plugin ), $our_plugins, true ) ) {
|
547 |
-
// This IS one of our extensions, so lets check a little deeper as folder
|
548 |
-
// name can differ.
|
549 |
-
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
550 |
-
$current_plugins = array_keys( get_site_option( 'active_sitewide_plugins', [] ) );
|
551 |
-
} else {
|
552 |
-
$current_plugins = get_option( 'active_plugins' );
|
553 |
-
}
|
554 |
-
// Loop through active plugins to compare file names.
|
555 |
-
foreach ( $current_plugins as $active_plugin ) {
|
556 |
-
if ( basename( $plugin ) == basename( $active_plugin ) ) {
|
557 |
-
// Plugin basename is in active plugins, so return true.
|
558 |
-
return true;
|
559 |
-
}
|
560 |
-
}
|
561 |
-
}
|
562 |
-
}
|
563 |
|
564 |
-
|
565 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
);
|
598 |
-
}
|
599 |
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
617 |
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
|
|
|
|
|
|
640 |
}
|
641 |
-
|
642 |
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
wsal_freemius()->add_filter( 'show_first_trial_after_n_sec', array( $this, 'change_show_first_trial_period' ), 10, 1 );
|
652 |
-
wsal_freemius()->add_filter( 'reshow_trial_after_every_n_sec', array( $this, 'change_reshow_trial_period' ), 10, 1 );
|
653 |
-
wsal_freemius()->add_filter( 'show_admin_notice', array( $this, 'freemius_show_admin_notice' ), 10, 2 );
|
654 |
-
wsal_freemius()->add_filter( 'show_delegation_option', '__return_false' );
|
655 |
-
wsal_freemius()->add_filter( 'enable_per_site_activation', '__return_false' );
|
656 |
-
wsal_freemius()->add_filter( 'show_trial', '__return_false' );
|
657 |
-
wsal_freemius()->add_filter( 'opt_in_error_message', array( $this, 'limited_license_activation_error' ), 10, 1 );
|
658 |
-
wsal_freemius()->add_action( 'after_account_plan_sync', array( $this, 'sync_premium_freemius' ), 10, 1 );
|
659 |
-
wsal_freemius()->add_action( 'after_premium_version_activation', array( $this, 'on_freemius_premium_version_activation') );
|
660 |
-
wsal_freemius()->add_filter( 'plugin_icon', function( $plugin_icon) {
|
661 |
-
return WSAL_BASE_DIR . 'img/wsal-logo@2x.png';
|
662 |
-
} );
|
663 |
-
wsal_freemius()->add_action( 'is_submenu_visible', array( $this, 'hide_freemius_submenu_items' ), 10, 2 );
|
664 |
-
}
|
665 |
-
}
|
666 |
-
}
|
667 |
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
|
|
|
|
|
|
676 |
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
688 |
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
* @param array $info – Information to return.
|
695 |
-
* @param array $post_data – Post data array from MainWP.
|
696 |
-
* @return mixed
|
697 |
-
*/
|
698 |
-
public function mainwp_dashboard_callback( $info, $post_data ) {
|
699 |
-
if ( isset( $post_data['action'] ) ) {
|
700 |
-
switch ( $post_data['action'] ) {
|
701 |
-
case 'check_wsal':
|
702 |
-
$info = new stdClass();
|
703 |
-
$info->wsal_installed = true;
|
704 |
-
$info->is_premium = false;
|
705 |
-
break;
|
706 |
-
|
707 |
-
case 'get_events':
|
708 |
-
$limit = isset( $post_data['events_count'] ) ? $post_data['events_count'] : false;
|
709 |
-
$offset = isset( $post_data['events_offset'] ) ? $post_data['events_offset'] : false;
|
710 |
-
$query_args = isset( $post_data['query_args'] ) ? $post_data['query_args'] : false;
|
711 |
-
$info = $this->alerts->get_mainwp_extension_events( $limit, $offset, $query_args );
|
712 |
-
break;
|
713 |
-
|
714 |
-
case 'get_report':
|
715 |
-
$filters = isset( $post_data['filters'] ) ? $post_data['filters'] : array();
|
716 |
-
$report_type = isset( $post_data['report_type'] ) ? $post_data['report_type'] : false;
|
717 |
-
$info = $this->alerts->get_mainwp_extension_report( $filters, $report_type );
|
718 |
-
break;
|
719 |
-
|
720 |
-
case 'latest_event':
|
721 |
-
// run the query and return it.
|
722 |
-
$event = $this->query_for_latest_event();
|
723 |
-
$event = $event->getAdapter()->Execute( $event );
|
724 |
-
|
725 |
-
// Set the return object.
|
726 |
-
if ( isset( $event[0] ) ) {
|
727 |
-
$info = new stdClass();
|
728 |
-
$info->alert_id = $event[0]->alert_id;
|
729 |
-
$info->created_on = $event[0]->created_on;
|
730 |
-
} else {
|
731 |
-
$info = false;
|
732 |
-
}
|
733 |
-
break;
|
734 |
-
case 'enforce_settings':
|
735 |
-
// check subaction
|
736 |
-
if ( ! array_key_exists( 'subaction', $post_data) || empty( $post_data['subaction'] ) ) {
|
737 |
-
$info = array(
|
738 |
-
'success' => 'no',
|
739 |
-
'message' => 'Missing subaction parameter.'
|
740 |
-
);
|
741 |
break;
|
742 |
-
}
|
743 |
|
744 |
-
|
745 |
-
|
746 |
-
$
|
747 |
-
|
748 |
-
'message' => 'Unsupported subaction parameter value.'
|
749 |
-
);
|
750 |
break;
|
751 |
-
}
|
752 |
|
753 |
-
|
754 |
-
//
|
755 |
-
|
756 |
-
$
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
$
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
}
|
766 |
}
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
|
|
|
|
|
|
|
|
|
|
771 |
}
|
772 |
|
773 |
-
|
774 |
-
|
|
|
|
|
|
|
|
|
|
|
775 |
}
|
776 |
|
777 |
-
if (
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
782 |
}
|
783 |
-
}
|
784 |
|
785 |
-
|
786 |
-
|
787 |
-
|
|
|
788 |
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
$this->alerts->Trigger( 6043 );
|
793 |
-
default:
|
794 |
-
break;
|
795 |
-
}
|
796 |
-
}
|
797 |
-
return $info;
|
798 |
-
}
|
799 |
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
public function query_for_latest_event() {
|
808 |
-
$event_query = new WSAL_Models_OccurrenceQuery();
|
809 |
-
// order by creation.
|
810 |
-
$event_query->addOrderBy( 'created_on', true );
|
811 |
-
// only request 1 item.
|
812 |
-
$event_query->setLimit( 1 );
|
813 |
-
return $event_query;
|
814 |
-
}
|
815 |
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
public function wsal_plugin_redirect() {
|
820 |
-
// WSAL State.
|
821 |
-
$wsal_state = $this->GetGlobalSetting( 'freemius_state', 'anonymous' );
|
822 |
-
|
823 |
-
if (
|
824 |
-
$this->GetGlobalSetting( 'redirect_on_activate', false ) // Redirect flag.
|
825 |
-
&& in_array( $wsal_state, array( 'anonymous', 'skipped' ), true )
|
826 |
-
) {
|
827 |
-
// If the redirect option is true, then continue.
|
828 |
-
$this->include_options_helper();
|
829 |
-
$this->options_helper->delete_option( 'wsal_redirect_on_activate' ); // Delete redirect option.
|
830 |
-
|
831 |
-
// Redirect URL.
|
832 |
-
$redirect = '';
|
833 |
-
|
834 |
-
// If current site is multisite and user is super-admin then redirect to network audit log.
|
835 |
-
if ( $this->IsMultisite() && $this->settings()->CurrentUserCan( 'edit' ) && is_super_admin() ) {
|
836 |
-
$redirect = add_query_arg( 'page', 'wsal-auditlog', network_admin_url( 'admin.php' ) );
|
837 |
-
} else {
|
838 |
-
// Otherwise redirect to main audit log view.
|
839 |
-
$redirect = add_query_arg( 'page', 'wsal-auditlog', admin_url( 'admin.php' ) );
|
840 |
-
}
|
841 |
-
wp_safe_redirect( $redirect );
|
842 |
-
exit();
|
843 |
-
}
|
844 |
|
845 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
846 |
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
'em' => array(),
|
863 |
-
'strong' => array(),
|
864 |
-
'p' => array(
|
865 |
-
'class' => array(),
|
866 |
-
),
|
867 |
-
);
|
868 |
-
}
|
869 |
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
define( 'WSAL_ISSUE_URL', 'https://wordpress.org/support/plugin/wp-security-audit-log' );
|
899 |
-
}
|
900 |
-
// Plugin Classes Prefix.
|
901 |
-
if ( ! defined( 'WSAL_CLASS_PREFIX' ) ) {
|
902 |
-
define( 'WSAL_CLASS_PREFIX', 'WSAL_' );
|
903 |
-
}
|
904 |
-
}
|
905 |
-
/**
|
906 |
-
* Customize Freemius connect message for new users.
|
907 |
-
*
|
908 |
-
* @param string $message - Connect message.
|
909 |
-
* @param string $user_first_name - User first name.
|
910 |
-
* @param string $plugin_title - Plugin title.
|
911 |
-
* @param string $user_login - Username.
|
912 |
-
* @param string $site_link - Site link.
|
913 |
-
* @param string $_freemius_link - Freemius link.
|
914 |
-
* @return string
|
915 |
-
*/
|
916 |
-
public function wsal_freemius_connect_message( $message, $user_first_name, $plugin_title, $user_login, $site_link, $_freemius_link ) {
|
917 |
-
$freemius_link = '<a href="https://wpactivitylog.com/support/kb/non-sensitive-diagnostic-data/" target="_blank" tabindex="1">freemius.com</a>';
|
918 |
-
return sprintf(
|
919 |
-
/* translators: Username */
|
920 |
-
esc_html__( 'Hey %1$s', 'wp-security-audit-log' ) . ',<br>' .
|
921 |
-
esc_html__( 'Never miss an important update! Opt-in to our security and feature updates notifications, and non-sensitive diagnostic tracking with freemius.com.', 'wp-security-audit-log' ) .
|
922 |
-
'<br /><br /><strong>' . esc_html__( 'Note: ', 'wp-security-audit-log' ) . '</strong>' .
|
923 |
-
esc_html__( 'NO ACTIVITY LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS.', 'wp-security-audit-log' ),
|
924 |
-
$user_first_name,
|
925 |
-
'<b>' . $plugin_title . '</b>',
|
926 |
-
'<b>' . $user_login . '</b>',
|
927 |
-
$site_link,
|
928 |
-
$freemius_link
|
929 |
-
);
|
930 |
-
}
|
931 |
|
932 |
-
|
933 |
-
* Customize Freemius connect message on update.
|
934 |
-
*
|
935 |
-
* @param string $message - Connect message.
|
936 |
-
* @param string $user_first_name - User first name.
|
937 |
-
* @param string $plugin_title - Plugin title.
|
938 |
-
* @param string $user_login - Username.
|
939 |
-
* @param string $site_link - Site link.
|
940 |
-
* @param string $_freemius_link - Freemius link.
|
941 |
-
* @return string
|
942 |
-
*/
|
943 |
-
public function wsal_freemius_update_connect_message( $message, $user_first_name, $plugin_title, $user_login, $site_link, $_freemius_link ) {
|
944 |
-
$freemius_link = '<a href="https://wpactivitylog.com/support/kb/non-sensitive-diagnostic-data/" target="_blank" tabindex="1">freemius.com</a>';
|
945 |
-
return sprintf(
|
946 |
-
/* translators: Username */
|
947 |
-
esc_html__( 'Hey %1$s', 'wp-security-audit-log' ) . ',<br>' .
|
948 |
-
/* translators: 1: Plugin name. 2: Freemius link. */
|
949 |
-
esc_html__( 'Please help us improve %2$s! If you opt-in, some non-sensitive data about your usage of %2$s will be sent to %5$s, a diagnostic tracking service we use. If you skip this, that\'s okay! %2$s will still work just fine.', 'wp-security-audit-log' ) .
|
950 |
-
'<br /><br /><strong>' . esc_html__( 'Note: ', 'wp-security-audit-log' ) . '</strong>' .
|
951 |
-
esc_html__( 'NO ACTIVITY LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS.', 'wp-security-audit-log' ),
|
952 |
-
$user_first_name,
|
953 |
-
'<b>' . $plugin_title . '</b>',
|
954 |
-
'<b>' . $user_login . '</b>',
|
955 |
-
$site_link,
|
956 |
-
$freemius_link
|
957 |
-
);
|
958 |
-
}
|
959 |
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
974 |
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
979 |
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
991 |
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1003 |
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
* @var string $title An optional message title.
|
1016 |
-
* @var string $type The type of the message ('success', 'update', 'warning', 'promotion').
|
1017 |
-
* @var string $id The unique identifier of the message.
|
1018 |
-
* @var string $manager_id The unique identifier of the notices manager. For plugins it would be the plugin's slug, for themes - `<slug>-theme`.
|
1019 |
-
* @var string $plugin The product's title.
|
1020 |
-
* @var string $wp_user_id An optional WP user ID that this admin notice is for.
|
1021 |
-
* }
|
1022 |
-
* @return bool
|
1023 |
-
*/
|
1024 |
-
public function freemius_show_admin_notice( $show, $msg ) {
|
1025 |
-
if ( $this->settings()->CurrentUserCan( 'edit' ) ) {
|
1026 |
-
return $show;
|
1027 |
-
}
|
1028 |
-
return false;
|
1029 |
-
}
|
1030 |
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
wsal_freemius()->override_i18n(
|
1043 |
-
array(
|
1044 |
-
'few-plugin-tweaks' => __( 'You need to activate the licence key to use WP Activity Log Premium. %2$s', 'wp-security-audit-log' ),
|
1045 |
-
'optin-x-now' => __( 'Activate the licence key now', 'wp-security-audit-log' ),
|
1046 |
-
)
|
1047 |
-
);
|
1048 |
-
}
|
1049 |
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
|
|
|
|
|
|
|
|
|
|
1071 |
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1082 |
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1086 |
|
1087 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1088 |
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
}
|
1093 |
|
1094 |
-
|
1095 |
-
if ( ! empty( $this->sensors ) && $this->sensors instanceof WSAL_SensorManager ) {
|
1096 |
-
$this->sensors->HookEvents();
|
1097 |
-
}
|
1098 |
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
if ( ( ! isset( $get_page ) || 'wsal-auditlog' !== $get_page ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
|
1104 |
-
$selected_db = get_transient( 'wsal_wp_selected_db' );
|
1105 |
-
$selected_db_user = (int) get_transient( 'wsal_wp_selected_db_user' );
|
1106 |
-
if ( $selected_db && ( get_current_user_id() === $selected_db_user ) ) {
|
1107 |
-
// Delete the transient.
|
1108 |
-
delete_transient( 'wsal_wp_selected_db' );
|
1109 |
-
delete_transient( 'wsal_wp_selected_db_user' );
|
1110 |
-
}
|
1111 |
-
}
|
1112 |
-
}
|
1113 |
-
|
1114 |
-
// Hide plugin.
|
1115 |
-
if ( $this->settings()->IsIncognito() ) {
|
1116 |
-
add_action( 'admin_head', array( $this, 'HidePlugin' ) );
|
1117 |
-
add_filter( 'all_plugins', array( $this, 'wsal_hide_plugin' ) );
|
1118 |
-
}
|
1119 |
-
|
1120 |
-
// Update routine.
|
1121 |
-
$old_version = $this->GetOldVersion();
|
1122 |
-
$new_version = $this->GetNewVersion();
|
1123 |
-
if ( $old_version !== $new_version ) {
|
1124 |
-
$this->Update( $old_version, $new_version );
|
1125 |
-
}
|
1126 |
|
1127 |
-
|
|
|
|
|
|
|
1128 |
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
|
|
|
|
1141 |
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
*
|
1148 |
-
* @since 3.3.1
|
1149 |
-
*/
|
1150 |
-
public function deactivate_actions() {
|
1151 |
-
/**
|
1152 |
-
* Allow short circuiting of the deactivation email sending by using
|
1153 |
-
* this filter to return true here instead of default false.
|
1154 |
-
*
|
1155 |
-
* @since 3.5.2
|
1156 |
-
*
|
1157 |
-
* @var bool
|
1158 |
-
*/
|
1159 |
-
if ( apply_filters( 'wsal_filter_prevent_deactivation_email_delivery', false ) ) {
|
1160 |
-
return;
|
1161 |
-
}
|
1162 |
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
|
1170 |
-
|
1171 |
-
* Disable Custom Field through ajax.
|
1172 |
-
*
|
1173 |
-
* @internal
|
1174 |
-
*/
|
1175 |
-
public function AjaxDisableCustomField() {
|
1176 |
-
// Die if user does not have permission to disable.
|
1177 |
-
if ( ! $this->settings()->CurrentUserCan( 'edit' ) ) {
|
1178 |
-
echo '<p>' . esc_html__( 'Error: You do not have sufficient permissions to disable this custom field.', 'wp-security-audit-log' ) . '</p>';
|
1179 |
-
die();
|
1180 |
-
}
|
1181 |
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1187 |
|
1188 |
-
|
1189 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1190 |
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
|
|
|
|
|
|
1194 |
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1200 |
|
1201 |
-
|
1202 |
-
|
|
|
|
|
|
|
1203 |
|
1204 |
-
|
1205 |
-
|
1206 |
-
array(
|
1207 |
-
'page' => 'wsal-settings',
|
1208 |
-
'tab' => 'exclude-objects',
|
1209 |
-
),
|
1210 |
-
network_admin_url( 'admin.php' )
|
1211 |
-
);
|
1212 |
-
echo wp_sprintf(
|
1213 |
-
'<p>' . __( 'Custom Field <strong>%1$s</strong> is no longer being monitored.<br />Enable the monitoring of this custom field again from the', 'wp-security-audit-log' ) . ' <a href="%2$s">%3$s</a>%4$s</p>',
|
1214 |
-
$post_array['notice'],
|
1215 |
-
$exclude_objects_link,
|
1216 |
-
__( 'Excluded Objects', 'wp-security-audit-log' ),
|
1217 |
-
__( ' tab in the plugin settings', 'wp-security-audit-log' )
|
1218 |
-
);
|
1219 |
-
die;
|
1220 |
-
}
|
1221 |
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
* @internal
|
1226 |
-
*/
|
1227 |
-
public function AjaxDisableByCode() {
|
1228 |
-
// Die if user does not have permission to disable.
|
1229 |
-
if ( ! $this->settings()->CurrentUserCan( 'edit' ) ) {
|
1230 |
-
echo '<p>' . esc_html__( 'Error: You do not have sufficient permissions to disable this alert.', 'wp-security-audit-log' ) . '</p>';
|
1231 |
-
die();
|
1232 |
-
}
|
1233 |
|
1234 |
-
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1245 |
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
|
|
|
|
|
|
|
|
1253 |
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
|
|
|
|
1257 |
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
1263 |
-
public function render_footer() {
|
1264 |
-
// Register common script.
|
1265 |
-
wp_register_script(
|
1266 |
-
'wsal-common',
|
1267 |
-
$this->GetBaseUrl() . '/js/common.js',
|
1268 |
-
array( 'jquery' ),
|
1269 |
-
filemtime( $this->GetBaseDir() . '/js/common.js' ),
|
1270 |
-
true
|
1271 |
-
);
|
1272 |
|
1273 |
-
|
1274 |
-
|
1275 |
-
|
1276 |
-
|
1277 |
-
|
1278 |
-
|
1279 |
-
|
1280 |
-
'already_installed' => __( 'Already installed', 'wp-security-audit-log' ),
|
1281 |
-
'installed' => __( 'Extension installed', 'wp-security-audit-log' ),
|
1282 |
-
'activated' => __( 'Extension activated', 'wp-security-audit-log' ),
|
1283 |
-
'failed' => __( 'Install failed', 'wp-security-audit-log' ),
|
1284 |
-
);
|
1285 |
|
1286 |
-
|
|
|
|
|
1287 |
|
1288 |
-
|
1289 |
-
|
1290 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1291 |
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
|
1297 |
-
|
1298 |
-
|
1299 |
-
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
-
|
1308 |
-
|
1309 |
-
|
1310 |
-
|
1311 |
-
|
1312 |
-
|
1313 |
-
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
|
1322 |
-
|
1323 |
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
|
1329 |
-
$installation_errors = false;
|
1330 |
-
|
1331 |
-
// Check for minimum PHP version.
|
1332 |
-
if ( version_compare( PHP_VERSION, self::MIN_PHP_VERSION ) < 0 ) {
|
1333 |
-
/* Translators: %s: PHP Version */
|
1334 |
-
$installation_errors = sprintf( esc_html__( 'You are using a version of PHP that is older than %s, which is no longer supported.', 'wp-security-audit-log' ), esc_html( self::MIN_PHP_VERSION ) );
|
1335 |
-
$installation_errors .= '<br />';
|
1336 |
-
$installation_errors .= __( 'Contact us on <a href="mailto:plugins@wpwhitesecurity.com">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you are using.', 'wp-security-audit-log' );
|
1337 |
-
}
|
1338 |
|
1339 |
-
|
1340 |
-
/* Translators: %s: Activity Log for MainWP plugin hyperlink */
|
1341 |
-
$installation_errors = sprintf( __( 'Please install the %s plugin on the MainWP dashboard.', 'wp-security-audit-log' ), '<a href="https://wordpress.org/plugins/activity-log-mainwp/" target="_blank">' . __( 'Activity Log for MainWP', 'wp-security-audit-log' ) . '</a>' ) . ' ';
|
1342 |
-
/* Translators: %s: Getting started guide hyperlink */
|
1343 |
-
$installation_errors .= sprintf( __( 'The WP Activity Log should be installed on the child sites only. Refer to the %s for more information.', 'wp-security-audit-log' ), '<a href="https://wpactivitylog.com/support/kb/gettting-started-activity-log-mainwp-extension/" target="_blank">' . __( 'getting started guide', 'wp-security-audit-log' ) . '</a>' );
|
1344 |
-
}
|
1345 |
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1355 |
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
|
1360 |
-
|
1361 |
-
|
1362 |
|
1363 |
-
|
1364 |
-
|
1365 |
-
$this->load_sessions_extension_db_adapter();
|
1366 |
|
1367 |
-
|
1368 |
-
|
1369 |
-
|
1370 |
-
self::getConnector()->getAdapter( 'Meta' )->create_indexes();
|
1371 |
|
1372 |
-
|
1373 |
-
|
1374 |
self::getConnector()->getAdapter( 'Occurrence' )->create_indexes();
|
1375 |
self::getConnector()->getAdapter( 'Meta' )->create_indexes();
|
1376 |
-
}
|
1377 |
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
|
|
|
|
1381 |
|
1382 |
-
|
1383 |
-
|
1384 |
-
|
1385 |
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
1389 |
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
|
|
|
|
|
|
|
|
|
1394 |
|
1395 |
-
|
1396 |
-
|
1397 |
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
|
1406 |
-
|
1407 |
-
|
1408 |
-
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
|
1414 |
if ( '0.0.0' === $old_version ) {
|
1415 |
// set some initial plugins settings (only the ones that bypass the regular settings retrieval at some
|
@@ -1420,811 +1434,854 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
|
|
1420 |
return;
|
1421 |
}
|
1422 |
|
1423 |
-
|
1424 |
-
|
1425 |
-
|
1426 |
-
|
1427 |
-
|
1428 |
-
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
|
1433 |
-
|
1434 |
-
|
1435 |
-
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
1442 |
-
|
1443 |
-
|
1444 |
-
|
1445 |
-
|
1446 |
-
|
1447 |
-
|
1448 |
-
|
1449 |
-
|
1450 |
-
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
-
|
1459 |
-
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
|
1464 |
-
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
1469 |
-
|
1470 |
-
|
1471 |
-
|
1472 |
-
|
1473 |
-
|
1474 |
-
|
1475 |
-
// remove all settings related to 404 tracking
|
1476 |
-
$not_found_page_related_settings = [
|
1477 |
-
'log-404',
|
1478 |
-
'purge-404-log',
|
1479 |
-
'log-404-referrer',
|
1480 |
-
'log-visitor-404',
|
1481 |
-
'purge-visitor-404-log',
|
1482 |
-
'log-visitor-404-referrer',
|
1483 |
-
'excluded-urls'
|
1484 |
-
];
|
1485 |
-
foreach ( $not_found_page_related_settings as $setting_name ) {
|
1486 |
-
$this->DeleteGlobalSetting( $setting_name );
|
1487 |
-
}
|
1488 |
-
|
1489 |
-
// remove cron job for purging 404 logs
|
1490 |
-
if ( $schedule_time = wp_next_scheduled( 'wsal_log_files_pruning' ) ) {
|
1491 |
-
wp_unschedule_event($schedule_time, 'wsal_log_files_pruning', [] );
|
1492 |
-
}
|
1493 |
-
}
|
1494 |
-
|
1495 |
-
if ( version_compare( $new_version, '4.2.0', '>=' ) ) {
|
1496 |
-
// delete custom logging dir path from the settings
|
1497 |
-
$this->DeleteGlobalSetting( 'custom-logging-dir' );
|
1498 |
-
// delete dev options from the settings
|
1499 |
-
$this->DeleteGlobalSetting( 'dev-options' );
|
1500 |
-
}
|
1501 |
-
}
|
1502 |
-
}
|
1503 |
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
|
|
|
|
|
|
|
|
|
|
1512 |
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
1516 |
-
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
'CurrentUserID' => $entry['UserID'],
|
1528 |
-
);
|
1529 |
-
if ( $entry['UserName'] ) {
|
1530 |
-
$data['Username'] = base64_decode( $entry['UserName'] );
|
1531 |
-
}
|
1532 |
-
$mesg = $events[ $entry['EventID'] ]['EventDescription'];
|
1533 |
-
$date = strtotime( $entry['EventDate'] );
|
1534 |
-
$type = $entry['EventID'];
|
1535 |
-
if ( isset( $mig_types[ $type ] ) ) {
|
1536 |
-
$type = $mig_types[ $type ];
|
1537 |
-
}
|
1538 |
-
// Convert message from '<strong>%s</strong>' to '%Arg1%' format.
|
1539 |
-
$c = 0;
|
1540 |
-
$n = '<strong>%s</strong>';
|
1541 |
-
$l = strlen( $n );
|
1542 |
-
while ( ( $pos = strpos( $mesg, $n ) ) !== false ) {
|
1543 |
-
$mesg = substr_replace( $mesg, '%MigratedArg' . ( $c++ ) . '%', $pos, $l );
|
1544 |
-
}
|
1545 |
-
$data['MigratedMesg'] = $mesg;
|
1546 |
-
// Generate new meta data args.
|
1547 |
-
$temp = unserialize( base64_decode( $entry['EventData'] ) );
|
1548 |
-
foreach ( (array) $temp as $i => $item ) {
|
1549 |
-
$data[ 'MigratedArg' . $i ] = $item;
|
1550 |
-
}
|
1551 |
-
// send event data to logger!
|
1552 |
-
foreach ( $this->alerts->GetLoggers() as $logger ) {
|
1553 |
-
$logger->Log( $type, $data, $date, $entry['BlogId'], true );
|
1554 |
-
}
|
1555 |
-
}
|
1556 |
|
1557 |
-
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
|
1562 |
-
|
1563 |
-
|
1564 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1565 |
|
1566 |
-
|
1567 |
-
|
1568 |
-
|
1569 |
-
|
1570 |
-
|
1571 |
-
|
1572 |
-
|
1573 |
-
|
1574 |
-
}
|
1575 |
|
1576 |
-
|
1577 |
-
|
1578 |
-
|
1579 |
-
|
1580 |
-
|
1581 |
-
|
1582 |
-
|
1583 |
-
|
|
|
1584 |
|
1585 |
-
|
1586 |
-
|
1587 |
-
|
1588 |
-
|
1589 |
-
|
1590 |
-
|
1591 |
-
|
1592 |
-
|
1593 |
-
$plugins = array( 'wp-security-audit-log', 'wp-security-audit-log-premium' );
|
1594 |
-
foreach ( $plugins as $value ) {
|
1595 |
-
$selectr .= '.wp-list-table.plugins tr[data-slug="' . $value . '"], ';
|
1596 |
-
}
|
1597 |
-
?>
|
1598 |
-
<style type="text/css">
|
1599 |
-
<?php echo rtrim( $selectr, ', ' ); ?> { display: none; }
|
1600 |
-
</style>
|
1601 |
-
<?php
|
1602 |
-
}
|
1603 |
-
}
|
1604 |
|
1605 |
-
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
|
1611 |
-
|
1612 |
-
|
1613 |
-
|
1614 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1615 |
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
|
1620 |
-
|
1621 |
-
|
1622 |
-
|
1623 |
-
|
|
|
|
|
1624 |
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
1630 |
-
|
1631 |
-
|
1632 |
-
|
1633 |
-
* @param string $prefix - (Optional) A prefix used before option name.
|
1634 |
-
* @return mixed - Option's value or $default if option not set.
|
1635 |
-
*
|
1636 |
-
* @deprecated 4.1.3 Use WpSecurityAuditLog::GetGlobalSetting instead
|
1637 |
-
* @see WpSecurityAuditLog::GetGlobalSetting()
|
1638 |
-
*/
|
1639 |
-
public function GetGlobalOption( $option, $default = false, $prefix = '' ) {
|
1640 |
-
return $this->GetGlobalSetting( $option, $default );
|
1641 |
-
}
|
1642 |
|
1643 |
-
|
1644 |
-
|
1645 |
-
|
1646 |
-
|
1647 |
-
|
1648 |
-
|
1649 |
-
|
1650 |
-
|
1651 |
-
|
1652 |
-
|
1653 |
-
|
1654 |
-
|
|
|
|
|
|
|
|
|
|
|
1655 |
|
1656 |
-
|
1657 |
-
|
1658 |
-
|
1659 |
-
|
1660 |
-
|
1661 |
-
|
1662 |
-
|
1663 |
-
|
1664 |
-
|
1665 |
-
|
1666 |
-
|
1667 |
-
|
1668 |
-
*/
|
1669 |
-
public function SetGlobalOption( $option, $value, $prefix = '' ) {
|
1670 |
-
$this->SetGlobalSetting( $option, $value );
|
1671 |
-
}
|
1672 |
|
1673 |
-
|
1674 |
-
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
-
|
1679 |
-
|
1680 |
-
|
1681 |
-
|
1682 |
-
|
1683 |
-
|
1684 |
-
|
|
|
|
|
|
|
|
|
1685 |
|
1686 |
-
|
1687 |
-
|
1688 |
-
|
1689 |
-
|
1690 |
-
|
1691 |
-
|
1692 |
-
|
1693 |
-
|
1694 |
-
|
1695 |
-
|
1696 |
-
|
1697 |
-
|
1698 |
-
|
1699 |
-
return $this->options_helper->delete_option( $option );
|
1700 |
-
}
|
1701 |
|
1702 |
-
|
1703 |
-
|
1704 |
-
|
1705 |
-
|
1706 |
-
|
1707 |
-
|
1708 |
-
|
1709 |
-
|
1710 |
-
|
1711 |
-
|
1712 |
-
|
1713 |
-
|
1714 |
-
|
1715 |
-
|
1716 |
-
|
1717 |
-
* @param string $option - Option name.
|
1718 |
-
* @param mixed $value - New value for option.
|
1719 |
-
* @since 4.1.3
|
1720 |
-
*/
|
1721 |
-
public function SetGlobalBooleanSetting( $option, $value ) {
|
1722 |
-
$boolean_value = \WSAL\Helpers\Options::string_to_bool( $value );
|
1723 |
-
$this->SetGlobalSetting( $option, \WSAL\Helpers\Options::bool_to_string( $boolean_value ) );
|
1724 |
-
}
|
1725 |
|
1726 |
-
|
1727 |
-
|
1728 |
-
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
|
1733 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1734 |
|
1735 |
-
|
1736 |
-
|
1737 |
-
|
1738 |
-
|
1739 |
-
|
1740 |
-
|
1741 |
-
|
1742 |
-
|
1743 |
-
$site_id = function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0;
|
1744 |
-
|
1745 |
-
// New occurrence object.
|
1746 |
-
$occurrence = new WSAL_Models_Occurrence();
|
1747 |
-
$alerts = $occurrence->check_alert_1003(
|
1748 |
-
array(
|
1749 |
-
1003,
|
1750 |
-
$site_id,
|
1751 |
-
mktime( 0, 0, 0, $m - 1, $d, $y ) + 1,
|
1752 |
-
mktime( 0, 0, 0, $m, $d, $y ),
|
1753 |
-
)
|
1754 |
-
);
|
1755 |
|
1756 |
-
|
1757 |
-
|
1758 |
-
|
1759 |
-
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
1763 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1764 |
|
1765 |
-
|
1766 |
-
|
1767 |
-
|
1768 |
-
|
1769 |
-
|
1770 |
-
|
1771 |
-
|
1772 |
-
|
1773 |
|
1774 |
-
|
1775 |
-
|
1776 |
-
|
1777 |
-
|
1778 |
-
|
1779 |
-
|
1780 |
-
|
1781 |
-
|
1782 |
-
|
1783 |
-
|
1784 |
|
1785 |
-
|
1786 |
-
|
1787 |
-
|
1788 |
-
|
1789 |
-
|
1790 |
-
|
1791 |
-
|
1792 |
-
|
1793 |
-
|
1794 |
-
|
1795 |
-
|
1796 |
-
|
1797 |
|
1798 |
-
|
1799 |
-
|
1800 |
-
|
1801 |
-
|
1802 |
-
|
1803 |
-
|
1804 |
-
|
1805 |
-
|
1806 |
-
|
1807 |
|
1808 |
-
|
1809 |
-
|
1810 |
-
|
1811 |
-
|
1812 |
-
|
1813 |
-
|
1814 |
-
|
1815 |
-
|
1816 |
-
|
1817 |
|
1818 |
-
|
1819 |
-
|
1820 |
-
|
1821 |
-
|
1822 |
-
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
|
1827 |
-
|
1828 |
-
|
1829 |
-
|
1830 |
-
|
1831 |
-
|
1832 |
-
|
1833 |
-
|
1834 |
-
|
1835 |
|
1836 |
-
|
1837 |
-
|
1838 |
-
|
1839 |
-
|
1840 |
-
|
1841 |
-
|
1842 |
-
|
1843 |
-
|
1844 |
|
1845 |
-
|
1846 |
-
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1851 |
|
1852 |
-
|
1853 |
-
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
1859 |
-
|
1860 |
-
|
1861 |
-
|
1862 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1863 |
|
1864 |
-
|
1865 |
-
|
1866 |
-
|
1867 |
-
* @param int $id - Option ID.
|
1868 |
-
*
|
1869 |
-
* @return string|null
|
1870 |
-
*/
|
1871 |
-
public function GetNotification( $id ) {
|
1872 |
-
$this->include_options_helper();
|
1873 |
-
return $this->options_helper->GetNotification($id);
|
1874 |
-
}
|
1875 |
|
1876 |
-
|
1877 |
-
|
1878 |
-
|
1879 |
-
|
1880 |
-
|
1881 |
-
|
1882 |
-
|
1883 |
-
|
1884 |
-
|
1885 |
-
|
1886 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1887 |
|
1888 |
-
|
1889 |
-
|
1890 |
-
|
1891 |
-
|
1892 |
-
|
1893 |
-
|
1894 |
-
|
1895 |
-
|
1896 |
-
|
1897 |
-
|
1898 |
-
|
1899 |
-
|
1900 |
-
* @see WpSecurityAuditLog::SetGlobalSetting()
|
1901 |
-
*/
|
1902 |
-
public function UpdateGlobalOption( $option, $value ) {
|
1903 |
-
return $this->SetGlobalSetting( $option, $value );
|
1904 |
-
}
|
1905 |
|
1906 |
-
|
1907 |
-
|
1908 |
-
|
1909 |
-
|
1910 |
-
|
1911 |
-
|
1912 |
-
|
1913 |
-
public function render_login_page_message( $message ) {
|
1914 |
-
// Set WSAL Settings.
|
1915 |
-
$wsal_settings = new WSAL_Settings( $this );
|
1916 |
-
|
1917 |
-
// Check if the option is enabled.
|
1918 |
-
$login_message_enabled = $wsal_settings->is_login_page_notification();
|
1919 |
-
if ( $login_message_enabled ) {
|
1920 |
-
// Get login message.
|
1921 |
-
$message = $wsal_settings->get_login_page_notification_text();
|
1922 |
-
|
1923 |
-
// Default message.
|
1924 |
-
if ( ! $message ) {
|
1925 |
-
$message = '<p class="message">' . wp_kses( __( 'For security and auditing purposes, a record of all of your logged-in actions and changes within the WordPress dashboard will be recorded in an activity log with the <a href="https://wpactivitylog.com/" target="_blank">WP Activity Log plugin</a>. The audit log also includes the IP address where you accessed this site from.', 'wp-security-audit-log' ), $this->allowed_html_tags ) . '</p>';
|
1926 |
-
} else {
|
1927 |
-
$message = '<p class="message">' . $message . '</p>';
|
1928 |
-
}
|
1929 |
-
}
|
1930 |
|
1931 |
-
|
1932 |
-
|
1933 |
-
}
|
1934 |
|
1935 |
-
|
1936 |
-
|
1937 |
-
|
1938 |
-
|
1939 |
-
|
1940 |
-
|
1941 |
-
|
1942 |
-
|
1943 |
-
|
1944 |
-
|
1945 |
-
|
1946 |
-
$schedules['fortyfiveminutes'] = array(
|
1947 |
-
'interval' => 2700,
|
1948 |
-
'display' => __( 'Every 45 minutes', 'wp-security-audit-log' ),
|
1949 |
-
);
|
1950 |
-
$schedules['thirtyminutes'] = array(
|
1951 |
-
'interval' => 1800,
|
1952 |
-
'display' => __( 'Every 30 minutes', 'wp-security-audit-log' ),
|
1953 |
-
);
|
1954 |
-
$schedules['fifteenminutes'] = array(
|
1955 |
-
'interval' => 900,
|
1956 |
-
'display' => __( 'Every 15 minutes', 'wp-security-audit-log' ),
|
1957 |
-
);
|
1958 |
-
$schedules['tenminutes'] = array(
|
1959 |
-
'interval' => 600,
|
1960 |
-
'display' => __( 'Every 10 minutes', 'wp-security-audit-log' ),
|
1961 |
-
);
|
1962 |
-
$schedules['oneminute'] = array(
|
1963 |
-
'interval' => 60,
|
1964 |
-
'display' => __( 'Every 1 minute', 'wp-security-audit-log' ),
|
1965 |
-
);
|
1966 |
-
return $schedules;
|
1967 |
-
}
|
1968 |
|
1969 |
-
|
1970 |
-
|
1971 |
-
|
1972 |
-
|
1973 |
-
|
1974 |
-
|
1975 |
-
public function wsal_deprecate( $method, $version ) {
|
1976 |
-
if ( WP_DEBUG ) {
|
1977 |
-
/* translators: 1. Deprecated method name 2. Version since deprecated */
|
1978 |
-
trigger_error( sprintf( esc_html__( 'Method %1$s is deprecated since version %2$s!', 'wp-security-audit-log' ), $method, $version ) );
|
1979 |
-
}
|
1980 |
-
}
|
1981 |
|
1982 |
-
|
1983 |
-
|
1984 |
-
|
1985 |
-
|
1986 |
-
|
1987 |
-
|
1988 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1989 |
|
1990 |
-
|
1991 |
-
|
|
|
1992 |
|
1993 |
-
|
1994 |
-
|
1995 |
-
|
1996 |
-
|
1997 |
-
|
1998 |
-
|
1999 |
-
|
2000 |
-
|
2001 |
-
|
2002 |
-
|
2003 |
-
|
2004 |
-
|
2005 |
-
|
2006 |
-
|
2007 |
-
if ( $has_active_valid_license !== $is_fs_premium ) {
|
2008 |
-
update_option( $is_fs_premium_opt, $has_active_valid_license );
|
2009 |
-
}
|
2010 |
-
}
|
2011 |
-
}
|
2012 |
|
2013 |
-
|
2014 |
-
|
2015 |
-
|
2016 |
-
|
2017 |
-
|
2018 |
-
|
2019 |
-
|
2020 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021 |
|
2022 |
-
|
2023 |
-
|
2024 |
-
|
2025 |
-
|
2026 |
-
|
2027 |
-
|
2028 |
-
|
2029 |
-
|
2030 |
-
|
2031 |
-
|
2032 |
-
|
2033 |
-
|
2034 |
-
|
2035 |
-
}
|
2036 |
-
}
|
2037 |
-
}
|
2038 |
|
2039 |
-
|
2040 |
-
|
2041 |
-
|
2042 |
-
|
2043 |
-
|
2044 |
-
*/
|
2045 |
-
public function wsal_hide_plugin( $plugins ) {
|
2046 |
-
global $pagenow;
|
2047 |
-
|
2048 |
-
// Check current page, bail early if this isn't the plugins page.
|
2049 |
-
if ( 'plugins.php' !== $pagenow ) {
|
2050 |
-
return $plugins;
|
2051 |
-
}
|
2052 |
|
2053 |
-
|
2054 |
-
|
2055 |
-
// Remove WSAL plugin from plugin list page.
|
2056 |
-
unset( $plugins[ WSAL_BASE_NAME ] );
|
2057 |
-
}
|
2058 |
|
2059 |
-
|
2060 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2061 |
|
2062 |
-
|
2063 |
-
|
2064 |
-
|
2065 |
-
|
2066 |
-
|
2067 |
-
|
2068 |
-
|
2069 |
-
|
2070 |
-
|
2071 |
-
|
2072 |
-
|
2073 |
-
|
2074 |
-
|
2075 |
-
|
|
|
|
|
2076 |
|
2077 |
-
|
2078 |
-
|
2079 |
-
|
2080 |
-
|
2081 |
-
|
2082 |
-
|
2083 |
-
|
2084 |
-
|
2085 |
-
|
2086 |
-
|
2087 |
-
|
2088 |
-
|
2089 |
-
|
2090 |
-
|
2091 |
-
return false;
|
2092 |
-
}
|
2093 |
|
2094 |
-
|
2095 |
-
|
2096 |
-
$matches = explode( '_', $class );
|
2097 |
-
if ( count( $matches ) > 2 ) {
|
2098 |
-
// remove first (WSAL) and last one (actual file name)
|
2099 |
-
array_shift( $matches );
|
2100 |
-
array_pop( $matches );
|
2101 |
-
$subfolders = $matches;
|
2102 |
-
|
2103 |
-
// workaround for MySQL adapter classes
|
2104 |
-
if ( count( $subfolders ) == 2 && $subfolders[0] === 'Adapters' && $subfolders[1] === 'MySQL' ) {
|
2105 |
-
$class .= 'Adapter';
|
2106 |
-
}
|
2107 |
-
}
|
2108 |
|
2109 |
-
|
2110 |
-
|
|
|
|
|
|
|
2111 |
|
2112 |
-
|
2113 |
-
|
2114 |
-
$path_to_file = $base_path . $partial_path_to_file;
|
2115 |
-
if ( file_exists( $path_to_file ) ) {
|
2116 |
-
require_once $path_to_file;
|
2117 |
|
2118 |
-
|
2119 |
-
|
|
|
2120 |
|
2121 |
-
|
2122 |
-
|
2123 |
-
|
|
|
|
|
|
|
2124 |
|
2125 |
-
|
2126 |
-
|
2127 |
-
|
2128 |
-
if ( ! is_dir( $extension_folder ) ) {
|
2129 |
-
continue;
|
2130 |
-
}
|
2131 |
|
2132 |
-
|
2133 |
-
|
2134 |
-
|
|
|
|
|
2135 |
|
2136 |
-
|
2137 |
-
|
2138 |
-
|
2139 |
-
|
2140 |
-
|
2141 |
|
2142 |
-
|
2143 |
-
|
2144 |
-
|
2145 |
-
|
2146 |
-
|
2147 |
-
|
2148 |
-
// only meant for 404 pages, but may run before is_404 can be used
|
2149 |
-
$is_404 = did_action( 'wp' ) ? is_404() : true;
|
2150 |
-
if ( ! $is_404 ) {
|
2151 |
-
return false;
|
2152 |
-
}
|
2153 |
-
|
2154 |
-
// this is called very early so we need to load some settings manually
|
2155 |
-
spl_autoload_register( array( __CLASS__, 'autoloader' ) );
|
2156 |
-
require_once 'classes/Helpers/Options.php';
|
2157 |
-
|
2158 |
-
/*
|
2159 |
-
* We assume settings have already been migrated (in version 4.1.3) to WordPress options table. We might
|
2160 |
-
* miss some 404 events until the plugin upgrade runs, but that is a very rare edge case. The same applies
|
2161 |
-
* to loading of 'admin-blocking-plugins-support' option further down.
|
2162 |
-
*
|
2163 |
-
* We do not need to worry about the missed 404s after version 4.1.5 as they were completely removed.
|
2164 |
-
*/
|
2165 |
-
$options_helper = new \WSAL\Helpers\Options( self::OPTIONS_PREFIX );
|
2166 |
-
$is_stealth_mode = $options_helper->get_option_value('mwp-child-stealth-mode', 'no');
|
2167 |
-
|
2168 |
-
if ('yes' !== $is_stealth_mode ) {
|
2169 |
-
// only intended if MainWP stealth mode is active
|
2170 |
-
return false;
|
2171 |
-
}
|
2172 |
|
2173 |
-
|
2174 |
-
|
2175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2176 |
|
2177 |
-
|
2178 |
-
|
2179 |
-
|
2180 |
-
|
2181 |
-
|
2182 |
-
|
2183 |
-
|
2184 |
-
|
2185 |
-
|
2186 |
-
|
2187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2188 |
}
|
2189 |
}
|
2190 |
|
2191 |
-
|
2192 |
-
|
2193 |
-
|
2194 |
-
|
2195 |
-
|
2196 |
-
|
2197 |
-
|
2198 |
-
|
2199 |
-
|
2200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2201 |
|
2202 |
-
/**
|
2203 |
-
* Dequeue JS files which have been added by other plugin to all admin pages and cause conflicts.
|
2204 |
-
* See https://github.com/WPWhiteSecurity/wp-security-audit-log-premium/issues/1246 and
|
2205 |
-
* https://trello.com/c/pWrQn1Be/742-koenhavelaertsflintgrpcom-reports-ui-does-not-load-with-plugin-installed
|
2206 |
-
*
|
2207 |
-
* @since 4.1.5
|
2208 |
-
*/
|
2209 |
-
public function dequeue_conflicting_scripts() {
|
2210 |
-
global $current_screen;
|
2211 |
-
// Only dequeue on our admin pages.
|
2212 |
-
if ( isset( $current_screen->base ) && strpos( $current_screen->base, 'wp-activity-log' ) === 0 ) {
|
2213 |
-
wp_deregister_script( 'dateformat' );
|
2214 |
-
}
|
2215 |
}
|
2216 |
-
}
|
2217 |
|
2218 |
-
|
2219 |
-
|
2220 |
|
2221 |
-
|
2222 |
-
|
2223 |
|
2224 |
-
|
2225 |
-
|
2226 |
-
|
2227 |
-
|
|
|
|
|
2228 |
} else {
|
2229 |
wsal_freemius()->set_basename( true, __FILE__ );
|
2230 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
* Plugin URI: http://wpactivitylog.com/
|
5 |
* Description: Identify WordPress security issues before they become a problem. Keep track of everything happening on your WordPress including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Activity Log generates a security alert for everything that happens on your WordPress blogs and websites. Use the Activity log viewer included in the plugin to see all the security alerts.
|
6 |
* Author: WP White Security
|
7 |
+
* Version: 4.3.1
|
8 |
* Text Domain: wp-security-audit-log
|
9 |
* Author URI: https://www.wpwhitesecurity.com/
|
10 |
* License: GPL2
|
17 |
|
18 |
/*
|
19 |
WP Activity Log
|
20 |
+
Copyright(c) 2021 WP White Security (email : info@wpwhitesecurity.com)
|
21 |
|
22 |
This program is free software; you can redistribute it and/or modify
|
23 |
it under the terms of the GNU General Public License, version 2, as
|
35 |
|
36 |
if ( ! function_exists( 'wsal_freemius' ) ) {
|
37 |
|
38 |
+
if ( ! class_exists( 'WpSecurityAuditLog' ) ) {
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
+
/**
|
41 |
+
* WSAL Main Class.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
*
|
43 |
+
* @package Wsal
|
44 |
+
*/
|
45 |
+
class WpSecurityAuditLog {
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Plugin version.
|
49 |
+
*
|
50 |
+
* @var string
|
51 |
+
*/
|
52 |
+
public $version = '4.3.1';
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Plugin constants.
|
56 |
+
*
|
57 |
+
* @var string
|
58 |
+
*/
|
59 |
+
const PLG_CLS_PRFX = 'WSAL_';
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Minimal PHP version.
|
63 |
+
*
|
64 |
+
* @var string
|
65 |
+
*/
|
66 |
+
const MIN_PHP_VERSION = '7.0.0';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* New option name prefix.
|
70 |
+
*
|
71 |
+
* @var string
|
72 |
+
*/
|
73 |
+
const OPTIONS_PREFIX = 'wsal_';
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Views supervisor.
|
77 |
+
*
|
78 |
+
* @var WSAL_ViewManager
|
79 |
+
*/
|
80 |
+
public $views;
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Logger supervisor.
|
84 |
+
*
|
85 |
+
* @var WSAL_AlertManager
|
86 |
+
*/
|
87 |
+
public $alerts;
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Sensors supervisor.
|
91 |
+
*
|
92 |
+
* @var WSAL_SensorManager
|
93 |
+
*/
|
94 |
+
public $sensors;
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Settings manager.
|
98 |
+
*
|
99 |
+
* @var WSAL_Settings
|
100 |
+
*/
|
101 |
+
protected $_settings;
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Class loading manager.
|
105 |
+
*
|
106 |
+
* @var WSAL_Autoloader
|
107 |
+
*/
|
108 |
+
public $autoloader;
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Constants manager.
|
112 |
+
*
|
113 |
+
* @var WSAL_ConstantManager
|
114 |
+
*/
|
115 |
+
public $constants;
|
116 |
+
|
117 |
+
/**
|
118 |
+
* WP Options table options handler.
|
119 |
+
*
|
120 |
+
* @var WSAL\Helpers\Options;
|
121 |
+
*/
|
122 |
+
public $options_helper;
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Contains a list of cleanup callbacks.
|
126 |
+
*
|
127 |
+
* @var callable[]
|
128 |
+
*/
|
129 |
+
protected $_cleanup_hooks = array();
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Add-ons Manager.
|
133 |
+
*
|
134 |
+
* @var WSAL_Extension_Manager
|
135 |
+
*/
|
136 |
+
public $extensions;
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Allowed HTML Tags for strings.
|
140 |
+
*
|
141 |
+
* @var array
|
142 |
+
*/
|
143 |
+
public $allowed_html_tags = array();
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Standard singleton pattern.
|
147 |
+
* WARNING! To ensure the system always works as expected, AVOID using this method.
|
148 |
+
* Instead, make use of the plugin instance provided by 'wsal_init' action.
|
149 |
+
*
|
150 |
+
* @return WpSecurityAuditLog Returns the current plugin instance.
|
151 |
+
*/
|
152 |
+
public static function GetInstance() {
|
153 |
+
static $instance = null;
|
154 |
+
if ( ! $instance ) {
|
155 |
+
$instance = new self();
|
156 |
+
}
|
157 |
+
return $instance;
|
158 |
+
}
|
159 |
|
160 |
+
/**
|
161 |
+
* Initialize plugin.
|
162 |
+
*/
|
163 |
+
public function __construct() {
|
164 |
+
$bootstrap_hook = [ 'plugins_loaded', 9 ];
|
165 |
+
|
166 |
+
// plugin should be initialised later in the WordPress bootstrap process to minimize overhead
|
167 |
+
if ( self::is_frontend() ) {
|
168 |
+
// to track sessions on frontend logins we need to attach the
|
169 |
+
// the tracker and all the interfaces and classes it depends on.
|
170 |
+
add_action( $bootstrap_hook[0], array( $this, 'maybe_add_sessions_trackers_early' ), $bootstrap_hook[1] );
|
171 |
+
$bootstrap_hook = [ 'wp_loaded', 0 ];
|
172 |
+
}
|
173 |
|
174 |
+
add_action( $bootstrap_hook[0], array( $this, 'setup' ), $bootstrap_hook[1] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
|
176 |
+
// Register plugin specific activation hook.
|
177 |
+
register_activation_hook( __FILE__, array( $this, 'Install' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
|
179 |
+
// Plugin Deactivation Actions.
|
180 |
+
register_deactivation_hook( __FILE__, array( $this, 'deactivate_actions' ) );
|
181 |
|
182 |
+
// Add custom schedules for WSAL early otherwise they won't work.
|
183 |
+
add_filter( 'cron_schedules', array( $this, 'recurring_schedules' ) );
|
184 |
|
185 |
+
// make the options helper class available.
|
186 |
+
$this->include_options_helper();
|
187 |
+
}
|
188 |
|
189 |
+
/**
|
190 |
+
* For frontend loading only - adds all dependency classes, interfaces,
|
191 |
+
* and helpers from sessions tracking and hooks the tracking methods in
|
192 |
+
* when frontend login sensors are enabled.
|
193 |
+
*
|
194 |
+
* @method add_sessions_trackers
|
195 |
+
* @since 4.x.x
|
196 |
+
*/
|
197 |
+
public function maybe_add_sessions_trackers_early() {
|
198 |
+
|
199 |
+
/**
|
200 |
+
* If the frontend login tracking is not enabled don't add anything.
|
201 |
+
*/
|
202 |
+
$frontend_events = WSAL_Settings::get_frontend_events();
|
203 |
+
if ( empty( $frontend_events['login'] ) ) {
|
204 |
+
return;
|
205 |
+
}
|
206 |
|
207 |
+
// To track sessions from the frontend we need to load the session
|
208 |
+
// tracking class and init it's hooks plus make available all of the
|
209 |
+
// supporting classes it needs to operate.
|
210 |
+
$base_path = plugin_dir_path( __FILE__ );
|
211 |
+
if ( file_exists( $base_path . 'extensions/user-sessions/user-sessions.php' ) ) {
|
212 |
+
spl_autoload_register( array( __CLASS__, 'autoloader' ) );
|
213 |
+
|
214 |
+
// classes below don't follow any naming convention handled by the autoloader
|
215 |
+
require_once $base_path . 'extensions/user-sessions/classes/Adapters/SessionInterface.php';
|
216 |
+
require_once $base_path . 'extensions/user-sessions/classes/Adapters/SessionAdapter.php';
|
217 |
+
require_once $base_path . 'extensions/user-sessions/classes/Models/Session.php';
|
218 |
+
require_once $base_path . 'extensions/user-sessions/classes/Helpers.php';
|
219 |
+
require_once $base_path . 'extensions/user-sessions/user-sessions.php';
|
220 |
+
|
221 |
+
$session_tracking = new WSAL_Sensors_UserSessionsTracking( $this );
|
222 |
+
$session_tracking->init();
|
223 |
+
}
|
224 |
+
}
|
225 |
|
226 |
+
/**
|
227 |
+
* PHP magic __get function to get class properties.
|
228 |
+
*
|
229 |
+
* @param string $property - Class property.
|
230 |
+
* @return object
|
231 |
+
*/
|
232 |
+
public function __get( $property ) {
|
233 |
+
if ( 'settings' === $property ) {
|
234 |
+
return $this->settings();
|
235 |
+
}
|
236 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
237 |
|
238 |
+
/**
|
239 |
+
* Return the settings object, lazily instantiating, if needed.
|
240 |
+
*
|
241 |
+
* @return WSAL_Settings
|
242 |
+
*/
|
243 |
+
public function settings() {
|
244 |
+
if ( ! isset( $this->_settings ) ) {
|
245 |
+
$this->_settings = new WSAL_Settings( $this );
|
246 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247 |
|
248 |
+
return $this->_settings;
|
249 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
|
251 |
+
/**
|
252 |
+
* Gets and instantiates the options helper.
|
253 |
+
*
|
254 |
+
* @method include_options_helper
|
255 |
+
* @since 4.0.3
|
256 |
+
* @return \WSAL\Helpers\Options
|
257 |
+
*/
|
258 |
+
public function include_options_helper() {
|
259 |
+
require_once 'classes/Helpers/Options.php';
|
260 |
+
if ( ! isset( $this->options_helper ) ) {
|
261 |
+
$this->options_helper = new \WSAL\Helpers\Options( self::OPTIONS_PREFIX );
|
262 |
+
}
|
263 |
+
return $this->options_helper;
|
264 |
+
}
|
265 |
|
266 |
+
/**
|
267 |
+
* Whether the current request is a REST API request.
|
268 |
+
*
|
269 |
+
* @return bool
|
270 |
+
*/
|
271 |
+
public static function is_rest_api() {
|
272 |
+
$is_rest = false;
|
273 |
+
|
274 |
+
if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
|
275 |
+
$rest_url_path = trim( parse_url( home_url( '/wp-json/' ), PHP_URL_PATH ), '/' );
|
276 |
+
$request_path = trim( $_SERVER['REQUEST_URI'], '/' );
|
277 |
+
|
278 |
+
/*
|
279 |
+
* If we have both a url and a request patch check if this is
|
280 |
+
* a rest request.
|
281 |
+
*
|
282 |
+
* @since 4.0..3
|
283 |
+
*/
|
284 |
+
if ( $rest_url_path && $request_path ) {
|
285 |
+
$is_rest = ( strpos( $request_path, $rest_url_path ) === 0 ) || isset( $_GET['rest_route'] );
|
286 |
+
}
|
287 |
+
}
|
288 |
|
289 |
+
return $is_rest;
|
290 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
|
292 |
+
/**
|
293 |
+
* Whether the current request is a frontend request.
|
294 |
+
*
|
295 |
+
* @return bool
|
296 |
+
*/
|
297 |
+
public static function is_frontend() {
|
298 |
+
return ! is_admin()
|
299 |
+
&& ! self::is_login_screen()
|
300 |
+
&& ( ! defined( 'WP_CLI' ) || ! WP_CLI )
|
301 |
+
&& ( ! defined( 'DOING_CRON' ) || ! DOING_CRON )
|
302 |
+
&& ! self::is_rest_api()
|
303 |
+
&& ! self::is_admin_blocking_plugins_support_enabled();
|
304 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
305 |
|
306 |
+
/**
|
307 |
+
* Decides if the plugin should run, sets up constants, includes, inits hooks, etc.
|
308 |
+
*
|
309 |
+
* @return bool
|
310 |
+
*/
|
311 |
+
public function setup() {
|
312 |
+
if ( ! $this->should_load() ) {
|
313 |
+
return;
|
314 |
+
}
|
315 |
|
316 |
+
$this->define_constants();
|
317 |
+
$this->set_allowed_html_tags();
|
318 |
+
$this->includes();
|
319 |
+
$this->init_hooks();
|
320 |
+
$this->load_defaults();
|
321 |
+
$this->load_wsal();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
|
323 |
+
if ( did_action( 'init' ) ) {
|
324 |
+
$this->init();
|
325 |
+
}
|
326 |
+
}
|
|
|
|
|
|
|
|
|
|
|
327 |
|
328 |
+
/**
|
329 |
+
* Returns whether the plugin should load.
|
330 |
+
*
|
331 |
+
* @return bool Whether the plugin should load.
|
332 |
+
*/
|
333 |
+
public function should_load() {
|
334 |
+
// Always load on the admin.
|
335 |
+
if ( is_admin() ) {
|
336 |
+
return true;
|
337 |
+
}
|
338 |
|
339 |
+
// check conditions for frontend
|
340 |
+
if ( self::is_frontend() && ! is_user_logged_in() && ! self::should_load_frontend() ) {
|
341 |
+
// user isn't logged in, and we aren't logging visitor events on front-end
|
342 |
+
return false;
|
343 |
+
}
|
344 |
|
345 |
+
// other contexts/scenarios
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
|
347 |
+
// If this is a rest API request and the user is not logged in, bail.
|
348 |
+
if ( self::is_rest_api() && ! is_user_logged_in() ) {
|
349 |
+
return false;
|
350 |
+
}
|
|
|
351 |
|
352 |
+
return true;
|
353 |
+
}
|
354 |
|
355 |
+
/**
|
356 |
+
* Checks to see if WSAL should be loaded for register, login, and comment events.
|
357 |
+
*
|
358 |
+
* @return bool
|
359 |
+
*/
|
360 |
+
public static function should_load_frontend() {
|
361 |
+
$frontend_events = WSAL_Settings::get_frontend_events();
|
362 |
+
$should_load = ! empty( $frontend_events['register'] ) || ! empty( $frontend_events['login'] ) || ! empty( $frontend_events['woocommerce'] );
|
363 |
+
|
364 |
+
// Allow extensions to manually allow a sensor to load.
|
365 |
+
return apply_filters( 'wsal_load_on_frontend', $should_load, $frontend_events );
|
366 |
+
}
|
367 |
+
|
368 |
+
/**
|
369 |
+
* Include Plugin Files.
|
370 |
+
*
|
371 |
+
* @since 3.3
|
372 |
+
*/
|
373 |
+
public function includes() {
|
374 |
+
require_once 'classes/Models/ActiveRecord.php';
|
375 |
+
|
376 |
+
if ( is_admin() ) {
|
377 |
+
// Models.
|
378 |
+
require_once 'classes/Models/Meta.php';
|
379 |
+
require_once 'classes/Models/Occurrence.php';
|
380 |
+
require_once 'classes/Models/Query.php';
|
381 |
+
require_once 'classes/Models/OccurrenceQuery.php';
|
382 |
+
require_once 'classes/Models/TmpUser.php';
|
383 |
+
|
384 |
+
// Data helper.
|
385 |
+
require_once 'classes/Helpers/DataHelper.php';
|
386 |
+
|
387 |
+
// Managers.
|
388 |
+
require_once 'classes/ViewManager.php';
|
389 |
+
require_once 'classes/WidgetManager.php';
|
390 |
+
|
391 |
+
// Views.
|
392 |
+
require_once 'classes/AbstractView.php';
|
393 |
+
require_once 'classes/ExtensionPlaceholderView.php';
|
394 |
+
require_once 'classes/AuditLogListView.php';
|
395 |
+
require_once 'classes/AuditLogGridView.php';
|
396 |
+
require_once 'classes/Views/AuditLog.php';
|
397 |
+
require_once 'classes/Views/EmailNotifications.php';
|
398 |
+
require_once 'classes/Views/ExternalDB.php';
|
399 |
+
require_once 'classes/Views/Help.php';
|
400 |
+
require_once 'classes/Views/LogInUsers.php';
|
401 |
+
require_once 'classes/Views/Reports.php';
|
402 |
+
require_once 'classes/Views/Search.php';
|
403 |
+
require_once 'classes/Views/Settings.php';
|
404 |
+
require_once 'classes/Views/ToggleAlerts.php';
|
405 |
+
|
406 |
+
// Utilities.
|
407 |
+
require_once 'classes/Utilities/PluginInstallAndActivate.php';
|
408 |
+
require_once 'classes/Utilities/PluginInstallerAction.php';
|
409 |
+
require_once 'classes/Utilities/RequestUtils.php';
|
410 |
+
|
411 |
+
// Third party extensions.
|
412 |
+
require_once 'classes/ThirdPartyExtensions/AbstractExtension.php';
|
413 |
+
require_once 'classes/ThirdPartyExtensions/YoastSeoExtension.php';
|
414 |
+
require_once 'classes/ThirdPartyExtensions/BBPressExtension.php';
|
415 |
+
require_once 'classes/ThirdPartyExtensions/WPFormsExtension.php';
|
416 |
+
require_once 'classes/ThirdPartyExtensions/WooCommerceExtension.php';
|
417 |
+
require_once 'classes/ThirdPartyExtensions/GravityFormsExtension.php';
|
418 |
+
}
|
419 |
|
420 |
+
// Connectors.
|
421 |
+
require_once 'classes/Connector/AbstractConnector.php';
|
422 |
+
require_once 'classes/Connector/ConnectorInterface.php';
|
423 |
+
require_once 'classes/Connector/ConnectorFactory.php';
|
424 |
+
require_once 'classes/Connector/MySQLDB.php';
|
425 |
+
|
426 |
+
// Adapters.
|
427 |
+
require_once 'classes/Adapters/ActiveRecordInterface.php';
|
428 |
+
require_once 'classes/Adapters/MetaInterface.php';
|
429 |
+
require_once 'classes/Adapters/OccurrenceInterface.php';
|
430 |
+
require_once 'classes/Adapters/QueryInterface.php';
|
431 |
+
|
432 |
+
// Utilities.
|
433 |
+
require_once 'classes/Utilities/UserUtils.php';
|
434 |
+
|
435 |
+
// Third party extensions with public sensors.
|
436 |
+
require_once 'classes/ThirdPartyExtensions/AbstractExtension.php';
|
437 |
+
require_once 'classes/ThirdPartyExtensions/WooCommerceExtension.php';
|
438 |
+
|
439 |
+
// Only include these if we are in multisite environment.
|
440 |
+
if ( $this->isMultisite() ) {
|
441 |
+
require_once 'classes/Multisite/NetworkWide/TrackerInterface.php';
|
442 |
+
require_once 'classes/Multisite/NetworkWide/AbstractTracker.php';
|
443 |
+
require_once 'classes/Multisite/NetworkWide/CPTsTracker.php';
|
444 |
+
// setup the CPT tracker across the network.
|
445 |
+
$cpts_tracker = new \WSAL\Multisite\NetworkWide\CPTsTracker( $this );
|
446 |
+
$cpts_tracker->setup();
|
447 |
+
}
|
448 |
|
449 |
+
// Load autoloader and register base paths.
|
450 |
+
require_once 'classes/Autoloader.php';
|
451 |
+
$this->autoloader = new WSAL_Autoloader( $this );
|
452 |
+
$this->autoloader->Register( self::PLG_CLS_PRFX, $this->GetBaseDir() . 'classes' . DIRECTORY_SEPARATOR );
|
453 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
454 |
|
455 |
+
/**
|
456 |
+
* Initialize Plugin Hooks.
|
457 |
+
*
|
458 |
+
* @since 3.3
|
459 |
+
*/
|
460 |
+
public function init_hooks() {
|
461 |
+
add_action( 'init', array( $this, 'init' ), 5 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
462 |
|
463 |
+
// Listen for cleanup event.
|
464 |
+
add_action( 'wsal_cleanup', array( $this, 'CleanUp' ) );
|
|
|
|
|
|
|
465 |
|
466 |
+
add_action( 'shutdown', array( $this, 'close_external_connection' ), 999 );
|
|
|
|
|
|
|
|
|
|
|
|
|
467 |
|
468 |
+
// Render wsal footer.
|
469 |
+
add_action( 'admin_footer', array( $this, 'render_footer' ) );
|
470 |
|
471 |
+
// Plugin redirect on activation.
|
472 |
+
if ( current_user_can( 'manage_options' ) ) {
|
473 |
+
add_action( 'admin_init', array( $this, 'wsal_plugin_redirect' ) );
|
474 |
+
}
|
475 |
|
476 |
+
// Handle admin Disable Custom Field.
|
477 |
+
add_action( 'wp_ajax_AjaxDisableCustomField', array( $this, 'AjaxDisableCustomField' ) );
|
|
|
|
|
478 |
|
479 |
+
// Handle admin Disable Alerts.
|
480 |
+
add_action( 'wp_ajax_AjaxDisableByCode', array( $this, 'AjaxDisableByCode' ) );
|
481 |
|
482 |
+
// Render Login Page Notification.
|
483 |
+
add_filter( 'login_message', array( $this, 'render_login_page_message' ), 10, 1 );
|
484 |
|
485 |
+
// Cron job to delete alert 1003 for the last day.
|
486 |
+
add_action( 'wsal_delete_logins', array( $this, 'delete_failed_logins' ) );
|
487 |
+
if ( ! wp_next_scheduled( 'wsal_delete_logins' ) ) {
|
488 |
+
wp_schedule_event( time(), 'daily', 'wsal_delete_logins' );
|
489 |
+
}
|
490 |
|
491 |
+
add_filter( 'mainwp_child_extra_execution', array( $this, 'mainwp_dashboard_callback' ), 10, 2 );
|
|
|
|
|
|
|
|
|
492 |
|
493 |
+
add_action( 'admin_init', array( $this, 'maybe_sync_premium_freemius' ) );
|
494 |
|
495 |
+
add_action( 'wsal_freemius_loaded', array( $this, 'adjust_freemius_strings' ) );
|
496 |
|
497 |
+
$this->init_freemius();
|
498 |
|
499 |
+
// Extensions which are only admin based.
|
500 |
+
if ( is_admin() ) {
|
501 |
+
$plugin_installer_ajax = new WSAL_PluginInstallerAction();
|
502 |
+
$plugin_installer_ajax->register();
|
503 |
|
504 |
+
$yoast_seo_addon = new WSAL_YoastSeoExtension;
|
505 |
+
$bbpress_addon = new WSAL_BBPressExtension;
|
506 |
+
$wpforms_addon = new WSAL_WPFormsExtension;
|
507 |
+
$gravityforms_addon = new WSAL_GravityFormsExtension;
|
508 |
+
}
|
509 |
|
510 |
+
// Extensions which are both admin and frontend based.
|
511 |
+
$woocommerce_addon = new WSAL_WooCommerceExtension;
|
|
|
|
|
|
|
512 |
|
513 |
+
// Dequeue conflicting scripts.
|
514 |
+
add_action( 'wp_print_scripts', array( $this, 'dequeue_conflicting_scripts' ) );
|
515 |
+
}
|
516 |
|
517 |
+
/**
|
518 |
+
* Whether the current page is the login screen.
|
519 |
+
*
|
520 |
+
* @return bool
|
521 |
+
*/
|
522 |
+
public static function is_login_screen() {
|
523 |
+
return parse_url( site_url( 'wp-login.php' ), PHP_URL_PATH ) === parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
|
524 |
+
}
|
525 |
|
526 |
+
/**
|
527 |
+
* Load Freemius SDK.
|
528 |
+
*/
|
529 |
+
public static function load_freemius() {
|
530 |
+
require_once plugin_dir_path( __FILE__ ) . '/sdk/wsal-freemius.php';
|
531 |
+
}
|
|
|
|
|
532 |
|
533 |
+
/**
|
534 |
+
* Determines whether a plugin is active.
|
535 |
+
*
|
536 |
+
* @uses is_plugin_active() Uses this WP core function after making sure that this function is available.
|
537 |
+
* @param string $plugin Path to the main plugin file from plugins directory.
|
538 |
+
* @return bool True, if in the active plugins list. False, not in the list.
|
539 |
+
*/
|
540 |
+
public static function is_plugin_active( $plugin ) {
|
541 |
+
if ( ! function_exists( 'is_plugin_active' ) ) {
|
542 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
543 |
+
}
|
544 |
|
545 |
+
if ( ! class_exists( 'WSAL_PluginInstallAndActivate' ) ) {
|
546 |
+
require_once 'classes/Utilities/PluginInstallAndActivate.php';
|
547 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
548 |
|
549 |
+
// Additional checks for our 3rd party extensions.
|
550 |
+
if ( class_exists( 'WSAL_PluginInstallAndActivate' ) ) {
|
551 |
+
$our_plugins = array_column( WSAL_PluginInstallAndActivate::get_installable_plugins(), 'plugin_basename' );
|
552 |
+
// Check if we are dealing with one of our extensions.
|
553 |
+
if ( in_array( basename( $plugin ), $our_plugins, true ) ) {
|
554 |
+
// This IS one of our extensions, so lets check a little deeper as folder
|
555 |
+
// name can differ.
|
556 |
+
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
557 |
+
$current_plugins = array_keys( get_site_option( 'active_sitewide_plugins', [] ) );
|
558 |
+
} else {
|
559 |
+
$current_plugins = get_option( 'active_plugins' );
|
560 |
+
}
|
561 |
+
// Loop through active plugins to compare file names.
|
562 |
+
foreach ( $current_plugins as $active_plugin ) {
|
563 |
+
if ( basename( $plugin ) == basename( $active_plugin ) ) {
|
564 |
+
// Plugin basename is in active plugins, so return true.
|
565 |
+
return true;
|
566 |
+
}
|
567 |
+
}
|
568 |
+
}
|
569 |
+
}
|
570 |
|
571 |
+
return is_plugin_active( $plugin );
|
572 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
573 |
|
574 |
+
/**
|
575 |
+
* Check if BBPress plugin is active or not.
|
576 |
+
*
|
577 |
+
* @return boolean
|
578 |
+
*/
|
579 |
+
public static function is_bbpress_active() {
|
580 |
+
return ( self::is_plugin_active( 'bbpress/bbpress.php' )
|
581 |
+
&& ( self::is_plugin_active( 'wsal-bbpress.php' ) )
|
582 |
+
);
|
583 |
+
}
|
584 |
|
585 |
+
/**
|
586 |
+
* Check if WooCommerce plugin is active or not.
|
587 |
+
*
|
588 |
+
* @return boolean
|
589 |
+
*/
|
590 |
+
public static function is_woocommerce_active() {
|
591 |
+
return ( self::is_plugin_active( 'woocommerce/woocommerce.php' )
|
592 |
+
&& ( self::is_plugin_active( 'wsal-woocommerce.php' ) )
|
593 |
+
);
|
594 |
+
}
|
595 |
|
596 |
+
/**
|
597 |
+
* Check if Yoast SEO plugin is active or not.
|
598 |
+
*
|
599 |
+
* @return boolean
|
600 |
+
*/
|
601 |
+
public static function is_wpseo_active() {
|
602 |
+
return ( ( self::is_plugin_active( 'wordpress-seo/wp-seo.php' ) || self::is_plugin_active( 'wordpress-seo-premium/wp-seo-premium.php' ) )
|
603 |
+
&& ( self::is_plugin_active( 'activity-log-wp-seo.php' ) )
|
604 |
+
);
|
605 |
+
}
|
606 |
|
607 |
+
/**
|
608 |
+
* Check if MainWP plugin is active or not.
|
609 |
+
*
|
610 |
+
* @return boolean
|
611 |
+
*/
|
612 |
+
public static function is_mainwp_active() {
|
613 |
+
return self::is_plugin_active( 'mainwp-child/mainwp-child.php' );
|
614 |
+
}
|
|
|
|
|
615 |
|
616 |
+
/**
|
617 |
+
* Check if Two Factor plugin is active or not.
|
618 |
+
*
|
619 |
+
* @return boolean
|
620 |
+
*/
|
621 |
+
public static function is_twofactor_active() {
|
622 |
+
return self::is_plugin_active( 'two-factor/two-factor.php' );
|
623 |
+
}
|
624 |
|
625 |
+
/**
|
626 |
+
* Initializes Freemius and its hooks, conditionally.
|
627 |
+
*
|
628 |
+
* @return void
|
629 |
+
*/
|
630 |
+
public function init_freemius() {
|
631 |
+
|
632 |
+
$is_admin_blocking_plugins_support_enabled = $this->is_admin_blocking_plugins_support_enabled();
|
633 |
+
if ( self::is_frontend() && self::is_premium_freemius() && file_exists( WSAL_BASE_DIR . '/extensions/class-wsal-extension-manager.php' ) ) {
|
634 |
+
require_once WSAL_BASE_DIR . '/extensions/class-wsal-extension-manager.php';
|
635 |
+
|
636 |
+
if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
|
637 |
+
WSAL_Extension_Manager::include_extension( 'reports' );
|
638 |
+
WSAL_Extension_Manager::include_extension( 'usersessions' );
|
639 |
+
WSAL_Extension_Manager::include_extension( 'external-db' );
|
640 |
+
} elseif ( $this->should_load() ) {
|
641 |
+
WSAL_Extension_Manager::include_extension( 'notifications' );
|
642 |
+
}
|
643 |
+
|
644 |
+
if (!$is_admin_blocking_plugins_support_enabled) {
|
645 |
+
// we only stop here if the support for admin blocking plugins is enabled
|
646 |
+
return;
|
647 |
+
}
|
648 |
+
}
|
649 |
|
650 |
+
if ( $is_admin_blocking_plugins_support_enabled || is_admin() || self::is_login_screen() || self::is_rest_api() || ( defined( 'DOING_CRON' ) && DOING_CRON ) || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
|
651 |
+
|
652 |
+
self::load_freemius();
|
653 |
+
if ( ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
|
654 |
+
// Add filters to customize freemius welcome message.
|
655 |
+
wsal_freemius()->add_filter( 'connect_message', array( $this, 'wsal_freemius_connect_message' ), 10, 6 );
|
656 |
+
wsal_freemius()->add_filter( 'connect_message_on_update', array( $this, 'wsal_freemius_update_connect_message' ), 10, 6 );
|
657 |
+
wsal_freemius()->add_filter( 'trial_promotion_message', array( $this, 'freemius_trial_promotion_message' ), 10, 1 );
|
658 |
+
wsal_freemius()->add_filter( 'show_first_trial_after_n_sec', array( $this, 'change_show_first_trial_period' ), 10, 1 );
|
659 |
+
wsal_freemius()->add_filter( 'reshow_trial_after_every_n_sec', array( $this, 'change_reshow_trial_period' ), 10, 1 );
|
660 |
+
wsal_freemius()->add_filter( 'show_admin_notice', array( $this, 'freemius_show_admin_notice' ), 10, 2 );
|
661 |
+
wsal_freemius()->add_filter( 'show_delegation_option', '__return_false' );
|
662 |
+
wsal_freemius()->add_filter( 'enable_per_site_activation', '__return_false' );
|
663 |
+
wsal_freemius()->add_filter( 'show_trial', '__return_false' );
|
664 |
+
wsal_freemius()->add_filter( 'opt_in_error_message', array( $this, 'limited_license_activation_error' ), 10, 1 );
|
665 |
+
wsal_freemius()->add_action( 'after_account_plan_sync', array( $this, 'sync_premium_freemius' ), 10, 1 );
|
666 |
+
wsal_freemius()->add_action( 'after_premium_version_activation', array( $this, 'on_freemius_premium_version_activation') );
|
667 |
+
wsal_freemius()->add_filter( 'plugin_icon', function( $plugin_icon) {
|
668 |
+
return WSAL_BASE_DIR . 'img/wsal-logo@2x.png';
|
669 |
+
} );
|
670 |
+
wsal_freemius()->add_action( 'is_submenu_visible', array( $this, 'hide_freemius_submenu_items' ), 10, 2 );
|
671 |
+
wsal_freemius()->add_filter( 'freemius_pricing_js_path', function ( $default_pricing_js_path ) {
|
672 |
+
return WSAL_BASE_DIR . 'js/freemius-pricing/freemius-pricing.js';
|
673 |
+
} );
|
674 |
+
}
|
675 |
}
|
676 |
+
}
|
677 |
|
678 |
+
/**
|
679 |
+
* Whether visitor events should be logged.
|
680 |
+
*
|
681 |
+
* @return bool
|
682 |
+
*/
|
683 |
+
public function load_for_visitor_events() {
|
684 |
+
return 'no' === \WSAL\Helpers\Options::get_option_value_ignore_prefix( self::OPTIONS_PREFIX . 'disable-visitor-events' );
|
685 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
686 |
|
687 |
+
/**
|
688 |
+
* Whether an alert is enabled. For use before loading the settings.
|
689 |
+
*
|
690 |
+
* @param string|int $alert The alert to check.
|
691 |
+
* @return bool Whether the alert is enabled.
|
692 |
+
*/
|
693 |
+
public static function raw_alert_is_enabled( $alert ) {
|
694 |
+
$alerts = \WSAL\Helpers\Options::get_option_value_ignore_prefix( self::OPTIONS_PREFIX . 'disabled-alerts' );
|
695 |
+
$alerts = explode( ',', $alerts );
|
696 |
+
return ! in_array( $alert, $alerts );
|
697 |
+
}
|
698 |
|
699 |
+
/**
|
700 |
+
* MainWP Dashboard Handler.
|
701 |
+
*
|
702 |
+
* @since 3.2.5
|
703 |
+
*
|
704 |
+
* @param array $info – Information to return.
|
705 |
+
* @param array $post_data – Post data array from MainWP.
|
706 |
+
* @return mixed
|
707 |
+
*/
|
708 |
+
public function mainwp_dashboard_callback( $info, $post_data ) {
|
709 |
+
if ( isset( $post_data['action'] ) ) {
|
710 |
+
switch ( $post_data['action'] ) {
|
711 |
+
case 'check_wsal':
|
712 |
+
$info = new stdClass();
|
713 |
+
$info->wsal_installed = true;
|
714 |
+
$info->is_premium = false;
|
715 |
+
break;
|
716 |
|
717 |
+
case 'get_events':
|
718 |
+
$limit = isset( $post_data['events_count'] ) ? $post_data['events_count'] : false;
|
719 |
+
$offset = isset( $post_data['events_offset'] ) ? $post_data['events_offset'] : false;
|
720 |
+
$query_args = isset( $post_data['query_args'] ) ? $post_data['query_args'] : false;
|
721 |
+
$info = $this->alerts->get_mainwp_extension_events( $limit, $offset, $query_args );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
722 |
break;
|
|
|
723 |
|
724 |
+
case 'get_report':
|
725 |
+
$filters = isset( $post_data['filters'] ) ? $post_data['filters'] : array();
|
726 |
+
$report_type = isset( $post_data['report_type'] ) ? $post_data['report_type'] : false;
|
727 |
+
$info = $this->alerts->get_mainwp_extension_report( $filters, $report_type );
|
|
|
|
|
728 |
break;
|
|
|
729 |
|
730 |
+
case 'latest_event':
|
731 |
+
// run the query and return it.
|
732 |
+
$event = $this->query_for_latest_event();
|
733 |
+
$event = $event->getAdapter()->Execute( $event );
|
734 |
+
|
735 |
+
// Set the return object.
|
736 |
+
if ( isset( $event[0] ) ) {
|
737 |
+
$info = new stdClass();
|
738 |
+
$info->alert_id = $event[0]->alert_id;
|
739 |
+
$info->created_on = $event[0]->created_on;
|
740 |
+
} else {
|
741 |
+
$info = false;
|
|
|
742 |
}
|
743 |
+
break;
|
744 |
+
case 'enforce_settings':
|
745 |
+
// check subaction
|
746 |
+
if ( ! array_key_exists( 'subaction', $post_data) || empty( $post_data['subaction'] ) ) {
|
747 |
+
$info = array(
|
748 |
+
'success' => 'no',
|
749 |
+
'message' => 'Missing subaction parameter.'
|
750 |
+
);
|
751 |
+
break;
|
752 |
}
|
753 |
|
754 |
+
$subaction = filter_var( $post_data['subaction'], FILTER_SANITIZE_STRING);
|
755 |
+
if ( ! in_array( $subaction, [ 'update', 'remove' ] ) ) {
|
756 |
+
$info = array(
|
757 |
+
'success' => 'no',
|
758 |
+
'message' => 'Unsupported subaction parameter value.'
|
759 |
+
);
|
760 |
+
break;
|
761 |
}
|
762 |
|
763 |
+
if ( 'update' === $subaction ) {
|
764 |
+
// store the enforced settings in local database (used for example to disable related parts
|
765 |
+
// of the settings UI
|
766 |
+
$settings_to_enforce = $post_data[ 'settings'];
|
767 |
+
$this->settings()->set_mainwp_enforced_settings( $settings_to_enforce );
|
768 |
+
|
769 |
+
// change the existing settings
|
770 |
+
if ( array_key_exists( 'pruning_enabled', $settings_to_enforce ) ) {
|
771 |
+
$this->settings()->SetPruningDateEnabled( $settings_to_enforce['pruning_enabled'] );
|
772 |
+
if ( array_key_exists( 'pruning_date', $settings_to_enforce ) && array_key_exists( 'pruning_unit', $settings_to_enforce) ) {
|
773 |
+
$this->settings()->SetPruningDate($settings_to_enforce[ 'pruning_date' ] . ' ' . $settings_to_enforce[ 'pruning_unit' ]);
|
774 |
+
$this->settings()->set_pruning_unit( $settings_to_enforce[ 'pruning_unit' ] );
|
775 |
+
}
|
776 |
}
|
|
|
777 |
|
778 |
+
if ( array_key_exists( 'disabled_events', $settings_to_enforce ) ) {
|
779 |
+
$disabled_event_ids = array_key_exists( 'disabled_events', $settings_to_enforce ) ? array_map( 'intval', explode( ',', $settings_to_enforce['disabled_events'] ) ) : [];
|
780 |
+
$this->alerts->SetDisabledAlerts( $disabled_event_ids );
|
781 |
+
}
|
782 |
|
783 |
+
if (array_key_exists('incognito_mode_enabled', $settings_to_enforce)) {
|
784 |
+
$this->settings()->SetIncognito($settings_to_enforce['incognito_mode_enabled']);
|
785 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
786 |
|
787 |
+
if (array_key_exists('login_notification_enabled', $settings_to_enforce)) {
|
788 |
+
$login_page_notification_enabled = $settings_to_enforce['login_notification_enabled'];
|
789 |
+
$this->settings()->set_login_page_notification($login_page_notification_enabled);
|
790 |
+
if ('yes' === $login_page_notification_enabled) {
|
791 |
+
$this->settings()->set_login_page_notification_text($settings_to_enforce['login_notification_text']);
|
792 |
+
}
|
793 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
794 |
|
795 |
+
} else if ( 'remove' === $subaction ) {
|
796 |
+
$this->settings()->delete_mainwp_enforced_settings();
|
797 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
798 |
|
799 |
+
$info = array(
|
800 |
+
'success' => 'yes'
|
801 |
+
);
|
802 |
+
$this->alerts->Trigger( 6043 );
|
803 |
+
default:
|
804 |
+
break;
|
805 |
+
}
|
806 |
+
}
|
807 |
+
return $info;
|
808 |
+
}
|
809 |
|
810 |
+
/**
|
811 |
+
* Performs a query to retrieve the latest event in the logs.
|
812 |
+
*
|
813 |
+
* @method query_for_latest_event
|
814 |
+
* @since 4.0.3
|
815 |
+
* @return array
|
816 |
+
*/
|
817 |
+
public function query_for_latest_event() {
|
818 |
+
$event_query = new WSAL_Models_OccurrenceQuery();
|
819 |
+
// order by creation.
|
820 |
+
$event_query->addOrderBy( 'created_on', true );
|
821 |
+
// only request 1 item.
|
822 |
+
$event_query->setLimit( 1 );
|
823 |
+
return $event_query;
|
824 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
825 |
|
826 |
+
/**
|
827 |
+
* Method: WSAL plugin redirect.
|
828 |
+
*/
|
829 |
+
public function wsal_plugin_redirect() {
|
830 |
+
// WSAL State.
|
831 |
+
$wsal_state = $this->GetGlobalSetting( 'freemius_state', 'anonymous' );
|
832 |
+
|
833 |
+
if (
|
834 |
+
$this->GetGlobalSetting( 'redirect_on_activate', false ) // Redirect flag.
|
835 |
+
&& in_array( $wsal_state, array( 'anonymous', 'skipped' ), true )
|
836 |
+
) {
|
837 |
+
// If the redirect option is true, then continue.
|
838 |
+
$this->include_options_helper();
|
839 |
+
$this->options_helper->delete_option( 'wsal_redirect_on_activate' ); // Delete redirect option.
|
840 |
+
|
841 |
+
// Redirect URL.
|
842 |
+
$redirect = '';
|
843 |
+
|
844 |
+
// If current site is multisite and user is super-admin then redirect to network audit log.
|
845 |
+
if ( $this->IsMultisite() && $this->settings()->CurrentUserCan( 'edit' ) && is_super_admin() ) {
|
846 |
+
$redirect = add_query_arg( 'page', 'wsal-auditlog', network_admin_url( 'admin.php' ) );
|
847 |
+
} else {
|
848 |
+
// Otherwise redirect to main audit log view.
|
849 |
+
$redirect = add_query_arg( 'page', 'wsal-auditlog', admin_url( 'admin.php' ) );
|
850 |
+
}
|
851 |
+
wp_safe_redirect( $redirect );
|
852 |
+
exit();
|
853 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
854 |
|
855 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
856 |
|
857 |
+
/**
|
858 |
+
* Method: Set allowed HTML tags.
|
859 |
+
*
|
860 |
+
* @since 3.0.0
|
861 |
+
*/
|
862 |
+
public function set_allowed_html_tags() {
|
863 |
+
// Set allowed HTML tags.
|
864 |
+
$this->allowed_html_tags = array(
|
865 |
+
'a' => array(
|
866 |
+
'href' => array(),
|
867 |
+
'title' => array(),
|
868 |
+
'target' => array(),
|
869 |
+
),
|
870 |
+
'br' => array(),
|
871 |
+
'code' => array(),
|
872 |
+
'em' => array(),
|
873 |
+
'strong' => array(),
|
874 |
+
'p' => array(
|
875 |
+
'class' => array(),
|
876 |
+
),
|
877 |
+
);
|
878 |
+
}
|
879 |
|
880 |
+
/**
|
881 |
+
* Method: Define constants.
|
882 |
+
*
|
883 |
+
* @since 2.6.6
|
884 |
+
*/
|
885 |
+
public function define_constants() {
|
886 |
+
// Plugin version.
|
887 |
+
if ( ! defined( 'WSAL_VERSION' ) ) {
|
888 |
+
define( 'WSAL_VERSION', $this->version );
|
889 |
+
}
|
890 |
+
// Plugin Name.
|
891 |
+
if ( ! defined( 'WSAL_BASE_NAME' ) ) {
|
892 |
+
define( 'WSAL_BASE_NAME', plugin_basename( __FILE__ ) );
|
893 |
+
}
|
894 |
+
// Plugin Directory URL.
|
895 |
+
if ( ! defined( 'WSAL_BASE_URL' ) ) {
|
896 |
+
define( 'WSAL_BASE_URL', plugin_dir_url( __FILE__ ) );
|
897 |
+
}
|
898 |
+
// Plugin Directory Path.
|
899 |
+
if ( ! defined( 'WSAL_BASE_DIR' ) ) {
|
900 |
+
define( 'WSAL_BASE_DIR', plugin_dir_path( __FILE__ ) );
|
901 |
+
}
|
902 |
+
// Plugin Docs URL.
|
903 |
+
if ( ! defined( 'WSAL_DOCS_URL' ) ) {
|
904 |
+
define( 'WSAL_DOCS_URL', 'https://wpactivitylog.com/support/' );
|
905 |
+
}
|
906 |
+
// Plugin Issue Reporting URL.
|
907 |
+
if ( ! defined( 'WSAL_ISSUE_URL' ) ) {
|
908 |
+
define( 'WSAL_ISSUE_URL', 'https://wordpress.org/support/plugin/wp-security-audit-log' );
|
909 |
+
}
|
910 |
+
// Plugin Classes Prefix.
|
911 |
+
if ( ! defined( 'WSAL_CLASS_PREFIX' ) ) {
|
912 |
+
define( 'WSAL_CLASS_PREFIX', 'WSAL_' );
|
913 |
+
}
|
914 |
+
}
|
915 |
+
/**
|
916 |
+
* Customize Freemius connect message for new users.
|
917 |
+
*
|
918 |
+
* @param string $message - Connect message.
|
919 |
+
* @param string $user_first_name - User first name.
|
920 |
+
* @param string $plugin_title - Plugin title.
|
921 |
+
* @param string $user_login - Username.
|
922 |
+
* @param string $site_link - Site link.
|
923 |
+
* @param string $_freemius_link - Freemius link.
|
924 |
+
* @return string
|
925 |
+
*/
|
926 |
+
public function wsal_freemius_connect_message( $message, $user_first_name, $plugin_title, $user_login, $site_link, $_freemius_link ) {
|
927 |
+
$freemius_link = '<a href="https://wpactivitylog.com/support/kb/non-sensitive-diagnostic-data/" target="_blank" tabindex="1">freemius.com</a>';
|
928 |
+
return sprintf(
|
929 |
+
/* translators: Username */
|
930 |
+
esc_html__( 'Hey %1$s', 'wp-security-audit-log' ) . ',<br>' .
|
931 |
+
esc_html__( 'Never miss an important update! Opt-in to our security and feature updates notifications, and non-sensitive diagnostic tracking with freemius.com.', 'wp-security-audit-log' ) .
|
932 |
+
'<br /><br /><strong>' . esc_html__( 'Note: ', 'wp-security-audit-log' ) . '</strong>' .
|
933 |
+
esc_html__( 'NO ACTIVITY LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS.', 'wp-security-audit-log' ),
|
934 |
+
$user_first_name,
|
935 |
+
'<b>' . $plugin_title . '</b>',
|
936 |
+
'<b>' . $user_login . '</b>',
|
937 |
+
$site_link,
|
938 |
+
$freemius_link
|
939 |
+
);
|
940 |
+
}
|
941 |
|
942 |
+
/**
|
943 |
+
* Customize Freemius connect message on update.
|
944 |
+
*
|
945 |
+
* @param string $message - Connect message.
|
946 |
+
* @param string $user_first_name - User first name.
|
947 |
+
* @param string $plugin_title - Plugin title.
|
948 |
+
* @param string $user_login - Username.
|
949 |
+
* @param string $site_link - Site link.
|
950 |
+
* @param string $_freemius_link - Freemius link.
|
951 |
+
* @return string
|
952 |
+
*/
|
953 |
+
public function wsal_freemius_update_connect_message( $message, $user_first_name, $plugin_title, $user_login, $site_link, $_freemius_link ) {
|
954 |
+
$freemius_link = '<a href="https://wpactivitylog.com/support/kb/non-sensitive-diagnostic-data/" target="_blank" tabindex="1">freemius.com</a>';
|
955 |
+
return sprintf(
|
956 |
+
/* translators: Username */
|
957 |
+
esc_html__( 'Hey %1$s', 'wp-security-audit-log' ) . ',<br>' .
|
958 |
+
/* translators: 1: Plugin name. 2: Freemius link. */
|
959 |
+
esc_html__( 'Please help us improve %2$s! If you opt-in, some non-sensitive data about your usage of %2$s will be sent to %5$s, a diagnostic tracking service we use. If you skip this, that\'s okay! %2$s will still work just fine.', 'wp-security-audit-log' ) .
|
960 |
+
'<br /><br /><strong>' . esc_html__( 'Note: ', 'wp-security-audit-log' ) . '</strong>' .
|
961 |
+
esc_html__( 'NO ACTIVITY LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS.', 'wp-security-audit-log' ),
|
962 |
+
$user_first_name,
|
963 |
+
'<b>' . $plugin_title . '</b>',
|
964 |
+
'<b>' . $user_login . '</b>',
|
965 |
+
$site_link,
|
966 |
+
$freemius_link
|
967 |
+
);
|
968 |
+
}
|
969 |
|
970 |
+
/**
|
971 |
+
* Filter trial message of Freemius.
|
972 |
+
*
|
973 |
+
* @param string $_message – Trial message.
|
974 |
+
* @return string
|
975 |
+
* @since 3.2.3
|
976 |
+
*/
|
977 |
+
public function freemius_trial_promotion_message( $_message ) {
|
978 |
+
// Message.
|
979 |
+
$message = sprintf(
|
980 |
+
/* translators: Plugin name */
|
981 |
+
__( 'Get a free 7-day trial of the premium edition of %s. No credit card required, no commitments!', 'wp-security-audit-log' ),
|
982 |
+
'<strong>' . __( 'WP Activity Log', 'wp-security-audit-log' ) . '</strong>'
|
983 |
+
);
|
984 |
+
|
985 |
+
// Trial link.
|
986 |
+
$message .= '<a style="margin-left: 10px; vertical-align: super;" href="' . wsal_freemius()->get_trial_url() . '"><button class="button button-primary">' . __( 'Start free trial', 'wp-security-audit-log' ) . ' ➜</button></a>';
|
987 |
+
return $message;
|
988 |
+
}
|
989 |
|
990 |
+
/**
|
991 |
+
* Filter the time period to show the first trial message.
|
992 |
+
* Display it after 20 days.
|
993 |
+
*
|
994 |
+
* @param int $day_in_sec – Time period in seconds.
|
995 |
+
* @return int
|
996 |
+
* @since 3.2.3
|
997 |
+
*/
|
998 |
+
public function change_show_first_trial_period( $day_in_sec ) {
|
999 |
+
return 20 * DAY_IN_SECONDS;
|
1000 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1001 |
|
1002 |
+
/**
|
1003 |
+
* Filter the time period to re-show the trial message.
|
1004 |
+
* Display it after 60 days.
|
1005 |
+
*
|
1006 |
+
* @param int $thirty_days_in_sec – Time period in seconds.
|
1007 |
+
* @return int
|
1008 |
+
* @since 3.2.3
|
1009 |
+
*/
|
1010 |
+
public function change_reshow_trial_period( $thirty_days_in_sec ) {
|
1011 |
+
return 60 * DAY_IN_SECONDS;
|
1012 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1013 |
|
1014 |
+
/**
|
1015 |
+
* Fremius Admin Notice View Permission.
|
1016 |
+
*
|
1017 |
+
* Check to see if the user has permission to view freemius
|
1018 |
+
* admin notices or not.
|
1019 |
+
*
|
1020 |
+
* @since 3.3
|
1021 |
+
*
|
1022 |
+
* @param bool $show – If show then set to true, otherwise false.
|
1023 |
+
* @param array $msg {
|
1024 |
+
* @var string $message The actual message.
|
1025 |
+
* @var string $title An optional message title.
|
1026 |
+
* @var string $type The type of the message ('success', 'update', 'warning', 'promotion').
|
1027 |
+
* @var string $id The unique identifier of the message.
|
1028 |
+
* @var string $manager_id The unique identifier of the notices manager. For plugins it would be the plugin's slug, for themes - `<slug>-theme`.
|
1029 |
+
* @var string $plugin The product's title.
|
1030 |
+
* @var string $wp_user_id An optional WP user ID that this admin notice is for.
|
1031 |
+
* }
|
1032 |
+
* @return bool
|
1033 |
+
*/
|
1034 |
+
public function freemius_show_admin_notice( $show, $msg ) {
|
1035 |
+
if ( $this->settings()->CurrentUserCan( 'edit' ) ) {
|
1036 |
+
return $show;
|
1037 |
+
}
|
1038 |
+
return false;
|
1039 |
+
}
|
1040 |
|
1041 |
+
/**
|
1042 |
+
* Changes some of the strings that freemius outputs with out own.
|
1043 |
+
*
|
1044 |
+
* @method adjust_freemius_strings
|
1045 |
+
* @since 4.0.0
|
1046 |
+
*/
|
1047 |
+
public function adjust_freemius_strings() {
|
1048 |
+
// only update these messages if using premium plugin.
|
1049 |
+
if ( ( ! wsal_freemius()->is_premium() ) || ( ! method_exists( wsal_freemius(), 'override_il8n' ) ) ) {
|
1050 |
+
return;
|
1051 |
+
}
|
1052 |
+
wsal_freemius()->override_i18n(
|
1053 |
+
array(
|
1054 |
+
'few-plugin-tweaks' => __( 'You need to activate the licence key to use WP Activity Log Premium. %2$s', 'wp-security-audit-log' ),
|
1055 |
+
'optin-x-now' => __( 'Activate the licence key now', 'wp-security-audit-log' ),
|
1056 |
+
)
|
1057 |
+
);
|
1058 |
+
}
|
1059 |
|
1060 |
+
/**
|
1061 |
+
* Limited License Activation Error.
|
1062 |
+
*
|
1063 |
+
* @param string $error - Error Message.
|
1064 |
+
* @return string
|
1065 |
+
*/
|
1066 |
+
public function limited_license_activation_error( $error ) {
|
1067 |
+
$site_count = null;
|
1068 |
+
preg_match( '!\d+!', $error, $site_count );
|
1069 |
+
|
1070 |
+
// Check if this is an expired error.
|
1071 |
+
if ( strpos( $error, 'expired' ) !== false ) {
|
1072 |
+
/* Translators: Expired message and time */
|
1073 |
+
$error = sprintf( esc_html__( '%s You need to renew your license to continue using premium features.', 'wp-security-audit-log' ), preg_replace('/\([^)]+\)/','', $error ) );
|
1074 |
+
}
|
1075 |
+
elseif ( ! empty( $site_count[0] ) ) {
|
1076 |
+
/* Translators: Number of sites */
|
1077 |
+
$error = sprintf( esc_html__( 'The license is limited to %s sub-sites. You need to upgrade your license to cover all the sub-sites on this network.', 'wp-security-audit-log' ), $site_count[0] );
|
1078 |
+
}
|
1079 |
+
return $error;
|
1080 |
+
}
|
1081 |
|
1082 |
+
/**
|
1083 |
+
* Start to trigger the events after installation.
|
1084 |
+
*
|
1085 |
+
* @internal
|
1086 |
+
*/
|
1087 |
+
public function init() {
|
1088 |
+
// Load dependencies.
|
1089 |
+
if ( ! isset( $this->alerts ) ) {
|
1090 |
+
$this->alerts = new WSAL_AlertManager( $this );
|
1091 |
+
}
|
1092 |
|
1093 |
+
if ( ! isset( $this->constants ) ) {
|
1094 |
+
$this->constants = new WSAL_ConstantManager();
|
1095 |
+
}
|
|
|
1096 |
|
1097 |
+
$this->sensors = new WSAL_SensorManager( $this );
|
|
|
|
|
|
|
1098 |
|
1099 |
+
if ( is_admin() ) {
|
1100 |
+
$this->views = new WSAL_ViewManager( $this );
|
1101 |
+
$this->widgets = new WSAL_WidgetManager( $this );
|
1102 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1103 |
|
1104 |
+
// Start listening to events.
|
1105 |
+
if ( ! empty( $this->sensors ) && $this->sensors instanceof WSAL_SensorManager ) {
|
1106 |
+
$this->sensors->HookEvents();
|
1107 |
+
}
|
1108 |
|
1109 |
+
if ( is_admin() ) {
|
1110 |
+
if ( $this->settings()->IsArchivingEnabled() ) {
|
1111 |
+
// Check the current page.
|
1112 |
+
$get_page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
1113 |
+
if ( ( ! isset( $get_page ) || 'wsal-auditlog' !== $get_page ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
|
1114 |
+
$selected_db = get_transient( 'wsal_wp_selected_db' );
|
1115 |
+
$selected_db_user = (int) get_transient( 'wsal_wp_selected_db_user' );
|
1116 |
+
if ( $selected_db && ( get_current_user_id() === $selected_db_user ) ) {
|
1117 |
+
// Delete the transient.
|
1118 |
+
delete_transient( 'wsal_wp_selected_db' );
|
1119 |
+
delete_transient( 'wsal_wp_selected_db_user' );
|
1120 |
+
}
|
1121 |
+
}
|
1122 |
+
}
|
1123 |
|
1124 |
+
// Hide plugin.
|
1125 |
+
if ( $this->settings()->IsIncognito() ) {
|
1126 |
+
add_action( 'admin_head', array( $this, 'HidePlugin' ) );
|
1127 |
+
add_filter( 'all_plugins', array( $this, 'wsal_hide_plugin' ) );
|
1128 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1129 |
|
1130 |
+
// Update routine.
|
1131 |
+
$old_version = $this->GetOldVersion();
|
1132 |
+
$new_version = $this->GetNewVersion();
|
1133 |
+
if ( $old_version !== $new_version ) {
|
1134 |
+
$this->Update( $old_version, $new_version );
|
1135 |
+
}
|
1136 |
|
1137 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1138 |
|
1139 |
+
/**
|
1140 |
+
* Action: `wsal_init`
|
1141 |
+
*
|
1142 |
+
* Action hook to mark that WSAL has initialized.
|
1143 |
+
*
|
1144 |
+
* @param WpSecurityAuditLog $this – Instance of main plugin class.
|
1145 |
+
*/
|
1146 |
+
do_action( 'wsal_init', $this );
|
1147 |
+
|
1148 |
+
// allow registration of custom alert formatters (must be called after wsal_init action )
|
1149 |
+
WSAL_AlertFormatterFactory::bootstrap();
|
1150 |
+
}
|
1151 |
|
1152 |
+
/**
|
1153 |
+
* Plugin Deactivation Actions.
|
1154 |
+
*
|
1155 |
+
* This function runs on plugin deactivation to send
|
1156 |
+
* deactivation email.
|
1157 |
+
*
|
1158 |
+
* @since 3.3.1
|
1159 |
+
*/
|
1160 |
+
public function deactivate_actions() {
|
1161 |
+
/**
|
1162 |
+
* Allow short circuiting of the deactivation email sending by using
|
1163 |
+
* this filter to return true here instead of default false.
|
1164 |
+
*
|
1165 |
+
* @since 3.5.2
|
1166 |
+
*
|
1167 |
+
* @var bool
|
1168 |
+
*/
|
1169 |
+
if ( apply_filters( 'wsal_filter_prevent_deactivation_email_delivery', false ) ) {
|
1170 |
+
return;
|
1171 |
+
}
|
1172 |
|
1173 |
+
// Send deactivation email.
|
1174 |
+
if ( class_exists( 'WSAL_Utilities_Emailer' ) ) {
|
1175 |
+
// Get email template.
|
1176 |
+
WSAL_Utilities_Emailer::send_deactivation_email();
|
1177 |
+
}
|
1178 |
+
}
|
1179 |
|
1180 |
+
/**
|
1181 |
+
* Disable Custom Field through ajax.
|
1182 |
+
*
|
1183 |
+
* @internal
|
1184 |
+
*/
|
1185 |
+
public function AjaxDisableCustomField() {
|
1186 |
+
// Die if user does not have permission to disable.
|
1187 |
+
if ( ! $this->settings()->CurrentUserCan( 'edit' ) ) {
|
1188 |
+
echo '<p>' . esc_html__( 'Error: You do not have sufficient permissions to disable this custom field.', 'wp-security-audit-log' ) . '</p>';
|
1189 |
+
die();
|
1190 |
+
}
|
1191 |
|
1192 |
+
// Set filter input args.
|
1193 |
+
$filter_input_args = array(
|
1194 |
+
'disable_nonce' => FILTER_SANITIZE_STRING,
|
1195 |
+
'notice' => FILTER_SANITIZE_STRING,
|
1196 |
+
);
|
1197 |
|
1198 |
+
// Filter $_POST array for security.
|
1199 |
+
$post_array = filter_input_array( INPUT_POST, $filter_input_args );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1200 |
|
1201 |
+
if ( ! isset( $post_array['disable_nonce'] ) || ! wp_verify_nonce( $post_array['disable_nonce'], 'disable-custom-nonce' . $post_array['notice'] ) ) {
|
1202 |
+
die();
|
1203 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1204 |
|
1205 |
+
$excluded_meta_raw = $this->GetGlobalSetting( 'excluded-custom' );
|
1206 |
+
$excluded_meta = [];
|
1207 |
+
if ( isset( $excluded_meta_raw ) && '' != $excluded_meta_raw ) {
|
1208 |
+
$excluded_meta = explode(',', $excluded_meta_raw);
|
1209 |
+
}
|
1210 |
|
1211 |
+
array_push( $excluded_meta, esc_html( $post_array['notice'] ) );
|
1212 |
+
$this->SetGlobalSetting( 'excluded-custom', implode(',', array_unique( $excluded_meta ) ) );
|
1213 |
+
|
1214 |
+
// Exclude object link.
|
1215 |
+
$exclude_objects_link = add_query_arg(
|
1216 |
+
array(
|
1217 |
+
'page' => 'wsal-settings',
|
1218 |
+
'tab' => 'exclude-objects',
|
1219 |
+
),
|
1220 |
+
network_admin_url( 'admin.php' )
|
1221 |
+
);
|
1222 |
+
echo wp_sprintf(
|
1223 |
+
'<p>' . __( 'Custom Field <strong>%1$s</strong> is no longer being monitored.<br />Enable the monitoring of this custom field again from the', 'wp-security-audit-log' ) . ' <a href="%2$s">%3$s</a>%4$s</p>',
|
1224 |
+
$post_array['notice'],
|
1225 |
+
$exclude_objects_link,
|
1226 |
+
__( 'Excluded Objects', 'wp-security-audit-log' ),
|
1227 |
+
__( ' tab in the plugin settings', 'wp-security-audit-log' )
|
1228 |
+
);
|
1229 |
+
die;
|
1230 |
+
}
|
1231 |
|
1232 |
+
/**
|
1233 |
+
* Disable Alert through ajax.
|
1234 |
+
*
|
1235 |
+
* @internal
|
1236 |
+
*/
|
1237 |
+
public function AjaxDisableByCode() {
|
1238 |
+
// Die if user does not have permission to disable.
|
1239 |
+
if ( ! $this->settings()->CurrentUserCan( 'edit' ) ) {
|
1240 |
+
echo '<p>' . esc_html__( 'Error: You do not have sufficient permissions to disable this alert.', 'wp-security-audit-log' ) . '</p>';
|
1241 |
+
die();
|
1242 |
+
}
|
1243 |
|
1244 |
+
// Set filter input args.
|
1245 |
+
$filter_input_args = array(
|
1246 |
+
'disable_nonce' => FILTER_SANITIZE_STRING,
|
1247 |
+
'code' => FILTER_SANITIZE_STRING,
|
1248 |
+
);
|
1249 |
|
1250 |
+
// Filter $_POST array for security.
|
1251 |
+
$post_array = filter_input_array( INPUT_POST, $filter_input_args );
|
1252 |
+
if ( ! isset( $post_array['disable_nonce'] ) || ! wp_verify_nonce( $post_array['disable_nonce'], 'disable-alert-nonce' . $post_array['code'] ) ) {
|
1253 |
+
die();
|
1254 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1255 |
|
1256 |
+
$s_alerts = $this->GetGlobalSetting( 'disabled-alerts' );
|
1257 |
+
if ( isset( $s_alerts ) && '' != $s_alerts ) {
|
1258 |
+
$s_alerts .= ',' . esc_html( $post_array['code'] );
|
1259 |
+
} else {
|
1260 |
+
$s_alerts = esc_html( $post_array['code'] );
|
1261 |
+
}
|
1262 |
+
$this->SetGlobalSetting( 'disabled-alerts', $s_alerts );
|
|
|
|
|
|
|
|
|
|
|
1263 |
|
1264 |
+
echo wp_sprintf( '<p>' . __( 'Alert %1$s is no longer being monitored.<br /> %2$s', 'wp-security-audit-log' ) . '</p>', esc_html( $post_array['code'] ), __( 'You can enable this alert again from the Enable/Disable Alerts node in the plugin menu.', 'wp-security-audit-log' ) );
|
1265 |
+
die;
|
1266 |
+
}
|
1267 |
|
1268 |
+
/**
|
1269 |
+
* Render plugin stuff in page footer.
|
1270 |
+
*
|
1271 |
+
* @internal
|
1272 |
+
*/
|
1273 |
+
public function render_footer() {
|
1274 |
+
// Register common script.
|
1275 |
+
wp_register_script(
|
1276 |
+
'wsal-common',
|
1277 |
+
$this->GetBaseUrl() . '/js/common.js',
|
1278 |
+
array( 'jquery' ),
|
1279 |
+
filemtime( $this->GetBaseDir() . '/js/common.js' ),
|
1280 |
+
true
|
1281 |
+
);
|
1282 |
+
|
1283 |
+
// live events disabled in free version of the plugin
|
1284 |
+
$live_events_enabled = false;
|
1285 |
+
// Set data array for common script.
|
1286 |
+
$script_data = array(
|
1287 |
+
'ajaxURL' => admin_url( 'admin-ajax.php' ),
|
1288 |
+
'liveEvents' => $live_events_enabled,
|
1289 |
+
'installing' => __( 'Installing, please wait', 'wp-security-audit-log' ),
|
1290 |
+
'already_installed' => __( 'Already installed', 'wp-security-audit-log' ),
|
1291 |
+
'installed' => __( 'Extension installed', 'wp-security-audit-log' ),
|
1292 |
+
'activated' => __( 'Extension activated', 'wp-security-audit-log' ),
|
1293 |
+
'failed' => __( 'Install failed', 'wp-security-audit-log' ),
|
1294 |
+
);
|
1295 |
+
|
1296 |
+
wp_localize_script( 'wsal-common', 'wsalCommonData', $script_data );
|
1297 |
+
|
1298 |
+
// Enqueue script.
|
1299 |
+
wp_enqueue_script( 'wsal-common' );
|
1300 |
+
}
|
1301 |
|
1302 |
+
/**
|
1303 |
+
* Load the rest of the system.
|
1304 |
+
*
|
1305 |
+
* @internal
|
1306 |
+
*/
|
1307 |
+
public function load_wsal() {
|
1308 |
+
require_once 'classes/Alert.php';
|
1309 |
+
require_once 'classes/AbstractLogger.php';
|
1310 |
+
require_once 'classes/AbstractSensor.php';
|
1311 |
+
require_once 'classes/AbstractMetaDataSensor.php';
|
1312 |
+
require_once 'classes/AlertManager.php';
|
1313 |
+
require_once 'classes/ConstantManager.php';
|
1314 |
+
require_once 'classes/Loggers/Database.php';
|
1315 |
+
require_once 'classes/SensorManager.php';
|
1316 |
+
require_once 'classes/Sensors/Public.php';
|
1317 |
+
require_once 'classes/Settings.php';
|
1318 |
+
|
1319 |
+
if ( is_admin() ) {
|
1320 |
+
// Initiate settings object if not set.
|
1321 |
+
if ( ! $this->settings ) {
|
1322 |
+
$this->settings = new WSAL_Settings( $this );
|
1323 |
+
}
|
1324 |
+
|
1325 |
+
// Setting the pruning date with the old value or the default value.
|
1326 |
+
$pruning_date = $this->settings()->GetPruningDate();
|
1327 |
+
$this->settings()->SetPruningDate( $pruning_date );
|
1328 |
+
|
1329 |
+
// Load translations.
|
1330 |
+
load_plugin_textdomain( 'wp-security-audit-log', false, basename( dirname( __FILE__ ) ) . '/languages/' );
|
1331 |
+
}
|
1332 |
+
}
|
1333 |
|
1334 |
+
/**
|
1335 |
+
* Install all assets required for a useable system.
|
1336 |
+
* @throws Freemius_Exception
|
1337 |
+
*/
|
1338 |
+
public function Install() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1339 |
|
1340 |
+
$installation_errors = false;
|
|
|
|
|
|
|
|
|
|
|
1341 |
|
1342 |
+
// Check for minimum PHP version.
|
1343 |
+
if ( version_compare( PHP_VERSION, self::MIN_PHP_VERSION ) < 0 ) {
|
1344 |
+
/* Translators: %s: PHP Version */
|
1345 |
+
$installation_errors = sprintf( esc_html__( 'You are using a version of PHP that is older than %s, which is no longer supported.', 'wp-security-audit-log' ), esc_html( self::MIN_PHP_VERSION ) );
|
1346 |
+
$installation_errors .= '<br />';
|
1347 |
+
$installation_errors .= __( 'Contact us on <a href="mailto:plugins@wpwhitesecurity.com">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you are using.', 'wp-security-audit-log' );
|
1348 |
+
}
|
1349 |
+
|
1350 |
+
if ( self::is_plugin_active( 'mainwp/mainwp.php' ) ) {
|
1351 |
+
/* Translators: %s: Activity Log for MainWP plugin hyperlink */
|
1352 |
+
$installation_errors = sprintf( __( 'Please install the %s plugin on the MainWP dashboard.', 'wp-security-audit-log' ), '<a href="https://wordpress.org/plugins/activity-log-mainwp/" target="_blank">' . __( 'Activity Log for MainWP', 'wp-security-audit-log' ) . '</a>' ) . ' ';
|
1353 |
+
/* Translators: %s: Getting started guide hyperlink */
|
1354 |
+
$installation_errors .= sprintf( __( 'The WP Activity Log should be installed on the child sites only. Refer to the %s for more information.', 'wp-security-audit-log' ), '<a href="https://wpactivitylog.com/support/kb/gettting-started-activity-log-mainwp-extension/" target="_blank">' . __( 'getting started guide', 'wp-security-audit-log' ) . '</a>' );
|
1355 |
+
}
|
1356 |
+
|
1357 |
+
if ( $installation_errors ) {
|
1358 |
+
?>
|
1359 |
+
<html>
|
1360 |
+
<head><style>body{margin:0;}.warn-icon-tri{top:7px;left:5px;position:absolute;border-left:16px solid #FFF;border-right:16px solid #FFF;border-bottom:28px solid #C33;height:3px;width:4px}.warn-icon-chr{top:10px;left:18px;position:absolute;color:#FFF;font:26px Georgia}.warn-icon-cir{top:4px;left:0;position:absolute;overflow:hidden;border:6px solid #FFF;border-radius:32px;width:34px;height:34px}.warn-wrap{position:relative;font-size:13px;font-family:sans-serif;padding:6px 48px;line-height:1.4;}</style></head>
|
1361 |
+
<body><div class="warn-wrap"><div class="warn-icon-tri"></div><div class="warn-icon-chr">!</div><div class="warn-icon-cir"></div><span><?php echo $installation_errors; // @codingStandardsIgnoreLine ?></span></div></body>
|
1362 |
+
</html>
|
1363 |
+
<?php
|
1364 |
+
die( 1 );
|
1365 |
+
}
|
1366 |
|
1367 |
+
// Fully set up the plugin.
|
1368 |
+
$this->setup();
|
1369 |
+
$this->init();
|
1370 |
|
1371 |
+
// update licensing info in case we're swapping from free to premium or vice-versa
|
1372 |
+
$this->sync_premium_freemius();
|
1373 |
|
1374 |
+
// disable database sensor during the creation of tables
|
1375 |
+
WSAL_Sensors_Database::$enabled = false;
|
|
|
1376 |
|
1377 |
+
// On first install this won't be loaded because not premium, add it
|
1378 |
+
// now so it installs.
|
1379 |
+
$this->load_sessions_extension_db_adapter();
|
|
|
1380 |
|
1381 |
+
// run any installs.
|
1382 |
+
self::getConnector()->installAll();
|
1383 |
self::getConnector()->getAdapter( 'Occurrence' )->create_indexes();
|
1384 |
self::getConnector()->getAdapter( 'Meta' )->create_indexes();
|
|
|
1385 |
|
1386 |
+
if ( $this->settings()->IsArchivingEnabled() ) {
|
1387 |
+
$this->settings()->SwitchToArchiveDB();
|
1388 |
+
self::getConnector()->getAdapter( 'Occurrence' )->create_indexes();
|
1389 |
+
self::getConnector()->getAdapter( 'Meta' )->create_indexes();
|
1390 |
+
}
|
1391 |
|
1392 |
+
// If system already installed, do updates now (if any).
|
1393 |
+
$old_version = $this->GetOldVersion();
|
1394 |
+
$new_version = $this->GetNewVersion();
|
1395 |
|
1396 |
+
if ( $old_version !== $new_version ) {
|
1397 |
+
$this->Update( $old_version, $new_version );
|
1398 |
+
}
|
1399 |
|
1400 |
+
// Install cleanup hook (remove older one if it exists).
|
1401 |
+
wp_clear_scheduled_hook( 'wsal_cleanup' );
|
1402 |
+
wp_schedule_event( current_time( 'timestamp' ) + 600, 'hourly', 'wsal_cleanup' );
|
1403 |
+
|
1404 |
+
// WSAL Audit Log page redirect option in anonymous mode.
|
1405 |
+
if ( 'anonymous' === $this->GetGlobalSetting( 'freemius_state', 'anonymous' ) ) {
|
1406 |
+
$this->SetGlobalSetting( 'redirect_on_activate', true );
|
1407 |
+
}
|
1408 |
|
1409 |
+
// Run on each install to check MainWP Child plugin.
|
1410 |
+
$this->settings()->set_mainwp_child_stealth_mode();
|
1411 |
|
1412 |
+
// re-enable the database sensor after the tables are created
|
1413 |
+
WSAL_Sensors_Database::$enabled = true;
|
1414 |
+
}
|
1415 |
|
1416 |
+
/**
|
1417 |
+
* Run some code that updates critical components required for a newer version.
|
1418 |
+
*
|
1419 |
+
* @param string $old_version The old version.
|
1420 |
+
* @param string $new_version The new version.
|
1421 |
+
*
|
1422 |
+
* @throws Freemius_Exception
|
1423 |
+
*/
|
1424 |
+
public function Update( $old_version, $new_version ) {
|
1425 |
+
// Update version in db.
|
1426 |
+
$this->SetGlobalSetting( 'version', $new_version );
|
1427 |
|
1428 |
if ( '0.0.0' === $old_version ) {
|
1429 |
// set some initial plugins settings (only the ones that bypass the regular settings retrieval at some
|
1434 |
return;
|
1435 |
}
|
1436 |
|
1437 |
+
// Do version-to-version specific changes.
|
1438 |
+
if ( '0.0.0' !== $old_version && -1 === version_compare( $old_version, $new_version ) ) {
|
1439 |
+
// Dismiss privacy notice.
|
1440 |
+
if ( empty( $this->views ) ) {
|
1441 |
+
$this->views = new WSAL_ViewManager( $this );
|
1442 |
+
}
|
1443 |
+
$this->views->FindByClassName( 'WSAL_Views_AuditLog' )->DismissNotice( 'wsal-privacy-notice-3.2' );
|
1444 |
+
|
1445 |
+
/**
|
1446 |
+
* Delete advert transient on every update.
|
1447 |
+
*
|
1448 |
+
* @since 3.2.4
|
1449 |
+
*/
|
1450 |
+
if ( wsal_freemius()->is_free_plan() ) {
|
1451 |
+
$delete_transient_fn = $this->IsMultisite() ? 'delete_site_transient' : 'delete_transient'; // Check for multisite.
|
1452 |
+
$delete_transient_fn( 'wsal-is-advert-dismissed' ); // Delete advert transient.
|
1453 |
+
}
|
1454 |
+
|
1455 |
+
/**
|
1456 |
+
* MainWP Child Stealth Mode Update
|
1457 |
+
*
|
1458 |
+
* This update only needs to run if the stealth mode option
|
1459 |
+
* does not exist on free version.
|
1460 |
+
*
|
1461 |
+
* @since 3.2.3.3
|
1462 |
+
*/
|
1463 |
+
if ( ! $this->GetGlobalBooleanSetting( 'mwp-child-stealth-mode', false ) ) {
|
1464 |
+
$this->settings()->set_mainwp_child_stealth_mode();
|
1465 |
+
}
|
1466 |
+
|
1467 |
+
// remove obsolete options from the database
|
1468 |
+
if ( version_compare( $new_version, '4.1.4', '>=' ) ) {
|
1469 |
+
$this->DeleteGlobalSetting( 'addon_available_notice_dismissed' );
|
1470 |
+
|
1471 |
+
// Remove old file scanning options.
|
1472 |
+
global $wpdb;
|
1473 |
+
$plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'wsal_local_files_%'" );
|
1474 |
+
if ( ! empty( $plugin_options ) ) {
|
1475 |
+
foreach( $plugin_options as $option ) {
|
1476 |
+
$this->DeleteGlobalSetting( $option->option_name );
|
1477 |
+
}
|
1478 |
+
}
|
1479 |
+
}
|
1480 |
+
|
1481 |
+
if ( version_compare( $new_version, '4.1.5', '>=' ) ) {
|
1482 |
+
// remove 'system' entry from the front-end events array as it was removed along with 404 tracking
|
1483 |
+
$frontend_events = WSAL_Settings::get_frontend_events();
|
1484 |
+
if ( array_key_exists( 'system', $frontend_events ) ) {
|
1485 |
+
unset( $frontend_events['system'] );
|
1486 |
+
WSAL_Settings::set_frontend_events( $frontend_events );
|
1487 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1488 |
|
1489 |
+
// remove all settings related to 404 tracking
|
1490 |
+
$not_found_page_related_settings = [
|
1491 |
+
'log-404',
|
1492 |
+
'purge-404-log',
|
1493 |
+
'log-404-referrer',
|
1494 |
+
'log-visitor-404',
|
1495 |
+
'purge-visitor-404-log',
|
1496 |
+
'log-visitor-404-referrer',
|
1497 |
+
'excluded-urls'
|
1498 |
+
];
|
1499 |
+
foreach ( $not_found_page_related_settings as $setting_name ) {
|
1500 |
+
$this->DeleteGlobalSetting( $setting_name );
|
1501 |
+
}
|
1502 |
|
1503 |
+
// remove cron job for purging 404 logs
|
1504 |
+
if ( $schedule_time = wp_next_scheduled( 'wsal_log_files_pruning' ) ) {
|
1505 |
+
wp_unschedule_event($schedule_time, 'wsal_log_files_pruning', [] );
|
1506 |
+
}
|
1507 |
+
}
|
1508 |
+
|
1509 |
+
if ( version_compare( $new_version, '4.2.0', '>=' ) ) {
|
1510 |
+
// delete custom logging dir path from the settings
|
1511 |
+
$this->DeleteGlobalSetting( 'custom-logging-dir' );
|
1512 |
+
// delete dev options from the settings
|
1513 |
+
$this->DeleteGlobalSetting( 'dev-options' );
|
1514 |
+
}
|
1515 |
+
}
|
1516 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1517 |
|
1518 |
+
/**
|
1519 |
+
* Migrate data from old plugin.
|
1520 |
+
*/
|
1521 |
+
public function Migrate() {
|
1522 |
+
global $wpdb;
|
1523 |
+
static $mig_types = array(
|
1524 |
+
3000 => 5006,
|
1525 |
+
);
|
1526 |
+
|
1527 |
+
// Load data.
|
1528 |
+
$sql = 'SELECT * FROM ' . $wpdb->base_prefix . 'wordpress_auditlog_events';
|
1529 |
+
$events = array();
|
1530 |
+
foreach ( $wpdb->get_results( $sql, ARRAY_A ) as $item ) {
|
1531 |
+
$events[ $item['EventID'] ] = $item;
|
1532 |
+
}
|
1533 |
+
$sql = 'SELECT * FROM ' . $wpdb->base_prefix . 'wordpress_auditlog';
|
1534 |
+
$auditlog = $wpdb->get_results( $sql, ARRAY_A );
|
1535 |
+
|
1536 |
+
// Migrate using db logger.
|
1537 |
+
foreach ( $auditlog as $entry ) {
|
1538 |
+
$data = array(
|
1539 |
+
'ClientIP' => $entry['UserIP'],
|
1540 |
+
'UserAgent' => '',
|
1541 |
+
'CurrentUserID' => $entry['UserID'],
|
1542 |
+
);
|
1543 |
+
if ( $entry['UserName'] ) {
|
1544 |
+
$data['Username'] = base64_decode( $entry['UserName'] );
|
1545 |
+
}
|
1546 |
+
$mesg = $events[ $entry['EventID'] ]['EventDescription'];
|
1547 |
+
$date = strtotime( $entry['EventDate'] );
|
1548 |
+
$type = $entry['EventID'];
|
1549 |
+
if ( isset( $mig_types[ $type ] ) ) {
|
1550 |
+
$type = $mig_types[ $type ];
|
1551 |
+
}
|
1552 |
+
// Convert message from '<strong>%s</strong>' to '%Arg1%' format.
|
1553 |
+
$c = 0;
|
1554 |
+
$n = '<strong>%s</strong>';
|
1555 |
+
$l = strlen( $n );
|
1556 |
+
while ( ( $pos = strpos( $mesg, $n ) ) !== false ) {
|
1557 |
+
$mesg = substr_replace( $mesg, '%MigratedArg' . ( $c++ ) . '%', $pos, $l );
|
1558 |
+
}
|
1559 |
+
$data['MigratedMesg'] = $mesg;
|
1560 |
+
// Generate new meta data args.
|
1561 |
+
$temp = unserialize( base64_decode( $entry['EventData'] ) );
|
1562 |
+
foreach ( (array) $temp as $i => $item ) {
|
1563 |
+
$data[ 'MigratedArg' . $i ] = $item;
|
1564 |
+
}
|
1565 |
+
// send event data to logger!
|
1566 |
+
foreach ( $this->alerts->GetLoggers() as $logger ) {
|
1567 |
+
$logger->Log( $type, $data, $date, $entry['BlogId'], true );
|
1568 |
+
}
|
1569 |
+
}
|
1570 |
|
1571 |
+
// Migrate settings.
|
1572 |
+
$this->settings()->SetAllowedPluginViewers(
|
1573 |
+
get_option( 'WPPH_PLUGIN_ALLOW_ACCESS' )
|
1574 |
+
);
|
1575 |
+
$s = get_option( 'wpph_plugin_settings' );
|
1576 |
+
$this->settings()->SetViewPerPage( max( $s->showEventsViewList, 5 ) );
|
1577 |
+
$this->settings()->SetWidgetsEnabled( $s->showDW );
|
1578 |
+
}
|
|
|
1579 |
|
1580 |
+
/**
|
1581 |
+
* The current plugin version (according to plugin file metadata).
|
1582 |
+
*
|
1583 |
+
* @return string
|
1584 |
+
*/
|
1585 |
+
public function GetNewVersion() {
|
1586 |
+
$version = get_plugin_data( __FILE__, false, false );
|
1587 |
+
return isset( $version['Version'] ) ? $version['Version'] : '0.0.0';
|
1588 |
+
}
|
1589 |
|
1590 |
+
/**
|
1591 |
+
* The plugin version as stored in DB (will be the old version during an update/install).
|
1592 |
+
*
|
1593 |
+
* @return string
|
1594 |
+
*/
|
1595 |
+
public function GetOldVersion() {
|
1596 |
+
return $this->GetGlobalSetting( 'version', '0.0.0' );
|
1597 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1598 |
|
1599 |
+
/**
|
1600 |
+
* To be called in admin header for hiding plugin form Plugins list.
|
1601 |
+
*
|
1602 |
+
* @internal
|
1603 |
+
*/
|
1604 |
+
public function HidePlugin() {
|
1605 |
+
if ( ! $this->_settings->CurrentUserCan( 'edit' ) ) {
|
1606 |
+
$selectr = '';
|
1607 |
+
$plugins = array( 'wp-security-audit-log', 'wp-security-audit-log-premium' );
|
1608 |
+
foreach ( $plugins as $value ) {
|
1609 |
+
$selectr .= '.wp-list-table.plugins tr[data-slug="' . $value . '"], ';
|
1610 |
+
}
|
1611 |
+
?>
|
1612 |
+
<style type="text/css">
|
1613 |
+
<?php echo rtrim( $selectr, ', ' ); ?> { display: none; }
|
1614 |
+
</style>
|
1615 |
+
<?php
|
1616 |
+
}
|
1617 |
+
}
|
1618 |
|
1619 |
+
/**
|
1620 |
+
* Returns the class name of a particular file that contains the class.
|
1621 |
+
*
|
1622 |
+
* @param string $file - File name.
|
1623 |
+
* @return string - Class name.
|
1624 |
+
* @deprecated since 1.2.5 Use autoloader->GetClassFileClassName() instead.
|
1625 |
+
*/
|
1626 |
+
public function GetClassFileClassName( $file ) {
|
1627 |
+
return $this->autoloader->GetClassFileClassName( $file );
|
1628 |
+
}
|
1629 |
|
1630 |
+
/**
|
1631 |
+
* Return whether we are running on multisite or not.
|
1632 |
+
*
|
1633 |
+
* @return boolean
|
1634 |
+
*/
|
1635 |
+
public function IsMultisite() {
|
1636 |
+
return function_exists( 'is_multisite' ) && is_multisite();
|
1637 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1638 |
|
1639 |
+
/**
|
1640 |
+
* Get a global option.
|
1641 |
+
*
|
1642 |
+
* Deprecated function. It is only kept for the extension plugins. Nothing in the main plugin uses it, not even
|
1643 |
+
* the upgrade process.
|
1644 |
+
*
|
1645 |
+
* @param string $option - Option name.
|
1646 |
+
* @param mixed $default - (Optional) Value returned when option is not set (defaults to false).
|
1647 |
+
* @param string $prefix - (Optional) A prefix used before option name.
|
1648 |
+
* @return mixed - Option's value or $default if option not set.
|
1649 |
+
*
|
1650 |
+
* @deprecated 4.1.3 Use WpSecurityAuditLog::GetGlobalSetting instead
|
1651 |
+
* @see WpSecurityAuditLog::GetGlobalSetting()
|
1652 |
+
*/
|
1653 |
+
public function GetGlobalOption( $option, $default = false, $prefix = '' ) {
|
1654 |
+
return $this->GetGlobalSetting( $option, $default );
|
1655 |
+
}
|
1656 |
|
1657 |
+
/**
|
1658 |
+
* Get a global setting.
|
1659 |
+
*
|
1660 |
+
* @param string $option - Option name.
|
1661 |
+
* @param mixed $default - (Optional) Value returned when option is not set (defaults to false).
|
1662 |
+
*
|
1663 |
+
* @return mixed - Option's value or $default if option not set.
|
1664 |
+
*/
|
1665 |
+
public function GetGlobalSetting( $option, $default = false ) {
|
1666 |
+
$this->include_options_helper();
|
1667 |
+
return $this->options_helper->get_option_value( $option, $default );
|
1668 |
+
}
|
|
|
|
|
|
|
|
|
1669 |
|
1670 |
+
/**
|
1671 |
+
* Set a global option.
|
1672 |
+
*
|
1673 |
+
* Deprecated function. It is only kept for the extension plugins. Nothing in the main plugin uses it, not even
|
1674 |
+
* the upgrade process.
|
1675 |
+
*
|
1676 |
+
* @param string $option - Option name.
|
1677 |
+
* @param mixed $value - New value for option.
|
1678 |
+
* @param string $prefix - (Optional) A prefix used before option name.
|
1679 |
+
*
|
1680 |
+
* @deprecated 4.1.3 Use WpSecurityAuditLog::SetGlobalSetting instead
|
1681 |
+
* @see WpSecurityAuditLog::SetGlobalSetting()
|
1682 |
+
*/
|
1683 |
+
public function SetGlobalOption( $option, $value, $prefix = '' ) {
|
1684 |
+
$this->SetGlobalSetting( $option, $value );
|
1685 |
+
}
|
1686 |
|
1687 |
+
/**
|
1688 |
+
* Set a global setting.
|
1689 |
+
*
|
1690 |
+
* @param string $option - Option name.
|
1691 |
+
* @param mixed $value - New value for option.
|
1692 |
+
*
|
1693 |
+
* @return bool
|
1694 |
+
*/
|
1695 |
+
public function SetGlobalSetting( $option, $value ) {
|
1696 |
+
$this->include_options_helper();
|
1697 |
+
return $this->options_helper->set_option_value( $option, $value );
|
1698 |
+
}
|
|
|
|
|
|
|
1699 |
|
1700 |
+
/**
|
1701 |
+
* Deletes a global setting.
|
1702 |
+
*
|
1703 |
+
* Handles option names without the prefix, but also the ones that do for backwards compatibility.
|
1704 |
+
*
|
1705 |
+
* @param string $option - Option name.
|
1706 |
+
*
|
1707 |
+
* @return bool
|
1708 |
+
* @since 4.2.1
|
1709 |
+
*/
|
1710 |
+
public function DeleteGlobalSetting( $option ) {
|
1711 |
+
$this->include_options_helper();
|
1712 |
+
|
1713 |
+
return $this->options_helper->delete_option( $option );
|
1714 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1715 |
|
1716 |
+
/**
|
1717 |
+
* Get a global boolean setting. It takes care of the conversion between string and boolean.
|
1718 |
+
*
|
1719 |
+
* @param string $option - Option name.
|
1720 |
+
* @param boolean $default - (Optional) Value returned when option is not set (defaults to false).
|
1721 |
+
* @return boolean - Option's value or $default if option not set.
|
1722 |
+
* @since 4.1.3
|
1723 |
+
*/
|
1724 |
+
public function GetGlobalBooleanSetting( $option, $default = false ) {
|
1725 |
+
$result = $this->GetGlobalSetting( $option, \WSAL\Helpers\Options::string_to_bool( $default ) );
|
1726 |
+
return \WSAL\Helpers\Options::string_to_bool( $result );
|
1727 |
+
}
|
1728 |
+
/**
|
1729 |
+
* Sets a global boolean setting. It takes care of the conversion between string and boolean.
|
1730 |
+
*
|
1731 |
+
* @param string $option - Option name.
|
1732 |
+
* @param mixed $value - New value for option.
|
1733 |
+
* @since 4.1.3
|
1734 |
+
*/
|
1735 |
+
public function SetGlobalBooleanSetting( $option, $value ) {
|
1736 |
+
$boolean_value = \WSAL\Helpers\Options::string_to_bool( $value );
|
1737 |
+
$this->SetGlobalSetting( $option, \WSAL\Helpers\Options::bool_to_string( $boolean_value ) );
|
1738 |
+
}
|
1739 |
|
1740 |
+
/**
|
1741 |
+
* Run cleanup routines.
|
1742 |
+
*/
|
1743 |
+
public function CleanUp() {
|
1744 |
+
foreach ( $this->_cleanup_hooks as $hook ) {
|
1745 |
+
call_user_func( $hook );
|
1746 |
+
}
|
1747 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1748 |
|
1749 |
+
/**
|
1750 |
+
* Clear last 30 day's failed login alert usernames.
|
1751 |
+
*/
|
1752 |
+
public function delete_failed_logins() {
|
1753 |
+
// Set the dates.
|
1754 |
+
list( $y, $m, $d ) = explode( '-', date( 'Y-m-d' ) );
|
1755 |
+
|
1756 |
+
// Site id.
|
1757 |
+
$site_id = function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0;
|
1758 |
+
|
1759 |
+
// New occurrence object.
|
1760 |
+
$occurrence = new WSAL_Models_Occurrence();
|
1761 |
+
$alerts = $occurrence->check_alert_1003(
|
1762 |
+
array(
|
1763 |
+
1003,
|
1764 |
+
$site_id,
|
1765 |
+
mktime( 0, 0, 0, $m - 1, $d, $y ) + 1,
|
1766 |
+
mktime( 0, 0, 0, $m, $d, $y ),
|
1767 |
+
)
|
1768 |
+
);
|
1769 |
+
|
1770 |
+
// Alerts exists then continue.
|
1771 |
+
if ( ! empty( $alerts ) ) {
|
1772 |
+
foreach ( $alerts as $alert ) {
|
1773 |
+
// Flush the usernames meta data.
|
1774 |
+
$alert->UpdateMetaValue( 'Users', array() );
|
1775 |
+
}
|
1776 |
+
}
|
1777 |
+
}
|
1778 |
|
1779 |
+
/**
|
1780 |
+
* Add callback to be called when a cleanup operation is required.
|
1781 |
+
*
|
1782 |
+
* @param callable $hook - Hook name.
|
1783 |
+
*/
|
1784 |
+
public function AddCleanupHook( $hook ) {
|
1785 |
+
$this->_cleanup_hooks[] = $hook;
|
1786 |
+
}
|
1787 |
|
1788 |
+
/**
|
1789 |
+
* Remove a callback from the cleanup callbacks list.
|
1790 |
+
*
|
1791 |
+
* @param callable $hook - Hook name.
|
1792 |
+
*/
|
1793 |
+
public function RemoveCleanupHook( $hook ) {
|
1794 |
+
while ( ( $pos = array_search( $hook, $this->_cleanup_hooks ) ) !== false ) {
|
1795 |
+
unset( $this->_cleanup_hooks[ $pos ] );
|
1796 |
+
}
|
1797 |
+
}
|
1798 |
|
1799 |
+
/**
|
1800 |
+
* DB connection.
|
1801 |
+
*
|
1802 |
+
* @param mixed $config DB configuration.
|
1803 |
+
* @param bool $reset - True if reset.
|
1804 |
+
*
|
1805 |
+
* @return WSAL_Connector_ConnectorInterface
|
1806 |
+
* @throws Freemius_Exception
|
1807 |
+
*/
|
1808 |
+
public static function getConnector( $config = null, $reset = false ) {
|
1809 |
+
return WSAL_Connector_ConnectorFactory::getConnector( $config, $reset );
|
1810 |
+
}
|
1811 |
|
1812 |
+
/**
|
1813 |
+
* Do we have an existing installation? This only applies for version 1.0 onwards.
|
1814 |
+
*
|
1815 |
+
* @return boolean
|
1816 |
+
* @throws Freemius_Exception
|
1817 |
+
*/
|
1818 |
+
public function IsInstalled() {
|
1819 |
+
return self::getConnector()->isInstalled();
|
1820 |
+
}
|
1821 |
|
1822 |
+
/**
|
1823 |
+
* Whether the old plugin was present or not.
|
1824 |
+
*
|
1825 |
+
* @return boolean
|
1826 |
+
* @throws Freemius_Exception
|
1827 |
+
*/
|
1828 |
+
public function CanMigrate() {
|
1829 |
+
return self::getConnector()->canMigrate();
|
1830 |
+
}
|
1831 |
|
1832 |
+
/**
|
1833 |
+
* Absolute URL to plugin directory WITHOUT final slash.
|
1834 |
+
*
|
1835 |
+
* @return string
|
1836 |
+
*/
|
1837 |
+
public function GetBaseUrl() {
|
1838 |
+
return plugins_url( '', __FILE__ );
|
1839 |
+
}
|
1840 |
|
1841 |
+
/**
|
1842 |
+
* Full path to plugin directory WITH final slash.
|
1843 |
+
*
|
1844 |
+
* @return string
|
1845 |
+
*/
|
1846 |
+
public function GetBaseDir() {
|
1847 |
+
return plugin_dir_path( __FILE__ );
|
1848 |
+
}
|
1849 |
|
1850 |
+
/**
|
1851 |
+
* Plugin directory name.
|
1852 |
+
*
|
1853 |
+
* @return string
|
1854 |
+
*/
|
1855 |
+
public function GetBaseName() {
|
1856 |
+
return plugin_basename( __FILE__ );
|
1857 |
+
}
|
1858 |
|
1859 |
+
/**
|
1860 |
+
* Load default configuration / data.
|
1861 |
+
*/
|
1862 |
+
public function load_defaults() {
|
1863 |
+
require_once 'defaults.php';
|
1864 |
+
}
|
1865 |
+
/**
|
1866 |
+
* Update global option.
|
1867 |
+
*
|
1868 |
+
* Deprecated function. It is only kept for the extension plugins. Nothing in the main plugin uses it, not even
|
1869 |
+
* the upgrade process.
|
1870 |
+
*
|
1871 |
+
* @param string $option - Option name.
|
1872 |
+
* @param mixed $value - Option value.
|
1873 |
+
*
|
1874 |
+
* @return bool|int
|
1875 |
+
*
|
1876 |
+
* @deprecated 4.1.3 Use WpSecurityAuditLog::SetGlobalSetting instead
|
1877 |
+
* @see WpSecurityAuditLog::SetGlobalSetting()
|
1878 |
+
*/
|
1879 |
+
public function UpdateGlobalOption( $option, $value ) {
|
1880 |
+
return $this->SetGlobalSetting( $option, $value );
|
1881 |
+
}
|
1882 |
|
1883 |
+
/**
|
1884 |
+
* Method: Render login page message.
|
1885 |
+
*
|
1886 |
+
* @param string $message - Login message.
|
1887 |
+
*
|
1888 |
+
* @return string
|
1889 |
+
*/
|
1890 |
+
public function render_login_page_message( $message ) {
|
1891 |
+
// Set WSAL Settings.
|
1892 |
+
$wsal_settings = new WSAL_Settings( $this );
|
1893 |
+
|
1894 |
+
// Check if the option is enabled.
|
1895 |
+
$login_message_enabled = $wsal_settings->is_login_page_notification();
|
1896 |
+
if ( $login_message_enabled ) {
|
1897 |
+
// Get login message.
|
1898 |
+
$message = $wsal_settings->get_login_page_notification_text();
|
1899 |
+
|
1900 |
+
// Default message.
|
1901 |
+
if ( ! $message ) {
|
1902 |
+
$message = '<p class="message">' . wp_kses( __( 'For security and auditing purposes, a record of all of your logged-in actions and changes within the WordPress dashboard will be recorded in an activity log with the <a href="https://wpactivitylog.com/" target="_blank">WP Activity Log plugin</a>. The audit log also includes the IP address where you accessed this site from.', 'wp-security-audit-log' ), $this->allowed_html_tags ) . '</p>';
|
1903 |
+
} else {
|
1904 |
+
$message = '<p class="message">' . $message . '</p>';
|
1905 |
+
}
|
1906 |
+
}
|
1907 |
|
1908 |
+
// Return message.
|
1909 |
+
return $message;
|
1910 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1911 |
|
1912 |
+
/**
|
1913 |
+
* Extend WP cron time intervals for scheduling.
|
1914 |
+
*
|
1915 |
+
* @param array $schedules - Array of schedules.
|
1916 |
+
* @return array
|
1917 |
+
*/
|
1918 |
+
public function recurring_schedules( $schedules ) {
|
1919 |
+
$schedules['sixhours'] = array(
|
1920 |
+
'interval' => 21600,
|
1921 |
+
'display' => __( 'Every 6 hours', 'wp-security-audit-log' ),
|
1922 |
+
);
|
1923 |
+
$schedules['fortyfiveminutes'] = array(
|
1924 |
+
'interval' => 2700,
|
1925 |
+
'display' => __( 'Every 45 minutes', 'wp-security-audit-log' ),
|
1926 |
+
);
|
1927 |
+
$schedules['thirtyminutes'] = array(
|
1928 |
+
'interval' => 1800,
|
1929 |
+
'display' => __( 'Every 30 minutes', 'wp-security-audit-log' ),
|
1930 |
+
);
|
1931 |
+
$schedules['fifteenminutes'] = array(
|
1932 |
+
'interval' => 900,
|
1933 |
+
'display' => __( 'Every 15 minutes', 'wp-security-audit-log' ),
|
1934 |
+
);
|
1935 |
+
$schedules['tenminutes'] = array(
|
1936 |
+
'interval' => 600,
|
1937 |
+
'display' => __( 'Every 10 minutes', 'wp-security-audit-log' ),
|
1938 |
+
);
|
1939 |
+
$schedules['oneminute'] = array(
|
1940 |
+
'interval' => 60,
|
1941 |
+
'display' => __( 'Every 1 minute', 'wp-security-audit-log' ),
|
1942 |
+
);
|
1943 |
+
return $schedules;
|
1944 |
+
}
|
1945 |
|
1946 |
+
/**
|
1947 |
+
* Prints error for deprecated functions.
|
1948 |
+
*
|
1949 |
+
* @param string $method — Method deprecated.
|
1950 |
+
* @param string $version — Version since deprecated.
|
1951 |
+
*/
|
1952 |
+
public function wsal_deprecate( $method, $version ) {
|
1953 |
+
if ( WP_DEBUG ) {
|
1954 |
+
/* translators: 1. Deprecated method name 2. Version since deprecated */
|
1955 |
+
trigger_error( sprintf( esc_html__( 'Method %1$s is deprecated since version %2$s!', 'wp-security-audit-log' ), $method, $version ) );
|
1956 |
+
}
|
1957 |
+
}
|
|
|
|
|
|
|
|
|
|
|
1958 |
|
1959 |
+
/**
|
1960 |
+
* Uninstall routine for the plugin.
|
1961 |
+
*/
|
1962 |
+
public static function uninstall() {
|
1963 |
+
if ( ! class_exists( 'WSAL_Uninstall' ) ) {
|
1964 |
+
require_once trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/Uninstall.php';
|
1965 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1966 |
|
1967 |
+
WSAL_Uninstall::uninstall();
|
1968 |
+
}
|
|
|
1969 |
|
1970 |
+
/**
|
1971 |
+
* Function runs Freemius license check only if our Freemius licensing transient has already expired. This is
|
1972 |
+
* intended to run on admin_init action.
|
1973 |
+
*
|
1974 |
+
* @since 4.3.0
|
1975 |
+
*/
|
1976 |
+
public function maybe_sync_premium_freemius() {
|
1977 |
+
// we don't want to slow down any AJAX requests
|
1978 |
+
if ( wp_doing_ajax() ) {
|
1979 |
+
return;
|
1980 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1981 |
|
1982 |
+
$freemius_transient = get_transient( 'fs_wsalp' );
|
1983 |
+
if ( false === $freemius_transient || ! in_array( $freemius_transient, [ 'yes', 'no' ] ) ) {
|
1984 |
+
// transient expired or invalid
|
1985 |
+
$this->sync_premium_freemius();
|
1986 |
+
}
|
1987 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
1988 |
|
1989 |
+
/**
|
1990 |
+
* Runs Freemius license check, updates our db option if necessary and creates/extends a transient we use to
|
1991 |
+
* optimize the check. Should run only on couple of Freemius actions related to account sync and plugin activation.
|
1992 |
+
*
|
1993 |
+
* It might be also called by WpSecurityAuditLog::maybe_sync_premium_freemius() if the transient is not set or valid.
|
1994 |
+
*
|
1995 |
+
* @see WpSecurityAuditLog::maybe_sync_premium_freemius()
|
1996 |
+
*/
|
1997 |
+
public function sync_premium_freemius() {
|
1998 |
+
$option_name = 'fs_wsalp';
|
1999 |
+
$old_value = get_option( $option_name );
|
2000 |
+
|
2001 |
+
// determine new value via Freemius SDK
|
2002 |
+
$new_value = wsal_freemius()->is_registered() && wsal_freemius()->has_active_valid_license() ? 'yes' : 'no';
|
2003 |
+
|
2004 |
+
// update the db option only if the value changed
|
2005 |
+
if ($new_value != $old_value) {
|
2006 |
+
update_option( $option_name, $new_value );
|
2007 |
+
}
|
2008 |
|
2009 |
+
// always update the transient to extend the expiration window
|
2010 |
+
set_transient( $option_name, $new_value, DAY_IN_SECONDS );
|
2011 |
+
}
|
2012 |
|
2013 |
+
/**
|
2014 |
+
* Resource cautious function to check if the premium license is active and valid. It only checks if WordPress
|
2015 |
+
* option "fs_wsalp" is present and set to true.
|
2016 |
+
*
|
2017 |
+
* Function is intended for quick check during initial stages of plugin bootstrap, especially on front-end.
|
2018 |
+
*
|
2019 |
+
* @see WpSecurityAuditLog::sync_premium_freemius()
|
2020 |
+
*
|
2021 |
+
* @return boolean
|
2022 |
+
*/
|
2023 |
+
public static function is_premium_freemius() {
|
2024 |
+
return 'yes' === get_option( 'fs_wsalp' );
|
2025 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2026 |
|
2027 |
+
/**
|
2028 |
+
* Error Logger
|
2029 |
+
*
|
2030 |
+
* Logs given input into debug.log file in debug mode.
|
2031 |
+
*
|
2032 |
+
* @param mixed $message - Error message.
|
2033 |
+
*/
|
2034 |
+
public function wsal_log( $message ) {
|
2035 |
+
if ( WP_DEBUG === true ) {
|
2036 |
+
if ( is_array( $message ) || is_object( $message ) ) {
|
2037 |
+
error_log( print_r( $message, true ) );
|
2038 |
+
} else {
|
2039 |
+
error_log( $message );
|
2040 |
+
}
|
2041 |
+
}
|
2042 |
+
}
|
2043 |
|
2044 |
+
/**
|
2045 |
+
* Hide WSAL plugin from plugin list
|
2046 |
+
*
|
2047 |
+
* @param array $plugins All plugins.
|
2048 |
+
* @return array
|
2049 |
+
*/
|
2050 |
+
public function wsal_hide_plugin( $plugins ) {
|
2051 |
+
global $pagenow;
|
2052 |
+
|
2053 |
+
// Check current page, bail early if this isn't the plugins page.
|
2054 |
+
if ( 'plugins.php' !== $pagenow ) {
|
2055 |
+
return $plugins;
|
2056 |
+
}
|
|
|
|
|
|
|
2057 |
|
2058 |
+
// Find WSAL by plugin basename.
|
2059 |
+
if ( array_key_exists( WSAL_BASE_NAME, $plugins ) ) {
|
2060 |
+
// Remove WSAL plugin from plugin list page.
|
2061 |
+
unset( $plugins[ WSAL_BASE_NAME ] );
|
2062 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2063 |
|
2064 |
+
return $plugins;
|
2065 |
+
}
|
|
|
|
|
|
|
2066 |
|
2067 |
+
/**
|
2068 |
+
* Use filter to hide freemius submenu items.
|
2069 |
+
*
|
2070 |
+
* @param boolean $is_visible Default visibility.
|
2071 |
+
* @param string $submenu_id Menu slug.
|
2072 |
+
*
|
2073 |
+
* @return boolean New visibility.
|
2074 |
+
*/
|
2075 |
+
public function hide_freemius_submenu_items( $is_visible, $submenu_id ) {
|
2076 |
+
if ( 'contact' === $submenu_id ) {
|
2077 |
+
$is_visible = false;
|
2078 |
+
}
|
2079 |
+
return $is_visible;
|
2080 |
+
}
|
2081 |
|
2082 |
+
/**
|
2083 |
+
* Temporary autoloader for WSAL classes that somehow bypassed regular means of including
|
2084 |
+
* them during the plugin runtime.
|
2085 |
+
*
|
2086 |
+
* As far as we know, only the UserSessionsTracking object will fall into this autoloader.
|
2087 |
+
*
|
2088 |
+
* We could optimize the code below by caching the list of extension folders.
|
2089 |
+
*
|
2090 |
+
* @param string $class Fully qualified class name.
|
2091 |
+
*
|
2092 |
+
* @return bool
|
2093 |
+
*/
|
2094 |
+
public static function autoloader( $class ) {
|
2095 |
+
if ( ! preg_match( '/^WSAL_/', $class ) ) {
|
2096 |
+
return false;
|
2097 |
+
}
|
2098 |
|
2099 |
+
$base_path = plugin_dir_path( __FILE__ );
|
2100 |
+
$subfolders = array();
|
2101 |
+
$matches = explode( '_', $class );
|
2102 |
+
if ( count( $matches ) > 2 ) {
|
2103 |
+
// remove first (WSAL) and last one (actual file name)
|
2104 |
+
array_shift( $matches );
|
2105 |
+
array_pop( $matches );
|
2106 |
+
$subfolders = $matches;
|
2107 |
+
|
2108 |
+
// workaround for MySQL adapter classes
|
2109 |
+
if ( count( $subfolders ) == 2 && $subfolders[0] === 'Adapters' && $subfolders[1] === 'MySQL' ) {
|
2110 |
+
$class .= 'Adapter';
|
2111 |
+
}
|
2112 |
+
}
|
|
|
|
|
2113 |
|
2114 |
+
// use last part of the class name as the actual file name to look for
|
2115 |
+
$file_name = substr( $class, strrpos( $class, '_' ) + 1 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2116 |
|
2117 |
+
// try the main "classes" folder first
|
2118 |
+
$partial_path_to_file = 'classes' . DIRECTORY_SEPARATOR . implode( DIRECTORY_SEPARATOR, $subfolders ) . DIRECTORY_SEPARATOR . $file_name . '.php';
|
2119 |
+
$path_to_file = $base_path . $partial_path_to_file;
|
2120 |
+
if ( file_exists( $path_to_file ) ) {
|
2121 |
+
require_once $path_to_file;
|
2122 |
|
2123 |
+
return true;
|
2124 |
+
}
|
|
|
|
|
|
|
2125 |
|
2126 |
+
if ( ! function_exists( 'list_files' ) ) {
|
2127 |
+
require_once ABSPATH . 'wp-admin/includes/file.php';
|
2128 |
+
}
|
2129 |
|
2130 |
+
if ( file_exists( $base_path . 'extensions' ) ) {
|
2131 |
+
$extension_folders = list_files( $base_path . 'extensions', 1 );
|
2132 |
+
foreach ( $extension_folders as $extension_folder ) {
|
2133 |
+
if ( ! is_dir( $extension_folder ) ) {
|
2134 |
+
continue;
|
2135 |
+
}
|
2136 |
|
2137 |
+
$path_to_file = $extension_folder . $partial_path_to_file;
|
2138 |
+
if ( file_exists( $path_to_file ) ) {
|
2139 |
+
require_once $path_to_file;
|
|
|
|
|
|
|
2140 |
|
2141 |
+
return true;
|
2142 |
+
}
|
2143 |
+
}
|
2144 |
+
}
|
2145 |
+
}
|
2146 |
|
2147 |
+
/**
|
2148 |
+
* @see @see https://trello.com/c/1OCd5iKc/589-wieserdk-al4mwp-cannot-retrieve-events-when-admin-url-is-changed
|
2149 |
+
* @return bool
|
2150 |
+
*/
|
2151 |
+
private static function is_admin_blocking_plugins_support_enabled() {
|
2152 |
|
2153 |
+
// only meant for 404 pages, but may run before is_404 can be used
|
2154 |
+
$is_404 = did_action( 'wp' ) ? is_404() : true;
|
2155 |
+
if ( ! $is_404 ) {
|
2156 |
+
return false;
|
2157 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2158 |
|
2159 |
+
// this is called very early so we need to load some settings manually
|
2160 |
+
spl_autoload_register( array( __CLASS__, 'autoloader' ) );
|
2161 |
+
require_once 'classes/Helpers/Options.php';
|
2162 |
+
|
2163 |
+
/*
|
2164 |
+
* We assume settings have already been migrated (in version 4.1.3) to WordPress options table. We might
|
2165 |
+
* miss some 404 events until the plugin upgrade runs, but that is a very rare edge case. The same applies
|
2166 |
+
* to loading of 'admin-blocking-plugins-support' option further down.
|
2167 |
+
*
|
2168 |
+
* We do not need to worry about the missed 404s after version 4.1.5 as they were completely removed.
|
2169 |
+
*/
|
2170 |
+
$options_helper = new \WSAL\Helpers\Options( self::OPTIONS_PREFIX );
|
2171 |
+
$is_stealth_mode = $options_helper->get_option_value('mwp-child-stealth-mode', 'no');
|
2172 |
+
|
2173 |
+
if ('yes' !== $is_stealth_mode ) {
|
2174 |
+
// only intended if MainWP stealth mode is active
|
2175 |
+
return false;
|
2176 |
+
}
|
2177 |
|
2178 |
+
// allow if the admin blocking support settings is active
|
2179 |
+
return ('yes' === $options_helper->get_option_value( 'admin-blocking-plugins-support', 'no' ) );
|
2180 |
+
}
|
2181 |
+
|
2182 |
+
/**
|
2183 |
+
* Loads everything necessary to use DB adapter from the sessions extension.
|
2184 |
+
*
|
2185 |
+
* @since 4.1.4.1
|
2186 |
+
*/
|
2187 |
+
public function load_sessions_extension_db_adapter() {
|
2188 |
+
if ( file_exists( plugin_dir_path( __FILE__ ) . 'extensions/user-sessions/user-sessions.php' ) ) {
|
2189 |
+
$this->maybe_add_sessions_trackers_early();
|
2190 |
+
require_once plugin_dir_path( __FILE__ ) . 'extensions/user-sessions/user-sessions.php';
|
2191 |
+
$sessions = new WSAL_UserSessions_Plugin();
|
2192 |
+
$sessions->require_adapter_classes();
|
2193 |
+
}
|
2194 |
+
}
|
2195 |
+
|
2196 |
+
/**
|
2197 |
+
* Runs on premium version activation and installs database tables of the premium extensions (sessions table at
|
2198 |
+
* the time of introducing this function).
|
2199 |
+
*
|
2200 |
+
* @since 4.1.4.1
|
2201 |
+
*/
|
2202 |
+
public function on_freemius_premium_version_activation() {
|
2203 |
+
$this->sync_premium_freemius();
|
2204 |
+
$this->load_sessions_extension_db_adapter();
|
2205 |
+
self::getConnector()->installSingle( 'WSAL_Adapters_MySQL_Session' );
|
2206 |
+
}
|
2207 |
+
|
2208 |
+
/**
|
2209 |
+
* Dequeue JS files which have been added by other plugin to all admin pages and cause conflicts.
|
2210 |
+
* See https://github.com/WPWhiteSecurity/wp-security-audit-log-premium/issues/1246 and
|
2211 |
+
* https://trello.com/c/pWrQn1Be/742-koenhavelaertsflintgrpcom-reports-ui-does-not-load-with-plugin-installed
|
2212 |
+
*
|
2213 |
+
* @since 4.1.5
|
2214 |
+
*/
|
2215 |
+
public function dequeue_conflicting_scripts() {
|
2216 |
+
global $current_screen;
|
2217 |
+
// Only dequeue on our admin pages.
|
2218 |
+
if ( isset( $current_screen->base ) && strpos( $current_screen->base, 'wp-activity-log' ) === 0 ) {
|
2219 |
+
wp_deregister_script( 'dateformat' );
|
2220 |
+
}
|
2221 |
+
}
|
2222 |
+
|
2223 |
+
/**
|
2224 |
+
* Closes external connection if it's being used.
|
2225 |
+
*
|
2226 |
+
* @since 4.3.1
|
2227 |
+
*/
|
2228 |
+
public function close_external_connection() {
|
2229 |
+
// if the adapter type options is not empty, it means we're using the external database
|
2230 |
+
$database_type = $this->GetGlobalSetting( 'adapter-type' );
|
2231 |
+
if ( strlen( $database_type ) > 0 ) {
|
2232 |
+
$this->getConnector()->closeConnection();
|
2233 |
+
}
|
2234 |
}
|
2235 |
}
|
2236 |
|
2237 |
+
// load composer libraries if available
|
2238 |
+
$autoloader_file_path = plugin_dir_path( __FILE__ ) . implode( DIRECTORY_SEPARATOR, [
|
2239 |
+
'vendor',
|
2240 |
+
'autoload.php'
|
2241 |
+
]
|
2242 |
+
);
|
2243 |
+
|
2244 |
+
$prefixed_autoloader_file_path = plugin_dir_path( __FILE__ ) . implode( DIRECTORY_SEPARATOR, [
|
2245 |
+
'third-party',
|
2246 |
+
'vendor',
|
2247 |
+
'autoload.php'
|
2248 |
+
]
|
2249 |
+
);
|
2250 |
+
|
2251 |
+
if ( file_exists( $autoloader_file_path ) && file_exists( $prefixed_autoloader_file_path ) ) {
|
2252 |
+
require_once $autoloader_file_path;
|
2253 |
+
require_once $prefixed_autoloader_file_path;
|
2254 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2255 |
}
|
|
|
2256 |
|
2257 |
+
// Begin load sequence.
|
2258 |
+
WpSecurityAuditLog::GetInstance();
|
2259 |
|
2260 |
+
if ( is_admin() && ! WpSecurityAuditLog::is_plugin_active( plugin_basename( __FILE__ ) ) ) {
|
2261 |
+
WpSecurityAuditLog::load_freemius();
|
2262 |
|
2263 |
+
if ( ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
|
2264 |
+
wsal_freemius()->add_action( 'after_uninstall', array( 'WpSecurityAuditLog', 'uninstall' ) );
|
2265 |
+
}
|
2266 |
+
}
|
2267 |
+
|
2268 |
+
}
|
2269 |
} else {
|
2270 |
wsal_freemius()->set_basename( true, __FILE__ );
|
2271 |
}
|
2272 |
+
/**
|
2273 |
+
* Takes care of deactivation of the premium plugin when the free plugin is activated. The opposite direction is handled
|
2274 |
+
* by Freemius SDK.
|
2275 |
+
*
|
2276 |
+
* Note: This code MUST NOT be present in the premium version an is removed automatically during the build process.
|
2277 |
+
*
|
2278 |
+
* @since 4.3.0
|
2279 |
+
*/
|
2280 |
+
function wsal_free_on_plugin_activation() {
|
2281 |
+
$premium_version_slug = 'wp-security-audit-log-premium/wp-security-audit-log.php';
|
2282 |
+
if ( WpSecurityAuditLog::is_plugin_active( $premium_version_slug ) ) {
|
2283 |
+
deactivate_plugins( $premium_version_slug, true );
|
2284 |
+
}
|
2285 |
+
}
|
2286 |
+
|
2287 |
+
register_activation_hook( __FILE__, 'wsal_free_on_plugin_activation' );
|