WP Security Audit Log - Version 4.3.1

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 Icon 128x128 WP Security Audit Log
Version 4.3.1
Comparing to
See all releases

Code changes from version 4.2.2 to 4.3.1

Files changed (209) hide show
  1. classes/AbstractLogger.php +27 -3
  2. classes/Adapters/MySQL/QueryAdapter.php +5 -4
  3. classes/AlertFormatter.php +84 -80
  4. classes/AlertFormatterConfiguration.php +314 -0
  5. classes/AlertFormatterFactory.php +27 -47
  6. classes/AlertManager.php +39 -32
  7. classes/AuditLogGridView.php +6 -2
  8. classes/AuditLogListView.php +14 -46
  9. classes/Connector/ConnectorFactory.php +38 -80
  10. classes/Connector/MySQLDB.php +7 -94
  11. classes/ConstantManager.php +7 -1
  12. classes/DashboardWidgetFormatter.php +0 -27
  13. classes/Helpers/Options.php +0 -45
  14. classes/Loggers/Database.php +4 -1
  15. classes/Models/Occurrence.php +16 -40
  16. classes/SensorManager.php +1 -1
  17. classes/Sensors/Content.php +5 -56
  18. classes/Sensors/LogInOut.php +3 -4
  19. classes/Sensors/Multisite.php +23 -2
  20. classes/Settings.php +6 -21
  21. classes/Utilities/UserUtils.php +73 -0
  22. classes/ViewManager.php +27 -0
  23. classes/Views/ToggleAlerts.php +2 -1
  24. classes/WidgetManager.php +1 -1
  25. css/auditlog.css +10 -5
  26. css/dist/wsal-wizard.css +2 -1
  27. css/dist/wsal-wizard.min.css +1 -1
  28. css/src/wsal-wizard.scss +1 -0
  29. defaults.php +14 -5
  30. js/freemius-pricing/178afa6030e76635dbe835e111d2c507.png +0 -0
  31. js/freemius-pricing/27b5a722a5553d9de0170325267fccec.png +0 -0
  32. sdk/freemius/assets/img/plugin-icon.png → js/freemius-pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png +0 -0
  33. js/freemius-pricing/5480ed23b199531a8cbc05924f26952b.png +0 -0
  34. js/freemius-pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg +402 -0
  35. js/freemius-pricing/c03f665db27af43971565560adfba594.png +0 -0
  36. js/freemius-pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png +0 -0
  37. js/freemius-pricing/dd89563360f0272635c8f0ab7d7f1402.png +0 -0
  38. js/freemius-pricing/e366d70661d8ad2493bd6afbd779f125.png +0 -0
  39. js/freemius-pricing/f3aac72a8e63997d6bb888f816457e9b.png +0 -0
  40. js/freemius-pricing/f928f1be99776af83e8e6be4baf8ffe7.svg +227 -0
  41. sdk/freemius/assets/img/theme-icon.png → js/freemius-pricing/fde48e4609a6ddc11d639fc2421f2afd.png +0 -0
  42. js/freemius-pricing/freemius-pricing.js +43 -0
  43. languages/wp-security-audit-log.pot +1303 -1190
  44. readme.txt +35 -54
  45. sdk/wsal-freemius.php +61 -58
  46. {sdk/freemius → third-party/freemius/wordpress-sdk}/LICENSE.txt +0 -0
  47. {sdk/freemius → third-party/freemius/wordpress-sdk}/README.md +0 -0
  48. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/account.css +0 -0
  49. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/add-ons.css +0 -0
  50. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/affiliation.css +0 -0
  51. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/checkout.css +0 -0
  52. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/common.css +0 -0
  53. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/connect.css +0 -0
  54. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/debug.css +0 -0
  55. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/dialog-boxes.css +0 -0
  56. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/gdpr-optin-notice.css +0 -0
  57. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/index.php +0 -0
  58. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/admin/plugins.css +0 -0
  59. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/customizer.css +0 -0
  60. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/css/index.php +0 -0
  61. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/img/index.php +0 -0
  62. third-party/freemius/wordpress-sdk/assets/img/plugin-icon.png +0 -0
  63. third-party/freemius/wordpress-sdk/assets/img/theme-icon.png +0 -0
  64. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/index.php +0 -0
  65. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/index.php +0 -0
  66. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/nojquery.ba-postmessage.js +0 -0
  67. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/nojquery.ba-postmessage.min.js +0 -0
  68. {sdk/freemius → third-party/freemius/wordpress-sdk}/assets/js/postmessage.js +0 -0
  69. {sdk/freemius → third-party/freemius/wordpress-sdk}/config.php +0 -0
  70. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-freemius-abstract.php +0 -0
  71. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-freemius.php +0 -0
  72. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-admin-notices.php +0 -0
  73. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-api.php +0 -0
  74. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-logger.php +0 -0
  75. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-options.php +0 -0
  76. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-plugin-updater.php +0 -0
  77. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-security.php +0 -0
  78. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-storage.php +0 -0
  79. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/class-fs-user-lock.php +0 -0
  80. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/class-fs-customizer-support-section.php +0 -0
  81. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/class-fs-customizer-upsell-control.php +0 -0
  82. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/customizer/index.php +0 -0
  83. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/class-fs-debug-bar-panel.php +0 -0
  84. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/debug-bar-start.php +0 -0
  85. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/debug/index.php +0 -0
  86. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-affiliate-terms.php +0 -0
  87. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-affiliate.php +0 -0
  88. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-billing.php +0 -0
  89. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-entity.php +0 -0
  90. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-payment.php +0 -0
  91. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-info.php +0 -0
  92. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-license.php +0 -0
  93. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-plan.php +0 -0
  94. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin-tag.php +0 -0
  95. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-plugin.php +0 -0
  96. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-pricing.php +0 -0
  97. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-scope-entity.php +0 -0
  98. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-site.php +0 -0
  99. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-subscription.php +0 -0
  100. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/class-fs-user.php +0 -0
  101. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/entities/index.php +0 -0
  102. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-core-functions.php +0 -0
  103. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-essential-functions.php +0 -0
  104. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/fs-plugin-info-dialog.php +0 -0
  105. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/i18n.php +0 -0
  106. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/index.php +0 -0
  107. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/l10n.php +0 -0
  108. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-admin-menu-manager.php +0 -0
  109. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-admin-notice-manager.php +0 -0
  110. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-cache-manager.php +0 -0
  111. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-gdpr-manager.php +0 -0
  112. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-key-value-storage.php +0 -0
  113. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-license-manager.php +0 -0
  114. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-option-manager.php +0 -0
  115. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-plan-manager.php +0 -0
  116. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/class-fs-plugin-manager.php +0 -0
  117. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/managers/index.php +0 -0
  118. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/ArgumentNotExistException.php +0 -0
  119. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/EmptyArgumentException.php +0 -0
  120. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/Exception.php +0 -0
  121. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/InvalidArgumentException.php +0 -0
  122. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/OAuthException.php +0 -0
  123. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/Exceptions/index.php +0 -0
  124. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/FreemiusBase.php +0 -0
  125. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/FreemiusWordPress.php +0 -0
  126. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/LICENSE.txt +0 -0
  127. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/sdk/index.php +0 -0
  128. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/fs-essential-functions-1.1.7.1.php +0 -0
  129. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/fs-essential-functions-2.2.1.php +0 -0
  130. {sdk/freemius → third-party/freemius/wordpress-sdk}/includes/supplements/index.php +0 -0
  131. {sdk/freemius → third-party/freemius/wordpress-sdk}/index.php +0 -0
  132. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-cs_CZ.mo +0 -0
  133. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-da_DK.mo +0 -0
  134. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-en.mo +0 -0
  135. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-es_ES.mo +0 -0
  136. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-fr_FR.mo +0 -0
  137. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-he_IL.mo +0 -0
  138. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-hu_HU.mo +0 -0
  139. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-it_IT.mo +0 -0
  140. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ja.mo +0 -0
  141. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-nl_NL.mo +0 -0
  142. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ru_RU.mo +0 -0
  143. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-ta.mo +0 -0
  144. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius-zh_CN.mo +0 -0
  145. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/freemius.pot +0 -0
  146. {sdk/freemius → third-party/freemius/wordpress-sdk}/languages/index.php +0 -0
  147. {sdk/freemius → third-party/freemius/wordpress-sdk}/package.json +0 -0
  148. {sdk/freemius → third-party/freemius/wordpress-sdk}/require.php +0 -0
  149. {sdk/freemius → third-party/freemius/wordpress-sdk}/start.php +0 -0
  150. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account.php +0 -0
  151. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/billing.php +0 -0
  152. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/index.php +0 -0
  153. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/activate-license-button.php +0 -0
  154. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/addon.php +0 -0
  155. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/deactivate-license-button.php +0 -0
  156. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/index.php +0 -0
  157. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/partials/site.php +0 -0
  158. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/account/payments.php +0 -0
  159. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/add-ons.php +0 -0
  160. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/add-trial-to-pricing.php +0 -0
  161. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/admin-notice.php +0 -0
  162. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/ajax-loader.php +0 -0
  163. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/auto-installation.php +0 -0
  164. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/checkout.php +0 -0
  165. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/connect.php +0 -0
  166. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/contact.php +0 -0
  167. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug.php +0 -0
  168. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/api-calls.php +0 -0
  169. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/index.php +0 -0
  170. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/logger.php +0 -0
  171. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/plugins-themes-sync.php +0 -0
  172. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/debug/scheduled-crons.php +0 -0
  173. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/email.php +0 -0
  174. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/firewall-issues-js.php +0 -0
  175. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/affiliation.php +0 -0
  176. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/data-debug-mode.php +0 -0
  177. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/contact.php +0 -0
  178. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/form.php +0 -0
  179. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/index.php +0 -0
  180. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/deactivation/retry-skip.php +0 -0
  181. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/index.php +0 -0
  182. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/license-activation.php +0 -0
  183. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/optout.php +0 -0
  184. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/premium-versions-upgrade-handler.php +0 -0
  185. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/premium-versions-upgrade-metadata.php +0 -0
  186. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/resend-key.php +0 -0
  187. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/subscription-cancellation.php +0 -0
  188. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/trial-start.php +0 -0
  189. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/forms/user-change.php +0 -0
  190. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/gdpr-optin-js.php +0 -0
  191. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/index.php +0 -0
  192. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/index.php +0 -0
  193. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/jquery.content-change.php +0 -0
  194. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/open-license-activation.php +0 -0
  195. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/js/style-premium-theme.php +0 -0
  196. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/partials/index.php +0 -0
  197. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/partials/network-activation.php +0 -0
  198. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-icon.php +0 -0
  199. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/description.php +0 -0
  200. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/features.php +0 -0
  201. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/index.php +0 -0
  202. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/plugin-info/screenshots.php +0 -0
  203. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/powered-by.php +0 -0
  204. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/pricing.php +0 -0
  205. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/secure-https-header.php +0 -0
  206. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/sticky-admin-notice-js.php +0 -0
  207. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/tabs-capture-js.php +0 -0
  208. {sdk/freemius → third-party/freemius/wordpress-sdk}/templates/tabs.php +0 -0
  209. 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 WpSecurityAuditLog $plugin - Instance of WpSecurityAuditLog.
 
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 $data - Metadata.
32
  * @param integer $date (Optional) - Created on.
33
  * @param integer $siteid (Optional) - Site id.
34
- * @param bool $migrated (Optional) - Is migrated.
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 = $this->GetSql( $query, $args );
143
 
144
- $occurence_adapter = $query->getConnector()->getAdapter( 'Occurrence' );
145
 
146
- if ( in_array( $occurence_adapter->GetTable(), $query->getFrom() ) ) {
147
- return $occurence_adapter->LoadMulti( $sql, $args );
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
- * Base class for handling the formatting of alert message/UI widget in different context.
20
  *
21
- * Default formatting is using HTML suitable for display in the admin UI. Subclasses should
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 $_plugin;
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 = '&hellip;';
44
-
45
- protected $max_meta_value_length = 50;
46
 
47
- protected $js_infused_links_allowed = true;
 
48
 
49
- protected $supports_hyperlinks = true;
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->end_of_line;
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->js_infused_links_allowed ) {
88
- $label = __( 'Exclude Custom Field from the Monitoring', 'wp-security-audit-log' );
 
89
 
90
- return "<a href=\"#\" data-disable-custom-nonce='" . wp_create_nonce( 'disable-custom-nonce' . $value ) . "' onclick=\"return WsalDisableCustom(this, '" . $value . "');\"> {$label}</a>";
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 = strlen( $value ) > $this->max_meta_value_length ? ( substr( $value, 0, 50 ) . $this->ellipses_sequence ) : $value;
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->js_infused_links_allowed ) {
159
- return '<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>';
 
 
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->_plugin->IsMultisite() && $value ) {
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->end_of_line;
192
 
193
  case '%PluginFile%' === $expression:
194
  return $this->wrap_in_hightlight_markup( dirname( $value ) );
195
 
196
  default:
197
- // if we didn't get a match already try get one via a filter.
198
- return apply_filters( 'wsal_meta_formatter_custom_formatter', $value, $expression );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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->highlight_start_tag . $value . $this->highlight_end_tag;
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->emphasis_start_tag . $value . $this->emphasis_end_tag;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  }
227
 
228
  /**
@@ -249,8 +272,9 @@ class WSAL_AlertFormatter {
249
  }
250
 
251
  $processed_url = $this->process_url( $url );
 
252
 
253
- return $this->build_link_markup( $processed_url, $label, $title, $target );
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->supports_hyperlinks;
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->supports_metadata;
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->highlight_start_tag, $this->highlight_end_tag ],
318
  $message
319
  );
320
 
321
- return strip_tags( $result, $this->tags_allowed_in_message );
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( '&hellip;' );
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 array WSAL_AlertFormatter[]
27
  */
28
  private static $formatter_instances = [];
29
 
30
  /**
31
- * @var array
32
  */
33
- private static $formatter_stack = [];
34
 
35
  public static function bootstrap() {
 
 
 
 
 
 
 
36
  // let extensions register custom alert formatters
37
  $formatters = apply_filters( 'wsal_alert_formatters', [
38
- // no need to supply 'file' elements as the default formatter is loaded by the plugin core
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 $formatter ) {
51
- if ( ! array_key_exists( 'context', $formatter ) ) {
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::$formatter_stack ) ) {
73
- $formatter = self::createFormatter( self::$formatter_stack[ $context ] );
74
- if ( null !== $formatter ) {
75
- self::$formatter_instances[ $context ] = $formatter;
76
 
77
- return self::$formatter_instances[ $context ];
78
- }
 
79
  }
80
  } catch ( Exception $exception ) {
81
- return new WSAL_AlertFormatter();
82
  }
83
 
84
- return new WSAL_AlertFormatter();
85
  }
86
 
