From 30f6692a58b82170da41e54bdc82e1282624b138 Mon Sep 17 00:00:00 2001
From: Lai Power $msg ' . __( 'Fill in the options below if you want to be notified by mail about new vulnerabilities. To add multiple e-mail addresses comma separate them.', 'wpscan' ) . '';
- echo '
';
-
- // Output upgrade/manage button.
- echo "$btn_text";
- }
-}
diff --git a/wp-content/plugins/wpscan/app/Checks/Check.php b/wp-content/plugins/wpscan/app/Checks/Check.php
deleted file mode 100644
index ccc6dfb6..00000000
--- a/wp-content/plugins/wpscan/app/Checks/Check.php
+++ /dev/null
@@ -1,244 +0,0 @@
-id = $id;
- $this->dir = $dir;
- $this->parent = $parent;
-
- $count = $this->get_vulnerabilities_count();
-
- $this->actions[] = array(
- 'id' => 'run',
- 'title' => __( 'Run', 'wpscan' ),
- 'method' => 'run',
- );
-
- if ( $count > 0 ) {
- $this->actions[] = array(
- 'id' => 'dismiss',
- 'title' => __( 'Dismiss', 'wpscan' ),
- 'method' => 'dismiss',
- 'confirm' => true,
- );
- }
-
- if ( method_exists( $this, 'init' ) ) {
- $this->init();
- }
- }
-
- /**
- * Check title.
- *
- * @since 1.0.0
- * @access public
- * @return string
- */
- abstract public function title();
-
- /**
- * Check description.
- *
- * @since 1.0.0
- * @access public
- * @return string
- */
- abstract public function description();
-
- /**
- * Success message.
- *
- * @since 1.0.0
- * @access public
- * @return string
- */
- abstract public function success_message();
-
- /**
- * Add vulnerability
- *
- * @since 1.0.0
- *
- * @param string $title The vulnerability title.
- * @param string $severity The severity, can be critical, high, medium, low and info.
- * @param string $id Unique string to represent the vulnerability in the report object.
- *
- * @access public
- * @return void
- */
- final public function add_vulnerability( $title, $severity, $id, $remediation_url ) {
- $vulnerability = array(
- 'title' => $title,
- 'severity' => $severity,
- 'id' => $id,
- 'remediation_url' => $remediation_url,
- );
-
- $this->vulnerabilities[] = $vulnerability;
- }
-
- /**
- * Get vulnerabilities.
- *
- * @since 1.0.0
- * @access public
- * @return array|null
- */
- final public function get_vulnerabilities() {
- if ( ! empty( $this->vulnerabilities ) ) {
- return $this->vulnerabilities;
- }
-
- $report = $this->parent->get_report();
-
- if ( isset( $report['security-checks'] ) ) {
- if ( isset( $report['security-checks'][ $this->id ] ) ) {
- return $report['security-checks'][ $this->id ]['vulnerabilities'];
- }
- }
-
- return null;
- }
-
- /**
- * Get item non-ignored vulnerabilities count
- *
- * @since 1.0.0
- *
- * @access public
- * @return int
- */
- public function get_vulnerabilities_count() {
- $vulnerabilities = $this->get_vulnerabilities();
- $ignored = $this->parent->get_ignored_vulnerabilities();
-
- if ( empty( $vulnerabilities ) ) {
- return 0;
- }
-
- foreach ( $vulnerabilities as $key => &$item ) {
- if ( in_array( $item['id'], $ignored, true ) ) {
- unset( $vulnerabilities[ $key ] );
- }
- }
-
- return count( $vulnerabilities );
- }
-
- /**
- * Dismiss action
- *
- * @since 1.0.0
- * @access public
- * @return bool
- */
- public function dismiss() {
- $report = $this->parent->get_report();
- $updated = $report;
-
- if ( isset( $updated['security-checks'] ) ) {
- if ( isset( $updated['security-checks'][ $this->id ] ) ) {
- $updated['security-checks'][ $this->id ]['vulnerabilities'] = array();
- }
- }
-
- if ( $report === $updated ) {
- return true;
- } else {
- return update_option( $this->parent->OPT_REPORT, $updated );
- }
- }
-
- /**
- * Run action.
- *
- * @since 1.0.0
- * @access public
- * @return bool
- */
- public function run() {
- $report = $this->parent->get_report();
- $updated = $report;
-
- if ( empty( $updated ) ) {
- $updated = array(
- 'security-checks' => array(),
- 'plugins' => array(),
- 'themes' => array(),
- 'wordpress' => array(),
- );
- }
-
- if ( isset( $updated['security-checks'][ $this->id ] ) ) {
- $updated['security-checks'][ $this->id ] = array();
- }
-
- $this->perform();
-
- if ( is_array( $this->vulnerabilities ) ) {
- $updated['security-checks'][ $this->id ]['vulnerabilities'] = $this->vulnerabilities;
-
- $this->parent->maybe_fire_issue_found_action('security-check', $this->id, $updated['security-checks'][ $this->id ]);
- } else {
- $updated['security-checks'][ $this->id ]['vulnerabilities'] = array();
- }
-
- if ( $report === $updated ) {
- return true;
- } else {
- return update_option( $this->parent->OPT_REPORT, $updated );
- }
- }
-
- /**
- * Perform the check and save the results.
- *
- * @since 1.0.0
- * @access public
- * @return void
- */
- abstract public function perform();
-}
diff --git a/wp-content/plugins/wpscan/app/Checks/System.php b/wp-content/plugins/wpscan/app/Checks/System.php
deleted file mode 100644
index e07dc083..00000000
--- a/wp-content/plugins/wpscan/app/Checks/System.php
+++ /dev/null
@@ -1,377 +0,0 @@
-parent = $parent;
- $this->current_running = get_option( $this->OPT_EVENTS_INLINE );
-
- register_shutdown_function( array( $this, 'catch_errors' ) );
-
- add_action( 'admin_notices', array( $this, 'display_errors' ) );
-
- add_action( 'plugins_loaded', array( $this, 'load_checks' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
- add_action( 'wp_ajax_wpscan_check_action', array( $this, 'handle_actions' ) );
-
- add_action( $this->WPSCAN_SECURITY_SCHEDULE, array( $this, 'security_check_now' ), 99 );
- }
-
- /**
- * Register Admin Scripts
- *
- * @param string $hook parent.
- *
- * @access public
- * @return void
- * @since 1.0.0
- */
- public function admin_enqueue( $hook ) {
- if ( $hook === $this->parent->page_hook ) {
- wp_enqueue_script(
- 'wpscan-security-checks',
- plugins_url( 'assets/js/security-checks.js', WPSCAN_PLUGIN_FILE ),
- array( 'jquery-ui-tooltip' )
- );
- }
- }
-
- /**
- * Load checks files.
- *
- * @return void
- * @since 1.0.0
- * @access public
- */
- public function load_checks() {
- $dir = $this->parent->plugin_dir . 'security-checks';
- $folders = array_diff( scandir( $dir ), array( '..', '.' ) );
-
- foreach ( $folders as $folder ) {
- $file = "$dir/$folder/check.php";
-
- if ( '.' === $folder[0] ) {
- continue;
- }
-
- require_once $file;
-
- $data = get_file_data( $file, array( 'classname' => 'classname' ) );
-
- $data['instance'] = new $data['classname']( $folder, "$dir/$folder", $this->parent );
-
- $this->checks[ $folder ] = $data;
- }
- }
-
- /**
- * Register a shutdown hook to catch errors
- *
- * @return void
- * @since 1.0.0
- * @access public
- */
- public function catch_errors() {
- $error = error_get_last();
-
- if ( $error && $error['type'] ) {
-
- if ( basename( $error['file'] ) == 'check.php' ) {
- $errors = get_option( $this->OPT_FATAL_ERRORS, array() );
-
- array_push( $errors, $error );
-
- update_option( $this->OPT_FATAL_ERRORS, array_unique( $errors ) );
-
- $report = $this->parent->get_report();
-
- $report['cache'] = strtotime( current_time( 'mysql' ) );
-
- update_option( $this->parent->OPT_REPORT, $report );
-
- $this->parent->classes['account']->update_account_status();
-
- delete_transient( $this->parent->WPSCAN_TRANSIENT_CRON );
- }
- }
- }
-
- /**
- * Display fatal errors
- *
- * @return void
- * @since 1.0.0
- * @access public
- */
- public function display_errors() {
- $screen = get_current_screen();
- $errors = get_option( $this->OPT_FATAL_ERRORS, array() );
-
- if ( strstr( $screen->id, $this->parent->classes['report']->page ) ) {
- foreach ( $errors as $err ) {
- $msg = explode( 'Stack', $err['message'] )[0];
- $msg = trim( $msg );
-
- echo "
', $list );
- }
- }
-
- /**
- * Display actions buttons
- *
- * @param object $instance - The check instance.
- *
- * @access public
- * @return string
- * @since 1.0.0
- *
- */
- public function list_actions( $instance ) {
- foreach ( $instance->actions as $action ) {
- $confirm = isset( $action['confirm'] ) ? $action['confirm'] : false;
- $button_text = ( $this->current_running && array_key_exists( $instance->id, $this->current_running ) && 'dismiss' !== $action['id'] ) ? esc_html__( 'Running', 'wpscan' ) : esc_html( $action['title'] );
- $button_disabled = ( $this->current_running && array_key_exists( $instance->id, $this->current_running ) && 'dismiss' !== $action['id'] ) ? ' disabled' : '';
-
- echo sprintf(
- "",
- esc_attr( $instance->id ),
- esc_attr( $confirm ),
- esc_attr( $action['id'] ),
- $button_disabled,
- $button_text
- );
- }
- }
-
- /**
- * Get actions buttons
- *
- * @param object $instance - The check instance.
- *
- * @access public
- * @return string
- * @since 1.14.4
- *
- */
- public function get_list_actions( $instance ) {
- foreach ( $instance->actions as $action ) {
- $confirm = isset( $action['confirm'] ) ? $action['confirm'] : false;
- $button_text = ( $this->current_running && array_key_exists( $instance->id, $this->current_running ) && 'dismiss' !== $action['id'] ) ? esc_html__( 'Running', 'wpscan' ) : esc_html( $action['title'] );
- $button_disabled = ( $this->current_running && array_key_exists( $instance->id, $this->current_running ) && 'dismiss' !== $action['id'] ) ? ' disabled' : '';
-
- return sprintf(
- "",
- esc_attr( $instance->id ),
- esc_attr( $confirm ),
- esc_attr( $action['id'] ),
- $button_disabled,
- $button_text
- );
- }
- }
-
- /**
- * Load checks files.
- *
- * @return void
- * @since 1.0.0
- * @access public
- */
- public function handle_actions() {
- check_ajax_referer( 'wpscan' );
-
- if ( ! current_user_can( $this->parent->WPSCAN_ROLE ) ) {
- wp_die();
- }
-
- $check = isset( $_POST['check'] ) ? $_POST['check'] : false;
- $action = isset( $_POST['action_id'] ) ? $_POST['action_id'] : false;
-
- if ( $action && $check ) {
- $res = 0;
- if ( 'run' === $action ) {
- $event_type[ $check ] = $action;
- $this->add_event_inline( $event_type );
-
- if ( false === as_next_scheduled_action( $this->WPSCAN_SECURITY_SCHEDULE ) ) {
- as_schedule_single_action( strtotime( 'now' ), $this->WPSCAN_SECURITY_SCHEDULE );
- }
- $res = 1;
- } else {
- $action = array_filter(
- $this->checks[ $check ]['instance']->actions,
- function ( $i ) use ( $action ) {
- return $i['id'] === $action;
- }
- );
-
- $action = current( $action );
-
- if ( method_exists( $this->checks[ $check ]['instance'], $action['method'] ) ) {
- $res = call_user_func( array( $this->checks[ $check ]['instance'], $action['method'] ) );
- }
- }
-
- if ( $res ) {
- wp_send_json_success( $check );
- } else {
- wp_send_json_error();
- }
- }
-
- wp_send_json_error();
- }
-
- /**
- * Run the Security checks
- *
- * @since 1.15
- * @acces public
- */
- public function security_check_now() {
- if ( ! empty( $this->current_running ) ) {
- foreach ( $this->current_running as $key => $to_check ) {
- $check = $key;
- $action = $to_check;
- $action = array_filter(
- $this->checks[ $check ]['instance']->actions,
- function ( $i ) use ( $action ) {
- return $i['id'] === $action;
- }
- );
-
- $action = current( $action );
-
- if ( method_exists( $this->checks[ $check ]['instance'], $action['method'] ) ) {
- call_user_func( array( $this->checks[ $check ]['instance'], $action['method'] ) );
- }
- $this->remove_event_from_list( $check );
- as_schedule_single_action( strtotime( 'now' ) + 10, $this->WPSCAN_SECURITY_SCHEDULE );
-
- break;
- }
- } else {
- delete_option( $this->OPT_EVENTS_INLINE );
- }
- }
-
- /**
- * Register event to wait inline
- *
- * @param $event_type
- *
- * @since 1.15
- * @acces public
- */
- public function add_event_inline( $event_type ) {
- if ( $this->current_running ) {
- update_option( $this->OPT_EVENTS_INLINE, $this->current_running + $event_type );
- } else {
- update_option( $this->OPT_EVENTS_INLINE, $event_type );
- }
- }
-
- /**
- * Remove event from the waiting line
- *
- * @param $event
- *
- * @since 1.15
- * @acces public
- */
- public function remove_event_from_list( $event ) {
- if ( $event ) {
- unset( $this->current_running[ $event ] );
- update_option( $this->OPT_EVENTS_INLINE, $this->current_running );
- }
- }
-}
diff --git a/wp-content/plugins/wpscan/app/Dashboard.php b/wp-content/plugins/wpscan/app/Dashboard.php
deleted file mode 100644
index 6b53b9af..00000000
--- a/wp-content/plugins/wpscan/app/Dashboard.php
+++ /dev/null
@@ -1,84 +0,0 @@
-parent = $parent;
-
- add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widgets' ) );
- }
-
- /**
- * Add the widget
- *
- * @since 1.0.0
- * @access public
- * @return void
- */
- public function add_dashboard_widgets() {
- if ( ! current_user_can( $this->parent->WPSCAN_ROLE ) ) {
- return;
- }
-
- wp_add_dashboard_widget(
- $this->parent->WPSCAN_DASHBOARD,
- __( 'WPScan Status', 'wpscan' ),
- array( $this, 'dashboard_widget_content' )
- );
- }
-
- /**
- * Render the widget
- *
- * @since 1.0.0
- * @access public
- * @return string
- */
- public function dashboard_widget_content() {
- $report = $this->parent->get_report();
-
- if ( ! $this->parent->classes['settings']->api_token_set() ) {
- echo esc_html( '
";
- }
-
- echo '
' . __( 'No scan run yet!', 'wpscan' ) . '
'; - } elseif ( empty( $errors ) && 0 === $total ) { - echo '' . __( 'No known vulnerabilities found', 'wpscan' ) . '
'; - } elseif ( ! get_option( $this->parent->OPT_API_TOKEN ) ) { - echo '' . __( 'You need to add a WPScan API Token to the settings page', 'wpscan' ) . '
'; - } else { - echo '' . __( 'Some vulnerabilities were found', 'wpscan' ) . '
'; - } - ?> - -- -
-- - - - - -
- - parent->WPSCAN_SCHEDULE ) ) { ?> -- - parent->WPSCAN_SCHEDULE ) ); ?> -
- - - - -- parent->OPT_API_TOKEN ) ) { - _e( 'Click the Run All button to run a full vulnerability scan against your WordPress website.', 'wpscan' ); - } else { - _e( 'Add your API token to the settings page to be able to run a full scan.', 'wpscan' ); - } - ?> -
- - parent->OPT_API_TOKEN ) ) : ?> -- parent->WPSCAN_RUN_ALL ) ) { - $spinner_display = ' style="visibility: visible;"'; - $button_disabled = 'disabled'; - } - ?> - > - -
- - - parent->WPSCAN_ROLE ) ) { - wp_redirect( home_url() ); - wp_die(); - } - - if ( false === as_next_scheduled_action( $this->parent->WPSCAN_RUN_ALL ) ) { - as_schedule_single_action( strtotime( 'now' ), $this->parent->WPSCAN_RUN_ALL ); - } - - wp_die(); - } - - /** - * Ajax security check now - * - * @return void - * @since 1.0.0 - * @access public - */ - public function ajax_security_check_now() { - check_ajax_referer( 'wpscan' ); - - if ( ! current_user_can( $this->parent->WPSCAN_ROLE ) ) { - wp_redirect( home_url() ); - wp_die(); - } - - $items_inline = get_option( $this->parent->WPSCAN_RUN_SECURITY ); - - $plugins = array(); - foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) { - $plugins[ $id ] = array( - 'status' => $this->parent->classes['report']->get_status( 'security-checks', $id ), - 'vulnerabilities' => $this->parent->classes['checks/system']->get_check_vulnerabilities( $data['instance'] ), - 'security-check-actions' => $this->parent->classes['checks/system']->get_list_actions( $data['instance'] ), - ); - } - - $response = array( - 'inline' => $items_inline, - 'plugins' => $plugins, - ); - - wp_die( wp_json_encode( $response ) ); - } - - /** - * Ajax to check when the cron task has finished - * - * @return void - * @since 1.0.0 - * @access public - */ - public function ajax_doing_cron() { - check_ajax_referer( 'wpscan' ); - - if ( ! current_user_can( $this->parent->WPSCAN_ROLE ) ) { - wp_redirect( home_url() ); - wp_die(); - } - - // echo get_transient( $this->parent->WPSCAN_TRANSIENT_CRON ) ? 'YES' : 'NO'; - echo false !== as_next_scheduled_action( $this->parent->WPSCAN_RUN_ALL ) ? 'YES' : 'NO'; - - wp_die(); - } -} diff --git a/wp-content/plugins/wpscan/app/ignoreVulnerabilities.php b/wp-content/plugins/wpscan/app/ignoreVulnerabilities.php deleted file mode 100644 index a13f4e1f..00000000 --- a/wp-content/plugins/wpscan/app/ignoreVulnerabilities.php +++ /dev/null @@ -1,191 +0,0 @@ -parent = $parent; - $this->page = 'wpscan_ignore_vulnerabilities'; - - add_action( 'admin_init', array( $this, 'admin_init' ) ); - add_action( 'admin_init', array( $this, 'add_meta_box_ignore_vulnerabilities' ) ); - } - - /** - * Ignore vulnerabilities option - * - * @since 1.0.0 - * @access public - * @return void - */ - public function admin_init() { - $total = $this->parent->get_total(); - - register_setting( $this->page, $this->parent->OPT_IGNORED, array( $this, 'sanitize_ignored' ) ); - - $section = $this->page . '_section'; - - add_settings_section( - $section, - null, - array( $this, 'introduction' ), - $this->page - ); - - if ( $total > 0 ) { - add_settings_field( - $this->parent->OPT_IGNORED, - null, - array( $this, 'field_ignored' ), - $this->page, - $section - ); - } - } - - /** - * Add meta box - * - * @since 1.0.0 - * @access public - * @return void - */ - public function add_meta_box_ignore_vulnerabilities() { - add_meta_box( - 'wpscan-metabox-ignore-vulnerabilities', - __( 'Ignore Vulnerabilities', 'wpscan' ), - array( $this, 'do_meta_box_ignore_vulnerabilities' ), - 'wpscan', - 'side', - 'low' - ); - } - - /** - * Render meta box - * - * @since 1.0.0 - * @access public - * @return string - */ - public function do_meta_box_ignore_vulnerabilities() { - echo ''; - } - - /** - * Introduction - * - * @since 1.0.0 - * @access public - * @return void - */ - public function introduction() { } - - /** - * Ignored field - * - * @since 1.0.0 - * @access public - * @return void - */ - public function field_ignored() { - $this->list_vulnerabilities_to_ignore( 'wordpress', get_bloginfo( 'version' ) ); - - foreach ( get_plugins() as $name => $details ) { - $this->list_vulnerabilities_to_ignore( 'plugins', $this->parent->get_plugin_slug( $name, $details ) ); - } - - foreach ( wp_get_themes() as $name => $details ) { - $this->list_vulnerabilities_to_ignore( 'themes', $this->parent->get_theme_slug( $name, $details ) ); - } - - if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) { - foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) { - $this->list_vulnerabilities_to_ignore( 'security-checks', $id ); - } - } - } - - /** - * Sanitize ignored - * - * @since 1.0.0 - * @param string $value value. - * @access public - * @return string - */ - public function sanitize_ignored( $value ) { - if ( empty( $value ) ) { - return array(); - } - - return $value; - } - - /** - * List of vulnerabilities - * - * @since 1.0.0 - * - * @param string $type - Type of report: wordpress, plugins, themes. - * @param string $name - key name of the element. - * - * @access public - * @return string - */ - public function list_vulnerabilities_to_ignore( $type, $name ) { - $report = $this->parent->get_report(); - - if ( isset( $report[ $type ] ) && isset( $report[ $type ][ $name ] ) ) { - $report = $report[ $type ][ $name ]; - } - - if ( ! isset( $report['vulnerabilities'] ) ) { - return null; - } - - $ignored = $this->parent->get_ignored_vulnerabilities(); - - foreach ( $report['vulnerabilities'] as $item ) { - $id = 'security-checks' === $type ? $item['id'] : $item->id; - $title = 'security-checks' === $type ? $item['title'] : $this->parent->get_sanitized_vulnerability_title( $item ); - - echo sprintf( - '>8,g=u%256,y.push(g),y.push(p);return y}(o,i.length-u),i,u,p)}function base64Slice(i,o,u){return 0===o&&u===i.length?p.fromByteArray(i):p.fromByteArray(i.slice(o,u))}function utf8Slice(i,o,u){u=Math.min(i.length,u);for(var p=[],g=o;g239?4:k>223?3:k>191?2:1;if(g+E<=u)switch(E){case 1:k<128&&(P=k);break;case 2:128==(192&(y=i[g+1]))&&(x=(31&k)<<6|63&y)>127&&(P=x);break;case 3:y=i[g+1],w=i[g+2],128==(192&y)&&128==(192&w)&&(x=(15&k)<<12|(63&y)<<6|63&w)>2047&&(x<55296||x>57343)&&(P=x);break;case 4:y=i[g+1],w=i[g+2],_=i[g+3],128==(192&y)&&128==(192&w)&&128==(192&_)&&(x=(15&k)<<18|(63&y)<<12|(63&w)<<6|63&_)>65535&&x<1114112&&(P=x)}null===P?(P=65533,E=1):P>65535&&(P-=65536,p.push(P>>>10&1023|55296),P=56320|1023&P),p.push(P),g+=E}return function decodeCodePointsArray(i){var o=i.length;if(o<=4096)return String.fromCharCode.apply(String,i);var u="",p=0;for(;p =o.length||g>=i.length);++g)o[g+u]=i[g];return g}}).call(this,u(27))},function(i,o){i.exports=function(i){return"object"==typeof i?null!==i:"function"==typeof i}},function(i,o,u){var p=u(11);i.exports=function(i){if(!p(i))throw TypeError(String(i)+" is not an object");return i}},function(i,o,u){var p=u(3);i.exports=!p((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(i,o,u){var p,g,y,w,_,x,k,P,E,O,I,B,D,R,N,U,W,G,j;i.exports=(p=u(2),u(50),void(p.lib.Cipher||(g=p,y=g.lib,w=y.Base,_=y.WordArray,x=y.BufferedBlockAlgorithm,k=g.enc,k.Utf8,P=k.Base64,E=g.algo.EvpKDF,O=y.Cipher=x.extend({cfg:w.extend(),createEncryptor:function(i,o){return this.create(this._ENC_XFORM_MODE,i,o)},createDecryptor:function(i,o){return this.create(this._DEC_XFORM_MODE,i,o)},init:function(i,o,u){this.cfg=this.cfg.extend(u),this._xformMode=i,this._key=o,this.reset()},reset:function(){x.reset.call(this),this._doReset()},process:function(i){return this._append(i),this._process()},finalize:function(i){return i&&this._append(i),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function selectCipherStrategy(i){return"string"==typeof i?j:W}return function(i){return{encrypt:function(o,u,p){return selectCipherStrategy(u).encrypt(i,o,u,p)},decrypt:function(o,u,p){return selectCipherStrategy(u).decrypt(i,o,u,p)}}}}()}),y.StreamCipher=O.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),I=g.mode={},B=y.BlockCipherMode=w.extend({createEncryptor:function(i,o){return this.Encryptor.create(i,o)},createDecryptor:function(i,o){return this.Decryptor.create(i,o)},init:function(i,o){this._cipher=i,this._iv=o}}),D=I.CBC=function(){var i=B.extend();function xorBlock(i,o,u){var p=this._iv;if(p){var g=p;this._iv=void 0}else g=this._prevBlock;for(var y=0;y>>2];i.sigBytes-=o}},y.BlockCipher=O.extend({cfg:O.cfg.extend({mode:D,padding:R}),reset:function(){O.reset.call(this);var i=this.cfg,o=i.iv,u=i.mode;if(this._xformMode==this._ENC_XFORM_MODE)var p=u.createEncryptor;else p=u.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==p?this._mode.init(this,o&&o.words):(this._mode=p.call(u,this,o&&o.words),this._mode.__creator=p)},_doProcessBlock:function(i,o){this._mode.processBlock(i,o)},_doFinalize:function(){var i=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){i.pad(this._data,this.blockSize);var o=this._process(!0)}else o=this._process(!0),i.unpad(o);return o},blockSize:4}),N=y.CipherParams=w.extend({init:function(i){this.mixIn(i)},toString:function(i){return(i||this.formatter).stringify(this)}}),U=(g.format={}).OpenSSL={stringify:function(i){var o=i.ciphertext,u=i.salt;if(u)var p=_.create([1398893684,1701076831]).concat(u).concat(o);else p=o;return p.toString(P)},parse:function(i){var o=P.parse(i),u=o.words;if(1398893684==u[0]&&1701076831==u[1]){var p=_.create(u.slice(2,4));u.splice(0,4),o.sigBytes-=16}return N.create({ciphertext:o,salt:p})}},W=y.SerializableCipher=w.extend({cfg:w.extend({format:U}),encrypt:function(i,o,u,p){p=this.cfg.extend(p);var g=i.createEncryptor(u,p),y=g.finalize(o),w=g.cfg;return N.create({ciphertext:y,key:u,iv:w.iv,algorithm:i,mode:w.mode,padding:w.padding,blockSize:i.blockSize,formatter:p.format})},decrypt:function(i,o,u,p){return p=this.cfg.extend(p),o=this._parse(o,p.format),i.createDecryptor(u,p).finalize(o.ciphertext)},_parse:function(i,o){return"string"==typeof i?o.parse(i,this):i}}),G=(g.kdf={}).OpenSSL={execute:function(i,o,u,p){p||(p=_.random(8));var g=E.create({keySize:o+u}).compute(i,p),y=_.create(g.words.slice(o),4*u);return g.sigBytes=4*o,N.create({key:g,iv:y,salt:p})}},j=y.PasswordBasedCipher=W.extend({cfg:W.cfg.extend({kdf:G}),encrypt:function(i,o,u,p){var g=(p=this.cfg.extend(p)).kdf.execute(u,i.keySize,i.ivSize);p.iv=g.iv;var y=W.encrypt.call(this,i,o,g.key,p);return y.mixIn(g),y},decrypt:function(i,o,u,p){p=this.cfg.extend(p),o=this._parse(o,p.format);var g=p.kdf.execute(u,i.keySize,i.ivSize,o.salt);return p.iv=g.iv,W.decrypt.call(this,i,o,g.key,p)}}))))},function(i,o){var u={}.hasOwnProperty;i.exports=function(i,o){return u.call(i,o)}},function(i,o,u){var p=u(13),g=u(203),y=u(12),w=u(55),_=Object.defineProperty;o.f=p?_:function defineProperty(i,o,u){if(y(i),o=w(o,!0),y(u),g)try{return _(i,o,u)}catch(i){}if("get"in u||"set"in u)throw TypeError("Accessors not supported");return"value"in u&&(i[o]=u.value),i}},function(i,o){var u=i.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=u)},function(i,o,u){var p=u(13),g=u(16),y=u(41);i.exports=p?function(i,o,u){return g.f(i,o,y(1,u))}:function(i,o,u){return i[o]=u,i}},function(i,o,u){var p=u(35);i.exports=function(i){return Object(p(i))}},function(i,o,u){var p=u(185)("wks"),g=u(133),y=u(17).Symbol,w="function"==typeof y;(i.exports=function(i){return p[i]||(p[i]=w&&y[i]||(w?y:g)("Symbol."+i))}).store=p},function(i,o,u){var p=u(90),g=u(35);i.exports=function(i){return p(g(i))}},function(i,o,u){var p=u(93),g=u(90),y=u(19),w=u(8),_=u(212),x=[].push,createMethod=function(i){var o=1==i,u=2==i,k=3==i,P=4==i,E=6==i,O=7==i,I=5==i||E;return function(B,D,R,N){for(var U,W,G=y(B),j=g(G),X=p(D,R,3),K=w(j.length),Y=0,J=N||_,$=o?J(B,K):u||O?J(B,0):void 0;K>Y;Y++)if((I||Y in j)&&(W=X(U=j[Y],Y,G),i))if(o)$[Y]=W;else if(W)switch(i){case 3:return!0;case 5:return U;case 6:return Y;case 2:x.call($,U)}else switch(i){case 4:return!1;case 7:x.call($,U)}return E?-1:k||P?P:$}};i.exports={forEach:createMethod(0),map:createMethod(1),filter:createMethod(2),some:createMethod(3),every:createMethod(4),find:createMethod(5),findIndex:createMethod(6),filterOut:createMethod(7)}},function(i,o){i.exports=function(i){return"object"==typeof i?null!==i:"function"==typeof i}},function(i,o,u){i.exports=!u(53)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(i,o,u){var p=u(4),g=u(18),y=u(15),w=u(141),_=u(142),x=u(43),k=x.get,P=x.enforce,E=String(String).split("String");(i.exports=function(i,o,u,_){var x,k=!!_&&!!_.unsafe,O=!!_&&!!_.enumerable,I=!!_&&!!_.noTargetGet;"function"==typeof u&&("string"!=typeof o||y(u,"name")||g(u,"name",o),(x=P(u)).source||(x.source=E.join("string"==typeof o?o:""))),i!==p?(k?!I&&i[o]&&(O=!0):delete i[o],O?i[o]=u:g(i,o,u)):O?i[o]=u:w(o,u)})(Function.prototype,"toString",(function toString(){return"function"==typeof this&&k(this).source||_(this)}))},function(i,o,u){var p=u(29),g=u(254),y=u(179),w=Object.defineProperty;o.f=u(24)?Object.defineProperty:function defineProperty(i,o,u){if(p(i),o=y(o,!0),p(u),g)try{return w(i,o,u)}catch(i){}if("get"in u||"set"in u)throw TypeError("Accessors not supported!");return"value"in u&&(i[o]=u.value),i}},function(i,o){var u;u=function(){return this}();try{u=u||new Function("return this")()}catch(i){"object"==typeof window&&(u=window)}i.exports=u},function(i,o,u){"use strict";var p=u(21),g=u(153),y=u(94),w=u(43),_=u(217),x=w.set,k=w.getterFor("Array Iterator");i.exports=_(Array,"Array",(function(i,o){x(this,{type:"Array Iterator",target:p(i),index:0,kind:o})}),(function(){var i=k(this),o=i.target,u=i.kind,p=i.index++;return!o||p>=o.length?(i.target=void 0,{value:void 0,done:!0}):"keys"==u?{value:p,done:!1}:"values"==u?{value:o[p],done:!1}:{value:[p,o[p]],done:!1}}),"values"),y.Arguments=y.Array,g("keys"),g("values"),g("entries")},function(i,o,u){var p=u(23);i.exports=function(i){if(!p(i))throw TypeError(i+" is not an object!");return i}},function(i,o,u){var p=u(112),g=u(4),aFunction=function(i){return"function"==typeof i?i:void 0};i.exports=function(i,o){return arguments.length<2?aFunction(p[i])||aFunction(g[i]):p[i]&&p[i][o]||g[i]&&g[i][o]}},function(i,o){i.exports=function(i){if("function"!=typeof i)throw TypeError(String(i)+" is not a function");return i}},function(i,o,u){var p=u(150),g=u(25),y=u(323);p||g(Object.prototype,"toString",y,{unsafe:!0})},function(i,o,u){var p=u(98);i.exports=function(i,o,u){if(p(i),void 0===o)return i;switch(u){case 1:return function(u){return i.call(o,u)};case 2:return function(u,p){return i.call(o,u,p)};case 3:return function(u,p,g){return i.call(o,u,p,g)}}return function(){return i.apply(o,arguments)}}},function(i,o,u){var p=u(13),g=u(107),y=u(41),w=u(21),_=u(55),x=u(15),k=u(203),P=Object.getOwnPropertyDescriptor;o.f=p?P:function getOwnPropertyDescriptor(i,o){if(i=w(i),o=_(o,!0),k)try{return P(i,o)}catch(i){}if(x(i,o))return y(!g.f.call(i,o),i[o])}},function(i,o){i.exports=function(i){if(null==i)throw TypeError("Can't call method on "+i);return i}},function(i,o){var u=Math.ceil,p=Math.floor;i.exports=function(i){return isNaN(i=+i)?0:(i>0?p:u)(i)}},function(i,o,u){var p=u(12),g=u(31),y=u(6)("species");i.exports=function(i,o){var u,w=p(i).constructor;return void 0===w||null==(u=p(w)[y])?o:g(u)}},function(i,o,u){"use strict";(function(o){var p,g=u(10),y=g.Buffer,w={};for(p in g)g.hasOwnProperty(p)&&"SlowBuffer"!==p&&"Buffer"!==p&&(w[p]=g[p]);var _=w.Buffer={};for(p in y)y.hasOwnProperty(p)&&"allocUnsafe"!==p&&"allocUnsafeSlow"!==p&&(_[p]=y[p]);if(w.Buffer.prototype=y.prototype,_.from&&_.from!==Uint8Array.from||(_.from=function(i,o,u){if("number"==typeof i)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof i);if(i&&void 0===i.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i);return y(i,o,u)}),_.alloc||(_.alloc=function(i,o,u){if("number"!=typeof i)throw new TypeError('The "size" argument must be of type number. Received type '+typeof i);if(i<0||i>=2*(1<<30))throw new RangeError('The value "'+i+'" is invalid for option "size"');var p=y(i);return o&&0!==o.length?"string"==typeof u?p.fill(o,u):p.fill(o):p.fill(0),p}),!w.kStringMaxLength)try{w.kStringMaxLength=o.binding("buffer").kStringMaxLength}catch(i){}w.constants||(w.constants={MAX_LENGTH:w.kMaxLength},w.kStringMaxLength&&(w.constants.MAX_STRING_LENGTH=w.kStringMaxLength)),i.exports=w}).call(this,u(48))},function(i,o,u){(function(){var i,p;i=u(87).Number,o.resolveLength=function(o,u,p){var g;if("number"==typeof o?g=o:"function"==typeof o?g=o.call(p,p):p&&"string"==typeof o?g=p[o]:u&&o instanceof i&&(g=o.decode(u)),isNaN(g))throw new Error("Not a fixed size");return g},p=function p(i){var o,u;for(o in null==i&&(i={}),this.enumerable=!0,this.configurable=!0,i)u=i[o],this[o]=u},o.PropertyDescriptor=p}).call(this)},function(i,o,u){var p=u(26),g=u(97);i.exports=u(24)?function(i,o,u){return p.f(i,o,g(1,u))}:function(i,o,u){return i[o]=u,i}},function(i,o){i.exports=function(i,o){return{enumerable:!(1&i),configurable:!(2&i),writable:!(4&i),value:o}}},function(i,o){var u={}.toString;i.exports=function(i){return u.call(i).slice(8,-1)}},function(i,o,u){var p,g,y,w=u(310),_=u(4),x=u(11),k=u(18),P=u(15),E=u(143),O=u(108),I=u(111),B=_.WeakMap;if(w){var D=E.state||(E.state=new B),R=D.get,N=D.has,U=D.set;p=function(i,o){return o.facade=i,U.call(D,i,o),o},g=function(i){return R.call(D,i)||{}},y=function(i){return N.call(D,i)}}else{var W=O("state");I[W]=!0,p=function(i,o){return o.facade=i,k(i,W,o),o},g=function(i){return P(i,W)?i[W]:{}},y=function(i){return P(i,W)}}i.exports={set:p,get:g,has:y,enforce:function(i){return y(i)?g(i):p(i,{})},getterFor:function(i){return function(o){var u;if(!x(o)||(u=g(o)).type!==i)throw TypeError("Incompatible receiver, "+i+" required");return u}}}},function(i,o,u){var p=u(36),g=Math.max,y=Math.min;i.exports=function(i,o){var u=p(i);return u<0?g(u+o,0):y(u,o)}},function(i,o,u){var p,g=u(12),y=u(311),w=u(144),_=u(111),x=u(209),k=u(140),P=u(108),E=P("IE_PROTO"),EmptyConstructor=function(){},scriptTag=function(i){return"
- {% endif %}
-