87
- private static function createFormatter( $formatter_def ) {
88
-
89
- if ( ! array_key_exists( 'class', $formatter_def ) ) {
90
- return null;
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 array
29
  */
30
  protected $_alerts = array();
31
 
@@ -41,14 +41,14 @@ final class WSAL_AlertManager {
41
  /**
42
  * Array of loggers (WSAL_AbstractLogger).
43
  *
44
- * @var array
45
  */
46
  protected $_loggers = array();
47
 
48
  /**
49
  * Instance of WpSecurityAuditLog.
50
  *
51
- * @var object
52
  */
53
  protected $plugin;
54
 
@@ -78,14 +78,14 @@ final class WSAL_AlertManager {
78
  *
79
  * Store WP Users for caching purposes.
80
  *
81
- * @var array
82
  */
83
  private $wp_users = array();
84
 
85
  /**
86
  * Ignored Custom Post Types.
87
  *
88
- * @var array
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 = $this->plugin->settings()->GetDateFormat();
153
- $this->sanitized_date_format = $this->plugin->settings()->GetDateFormat(true);
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
- * @see https://en.wikipedia.org/wiki/Syslog#Severity_level
 
 
 
 
630
  * @since 3.3.1
631
  */
632
  if ( is_object( $severity ) && property_exists( $severity, 'name' ) ) {
633
  if ( 'E_CRITICAL' === $severity->name ) {
634
- $event_data['Severity'] = 2;
 
635
  } elseif ( 'E_WARNING' === $severity->name ) {
636
- $event_data['Severity'] = 4;
 
637
  } elseif ( 'E_NOTICE' === $severity->name ) {
638
- $event_data['Severity'] = 5;
639
- } elseif ( 'WSAL_CRITICAL' === $severity->name ) {
640
- $event_data['Severity'] = 1;
641
- } elseif ( 'WSAL_HIGH' === $severity->name ) {
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 20: info.
655
  *
656
  * @since 4.3.0
657
  */
658
  if ( ! isset( $event_data['Severity'] ) ) {
659
- // assuming this is a missclasified item and using info code.
660
- $event_data['Severity'] = 20;
 
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( $event->GetUsername() );
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( $report_format, $entry_id, $alert_id, $site_id, $created_on, $user_id = null, $roles = null, $ip = '', $ua = '', $context = 'default' ) {
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( $occurrence->GetMetaArray(), null, $entry_id, $context );
1926
  }
1927
 
1928
  if ( ! $user_id ) {
1929
  $username = __( 'System', 'wp-security-audit-log' );
1930
  $roles = '';
1931
  } else {
1932
- $username = $occurrence->GetUsername();
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( null, $context ),
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
- return '<a class="tooltip" href="#" data-tooltip="' . esc_html( $const->name ) . '"><span class="log-type log-type-' . $const->value . '"></span></a>';
 
 
 
 
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 = $item->GetUsername( $this->item_meta[ $item->getId() ] ); // Get 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
- return '<a class="tooltip" href="#" data-tooltip="' . esc_html( $const->name ) . '"><span class="log-type log-type-' . $const->value . '"></span></a>';
 
 
 
 
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 = $item->GetUsername( $this->item_meta[ $item->getId() ] ); // Get username.
444
- $user = get_user_by( 'login', $username ); // Get user.
445
- if ( empty( $this->name_type ) ) {
446
- $this->name_type = $this->_plugin->settings()->get_type_username();
447
- }
448
 
449
- // Check if the username and user exists.
450
- if ( $username && $user ) {
451
  // Get user avatar.
452
  $image = get_avatar( $user->ID, 32 );
453
 
454
- // Checks for display name.
455
- if ( 'display_name' === $this->name_type && ! empty( $user->display_name ) ) {
456
- $display_name = $user->display_name;
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
- $conf = new WSAL_Settings( WpSecurityAuditLog::GetInstance() );
93
- $type = $conf->GetAdapterConfig( 'adapter-type' );
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 = 'no' === WpSecurityAuditLog::is_premium_freemius();
99
  }
100
 
101
- if ( $type && $is_not_paying ) {
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
- $type = null;
110
  }
111
 
112
- if ( empty( $type ) ) {
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 string $type - Adapter type.
135
- * @param string $user - Adapter user.
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( $type, $user, $password, $name, $hostname, $base_prefix, $is_ssl, $is_cc, $ssl_ca, $ssl_cert, $ssl_key ) {
148
- $result = false;
149
- $config = self::GetConfigArray( $type, $user, $password, $name, $hostname, $base_prefix, $is_ssl, $is_cc, $ssl_ca, $ssl_cert, $ssl_key );
150
- switch ( strtolower( $type ) ) {
151
- // TO DO: Add other connectors.
152
- case 'mysql':
153
- default:
154
- $test = new WSAL_Connector_MySQLDB( $config );
155
- $result = $test->TestConnection();
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['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,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['name'] . ' is unknown.', '1046' );
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['name'], $connection_config['hostname'], $connection_config['is_ssl'], $connection_config['is_cc'], $connection_config['ssl_ca'], $connection_config['ssl_cert'], $connection_config['ssl_key'] );
96
- $new_wpdb->set_prefix( $connection_config['base_prefix'] );
 
 
 
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 ( count( $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,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 = is_null( $date ) ? microtime( true ) : $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
  // 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 $default - Default value returned when meta does not exist.
 
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
- return maybe_unserialize( $meta['value'] );
 
 
101
 
102
- // TO DO: re-introduce add is loaded check before running query
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 ( is_user_logged_in() || empty( $frontend_events['login'] ) ) {
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' => ( $previous_featured_image['file'] ) ? $previous_featured_image['file'] : __( 'No previous image', 'wp-security-audit-log' ),
766
- 'new_image' => ( $new_featured_image['file'] ) ? $new_featured_image['file'] : __( 'No image', 'wp-security-audit-log' ),
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' => get_blog_option( $blog_id, 'blogname' ),
214
- 'BlogURL' => get_home_url( $blog_id ),
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
- $archive_type = $this->_plugin->GetGlobalSetting( 'archive-type' );
1217
- $archive_user = $this->_plugin->GetGlobalSetting( 'archive-user' );
1218
- $password = $this->_plugin->GetGlobalSetting( 'archive-password' );
1219
- $archive_name = $this->_plugin->GetGlobalSetting( 'archive-name' );
1220
- $archive_hostname = $this->_plugin->GetGlobalSetting( 'archive-hostname' );
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, 9011, 9070, 9075, 4013 );
 
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
- $wsal->constants->AddConstant( 'WSAL_CRITICAL', 1, __( 'Critical severity events.', 'wp-security-audit-log' ) );
169
- $wsal->constants->AddConstant( 'WSAL_HIGH', 6, __( 'High severity events.', 'wp-security-audit-log' ) );
170
- $wsal->constants->AddConstant( 'WSAL_MEDIUM', 10, __( 'Medium severity events.', 'wp-security-audit-log' ) );
171
- $wsal->constants->AddConstant( 'WSAL_LOW', 15, __( 'Low severity events.', 'wp-security-audit-log' ) );
172
- $wsal->constants->AddConstant( 'WSAL_INFORMATIONAL', 20, __( 'Informational events.', 'wp-security-audit-log' ) );
 
 
 
 
 
 
 
 
 
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,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}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)&&gt(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&&gt(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:168
20
  msgid "Critical severity events."
21
  msgstr ""
22
 
23
- #: defaults.php:169
24
  msgid "High severity events."
25
  msgstr ""
26
 
27
- #: defaults.php:170
28
  msgid "Medium severity events."
29
  msgstr ""
30
 
31
- #: defaults.php:171
32
  msgid "Low severity events."
33
  msgstr ""
34
 
35
- #: defaults.php:172
36
  msgid "Informational events."
37
  msgstr ""
38
 
39
- #: defaults.php:177
40
  msgid "Users Logins & Sessions Events"
41
  msgstr ""
42
 
43
- #: defaults.php:178, extensions/email-notifications/classes/Notifications.php:1265
44
  msgid "User Activity"
45
  msgstr ""
46
 
47
- #: defaults.php:182
48
  msgid "User logged in"
49
  msgstr ""
50
 
51
- #: defaults.php:183
52
  msgid "User logged in."
53
  msgstr ""
54
 
55
- #: defaults.php:192
56
  msgid "User logged out"
57
  msgstr ""
58
 
59
- #: defaults.php:193
60
  msgid "User logged out."
61
  msgstr ""
62
 
63
- #: defaults.php:202
64
  msgid "Login failed"
65
  msgstr ""
66
 
67
- #: defaults.php:203, defaults.php:213
68
  msgid "%Attempts% failed login(s)."
69
  msgstr ""
70
 
71
- #: defaults.php:212
72
  msgid "Login failed / non existing user"
73
  msgstr ""
74
 
75
- #: defaults.php:222
76
  msgid "Login blocked"
77
  msgstr ""
78
 
79
- #: defaults.php:223
80
  msgid "Login blocked because other session(s) already exist for this user."
81
  msgstr ""
82
 
83
- #: defaults.php:225, extensions/email-notifications/classes/Common.php:1096
84
  msgid "IP address"
85
  msgstr ""
86
 
87
- #: defaults.php:234
88
  msgid "User logged in with existing session(s)"
89
  msgstr ""
90
 
91
- #: defaults.php:235
92
  msgid "User logged in however there are other session(s) already for this user."
93
  msgstr ""
94
 
95
- #: defaults.php:237, extensions/reports/classes/HtmlReportGenerator.php:134
96
  msgid "IP address(es)"
97
  msgstr ""
98
 
99
- #: defaults.php:246
100
  msgid "User logged out all other sessions with the same username"
101
  msgstr ""
102
 
103
- #: defaults.php:247
104
  msgid "Logged out all other sessions with the same user."
105
  msgstr ""
106
 
107
- #: defaults.php:256
108
  msgid "User session destroyed and logged out"
109
  msgstr ""
110
 
111
- #: defaults.php:257
112
  msgid "Terminated the session of the user %TargetUserName%."
113
  msgstr ""
114
 
115
- #: defaults.php:259, defaults.php:272, defaults.php:1692, defaults.php:1720, defaults.php:1734, defaults.php:1748, defaults.php:1763, defaults.php:1778, defaults.php:1792, defaults.php:1806, defaults.php:1822, defaults.php:1837, defaults.php:1851, defaults.php:1865, defaults.php:1880, defaults.php:1896, defaults.php:1910, defaults.php:1925, defaults.php:1939, defaults.php:1953, defaults.php:1970, defaults.php:1984, defaults.php:1998, extensions/external-db/classes/Common.php:969, 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:260
120
  msgid "Session ID"
121
  msgstr ""
122
 
123
- #: defaults.php:269
124
  msgid "Switched to another user"
125
  msgstr ""
126
 
127
- #: defaults.php:270
128
  msgid "Switched the session to being logged in as %TargetUserName%."
129
  msgstr ""
130
 
131
- #: defaults.php:281
132
  msgid "User uploaded file to the Uploads directory"
133
  msgstr ""
134
 
135
- #: defaults.php:282
136
  msgid "Uploaded a file called %FileName%."
137
  msgstr ""
138
 
139
- #: defaults.php:284, defaults.php:296
140
  msgid "Directory"
141
  msgstr ""
142
 
143
- #: defaults.php:293
144
  msgid "User deleted file from Uploads directory"
145
  msgstr ""
146
 
147
- #: defaults.php:294
148
  msgid "Deleted the file %FileName%."
149
  msgstr ""
150
 
151
- #: defaults.php:305
152
  msgid "User requested a password reset"
153
  msgstr ""
154
 
155
- #: defaults.php:306
156
  msgid "User requested a password reset. This does not mean that the password was changed."
157
  msgstr ""
158
 
159
- #: defaults.php:315
160
  msgid "Content & Comments"
161
  msgstr ""
162
 
163
- #: defaults.php:316
164
  msgid "Content"
165
  msgstr ""
166
 
167
- #: defaults.php:320
168
  msgid "User created a new post and saved it as draft"
169
  msgstr ""
170
 
171
- #: defaults.php:321
172
  msgid "Created the post %PostTitle%."
173
  msgstr ""
174
 
175
- #: defaults.php:323, defaults.php:337, defaults.php:351, defaults.php:365, defaults.php:379, defaults.php:393, defaults.php:407, defaults.php:423, defaults.php:438, defaults.php:452, defaults.php:467, defaults.php:482, defaults.php:497, defaults.php:512, defaults.php:526, defaults.php:540, defaults.php:554, defaults.php:568, defaults.php:582, defaults.php:596, defaults.php:610, defaults.php:624, defaults.php:638, defaults.php:652, defaults.php:668, defaults.php:782, defaults.php:861, defaults.php:876, defaults.php:892, defaults.php:907, defaults.php:924, defaults.php:939, defaults.php:960, defaults.php:975, defaults.php:990, defaults.php:1005, defaults.php:1020, defaults.php:1035, defaults.php:1050, defaults.php:1065, defaults.php:1080, defaults.php:1095, defaults.php:1114, defaults.php:2145, defaults.php:2160, 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:324, defaults.php:338, defaults.php:352, defaults.php:366, defaults.php:380, defaults.php:394, defaults.php:408, defaults.php:424, defaults.php:439, defaults.php:453, defaults.php:468, defaults.php:483, defaults.php:498, defaults.php:513, defaults.php:527, defaults.php:541, defaults.php:555, defaults.php:569, defaults.php:583, defaults.php:597, defaults.php:611, defaults.php:625, defaults.php:639, defaults.php:653, defaults.php:669, defaults.php:783, defaults.php:862, defaults.php:877, defaults.php:893, defaults.php:908, defaults.php:925, defaults.php:940, defaults.php:961, defaults.php:976, defaults.php:991, defaults.php:1006, defaults.php:1021, defaults.php:1036, defaults.php:1051, defaults.php:1066, defaults.php:1081, defaults.php:1096, defaults.php:1115, defaults.php:2146, defaults.php:2161
180
  msgid "Post type"
181
  msgstr ""
182
 
183
- #: defaults.php:325, defaults.php:339, defaults.php:353, defaults.php:367, defaults.php:381, defaults.php:395, defaults.php:409, defaults.php:425, defaults.php:454, defaults.php:469, defaults.php:484, defaults.php:499, defaults.php:514, defaults.php:528, defaults.php:542, defaults.php:556, defaults.php:570, defaults.php:584, defaults.php:598, defaults.php:612, defaults.php:626, defaults.php:640, defaults.php:654, defaults.php:670, defaults.php:784, defaults.php:863, defaults.php:878, defaults.php:894, defaults.php:909, defaults.php:926, defaults.php:941, defaults.php:962, defaults.php:977, defaults.php:992, defaults.php:1007, defaults.php:1022, defaults.php:1037, defaults.php:1052, defaults.php:1067, defaults.php:1082, defaults.php:1097, defaults.php:1116, defaults.php:2147, defaults.php:2162
184
  msgid "Post status"
185
  msgstr ""
186
 
187
- #: defaults.php:334
188
  msgid "User published a post"
189
  msgstr ""
190
 
191
- #: defaults.php:335
192
  msgid "Published the post %PostTitle%."
193
  msgstr ""
194
 
195
- #: defaults.php:348
196
  msgid "User modified a post"
197
  msgstr ""
198
 
199
- #: defaults.php:349
200
  msgid "Modified the post %PostTitle%."
201
  msgstr ""
202
 
203
- #: defaults.php:362
204
  msgid "User permanently deleted a post from the trash"
205
  msgstr ""
206
 
207
- #: defaults.php:363
208
  msgid "Permanently deleted the post %PostTitle%."
209
  msgstr ""
210
 
211
- #: defaults.php:376
212
  msgid "User moved a post to the trash"
213
  msgstr ""
214
 
215
- #: defaults.php:377
216
  msgid "Moved the post %PostTitle% to trash."
217
  msgstr ""
218
 
219
- #: defaults.php:390
220
  msgid "User restored a post from trash"
221
  msgstr ""
222
 
223
- #: defaults.php:391
224
  msgid "Restored the post %PostTitle% from trash."
225
  msgstr ""
226
 
227
- #: defaults.php:404
228
  msgid "User changed post URL"
229
  msgstr ""
230
 
231
- #: defaults.php:405
232
  msgid "Changed the URL of the post %PostTitle%."
233
  msgstr ""
234
 
235
- #: defaults.php:410, defaults.php:2667, defaults.php:2679
236
  msgid "Previous URL"
237
  msgstr ""
238
 
239
- #: defaults.php:411
240
  msgid "New URL"
241
  msgstr ""
242
 
243
- #: defaults.php:420
244
  msgid "User changed post author"
245
  msgstr ""
246
 
247
- #: defaults.php:421
248
  msgid "Changed the author of the post %PostTitle% to %NewAuthor%."
249
  msgstr ""
250
 
251
- #: defaults.php:426
252
  msgid "Previous author"
253
  msgstr ""
254
 
255
- #: defaults.php:435
256
  msgid "User changed post status"
257
  msgstr ""
258
 
259
- #: defaults.php:436
260
  msgid "Changed the status of the post %PostTitle% to %NewStatus%."
261
  msgstr ""
262
 
263
- #: defaults.php:440
264
  msgid "Previous status"
265
  msgstr ""
266
 
267
- #: defaults.php:449
268
  msgid "User changed the visibility of a post"
269
  msgstr ""
270
 
271
- #: defaults.php:450
272
  msgid "Changed the visibility of the post %PostTitle% to %NewVisibility%."
273
  msgstr ""
274
 
275
- #: defaults.php:455
276
  msgid "Previous visibility status"
277
  msgstr ""
278
 
279
- #: defaults.php:464
280
  msgid "User changed the date of a post"
281
  msgstr ""
282
 
283
- #: defaults.php:465
284
  msgid "Changed the date of the post %PostTitle% to %NewDate%."
285
  msgstr ""
286
 
287
- #: defaults.php:470
288
  msgid "Previous date"
289
  msgstr ""
290
 
291
- #: defaults.php:479
292
  msgid "User changed the parent of a page"
293
  msgstr ""
294
 
295
- #: defaults.php:480
296
  msgid "Changed the parent of the post %PostTitle% to %NewParentName%."
297
  msgstr ""
298
 
299
- #: defaults.php:485, defaults.php:822
300
  msgid "Previous parent"
301
  msgstr ""
302
 
303
- #: defaults.php:494
304
  msgid "User changed the template of a page"
305
  msgstr ""
306
 
307
- #: defaults.php:495
308
  msgid "Changed the template of the post %PostTitle% to %NewTemplate%."
309
  msgstr ""
310
 
311
- #: defaults.php:500
312
  msgid "Previous template"
313
  msgstr ""
314
 
315
- #: defaults.php:509
316
  msgid "User set a post as sticky"
317
  msgstr ""
318
 
319
- #: defaults.php:510
320
  msgid "Set the post %PostTitle% as sticky."
321
  msgstr ""
322
 
323
- #: defaults.php:523
324
  msgid "User removed post from sticky"
325
  msgstr ""
326
 
327
- #: defaults.php:524
328
  msgid "Removed the post %PostTitle% from sticky."
329
  msgstr ""
330
 
331
- #: defaults.php:537
332
  msgid "User modified the content of a post"
333
  msgstr ""
334
 
335
- #: defaults.php:538
336
  msgid "Modified the content of the post %PostTitle%."
337
  msgstr ""
338
 
339
- #: defaults.php:551
340
  msgid "User submitted a post for review"
341
  msgstr ""
342
 
343
- #: defaults.php:552
344
  msgid "Submitted the post %PostTitle% for review."
345
  msgstr ""
346
 
347
- #: defaults.php:565
348
  msgid "User scheduled a post"
349
  msgstr ""
350
 
351
- #: defaults.php:566
352
  msgid "Scheduled the post %PostTitle% to be published on %PublishingDate%."
353
  msgstr ""
354
 
355
- #: defaults.php:579
356
  msgid "User changed title of a post"
357
  msgstr ""
358
 
359
- #: defaults.php:580
360
  msgid "Changed the title of the post %OldTitle% to %NewTitle%."
361
  msgstr ""
362
 
363
- #: defaults.php:593
364
  msgid "User opened a post in the editor"
365
  msgstr ""
366
 
367
- #: defaults.php:594
368
  msgid "Opened the post %PostTitle% in the editor."
369
  msgstr ""
370
 
371
- #: defaults.php:607
372
  msgid "User viewed a post"
373
  msgstr ""
374
 
375
- #: defaults.php:608
376
  msgid "Viewed the post %PostTitle%."
377
  msgstr ""
378
 
379
- #: defaults.php:621
380
  msgid "User enabled/disabled comments in a post"
381
  msgstr ""
382
 
383
- #: defaults.php:622
384
  msgid "Comments in the post %PostTitle%."
385
  msgstr ""
386
 
387
- #: defaults.php:635
388
  msgid "User enabled/disabled trackbacks and pingbacks in a post"
389
  msgstr ""
390
 
391
- #: defaults.php:636
392
  msgid "Pingbacks and Trackbacks in the post %PostTitle%."
393
  msgstr ""
394
 
395
- #: defaults.php:649
396
  msgid "User updated the excerpt in a post"
397
  msgstr ""
398
 
399
- #: defaults.php:650
400
  msgid "The excerpt of the post %PostTitle%."
401
  msgstr ""
402
 
403
- #: defaults.php:655
404
  msgid "Previous excerpt entry"
405
  msgstr ""
406
 
407
- #: defaults.php:656
408
  msgid "New excerpt entry"
409
  msgstr ""
410
 
411
- #: defaults.php:665
412
  msgid "User updated the featured image in a post"
413
  msgstr ""
414
 
415
- #: defaults.php:666
416
  msgid "The featured image of the post %PostTitle%."
417
  msgstr ""
418
 
419
- #: defaults.php:671
420
  msgid "Previous image"
421
  msgstr ""
422
 
423
- #: defaults.php:672
424
  msgid "New image"
425
  msgstr ""
426
 
427
- #: defaults.php:680
428
  msgid "Tags"
429
  msgstr ""
430
 
431
- #: defaults.php:684
432
  msgid "User added post tag"
433
  msgstr ""
434
 
435
- #: defaults.php:685
436
  msgid "Added tag(s) to the post %PostTitle%."
437
  msgstr ""
438
 
439
- #: defaults.php:687, defaults.php:702, classes/AuditLogGridView.php:288, classes/AuditLogGridView.php:312, classes/AuditLogListView.php:296, classes/AuditLogListView.php:324, extensions/external-db/classes/Common.php:954
440
  msgid "ID"
441
  msgstr ""
442
 
443
- #: defaults.php:688, defaults.php:703, extensions/external-db/classes/Connections.php:96, extensions/external-db/classes/Mirroring.php:124, extensions/reports/classes/CsvReportGenerator.php:84, extensions/reports/classes/HtmlReportGenerator.php:246
444
  msgid "Type"
445
  msgstr ""
446
 
447
- #: defaults.php:689, defaults.php:704
448
  msgid "Status"
449
  msgstr ""
450
 
451
- #: defaults.php:690
452
  msgid "Added tag(s)"
453
  msgstr ""
454
 
455
- #: defaults.php:699
456
  msgid "User removed post tag"
457
  msgstr ""
458
 
459
- #: defaults.php:700
460
  msgid "Removed tag(s) from the post %PostTitle%."
461
  msgstr ""
462
 
463
- #: defaults.php:705
464
  msgid "Removed tag(s)"
465
  msgstr ""
466
 
467
- #: defaults.php:714
468
  msgid "User created new tag"
469
  msgstr ""
470
 
471
- #: defaults.php:715
472
  msgid "Created the tag %TagName%."
473
  msgstr ""
474
 
475
- #: defaults.php:717, defaults.php:729, defaults.php:741, defaults.php:765, defaults.php:797, defaults.php:809, defaults.php:821, defaults.php:834
476
  msgid "Slug"
477
  msgstr ""
478
 
479
- #: defaults.php:726
480
  msgid "User deleted tag"
481
  msgstr ""
482
 
483
- #: defaults.php:727
484
  msgid "Deleted the tag %TagName%."
485
  msgstr ""
486
 
487
- #: defaults.php:738
488
  msgid "Renamed the tag %old_name% to %new_name%."
489
  msgstr ""
490
 
491
- #: defaults.php:750
492
  msgid "User changed tag slug"
493
  msgstr ""
494
 
495
- #: defaults.php:751
496
  msgid "Changed the slug of the tag %tag% to %new_slug%."
497
  msgstr ""
498
 
499
- #: defaults.php:753, defaults.php:846
500
  msgid "Previous slug"
501
  msgstr ""
502
 
503
- #: defaults.php:762
504
  msgid "User changed tag description"
505
  msgstr ""
506
 
507
- #: defaults.php:763
508
  msgid "Changed the description of the tag %tag%."
509
  msgstr ""
510
 
511
- #: defaults.php:766
512
  msgid "Previous description"
513
  msgstr ""
514
 
515
- #: defaults.php:767
516
  msgid "New description"
517
  msgstr ""
518
 
519
- #: defaults.php:775
520
  msgid "Categories"
521
  msgstr ""
522
 
523
- #: defaults.php:779
524
  msgid "User changed post category"
525
  msgstr ""
526
 
527
- #: defaults.php:780
528
  msgid "Changed the category(ies) of the post %PostTitle% to %NewCategories%."
529
  msgstr ""
530
 
531
- #: defaults.php:785
532
  msgid "Previous category(ies)"
533
  msgstr ""
534
 
535
- #: defaults.php:794
536
  msgid "User created new category"
537
  msgstr ""
538
 
539
- #: defaults.php:795
540
  msgid "Created the category %CategoryName%."
541
  msgstr ""
542
 
543
- #: defaults.php:806
544
  msgid "User deleted category"
545
  msgstr ""
546
 
547
- #: defaults.php:807
548
  msgid "Deleted the category %CategoryName%."
549
  msgstr ""
550
 
551
- #: defaults.php:818
552
  msgid "Changed the parent of a category"
553
  msgstr ""
554
 
555
- #: defaults.php:819
556
  msgid "Changed the parent of the category %CategoryName% to %NewParent%."
557
  msgstr ""
558
 
559
- #: defaults.php:831
560
  msgid "User changed category name"
561
  msgstr ""
562
 
563
- #: defaults.php:832
564
  msgid "Renamed the category %old_name% to %new_name%."
565
  msgstr ""
566
 
567
- #: defaults.php:843
568
  msgid "User changed category slug"
569
  msgstr ""
570
 
571
- #: defaults.php:844
572
  msgid "Changed the slug of the category %CategoryName% to %new_slug%."
573
  msgstr ""
574
 
575
- #: defaults.php:854
576
  msgid "Custom Fields"
577
  msgstr ""
578
 
579
- #: defaults.php:858
580
  msgid "User created a custom field for a post"
581
  msgstr ""
582
 
583
- #: defaults.php:859
584
  msgid "Created the new custom field %MetaKey% in the post %PostTitle%."
585
  msgstr ""
586
 
587
- #: defaults.php:864, defaults.php:1825
588
  msgid "Custom field value"
589
  msgstr ""
590
 
591
- #: defaults.php:873
592
  msgid "User updated a custom field value for a post"
593
  msgstr ""
594
 
595
- #: defaults.php:874
596
  msgid "Modified the value of the custom field %MetaName% in the post %PostTitle%."
597
  msgstr ""
598
 
599
- #: defaults.php:879
600
  msgid "Previous custom field value"
601
  msgstr ""
602
 
603
- #: defaults.php:880
604
  msgid "New custom field value"
605
  msgstr ""
606
 
607
- #: defaults.php:889
608
  msgid "User deleted a custom field from a post"
609
  msgstr ""
610
 
611
- #: defaults.php:890
612
  msgid "Deleted the custom field %MetaKey% from the post %PostTitle%."
613
  msgstr ""
614
 
615
- #: defaults.php:903
616
  msgid "User updated a custom field name for a post"
617
  msgstr ""
618
 
619
- #: defaults.php:904
620
  msgid "Renamed the custom field %MetaKeyOld% on post %PostTitle% to %MetaKeNew%."
621
  msgstr ""
622
 
623
- #: defaults.php:906, classes/AlertManager.php:1144
624
  msgid "Post"
625
  msgstr ""
626
 
627
- #: defaults.php:917
628
  msgid "Custom Fields (ACF)"
629
  msgstr ""
630
 
631
- #: defaults.php:921
632
  msgid "User added relationship to a custom field value for a post"
633
  msgstr ""
634
 
635
- #: defaults.php:922
636
  msgid "Added relationships to the custom field %MetaKey% in the post %PostTitle%."
637
  msgstr ""
638
 
639
- #: defaults.php:927
640
  msgid "New relationships"
641
  msgstr ""
642
 
643
- #: defaults.php:936
644
  msgid "User removed relationship from a custom field value for a post"
645
  msgstr ""
646
 
647
- #: defaults.php:937
648
  msgid "Removed relationships from the custom field %MetaKey% in the post %PostTitle%."
649
  msgstr ""
650
 
651
- #: defaults.php:942
652
  msgid "Removed relationships"
653
  msgstr ""
654
 
655
- #: defaults.php:953
656
  msgid "Comments"
657
  msgstr ""
658
 
659
- #: defaults.php:957
660
  msgid "User approved a comment"
661
  msgstr ""
662
 
663
- #: defaults.php:958
664
  msgid "Approved the comment posted by %Author% on the post %PostTitle%."
665
  msgstr ""
666
 
667
- #: defaults.php:963, defaults.php:978, defaults.php:993, defaults.php:1008, defaults.php:1023, defaults.php:1038, defaults.php:1053, defaults.php:1068, defaults.php:1083, defaults.php:1098, defaults.php:1117
668
  msgid "Comment ID"
669
  msgstr ""
670
 
671
- #: defaults.php:972
672
  msgid "User unapproved a comment"
673
  msgstr ""
674
 
675
- #: defaults.php:973
676
  msgid "Unapproved the comment posted by %Author% on the post %PostTitle%."
677
  msgstr ""
678
 
679
- #: defaults.php:987
680
  msgid "User replied to a comment"
681
  msgstr ""
682
 
683
- #: defaults.php:988
684
  msgid "Replied to the comment posted by %Author% on the post %PostTitle%."
685
  msgstr ""
686
 
687
- #: defaults.php:1002
688
  msgid "User edited a comment"
689
  msgstr ""
690
 
691
- #: defaults.php:1003
692
  msgid "Edited the comment posted by %Author% on the post %PostTitle%."
693
  msgstr ""
694
 
695
- #: defaults.php:1017
696
  msgid "User marked a comment as Spam"
697
  msgstr ""
698
 
699
- #: defaults.php:1018
700
  msgid "Marked the comment posted by %Author% on the post %PostTitle% as spam."
701
  msgstr ""
702
 
703
- #: defaults.php:1032
704
  msgid "User marked a comment as Not Spam"
705
  msgstr ""
706
 
707
- #: defaults.php:1033
708
  msgid "Marked the comment posted by %Author% on the post %PostTitle% as not spam."
709
  msgstr ""
710
 
711
- #: defaults.php:1047
712
  msgid "User moved a comment to trash"
713
  msgstr ""
714
 
715
- #: defaults.php:1048
716
  msgid "Moved the comment posted by %Author% on the post %PostTitle% to trash."
717
  msgstr ""
718
 
719
- #: defaults.php:1062
720
  msgid "User restored a comment from the trash"
721
  msgstr ""
722
 
723
- #: defaults.php:1063
724
  msgid "Restored the comment posted by %Author% on the post %PostTitle% from trash."
725
  msgstr ""
726
 
727
- #: defaults.php:1077
728
  msgid "User permanently deleted a comment"
729
  msgstr ""
730
 
731
- #: defaults.php:1078
732
  msgid "Permanently deleted the comment posted by %Author% on the post %PostTitle%."
733
  msgstr ""
734
 
735
- #: defaults.php:1092
736
  msgid "User posted a comment"
737
  msgstr ""
738
 
739
- #: defaults.php:1093, defaults.php:1112
740
  msgid "Posted a comment on the post %PostTitle%."
741
  msgstr ""
742
 
743
- #: defaults.php:1111
744
  msgid "Visitor posted a comment"
745
  msgstr ""
746
 
747
- #: defaults.php:1128
748
  msgid "Widgets"
749
  msgstr ""
750
 
751
- #: defaults.php:1132
752
  msgid "User added a new widget"
753
  msgstr ""
754
 
755
- #: defaults.php:1133
756
  msgid "Added a new %WidgetName% widget in %Sidebar%."
757
  msgstr ""
758
 
759
- #: defaults.php:1142
760
  msgid "User modified a widget"
761
  msgstr ""
762
 
763
- #: defaults.php:1143
764
  msgid "Modified the %WidgetName% widget in %Sidebar%."
765
  msgstr ""
766
 
767
- #: defaults.php:1152
768
  msgid "User deleted widget"
769
  msgstr ""
770
 
771
- #: defaults.php:1153
772
  msgid "Deleted the %WidgetName% widget from %Sidebar%."
773
  msgstr ""
774
 
775
- #: defaults.php:1162
776
  msgid "User moved widget"
777
  msgstr ""
778
 
779
- #: defaults.php:1163
780
  msgid "Moved the %WidgetName% widget."
781
  msgstr ""
782
 
783
- #: defaults.php:1165, extensions/reports/inc/wsal-reporting-view.inc.php:1505
784
  msgid "From"
785
  msgstr ""
786
 
787
- #: defaults.php:1166, extensions/reports/inc/wsal-reporting-view.inc.php:1514
788
  msgid "To"
789
  msgstr ""
790
 
791
- #: defaults.php:1175
792
  msgid "User changed widget position"
793
  msgstr ""
794
 
795
- #: defaults.php:1176
796
  msgid "Changed the position of the %WidgetName% widget in %Sidebar%."
797
  msgstr ""
798
 
799
- #: defaults.php:1187
800
  msgid "Menus"
801
  msgstr ""
802
 
803
- #: defaults.php:1191
804
  msgid "User created new menu"
805
  msgstr ""
806
 
807
- #: defaults.php:1192
808
  msgid "New menu called %MenuName%."
809
  msgstr ""
810
 
811
- #: defaults.php:1201
812
  msgid "User added content to a menu"
813
  msgstr ""
814
 
815
- #: defaults.php:1202
816
  msgid "Added the item %ContentName% to the menu %MenuName%."
817
  msgstr ""
818
 
819
- #: defaults.php:1204, defaults.php:1216, defaults.php:1248
820
  msgid "Item type"
821
  msgstr ""
822
 
823
- #: defaults.php:1213
824
  msgid "User removed content from a menu"
825
  msgstr ""
826
 
827
- #: defaults.php:1214
828
  msgid "Removed the item %ContentName% from the menu %MenuName%."
829
  msgstr ""
830
 
831
- #: defaults.php:1225
832
  msgid "User deleted menu"
833
  msgstr ""
834
 
835
- #: defaults.php:1226
836
  msgid "Deleted the menu %MenuName%."
837
  msgstr ""
838
 
839
- #: defaults.php:1235
840
  msgid "User changed menu setting"
841
  msgstr ""
842
 
843
- #: defaults.php:1236
844
  msgid "The setting %MenuSetting% in the menu %MenuName%."
845
  msgstr ""
846
 
847
- #: defaults.php:1245
848
  msgid "User modified content in a menu"
849
  msgstr ""
850
 
851
- #: defaults.php:1246
852
  msgid "Modified the item %ContentName% in the menu %MenuName%."
853
  msgstr ""
854
 
855
- #: defaults.php:1257
856
  msgid "User changed name of a menu"
857
  msgstr ""
858
 
859
- #: defaults.php:1258
860
  msgid "Renamed the menu %OldMenuName% to %MenuName%."
861
  msgstr ""
862
 
863
- #: defaults.php:1267
864
  msgid "User changed order of the objects in a menu"
865
  msgstr ""
866
 
867
- #: defaults.php:1268
868
  msgid "Changed the order of the items in the menu %MenuName%."
869
  msgstr ""
870
 
871
- #: defaults.php:1277
872
  msgid "User moved objects as a sub-item"
873
  msgstr ""
874
 
875
- #: defaults.php:1278
876
  msgid "Moved items as sub-items in the menu %MenuName%."
877
  msgstr ""
878
 
879
- #: defaults.php:1280
880
  msgid "Moved item"
881
  msgstr ""
882
 
883
- #: defaults.php:1281
884
  msgid "as a sub-item of"
885
  msgstr ""
886
 
887
- #: defaults.php:1297, extensions/reports/classes/HtmlReportGenerator.php:545
888
  msgid "Custom Post Types"
889
  msgstr ""
890
 
891
- #: defaults.php:1301
892
  msgid "User modified a draft blog post"
893
  msgstr ""
894
 
895
- #: defaults.php:1302
896
  msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
897
  msgstr ""
898
 
899
- #: defaults.php:1307
900
  msgid "User created a new post with custom post type and saved it as draft"
901
  msgstr ""
902
 
903
- #: defaults.php:1308
904
  msgid "Created a new custom post called %PostTitle% of type %PostType%. %EditorLinkPost%."
905
  msgstr ""
906
 
907
- #: defaults.php:1313
908
  msgid "User published a post with custom post type"
909
  msgstr ""
910
 
911
- #: defaults.php:1314
912
  msgid "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%."
913
  msgstr ""
914
 
915
- #: defaults.php:1319
916
  msgid "User modified a post with custom post type"
917
  msgstr ""
918
 
919
- #: defaults.php:1320
920
  msgid "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%."
921
  msgstr ""
922
 
923
- #: defaults.php:1325
924
  msgid "User modified a draft post with custom post type"
925
  msgstr ""
926
 
927
- #: defaults.php:1326
928
  msgid "Modified the draft custom post %PostTitle% of type is %PostType%. %EditorLinkPost%."
929
  msgstr ""
930
 
931
- #: defaults.php:1331
932
  msgid "User permanently deleted post with custom post type"
933
  msgstr ""
934
 
935
- #: defaults.php:1332
936
  msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
937
  msgstr ""
938
 
939
- #: defaults.php:1337
940
  msgid "User moved post with custom post type to trash"
941
  msgstr ""
942
 
943
- #: defaults.php:1338
944
  msgid "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was %PostUrl%."
945
  msgstr ""
946
 
947
- #: defaults.php:1343
948
  msgid "User restored post with custom post type from trash"
949
  msgstr ""
950
 
951
- #: defaults.php:1344
952
  msgid "The custom post %PostTitle% of type %PostType% has been restored from trash. %EditorLinkPost%."
953
  msgstr ""
954
 
955
- #: defaults.php:1349
956
  msgid "User changed the category of a post with custom post type"
957
  msgstr ""
958
 
959
- #: defaults.php:1350
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:1355
964
  msgid "User changed the URL of a post with custom post type"
965
  msgstr ""
966
 
967
- #: defaults.php:1356
968
  msgid "Changed the URL of the custom post %PostTitle% of type %PostType% from %OldUrl% to %NewUrl%. %EditorLinkPost%."
969
  msgstr ""
970
 
971
- #: defaults.php:1361
972
  msgid "User changed the author or post with custom post type"
973
  msgstr ""
974
 
975
- #: defaults.php:1362
976
  msgid "Changed the author of custom post %PostTitle% of type %PostType% from %OldAuthor% to %NewAuthor%. %EditorLinkPost%."
977
  msgstr ""
978
 
979
- #: defaults.php:1367
980
  msgid "User changed the status of post with custom post type"
981
  msgstr ""
982
 
983
- #: defaults.php:1368
984
  msgid "Changed the status of custom post %PostTitle% of type %PostType% from %OldStatus% to %NewStatus%. %EditorLinkPost%."
985
  msgstr ""
986
 
987
- #: defaults.php:1373
988
  msgid "User changed the visibility of a post with custom post type"
989
  msgstr ""
990
 
991
- #: defaults.php:1374
992
  msgid "Changed the visibility of the custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
993
  msgstr ""
994
 
995
- #: defaults.php:1379
996
  msgid "User changed the date of post with custom post type"
997
  msgstr ""
998
 
999
- #: defaults.php:1380
1000
  msgid "Changed the date of the custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%. %EditorLinkPost%."
1001
  msgstr ""
1002
 
1003
- #: defaults.php:1385
1004
  msgid "User created a custom field for a custom post type"
1005
  msgstr ""
1006
 
1007
- #: defaults.php:1386
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:1391
1012
  msgid "User updated a custom field for a custom post type"
1013
  msgstr ""
1014
 
1015
- #: defaults.php:1392
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:1397
1020
  msgid "User deleted a custom field from a custom post type"
1021
  msgstr ""
1022
 
1023
- #: defaults.php:1398
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:1403
1028
  msgid "User updated a custom field name for a custom post type"
1029
  msgstr ""
1030
 
1031
- #: defaults.php:1404
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:1409
1036
  msgid "User modified content for a published custom post type"
1037
  msgstr ""
1038
 
1039
- #: defaults.php:1410
1040
  msgid "Modified the content of the published custom post type %PostTitle%. Post URL is %PostUrl%. %EditorLinkPost%."
1041
  msgstr ""
1042
 
1043
- #: defaults.php:1415
1044
  msgid "User modified content for a draft post"
1045
  msgstr ""
1046
 
1047
- #: defaults.php:1416
1048
  msgid "Modified the content of the draft post %PostTitle%.%RevisionLink% %EditorLinkPost%."
1049
  msgstr ""
1050
 
1051
- #: defaults.php:1421
1052
  msgid "User modified content for a draft custom post type"
1053
  msgstr ""
1054
 
1055
- #: defaults.php:1422
1056
  msgid "Modified the content of the draft custom post type %PostTitle%.%EditorLinkPost%."
1057
  msgstr ""
1058
 
1059
- #: defaults.php:1427
1060
  msgid "User modified content of a post"
1061
  msgstr ""
1062
 
1063
- #: defaults.php:1428
1064
  msgid "Modified the content of post %PostTitle% which is submitted for review.%RevisionLink% %EditorLinkPost%."
1065
  msgstr ""
1066
 
1067
- #: defaults.php:1433
1068
  msgid "User scheduled a custom post type"
1069
  msgstr ""
1070
 
1071
- #: defaults.php:1434
1072
  msgid "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. %EditorLinkPost%."
1073
  msgstr ""
1074
 
1075
- #: defaults.php:1439
1076
  msgid "User changed title of a custom post type"
1077
  msgstr ""
1078
 
1079
- #: defaults.php:1440
1080
  msgid "Changed the title of the custom post %OldTitle% to %NewTitle%. %EditorLinkPost%."
1081
  msgstr ""
1082
 
1083
- #: defaults.php:1445
1084
  msgid "User opened a custom post type in the editor"
1085
  msgstr ""
1086
 
1087
- #: defaults.php:1446
1088
  msgid "Opened the custom post %PostTitle% of type %PostType% in the editor. View the post: %EditorLinkPost%."
1089
  msgstr ""
1090
 
1091
- #: defaults.php:1451
1092
  msgid "User viewed a custom post type"
1093
  msgstr ""
1094
 
1095
- #: defaults.php:1452
1096
  msgid "Viewed the custom post %PostTitle% of type %PostType%. View the post: %PostUrl%."
1097
  msgstr ""
1098
 
1099
- #: defaults.php:1457
1100
  msgid "A plugin created a custom post"
1101
  msgstr ""
1102
 
1103
- #: defaults.php:1458
1104
  msgid "A plugin automatically created the following custom post: %PostTitle%."
1105
  msgstr ""
1106
 
1107
- #: defaults.php:1463
1108
  msgid "A plugin deleted a custom post"
1109
  msgstr ""
1110
 
1111
- #: defaults.php:1464
1112
  msgid "A plugin automatically deleted the following custom post: %PostTitle%."
1113
  msgstr ""
1114
 
1115
- #: defaults.php:1469
1116
  msgid "A plugin modified a custom post"
1117
  msgstr ""
1118
 
1119
- #: defaults.php:1470
1120
  msgid "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
1121
  msgstr ""
1122
 
1123
- #: defaults.php:1482, extensions/reports/classes/HtmlReportGenerator.php:540
1124
  msgid "Pages"
1125
  msgstr ""
1126
 
1127
- #: defaults.php:1486
1128
  msgid "User created a new WordPress page and saved it as draft"
1129
  msgstr ""
1130
 
1131
- #: defaults.php:1487
1132
  msgid "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage%."
1133
  msgstr ""
1134
 
1135
- #: defaults.php:1492
1136
  msgid "User published a WordPress page"
1137
  msgstr ""
1138
 
1139
- #: defaults.php:1493
1140
  msgid "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
1141
  msgstr ""
1142
 
1143
- #: defaults.php:1498
1144
  msgid "User modified a published WordPress page"
1145
  msgstr ""
1146
 
1147
- #: defaults.php:1499
1148
  msgid "Modified the published page %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
1149
  msgstr ""
1150
 
1151
- #: defaults.php:1504
1152
  msgid "User modified a draft WordPress page"
1153
  msgstr ""
1154
 
1155
- #: defaults.php:1505
1156
  msgid "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
1157
  msgstr ""
1158
 
1159
- #: defaults.php:1510
1160
  msgid "User permanently deleted a page from the trash"
1161
  msgstr ""
1162
 
1163
- #: defaults.php:1511
1164
  msgid "Permanently deleted the page %PostTitle%."
1165
  msgstr ""
1166
 
1167
- #: defaults.php:1516
1168
  msgid "User moved WordPress page to the trash"
1169
  msgstr ""
1170
 
1171
- #: defaults.php:1517
1172
  msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
1173
  msgstr ""
1174
 
1175
- #: defaults.php:1522
1176
  msgid "User restored a WordPress page from trash"
1177
  msgstr ""
1178
 
1179
- #: defaults.php:1523
1180
  msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
1181
  msgstr ""
1182
 
1183
- #: defaults.php:1528
1184
  msgid "User changed page URL"
1185
  msgstr ""
1186
 
1187
- #: defaults.php:1529
1188
  msgid "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPage%."
1189
  msgstr ""
1190
 
1191
- #: defaults.php:1534
1192
  msgid "User changed page author"
1193
  msgstr ""
1194
 
1195
- #: defaults.php:1535
1196
  msgid "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. %EditorLinkPage%."
1197
  msgstr ""
1198
 
1199
- #: defaults.php:1540
1200
  msgid "User changed page status"
1201
  msgstr ""
1202
 
1203
- #: defaults.php:1541
1204
  msgid "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. %EditorLinkPage%."
1205
  msgstr ""
1206
 
1207
- #: defaults.php:1546
1208
  msgid "User changed the visibility of a page post"
1209
  msgstr ""
1210
 
1211
- #: defaults.php:1547
1212
  msgid "Changed the visibility of the page %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPage%."
1213
  msgstr ""
1214
 
1215
- #: defaults.php:1552
1216
  msgid "User changed the date of a page post"
1217
  msgstr ""
1218
 
1219
- #: defaults.php:1553
1220
  msgid "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPage%."
1221
  msgstr ""
1222
 
1223
- #: defaults.php:1558
1224
  msgid "User created a custom field for a page"
1225
  msgstr ""
1226
 
1227
- #: defaults.php:1559
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:1564
1232
  msgid "User updated a custom field value for a page"
1233
  msgstr ""
1234
 
1235
- #: defaults.php:1565
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:1570
1240
  msgid "User deleted a custom field from a page"
1241
  msgstr ""
1242
 
1243
- #: defaults.php:1571
1244
  msgid "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% %EditorLinkPage%<br>%MetaLink%."
1245
  msgstr ""
1246
 
1247
- #: defaults.php:1576
1248
  msgid "User updated a custom field name for a page"
1249
  msgstr ""
1250
 
1251
- #: defaults.php:1577
1252
  msgid "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
1253
  msgstr ""
1254
 
1255
- #: defaults.php:1582
1256
  msgid "User modified content for a published page"
1257
  msgstr ""
1258
 
1259
- #: defaults.php:1583
1260
  msgid "Modified the content of the published page %PostTitle%. Page URL is %PostUrl%. %RevisionLink% %EditorLinkPage%."
1261
  msgstr ""
1262
 
1263
- #: defaults.php:1588
1264
  msgid "User modified content for a draft page"
1265
  msgstr ""
1266
 
1267
- #: defaults.php:1589
1268
  msgid "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage%."
1269
  msgstr ""
1270
 
1271
- #: defaults.php:1594
1272
  msgid "User scheduled a page"
1273
  msgstr ""
1274
 
1275
- #: defaults.php:1595
1276
  msgid "Scheduled the page %PostTitle% to be published %PublishingDate%. %EditorLinkPage%."
1277
  msgstr ""
1278
 
1279
- #: defaults.php:1600
1280
  msgid "User changed title of a page"
1281
  msgstr ""
1282
 
1283
- #: defaults.php:1601
1284
  msgid "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
1285
  msgstr ""
1286
 
1287
- #: defaults.php:1606
1288
  msgid "User opened a page in the editor"
1289
  msgstr ""
1290
 
1291
- #: defaults.php:1607
1292
  msgid "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
1293
  msgstr ""
1294
 
1295
- #: defaults.php:1612
1296
  msgid "User viewed a page"
1297
  msgstr ""
1298
 
1299
- #: defaults.php:1613
1300
  msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
1301
  msgstr ""
1302
 
1303
- #: defaults.php:1618
1304
  msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
1305
  msgstr ""
1306
 
1307
- #: defaults.php:1619
1308
  msgid "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
1309
  msgstr ""
1310
 
1311
- #: defaults.php:1624
1312
  msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
1313
  msgstr ""
1314
 
1315
- #: defaults.php:1625
1316
  msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
1317
  msgstr ""
1318
 
1319
- #: defaults.php:1630
1320
  msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
1321
  msgstr ""
1322
 
1323
- #: defaults.php:1631
1324
  msgid "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
1325
  msgstr ""
1326
 
1327
- #: defaults.php:1636
1328
  msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
1329
  msgstr ""
1330
 
1331
- #: defaults.php:1637
1332
  msgid "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
1333
  msgstr ""
1334
 
1335
- #: defaults.php:1642
1336
  msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
1337
  msgstr ""
1338
 
1339
- #: defaults.php:1643
1340
  msgid "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
1341
  msgstr ""
1342
 
1343
- #: defaults.php:1648
1344
  msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
1345
  msgstr ""
1346
 
1347
- #: defaults.php:1649
1348
  msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
1349
  msgstr ""
1350
 
1351
- #: defaults.php:1654
1352
  msgid "A plugin created a page"
1353
  msgstr ""
1354
 
1355
- #: defaults.php:1655
1356
  msgid "A plugin automatically created the following page: %PostTitle%."
1357
  msgstr ""
1358
 
1359
- #: defaults.php:1660
1360
  msgid "A plugin deleted a page"
1361
  msgstr ""
1362
 
1363
- #: defaults.php:1661
1364
  msgid "A plugin automatically deleted the following page: %PostTitle%."
1365
  msgstr ""
1366
 
1367
- #: defaults.php:1666
1368
  msgid "A plugin modified a page"
1369
  msgstr ""
1370
 
1371
- #: defaults.php:1667
1372
  msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
1373
  msgstr ""
1374
 
1375
- #: defaults.php:1672
1376
  msgid "User Accounts"
1377
  msgstr ""
1378
 
1379
- #: defaults.php:1673
1380
  msgid "User Profiles"
1381
  msgstr ""
1382
 
1383
- #: defaults.php:1677
1384
  msgid "New user was created on WordPress"
1385
  msgstr ""
1386
 
1387
- #: defaults.php:1678
1388
  msgid "A new user %NewUserData->Username% is created via registration."
1389
  msgstr ""
1390
 
1391
- #: defaults.php:1680, classes/AlertManager.php:1140, classes/AuditLogListView.php:299, classes/AuditLogListView.php:333, classes/WidgetManager.php:76, classes/Views/Settings.php:1094, extensions/external-db/classes/Common.php:964, 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:1689
1396
  msgid "User created another WordPress user"
1397
  msgstr ""
1398
 
1399
- #: defaults.php:1690
1400
  msgid "Created the new user: %NewUserData->Username%."
1401
  msgstr ""
1402
 
1403
- #: defaults.php:1693, defaults.php:1707, defaults.php:1721, defaults.php:1735, defaults.php:1749, defaults.php:1764, defaults.php:1779, defaults.php:1793, defaults.php:1807, defaults.php:1823, defaults.php:1852, defaults.php:1866, defaults.php:1881, defaults.php:1897, defaults.php:1911, defaults.php:1926, defaults.php:1940, defaults.php:1954, defaults.php:1971, defaults.php:1985, defaults.php:1999, defaults.php:2013, defaults.php:2026
1404
  msgid "First name"
1405
  msgstr ""
1406
 
1407
- #: defaults.php:1694, defaults.php:1708, defaults.php:1722, defaults.php:1736, defaults.php:1750, defaults.php:1765, defaults.php:1780, defaults.php:1794, defaults.php:1808, defaults.php:1824, defaults.php:1839, defaults.php:1867, defaults.php:1882, defaults.php:1898, defaults.php:1912, defaults.php:1927, defaults.php:1941, defaults.php:1955, defaults.php:1972, defaults.php:1986, defaults.php:2000, defaults.php:2014, defaults.php:2027
1408
  msgid "Last name"
1409
  msgstr ""
1410
 
1411
- #: defaults.php:1703
1412
  msgid "The role of a user was changed by another WordPress user"
1413
  msgstr ""
1414
 
1415
- #: defaults.php:1704
1416
  msgid "Changed the role of user %TargetUsername% to %NewRole%."
1417
  msgstr ""
1418
 
1419
- #: defaults.php:1706, defaults.php:2513
1420
  msgid "Previous role"
1421
  msgstr ""
1422
 
1423
- #: defaults.php:1717
1424
  msgid "User has changed his or her password"
1425
  msgstr ""
1426
 
1427
- #: defaults.php:1718
1428
  msgid "Changed the password."
1429
  msgstr ""
1430
 
1431
- #: defaults.php:1731
1432
  msgid "User changed another user's password"
1433
  msgstr ""
1434
 
1435
- #: defaults.php:1732
1436
  msgid "Changed the password of the user %TargetUserData->Username%."
1437
  msgstr ""
1438
 
1439
- #: defaults.php:1745
1440
  msgid "User changed his or her email address"
1441
  msgstr ""
1442
 
1443
- #: defaults.php:1746
1444
  msgid "Changed the email address to %NewEmail%."
1445
  msgstr ""
1446
 
1447
- #: defaults.php:1751, defaults.php:1766
1448
  msgid "Previous email address"
1449
  msgstr ""
1450
 
1451
- #: defaults.php:1760
1452
  msgid "User changed another user's email address"
1453
  msgstr ""
1454
 
1455
- #: defaults.php:1761
1456
  msgid "Changed the email address of the user %TargetUsername% to %NewEmail%."
1457
  msgstr ""
1458
 
1459
- #: defaults.php:1775
1460
  msgid "User was deleted by another user"
1461
  msgstr ""
1462
 
1463
- #: defaults.php:1776
1464
  msgid "Deleted the user %TargetUserData->Username%."
1465
  msgstr ""
1466
 
1467
- #: defaults.php:1789
1468
  msgid "User opened the profile page of another user"
1469
  msgstr ""
1470
 
1471
- #: defaults.php:1790
1472
  msgid "Opened the profile page of user %TargetUsername%."
1473
  msgstr ""
1474
 
1475
- #: defaults.php:1803
1476
  msgid "User updated a custom field value for a user"
1477
  msgstr ""
1478
 
1479
- #: defaults.php:1804
1480
  msgid "Changed the value of the custom field %custom_field_name% in the user profile %TargetUsername%."
1481
  msgstr ""
1482
 
1483
- #: defaults.php:1809, defaults.php:2603, defaults.php:2635, defaults.php:2899
1484
  msgid "Previous value"
1485
  msgstr ""
1486
 
1487
- #: defaults.php:1810, defaults.php:2900
1488
  msgid "New value"
1489
  msgstr ""
1490
 
1491
- #: defaults.php:1819
1492
  msgid "User created a custom field value for a user"
1493
  msgstr ""
1494
 
1495
- #: defaults.php:1820
1496
  msgid "Created the custom field %custom_field_name% in the user profile %TargetUsername%."
1497
  msgstr ""
1498
 
1499
- #: defaults.php:1834
1500
  msgid "User changed first name for a user"
1501
  msgstr ""
1502
 
1503
- #: defaults.php:1835
1504
  msgid "Changed the first name of the user %TargetUsername% to %new_firstname%."
1505
  msgstr ""
1506
 
1507
- #: defaults.php:1838
1508
  msgid "Previous name"
1509
  msgstr ""
1510
 
1511
- #: defaults.php:1848
1512
  msgid "User changed last name for a user"
1513
  msgstr ""
1514
 
1515
- #: defaults.php:1849
1516
  msgid "Changed the last name of the user %TargetUsername% to %new_lastname%."
1517
  msgstr ""
1518
 
1519
- #: defaults.php:1853
1520
  msgid "Previous last name"
1521
  msgstr ""
1522
 
1523
- #: defaults.php:1862
1524
  msgid "User changed nickname for a user"
1525
  msgstr ""
1526
 
1527
- #: defaults.php:1863
1528
  msgid "Changed the nickname of the user %TargetUsername% to %new_nickname%."
1529
  msgstr ""
1530
 
1531
- #: defaults.php:1868
1532
  msgid "Previous nickname"
1533
  msgstr ""
1534
 
1535
- #: defaults.php:1877
1536
  msgid "User changed the display name for a user"
1537
  msgstr ""
1538
 
1539
- #: defaults.php:1878
1540
  msgid "Changed the display name of the user %TargetUsername% to %new_displayname%."
1541
  msgstr ""
1542
 
1543
- #: defaults.php:1883
1544
  msgid "Previous display name"
1545
  msgstr ""
1546
 
1547
- #: defaults.php:1893, defaults.php:1907
1548
  msgid "User created an application password"
1549
  msgstr ""
1550
 
1551
- #: defaults.php:1894
1552
  msgid "The application password %friendly_name%."
1553
  msgstr ""
1554
 
1555
- #: defaults.php:1908
1556
  msgid "The application password %friendly_name% for the user %login%."
1557
  msgstr ""
1558
 
1559
- #: defaults.php:1922
1560
  msgid "User revoked all application passwords"
1561
  msgstr ""
1562
 
1563
- #: defaults.php:1923
1564
  msgid "All application passwords."
1565
  msgstr ""
1566
 
1567
- #: defaults.php:1936
1568
  msgid "User revoked all application passwords for a user"
1569
  msgstr ""
1570
 
1571
- #: defaults.php:1937
1572
  msgid "All application passwords from the user %login%."
1573
  msgstr ""
1574
 
1575
- #: defaults.php:1950
1576
  msgid "Admin sent a password reset request to a user"
1577
  msgstr ""
1578
 
1579
- #: defaults.php:1951
1580
  msgid "Sent a password reset request to the user %login%."
1581
  msgstr ""
1582
 
1583
- #: defaults.php:1963
1584
  msgid "Multisite User Profiles"
1585
  msgstr ""
1586
 
1587
- #: defaults.php:1967
1588
  msgid "User granted Super Admin privileges"
1589
  msgstr ""
1590
 
1591
- #: defaults.php:1968
1592
  msgid "Granted Super Admin privileges to the user %TargetUsername%."
1593
  msgstr ""
1594
 
1595
- #: defaults.php:1981
1596
  msgid "User revoked from Super Admin privileges"
1597
  msgstr ""
1598
 
1599
- #: defaults.php:1982
1600
  msgid "Revoked Super Admin privileges from %TargetUsername%."
1601
  msgstr ""
1602
 
1603
- #: defaults.php:1995
1604
  msgid "Existing user added to a site"
1605
  msgstr ""
1606
 
1607
- #: defaults.php:1996
1608
  msgid "Added user %TargetUsername% to the site %SiteName%."
1609
  msgstr ""
1610
 
1611
- #: defaults.php:2009
1612
  msgid "User removed from site"
1613
  msgstr ""
1614
 
1615
- #: defaults.php:2010
1616
  msgid "Removed user %TargetUsername% from the site %SiteName%"
1617
  msgstr ""
1618
 
1619
- #: defaults.php:2012
1620
  msgid "Site role"
1621
  msgstr ""
1622
 
1623
- #: defaults.php:2023
1624
  msgid "New network user created"
1625
  msgstr ""
1626
 
1627
- #: defaults.php:2024
1628
  msgid "Created the new network user %NewUserData->Username%."
1629
  msgstr ""
1630
 
1631
- #: defaults.php:2036
1632
  msgid "Plugins & Themes"
1633
  msgstr ""
1634
 
1635
- #: defaults.php:2037, classes/AuditLogGridView.php:463, classes/AuditLogListView.php:490
1636
  msgid "Plugins"
1637
  msgstr ""
1638
 
1639
- #: defaults.php:2041
1640
  msgid "User installed a plugin"
1641
  msgstr ""
1642
 
1643
- #: defaults.php:2042
1644
  msgid "Installed the plugin %Plugin->Name%."
1645
  msgstr ""
1646
 
1647
- #: defaults.php:2044, defaults.php:2057, defaults.php:2070, defaults.php:2083, defaults.php:2188, defaults.php:2201, defaults.php:2214, defaults.php:2289, defaults.php:2302
1648
  msgid "Version"
1649
  msgstr ""
1650
 
1651
- #: defaults.php:2045, defaults.php:2058, defaults.php:2071, defaults.php:2084, defaults.php:2097, defaults.php:2189, defaults.php:2202, defaults.php:2215, defaults.php:2264, defaults.php:2290, defaults.php:2303
1652
  msgid "Install location"
1653
  msgstr ""
1654
 
1655
- #: defaults.php:2054
1656
  msgid "User activated a WordPress plugin"
1657
  msgstr ""
1658
 
1659
- #: defaults.php:2055
1660
  msgid "Activated the plugin %PluginData->Name%."
1661
  msgstr ""
1662
 
1663
- #: defaults.php:2067
1664
  msgid "User deactivated a WordPress plugin"
1665
  msgstr ""
1666
 
1667
- #: defaults.php:2068
1668
  msgid "Deactivated the plugin %PluginData->Name%."
1669
  msgstr ""
1670
 
1671
- #: defaults.php:2080
1672
  msgid "User uninstalled a plugin"
1673
  msgstr ""
1674
 
1675
- #: defaults.php:2081
1676
  msgid "Uninstalled the plugin %PluginData->Name%."
1677
  msgstr ""
1678
 
1679
- #: defaults.php:2093
1680
  msgid "User upgraded a plugin"
1681
  msgstr ""
1682
 
1683
- #: defaults.php:2094
1684
  msgid "Updated the plugin %PluginData->Name%."
1685
  msgstr ""
1686
 
1687
- #: defaults.php:2096
1688
  msgid "Updated version"
1689
  msgstr ""
1690
 
1691
- #: defaults.php:2106
1692
  msgid "Plugin created table"
1693
  msgstr ""
1694
 
1695
- #: defaults.php:2107
1696
  msgid "The plugin %Plugin->Name% created this table in the database."
1697
  msgstr ""
1698
 
1699
- #: defaults.php:2109, defaults.php:2121, defaults.php:2133, defaults.php:2227, defaults.php:2239
1700
  msgid "Table"
1701
  msgstr ""
1702
 
1703
- #: defaults.php:2118
1704
  msgid "Plugin modified table structure"
1705
  msgstr ""
1706
 
1707
- #: defaults.php:2119
1708
  msgid "The plugin %Plugin->Name% modified the structure of a database table."
1709
  msgstr ""
1710
 
1711
- #: defaults.php:2130
1712
  msgid "Plugin deleted table"
1713
  msgstr ""
1714
 
1715
- #: defaults.php:2131
1716
  msgid "The plugin %Plugin->Name% deleted this table from the database."
1717
  msgstr ""
1718
 
1719
- #: defaults.php:2142
1720
  msgid "A plugin created a post"
1721
  msgstr ""
1722
 
1723
- #: defaults.php:2143
1724
  msgid "The plugin created the post %PostTitle%."
1725
  msgstr ""
1726
 
1727
- #: defaults.php:2148, defaults.php:2163, classes/AlertManager.php:1142, classes/AuditLogGridView.php:460, classes/AuditLogListView.php:486
1728
  msgid "Plugin"
1729
  msgstr ""
1730
 
1731
- #: defaults.php:2157
1732
  msgid "A plugin deleted a post"
1733
  msgstr ""
1734
 
1735
- #: defaults.php:2158
1736
  msgid "A plugin deleted the post %PostTitle%."
1737
  msgstr ""
1738
 
1739
- #: defaults.php:2172
1740
  msgid "User changed a file using the plugin editor"
1741
  msgstr ""
1742
 
1743
- #: defaults.php:2173
1744
  msgid "Modified the file %File% with the plugin editor."
1745
  msgstr ""
1746
 
1747
- #: defaults.php:2181
1748
  msgid "Themes"
1749
  msgstr ""
1750
 
1751
- #: defaults.php:2185
1752
  msgid "User installed a theme"
1753
  msgstr ""
1754
 
1755
- #: defaults.php:2186
1756
  msgid "Installed the theme %Theme->Name%."
1757
  msgstr ""
1758
 
1759
- #: defaults.php:2198
1760
  msgid "User activated a theme"
1761
  msgstr ""
1762
 
1763
- #: defaults.php:2199
1764
  msgid "Activated the theme %Theme->Name%."
1765
  msgstr ""
1766
 
1767
- #: defaults.php:2211
1768
  msgid "User uninstalled a theme"
1769
  msgstr ""
1770
 
1771
- #: defaults.php:2212
1772
  msgid "Deleted the theme %Theme->Name%."
1773
  msgstr ""
1774
 
1775
- #: defaults.php:2224
1776
  msgid "Theme created tables"
1777
  msgstr ""
1778
 
1779
- #: defaults.php:2225
1780
  msgid "The theme %Theme->Name% created this tables in the database."
1781
  msgstr ""
1782
 
1783
- #: defaults.php:2236
1784
  msgid "Theme modified tables structure"
1785
  msgstr ""
1786
 
1787
- #: defaults.php:2237
1788
  msgid "The theme %Theme->Name% modified the structure of this database table"
1789
  msgstr ""
1790
 
1791
- #: defaults.php:2248
1792
  msgid "Theme deleted tables"
1793
  msgstr ""
1794
 
1795
- #: defaults.php:2249
1796
  msgid "The theme %Theme->Name% deleted this table from the database."
1797
  msgstr ""
1798
 
1799
- #: defaults.php:2251, defaults.php:2318, defaults.php:2330, defaults.php:2342, defaults.php:2354, defaults.php:2366, defaults.php:2378
1800
  msgid "Tables"
1801
  msgstr ""
1802
 
1803
- #: defaults.php:2260
1804
  msgid "User updated a theme"
1805
  msgstr ""
1806
 
1807
- #: defaults.php:2261
1808
  msgid "Updated the theme %Theme->Name%."
1809
  msgstr ""
1810
 
1811
- #: defaults.php:2263, defaults.php:2432
1812
  msgid "New version"
1813
  msgstr ""
1814
 
1815
- #: defaults.php:2273
1816
  msgid "User changed a file using the theme editor"
1817
  msgstr ""
1818
 
1819
- #: defaults.php:2274
1820
  msgid "Modified the file %Theme%/%File% with the theme editor."
1821
  msgstr ""
1822
 
1823
- #: defaults.php:2282
1824
  msgid "Themes on Multisite"
1825
  msgstr ""
1826
 
1827
- #: defaults.php:2286
1828
  msgid "Activated theme on network"
1829
  msgstr ""
1830
 
1831
- #: defaults.php:2287
1832
  msgid "Network activated the theme %Theme->Name%."
1833
  msgstr ""
1834
 
1835
- #: defaults.php:2299
1836
  msgid "Deactivated theme from network"
1837
  msgstr ""
1838
 
1839
- #: defaults.php:2300
1840
  msgid "Network deactivated the theme %Theme->Name%."
1841
  msgstr ""
1842
 
1843
- #: defaults.php:2311
1844
  msgid "Database Events"
1845
  msgstr ""
1846
 
1847
- #: defaults.php:2315
1848
  msgid "Unknown component created tables"
1849
  msgstr ""
1850
 
1851
- #: defaults.php:2316
1852
  msgid "An unknown component created these tables in the database."
1853
  msgstr ""
1854
 
1855
- #: defaults.php:2327
1856
  msgid "Unknown component modified tables structure"
1857
  msgstr ""
1858
 
1859
- #: defaults.php:2328
1860
  msgid "An unknown component modified the structure of these database tables."
1861
  msgstr ""
1862
 
1863
- #: defaults.php:2339
1864
  msgid "Unknown component deleted tables"
1865
  msgstr ""
1866
 
1867
- #: defaults.php:2340
1868
  msgid "An unknown component deleted these tables from the database."
1869
  msgstr ""
1870
 
1871
- #: defaults.php:2351
1872
  msgid "WordPress created tables"
1873
  msgstr ""
1874
 
1875
- #: defaults.php:2352
1876
  msgid "WordPress has created these tables in the database."
1877
  msgstr ""
1878
 
1879
- #: defaults.php:2363
1880
  msgid "WordPress modified tables structure"
1881
  msgstr ""
1882
 
1883
- #: defaults.php:2364
1884
  msgid "WordPress modified the structure of these database tables."
1885
  msgstr ""
1886
 
1887
- #: defaults.php:2375
1888
  msgid "WordPress deleted tables"
1889
  msgstr ""
1890
 
1891
- #: defaults.php:2376
1892
  msgid "WordPress deleted these tables from the database."
1893
  msgstr ""
1894
 
1895
- #: defaults.php:2387
1896
  msgid "WordPress & System"
1897
  msgstr ""
1898
 
1899
- #: defaults.php:2388, classes/AlertManager.php:1141, classes/AlertManager.php:1929, classes/AuditLogGridView.php:469, classes/AuditLogListView.php:498, extensions/email-notifications/classes/DailyNotification.php:240, extensions/email-notifications/classes/Notifier.php:639, extensions/reports/classes/Common.php:1258
1900
  msgid "System"
1901
  msgstr ""
1902
 
1903
- #: defaults.php:2392
1904
  msgid "Unknown Error"
1905
  msgstr ""
1906
 
1907
- #: defaults.php:2393
1908
  msgid "An unexpected error has occurred."
1909
  msgstr ""
1910
 
1911
- #: defaults.php:2398
1912
  msgid "PHP error"
1913
  msgstr ""
1914
 
1915
- #: defaults.php:2399, defaults.php:2405, defaults.php:2411, defaults.php:2417, defaults.php:2423
1916
  msgid "%Message%."
1917
  msgstr ""
1918
 
1919
- #: defaults.php:2404
1920
  msgid "PHP warning"
1921
  msgstr ""
1922
 
1923
- #: defaults.php:2410
1924
  msgid "PHP notice"
1925
  msgstr ""
1926
 
1927
- #: defaults.php:2416
1928
  msgid "PHP exception"
1929
  msgstr ""
1930
 
1931
- #: defaults.php:2422
1932
  msgid "PHP shutdown error"
1933
  msgstr ""
1934
 
1935
- #: defaults.php:2428
1936
  msgid "WordPress was updated"
1937
  msgstr ""
1938
 
1939
- #: defaults.php:2429
1940
  msgid "Updated WordPress."
1941
  msgstr ""
1942
 
1943
- #: defaults.php:2431
1944
  msgid "Previous version"
1945
  msgstr ""
1946
 
1947
- #: defaults.php:2448
1948
  msgid "Advertising Extensions"
1949
  msgstr ""
1950
 
1951
- #: defaults.php:2449
1952
  msgid "%PromoName% %PromoMessage%"
1953
  msgstr ""
1954
 
1955
- #: defaults.php:2453
1956
  msgid "Activity log plugin"
1957
  msgstr ""
1958
 
1959
- #: defaults.php:2457
1960
  msgid "Events automatically pruned by system"
1961
  msgstr ""
1962
 
1963
- #: defaults.php:2458
1964
  msgid "System automatically deleted %EventCount% events from the activity log."
1965
  msgstr ""
1966
 
1967
- #: defaults.php:2467
1968
  msgid "Reset the plugin's settings to default"
1969
  msgstr ""
1970
 
1971
- #: defaults.php:2468
1972
  msgid "Reset the activity log plugin's settings to default."
1973
  msgstr ""
1974
 
1975
- #: defaults.php:2477
1976
  msgid "Purged the activity log"
1977
  msgstr ""
1978
 
1979
- #: defaults.php:2478
1980
  msgid "Purged the activity log."
1981
  msgstr ""
1982
 
1983
- #: defaults.php:2487
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:2488
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:2496
1992
  msgid "WordPress Site Settings"
1993
  msgstr ""
1994
 
1995
- #: defaults.php:2500
1996
  msgid "Option Anyone Can Register in WordPress settings changed"
1997
  msgstr ""
1998
 
1999
- #: defaults.php:2501
2000
  msgid "The <strong>Membership</strong> setting <strong>Anyone can register</strong>."
2001
  msgstr ""
2002
 
2003
- #: defaults.php:2510
2004
  msgid "New User Default Role changed"
2005
  msgstr ""
2006
 
2007
- #: defaults.php:2511
2008
  msgid "Changed the <strong>New user default role</strong> WordPress setting."
2009
  msgstr ""
2010
 
2011
- #: defaults.php:2514
2012
  msgid "New role"
2013
  msgstr ""
2014
 
2015
- #: defaults.php:2523
2016
  msgid "WordPress Administrator Notification email changed"
2017
  msgstr ""
2018
 
2019
- #: defaults.php:2524
2020
  msgid "Change the <strong>Administrator email address</strong> in the WordPress settings."
2021
  msgstr ""
2022
 
2023
- #: defaults.php:2526
2024
  msgid "Previous address"
2025
  msgstr ""
2026
 
2027
- #: defaults.php:2527
2028
  msgid "New address"
2029
  msgstr ""
2030
 
2031
- #: defaults.php:2536
2032
  msgid "User changes the WordPress Permalinks"
2033
  msgstr ""
2034
 
2035
- #: defaults.php:2537
2036
  msgid "Changed the <strong>WordPress permalinks</strong>."
2037
  msgstr ""
2038
 
2039
- #: defaults.php:2539
2040
  msgid "Previous permalinks"
2041
  msgstr ""
2042
 
2043
- #: defaults.php:2540
2044
  msgid "New permalinks"
2045
  msgstr ""
2046
 
2047
- #: defaults.php:2549
2048
  msgid "Enabled/Disabled the option Discourage search engines from indexing this site"
2049
  msgstr ""
2050
 
2051
- #: defaults.php:2550
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:2559
2056
  msgid "Enabled/Disabled comments on all the website"
2057
  msgstr ""
2058
 
2059
- #: defaults.php:2560
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:2570
2064
  msgid "Enabled/Disabled the option Comment author must fill out name and email"
2065
  msgstr ""
2066
 
2067
- #: defaults.php:2571
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:2580
2072
  msgid "Enabled/Disabled the option Users must be logged in and registered to comment"
2073
  msgstr ""
2074
 
2075
- #: defaults.php:2581
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:2590
2080
  msgid "Enabled/Disabled the option to automatically close comments"
2081
  msgstr ""
2082
 
2083
- #: defaults.php:2591
2084
  msgid "Changed the status of the WordPress setting <strong>Automatically close comments after %Value% days</strong>."
2085
  msgstr ""
2086
 
2087
- #: defaults.php:2600
2088
  msgid "Changed the value of the option Automatically close comments"
2089
  msgstr ""
2090
 
2091
- #: defaults.php:2601
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:2612
2096
  msgid "Enabled/Disabled the option for comments to be manually approved"
2097
  msgstr ""
2098
 
2099
- #: defaults.php:2613
2100
  msgid "Changed the value of the WordPress setting <strong>Comments must be manualy approved</strong>."
2101
  msgstr ""
2102
 
2103
- #: defaults.php:2622
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:2623
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:2632
2112
  msgid "Changed the number of links that a comment must have to be held in the queue"
2113
  msgstr ""
2114
 
2115
- #: defaults.php:2633
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:2644
2120
  msgid "Modified the list of keywords for comments moderation"
2121
  msgstr ""
2122
 
2123
- #: defaults.php:2645
2124
  msgid "Modified the list of keywords for comments medoration in WordPress."
2125
  msgstr ""
2126
 
2127
- #: defaults.php:2654
2128
  msgid "Modified the list of keywords for comments blacklisting"
2129
  msgstr ""
2130
 
2131
- #: defaults.php:2655
2132
  msgid "Modified the list of <strong>Disallowed comment keys</strong> (keywords) for comments blacklisting in WordPress."
2133
  msgstr ""
2134
 
2135
- #: defaults.php:2664
2136
  msgid "Option WordPress Address (URL) in WordPress settings changed"
2137
  msgstr ""
2138
 
2139
- #: defaults.php:2665
2140
  msgid "Changed the <strong>WordPress address (URL)</strong> tp %new_url%."
2141
  msgstr ""
2142
 
2143
- #: defaults.php:2676
2144
  msgid "Option Site Address (URL) in WordPress settings changed"
2145
  msgstr ""
2146
 
2147
- #: defaults.php:2677
2148
  msgid "Changed the <strong>Site address (URL)</strong> to %new_url%."
2149
  msgstr ""
2150
 
2151
- #: defaults.php:2688
2152
  msgid "Option Your homepage displays in WordPress settings changed"
2153
  msgstr ""
2154
 
2155
- #: defaults.php:2689
2156
  msgid "Changed the <strong>Your homepage displays</strong> WordPress setting to %new_homepage%."
2157
  msgstr ""
2158
 
2159
- #: defaults.php:2691, defaults.php:2778, defaults.php:2924
2160
  msgid "Previous setting"
2161
  msgstr ""
2162
 
2163
- #: defaults.php:2700
2164
  msgid "Option homepage in WordPress settings changed"
2165
  msgstr ""
2166
 
2167
- #: defaults.php:2701
2168
  msgid "Changed the <strong>Homepage</strong> in the WordPress settings to %new_page%."
2169
  msgstr ""
2170
 
2171
- #: defaults.php:2703, defaults.php:2715
2172
  msgid "Previous page"
2173
  msgstr ""
2174
 
2175
- #: defaults.php:2712
2176
  msgid "Option posts page in WordPress settings changed"
2177
  msgstr ""
2178
 
2179
- #: defaults.php:2713
2180
  msgid "Changed the <strong> Posts</strong> page in the WordPress settings to %new_page%."
2181
  msgstr ""
2182
 
2183
- #: defaults.php:2725
2184
  msgid "Option Timezone in WordPress settings changed"
2185
  msgstr ""
2186
 
2187
- #: defaults.php:2726
2188
  msgid "Changed the <strong>Timezone</strong> in the WordPress settings to %new_timezone%."
2189
  msgstr ""
2190
 
2191
- #: defaults.php:2728
2192
  msgid "Previous timezone"
2193
  msgstr ""
2194
 
2195
- #: defaults.php:2737
2196
  msgid "Option Date format in WordPress settings changed"
2197
  msgstr ""
2198
 
2199
- #: defaults.php:2738
2200
  msgid "Changed the <strong>Date format</strong> in the WordPress settings to %new_date_format%."
2201
  msgstr ""
2202
 
2203
- #: defaults.php:2740, defaults.php:2752
2204
  msgid "Previous format"
2205
  msgstr ""
2206
 
2207
- #: defaults.php:2749
2208
  msgid "Option Time format in WordPress settings changed"
2209
  msgstr ""
2210
 
2211
- #: defaults.php:2750
2212
  msgid "Changed the <strong>Time format</strong> in the WordPress settings to %new_time_format%."
2213
  msgstr ""
2214
 
2215
- #: defaults.php:2762
2216
  msgid "Option Automatic updates setting changed"
2217
  msgstr ""
2218
 
2219
- #: defaults.php:2763
2220
  msgid "Changed the <strong>Automatic updates</strong> setting."
2221
  msgstr ""
2222
 
2223
- #: defaults.php:2765
2224
  msgid "New setting status"
2225
  msgstr ""
2226
 
2227
- #: defaults.php:2775
2228
  msgid "Option Site Language setting changed"
2229
  msgstr ""
2230
 
2231
- #: defaults.php:2776
2232
  msgid "Changed the <strong>Site Language</strong> to %new_value%."
2233
  msgstr ""
2234
 
2235
- #: defaults.php:2787
2236
  msgid "Multisite Network Sites"
2237
  msgstr ""
2238
 
2239
- #: defaults.php:2788
2240
  msgid "MultiSite"
2241
  msgstr ""
2242
 
2243
- #: defaults.php:2792
2244
  msgid "New site added on the network"
2245
  msgstr ""
2246
 
2247
- #: defaults.php:2793
2248
  msgid "Added the new site %SiteName% to the network."
2249
  msgstr ""
2250
 
2251
- #: defaults.php:2795, defaults.php:2807, defaults.php:2819, defaults.php:2831, defaults.php:2843, defaults.php:2855
2252
  msgid "URL"
2253
  msgstr ""
2254
 
2255
- #: defaults.php:2804
2256
  msgid "Existing site archived"
2257
  msgstr ""
2258
 
2259
- #: defaults.php:2805
2260
  msgid "Archived the site %SiteName% on the network."
2261
  msgstr ""
2262
 
2263
- #: defaults.php:2816
2264
  msgid "Archived site has been unarchived"
2265
  msgstr ""
2266
 
2267
- #: defaults.php:2817
2268
  msgid "Unarchived the site %SiteName%."
2269
  msgstr ""
2270
 
2271
- #: defaults.php:2828
2272
  msgid "Deactivated site has been activated"
2273
  msgstr ""
2274
 
2275
- #: defaults.php:2829
2276
  msgid "Activated the site %SiteName% on the network."
2277
  msgstr ""
2278
 
2279
- #: defaults.php:2840
2280
  msgid "Site has been deactivated"
2281
  msgstr ""
2282
 
2283
- #: defaults.php:2841
2284
  msgid "Deactiveated the site %SiteName% on the network."
2285
  msgstr ""
2286
 
2287
- #: defaults.php:2852
2288
  msgid "Existing site deleted from network"
2289
  msgstr ""
2290
 
2291
- #: defaults.php:2853
2292
  msgid "The site: %SiteName%."
2293
  msgstr ""
2294
 
2295
- #: defaults.php:2864
2296
  msgid "Allow site administrators to add new users to their sites settings changed"
2297
  msgstr ""
2298
 
2299
- #: defaults.php:2865
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:2874
2304
  msgid "Site upload space settings changed"
2305
  msgstr ""
2306
 
2307
- #: defaults.php:2875
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:2884
2312
  msgid "Site upload space file size settings changed"
2313
  msgstr ""
2314
 
2315
- #: defaults.php:2885
2316
  msgid "Changed the file size in the <strong>Site upload space</strong> network setting to %new_value%."
2317
  msgstr ""
2318
 
2319
- #: defaults.php:2887
2320
  msgid "Previous size (MB)"
2321
  msgstr ""
2322
 
2323
- #: defaults.php:2896
2324
  msgid "Site Upload file types settings changed"
2325
  msgstr ""
2326
 
2327
- #: defaults.php:2897
2328
  msgid "Changed the network setting <strong>Upload file types (list of allowed file types)</strong>."
2329
  msgstr ""
2330
 
2331
- #: defaults.php:2909
2332
  msgid "Site Max upload file size settings changed"
2333
  msgstr ""
2334
 
2335
- #: defaults.php:2910
2336
  msgid "Changed the <strong>Max upload file size</strong> network setting to %new_value%."
2337
  msgstr ""
2338
 
2339
- #: defaults.php:2912
2340
  msgid "Previous size (KB)"
2341
  msgstr ""
2342
 
2343
- #: defaults.php:2921
2344
  msgid "Allow new registrations settings changed"
2345
  msgstr ""
2346
 
2347
- #: defaults.php:2922
2348
  msgid "Changed the <strong>Allow new registrations</strong> setting to %new_setting%."
2349
  msgstr ""
2350
 
2351
- #: defaults.php:2938, classes/Views/Settings.php:99
2352
  msgid "File Changes"
2353
  msgstr ""
2354
 
2355
- #: defaults.php:2939
2356
  msgid "Monitor File Changes"
2357
  msgstr ""
2358
 
2359
- #: defaults.php:2943
2360
  msgid "Dummy"
2361
  msgstr ""
2362
 
2363
  #. translators: Username
2364
  #. translators: Username
2365
- #: wp-security-audit-log.php:920, wp-security-audit-log.php:947
2366
  msgid "Hey %1$s"
2367
  msgstr ""
2368
 
2369
- #: wp-security-audit-log.php:921
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:922, wp-security-audit-log.php:950
2374
  msgid "Note: "
2375
  msgstr ""
2376
 
2377
- #: wp-security-audit-log.php:923, wp-security-audit-log.php:951
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:949
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:971
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:972, classes/AlertManager.php:1159, extensions/external-db/classes/Connections.php:173
2392
  msgid "WP Activity Log"
2393
  msgstr ""
2394
 
2395
- #: wp-security-audit-log.php:976
2396
  msgid "Start free trial"
2397
  msgstr ""
2398
 
2399
- #: wp-security-audit-log.php:1044
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:1045
2404
  msgid "Activate the licence key now"
2405
  msgstr ""
2406
 
2407
  #. translators: Number of sites
2408
- #: wp-security-audit-log.php:1067
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:1063
2413
  msgid "%s You need to renew your license to continue using premium features."
2414
  msgstr ""
2415
 
2416
- #: wp-security-audit-log.php:1178
2417
  msgid "Error: You do not have sufficient permissions to disable this custom field."
2418
  msgstr ""
2419
 
2420
- #: wp-security-audit-log.php:1213
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:1216
2425
  msgid "Excluded Objects"
2426
  msgstr ""
2427
 
2428
- #: wp-security-audit-log.php:1217
2429
  msgid " tab in the plugin settings"
2430
  msgstr ""
2431
 
2432
- #: wp-security-audit-log.php:1230
2433
  msgid "Error: You do not have sufficient permissions to disable this alert."
2434
  msgstr ""
2435
 
2436
- #: wp-security-audit-log.php:1254
2437
  msgid "Alert %1$s is no longer being monitored.<br /> %2$s"
2438
  msgstr ""
2439
 
2440
- #: wp-security-audit-log.php:1254
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:1279, classes/Views/SetupWizard.php:270
2445
  msgid "Installing, please wait"
2446
  msgstr ""
2447
 
2448
- #: wp-security-audit-log.php:1280, classes/Views/SetupWizard.php:271
2449
  msgid "Already installed"
2450
  msgstr ""
2451
 
2452
- #: wp-security-audit-log.php:1281, 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:1282, classes/Views/SetupWizard.php:273
2457
  msgid "Extension activated"
2458
  msgstr ""
2459
 
2460
- #: wp-security-audit-log.php:1283, classes/Views/SetupWizard.php:274
2461
  msgid "Install failed"
2462
  msgstr ""
2463
 
2464
  #. translators: %s: PHP Version
2465
- #: wp-security-audit-log.php:1334
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:1336
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:1341
2475
  msgid "Please install the %s plugin on the MainWP dashboard."
2476
  msgstr ""
2477
 
2478
- #: wp-security-audit-log.php:1341
2479
  msgid "Activity Log for MainWP"
2480
  msgstr ""
2481
 
2482
  #. translators: %s: Getting started guide hyperlink
2483
- #: wp-security-audit-log.php:1343
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:1343
2488
  msgid "getting started guide"
2489
  msgstr ""
2490
 
2491
- #: wp-security-audit-log.php:1925
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:1944
2496
  msgid "Every 6 hours"
2497
  msgstr ""
2498
 
2499
- #: wp-security-audit-log.php:1948
2500
  msgid "Every 45 minutes"
2501
  msgstr ""
2502
 
2503
- #: wp-security-audit-log.php:1952
2504
  msgid "Every 30 minutes"
2505
  msgstr ""
2506
 
2507
- #: wp-security-audit-log.php:1956
2508
  msgid "Every 15 minutes"
2509
  msgstr ""
2510
 
2511
- #: wp-security-audit-log.php:1960
2512
  msgid "Every 10 minutes"
2513
  msgstr ""
2514
 
2515
- #: wp-security-audit-log.php:1964
2516
  msgid "Every 1 minute"
2517
  msgstr ""
2518
 
2519
  #. translators: 1. Deprecated method name 2. Version since deprecated
2520
- #: wp-security-audit-log.php:1978
2521
  msgid "Method %1$s is deprecated since version %2$s!"
2522
  msgstr ""
2523
 
2524
- #: classes/AlertFormatter.php:88
2525
  msgid "Exclude Custom Field from the Monitoring"
2526
  msgstr ""
2527
 
2528
- #: classes/AlertFormatter.php:112
2529
  msgid "unknown"
2530
  msgstr ""
2531
 
2532
- #: classes/AlertFormatter.php:159, classes/AlertFormatter.php:159
2533
  msgid "Download the log file."
2534
  msgstr ""
2535
 
2536
- #: classes/AlertFormatter.php:165
2537
  msgid "published"
2538
  msgstr ""
2539
 
2540
  #. translators: Event ID
2541
- #: classes/AlertManager.php:407
2542
  msgid "Event with code %d has not be registered."
2543
  msgstr ""
2544
 
2545
  #. translators: Event ID
2546
- #: classes/AlertManager.php:491
2547
  msgid "Event %s already registered with WP Activity Log."
2548
  msgstr ""
2549
 
2550
- #: classes/AlertManager.php:522
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:525
2556
  msgid "%4$s to help you solve this issue."
2557
  msgstr ""
2558
 
2559
- #: classes/AlertManager.php:527
2560
  msgid "ERROR:"
2561
  msgstr ""
2562
 
2563
- #: classes/AlertManager.php:529
2564
  msgid "Contact us"
2565
  msgstr ""
2566
 
2567
- #: classes/AlertManager.php:1143
2568
  msgid "Database"
2569
  msgstr ""
2570
 
2571
- #: classes/AlertManager.php:1145, classes/AlertManager.php:1149
2572
  msgid "File"
2573
  msgstr ""
2574
 
2575
- #: classes/AlertManager.php:1146
2576
  msgid "Tag"
2577
  msgstr ""
2578
 
2579
- #: classes/AlertManager.php:1147
2580
  msgid "Comment"
2581
  msgstr ""
2582
 
2583
- #: classes/AlertManager.php:1148
2584
  msgid "Setting"
2585
  msgstr ""
2586
 
2587
- #: classes/AlertManager.php:1150
2588
  msgid "System Setting"
2589
  msgstr ""
2590
 
2591
- #: classes/AlertManager.php:1151
2592
  msgid "MainWP Network"
2593
  msgstr ""
2594
 
2595
- #: classes/AlertManager.php:1152
2596
  msgid "MainWP"
2597
  msgstr ""
2598
 
2599
- #: classes/AlertManager.php:1153
2600
  msgid "Category"
2601
  msgstr ""
2602
 
2603
- #: classes/AlertManager.php:1154
2604
  msgid "Custom Field"
2605
  msgstr ""
2606
 
2607
- #: classes/AlertManager.php:1155
2608
  msgid "Widget"
2609
  msgstr ""
2610
 
2611
- #: classes/AlertManager.php:1156
2612
  msgid "Menu"
2613
  msgstr ""
2614
 
2615
- #: classes/AlertManager.php:1157
2616
  msgid "Theme"
2617
  msgstr ""
2618
 
2619
- #: classes/AlertManager.php:1158
2620
  msgid "Activity log"
2621
  msgstr ""
2622
 
2623
- #: classes/AlertManager.php:1160
2624
  msgid "Multisite Network"
2625
  msgstr ""
2626
 
2627
- #: classes/AlertManager.php:1161, extensions/email-notifications/classes/Common.php:1126, 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:1177
2632
  msgid "unknown object"
2633
  msgstr ""
2634
 
2635
- #: classes/AlertManager.php:1214
2636
  msgid "Login"
2637
  msgstr ""
2638
 
2639
- #: classes/AlertManager.php:1215
2640
  msgid "Logout"
2641
  msgstr ""
2642
 
2643
- #: classes/AlertManager.php:1216
2644
  msgid "Installed"
2645
  msgstr ""
2646
 
2647
- #: classes/AlertManager.php:1217
2648
  msgid "Activated"
2649
  msgstr ""
2650
 
2651
- #: classes/AlertManager.php:1218
2652
  msgid "Deactivated"
2653
  msgstr ""
2654
 
2655
- #: classes/AlertManager.php:1219
2656
  msgid "Uninstalled"
2657
  msgstr ""
2658
 
2659
- #: classes/AlertManager.php:1220
2660
  msgid "Updated"
2661
  msgstr ""
2662
 
2663
- #: classes/AlertManager.php:1221, extensions/user-sessions/classes/View/Sessions.php:145
2664
  msgid "Created"
2665
  msgstr ""
2666
 
2667
- #: classes/AlertManager.php:1222
2668
  msgid "Modified"
2669
  msgstr ""
2670
 
2671
- #: classes/AlertManager.php:1223, extensions/search/search-init.php:301
2672
  msgid "Deleted"
2673
  msgstr ""
2674
 
2675
- #: classes/AlertManager.php:1224, extensions/reports/classes/CsvReportGenerator.php:276, extensions/reports/classes/HtmlReportGenerator.php:453
2676
  msgid "Published"
2677
  msgstr ""
2678
 
2679
- #: classes/AlertManager.php:1225
2680
  msgid "Approved"
2681
  msgstr ""
2682
 
2683
- #: classes/AlertManager.php:1226
2684
  msgid "Unapproved"
2685
  msgstr ""
2686
 
2687
- #: classes/AlertManager.php:1227
2688
  msgid "Enabled"
2689
  msgstr ""
2690
 
2691
- #: classes/AlertManager.php:1228, extensions/email-notifications/classes/Notifications.php:1820
2692
  msgid "Disabled"
2693
  msgstr ""
2694
 
2695
- #: classes/AlertManager.php:1229
2696
  msgid "Added"
2697
  msgstr ""
2698
 
2699
- #: classes/AlertManager.php:1230
2700
  msgid "Failed Login"
2701
  msgstr ""
2702
 
2703
- #: classes/AlertManager.php:1231
2704
  msgid "Blocked"
2705
  msgstr ""
2706
 
2707
- #: classes/AlertManager.php:1232
2708
  msgid "Uploaded"
2709
  msgstr ""
2710
 
2711
- #: classes/AlertManager.php:1233
2712
  msgid "Restored"
2713
  msgstr ""
2714
 
2715
- #: classes/AlertManager.php:1234
2716
  msgid "Opened"
2717
  msgstr ""
2718
 
2719
- #: classes/AlertManager.php:1235
2720
  msgid "Viewed"
2721
  msgstr ""
2722
 
2723
- #: classes/AlertManager.php:1236
2724
  msgid "Started"
2725
  msgstr ""
2726
 
2727
- #: classes/AlertManager.php:1237
2728
  msgid "Stopped"
2729
  msgstr ""
2730
 
2731
- #: classes/AlertManager.php:1238
2732
  msgid "Removed"
2733
  msgstr ""
2734
 
2735
- #: classes/AlertManager.php:1239
2736
  msgid "Unblocked"
2737
  msgstr ""
2738
 
2739
- #: classes/AlertManager.php:1240
2740
  msgid "Renamed"
2741
  msgstr ""
2742
 
2743
- #: classes/AlertManager.php:1241
2744
  msgid "Duplicated"
2745
  msgstr ""
2746
 
2747
- #: classes/AlertManager.php:1242
2748
  msgid "Submitted"
2749
  msgstr ""
2750
 
2751
- #: classes/AlertManager.php:1243
2752
  msgid "Revoked"
2753
  msgstr ""
2754
 
2755
- #: classes/AlertManager.php:1260
2756
  msgid "unknown type"
2757
  msgstr ""
2758
 
2759
- #: classes/AlertManager.php:1888, classes/ConstantManager.php:146, extensions/external-db/classes/Common.php:663, extensions/external-db/classes/Common.php:900
2760
  msgid "Unknown error code."
2761
  msgstr ""
2762
 
2763
- #. translators: Site ID.
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:104
2769
  msgid "No events so far."
2770
  msgstr ""
2771
 
2772
- #: classes/AuditLogGridView.php:141, classes/AuditLogListView.php:148
2773
  msgid "List View"
2774
  msgstr ""
2775
 
2776
- #: classes/AuditLogGridView.php:142, classes/AuditLogListView.php:149
2777
  msgid "Grid View"
2778
  msgstr ""
2779
 
2780
- #: classes/AuditLogGridView.php:167, classes/AuditLogListView.php:174
2781
  msgid "Show "
2782
  msgstr ""
2783
 
2784
- #: classes/AuditLogGridView.php:175, classes/AuditLogListView.php:182
2785
  msgid " Items"
2786
  msgstr ""
2787
 
2788
- #: classes/AuditLogGridView.php:182, classes/AuditLogListView.php:189
2789
  msgid "— End of Activity Log —"
2790
  msgstr ""
2791
 
2792
- #: classes/AuditLogGridView.php:203, classes/AuditLogListView.php:210, classes/Views/AuditLog.php:624, extensions/reports/inc/wsal-reporting-view.inc.php:610
2793
  msgid "All Sites"
2794
  msgstr ""
2795
 
2796
- #: classes/AuditLogGridView.php:231, classes/AuditLogListView.php:239
2797
  msgid "Live Database"
2798
  msgstr ""
2799
 
2800
- #: classes/AuditLogGridView.php:234, classes/AuditLogListView.php:242
2801
  msgid "Archive Database"
2802
  msgstr ""
2803
 
2804
- #: classes/AuditLogGridView.php:289, classes/AuditLogGridView.php:315, classes/AuditLogListView.php:297, classes/AuditLogListView.php:327, classes/Views/Settings.php:1090, classes/Views/ToggleAlerts.php:298, extensions/external-db/classes/Common.php:959, extensions/search/classes/Filters/CodeFilter.php:38, extensions/search/classes/Filters/CodeFilter.php:64
2805
  msgid "Severity"
2806
  msgstr ""
2807
 
2808
- #: classes/AuditLogGridView.php:290, extensions/search/classes/Filters/CodeFilter.php:71
2809
  msgid "Info"
2810
  msgstr ""
2811
 
2812
- #: classes/AuditLogGridView.php:295, classes/AuditLogListView.php:307, classes/AuditLogListView.php:339, extensions/email-notifications/classes/Common.php:1124, extensions/email-notifications/classes/Common.php:1185, extensions/external-db/classes/Common.php:949, extensions/search/classes/Filters/SiteFilter.php:29
2813
  msgid "Site"
2814
  msgstr ""
2815
 
2816
- #: classes/AuditLogGridView.php:298, classes/AuditLogGridView.php:321, classes/AuditLogListView.php:310, classes/AuditLogListView.php:348, extensions/email-notifications/classes/Common.php:1129, extensions/email-notifications/classes/Common.php:1159, extensions/reports/classes/CsvReportGenerator.php:92, extensions/reports/classes/HtmlReportGenerator.php:254
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:430
2825
  msgid "Disable this type of events."
2826
  msgstr ""
2827
 
2828
- #: classes/AuditLogGridView.php:414, classes/AuditLogGridView.php:418, classes/AuditLogGridView.php:457, classes/AuditLogListView.php:441, classes/AuditLogListView.php:482
2829
  msgid "Unknown"
2830
  msgstr ""
2831
 
2832
- #: classes/AuditLogGridView.php:466, classes/AuditLogListView.php:494
2833
  msgid "Unregistered user"
2834
  msgstr ""
2835
 
2836
- #: classes/AuditLogGridView.php:442, classes/AuditLogListView.php:467
2837
  msgid "Show me all activity by this User"
2838
  msgstr ""
2839
 
2840
- #: classes/AuditLogGridView.php:503, classes/AuditLogGridView.php:516, classes/AuditLogListView.php:530, classes/AuditLogListView.php:543
2841
  msgid "Show me all activity originating from this IP Address"
2842
  msgstr ""
2843
 
2844
- #: classes/AuditLogGridView.php:573, classes/AuditLogListView.php:572
2845
  msgid "View all details of this change"
2846
  msgstr ""
2847
 
2848
- #: classes/AuditLogGridView.php:574, classes/AuditLogListView.php:573
2849
  msgid "Alert Data Inspector"
2850
  msgstr ""
2851
 
2852
- #: classes/AuditLogListView.php:298, classes/AuditLogListView.php:330, 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
2853
  msgid "Date"
2854
  msgstr ""
2855
 
2856
- #: classes/AuditLogListView.php:300, classes/AuditLogListView.php:336, extensions/external-db/classes/Common.php:974, extensions/search/classes/Filters/IpFilter.php:45
2857
  msgid "IP"
2858
  msgstr ""
2859
 
2860
- #: classes/AuditLogListView.php:301, classes/AuditLogListView.php:342, classes/WidgetManager.php:77, extensions/email-notifications/classes/Common.php:1097, extensions/search/classes/Filters/ObjectFilter.php:29, extensions/search/classes/Filters/ObjectFilter.php:53
2861
  msgid "Object"
2862
  msgstr ""
2863
 
2864
- #: classes/AuditLogListView.php:302, classes/AuditLogListView.php:345, classes/WidgetManager.php:78, extensions/email-notifications/classes/Common.php:1043, extensions/email-notifications/classes/Common.php:1098, 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
2865
  msgid "Event Type"
2866
  msgstr ""
2867
 
2868
- #: classes/AuditLogListView.php:409
2869
  msgid "Click to toggle."
2870
  msgstr ""
2871
 
2872
- #: classes/AuditLogListView.php:414, classes/Models/Occurrence.php:83
2873
  msgid "Alert message not found."
2874
  msgstr ""
2875
 
2876
- #: classes/AuditLogListView.php:415, classes/Models/Occurrence.php:84
2877
  msgid "Alert description not found."
2878
  msgstr ""
2879
 
2880
- #: classes/ConstantManager.php:166, classes/Views/ToggleAlerts.php:443
2881
  msgid "Informational"
2882
  msgstr ""
2883
 
2884
- #: classes/ConstantManager.php:164, classes/Views/ToggleAlerts.php:441, extensions/search/classes/Filters/CodeFilter.php:70
2885
  msgid "Low"
2886
  msgstr ""
2887
 
2888
- #: classes/ConstantManager.php:162, classes/Views/ToggleAlerts.php:439, extensions/search/classes/Filters/CodeFilter.php:69
2889
  msgid "Medium"
2890
  msgstr ""
2891
 
2892
- #: classes/ConstantManager.php:160, classes/Views/ToggleAlerts.php:437, extensions/search/classes/Filters/CodeFilter.php:68
2893
  msgid "High"
2894
  msgstr ""
2895
 
2896
- #: classes/ConstantManager.php:158, classes/ConstantManager.php:152, classes/Views/ToggleAlerts.php:435, classes/Views/ToggleAlerts.php:429, extensions/search/classes/Filters/CodeFilter.php:67
2897
  msgid "Critical"
2898
  msgstr ""
2899
 
2900
- #: classes/ConstantManager.php:156, classes/Views/ToggleAlerts.php:445, classes/Views/ToggleAlerts.php:433
2901
  msgid "Notification"
2902
  msgstr ""
2903
 
2904
- #: classes/ConstantManager.php:154, classes/Views/ToggleAlerts.php:431
2905
  msgid "Warning"
2906
  msgstr ""
2907
 
@@ -2909,35 +2908,35 @@ msgstr ""
2909
  msgid "This function is deprecated"
2910
  msgstr ""
2911
 
2912
- #: classes/Settings.php:1643
2913
  msgid "Root directory of WordPress (excluding sub directories)"
2914
  msgstr ""
2915
 
2916
- #: classes/Settings.php:1644
2917
  msgid "WP Admin directory (/wp-admin/)"
2918
  msgstr ""
2919
 
2920
- #: classes/Settings.php:1645
2921
  msgid "WP Includes directory (/wp-includes/)"
2922
  msgstr ""
2923
 
2924
- #: classes/Settings.php:1646
2925
  msgid "/wp-content/ directory (excluding plugins, themes & uploads directories)"
2926
  msgstr ""
2927
 
2928
- #: classes/Settings.php:1647
2929
  msgid "Themes directory (/wp-content/themes/)"
2930
  msgstr ""
2931
 
2932
- #: classes/Settings.php:1648
2933
  msgid "Plugins directory (/wp-content/plugins/)"
2934
  msgstr ""
2935
 
2936
- #: classes/Settings.php:1649
2937
  msgid "Uploads directory (/wp-content/uploads/)"
2938
  msgstr ""
2939
 
2940
- #: classes/Settings.php:1654
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:299
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:200
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:225
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:712
2991
  msgid "Default template"
2992
  msgstr ""
2993
 
2994
- #: classes/Sensors/Content.php:713
2995
  msgid "Default"
2996
  msgstr ""
2997
 
2998
- #: classes/Sensors/Content.php:765
2999
  msgid "No previous image"
3000
  msgstr ""
3001
 
3002
- #: classes/Sensors/Content.php:766
3003
  msgid "No image"
3004
  msgstr ""
3005
 
3006
- #: classes/Sensors/Content.php:1111, classes/Sensors/Content.php:1119
3007
  msgid "Public"
3008
  msgstr ""
3009
 
3010
- #: classes/Sensors/Content.php:1109, classes/Sensors/Content.php:1117
3011
  msgid "Private"
3012
  msgstr ""
3013
 
3014
- #: classes/Sensors/Content.php:1107, classes/Sensors/Content.php:1115
3015
  msgid "Password Protected"
3016
  msgstr ""
3017
 
3018
- #: classes/Sensors/Content.php:1282
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:421
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:753, extensions/external-db/classes/Connections.php:787, extensions/external-db/classes/Connections.php:980, extensions/external-db/classes/Settings.php:312, extensions/external-db/classes/Settings.php:386, extensions/external-db/classes/Settings.php:1049, extensions/external-db/classes/Settings.php:1324, extensions/external-db/classes/Settings.php:1376, extensions/external-db/classes/Settings.php:1409, extensions/user-sessions/classes/Views.php:516, extensions/reports/classes/Views/Main.php:707
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:738, extensions/external-db/classes/Connections.php:772, extensions/external-db/classes/Connections.php:970, extensions/external-db/classes/Settings.php:282, extensions/external-db/classes/Settings.php:373, extensions/external-db/classes/Settings.php:1036, extensions/external-db/classes/Settings.php:1277, extensions/external-db/classes/Settings.php:1341, extensions/external-db/classes/Settings.php:1393
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:432
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:437, extensions/user-sessions/classes/View/Sessions.php:130
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:1093, extensions/email-notifications/classes/Common.php:1127, extensions/email-notifications/classes/Common.php:1156, extensions/search/classes/Filters/AlertFilter.php:26, extensions/search/classes/Filters/AlertFilter.php:51
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:521
4039
  msgid "Website File Changes Monitor"
4040
  msgstr ""
4041
 
4042
- #: classes/Views/Settings.php:1181, classes/Views/ToggleAlerts.php:522
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:523
4047
  msgid "Install plugin now"
4048
  msgstr ""
4049
 
4050
- #: classes/Views/Settings.php:1182, classes/Views/ToggleAlerts.php:523
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:214, extensions/external-db/classes/Connections.php:565, extensions/external-db/classes/Mirroring.php:286, extensions/external-db/classes/Mirroring.php:601
4332
  msgid "Next"
4333
  msgstr ""
4334
 
@@ -4432,112 +4419,112 @@ msgstr ""
4432
  msgid "Custom"
4433
  msgstr ""
4434
 
4435
- #: classes/Views/ToggleAlerts.php:179
4436
  msgid "Log Level: "
4437
  msgstr ""
4438
 
4439
- #: classes/Views/ToggleAlerts.php:186
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:196
4444
  msgid "Third party plugins"
4445
  msgstr ""
4446
 
4447
- #: classes/Views/ToggleAlerts.php:297, extensions/reports/classes/CsvReportGenerator.php:83, extensions/reports/classes/HtmlReportGenerator.php:245
4448
  msgid "Code"
4449
  msgstr ""
4450
 
4451
- #: classes/Views/ToggleAlerts.php:340
4452
  msgid "Logins & Logouts"
4453
  msgstr ""
4454
 
4455
- #: classes/Views/ToggleAlerts.php:333
4456
  msgid "Your website is a single site so the multisite events have been disabled."
4457
  msgstr ""
4458
 
4459
- #: classes/Views/ToggleAlerts.php:313
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:320
4464
  msgid "Products"
4465
  msgstr ""
4466
 
4467
- #: classes/Views/ToggleAlerts.php:326
4468
  msgid "Post Changes"
4469
  msgstr ""
4470
 
4471
- #: classes/Views/ToggleAlerts.php:306
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:363
4476
  msgid "Not Implemented"
4477
  msgstr ""
4478
 
4479
- #: classes/Views/ToggleAlerts.php:366
4480
  msgid "Not Available"
4481
  msgstr ""
4482
 
4483
- #: classes/Views/ToggleAlerts.php:381
4484
  msgid "User Logins/Logouts"
4485
  msgstr ""
4486
 
4487
- #: classes/Views/ToggleAlerts.php:384
4488
  msgid "User Sessions"
4489
  msgstr ""
4490
 
4491
- #: classes/Views/ToggleAlerts.php:387
4492
  msgid "Files"
4493
  msgstr ""
4494
 
4495
- #: classes/Views/ToggleAlerts.php:390
4496
  msgid "Post Settings"
4497
  msgstr ""
4498
 
4499
- #: classes/Views/ToggleAlerts.php:460
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:474, classes/Views/ToggleAlerts.php:487
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:501
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:547
4512
  msgid "Save Changes"
4513
  msgstr ""
4514
 
4515
- #: classes/Views/ToggleAlerts.php:554
4516
  msgid "Log Level Updated"
4517
  msgstr ""
4518
 
4519
  #. translators: Alerts log level.
4520
- #: classes/Views/ToggleAlerts.php:558
4521
  msgid "The %s log level has been successfully loaded and applied."
4522
  msgstr ""
4523
 
4524
- #: classes/Views/ToggleAlerts.php:562, extensions/email-notifications/classes/Notifications.php:298, extensions/email-notifications/classes/Notifications.php:888, extensions/email-notifications/classes/Notifications.php:1934
4525
  msgid "OK"
4526
  msgstr ""
4527
 
4528
- #: classes/Views/ToggleAlerts.php:577
4529
  msgid "Enable File Integrity Scanner"
4530
  msgstr ""
4531
 
4532
- #: classes/Views/ToggleAlerts.php:579
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:583
4537
  msgid "SWITCH ON"
4538
  msgstr ""
4539
 
4540
- #: classes/Views/ToggleAlerts.php:584
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:144, extensions/external-db/classes/Mirroring.php:204
4577
  msgid "Delete"
4578
  msgstr ""
4579
 
4580
- #: extensions/search/search-init.php:300, extensions/external-db/classes/Connections.php:556, extensions/external-db/classes/Mirroring.php:589
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:95, extensions/external-db/classes/Mirroring.php:123
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:792, extensions/email-notifications/classes/Common.php:820, extensions/email-notifications/classes/Common.php:822
4794
  msgid "Title is required."
4795
  msgstr ""
4796
 
4797
- #: extensions/email-notifications/classes/Common.php:829
4798
  msgid "Title is not valid."
4799
  msgstr ""
4800
 
4801
- #: extensions/email-notifications/classes/Common.php:839
4802
  msgid "Please add at least one condition."
4803
  msgstr ""
4804
 
4805
- #: extensions/email-notifications/classes/Common.php:887, extensions/email-notifications/classes/Common.php:893, extensions/email-notifications/classes/Common.php:898
4806
  msgid "The form is not valid. Please refresh the page and try again."
4807
  msgstr ""
4808
 
4809
- #: extensions/email-notifications/classes/Common.php:907
4810
  msgid "A trigger's condition must not be longer than 50 characters."
4811
  msgstr ""
4812
 
4813
- #: extensions/email-notifications/classes/Common.php:943
4814
  msgid "Email or Username is not valid."
4815
  msgstr ""
4816
 
4817
- #: extensions/email-notifications/classes/Common.php:950
4818
  msgid "Mobile number is not valid."
4819
  msgstr ""
4820
 
4821
- #: extensions/email-notifications/classes/Common.php:937
4822
  msgid "Email or Username is required."
4823
  msgstr ""
4824
 
4825
- #: extensions/email-notifications/classes/Common.php:938
4826
  msgid "Mobile number is required."
4827
  msgstr ""
4828
 
4829
- #: extensions/email-notifications/classes/Common.php:1002, extensions/email-notifications/classes/Notifications.php:588
4830
  msgid "Notification could not be saved."
4831
  msgstr ""
4832
 
4833
- #: extensions/email-notifications/classes/Common.php:1009, extensions/email-notifications/classes/Notifications.php:647
4834
  msgid "Notification successfully saved."
4835
  msgstr ""
4836
 
4837
- #: extensions/email-notifications/classes/Common.php:1031
4838
  msgid "Notification Title"
4839
  msgstr ""
4840
 
4841
- #: extensions/email-notifications/classes/Common.php:1032
4842
  msgid "Website Name"
4843
  msgstr ""
4844
 
4845
- #: extensions/email-notifications/classes/Common.php:1033
4846
  msgid "User Login Name"
4847
  msgstr ""
4848
 
4849
- #: extensions/email-notifications/classes/Common.php:1034
4850
  msgid "Role(s) of the User"
4851
  msgstr ""
4852
 
4853
- #: extensions/email-notifications/classes/Common.php:1035
4854
  msgid "Event generated on Date and Time"
4855
  msgstr ""
4856
 
4857
- #: extensions/email-notifications/classes/Common.php:1036
4858
  msgid "Event Code"
4859
  msgstr ""
4860
 
4861
- #: extensions/email-notifications/classes/Common.php:1037
4862
  msgid "Event Severity"
4863
  msgstr ""
4864
 
4865
- #: extensions/email-notifications/classes/Common.php:1038, extensions/email-notifications/classes/Common.php:1099
4866
  msgid "Event Message"
4867
  msgstr ""
4868
 
4869
- #: extensions/email-notifications/classes/Common.php:1039
4870
  msgid "Event Metadata"
4871
  msgstr ""
4872
 
4873
- #: extensions/email-notifications/classes/Common.php:1040
4874
  msgid "Event Links"
4875
  msgstr ""
4876
 
4877
- #: extensions/email-notifications/classes/Common.php:1041
4878
  msgid "Client IP Address"
4879
  msgstr ""
4880
 
4881
- #: extensions/email-notifications/classes/Common.php:1042
4882
  msgid "Event Object"
4883
  msgstr ""
4884
 
4885
- #: extensions/email-notifications/classes/Common.php:1089, extensions/email-notifications/classes/Common.php:1153
4886
  msgid "Notification {title} on website {site} triggered"
4887
  msgstr ""
4888
 
4889
- #: extensions/email-notifications/classes/Common.php:1090, extensions/email-notifications/classes/Common.php:1154
4890
  msgid "Notification <strong>{title}</strong> was triggered. Below are the notification details:"
4891
  msgstr ""
4892
 
4893
- #: extensions/email-notifications/classes/Common.php:1092
4894
  msgid "Website"
4895
  msgstr ""
4896
 
4897
- #: extensions/email-notifications/classes/Common.php:1094, extensions/email-notifications/classes/Common.php:1157, 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
4898
  msgid "Username"
4899
  msgstr ""
4900
 
4901
- #: extensions/email-notifications/classes/Common.php:1095
4902
  msgid "User role"
4903
  msgstr ""
4904
 
4905
- #: extensions/email-notifications/classes/Common.php:1100
4906
  msgid "Event generated on"
4907
  msgstr ""
4908
 
4909
- #: extensions/email-notifications/classes/Common.php:1102
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:1125, extensions/email-notifications/classes/Common.php:1186
4914
  msgid "User/Role"
4915
  msgstr ""
4916
 
4917
- #: extensions/email-notifications/classes/Common.php:1128
4918
  msgid "Event type"
4919
  msgstr ""
4920
 
4921
- #: extensions/email-notifications/classes/Common.php:1158, 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
4922
  msgid "User Role"
4923
  msgstr ""
4924
 
4925
- #: extensions/email-notifications/classes/Common.php:1160
4926
  msgid "Generated On"
4927
  msgstr ""
4928
 
4929
- #: extensions/email-notifications/classes/Common.php:1162
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:1187
4934
  msgid "Event"
4935
  msgstr ""
4936
 
4937
- #: extensions/email-notifications/classes/Common.php:1202
4938
  msgid "Subject "
4939
  msgstr ""
4940
 
4941
- #: extensions/email-notifications/classes/Common.php:1211
4942
  msgid "Body "
4943
  msgstr ""
4944
 
4945
- #: extensions/email-notifications/classes/Common.php:1214
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:339
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:345
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:352
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:384
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:406
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:216, extensions/external-db/classes/Mirroring.php:287
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/Connections.php:432, extensions/external-db/classes/Mirroring.php:185, extensions/external-db/classes/Settings.php:1304
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:188, extensions/external-db/classes/Settings.php:1307
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:138
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: 1- a string wrapped in a link saying to create or configure databases.
5597
- #: extensions/external-db/classes/Connections.php:80
5598
- msgid "In this section you can %1$s and services connections. These connections can be used as external activity log storage, activity log archive or to mirror the activity log to it. In use connections cannot be deleted."
5599
  msgstr ""
5600
 
5601
- #: extensions/external-db/classes/Connections.php:84
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:91, extensions/external-db/classes/Settings.php:104
5610
  msgid "Connections"
5611
  msgstr ""
5612
 
5613
- #: extensions/external-db/classes/Connections.php:97
5614
  msgid "Used for"
5615
  msgstr ""
5616
 
5617
- #: extensions/external-db/classes/Connections.php:123, extensions/external-db/classes/Mirroring.php:198
5618
  msgid "Configure"
5619
  msgstr ""
5620
 
5621
- #: extensions/external-db/classes/Connections.php:136
5622
  msgid "Send a test message"
5623
  msgstr ""
5624
 
5625
- #: extensions/external-db/classes/Connections.php:106
5626
  msgid "No connections so far."
5627
  msgstr ""
5628
 
5629
- #: extensions/external-db/classes/Connections.php:175, extensions/external-db/classes/Mirroring.php:252
5630
- msgid "Step 1"
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 "MySQL Database"
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:233, extensions/external-db/classes/Connections.php:263
5682
  msgid "Configure the connection"
5683
  msgstr ""
5684
 
5685
- #: extensions/external-db/classes/Connections.php:234, extensions/external-db/classes/Connections.php:264
5686
  msgid "Configure the connection details."
5687
  msgstr ""
5688
 
5689
- #: extensions/external-db/classes/Connections.php:249
5690
- msgid "No connection name specified!"
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:313
5775
  msgid "Database Name"
5776
  msgstr ""
5777
 
5778
- #: extensions/external-db/classes/Connections.php:317
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:322
5783
  msgid "Database User"
5784
  msgstr ""
5785
 
5786
- #: extensions/external-db/classes/Connections.php:326
5787
  msgid "Specify the username to be used to connect to the database."
5788
  msgstr ""
5789
 
5790
- #: extensions/external-db/classes/Connections.php:331
5791
  msgid "Database Password"
5792
  msgstr ""
5793
 
5794
- #: extensions/external-db/classes/Connections.php:335
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:340
5799
  msgid "Database Hostname"
5800
  msgstr ""
5801
 
5802
- #: extensions/external-db/classes/Connections.php:344
5803
  msgid "Specify the hostname or IP address of the database server."
5804
  msgstr ""
5805
 
5806
- #: extensions/external-db/classes/Connections.php:349
5807
  msgid "Database Base Prefix"
5808
  msgstr ""
5809
 
5810
- #: extensions/external-db/classes/Connections.php:359
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:363
5815
  msgid "Use website URL as table prefix"
5816
  msgstr ""
5817
 
5818
- #: extensions/external-db/classes/Connections.php:369
5819
  msgid "SSL/TLS"
5820
  msgstr ""
5821
 
5822
- #: extensions/external-db/classes/Connections.php:374, extensions/external-db/classes/Connections.php:385
5823
  msgid "Enable to use SSL/TLS to connect with the MySQL server."
5824
  msgstr ""
5825
 
5826
- #: extensions/external-db/classes/Connections.php:380
5827
  msgid "Client Certificate"
5828
  msgstr ""
5829
 
5830
- #: extensions/external-db/classes/Connections.php:389
 
 
 
 
5831
  msgid "CA SSL Certificate (--ssl-ca)"
5832
  msgstr ""
5833
 
5834
- #: extensions/external-db/classes/Connections.php:392
5835
  msgid "Server SSL Certificate (--ssl-cert)"
5836
  msgstr ""
5837
 
5838
- #: extensions/external-db/classes/Connections.php:395
5839
  msgid "Client Certificate (--ssl-key)"
5840
  msgstr ""
5841
 
5842
- #: extensions/external-db/classes/Connections.php:296
5843
  msgid "Connection Name"
5844
  msgstr ""
5845
 
5846
- #: extensions/external-db/classes/Connections.php:300
5847
- msgid "* Invalid Connection Name"
5848
  msgstr ""
5849
 
5850
- #: extensions/external-db/classes/Connections.php:554, extensions/external-db/classes/Mirroring.php:586
5851
- msgid "Connections Wizard"
5852
  msgstr ""
5853
 
5854
- #: extensions/external-db/classes/Connections.php:555, extensions/external-db/classes/Mirroring.php:588
5855
- msgid "Testing..."
5856
  msgstr ""
5857
 
5858
- #: extensions/external-db/classes/Connections.php:557, extensions/external-db/classes/Mirroring.php:592
5859
- msgid "Connection Failed!"
5860
  msgstr ""
5861
 
5862
- #: extensions/external-db/classes/Connections.php:558, extensions/external-db/classes/Mirroring.php:593
5863
- msgid "Connected"
5864
  msgstr ""
5865
 
5866
- #: extensions/external-db/classes/Connections.php:559, extensions/external-db/classes/Mirroring.php:597
5867
- msgid "Are you sure that you want to delete this connection?"
5868
  msgstr ""
5869
 
5870
- #: extensions/external-db/classes/Connections.php:564, extensions/external-db/classes/Mirroring.php:600
5871
- msgid "Configure and create connection"
5872
  msgstr ""
5873
 
5874
- #: extensions/external-db/classes/Connections.php:725
5875
- msgid "Connection failed. Please check the configuration again."
5876
  msgstr ""
5877
 
5878
- #: extensions/external-db/classes/Connections.php:954
5879
- msgid "Unknown connection type."
5880
  msgstr ""
5881
 
5882
- #: extensions/external-db/classes/Connections.php:922
5883
- msgid "WP Activity Log connection testing message."
5884
  msgstr ""
5885
 
5886
- #: extensions/external-db/classes/Connections.php:939
5887
- msgid "Successfully connected to Slack."
5888
  msgstr ""
5889
 
5890
- #: extensions/external-db/classes/Connections.php:912
5891
- msgid "Syslog connection testing failed."
5892
  msgstr ""
5893
 
5894
- #: extensions/external-db/classes/Connections.php:905, extensions/external-db/classes/Connections.php:883
5895
- msgid "Successfully connected to Syslog."
5896
  msgstr ""
5897
 
5898
- #: extensions/external-db/classes/Connections.php:884
5899
- msgid "Message sent"
5900
  msgstr ""
5901
 
5902
- #: extensions/external-db/classes/Connections.php:843
5903
- msgid "socket_sendto was unable to send activity log events."
5904
  msgstr ""
5905
 
5906
- #: extensions/external-db/classes/Connections.php:836
5907
- msgid "Successfully connected to Papertrail App."
5908
  msgstr ""
5909
 
5910
- #: extensions/external-db/classes/Connections.php:804, extensions/external-db/classes/Connections.php:1014, extensions/external-db/classes/Settings.php:1098, extensions/external-db/classes/Settings.php:1066
5911
- msgid "Successfully connected to database."
5912
  msgstr ""
5913
 
5914
- #: extensions/external-db/classes/Mirroring.php:97
5915
- msgid "external database"
5916
  msgstr ""
5917
 
5918
- #: extensions/external-db/classes/Mirroring.php:112
5919
- msgid "Syslog"
5920
  msgstr ""
5921
 
5922
- #: extensions/external-db/classes/Mirroring.php:116
5923
- msgid "In this section you can configure the mirroring of the WordPress to external databases, services and servers. You can configure multiple mirroring rules."
5924
  msgstr ""
5925
 
5926
- #: extensions/external-db/classes/Mirroring.php:117
5927
- msgid "Setup an Activity Log Mirror"
5928
  msgstr ""
5929
 
5930
- #: extensions/external-db/classes/Mirroring.php:119
5931
- msgid "The WordPress activity log is currently being mirrored to:"
5932
  msgstr ""
5933
 
5934
- #: extensions/external-db/classes/Mirroring.php:125, extensions/external-db/classes/Mirroring.php:397, extensions/reports/inc/wsal-reporting-view.inc.php:1432
5935
- msgid "Frequency"
5936
  msgstr ""
5937
 
5938
- #: extensions/external-db/classes/Mirroring.php:164, extensions/external-db/classes/Mirroring.php:401, extensions/external-db/classes/Settings.php:885
5939
- msgid "15 minutes"
5940
  msgstr ""
5941
 
5942
- #: extensions/external-db/classes/Mirroring.php:167, extensions/external-db/classes/Mirroring.php:402, extensions/external-db/classes/Settings.php:888
5943
- msgid "1 hour"
5944
  msgstr ""
5945
 
5946
- #: extensions/external-db/classes/Mirroring.php:170, extensions/external-db/classes/Mirroring.php:403, extensions/external-db/classes/Settings.php:891
5947
- msgid "6 hours"
5948
  msgstr ""
5949
 
5950
- #: extensions/external-db/classes/Mirroring.php:173, extensions/external-db/classes/Mirroring.php:404, extensions/external-db/classes/Settings.php:894
5951
- msgid "12 hours"
5952
  msgstr ""
5953
 
5954
- #: extensions/external-db/classes/Mirroring.php:176, extensions/external-db/classes/Mirroring.php:405, extensions/external-db/classes/Settings.php:897
5955
- msgid "24 hours"
 
 
 
 
 
 
 
 
 
5956
  msgstr ""
5957
 
5958
- #: extensions/external-db/classes/Mirroring.php:200
5959
- msgid "Run Now"
5960
  msgstr ""
5961
 
5962
- #: extensions/external-db/classes/Mirroring.php:213, extensions/external-db/classes/Mirroring.php:135
5963
  msgid "No mirrors so far."
5964
  msgstr ""
5965
 
5966
- #: extensions/external-db/classes/Mirroring.php:262
5967
- msgid "Select the connection where to mirror to the activity log"
5968
  msgstr ""
5969
 
5970
- #: extensions/external-db/classes/Mirroring.php:263, extensions/external-db/classes/Mirroring.php:323
5971
- 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."
5972
  msgstr ""
5973
 
5974
- #: extensions/external-db/classes/Mirroring.php:265
5975
- msgid "Select one of the connections you have configured to where you want to mirror the activity log."
 
 
 
 
5976
  msgstr ""
5977
 
5978
- #: extensions/external-db/classes/Mirroring.php:269
5979
- msgid "Configure the frequency"
5980
  msgstr ""
5981
 
5982
- #: extensions/external-db/classes/Mirroring.php:270
5983
- msgid "How often do you want to run the mirroring process?"
5984
  msgstr ""
5985
 
5986
- #: extensions/external-db/classes/Mirroring.php:273
 
 
 
 
5987
  msgid "Start once configured?"
5988
  msgstr ""
5989
 
5990
- #: extensions/external-db/classes/Mirroring.php:276
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:280
5995
  msgid "Configure Filtering"
5996
  msgstr ""
5997
 
5998
- #: extensions/external-db/classes/Mirroring.php:281
5999
  msgid "Configure any filtering you’d like to apply to this mirroring connection:"
6000
  msgstr ""
6001
 
6002
- #: extensions/external-db/classes/Mirroring.php:285
6003
  msgid "Save Mirror"
6004
  msgstr ""
6005
 
6006
- #: extensions/external-db/classes/Mirroring.php:304
6007
  msgid "No mirror name specified!"
6008
  msgstr ""
6009
 
6010
- #: extensions/external-db/classes/Mirroring.php:313
6011
  msgid "Configure Mirror → "
6012
  msgstr ""
6013
 
6014
- #: extensions/external-db/classes/Mirroring.php:324
6015
  msgid "Configure the mirror"
6016
  msgstr ""
6017
 
6018
- #: extensions/external-db/classes/Mirroring.php:325
6019
  msgid "Configure the mirror details."
6020
  msgstr ""
6021
 
6022
- #: extensions/external-db/classes/Mirroring.php:431
6023
  msgid "Mirror Events"
6024
  msgstr ""
6025
 
6026
- #: extensions/external-db/classes/Mirroring.php:447
6027
  msgid "Send all events"
6028
  msgstr ""
6029
 
6030
- #: extensions/external-db/classes/Mirroring.php:452
6031
  msgid "Only send events with these IDs:"
6032
  msgstr ""
6033
 
6034
- #: extensions/external-db/classes/Mirroring.php:485
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:518
6040
  msgid "Refer to the %s for more information."
6041
  msgstr ""
6042
 
6043
- #: extensions/external-db/classes/Mirroring.php:518
6044
  msgid "list of events and events IDs"
6045
  msgstr ""
6046
 
6047
- #: extensions/external-db/classes/Mirroring.php:362, extensions/external-db/classes/Settings.php:504, extensions/external-db/classes/Settings.php:685
6048
  msgid "Connection"
6049
  msgstr ""
6050
 
6051
- #: extensions/external-db/classes/Mirroring.php:373, extensions/external-db/classes/Settings.php:1132
6052
  msgid "Select a connection"
6053
  msgstr ""
6054
 
6055
- #: extensions/external-db/classes/Mirroring.php:348
6056
- msgid "Mirror Name"
 
 
 
 
 
 
 
 
6057
  msgstr ""
6058
 
6059
- #: extensions/external-db/classes/Mirroring.php:352
6060
  msgid "* Invalid Mirror Name"
6061
  msgstr ""
6062
 
6063
- #: extensions/external-db/classes/Mirroring.php:587
6064
  msgid "Mirroring Wizard"
6065
  msgstr ""
6066
 
6067
- #: extensions/external-db/classes/Mirroring.php:590
6068
  msgid "Enabling..."
6069
  msgstr ""
6070
 
6071
- #: extensions/external-db/classes/Mirroring.php:591
6072
  msgid "Disabling..."
6073
  msgstr ""
6074
 
6075
- #: extensions/external-db/classes/Mirroring.php:594
6076
  msgid "Running..."
6077
  msgstr ""
6078
 
6079
- #: extensions/external-db/classes/Mirroring.php:595
6080
  msgid "Mirror Complete!"
6081
  msgstr ""
6082
 
6083
- #: extensions/external-db/classes/Mirroring.php:596
6084
  msgid "Failed!"
6085
  msgstr ""
6086
 
6087
- #: extensions/external-db/classes/Mirroring.php:598
6088
  msgid "Are you sure that you want to delete this mirror?"
6089
  msgstr ""
6090
 
6091
- #: extensions/external-db/classes/Mirroring.php:599, extensions/reports/inc/wsal-reporting-view.inc.php:996
6092
  msgid "Select Event Code(s)"
6093
  msgstr ""
6094
 
6095
- #: extensions/external-db/classes/Settings.php:163
6096
- msgid "External Databases & Services Configuration"
6097
  msgstr ""
6098
 
6099
- #: extensions/external-db/classes/Settings.php:177
6100
- msgid "DB/Archive/Mirror"
6101
  msgstr ""
6102
 
6103
- #: extensions/external-db/classes/Settings.php:304
6104
- msgid "An error occurred while sending events to database."
6105
  msgstr ""
6106
 
6107
- #: extensions/external-db/classes/Settings.php:297
6108
- msgid "Events successfully sent to database."
6109
  msgstr ""
6110
 
6111
- #: extensions/external-db/classes/Settings.php:400
6112
- msgid "Mirror connection test failed."
 
 
 
 
 
 
 
 
 
 
 
 
6113
  msgstr ""
6114
 
6115
- #: extensions/external-db/classes/Settings.php:444
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:488, extensions/external-db/classes/Settings.php:669
6122
  msgid "Read more on %1$s."
6123
  msgstr ""
6124
 
6125
- #: extensions/external-db/classes/Settings.php:492
6126
  msgid "external storage for activity logs"
6127
  msgstr ""
6128
 
6129
- #: extensions/external-db/classes/Settings.php:496
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:502
6134
  msgid "Store WordPress Activity Log in this External Storage"
6135
  msgstr ""
6136
 
6137
- #: extensions/external-db/classes/Settings.php:511
6138
  msgid "Use buffer"
6139
  msgstr ""
6140
 
6141
- #: extensions/external-db/classes/Settings.php:520
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:523
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:526
6150
  msgid "Send Events to Database"
6151
  msgstr ""
6152
 
6153
- #: extensions/external-db/classes/Settings.php:531
6154
  msgid "Current Connection Details"
6155
  msgstr ""
6156
 
6157
- #: extensions/external-db/classes/Settings.php:535
 
 
 
 
6158
  msgid "Currently Connected to database"
6159
  msgstr ""
6160
 
6161
- #: extensions/external-db/classes/Settings.php:543
6162
  msgid "Save & Test Changes"
6163
  msgstr ""
6164
 
6165
- #: extensions/external-db/classes/Settings.php:545, extensions/external-db/classes/Settings.php:752
6166
  msgid "Test Connection"
6167
  msgstr ""
6168
 
6169
- #: extensions/external-db/classes/Settings.php:556
6170
  msgid "Migrate Events to External Storage"
6171
  msgstr ""
6172
 
6173
- #: extensions/external-db/classes/Settings.php:558
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:569
6178
  msgid "Migrate Events to WordPress Database"
6179
  msgstr ""
6180
 
6181
- #: extensions/external-db/classes/Settings.php:571
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:673
6186
  msgid "archiving activity log data"
6187
  msgstr ""
6188
 
6189
- #: extensions/external-db/classes/Settings.php:677
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:683
6194
  msgid "Archive the WordPress Activity Log to this Database"
6195
  msgstr ""
6196
 
6197
- #: extensions/external-db/classes/Settings.php:694
6198
  msgid "Archive events that are older than"
6199
  msgstr ""
6200
 
6201
- #: extensions/external-db/classes/Settings.php:696
6202
  msgid "Archiving Options"
6203
  msgstr ""
6204
 
6205
- #: extensions/external-db/classes/Settings.php:710
6206
  msgid "Archive events older than"
6207
  msgstr ""
6208
 
6209
- #: extensions/external-db/classes/Settings.php:714
6210
  msgid "months"
6211
  msgstr ""
6212
 
6213
- #: extensions/external-db/classes/Settings.php:717
6214
  msgid "years"
6215
  msgstr ""
6216
 
6217
- #: extensions/external-db/classes/Settings.php:723
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:729
6222
  msgid "WordPress Activity Log Data Retention"
6223
  msgstr ""
6224
 
6225
- #: extensions/external-db/classes/Settings.php:730
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:753
6230
  msgid "Execute Archiving Now"
6231
  msgstr ""
6232
 
6233
- #: extensions/external-db/classes/Settings.php:756
6234
  msgid "Reset Archiving Settings"
6235
  msgstr ""
6236
 
6237
- #: extensions/external-db/classes/Settings.php:757
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:758
6242
  msgid "Disable Archiving & Reset Settings"
6243
  msgstr ""
6244
 
6245
- #: extensions/external-db/classes/Settings.php:874
6246
  msgid "Run the Archiving Process Every"
6247
  msgstr ""
6248
 
6249
- #: extensions/external-db/classes/Settings.php:903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6250
  msgid "Stop Archiving"
6251
  msgstr ""
6252
 
6253
- #: extensions/external-db/classes/Settings.php:1004
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:1008
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:1252
 
 
 
 
 
 
 
 
6263
  msgid "Resetting..."
6264
  msgstr ""
6265
 
6266
- #: extensions/external-db/classes/Settings.php:1253
6267
  msgid "Resetting Failed!"
6268
  msgstr ""
6269
 
6270
  #. translators: %d: Number of events.
6271
- #: extensions/external-db/classes/Settings.php:1255
6272
  msgid " So far %d events have been migrated."
6273
  msgstr ""
6274
 
6275
- #: extensions/external-db/classes/Settings.php:1256
6276
  msgid "WordPress security events successfully migrated to WordPress database."
6277
  msgstr ""
6278
 
6279
- #: extensions/external-db/classes/Settings.php:1257
6280
  msgid "WordPress security events successfully migrated to the external database."
6281
  msgstr ""
6282
 
6283
- #: extensions/external-db/classes/Settings.php:1258
6284
  msgid "No events to migrate."
6285
  msgstr ""
6286
 
6287
- #: extensions/external-db/classes/Settings.php:1297
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:314
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:692
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:617
7057
  msgid " Generating reports. Please do not close this window."
7058
  msgstr ""
7059
 
7060
- #: extensions/reports/classes/Views/Main.php:630
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:648
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:652
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:234
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:140
7254
  msgid "Do not enforce policies on users with this role"
7255
  msgstr ""
7256
 
7257
- #: extensions/user-sessions/classes/View/Options/Policies.php:158
7258
  msgid "Inherit the sessions policies"
7259
  msgstr ""
7260
 
7261
- #: extensions/user-sessions/classes/View/Options/Policies.php:110
7262
  msgid "Users sessions policies"
7263
  msgstr ""
7264
 
7265
- #: extensions/user-sessions/classes/View/Options/Policies.php:112
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:117
7270
  msgid "Enable session policies"
7271
  msgstr ""
7272
 
7273
- #: extensions/user-sessions/classes/View/Options/Policies.php:178
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:180
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:182
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:187
7286
  msgid "Multiple Sessions"
7287
  msgstr ""
7288
 
7289
- #: extensions/user-sessions/classes/View/Options/Policies.php:196
7290
  msgid "Allow one session only"
7291
  msgstr ""
7292
 
7293
- #: extensions/user-sessions/classes/View/Options/Policies.php:202
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:212
7299
  msgid "Allow up to %s sessions and block the rest"
7300
  msgstr ""
7301
 
7302
- #: extensions/user-sessions/classes/View/Options/Policies.php:223
7303
  msgid "Configure a Blocked Session Notification for Users"
7304
  msgstr ""
7305
 
7306
- #: extensions/user-sessions/classes/View/Options/Policies.php:225
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:230
7311
  msgid "Blocked Sessions Error"
7312
  msgstr ""
7313
 
7314
- #: extensions/user-sessions/classes/View/Options/Policies.php:248
7315
  msgid "Do you want to terminate idle sessions automatically?"
7316
  msgstr ""
7317
 
7318
- #: extensions/user-sessions/classes/View/Options/Policies.php:250
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:255
7323
  msgid "Terminate Idle Sessions"
7324
  msgstr ""
7325
 
7326
- #: extensions/user-sessions/classes/View/Options/Policies.php:272
7327
  msgid "1"
7328
  msgstr ""
7329
 
7330
- #: extensions/user-sessions/classes/View/Options/Policies.php:273
7331
  msgid "4"
7332
  msgstr ""
7333
 
7334
- #: extensions/user-sessions/classes/View/Options/Policies.php:274
7335
  msgid "8"
7336
  msgstr ""
7337
 
7338
- #: extensions/user-sessions/classes/View/Options/Policies.php:275
7339
  msgid "12"
7340
  msgstr ""
7341
 
7342
- #: extensions/user-sessions/classes/View/Options/Policies.php:276
7343
  msgid "24"
7344
  msgstr ""
7345
 
7346
- #: extensions/user-sessions/classes/View/Options/Policies.php:277
7347
  msgid "32"
7348
  msgstr ""
7349
 
7350
- #: extensions/user-sessions/classes/View/Options/Policies.php:278
7351
  msgid "48"
7352
  msgstr ""
7353
 
7354
- #: extensions/user-sessions/classes/View/Options/Policies.php:285
7355
  msgid "terminate sessions if they have been idle for more than"
7356
  msgstr ""
7357
 
7358
- #: extensions/user-sessions/classes/View/Options/Policies.php:296
7359
  msgid " hour"
7360
  msgstr ""
7361
 
7362
- #: extensions/user-sessions/classes/View/Options/Policies.php:296, extensions/user-sessions/classes/View/Options/Policies.php:303
7363
  msgid " hours"
7364
  msgstr ""
7365
 
7366
- #: extensions/user-sessions/classes/View/Options/Policies.php:289
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.7
9
- Stable tag: 4.2.2
10
- Requires PHP: 5.5
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. It is also the most highly rated WordPress activity log plugin and have been featured on popular sites such as GoDaddy, Kinsta and WPBeginner.
 
 
28
 
29
  [youtube https://www.youtube.com/watch?v=pgFEMIvKFTA]
30
 
31
- > <strong>Note</strong>: The WordPress activity log is FREE. Features such as reports, email notifications, SMS alerts, search 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>.
32
  >
33
 
34
  #### Maintained & Supported by WP White Security
35
 
36
- WP White Security builds high-quality niche WordPress security & management plugins such as [Password Policy Manager for WordPress](https://www.wpwhitesecurity.com/wordpress-plugins/password-policy-manager-wordpress/?utm_source=wordpress.org&utm_medium=referral&utm_campaign=PPMWP&utm_content=plugin+repos+description), a plugin with which you can ensure all your users use strong passwords.
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 notifications of critical site changes,
87
- * Search the activity log using text-based searches and use built-in filters to fine tune the searches,
88
- * Store activity log in an external database to improve security,
89
- * Mirror the WordPress activity logs to Slack, Papertrail, Syslog and other central log management and collaboration solutions,
90
- * Configure archiving and mirroring of logs.
 
 
 
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's features.
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) customers.
99
 
100
- > <strong>Note</strong>: paid customers 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.
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 so you can get all information about an IP address with just a mouse click
110
- * Limit who can view the WordPress activity log by either users or roles
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 via activity log extensions. 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):
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.2.2 (2021-04-22) =
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
- * Improved events definition (prep work for version 4.3).
225
- * Added the {meta} and {links} tags in email and SMS notifications.
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
- * Dates in reports were not being translated.
236
- * Some cron job data was left behind during uninstall.
237
- * A database entry was left behind during uninstall.
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 &notifications](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
- if ( file_exists( dirname( __FILE__ ) . '/freemius/start.php' ) ) {
17
-
18
- /**
19
- * Freemius SDK
20
- *
21
- * Create a helper function for easy SDK access.
22
- *
23
- * @return Freemius
24
- * @throws Freemius_Exception
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
- // Include Freemius SDK.
33
- require_once dirname( __FILE__ ) . '/freemius/start.php';
34
 
35
- // Check anonymous mode.
36
- $freemius_state = \WSAL\Helpers\Options::get_option_value_ignore_prefix( 'wsal_freemius_state', 'anonymous' );
37
- $is_anonymous = ( 'anonymous' === $freemius_state || 'skipped' === $freemius_state );
38
- $is_premium = false;
39
- $is_anonymous = $is_premium ? false : $is_anonymous;
 
 
 
40
 
41
- // Trial arguments.
42
- $trial_args = array(
43
- 'days' => 7,
44
- 'is_require_payment' => false,
45
- );
46
 
47
- if ( WpSecurityAuditLog::is_mainwp_active() && ! is_multisite() ) {
48
- $trial_args = false;
49
- }
 
 
50
 
51
- $wsal_freemius = fs_dynamic_init(
52
- array(
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
- return apply_filters( 'wsal_freemius_sdk_object', $wsal_freemius );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  }
77
 
78
- // Init Freemius.
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.2.2
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) 2020 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,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
- * Plugin version.
47
- *
48
- * @var string
49
- */
50
- public $version = '4.2.2';
51
-
52
- /**
53
- * Plugin constants.
54
  *
55
- * @var string
56
- */
57
- const PLG_CLS_PRFX = 'WSAL_';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- /**
60
- * Minimal PHP version.
61
- *
62
- * @var string
63
- */
64
- const MIN_PHP_VERSION = '5.5.0';
 
 
 
 
 
 
 
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
- * Initialize plugin.
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
- add_action( $bootstrap_hook[0], array( $this, 'setup' ), $bootstrap_hook[1] );
 
173
 
174
- // Register plugin specific activation hook.
175
- register_activation_hook( __FILE__, array( $this, 'Install' ) );
176
 
177
- // Plugin Deactivation Actions.
178
- register_deactivation_hook( __FILE__, array( $this, 'deactivate_actions' ) );
 
179
 
180
- // Add custom schedules for WSAL early otherwise they won't work.
181
- add_filter( 'cron_schedules', array( $this, 'recurring_schedules' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
- // make the options helper class available.
184
- $this->include_options_helper();
185
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
 
187
- /**
188
- * For frontend loading only - adds all dependency classes, interfaces,
189
- * and helpers from sessions tracking and hooks the tracking methods in
190
- * when frontend login sensors are enabled.
191
- *
192
- * @method add_sessions_trackers
193
- * @since 4.x.x
194
- */
195
- public function maybe_add_sessions_trackers_early() {
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
- // To track sessions from the frontend we need to load the session
206
- // tracking class and init it's hooks plus make available all of the
207
- // supporting classes it needs to operate.
208
- $base_path = plugin_dir_path( __FILE__ );
209
- if ( file_exists( $base_path . 'extensions/user-sessions/user-sessions.php' ) ) {
210
- spl_autoload_register( array( __CLASS__, 'autoloader' ) );
211
-
212
- // classes below don't follow any naming convention handled by the autoloader
213
- require_once $base_path . 'extensions/user-sessions/classes/Adapters/SessionInterface.php';
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
- * PHP magic __get function to get class properties.
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
- * Return the settings object, lazily instantiating, if needed.
238
- *
239
- * @return WSAL_Settings
240
- */
241
- public function settings() {
242
- if ( ! isset( $this->_settings ) ) {
243
- $this->_settings = new WSAL_Settings( $this );
244
- }
 
 
 
 
 
245
 
246
- return $this->_settings;
247
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
 
249
- /**
250
- * Gets and instantiates the options helper.
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
- * Whether the current request is a REST API request.
266
- *
267
- * @return bool
268
- */
269
- public static function is_rest_api() {
270
- $is_rest = false;
271
-
272
- if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
273
- $rest_url_path = trim( parse_url( home_url( '/wp-json/' ), PHP_URL_PATH ), '/' );
274
- $request_path = trim( $_SERVER['REQUEST_URI'], '/' );
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
- return $is_rest;
288
- }
 
 
 
 
 
 
 
289
 
290
- /**
291
- * Whether the current request is a frontend request.
292
- *
293
- * @return bool
294
- */
295
- public static function is_frontend() {
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
- * Decides if the plugin should run, sets up constants, includes, inits hooks, etc.
306
- *
307
- * @return bool
308
- */
309
- public function setup() {
310
- if ( ! $this->should_load() ) {
311
- return;
312
- }
313
 
314
- $this->define_constants();
315
- $this->set_allowed_html_tags();
316
- $this->includes();
317
- $this->init_hooks();
318
- $this->load_defaults();
319
- $this->load_wsal();
 
 
 
 
320
 
321
- if ( did_action( 'init' ) ) {
322
- $this->init();
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
- // check conditions for frontend
338
- if ( self::is_frontend() && ! is_user_logged_in() && ! self::should_load_frontend() ) {
339
- // user isn't logged in, and we aren't logging visitor events on front-end
340
- return false;
341
- }
342
 
343
- // other contexts/scenarios
 
344
 
345
- // If this is a rest API request and the user is not logged in, bail.
346
- if ( self::is_rest_api() && ! is_user_logged_in() ) {
347
- return false;
348
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
 
350
- return true;
351
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
 
353
- /**
354
- * Checks to see if WSAL should be loaded for register, login, and comment events.
355
- *
356
- * @return bool
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
- // Connectors.
419
- require_once 'classes/Connector/AbstractConnector.php';
420
- require_once 'classes/Connector/ConnectorInterface.php';
421
- require_once 'classes/Connector/ConnectorFactory.php';
422
- require_once 'classes/Connector/MySQLDB.php';
423
-
424
- // Adapters.
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
- // Load autoloader and register base paths.
445
- require_once 'classes/Autoloader.php';
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
- // Listen for cleanup event.
459
- add_action( 'wsal_cleanup', array( $this, 'CleanUp' ) );
460
 
461
- // Render wsal footer.
462
- add_action( 'admin_footer', array( $this, 'render_footer' ) );
 
 
463
 
464
- // Plugin redirect on activation.
465
- if ( current_user_can( 'manage_options' ) ) {
466
- add_action( 'admin_init', array( $this, 'wsal_plugin_redirect' ) );
467
- }
468
 
469
- // Handle admin Disable Custom Field.
470
- add_action( 'wp_ajax_AjaxDisableCustomField', array( $this, 'AjaxDisableCustomField' ) );
471
 
472
- // Handle admin Disable Alerts.
473
- add_action( 'wp_ajax_AjaxDisableByCode', array( $this, 'AjaxDisableByCode' ) );
474
 
475
- // Render Login Page Notification.
476
- add_filter( 'login_message', array( $this, 'render_login_page_message' ), 10, 1 );
 
 
 
477
 
478
- // Cron job to delete alert 1003 for the last day.
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
- add_filter( 'mainwp_child_extra_execution', array( $this, 'mainwp_dashboard_callback' ), 10, 2 );
485
 
486
- add_action( 'admin_init', array( $this, 'sync_premium_freemius' ) );
487
 
488
- add_action( 'wsal_freemius_loaded', array( $this, 'adjust_freemius_strings' ) );
489
 
490
- $this->init_freemius();
 
 
 
491
 
492
- // Extensions which are only admin based.
493
- if ( is_admin() ) {
494
- $plugin_installer_ajax = new WSAL_PluginInstallerAction();
495
- $plugin_installer_ajax->register();
 
496
 
497
- $yoast_seo_addon = new WSAL_YoastSeoExtension;
498
- $bbpress_addon = new WSAL_BBPressExtension;
499
- $wpforms_addon = new WSAL_WPFormsExtension;
500
- $gravityforms_addon = new WSAL_GravityFormsExtension;
501
- }
502
 
503
- // Extensions which are both admin and frontend based.
504
- $woocommerce_addon = new WSAL_WooCommerceExtension;
 
505
 
506
- // Dequeue conflicting scripts.
507
- add_action( 'wp_print_scripts', array( $this, 'dequeue_conflicting_scripts' ) );
508
- }
 
 
 
 
 
509
 
510
- /**
511
- * Whether the current page is the login screen.
512
- *
513
- * @return bool
514
- */
515
- public static function is_login_screen() {
516
- return parse_url( site_url( 'wp-login.php' ), PHP_URL_PATH ) === parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
517
- }
518
 
519
- /**
520
- * Load Freemius SDK.
521
- */
522
- public static function load_freemius() {
523
- require_once plugin_dir_path( __FILE__ ) . '/sdk/wsal-freemius.php';
524
- }
 
 
 
 
 
525
 
526
- /**
527
- * Determines whether a plugin is active.
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
- if ( ! class_exists( 'WSAL_PluginInstallAndActivate' ) ) {
539
- require_once 'classes/Utilities/PluginInstallAndActivate.php';
540
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
541
 
542
- // Additional checks for our 3rd party extensions.
543
- if ( class_exists( 'WSAL_PluginInstallAndActivate' ) ) {
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
- return is_plugin_active( $plugin );
565
- }
 
 
 
 
 
 
 
 
566
 
567
- /**
568
- * Check if BBPress plugin is active or not.
569
- *
570
- * @return boolean
571
- */
572
- public static function is_bbpress_active() {
573
- return ( self::is_plugin_active( 'bbpress/bbpress.php' )
574
- && ( self::is_plugin_active( 'wsal-bbpress.php' ) )
575
- );
576
- }
577
 
578
- /**
579
- * Check if WooCommerce plugin is active or not.
580
- *
581
- * @return boolean
582
- */
583
- public static function is_woocommerce_active() {
584
- return ( self::is_plugin_active( 'woocommerce/woocommerce.php' )
585
- && ( self::is_plugin_active( 'wsal-woocommerce.php' ) )
586
- );
587
- }
588
 
589
- /**
590
- * Check if Yoast SEO plugin is active or not.
591
- *
592
- * @return boolean
593
- */
594
- public static function is_wpseo_active() {
595
- return ( ( self::is_plugin_active( 'wordpress-seo/wp-seo.php' ) || self::is_plugin_active( 'wordpress-seo-premium/wp-seo-premium.php' ) )
596
- && ( self::is_plugin_active( 'activity-log-wp-seo.php' ) )
597
- );
598
- }
599
 
600
- /**
601
- * Check if MainWP plugin is active or not.
602
- *
603
- * @return boolean
604
- */
605
- public static function is_mainwp_active() {
606
- return self::is_plugin_active( 'mainwp-child/mainwp-child.php' );
607
- }
608
 
609
- /**
610
- * Check if Two Factor plugin is active or not.
611
- *
612
- * @return boolean
613
- */
614
- public static function is_twofactor_active() {
615
- return self::is_plugin_active( 'two-factor/two-factor.php' );
616
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617
 
618
- /**
619
- * Initializes Freemius and its hooks, conditionally.
620
- *
621
- * @return void
622
- */
623
- public function init_freemius() {
624
-
625
- $is_admin_blocking_plugins_support_enabled = $this->is_admin_blocking_plugins_support_enabled();
626
- if ( self::is_frontend() && 'no' !== self::is_premium_freemius() && file_exists( WSAL_BASE_DIR . '/extensions/class-wsal-extension-manager.php' ) ) {
627
- require_once WSAL_BASE_DIR . '/extensions/class-wsal-extension-manager.php';
628
-
629
- if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
630
- WSAL_Extension_Manager::include_extension( 'reports' );
631
- WSAL_Extension_Manager::include_extension( 'usersessions' );
632
- WSAL_Extension_Manager::include_extension( 'external-db' );
633
- } elseif ( $this->should_load() ) {
634
- WSAL_Extension_Manager::include_extension( 'notifications' );
635
- }
636
-
637
- if (!$is_admin_blocking_plugins_support_enabled) {
638
- // we only stop here if the support for admin blocking plugins is enabled
639
- return;
 
 
 
640
  }
641
- }
642
 
643
- 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 ) ) {
644
-
645
- self::load_freemius();
646
- if ( ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
647
- // Add filters to customize freemius welcome message.
648
- wsal_freemius()->add_filter( 'connect_message', array( $this, 'wsal_freemius_connect_message' ), 10, 6 );
649
- wsal_freemius()->add_filter( 'connect_message_on_update', array( $this, 'wsal_freemius_update_connect_message' ), 10, 6 );
650
- wsal_freemius()->add_filter( 'trial_promotion_message', array( $this, 'freemius_trial_promotion_message' ), 10, 1 );
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
- * Whether visitor events should be logged.
670
- *
671
- * @return bool
672
- */
673
- public function load_for_visitor_events() {
674
- return 'no' === \WSAL\Helpers\Options::get_option_value_ignore_prefix( self::OPTIONS_PREFIX . 'disable-visitor-events' );
675
- }
 
 
 
676
 
677
- /**
678
- * Whether an alert is enabled. For use before loading the settings.
679
- *
680
- * @param string|int $alert The alert to check.
681
- * @return bool Whether the alert is enabled.
682
- */
683
- public static function raw_alert_is_enabled( $alert ) {
684
- $alerts = \WSAL\Helpers\Options::get_option_value_ignore_prefix( self::OPTIONS_PREFIX . 'disabled-alerts' );
685
- $alerts = explode( ',', $alerts );
686
- return ! in_array( $alert, $alerts );
687
- }
 
 
 
 
 
 
688
 
689
- /**
690
- * MainWP Dashboard Handler.
691
- *
692
- * @since 3.2.5
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
- $subaction = filter_var( $post_data['subaction'], FILTER_SANITIZE_STRING);
745
- if ( ! in_array( $subaction, [ 'update', 'remove' ] ) ) {
746
- $info = array(
747
- 'success' => 'no',
748
- 'message' => 'Unsupported subaction parameter value.'
749
- );
750
  break;
751
- }
752
 
753
- if ( 'update' === $subaction ) {
754
- // store the enforced settings in local database (used for example to disable related parts
755
- // of the settings UI
756
- $settings_to_enforce = $post_data[ 'settings'];
757
- $this->settings()->set_mainwp_enforced_settings( $settings_to_enforce );
758
-
759
- // change the existing settings
760
- if ( array_key_exists( 'pruning_enabled', $settings_to_enforce ) ) {
761
- $this->settings()->SetPruningDateEnabled( $settings_to_enforce['pruning_enabled'] );
762
- if ( array_key_exists( 'pruning_date', $settings_to_enforce ) && array_key_exists( 'pruning_unit', $settings_to_enforce) ) {
763
- $this->settings()->SetPruningDate($settings_to_enforce[ 'pruning_date' ] . ' ' . $settings_to_enforce[ 'pruning_unit' ]);
764
- $this->settings()->set_pruning_unit( $settings_to_enforce[ 'pruning_unit' ] );
765
- }
766
  }
767
-
768
- if ( array_key_exists( 'disabled_events', $settings_to_enforce ) ) {
769
- $disabled_event_ids = array_key_exists( 'disabled_events', $settings_to_enforce ) ? array_map( 'intval', explode( ',', $settings_to_enforce['disabled_events'] ) ) : [];
770
- $this->alerts->SetDisabledAlerts( $disabled_event_ids );
 
 
 
 
 
771
  }
772
 
773
- if (array_key_exists('incognito_mode_enabled', $settings_to_enforce)) {
774
- $this->settings()->SetIncognito($settings_to_enforce['incognito_mode_enabled']);
 
 
 
 
 
775
  }
776
 
777
- if (array_key_exists('login_notification_enabled', $settings_to_enforce)) {
778
- $login_page_notification_enabled = $settings_to_enforce['login_notification_enabled'];
779
- $this->settings()->set_login_page_notification($login_page_notification_enabled);
780
- if ('yes' === $login_page_notification_enabled) {
781
- $this->settings()->set_login_page_notification_text($settings_to_enforce['login_notification_text']);
 
 
 
 
 
 
 
 
782
  }
783
- }
784
 
785
- } else if ( 'remove' === $subaction ) {
786
- $this->settings()->delete_mainwp_enforced_settings();
787
- }
 
788
 
789
- $info = array(
790
- 'success' => 'yes'
791
- );
792
- $this->alerts->Trigger( 6043 );
793
- default:
794
- break;
795
- }
796
- }
797
- return $info;
798
- }
799
 
800
- /**
801
- * Performs a query to retrieve the latest event in the logs.
802
- *
803
- * @method query_for_latest_event
804
- * @since 4.0.3
805
- * @return array
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
- * Method: WSAL plugin redirect.
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
- * Method: Set allowed HTML tags.
849
- *
850
- * @since 3.0.0
851
- */
852
- public function set_allowed_html_tags() {
853
- // Set allowed HTML tags.
854
- $this->allowed_html_tags = array(
855
- 'a' => array(
856
- 'href' => array(),
857
- 'title' => array(),
858
- 'target' => array(),
859
- ),
860
- 'br' => array(),
861
- 'code' => array(),
862
- 'em' => array(),
863
- 'strong' => array(),
864
- 'p' => array(
865
- 'class' => array(),
866
- ),
867
- );
868
- }
869
 
870
- /**
871
- * Method: Define constants.
872
- *
873
- * @since 2.6.6
874
- */
875
- public function define_constants() {
876
- // Plugin version.
877
- if ( ! defined( 'WSAL_VERSION' ) ) {
878
- define( 'WSAL_VERSION', $this->version );
879
- }
880
- // Plugin Name.
881
- if ( ! defined( 'WSAL_BASE_NAME' ) ) {
882
- define( 'WSAL_BASE_NAME', plugin_basename( __FILE__ ) );
883
- }
884
- // Plugin Directory URL.
885
- if ( ! defined( 'WSAL_BASE_URL' ) ) {
886
- define( 'WSAL_BASE_URL', plugin_dir_url( __FILE__ ) );
887
- }
888
- // Plugin Directory Path.
889
- if ( ! defined( 'WSAL_BASE_DIR' ) ) {
890
- define( 'WSAL_BASE_DIR', plugin_dir_path( __FILE__ ) );
891
- }
892
- // Plugin Docs URL.
893
- if ( ! defined( 'WSAL_DOCS_URL' ) ) {
894
- define( 'WSAL_DOCS_URL', 'https://wpactivitylog.com/support/' );
895
- }
896
- // Plugin Issue Reporting URL.
897
- if ( ! defined( 'WSAL_ISSUE_URL' ) ) {
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
- * Filter trial message of Freemius.
962
- *
963
- * @param string $_message – Trial message.
964
- * @return string
965
- * @since 3.2.3
966
- */
967
- public function freemius_trial_promotion_message( $_message ) {
968
- // Message.
969
- $message = sprintf(
970
- /* translators: Plugin name */
971
- __( 'Get a free 7-day trial of the premium edition of %s. No credit card required, no commitments!', 'wp-security-audit-log' ),
972
- '<strong>' . __( 'WP Activity Log', 'wp-security-audit-log' ) . '</strong>'
973
- );
 
 
 
 
 
 
 
 
974
 
975
- // Trial link.
976
- $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' ) . ' &nbsp;&#10140;</button></a>';
977
- return $message;
978
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
979
 
980
- /**
981
- * Filter the time period to show the first trial message.
982
- * Display it after 20 days.
983
- *
984
- * @param int $day_in_sec Time period in seconds.
985
- * @return int
986
- * @since 3.2.3
987
- */
988
- public function change_show_first_trial_period( $day_in_sec ) {
989
- return 20 * DAY_IN_SECONDS;
990
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
991
 
992
- /**
993
- * Filter the time period to re-show the trial message.
994
- * Display it after 60 days.
995
- *
996
- * @param int $thirty_days_in_sec – Time period in seconds.
997
- * @return int
998
- * @since 3.2.3
999
- */
1000
- public function change_reshow_trial_period( $thirty_days_in_sec ) {
1001
- return 60 * DAY_IN_SECONDS;
1002
- }
 
 
 
 
 
 
 
 
1003
 
1004
- /**
1005
- * Fremius Admin Notice View Permission.
1006
- *
1007
- * Check to see if the user has permission to view freemius
1008
- * admin notices or not.
1009
- *
1010
- * @since 3.3
1011
- *
1012
- * @param bool $show If show then set to true, otherwise false.
1013
- * @param array $msg {
1014
- * @var string $message The actual message.
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
- * Changes some of the strings that freemius outputs with out own.
1033
- *
1034
- * @method adjust_freemius_strings
1035
- * @since 4.0.0
1036
- */
1037
- public function adjust_freemius_strings() {
1038
- // only update these messages if using premium plugin.
1039
- if ( ( ! wsal_freemius()->is_premium() ) || ( ! method_exists( wsal_freemius(), 'override_il8n' ) ) ) {
1040
- return;
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
- * Limited License Activation Error.
1052
- *
1053
- * @param string $error - Error Message.
1054
- * @return string
1055
- */
1056
- public function limited_license_activation_error( $error ) {
1057
- $site_count = null;
1058
- preg_match( '!\d+!', $error, $site_count );
1059
-
1060
- // Check if this is an expired error.
1061
- if ( strpos( $error, 'expired' ) !== false ) {
1062
- /* Translators: Expired message and time */
1063
- $error = sprintf( esc_html__( '%s You need to renew your license to continue using premium features.', 'wp-security-audit-log' ), preg_replace('/\([^)]+\)/','', $error ) );
1064
- }
1065
- elseif ( ! empty( $site_count[0] ) ) {
1066
- /* Translators: Number of sites */
1067
- $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] );
1068
- }
1069
- return $error;
1070
- }
 
 
 
 
 
1071
 
1072
- /**
1073
- * Start to trigger the events after installation.
1074
- *
1075
- * @internal
1076
- */
1077
- public function init() {
1078
- // Load dependencies.
1079
- if ( ! isset( $this->alerts ) ) {
1080
- $this->alerts = new WSAL_AlertManager( $this );
1081
- }
 
 
 
 
 
 
 
 
1082
 
1083
- if ( ! isset( $this->constants ) ) {
1084
- $this->constants = new WSAL_ConstantManager();
1085
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1086
 
1087
- $this->sensors = new WSAL_SensorManager( $this );
 
 
 
 
 
 
 
 
 
1088
 
1089
- if ( is_admin() ) {
1090
- $this->views = new WSAL_ViewManager( $this );
1091
- $this->widgets = new WSAL_WidgetManager( $this );
1092
- }
1093
 
1094
- // Start listening to events.
1095
- if ( ! empty( $this->sensors ) && $this->sensors instanceof WSAL_SensorManager ) {
1096
- $this->sensors->HookEvents();
1097
- }
1098
 
1099
- if ( is_admin() ) {
1100
- if ( $this->settings()->IsArchivingEnabled() ) {
1101
- // Check the current page.
1102
- $get_page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
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
- * Action: `wsal_init`
1131
- *
1132
- * Action hook to mark that WSAL has initialized.
1133
- *
1134
- * @param WpSecurityAuditLog $this Instance of main plugin class.
1135
- */
1136
- do_action( 'wsal_init', $this );
1137
-
1138
- // allow registration of custom alert formatters (must be called after wsal_init action )
1139
- WSAL_AlertFormatterFactory::bootstrap();
1140
- }
 
 
1141
 
1142
- /**
1143
- * Plugin Deactivation Actions.
1144
- *
1145
- * This function runs on plugin deactivation to send
1146
- * deactivation email.
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
- // Send deactivation email.
1164
- if ( class_exists( 'WSAL_Utilities_Emailer' ) ) {
1165
- // Get email template.
1166
- WSAL_Utilities_Emailer::send_deactivation_email();
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
- // Set filter input args.
1183
- $filter_input_args = array(
1184
- 'disable_nonce' => FILTER_SANITIZE_STRING,
1185
- 'notice' => FILTER_SANITIZE_STRING,
1186
- );
 
 
 
 
 
 
 
1187
 
1188
- // Filter $_POST array for security.
1189
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1190
 
1191
- if ( ! isset( $post_array['disable_nonce'] ) || ! wp_verify_nonce( $post_array['disable_nonce'], 'disable-custom-nonce' . $post_array['notice'] ) ) {
1192
- die();
1193
- }
 
 
 
1194
 
1195
- $excluded_meta_raw = $this->GetGlobalSetting( 'excluded-custom' );
1196
- $excluded_meta = [];
1197
- if ( isset( $excluded_meta_raw ) && '' != $excluded_meta_raw ) {
1198
- $excluded_meta = explode(',', $excluded_meta_raw);
1199
- }
 
 
 
 
 
 
1200
 
1201
- array_push( $excluded_meta, esc_html( $post_array['notice'] ) );
1202
- $this->SetGlobalSetting( 'excluded-custom', implode(',', array_unique( $excluded_meta ) ) );
 
 
 
1203
 
1204
- // Exclude object link.
1205
- $exclude_objects_link = add_query_arg(
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
- * Disable Alert through ajax.
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
- // Set filter input args.
1235
- $filter_input_args = array(
1236
- 'disable_nonce' => FILTER_SANITIZE_STRING,
1237
- 'code' => FILTER_SANITIZE_STRING,
1238
- );
1239
 
1240
- // Filter $_POST array for security.
1241
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
1242
- if ( ! isset( $post_array['disable_nonce'] ) || ! wp_verify_nonce( $post_array['disable_nonce'], 'disable-alert-nonce' . $post_array['code'] ) ) {
1243
- die();
1244
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1245
 
1246
- $s_alerts = $this->GetGlobalSetting( 'disabled-alerts' );
1247
- if ( isset( $s_alerts ) && '' != $s_alerts ) {
1248
- $s_alerts .= ',' . esc_html( $post_array['code'] );
1249
- } else {
1250
- $s_alerts = esc_html( $post_array['code'] );
1251
- }
1252
- $this->SetGlobalSetting( 'disabled-alerts', $s_alerts );
 
 
 
 
1253
 
1254
- 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' ) );
1255
- die;
1256
- }
 
 
1257
 
1258
- /**
1259
- * Render plugin stuff in page footer.
1260
- *
1261
- * @internal
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
- // live events disabled in free version of the plugin
1274
- $live_events_enabled = false;
1275
- // Set data array for common script.
1276
- $script_data = array(
1277
- 'ajaxURL' => admin_url( 'admin-ajax.php' ),
1278
- 'liveEvents' => $live_events_enabled,
1279
- 'installing' => __( 'Installing, please wait', 'wp-security-audit-log' ),
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
- wp_localize_script( 'wsal-common', 'wsalCommonData', $script_data );
 
 
1287
 
1288
- // Enqueue script.
1289
- wp_enqueue_script( 'wsal-common' );
1290
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1291
 
1292
- /**
1293
- * Load the rest of the system.
1294
- *
1295
- * @internal
1296
- */
1297
- public function load_wsal() {
1298
- require_once 'classes/Alert.php';
1299
- require_once 'classes/AbstractLogger.php';
1300
- require_once 'classes/AbstractSensor.php';
1301
- require_once 'classes/AbstractMetaDataSensor.php';
1302
- require_once 'classes/AlertManager.php';
1303
- require_once 'classes/ConstantManager.php';
1304
- require_once 'classes/Loggers/Database.php';
1305
- require_once 'classes/SensorManager.php';
1306
- require_once 'classes/Sensors/Public.php';
1307
- require_once 'classes/Settings.php';
1308
-
1309
- if ( is_admin() ) {
1310
- // Initiate settings object if not set.
1311
- if ( ! $this->settings ) {
1312
- $this->settings = new WSAL_Settings( $this );
1313
- }
1314
-
1315
- // Setting the pruning date with the old value or the default value.
1316
- $pruning_date = $this->settings()->GetPruningDate();
1317
- $this->settings()->SetPruningDate( $pruning_date );
1318
-
1319
- // Load translations.
1320
- load_plugin_textdomain( 'wp-security-audit-log', false, basename( dirname( __FILE__ ) ) . '/languages/' );
1321
- }
1322
- }
1323
 
1324
- /**
1325
- * Install all assets required for a useable system.
1326
- * @throws Freemius_Exception
1327
- */
1328
- public function Install() {
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
- if ( self::is_plugin_active( 'mainwp/mainwp.php' ) ) {
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
- if ( $installation_errors ) {
1347
- ?>
1348
- <html>
1349
- <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>
1350
- <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>
1351
- </html>
1352
- <?php
1353
- die( 1 );
1354
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1355
 
1356
- // Fully set up the plugin.
1357
- $this->setup();
1358
- $this->init();
1359
 
1360
- // disable database sensor during the creation of tables
1361
- WSAL_Sensors_Database::$enabled = false;
1362
 
1363
- // On first install this won't be loaded because not premium, add it
1364
- // now so it installs.
1365
- $this->load_sessions_extension_db_adapter();
1366
 
1367
- // run any installs.
1368
- self::getConnector()->installAll();
1369
- self::getConnector()->getAdapter( 'Occurrence' )->create_indexes();
1370
- self::getConnector()->getAdapter( 'Meta' )->create_indexes();
1371
 
1372
- if ( $this->settings()->IsArchivingEnabled() ) {
1373
- $this->settings()->SwitchToArchiveDB();
1374
  self::getConnector()->getAdapter( 'Occurrence' )->create_indexes();
1375
  self::getConnector()->getAdapter( 'Meta' )->create_indexes();
1376
- }
1377
 
1378
- // If system already installed, do updates now (if any).
1379
- $old_version = $this->GetOldVersion();
1380
- $new_version = $this->GetNewVersion();
 
 
1381
 
1382
- if ( $old_version !== $new_version ) {
1383
- $this->Update( $old_version, $new_version );
1384
- }
1385
 
1386
- // Install cleanup hook (remove older one if it exists).
1387
- wp_clear_scheduled_hook( 'wsal_cleanup' );
1388
- wp_schedule_event( current_time( 'timestamp' ) + 600, 'hourly', 'wsal_cleanup' );
1389
 
1390
- // WSAL Audit Log page redirect option in anonymous mode.
1391
- if ( 'anonymous' === $this->GetGlobalSetting( 'freemius_state', 'anonymous' ) ) {
1392
- $this->SetGlobalSetting( 'redirect_on_activate', true );
1393
- }
 
 
 
 
1394
 
1395
- // Run on each install to check MainWP Child plugin.
1396
- $this->settings()->set_mainwp_child_stealth_mode();
1397
 
1398
- // re-enable the database sensor after the tables are created
1399
- WSAL_Sensors_Database::$enabled = true;
1400
- }
1401
 
1402
- /**
1403
- * Run some code that updates critical components required for a newer version.
1404
- *
1405
- * @param string $old_version The old version.
1406
- * @param string $new_version The new version.
1407
- *
1408
- * @throws Freemius_Exception
1409
- */
1410
- public function Update( $old_version, $new_version ) {
1411
- // Update version in db.
1412
- $this->SetGlobalSetting( 'version', $new_version );
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
- // Do version-to-version specific changes.
1424
- if ( '0.0.0' !== $old_version && -1 === version_compare( $old_version, $new_version ) ) {
1425
- // Dismiss privacy notice.
1426
- if ( empty( $this->views ) ) {
1427
- $this->views = new WSAL_ViewManager( $this );
1428
- }
1429
- $this->views->FindByClassName( 'WSAL_Views_AuditLog' )->DismissNotice( 'wsal-privacy-notice-3.2' );
1430
-
1431
- /**
1432
- * Delete advert transient on every update.
1433
- *
1434
- * @since 3.2.4
1435
- */
1436
- if ( wsal_freemius()->is_free_plan() ) {
1437
- $delete_transient_fn = $this->IsMultisite() ? 'delete_site_transient' : 'delete_transient'; // Check for multisite.
1438
- $delete_transient_fn( 'wsal-is-advert-dismissed' ); // Delete advert transient.
1439
- }
1440
-
1441
- /**
1442
- * MainWP Child Stealth Mode Update
1443
- *
1444
- * This update only needs to run if the stealth mode option
1445
- * does not exist on free version.
1446
- *
1447
- * @since 3.2.3.3
1448
- */
1449
- if ( ! $this->GetGlobalBooleanSetting( 'mwp-child-stealth-mode', false ) ) {
1450
- $this->settings()->set_mainwp_child_stealth_mode();
1451
- }
1452
-
1453
- // remove obsolete options from the database
1454
- if ( version_compare( $new_version, '4.1.4', '>=' ) ) {
1455
- $this->DeleteGlobalSetting( 'addon_available_notice_dismissed' );
1456
-
1457
- // Remove old file scanning options.
1458
- global $wpdb;
1459
- $plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'wsal_local_files_%'" );
1460
- if ( ! empty( $plugin_options ) ) {
1461
- foreach( $plugin_options as $option ) {
1462
- $this->DeleteGlobalSetting( $option->option_name );
1463
- }
1464
- }
1465
- }
1466
-
1467
- if ( version_compare( $new_version, '4.1.5', '>=' ) ) {
1468
- // remove 'system' entry from the front-end events array as it was removed along with 404 tracking
1469
- $frontend_events = WSAL_Settings::get_frontend_events();
1470
- if ( array_key_exists( 'system', $frontend_events ) ) {
1471
- unset( $frontend_events['system'] );
1472
- WSAL_Settings::set_frontend_events( $frontend_events );
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
- * Migrate data from old plugin.
1506
- */
1507
- public function Migrate() {
1508
- global $wpdb;
1509
- static $mig_types = array(
1510
- 3000 => 5006,
1511
- );
 
 
 
 
 
1512
 
1513
- // Load data.
1514
- $sql = 'SELECT * FROM ' . $wpdb->base_prefix . 'wordpress_auditlog_events';
1515
- $events = array();
1516
- foreach ( $wpdb->get_results( $sql, ARRAY_A ) as $item ) {
1517
- $events[ $item['EventID'] ] = $item;
1518
- }
1519
- $sql = 'SELECT * FROM ' . $wpdb->base_prefix . 'wordpress_auditlog';
1520
- $auditlog = $wpdb->get_results( $sql, ARRAY_A );
1521
-
1522
- // Migrate using db logger.
1523
- foreach ( $auditlog as $entry ) {
1524
- $data = array(
1525
- 'ClientIP' => $entry['UserIP'],
1526
- 'UserAgent' => '',
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
- // Migrate settings.
1558
- $this->settings()->SetAllowedPluginViewers(
1559
- get_option( 'WPPH_PLUGIN_ALLOW_ACCESS' )
1560
- );
1561
- $s = get_option( 'wpph_plugin_settings' );
1562
- $this->settings()->SetViewPerPage( max( $s->showEventsViewList, 5 ) );
1563
- $this->settings()->SetWidgetsEnabled( $s->showDW );
1564
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1565
 
1566
- /**
1567
- * The current plugin version (according to plugin file metadata).
1568
- *
1569
- * @return string
1570
- */
1571
- public function GetNewVersion() {
1572
- $version = get_plugin_data( __FILE__, false, false );
1573
- return isset( $version['Version'] ) ? $version['Version'] : '0.0.0';
1574
- }
1575
 
1576
- /**
1577
- * The plugin version as stored in DB (will be the old version during an update/install).
1578
- *
1579
- * @return string
1580
- */
1581
- public function GetOldVersion() {
1582
- return $this->GetGlobalSetting( 'version', '0.0.0' );
1583
- }
 
1584
 
1585
- /**
1586
- * To be called in admin header for hiding plugin form Plugins list.
1587
- *
1588
- * @internal
1589
- */
1590
- public function HidePlugin() {
1591
- if ( ! $this->_settings->CurrentUserCan( 'edit' ) ) {
1592
- $selectr = '';
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
- * Returns the class name of a particular file that contains the class.
1607
- *
1608
- * @param string $file - File name.
1609
- * @return string - Class name.
1610
- * @deprecated since 1.2.5 Use autoloader->GetClassFileClassName() instead.
1611
- */
1612
- public function GetClassFileClassName( $file ) {
1613
- return $this->autoloader->GetClassFileClassName( $file );
1614
- }
 
 
 
 
 
 
 
 
 
1615
 
1616
- /**
1617
- * Return whether we are running on multisite or not.
1618
- *
1619
- * @return boolean
1620
- */
1621
- public function IsMultisite() {
1622
- return function_exists( 'is_multisite' ) && is_multisite();
1623
- }
 
 
1624
 
1625
- /**
1626
- * Get a global option.
1627
- *
1628
- * Deprecated function. It is only kept for the extension plugins. Nothing in the main plugin uses it, not even
1629
- * the upgrade process.
1630
- *
1631
- * @param string $option - Option name.
1632
- * @param mixed $default - (Optional) Value returned when option is not set (defaults to false).
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
- * Get a global setting.
1645
- *
1646
- * @param string $option - Option name.
1647
- * @param mixed $default - (Optional) Value returned when option is not set (defaults to false).
1648
- *
1649
- * @return mixed - Option's value or $default if option not set.
1650
- */
1651
- public function GetGlobalSetting( $option, $default = false ) {
1652
- $this->include_options_helper();
1653
- return $this->options_helper->get_option_value( $option, $default );
1654
- }
 
 
 
 
 
1655
 
1656
- /**
1657
- * Set a global option.
1658
- *
1659
- * Deprecated function. It is only kept for the extension plugins. Nothing in the main plugin uses it, not even
1660
- * the upgrade process.
1661
- *
1662
- * @param string $option - Option name.
1663
- * @param mixed $value - New value for option.
1664
- * @param string $prefix - (Optional) A prefix used before option name.
1665
- *
1666
- * @deprecated 4.1.3 Use WpSecurityAuditLog::SetGlobalSetting instead
1667
- * @see WpSecurityAuditLog::SetGlobalSetting()
1668
- */
1669
- public function SetGlobalOption( $option, $value, $prefix = '' ) {
1670
- $this->SetGlobalSetting( $option, $value );
1671
- }
1672
 
1673
- /**
1674
- * Set a global setting.
1675
- *
1676
- * @param string $option - Option name.
1677
- * @param mixed $value - New value for option.
1678
- *
1679
- * @return bool
1680
- */
1681
- public function SetGlobalSetting( $option, $value ) {
1682
- $this->include_options_helper();
1683
- return $this->options_helper->set_option_value( $option, $value );
1684
- }
 
 
 
 
1685
 
1686
- /**
1687
- * Deletes a global setting.
1688
- *
1689
- * Handles option names without the prefix, but also the ones that do for backwards compatibility.
1690
- *
1691
- * @param string $option - Option name.
1692
- *
1693
- * @return bool
1694
- * @since 4.2.1
1695
- */
1696
- public function DeleteGlobalSetting( $option ) {
1697
- $this->include_options_helper();
1698
-
1699
- return $this->options_helper->delete_option( $option );
1700
- }
1701
 
1702
- /**
1703
- * Get a global boolean setting. It takes care of the conversion between string and boolean.
1704
- *
1705
- * @param string $option - Option name.
1706
- * @param boolean $default - (Optional) Value returned when option is not set (defaults to false).
1707
- * @return boolean - Option's value or $default if option not set.
1708
- * @since 4.1.3
1709
- */
1710
- public function GetGlobalBooleanSetting( $option, $default = false ) {
1711
- $result = $this->GetGlobalSetting( $option, \WSAL\Helpers\Options::string_to_bool( $default ) );
1712
- return \WSAL\Helpers\Options::string_to_bool( $result );
1713
- }
1714
- /**
1715
- * Sets a global boolean setting. It takes care of the conversion between string and boolean.
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
- * Run cleanup routines.
1728
- */
1729
- public function CleanUp() {
1730
- foreach ( $this->_cleanup_hooks as $hook ) {
1731
- call_user_func( $hook );
1732
- }
1733
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1734
 
1735
- /**
1736
- * Clear last 30 day's failed login alert usernames.
1737
- */
1738
- public function delete_failed_logins() {
1739
- // Set the dates.
1740
- list( $y, $m, $d ) = explode( '-', date( 'Y-m-d' ) );
1741
-
1742
- // Site id.
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
- // Alerts exists then continue.
1757
- if ( ! empty( $alerts ) ) {
1758
- foreach ( $alerts as $alert ) {
1759
- // Flush the usernames meta data.
1760
- $alert->UpdateMetaValue( 'Users', array() );
1761
- }
1762
- }
1763
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1764
 
1765
- /**
1766
- * Add callback to be called when a cleanup operation is required.
1767
- *
1768
- * @param callable $hook - Hook name.
1769
- */
1770
- public function AddCleanupHook( $hook ) {
1771
- $this->_cleanup_hooks[] = $hook;
1772
- }
1773
 
1774
- /**
1775
- * Remove a callback from the cleanup callbacks list.
1776
- *
1777
- * @param callable $hook - Hook name.
1778
- */
1779
- public function RemoveCleanupHook( $hook ) {
1780
- while ( ( $pos = array_search( $hook, $this->_cleanup_hooks ) ) !== false ) {
1781
- unset( $this->_cleanup_hooks[ $pos ] );
1782
- }
1783
- }
1784
 
1785
- /**
1786
- * DB connection.
1787
- *
1788
- * @param mixed $config DB configuration.
1789
- * @param bool $reset - True if reset.
1790
- *
1791
- * @return WSAL_Connector_ConnectorInterface
1792
- * @throws Freemius_Exception
1793
- */
1794
- public static function getConnector( $config = null, $reset = false ) {
1795
- return WSAL_Connector_ConnectorFactory::getConnector( $config, $reset );
1796
- }
1797
 
1798
- /**
1799
- * Do we have an existing installation? This only applies for version 1.0 onwards.
1800
- *
1801
- * @return boolean
1802
- * @throws Freemius_Exception
1803
- */
1804
- public function IsInstalled() {
1805
- return self::getConnector()->isInstalled();
1806
- }
1807
 
1808
- /**
1809
- * Whether the old plugin was present or not.
1810
- *
1811
- * @return boolean
1812
- * @throws Freemius_Exception
1813
- */
1814
- public function CanMigrate() {
1815
- return self::getConnector()->canMigrate();
1816
- }
1817
 
1818
- /**
1819
- * Absolute URL to plugin directory WITHOUT final slash.
1820
- *
1821
- * @return string
1822
- */
1823
- public function GetBaseUrl() {
1824
- return plugins_url( '', __FILE__ );
1825
- }
1826
 
1827
- /**
1828
- * Full path to plugin directory WITH final slash.
1829
- *
1830
- * @return string
1831
- */
1832
- public function GetBaseDir() {
1833
- return plugin_dir_path( __FILE__ );
1834
- }
1835
 
1836
- /**
1837
- * Plugin directory name.
1838
- *
1839
- * @return string
1840
- */
1841
- public function GetBaseName() {
1842
- return plugin_basename( __FILE__ );
1843
- }
1844
 
1845
- /**
1846
- * Load default configuration / data.
1847
- */
1848
- public function load_defaults() {
1849
- require_once 'defaults.php';
1850
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1851
 
1852
- /**
1853
- * WSAL-Notifications-Extension Functions.
1854
- *
1855
- * @param string $opt_prefix - Option prefix.
1856
- *
1857
- * @return array|null
1858
- */
1859
- public function GetNotificationsSetting( $opt_prefix ) {
1860
- $this->include_options_helper();
1861
- return $this->options_helper->GetNotificationsSetting( self::OPTIONS_PREFIX . $opt_prefix );
1862
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
1863
 
1864
- /**
1865
- * Get notification.
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
- * Count notifications.
1878
- *
1879
- * @param string $opt_prefix - Option prefix.
1880
- *
1881
- * @return int
1882
- */
1883
- public function CountNotifications( $opt_prefix ) {
1884
- $this->include_options_helper();
1885
- return $this->options_helper->CountNotifications( $opt_prefix );
1886
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1887
 
1888
- /**
1889
- * Update global option.
1890
- *
1891
- * Deprecated function. It is only kept for the extension plugins. Nothing in the main plugin uses it, not even
1892
- * the upgrade process.
1893
- *
1894
- * @param string $option - Option name.
1895
- * @param mixed $value - Option value.
1896
- *
1897
- * @return bool|int
1898
- *
1899
- * @deprecated 4.1.3 Use WpSecurityAuditLog::SetGlobalSetting instead
1900
- * @see WpSecurityAuditLog::SetGlobalSetting()
1901
- */
1902
- public function UpdateGlobalOption( $option, $value ) {
1903
- return $this->SetGlobalSetting( $option, $value );
1904
- }
1905
 
1906
- /**
1907
- * Method: Render login page message.
1908
- *
1909
- * @param string $message - Login message.
1910
- *
1911
- * @return string
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
- // Return message.
1932
- return $message;
1933
- }
1934
 
1935
- /**
1936
- * Extend WP cron time intervals for scheduling.
1937
- *
1938
- * @param array $schedules - Array of schedules.
1939
- * @return array
1940
- */
1941
- public function recurring_schedules( $schedules ) {
1942
- $schedules['sixhours'] = array(
1943
- 'interval' => 21600,
1944
- 'display' => __( 'Every 6 hours', 'wp-security-audit-log' ),
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
- * Prints error for deprecated functions.
1971
- *
1972
- * @param string $method — Method deprecated.
1973
- * @param string $version — Version since deprecated.
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
- * Uninstall routine for the plugin.
1984
- */
1985
- public static function uninstall() {
1986
- if ( ! class_exists( 'WSAL_Uninstall' ) ) {
1987
- require_once trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/Uninstall.php';
1988
- }
 
 
 
 
 
 
 
 
 
 
 
 
1989
 
1990
- WSAL_Uninstall::uninstall();
1991
- }
 
1992
 
1993
- /**
1994
- * Sync premium freemius transient on daily basis.
1995
- */
1996
- public function sync_premium_freemius() {
1997
- $is_fs_premium_opt = 'fs_wsalp';
1998
- $is_fs_premium = get_option( $is_fs_premium_opt );
1999
-
2000
- if ( ! wsal_freemius()->is_registered() ) {
2001
- if ( 'no' !== $is_fs_premium ) {
2002
- update_option( $is_fs_premium_opt, 'no' );
2003
- }
2004
- } else {
2005
- $has_active_valid_license = wsal_freemius()->has_active_valid_license() ? 'yes' : 'no';
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
- * Get premium freemius transient.
2015
- *
2016
- * @return boolean
2017
- */
2018
- public static function is_premium_freemius() {
2019
- return get_option( 'fs_wsalp' );
2020
- }
 
 
 
 
 
 
 
 
2021
 
2022
- /**
2023
- * Error Logger
2024
- *
2025
- * Logs given input into debug.log file in debug mode.
2026
- *
2027
- * @param mixed $message - Error message.
2028
- */
2029
- public function wsal_log( $message ) {
2030
- if ( WP_DEBUG === true ) {
2031
- if ( is_array( $message ) || is_object( $message ) ) {
2032
- error_log( print_r( $message, true ) );
2033
- } else {
2034
- error_log( $message );
2035
- }
2036
- }
2037
- }
2038
 
2039
- /**
2040
- * Hide WSAL plugin from plugin list
2041
- *
2042
- * @param array $plugins All plugins.
2043
- * @return array
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
- // Find WSAL by plugin basename.
2054
- if ( array_key_exists( WSAL_BASE_NAME, $plugins ) ) {
2055
- // Remove WSAL plugin from plugin list page.
2056
- unset( $plugins[ WSAL_BASE_NAME ] );
2057
- }
2058
 
2059
- return $plugins;
2060
- }
 
 
 
 
 
 
 
 
 
 
 
 
2061
 
2062
- /**
2063
- * Use filter to hide freemius submenu items.
2064
- *
2065
- * @param boolean $is_visible Default visibility.
2066
- * @param string $submenu_id Menu slug.
2067
- *
2068
- * @return boolean New visibility.
2069
- */
2070
- public function hide_freemius_submenu_items( $is_visible, $submenu_id ) {
2071
- if ( 'contact' === $submenu_id ) {
2072
- $is_visible = false;
2073
- }
2074
- return $is_visible;
2075
- }
 
 
2076
 
2077
- /**
2078
- * Temporary autoloader for WSAL classes that somehow bypassed regular means of including
2079
- * them during the plugin runtime.
2080
- *
2081
- * As far as we know, only the UserSessionsTracking object will fall into this autoloader.
2082
- *
2083
- * We could optimize the code below by caching the list of extension folders.
2084
- *
2085
- * @param string $class Fully qualified class name.
2086
- *
2087
- * @return bool
2088
- */
2089
- public static function autoloader( $class ) {
2090
- if ( ! preg_match( '/^WSAL_/', $class ) ) {
2091
- return false;
2092
- }
2093
 
2094
- $base_path = plugin_dir_path( __FILE__ );
2095
- $subfolders = array();
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
- // use last part of the class name as the actual file name to look for
2110
- $file_name = substr( $class, strrpos( $class, '_' ) + 1 );
 
 
 
2111
 
2112
- // try the main "classes" folder first
2113
- $partial_path_to_file = 'classes' . DIRECTORY_SEPARATOR . implode( DIRECTORY_SEPARATOR, $subfolders ) . DIRECTORY_SEPARATOR . $file_name . '.php';
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
- return true;
2119
- }
 
2120
 
2121
- if ( ! function_exists( 'list_files' ) ) {
2122
- require_once ABSPATH . 'wp-admin/includes/file.php';
2123
- }
 
 
 
2124
 
2125
- if ( file_exists( $base_path . 'extensions' ) ) {
2126
- $extension_folders = list_files( $base_path . 'extensions', 1 );
2127
- foreach ( $extension_folders as $extension_folder ) {
2128
- if ( ! is_dir( $extension_folder ) ) {
2129
- continue;
2130
- }
2131
 
2132
- $path_to_file = $extension_folder . $partial_path_to_file;
2133
- if ( file_exists( $path_to_file ) ) {
2134
- require_once $path_to_file;
 
 
2135
 
2136
- return true;
2137
- }
2138
- }
2139
- }
2140
- }
2141
 
2142
- /**
2143
- * @see @see https://trello.com/c/1OCd5iKc/589-wieserdk-al4mwp-cannot-retrieve-events-when-admin-url-is-changed
2144
- * @return bool
2145
- */
2146
- private static function is_admin_blocking_plugins_support_enabled() {
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
- // allow if the admin blocking support settings is active
2174
- return ('yes' === $options_helper->get_option_value( 'admin-blocking-plugins-support', 'no' ) );
2175
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2176
 
2177
- /**
2178
- * Loads everything necessary to use DB adapter from the sessions extension.
2179
- *
2180
- * @since 4.1.4.1
2181
- */
2182
- public function load_sessions_extension_db_adapter() {
2183
- if ( file_exists( plugin_dir_path( __FILE__ ) . 'extensions/user-sessions/user-sessions.php' ) ) {
2184
- $this->maybe_add_sessions_trackers_early();
2185
- require_once plugin_dir_path( __FILE__ ) . 'extensions/user-sessions/user-sessions.php';
2186
- $sessions = new WSAL_UserSessions_Plugin();
2187
- $sessions->require_adapter_classes();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2188
  }
2189
  }
2190
 
2191
- /**
2192
- * Runs on premium version activation and installs database tables of the premium extensions (sessions table at
2193
- * the time of introducing this function).
2194
- *
2195
- * @since 4.1.4.1
2196
- */
2197
- public function on_freemius_premium_version_activation() {
2198
- $this->load_sessions_extension_db_adapter();
2199
- self::getConnector()->installSingle( 'WSAL_Adapters_MySQL_Session' );
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
- // Begin load sequence.
2219
- WpSecurityAuditLog::GetInstance();
2220
 
2221
- if ( is_admin() && ! WpSecurityAuditLog::is_plugin_active( plugin_basename( __FILE__ ) ) ) {
2222
- WpSecurityAuditLog::load_freemius();
2223
 
2224
- if ( ! apply_filters( 'wsal_disable_freemius_sdk', false ) ) {
2225
- wsal_freemius()->add_action( 'after_uninstall', array( 'WpSecurityAuditLog', 'uninstall' ) );
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' ) . ' &nbsp;&#10140;</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' );