diff --git a/wp-content/plugins/simple-local-avatars/10up-lib/wp-compat-validation-tool/replace-namespace.sh b/wp-content/plugins/simple-local-avatars/10up-lib/wp-compat-validation-tool/replace-namespace.sh new file mode 100644 index 000000000..8183aa227 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/10up-lib/wp-compat-validation-tool/replace-namespace.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Script directory and filename +SCRIPT_DIR="$(dirname "$0")" +SCRIPT_NAME="$(basename "$0")" + +# Check for the required argument +if [ "$#" -ne 1 ]; then + echo "Usage: $0 New_Namespace" + exit 1 +fi + +NEW_NAMESPACE="$1" + +# Use find to get all files recursively from the script's directory, excluding the script itself +find "$SCRIPT_DIR" -type f \( -name "*.php" -o -name "*.json" \) ! -name "$SCRIPT_NAME" | while read -r file; do + echo $file + # Use perl for the replacement in each file + perl -pi -e "s/WP_Compat_Validation_Tool/$NEW_NAMESPACE/g" "$file" +done + +cd 10up-lib/wp-compat-validation-tool && rm -rf .git .github .gitignore composer.json composer.lock CHANGELOG.md CONTRIBUTING.md README.md LICENSE.md CODE_OF_CONDUCT.md CREDITS.md diff --git a/wp-content/plugins/simple-local-avatars/10up-lib/wp-compat-validation-tool/src/Validator.php b/wp-content/plugins/simple-local-avatars/10up-lib/wp-compat-validation-tool/src/Validator.php new file mode 100644 index 000000000..30fcf440a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/10up-lib/wp-compat-validation-tool/src/Validator.php @@ -0,0 +1,169 @@ +checklist = array( + 'plugin_name' => array( + 'value' => '', + 'required' => true, + ), + 'php_min_required_version' => array( + 'value' => '', + 'required' => false, + ), + 'php_max_required_version' => array( + 'value' => '', + 'required' => false, + ), + 'wp_min_required_version' => array( + 'value' => '', + 'required' => false, + ), + 'wp_max_required_version' => array( + 'value' => '', + 'required' => false, + ), + ); + } + + /** + * Sets the plugin name. + * + * @param string $value Plugin name. + * @return Validator + */ + public function set_plugin_name( $value = '' ) { + $this->checklist['plugin_name']['value'] = $value; + + return $this; + } + + /** + * Sets the minimum PHP version supported by a plugin. + * + * @param string $value Minimum PHP version. + * @return Validator + */ + public function set_php_min_required_version( $value = '' ) { + $this->checklist['php_min_required_version']['value'] = $value; + + return $this; + } + + /** + * Sets the maximum PHP version supported by a plugin. + * + * @param string $value Maximum PHP version. + * @return Validator + */ + public function set_php_max_required_version( $value = '' ) { + $this->checklist['php_max_required_version']['value'] = $value; + + return $this; + } + + /** + * Sets the minimum WordPress version supported by a plugin. + * + * @param string $value Minimum WordPress version. + * @return Validator + */ + public function set_wordpress_min_required_version( $value = '' ) { + $this->checklist['wp_min_required_version']['value'] = $value; + + return $this; + } + + /** + * Sets the maximum WordPress version supported by a plugin. + * + * @param string $value Maximum WordPress version. + * @return Validator + */ + public function set_wordpress_max_required_version( $value = '' ) { + $this->checklist['wp_max_required_version']['value'] = $value; + + return $this; + } + + /** + * Returns true if the plugin meets all compatibility checks, false otherwise. + * + * @return boolean + */ + public function is_plugin_compatible() { + foreach ( $this->checklist as $item_name => $item_details ) { + if ( $item_details['required'] && empty( $item_details['value'] ) ) { + return false; + } + + switch ( $item_name ) { + case 'php_min_required_version': + if ( ! empty( $item_details['value'] ) && version_compare( phpversion(), $item_details['value'], '<' ) ) { + $this->messages[] = sprintf( esc_html__( 'The minimum PHP version required is %s' ), $item_details['value'] ); + } + break; + + case 'php_max_required_version': + if ( ! empty( $item_details['value'] ) && version_compare( phpversion(), $item_details['value'], '>' ) ) { + $this->messages[] = sprintf( esc_html__( 'The maximum PHP version supported is %s' ), $item_details['value'] ); + } + break; + + default: + break; + } + } + + if ( ! empty( $this->messages ) ) { + add_action( 'admin_notices', array( $this, 'render_php_compat_error' ) ); + return false; + } + + return true; + } + + /** + * Renders the error messages as notice. + */ + public function render_php_compat_error() { + ?> +
+

+ + checklist['plugin_name']['value'] ); ?> + +

+ messages ) > 1 ) : ?> + + messages ) ): ?> +

+ messages[0] ); ?> +

+ +
+ array(), 'version' => 'b0f8e17e234bd3f014d0'); diff --git a/wp-content/plugins/simple-local-avatars/dist/simple-local-avatars.js b/wp-content/plugins/simple-local-avatars/dist/simple-local-avatars.js new file mode 100644 index 000000000..3bca28aa3 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/dist/simple-local-avatars.js @@ -0,0 +1 @@ +(()=>{let a,e,t,i,r,s,l,o,n,c=!1;function m(a){void 0===e&&(t=document.getElementById("simple-local-avatar-ratings"),e=jQuery(document.getElementById("simple-local-avatar-spinner")),i=document.getElementById("simple-local-avatar-photo"),r=jQuery(t).closest("form").find("input[type=submit]")),"unlock"===a?(c=!1,r.removeAttr("disabled"),e.hide(),e.hasClass("is-active")&&e.removeClass("is-active")):(c=!0,r.attr("disabled","disabled"),e.show(),jQuery(i).html(e),e.hasClass("is-active")||e.addClass("is-active"))}function p(a,e){const t=e.get("control"),i=a.get("width"),r=a.get("height");let s=parseInt(t.params.width,10),l=parseInt(t.params.height,10);const o=s/l;e.set("canSkipCrop",!0);const n=s,c=l;i/r>o?(l=r,s=l*o):(s=i,l=s/o);const m=(i-s)/2,p=(r-l)/2;return{handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:i,imageHeight:r,minWidth:n>s?s:n,minHeight:c>l?l:c,x1:m,y1:p,x2:s+m,y2:l+p,aspectRatio:`${s}:${l}`}}function d(a,e,r,s){const l={};l.url=a,l.thumbnail_url=a,l.timestamp=_.now(),e&&(l.attachment_id=e),r&&(l.width=r),s&&(l.height=s),m("lock"),jQuery.post(i10n_SimpleLocalAvatars.ajaxurl,{action:"assign_simple_local_avatar_media",media_id:e,user_id:i10n_SimpleLocalAvatars.user_id,_wpnonce:i10n_SimpleLocalAvatars.mediaNonce}).done((function(a){""!==a&&(i.innerHTML=a,jQuery("#simple-local-avatar-remove").show(),t.disabled=!1)})).always((function(){m("unlock")}))}jQuery(document).ready((function(e){l=e("#simple-local-avatar"),s=e("#simple-local-avatar-photo img"),n=s.attr("src"),t=e("#simple-local-avatar-ratings"),i=e("#simple-local-avatar-photo"),e("#simple-local-avatar-media").on("click",(function(e){if(e.preventDefault(),c)return;const r={id:"control-id",params:{flex_width:!0,flex_height:!0,width:200,height:200}};a=wp.media({button:{text:i10n_SimpleLocalAvatars.selectCrop,close:!1},states:[new wp.media.controller.Library({title:i10n_SimpleLocalAvatars.selectCrop,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:200,suggestedHeight:200}),new wp.media.controller.CustomizeImageCropper({imgSelectOptions:p,control:r})]}),a.on("cropped",(function(a){const{url:e}=a;d(e,a.id,a.width,a.height)})),a.on("skippedcrop",(function(a){const e=a.get("url"),t=a.get("width"),i=a.get("height");d(e,a.id,t,i)})),a.on("select",(function(){const e=a.state().get("selection").first().toJSON();var s;r.params.width!==e.width||r.params.height!==e.height||r.params.flex_width||r.params.flex_height?a.setState("cropper"):(e.dst_width=e.width,e.dst_height=e.height,s=e,m("lock"),jQuery.post(i10n_SimpleLocalAvatars.ajaxurl,{action:"assign_simple_local_avatar_media",media_id:s.id,user_id:i10n_SimpleLocalAvatars.user_id,_wpnonce:i10n_SimpleLocalAvatars.mediaNonce}).done((function(a){""!==a&&(i.innerHTML=a,jQuery("#simple-local-avatar-remove").show(),t.disabled=!1,m("unlock"))})).always((function(){m("unlock")})),a.close())})),a.open()})),e("#simple-local-avatar-remove").on("click",(function(a){a.preventDefault(),c||(m("lock"),e.get(i10n_SimpleLocalAvatars.ajaxurl,{action:"remove_simple_local_avatar",user_id:i10n_SimpleLocalAvatars.user_id,_wpnonce:i10n_SimpleLocalAvatars.deleteNonce}).done((function(a){""!==a&&(i.innerHTML=a,e("#simple-local-avatar-remove").hide(),t.disabled=!0)})).always((function(){m("unlock")})))})),l.on("change",(function(a){s.attr("srcset",""),s.attr("height","auto"),URL.revokeObjectURL(o),a.target.files.length>0?(o=URL.createObjectURL(a.target.files[0]),s.attr("src",o)):s.attr("src",n)})),e(document.getElementById("simple-local-avatars-migrate-from-wp-user-avatar")).on("click",(function(a){a.preventDefault(),jQuery.post(i10n_SimpleLocalAvatars.ajaxurl,{action:"migrate_from_wp_user_avatar",migrateFromWpUserAvatarNonce:i10n_SimpleLocalAvatars.migrateFromWpUserAvatarNonce}).always((function(){e(".simple-local-avatars-migrate-from-wp-user-avatar-progress").empty(),e(".simple-local-avatars-migrate-from-wp-user-avatar-progress").text(i10n_SimpleLocalAvatars.migrateFromWpUserAvatarProgress)})).done((function(a){e(".simple-local-avatars-migrate-from-wp-user-avatar-progress").empty();const t=e.parseJSON(a).count;0===t&&e(".simple-local-avatars-migrate-from-wp-user-avatar-progress").text(i10n_SimpleLocalAvatars.migrateFromWpUserAvatarFailure),t>0&&e(".simple-local-avatars-migrate-from-wp-user-avatar-progress").text(i10n_SimpleLocalAvatars.migrateFromWpUserAvatarSuccess+": "+t),setTimeout((function(){e(".simple-local-avatars-migrate-from-wp-user-avatar-progress").empty()}),5e3)}))}));const r=e("#clear_cache_btn"),u=e("#clear_cache_message"),v=e("#simple-local-avatar-default"),g=e("#simple-local-avatar-file-url"),h=e("#simple-local-avatar-file-id");function _(){r.find("span").remove(),r.removeClass("disabled")}function f(a,t){t.step=a,e.ajax({url:i10n_SimpleLocalAvatars.ajaxurl,dataType:"json",data:t,method:"POST",success:function(a){if(a.success)return"done"===a.data.step?(u.text(a.data.message),_()):(u.text(a.data.message),f(parseInt(a.data.step,10),t)),!1;u.text(i10n_SimpleLocalAvatars.clearCacheError),_()},error:function(){u.text(i10n_SimpleLocalAvatars.clearCacheError),_()}})}if(r.on("click",(function(a){a.preventDefault(),r.addClass("disabled"),r.append(''),f(1,{action:"sla_clear_user_cache",nonce:i10n_SimpleLocalAvatars.cacheNonce})})),v.click((function(a){a.preventDefault();var t=e(this),i=wp.media({title:i10n_SimpleLocalAvatars.insertMediaTitle,multiple:!1,library:{type:"image"}}).open().on("select",(function(a){var e=i.state().get("selection").first();e=e.toJSON();var r=e?.sizes?.thumbnail?.url;void 0===r&&(r=e.url);var s=t.parent().find("img.avatar");s.show(),s.attr("src",r),s.attr("srcset",r),g.val(r),h.val(e.id)}))})),g.length&&""!==g.val()){var w=g.parent().find("img.avatar");w.attr("src",g.val()),w.attr("srcset",g.val())}""===h.val()&&h.parent().find("img.avatar").hide()}))})(); \ No newline at end of file diff --git a/wp-content/plugins/simple-local-avatars/includes/class-simple-local-avatars.php b/wp-content/plugins/simple-local-avatars/includes/class-simple-local-avatars.php new file mode 100644 index 000000000..56c1e16bd --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/includes/class-simple-local-avatars.php @@ -0,0 +1,1734 @@ +add_hooks(); + + $this->options = (array) get_option( 'simple_local_avatars' ); + $this->user_key = 'simple_local_avatar'; + $this->rating_key = 'simple_local_avatar_rating'; + + if ( + ! $this->is_avatar_shared() // Are we sharing avatars? + && ( + ( // And either an ajax request not in the network admin. + defined( 'DOING_AJAX' ) && DOING_AJAX + && isset( $_SERVER['HTTP_REFERER'] ) && ! preg_match( '#^' . network_admin_url() . '#i', $_SERVER['HTTP_REFERER'] ) + ) + || + ( // Or normal request not in the network admin. + ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) + && ! is_network_admin() + ) + ) + && is_multisite() + ) { + $this->user_key = sprintf( $this->user_key . '_%d', get_current_blog_id() ); + $this->rating_key = sprintf( $this->rating_key . '_%d', get_current_blog_id() ); + } + } + + /** + * Register actions and filters. + */ + public function add_hooks() { + global $pagenow; + global $wp_version; + + add_filter( 'plugin_action_links_' . SLA_PLUGIN_BASENAME, array( $this, 'plugin_filter_action_links' ) ); + + add_filter( 'pre_get_avatar_data', array( $this, 'get_avatar_data' ), 10, 2 ); + add_filter( 'pre_option_simple_local_avatars', array( $this, 'pre_option_simple_local_avatars' ), 10, 1 ); + + add_action( 'admin_init', array( $this, 'admin_init' ) ); + add_action( 'init', array( $this, 'define_avatar_ratings' ) ); + + // Load the JS on BE & FE both, in order to support third party plugins like bbPress. + add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); + + add_action( 'show_user_profile', array( $this, 'edit_user_profile' ) ); + add_action( 'edit_user_profile', array( $this, 'edit_user_profile' ) ); + + add_action( 'personal_options_update', array( $this, 'edit_user_profile_update' ) ); + add_action( 'edit_user_profile_update', array( $this, 'edit_user_profile_update' ) ); + add_action( 'admin_action_remove-simple-local-avatar', array( $this, 'action_remove_simple_local_avatar' ) ); + add_action( 'wp_ajax_assign_simple_local_avatar_media', array( $this, 'ajax_assign_simple_local_avatar_media' ) ); + add_action( 'wp_ajax_remove_simple_local_avatar', array( $this, 'action_remove_simple_local_avatar' ) ); + add_action( 'user_edit_form_tag', array( $this, 'user_edit_form_tag' ) ); + + add_action( 'rest_api_init', array( $this, 'register_rest_fields' ) ); + + add_action( 'wp_ajax_migrate_from_wp_user_avatar', array( $this, 'ajax_migrate_from_wp_user_avatar' ) ); + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + WP_CLI::add_command( 'simple-local-avatars migrate wp-user-avatar', array( $this, 'wp_cli_migrate_from_wp_user_avatar' ) ); + } + + add_action( 'wp_ajax_sla_clear_user_cache', array( $this, 'sla_clear_user_cache' ) ); + + add_filter( 'avatar_defaults', array( $this, 'add_avatar_default_field' ) ); + if ( version_compare( $wp_version, '5.1', '<' ) ) { + add_action( 'wpmu_new_blog', array( $this, 'set_defaults' ) ); + } else { + add_action( 'wp_initialize_site', array( $this, 'set_defaults' ) ); + } + + if ( 'profile.php' === $pagenow ) { + add_filter( 'media_view_strings', function ( $strings ) { + $strings['skipCropping'] = esc_html__( 'Default Crop', 'simple-local-avatars' ); + + return $strings; + }, 10, 1 ); + } + + // Fix: An error occurred cropping the image (https://github.com/10up/simple-local-avatars/issues/141). + if ( isset( $_POST['action'] ) && 'crop-image' === $_POST['action'] && is_admin() && wp_doing_ajax() ) { + add_action( 'plugins_loaded', function () { + remove_all_actions( 'setup_theme' ); + } ); + } + } + + /** + * Determine if plugin is network activated. + * + * @param string $plugin The plugin slug to check. + * + * @return boolean + */ + public static function is_network( $plugin ) { + $plugins = get_site_option( 'active_sitewide_plugins', array() ); + + if ( is_multisite() && isset( $plugins[ $plugin ] ) ) { + return true; + } + + return false; + } + + /** + * Get current plugin network mode + */ + public function get_network_mode() { + if ( SLA_IS_NETWORK ) { + return get_site_option( 'simple_local_avatars_mode', 'default' ); + } + + return 'default'; + } + + /** + * Determines if settings handling is enforced on a network level + * + * Important: this is only meant for admin UI purposes. + * + * @return boolean + */ + public function is_enforced() { + if ( + ( ! is_network_admin() && ( SLA_IS_NETWORK && 'enforce' === $this->get_network_mode() ) ) + ) { + return true; + } + + return false; + } + + /** + * Determine if avatars should be shared + * + * @return boolean + */ + public function is_avatar_shared() { + if ( ! is_multisite() ) { + return false; + } + + if ( + ! isset( $this->options['shared'] ) // Our shared option doesn't exist. + || 1 === $this->options['shared'] // Or our shared option is set. + ) { + return true; + } + + return false; + } + + /** + * Add the settings action link to the plugin page. + * + * @param array $links The Action links for the plugin. + * + * @return array + */ + public function plugin_filter_action_links( $links ) { + + if ( ! is_array( $links ) ) { + return $links; + } + + $links['settings'] = sprintf( + ' %s ', + esc_url( admin_url( 'options-discussion.php' ) ), + __( 'Settings', 'simple-local-avatars' ) + ); + + return $links; + } + + /** + * Retrieve the local avatar for a user who provided a user ID, email address or post/comment object. + * + * @param string $avatar Avatar return by original function + * @param int|string|object $id_or_email A user ID, email address, or post/comment object + * @param int $size Size of the avatar image + * @param string $default URL to a default image to use if no avatar is available + * @param string $alt Alternative text to use in image tag. Defaults to blank + * @param array $args Optional. Extra arguments to retrieve the avatar. + * + * @return string tag for the user's avatar + */ + public function get_avatar( $avatar = '', $id_or_email = '', $size = 96, $default = '', $alt = '', $args = array() ) { + return apply_filters( 'simple_local_avatar', get_avatar( $id_or_email, $size, $default, $alt, $args ) ); + } + + /** + * Filter avatar data early to add avatar url if needed. This filter hooks + * before Gravatar setup to prevent wasted requests. + * + * @since 2.2.0 + * + * @param array $args Arguments passed to get_avatar_data(), after processing. + * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user ID, Gravatar MD5 hash, + * user email, WP_User object, WP_Post object, or WP_Comment object. + */ + public function get_avatar_data( $args, $id_or_email ) { + if ( ! empty( $args['force_default'] ) ) { + return $args; + } + + $simple_local_avatar_url = $this->get_simple_local_avatar_url( $id_or_email, $args['size'] ); + if ( $simple_local_avatar_url ) { + $args['url'] = $simple_local_avatar_url; + } + + // Local only mode + if ( ! $simple_local_avatar_url ) { + $default_url = $this->get_default_avatar_url( $args['size'] ); + $avatar_default = get_option( 'avatar_default' ); + + if ( ! empty( $this->options['only'] ) ) { + $args['url'] = $default_url; + } elseif ( 'simple_local_avatar' === $avatar_default ) { + $args['default'] = $default_url; + } + } + + if ( ! empty( $args['url'] ) ) { + $args['found_avatar'] = true; + + // If custom alt text isn't passed, pull alt text from the local image. + if ( empty( $args['alt'] ) ) { + $args['alt'] = $this->get_simple_local_avatar_alt( $id_or_email ); + } + } + + return $args; + } + + /** + * Get a user ID from certain possible values. + * + * @since 2.5.0 + * + * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user ID, Gravatar MD5 hash, + * user email, WP_User object, WP_Post object, or WP_Comment object. + * @return int|false + */ + public function get_user_id( $id_or_email ) { + $user_id = false; + + if ( is_numeric( $id_or_email ) ) { + $user_id = (int) $id_or_email; + } elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id ) ) { + $user_id = (int) $id_or_email->user_id; + } elseif ( $id_or_email instanceof WP_User ) { + $user_id = $id_or_email->ID; + } elseif ( $id_or_email instanceof WP_Post && ! empty( $id_or_email->post_author ) ) { + $user_id = (int) $id_or_email->post_author; + } elseif ( is_string( $id_or_email ) ) { + $user = get_user_by( 'email', $id_or_email ); + $user_id = $user ? $user->ID : ''; + } + + return $user_id; + } + + /** + * Get the local avatar user meta. + * + * @param int $user_id User ID. + * @return array Array with avatar data. + */ + public function get_user_local_avatar( $user_id ) { + $local_avatars = get_user_meta( $user_id, $this->user_key, true ); + if ( ! is_array( $local_avatars ) || empty( $local_avatars ) ) { + return []; + } + return $local_avatars; + } + + /** + * Get local avatar url. + * + * @since 2.2.0 + * + * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user ID, Gravatar MD5 hash, + * user email, WP_User object, WP_Post object, or WP_Comment object. + * @param int $size Requested avatar size. + */ + public function get_simple_local_avatar_url( $id_or_email, $size ) { + $user_id = $this->get_user_id( $id_or_email ); + + if ( empty( $user_id ) ) { + return ''; + } + + // Fetch local avatar from meta and make sure it's properly set. + $local_avatars = $this->get_user_local_avatar( $user_id ); + if ( ! isset( $local_avatars['full'] ) || empty( $local_avatars['full'] ) ) { + return ''; + } + + // check rating + $avatar_rating = get_user_meta( $user_id, $this->rating_key, true ); + $site_rating = get_option( 'avatar_rating' ); + $all_avatar_ratings = ! empty( $this->avatar_ratings ) && is_array( $this->avatar_ratings ) + ? $this->avatar_ratings + : array(); + if ( ! empty( $avatar_rating ) && 'G' !== $avatar_rating && $site_rating ) { + $ratings = array_keys( $all_avatar_ratings ); + $site_rating_weight = array_search( $site_rating, $ratings, true ); + $avatar_rating_weight = array_search( $avatar_rating, $ratings, true ); + if ( false !== $avatar_rating_weight && $avatar_rating_weight > $site_rating_weight ) { + return ''; + } + } + + /** + * Filter the URL of an avatar for the given user and size. + * + * This filters is applied before Simple Local Avatars validates the value of the + * `$local_avatars` array which comes from the user meta field. This allows the URL + * to be short-circuited, for example by a dynamic image resizing service. + * + * @param string|null $url The URL of the avatar. If null, the URL will be + * generated by Simple Local Avatars. + * @param int $user_id The user ID. + * @param int $size Requested avatar size. + * @param array $local_avatars The local avatars for the user. + * @return string|null The URL of the avatar, or null to allow Simple Local Avatars to + * generate the URL. + */ + $url = apply_filters( 'pre_simple_local_avatar_url', null, $user_id, $size, $local_avatars ); + + if ( is_string( $url ) ) { + return esc_url( $url ); + } + + // handle "real" media + if ( ! empty( $local_avatars['media_id'] ) ) { + // If using shared avatars, make sure we validate the URL on the main site. + if ( $this->is_avatar_shared() ) { + $origin_blog_id = isset( $local_avatars['blog_id'] ) && ! empty( $local_avatars['blog_id'] ) ? $local_avatars['blog_id'] : get_main_site_id(); + switch_to_blog( $origin_blog_id ); + } + + $avatar_full_path = get_attached_file( $local_avatars['media_id'] ); + + if ( $this->is_avatar_shared() ) { + restore_current_blog(); + } + + // has the media been deleted? + if ( ! $avatar_full_path ) { + return ''; + } + } + + $size = (int) $size; + + // Generate a new size. + if ( ! array_key_exists( $size, $local_avatars ) ) { + $local_avatars[ $size ] = $local_avatars['full']; // just in case of failure elsewhere + + // allow automatic rescaling to be turned off + if ( apply_filters( 'simple_local_avatars_dynamic_resize', true ) ) : + + $upload_path = wp_upload_dir(); + + // get path for image by converting URL, unless its already been set, thanks to using media library approach + if ( ! isset( $avatar_full_path ) ) { + $avatar_full_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $local_avatars['full'] ); + } + + // generate the new size + $editor = wp_get_image_editor( $avatar_full_path ); + if ( ! is_wp_error( $editor ) ) { + $image_size = $editor->get_size(); + if ( ! is_array( $image_size ) || $image_size['width'] !== $size || $image_size['height'] !== $size ) { + $resized = $editor->resize( $size, $size, true ); + if ( ! is_wp_error( $resized ) ) { + $dest_file = $editor->generate_filename(); + $saved = $editor->save( $dest_file ); + if ( ! is_wp_error( $saved ) ) { + // Transform the destination file path into URL. + $dest_file_url = ''; + if ( false !== strpos( $dest_file, $upload_path['basedir'] ) ) { + $dest_file_url = str_replace( $upload_path['basedir'], $upload_path['baseurl'], $dest_file ); + } elseif ( is_multisite() && false !== strpos( $dest_file, ABSPATH . 'wp-content/uploads' ) ) { + $dest_file_url = str_replace( ABSPATH . 'wp-content/uploads', network_site_url( '/wp-content/uploads' ), $dest_file ); + } + + $local_avatars[ $size ] = $dest_file_url; + } + } + } + } + + // save updated avatar sizes + update_user_meta( $user_id, $this->user_key, $local_avatars ); + + endif; + } + + if ( 'http' !== substr( $local_avatars[ $size ], 0, 4 ) ) { + $local_avatars[ $size ] = home_url( $local_avatars[ $size ] ); + } + + return esc_url( $local_avatars[ $size ] ); + } + + /** + * Get local avatar alt text. + * + * @since 2.5.0 + * + * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user ID, Gravatar MD5 hash, + * user email, WP_User object, WP_Post object, or WP_Comment object. + * @return string + */ + public function get_simple_local_avatar_alt( $id_or_email ) { + $user_id = $this->get_user_id( $id_or_email ); + + /** + * Filter the default avatar alt text. + * + * @param string $alt Default alt text. + * @return string + */ + $default_alt = apply_filters( 'simple_local_avatars_default_alt', __( 'Avatar photo', 'simple-local-avatars' ) ); + + if ( empty( $user_id ) ) { + return $default_alt; + } + + // Fetch local avatar from meta and make sure we have a media ID. + $local_avatars = $this->get_user_local_avatar( $user_id ); + if ( ! isset( $local_avatars['media_id'] ) || empty( $local_avatars['media_id'] ) ) { + $alt = ''; + // If no avatar is set, check if we are using a default avatar with alt text. + if ( 'simple_local_avatar' === get_option( 'avatar_default' ) ) { + $default_avatar_id = get_option( 'simple_local_avatar_default', '' ); + if ( ! empty( $default_avatar_id ) ) { + $alt = get_post_meta( $default_avatar_id, '_wp_attachment_image_alt', true ); + } + } + + return $alt ? $alt : $default_alt; + } + + $alt = get_post_meta( $local_avatars['media_id'], '_wp_attachment_image_alt', true ); + + return $alt ? $alt : $default_alt; + } + + /** + * Get default avatar url + * + * @since 2.2.0 + * + * @param int $size Requested avatar size. + */ + public function get_default_avatar_url( $size ) { + if ( empty( $default ) ) { + $avatar_default = get_option( 'avatar_default' ); + if ( empty( $avatar_default ) ) { + $default = 'mystery'; + } else { + $default = $avatar_default; + } + } + + $host = is_ssl() ? 'https://secure.gravatar.com' : 'http://0.gravatar.com'; + + if ( 'mystery' === $default ) { + $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com') + } elseif ( 'blank' === $default ) { + $default = includes_url( 'images/blank.gif' ); + } elseif ( 'gravatar_default' === $default ) { + $default = "$host/avatar/?s={$size}"; + } elseif ( 'simple_local_avatar' === $default ) { + $default = "$host/avatar/?d=$default&s={$size}"; + $default_avatar_id = get_option( 'simple_local_avatar_default', '' ); + if ( ! empty( $default_avatar_id ) ) { + $default = wp_get_attachment_image_url( $default_avatar_id ); + } + } else { + $default = "$host/avatar/?d=$default&s={$size}"; + } + + return $default; + } + + /** + * Define the ratings avatar ratings. + * + * The ratings need to be defined after the languages have been loaded so + * they can be translated. This method exists to define the ratings + * after that has been done. + * + * @since 2.7.3 + */ + public function define_avatar_ratings() { + /* + * Avatar ratings. + * + * The key should not be translated as it's used by WP Core in it's + * english form (G, PG, etc). + * + * The values should be translated, these include the initial rating + * name and the description for display to users. + */ + $this->avatar_ratings = array( + /* translators: Content suitability rating: https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system */ + 'G' => __( 'G — Suitable for all audiences', 'simple-local-avatars' ), + /* translators: Content suitability rating: https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system */ + 'PG' => __( 'PG — Possibly offensive, usually for audiences 13 and above', 'simple-local-avatars' ), + /* translators: Content suitability rating: https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system */ + 'R' => __( 'R — Intended for adult audiences above 17', 'simple-local-avatars' ), + /* translators: Content suitability rating: https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system */ + 'X' => __( 'X — Even more mature than above', 'simple-local-avatars' ), + ); + } + + /** + * Register admin settings. + */ + public function admin_init() { + $this->define_avatar_ratings(); + // upgrade pre 2.0 option + $old_ops = get_option( 'simple_local_avatars_caps' ); + if ( $old_ops ) { + if ( ! empty( $old_ops['simple_local_avatars_caps'] ) ) { + update_option( 'simple_local_avatars', array( 'caps' => 1 ) ); + } + + delete_option( 'simple_local_avatar_caps' ); + } + + register_setting( 'discussion', 'simple_local_avatars', array( $this, 'sanitize_options' ) ); + add_settings_field( + 'simple-local-avatars-only', + __( 'Local Avatars Only', 'simple-local-avatars' ), + array( $this, 'avatar_settings_field' ), + 'discussion', + 'avatars', + array( + 'class' => 'simple-local-avatars', + 'key' => 'only', + 'desc' => __( 'Only allow local avatars (still uses Gravatar for default avatars)', 'simple-local-avatars' ), + ) + ); + add_settings_field( + 'simple-local-avatars-caps', + __( 'Local Upload Permissions', 'simple-local-avatars' ), + array( $this, 'avatar_settings_field' ), + 'discussion', + 'avatars', + array( + 'class' => 'simple-local-avatars', + 'key' => 'caps', + 'desc' => __( 'Only allow users with file upload capabilities to upload local avatars (Authors and above)', 'simple-local-avatars' ), + ) + ); + + if ( is_multisite() ) { + add_settings_field( + 'simple-local-avatars-shared', + __( 'Shared network avatars', 'simple-local-avatars' ), + array( $this, 'avatar_settings_field' ), + 'discussion', + 'avatars', + array( + 'class' => 'simple-local-avatars', + 'key' => 'shared', + 'desc' => __( 'Uploaded avatars will be shared across the entire network, instead of being unique per site', 'simple-local-avatars' ), + 'default' => 1, + ) + ); + } + + add_action( 'load-options-discussion.php', array( $this, 'load_discussion_page' ) ); + + // This is for network site settings. + if ( SLA_IS_NETWORK && is_network_admin() ) { + add_action( 'load-settings.php', array( $this, 'load_network_settings' ) ); + } + + add_settings_field( + 'simple-local-avatars-migration', + __( 'Migrate Other Local Avatars', 'simple-local-avatars' ), + array( $this, 'migrate_from_wp_user_avatar_settings_field' ), + 'discussion', + 'avatars' + ); + add_settings_field( + 'simple-local-avatars-clear', + esc_html__( 'Clear local avatar cache', 'simple-local-avatars' ), + array( $this, 'avatar_settings_field' ), + 'discussion', + 'avatars', + array( + 'key' => 'clear_cache', + 'desc' => esc_html__( 'Clear cache of stored avatars', 'simple-local-avatars' ), + ) + ); + + // Save default avatar file. + $this->save_default_avatar_file_id(); + } + + /** + * Fire code on the Discussion page + */ + public function load_discussion_page() { + add_action( 'admin_print_styles', array( $this, 'admin_print_styles' ) ); + add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) ); + } + + /** + * Load needed hooks to handle network settings + */ + public function load_network_settings() { + $this->options = (array) get_site_option( 'simple_local_avatars', array() ); + + add_action( 'wpmu_options', array( $this, 'show_network_settings' ) ); + add_action( 'update_wpmu_options', array( $this, 'save_network_settings' ) ); + } + + /** + * Show the network settings + */ + public function show_network_settings() { + $mode = $this->get_network_mode(); + ?> + +

+ + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ + + avatar_settings_field( + array( + 'key' => 'only', + 'desc' => __( 'Only allow local avatars (still uses Gravatar for default avatars)', 'simple-local-avatars' ), + ) + ); + ?> +
+ + + avatar_settings_field( + array( + 'key' => 'caps', + 'desc' => __( 'Only allow users with file upload capabilities to upload local avatars (Authors and above)', 'simple-local-avatars' ), + ) + ); + ?> +
+ + + avatar_settings_field( + array( + 'key' => 'shared', + 'desc' => __( 'Uploaded avatars will be shared across the entire network, instead of being unique per site', 'simple-local-avatars' ), + 'default' => 1, + ) + ); + ?> +
+ + remove_nonce = wp_create_nonce( 'remove_simple_local_avatar_nonce' ); + + wp_enqueue_script( 'simple-local-avatars', plugins_url( '', dirname( __FILE__ ) ) . '/dist/simple-local-avatars.js', array( 'jquery' ), SLA_VERSION, true ); + wp_localize_script( + 'simple-local-avatars', + 'i10n_SimpleLocalAvatars', + array( + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + 'user_id' => $user_id, + 'insertIntoPost' => __( 'Set as avatar', 'simple-local-avatars' ), + 'selectCrop' => __( 'Select avatar and Crop', 'simple-local-avatars' ), + 'deleteNonce' => $this->remove_nonce, + 'cacheNonce' => wp_create_nonce( 'sla_clear_cache_nonce' ), + 'mediaNonce' => wp_create_nonce( 'assign_simple_local_avatar_nonce' ), + 'migrateFromWpUserAvatarNonce' => wp_create_nonce( 'migrate_from_wp_user_avatar_nonce' ), + 'clearCacheError' => esc_html__( 'Something went wrong while clearing cache, please try again.', 'simple-local-avatars' ), + 'insertMediaTitle' => esc_html__( 'Choose default avatar', 'simple-local-avatars' ), + 'migrateFromWpUserAvatarSuccess' => __( 'Number of avatars successfully migrated from WP User Avatar', 'simple-local-avatars' ), + 'migrateFromWpUserAvatarFailure' => __( 'No avatars were migrated from WP User Avatar.', 'simple-local-avatars' ), + 'migrateFromWpUserAvatarProgress' => __( 'Migration in progress.', 'simple-local-avatars' ), + ) + ); + } + + /** + * Sanitize new settings field before saving + * + * @param array|string $input Passed input values to sanitize + * @return array|string Sanitized input fields + */ + public function sanitize_options( $input ) { + $new_input['caps'] = empty( $input['caps'] ) ? 0 : 1; + $new_input['only'] = empty( $input['only'] ) ? 0 : 1; + + if ( is_multisite() ) { + $new_input['shared'] = empty( $input['shared'] ) ? 0 : 1; + } + + return $new_input; + } + + /** + * Settings field for avatar upload capabilities + * + * @param array $args Field arguments + */ + public function avatar_settings_field( $args ) { + $args = wp_parse_args( + $args, + array( + 'key' => '', + 'desc' => '', + 'default' => 0, + ) + ); + + if ( ! isset( $this->options[ $args['key'] ] ) ) { + $this->options[ $args['key'] ] = $args['default']; + } + + if ( 'clear_cache' !== $args['key'] ) { + echo ' + + '; + } else { + echo '
'; + echo ''; + } + + // Output warning if needed. + if ( + SLA_IS_NETWORK // If network activated. + && $this->is_enforced() // And in enforce mode. + && 'shared' === $args['key'] // And we are displaying the last setting. + ) { + echo ' +
+

' . esc_html__( 'Simple Local Avatar settings are currently enforced across all sites on the network.', 'simple-local-avatars' ) . '

+
+ '; + } + } + + /** + * Settings field for migrating avatars away from WP User Avatar + */ + public function migrate_from_wp_user_avatar_settings_field() { + printf( + '

', + esc_attr( 'simple-local-avatars-migrate-from-wp-user-avatar' ), + esc_html__( 'Migrate avatars from WP User Avatar to Simple Local Avatars', 'simple-local-avatars' ) + ); + } + + /** + * Output new Avatar fields to user editing / profile screen + * + * @param object $profileuser User object + */ + public function edit_user_profile( $profileuser ) { + ?> +
+

+ + + + + + + + + + +
+
+
+ ID ); + remove_filter( 'pre_option_avatar_rating', '__return_empty_string' ); + ?> + +
+
+ options['caps'] ); + } + + if ( $upload_rights ) { + do_action( 'simple_local_avatar_notices' ); + wp_nonce_field( 'simple_local_avatar_nonce', '_simple_local_avatar_nonce', false ); + $remove_url = add_query_arg( + array( + 'action' => 'remove-simple-local-avatar', + 'user_id' => $profileuser->ID, + '_wpnonce' => $this->remove_nonce, + ) + ); + ?> + +

+
+ +

+ +

+ +   + + simple_local_avatar ) ? ' style="display:none;"' : ''; ?>> + + +

+ simple_local_avatar ) ) { + echo '' . esc_html__( 'No local avatar is set. Set up your avatar at Gravatar.com.', 'simple-local-avatars' ) . ''; + } else { + echo '' . esc_html__( 'You do not have media management permissions. To change your local avatar, contact the blog administrator.', 'simple-local-avatars' ) . ''; + } + } + ?> +
+
+
+
simple_local_avatar ) ); ?>> + + simple_local_avatar_rating ) || ! array_key_exists( $profileuser->simple_local_avatar_rating, $this->avatar_ratings ) ) { + $profileuser->simple_local_avatar_rating = 'G'; + } + + foreach ( $this->avatar_ratings as $key => $rating ) : + echo "\n\t
'; + endforeach; + ?> +

+
+
+
+ avatar_delete( $user_id ); // delete old images if successful. + + $meta_value = array(); + + // set the new avatar + if ( is_numeric( $url_or_media_id ) ) { + $meta_value['media_id'] = $url_or_media_id; + $url_or_media_id = wp_get_attachment_url( $url_or_media_id ); + } + + $meta_value['full'] = $url_or_media_id; + $meta_value['blog_id'] = get_current_blog_id(); + + update_user_meta( $user_id, $this->user_key, $meta_value ); // save user information (overwriting old). + + /** + * Enable themes and other plugins to react to changes to a user's avatar. + * + * @since 2.6.0 + * + * @param int $user_id Id of the user who's avatar was updated + */ + do_action( 'simple_local_avatar_updated', $user_id ); + } + + /** + * Save any changes to the user profile + * + * @param int $user_id ID of user being updated + */ + public function edit_user_profile_update( $user_id ) { + // check nonces + if ( empty( $_POST['_simple_local_avatar_nonce'] ) || ! wp_verify_nonce( $_POST['_simple_local_avatar_nonce'], 'simple_local_avatar_nonce' ) ) { + return; + } + + // check for uploaded files + if ( ! empty( $_FILES['simple-local-avatar']['name'] ) && 0 === $_FILES['simple-local-avatar']['error'] ) : + + // need to be more secure since low privilege users can upload + $allowed_mime_types = wp_get_mime_types(); + $file_mime_type = strtolower( $_FILES['simple-local-avatar']['type'] ); + + if ( ! ( 0 === strpos( $file_mime_type, 'image/' ) ) || ! in_array( $file_mime_type, $allowed_mime_types, true ) ) { + $this->avatar_upload_error = __( 'Only images can be uploaded as an avatar', 'simple-local-avatars' ); + add_action( 'user_profile_update_errors', array( $this, 'user_profile_update_errors' ) ); + return; + } + + $max_upload_size = $this->upload_size_limit( wp_max_upload_size() ); + if ( $_FILES['simple-local-avatar']['size'] > $max_upload_size ) { + // translators: %s: Formatted size. + $this->avatar_upload_error = sprintf( __( 'Max allowed avatar size is %s', 'simple-local-avatars' ), size_format( $max_upload_size ) ); + add_action( 'user_profile_update_errors', array( $this, 'user_profile_update_errors' ) ); + return; + } + + // front end (theme my profile etc) support + if ( ! function_exists( 'media_handle_upload' ) ) { + include_once ABSPATH . 'wp-admin/includes/media.php'; + } + + // front end (plugin bbPress etc) support + if ( ! function_exists( 'wp_handle_upload' ) ) { + include_once ABSPATH . 'wp-admin/includes/file.php'; + } + if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) { + include_once ABSPATH . 'wp-admin/includes/image.php'; + } + + $this->user_id_being_edited = $user_id; // make user_id known to unique_filename_callback function + $avatar_id = media_handle_upload( + 'simple-local-avatar', + 0, + array(), + array( + 'mimes' => array( + 'jpg|jpeg|jpe' => 'image/jpeg', + 'gif' => 'image/gif', + 'png' => 'image/png', + ), + 'test_form' => false, + 'unique_filename_callback' => array( $this, 'unique_filename_callback' ), + ) + ); + + if ( is_wp_error( $avatar_id ) ) { // handle failures. + $this->avatar_upload_error = '' . __( 'There was an error uploading the avatar:', 'simple-local-avatars' ) . ' ' . esc_html( $avatar_id->get_error_message() ); + add_action( 'user_profile_update_errors', array( $this, 'user_profile_update_errors' ) ); + + return; + } + + $this->assign_new_user_avatar( $avatar_id, $user_id ); + + endif; + + // Handle ratings + if ( isset( $avatar_id ) || ! empty( $this->get_user_local_avatar( $user_id ) ) ) { + if ( empty( $_POST['simple_local_avatar_rating'] ) || ! array_key_exists( $_POST['simple_local_avatar_rating'], $this->avatar_ratings ) ) { + $_POST['simple_local_avatar_rating'] = key( $this->avatar_ratings ); + } + + update_user_meta( $user_id, $this->rating_key, $_POST['simple_local_avatar_rating'] ); + } + } + + /** + * Allow developers to override the maximum allowable file size for avatar uploads + * + * @param int $bytes WordPress default byte size check + * @return int Maximum byte size + */ + public function upload_size_limit( $bytes ) { + return apply_filters( 'simple_local_avatars_upload_limit', $bytes ); + } + + /** + * Runs when a user clicks the Remove button for the avatar + */ + public function action_remove_simple_local_avatar() { + if ( ! empty( $_GET['user_id'] ) && ! empty( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'remove_simple_local_avatar_nonce' ) ) { + $user_id = (int) $_GET['user_id']; + + if ( ! current_user_can( 'edit_user', $user_id ) ) { + wp_die( esc_html__( 'You do not have permission to edit this user.', 'simple-local-avatars' ) ); + } + + $this->avatar_delete( $user_id ); // delete old images if successful + + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + echo get_simple_local_avatar( $user_id ); + } + } + + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + die; + } + } + + /** + * AJAX callback for assigning media ID fetched from media library to user + */ + public function ajax_assign_simple_local_avatar_media() { + // check required information and permissions + if ( empty( $_POST['user_id'] ) || empty( $_POST['media_id'] ) || ! current_user_can( 'upload_files' ) || ! current_user_can( 'edit_user', $_POST['user_id'] ) || empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'assign_simple_local_avatar_nonce' ) ) { + die; + } + + $media_id = (int) $_POST['media_id']; + $user_id = (int) $_POST['user_id']; + + // ensure the media is real is an image + if ( wp_attachment_is_image( $media_id ) ) { + $this->assign_new_user_avatar( $media_id, $user_id ); + } + + echo get_simple_local_avatar( $user_id ); + + die; + } + + /** + * Delete avatars based on a user_id + * + * @param int $user_id User ID. + */ + public function avatar_delete( $user_id ) { + $old_avatars = $this->get_user_local_avatar( $user_id ); + + if ( empty( $old_avatars ) ) { + return; + } + + // if it was uploaded media, don't erase the full size or try to erase an the ID + if ( array_key_exists( 'media_id', $old_avatars ) ) { + unset( $old_avatars['media_id'], $old_avatars['full'] ); + } + + // Remove the blog_id key as we don't need to try deleting a file based on that. + if ( array_key_exists( 'blog_id', $old_avatars ) ) { + unset( $old_avatars['blog_id'] ); + } + + if ( ! empty( $old_avatars ) ) { + $upload_path = wp_upload_dir(); + + foreach ( $old_avatars as $old_avatar ) { + // Ensure the avatar is in the uploads directory before we delete it. + if ( strpos( $old_avatar, $upload_path['baseurl'] ) !== 0 ) { + continue; + } + + // derive the path for the file based on the upload directory + $old_avatar_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $old_avatar ); + if ( file_exists( $old_avatar_path ) ) { + unlink( $old_avatar_path ); + } + } + } + + delete_user_meta( $user_id, $this->user_key ); + delete_user_meta( $user_id, $this->rating_key ); + + /** + * Enable themes and other plugins to react to avatar deletions. + * + * @since 2.6.0 + * + * @param int $user_id Id of the user who's avatar was deleted. + */ + do_action( 'simple_local_avatar_deleted', $user_id ); + } + + /** + * Creates a unique, meaningful file name for uploaded avatars. + * + * @param string $dir Path for file + * @param string $name Filename + * @param string $ext File extension (e.g. ".jpg") + * @return string Final filename + */ + public function unique_filename_callback( $dir, $name, $ext ) { + $user = get_user_by( 'id', (int) $this->user_id_being_edited ); + $name = $base_name = sanitize_file_name( $user->display_name . '_avatar_' . time() ); //phpcs:ignore + + // ensure no conflicts with existing file names + $number = 1; + while ( file_exists( $dir . "/$name$ext" ) ) { + $name = $base_name . '_' . $number; + $number ++; + } + + return $name . $ext; + } + + /** + * Adds errors based on avatar upload problems. + * + * @param WP_Error $errors Error messages for user profile screen. + */ + public function user_profile_update_errors( WP_Error $errors ) { + $errors->add( 'avatar_error', $this->avatar_upload_error ); + } + + /** + * Registers the simple_local_avatar field in the REST API. + */ + public function register_rest_fields() { + register_rest_field( + 'user', + 'simple_local_avatar', + array( + 'get_callback' => array( $this, 'get_avatar_rest' ), + 'update_callback' => array( $this, 'set_avatar_rest' ), + 'schema' => array( + 'description' => 'The users simple local avatar', + 'type' => 'object', + ), + ) + ); + } + + /** + * Returns the simple_local_avatar meta key for the given user. + * + * @param object $user User object + */ + public function get_avatar_rest( $user ) { + $local_avatar = $this->get_user_local_avatar( $user['id'] ); + if ( empty( $local_avatar ) ) { + return; + } + + return $local_avatar; + } + + /** + * Updates the simple local avatar from a REST request. + * + * Since we are just adding a field to the existing user endpoint + * we don't need to worry about ensuring the calling user has proper permissions. + * Only the user or an administrator would be able to change the avatar. + * + * @param array $input Input submitted via REST request. + * @param object $user The user making the request. + * @return null|\WP_Error + */ + public function set_avatar_rest( $input, $user ) { + // Ensure media_id is set and is a number. + if ( + empty( $input['media_id'] ) || + ! is_numeric( $input['media_id'] ) + ) { + return new \WP_Error( 'invalid_media_id', esc_html__( 'Request did not contain a valid media_id field.', 'simple-local-avatars' ) ); + } + + $attachment = get_post( (int) $input['media_id'] ); + + // Ensure this media_id is a valid attachment. + if ( + ! $attachment || + 'attachment' !== $attachment->post_type || + ! wp_attachment_is_image( $attachment ) + ) { + return new \WP_Error( 'invalid_media_id', esc_html__( 'Media ID did not match a valid attachment.', 'simple-local-avatars' ) ); + } + + // Ensure this attachment is associated with this user. + if ( (int) $attachment->post_author !== (int) $user->ID ) { + return new \WP_Error( 'invalid_media_id', esc_html__( 'This attachment was not uploaded by this user.', 'simple-local-avatars' ) ); + } + + $this->assign_new_user_avatar( (int) $input['media_id'], $user->ID ); + } + + /** + * Short-circuit filter the `simple_local_avatars` option to match network if necessary + * + * @param bool $value Value of `simple_local_avatars` option, typically false. + * + * @return array + */ + public function pre_option_simple_local_avatars( $value ) { + if ( SLA_IS_NETWORK && 'enforce' === $this->get_network_mode() ) { + $value = get_site_option( 'simple_local_avatars', array() ); + } + + return $value; + } + + /** + * Set plugin defaults for a new site + * + * @param int|WP_Site $blog_id Blog ID or object. + */ + public function set_defaults( $blog_id ) { + if ( 'enforce' === $this->get_network_mode() ) { + return; + } + + if ( $blog_id instanceof WP_Site ) { + $blog_id = (int) $blog_id->blog_id; + } + + switch_to_blog( $blog_id ); + update_option( 'simple_local_avatars', $this->sanitize_options( $this->options ) ); + restore_current_blog(); + } + + /** + * Add some basic styling on the Discussion page + */ + public function admin_print_styles() { + ?> + + is_enforced() ) { + $classes .= ' sla-enforced'; + } + + return $classes; + } + + /** + * Clear user cache. + */ + public function sla_clear_user_cache() { + check_ajax_referer( 'sla_clear_cache_nonce', 'nonce' ); + + // Ensure this was run by a user with proper privileges. + if ( ! current_user_can( 'manage_options' ) ) { + // Match what `check_ajax_referer` does. + wp_die( -1, 403 ); + } + + $step = isset( $_REQUEST['step'] ) ? intval( $_REQUEST['step'] ) : 1; + + // Setup defaults. + $users_per_page = 50; + $offset = ( $step - 1 ) * $users_per_page; + + $users_query = new \WP_User_Query( + array( + 'fields' => array( 'ID' ), + 'number' => $users_per_page, + 'offset' => $offset, + ) + ); + + // Total users in the site. + $total_users = $users_query->get_total(); + + // Get the users. + $users = $users_query->get_results(); + + if ( ! empty( $users ) ) { + foreach ( $users as $user ) { + $user_id = $user->ID; + $local_avatars = $this->get_user_local_avatar( $user_id ); + $media_id = isset( $local_avatars['media_id'] ) ? $local_avatars['media_id'] : ''; + $this->clear_user_avatar_cache( $local_avatars, $user_id, $media_id ); + } + + wp_send_json_success( + array( + 'step' => $step + 1, + 'message' => sprintf( + /* translators: 1: Offset, 2: Total users */ + esc_html__( 'Processing %1$s/%2$s users...', 'simple-local-avatars' ), + $offset, + $total_users + ), + ) + ); + } + + wp_send_json_success( + array( + 'step' => 'done', + 'message' => sprintf( + /* translators: %s Total users */ + esc_html__( 'Completed clearing cache for all %s user(s) avatars.', 'simple-local-avatars' ), + $total_users + ), + ) + ); + } + + /** + * Clear avatar cache for given user. + * + * @param array $local_avatars Local avatars. + * @param int $user_id User ID. + * @param mixed $media_id Media ID. + */ + private function clear_user_avatar_cache( $local_avatars, $user_id, $media_id ) { + if ( ! empty( $media_id ) ) { + // In order to support WP 4.9. + if ( function_exists( 'wp_get_original_image_path' ) ) { + $file_name_data = pathinfo( wp_get_original_image_path( $media_id ) ); + } else { + $file_name_data = pathinfo( get_attached_file( $media_id ) ); + } + + $file_dir_name = $file_name_data['dirname']; + $file_name = $file_name_data['filename']; + $file_ext = $file_name_data['extension']; + foreach ( $local_avatars as $local_avatars_key => $local_avatar_value ) { + if ( ! in_array( $local_avatars_key, [ 'media_id', 'full' ], true ) ) { + $file_size_path = sprintf( '%1$s/%2$s-%3$sx%3$s.%4$s', $file_dir_name, $file_name, $local_avatars_key, $file_ext ); + if ( ! file_exists( $file_size_path ) ) { + unset( $local_avatars[ $local_avatars_key ] ); + } + } + } + + // Update meta, remove sizes that don't exist. + update_user_meta( $user_id, 'simple_local_avatar', $local_avatars ); + } + } + + /** + * Add default avatar upload file field. + * + * @param array $defaults Default options for avatar. + * + * @return array Default options of avatar. + */ + public function add_avatar_default_field( $defaults ) { + $default_avatar_file_url = ''; + $default_avatar_file_id = get_option( 'simple_local_avatar_default', '' ); + if ( ! empty( $default_avatar_file_id ) ) { + $default_avatar_file_url = wp_get_attachment_image_url( $default_avatar_file_id ); + } + ob_start(); + ?> + + + + +

+ blog_id = 1; + $sites = array( $site ); + } + + // Bail early if we don't find sites. + if ( empty( $sites ) ) { + return $count; + } + + foreach ( $sites as $site ) { + // Get the blog ID to use in the meta key and user query. + $blog_id = isset( $site->blog_id ) ? $site->blog_id : 1; + + // Get the name of the meta key for WP User Avatar. + $meta_key = $wpdb->get_blog_prefix( $blog_id ) . 'user_avatar'; + + // Get processed users from database. + $migrations = get_option( 'simple_local_avatars_migrations', array() ); + $processed_users = isset( $migrations['wp_user_avatar'] ) ? $migrations['wp_user_avatar'] : array(); + + // Get all users that have a local avatar. + $users = get_users( + array( + 'blog_id' => $blog_id, + 'exclude' => $processed_users, + 'meta_key' => $meta_key, + 'meta_compare' => 'EXISTS', + ) + ); + + // Bail early if we don't find users. + if ( empty( $users ) ) { + continue; + } + + foreach ( $users as $user ) { + // Get the existing avatar media ID. + $avatar_id = get_user_meta( $user->ID, $meta_key, true ); + + // Attach the user and media to Simple Local Avatars. + $sla = new Simple_Local_Avatars(); + $sla->assign_new_user_avatar( (int) $avatar_id, $user->ID ); + + // Check that it worked. + $is_migrated = get_user_meta( $user->ID, 'simple_local_avatar', true ); + + if ( ! empty( $is_migrated ) ) { + // Build array of user IDs. + $migrations['wp_user_avatar'][] = $user->ID; + + // Record the user IDs so we don't process a second time. + $is_saved = update_option( 'simple_local_avatars_migrations', $migrations ); + + // Record how many avatars we migrate to be used in our messaging. + if ( $is_saved ) { + $count ++; + } + } + } + } + + return $count; + } + + /** + * Migrate the user's avatar data away from WP User Avatar/ProfilePress via the dashboard. + * + * Sends the number of avatars processed back to the AJAX response before stopping execution. + * + * @return void + */ + public function ajax_migrate_from_wp_user_avatar() { + // Check if user has the required capability. + if ( ! current_user_can( 'manage_options' ) ) { + wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'simple-local-avatars' ) ); + } + + // Bail early if nonce is not available. + if ( empty( sanitize_text_field( $_POST['migrateFromWpUserAvatarNonce'] ) ) ) { + die; + } + + // Bail early if nonce is invalid. + if ( ! wp_verify_nonce( sanitize_text_field( $_POST['migrateFromWpUserAvatarNonce'] ), 'migrate_from_wp_user_avatar_nonce' ) ) { + die(); + } + + // Run the migration script and store the number of avatars processed. + $count = $this->migrate_from_wp_user_avatar(); + + // Create the array we send back to javascript here. + $array_we_send_back = array( 'count' => $count ); + + // Make sure to json encode the output because that's what it is expecting. + echo wp_json_encode( $array_we_send_back ); + + // Make sure you die when finished doing ajax output. + wp_die(); + + } + + /** + * Migrate the user's avatar data from WP User Avatar/ProfilePress via the command line. + * + * ## OPTIONS + * + * [--yes] + * : Skips the confirmations (for automated systems). + * + * ## EXAMPLES + * + * $ wp simple-local-avatars migrate wp-user-avatar + * Success: Number of avatars successfully migrated from WP User Avatar: 5 + * + * @param array $args The arguments. + * @param array $assoc_args The associative arguments. + * + * @return void + */ + public function wp_cli_migrate_from_wp_user_avatar( $args, $assoc_args ) { + + // Argument --yes to prevent confirmation (for automated systems). + if ( ! isset( $assoc_args['yes'] ) ) { + WP_CLI::confirm( esc_html__( 'Do you want to migrate avatars from WP User Avatar?', 'simple-local-avatars' ) ); + } + + // Run the migration script and store the number of avatars processed. + $count = $this->migrate_from_wp_user_avatar(); + + // Error out if we don't process any avatars. + if ( 0 === absint( $count ) ) { + WP_CLI::error( esc_html__( 'No avatars were migrated from WP User Avatar.', 'simple-local-avatars' ) ); + } + + WP_CLI::success( + sprintf( + '%s: %s', + esc_html__( 'Number of avatars successfully migrated from WP User Avatar', 'simple-local-avatars' ), + esc_html( $count ) + ) + ); + } +} diff --git a/wp-content/plugins/simple-local-avatars/readme.txt b/wp-content/plugins/simple-local-avatars/readme.txt new file mode 100644 index 000000000..6d96b508a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/readme.txt @@ -0,0 +1,101 @@ +=== Simple Local Avatars === +Contributors: jakemgold, 10up, thinkoomph, jeffpaul, faisal03 +Donate link: https://10up.com/plugins/simple-local-avatars-wordpress/ +Tags: avatar, gravatar, user photos, users, profile +Tested up to: 6.8 +Stable tag: 2.8.5 +License: GPL-2.0-or-later +License URI: https://spdx.org/licenses/GPL-2.0-or-later.html + +Adds an avatar upload field to user profiles. Generates requested sizes on demand just like Gravatar! + +== Description == + +Adds an avatar upload field to user profiles if the current user has media permissions. Generates requested sizes on demand just like Gravatar! Simple and lightweight. + +Just edit a user profile, and scroll down to the new "Avatar" field. The plug-in will take care of cropping and sizing! + +1. Stores avatars in the "uploads" folder where all of your other media is kept. +2. Has a simple, native interface. +3. Fully supports Gravatar and default avatars if no local avatar is set for the user - but also allows you turn off Gravatar. +4. Generates the requested avatar size on demand (and stores the new size for efficiency), so it looks great, just like Gravatar! +5. Lets you decide whether lower privilege users (subscribers, contributors) can upload their own avatar. +6. Enables rating of local avatars, just like Gravatar. + +== Installation == + +1. Install easily with the WordPress plugin control panel or manually download the plugin and upload the extracted folder to the `/wp-content/plugins/` directory +1. Activate the plugin through the 'Plugins' menu in WordPress +1. If you only want users with file upload capabilities to upload avatars, check the applicable option under Settings > Discussion +1. Start uploading avatars by editing user profiles! + +Use avatars in your theme using WordPress' built in `get_avatar()` function: [http://codex.wordpress.org/Function_Reference/get_avatar](http://codex.wordpress.org/Function_Reference/get_avatar "get_avatar function") + +You can also use `get_simple_local_avatar()` (with the same arguments) to retrieve local avatars a bit faster, but this will make your theme dependent on this plug-in. + +== Frequently Asked Questions == + += Does Simple Local Avatars collect personal data of website visitors? = + +No. Simple Local Avatars neither collects, stores, nor sends any PII data of visitors or avatar users on the host site or to 10up or other services. + +== Screenshots == + +1. Avatar upload field on a user profile page + +== Changelog == + += 2.8.5 - 2025-08-06 = +* **Security:** Run a user capability check before migrating WP User Avatars. Thank you Håkon Harnes at [Wordfence](https://www.wordfence.com/) for responsibly disclosing this issue. (props [@jeffpaul](https://github.com/jeffpaul), [@peterwilsoncc](https://github.com/peterwilsoncc), [@faisal-alvi](https://github.com/faisal-alvi) via [GHSA-fmhf-27jv-qf37](https://github.com/10up/simple-local-avatars/security/advisories/GHSA-fmhf-27jv-qf37)) + += 2.8.4 - 2025-07-14 = +* **Changed:** Don't resize image if the full version already has the expected height/width (props [@ocean90](https://github.com/ocean90), [@jeffpaul](https://github.com/jeffpaul), [@faisal-alvi](https://github.com/faisal-alvi) via [#324](https://github.com/10up/simple-local-avatars/pull/324)). +* **Changed:** Bump WordPress "tested up to" version 6.8 (props [@qasumitbagthariya](https://github.com/qasumitbagthariya), [@dkotter](https://github.com/dkotter), [@jeffpaul](https://github.com/jeffpaul) via [#332](https://github.com/10up/simple-local-avatars/pull/332), [#334](https://github.com/10up/simple-local-avatars/pull/334)). +* **Changed:** Bump WordPress minimum from 6.5 to 6.6 (props [@qasumitbagthariya](https://github.com/qasumitbagthariya), [@dkotter](https://github.com/dkotter), [@jeffpaul](https://github.com/jeffpaul) via [#332](https://github.com/10up/simple-local-avatars/pull/332), [#334](https://github.com/10up/simple-local-avatars/pull/334)). +* **Security:** Bump `@sentry/node` from 8.38.0 to 8.52.0 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#325](https://github.com/10up/simple-local-avatars/pull/325)). +* **Security:** Bump `axios` from 1.7.7 to 1.8.4 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#330](https://github.com/10up/simple-local-avatars/pull/330)). +* **Security:** Bump `tar-fs` from 3.0.6 to 3.0.9 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#331](https://github.com/10up/simple-local-avatars/pull/331), [#336](https://github.com/10up/simple-local-avatars/pull/336)). +* **Security:** Bump `http-proxy-middleware` from 2.0.7 to 2.0.9 (props [@dependabot](https://github.com/apps/dependabot), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#335](https://github.com/10up/simple-local-avatars/pull/335)). + += 2.8.3 - 2024-11-18 = +* **Changed:** Only allow images that were uploaded by the same user be used when setting the avatar via a REST request (props [@dkotter](https://github.com/dkotter), [@justus12337](https://github.com/justus12337), [@faisal-alvi](https://github.com/faisal-alvi) via [#317](https://github.com/10up/simple-local-avatars/pull/317)). +* **Fixed:** Only allow image files to be set as the avatar in REST requests (props [@dkotter](https://github.com/dkotter), [@justus12337](https://github.com/justus12337), [@faisal-alvi](https://github.com/faisal-alvi) via [#317](https://github.com/10up/simple-local-avatars/pull/317)). +* **Security:** Bump `@10up/cypress-wp-utils` from 0.2.0 to 0.4.0, `@sentry/node` from 6.19.7 to 8.38.0, `@wordpress/env` from 9.2.0 to 10.11.0, `cypress` from 13.2.0 to 13.15.2, `cypress-mochawesome-reporter` from 3.6.0 to 3.8.2, `puppeteer-core` from 23.3.0 to 23.8.0 (props [@dkotter](https://github.com/dkotter) via [#319](https://github.com/10up/simple-local-avatars/pull/319)). + += 2.8.2 - 2024-11-12 = +* **Fixed:** Ensure dependencies are (actually) included properly in the release (props [@dkotter](https://github.com/dkotter) via [#316](https://github.com/10up/simple-local-avatars/pull/316)). + += 2.8.1 - 2024-11-12 = +* **Fixed:** Ensure dependencies are included properly in the release (props [@dkotter](https://github.com/dkotter) via [#315](https://github.com/10up/simple-local-avatars/pull/315)). + +[View historical changelog details here](https://github.com/10up/simple-local-avatars/blob/develop/CHANGELOG.md). + +== Upgrade Notice == + += 2.8.5 = +**Security release: Fixes an issue migrating WP User Avatars** + += 2.8.4 = +**Note that this release bumps the minimum required version of WordPress from 6.5 to 6.6.** + += 2.8.0 = +**Note that this release bumps the minimum required version of WordPress from 6.4 to 6.5.** + += 2.7.11 = +**Note that this release bumps the minimum required version of WordPress from 6.3 to 6.4.** + += 2.7.8 = +**Note that this release bumps the minimum required version of WordPress from 5.7 to 6.3.** + += 2.6.0 = +**Note that this release bumps the minimum required version of WordPress from 4.6 to 5.7 and PHP from 5.6 to 7.4.** + += 2.1 = +*Important note:* All avatar uploads now go into the media library. Don't worry - users without the ability to upload files cannot otherwise see the contents of your media library. This allows local avatars to respect other functionality your site may have around uploaded images, such as external hosting. + += 2.0 = +Upgraded to take advantage of *WordPress 3.5 and newer*. Does not support older versions! This has also *not* been tested with front end profile plug-ins - feedback welcome. Note that several language strings have been added or modified - revised translations would be welcome! + += 1.3.1 = +Like WordPress 3.2, now *REQUIRES* PHP 5.2 or newer. + diff --git a/wp-content/plugins/simple-local-avatars/simple-local-avatars.php b/wp-content/plugins/simple-local-avatars/simple-local-avatars.php new file mode 100644 index 000000000..c15c90cc5 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/simple-local-avatars.php @@ -0,0 +1,88 @@ +set_plugin_name( 'Simple Local Avatars' ) + ->set_php_min_required_version( '7.4' ); + +if ( ! $compat_checker->is_plugin_compatible() ) { + return; +} + +define( 'SLA_PLUGIN_BASENAME', plugin_basename( __FILE__ ) ); + +require_once dirname( __FILE__ ) . '/includes/class-simple-local-avatars.php'; + +// Global constants. +define( 'SLA_VERSION', '2.8.5' ); +define( 'SLA_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); + +if ( ! defined( 'SLA_IS_NETWORK' ) ) { + define( 'SLA_IS_NETWORK', Simple_Local_Avatars::is_network( plugin_basename( __FILE__ ) ) ); +} + +/** + * Init the plugin. + */ +global $simple_local_avatars; +$simple_local_avatars = new Simple_Local_Avatars(); + +/** + * More efficient to call simple local avatar directly in theme and avoid + * gravatar setup. + * + * Since 2.2, This function is only a proxy for get_avatar due to internal changes. + * + * @param int|string|object $id_or_email A user ID, email address, or comment object + * @param int $size Size of the avatar image + * @param string $default URL to a default image to use if no avatar is available + * @param string $alt Alternate text to use in image tag. Defaults to blank + * @param array $args Optional. Extra arguments to retrieve the avatar. + * + * @return string tag for the user's avatar + */ +function get_simple_local_avatar( $id_or_email, $size = 96, $default = '', $alt = '', $args = array() ) { + return apply_filters( 'simple_local_avatar', get_avatar( $id_or_email, $size, $default, $alt, $args ) ); +} + +register_uninstall_hook( __FILE__, 'simple_local_avatars_uninstall' ); +/** + * On uninstallation, remove the custom field from the users and delete the local avatars + */ +function simple_local_avatars_uninstall() { + $simple_local_avatars = new Simple_Local_Avatars(); + $users = get_users( + array( + 'meta_key' => 'simple_local_avatar', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key + 'fields' => 'ids', + ) + ); + + foreach ( $users as $user_id ) : + $simple_local_avatars->avatar_delete( $user_id ); + endforeach; + + delete_option( 'simple_local_avatars' ); + delete_option( 'simple_local_avatars_migrations' ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/autoload.php b/wp-content/plugins/simple-local-avatars/vendor/autoload.php new file mode 100644 index 000000000..fbb937966 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/autoload.php @@ -0,0 +1,22 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/InstalledVersions.php b/wp-content/plugins/simple-local-avatars/vendor/composer/InstalledVersions.php new file mode 100644 index 000000000..2052022fd --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/InstalledVersions.php @@ -0,0 +1,396 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to + * @internal + */ + private static $selfDir = null; + + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool + */ + private static $installedIsLocalDir; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + + // when using reload, we disable the duplicate protection to ensure that self::$installed data is + // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not, + // so we have to assume it does not, and that may result in duplicate data being returned when listing + // all installed packages for example + self::$installedIsLocalDir = false; + } + + /** + * @return string + */ + private static function getSelfDir() + { + if (self::$selfDir === null) { + self::$selfDir = strtr(__DIR__, '\\', '/'); + } + + return self::$selfDir; + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + $copiedLocalDir = false; + + if (self::$canGetVendors) { + $selfDir = self::getSelfDir(); + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + $vendorDir = strtr($vendorDir, '\\', '/'); + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + self::$installedByVendor[$vendorDir] = $required; + $installed[] = $required; + if (self::$installed === null && $vendorDir.'/composer' === $selfDir) { + self::$installed = $required; + self::$installedIsLocalDir = true; + } + } + if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) { + $copiedLocalDir = true; + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array() && !$copiedLocalDir) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/LICENSE b/wp-content/plugins/simple-local-avatars/vendor/composer/LICENSE new file mode 100644 index 000000000..f27399a04 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_classmap.php b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..0fb0a2c19 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_namespaces.php b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_namespaces.php new file mode 100644 index 000000000..15a2ff3ad --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($baseDir . '/10up-lib/wp-compat-validation-tool/src'), + 'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'), +); diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_real.php b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_real.php new file mode 100644 index 000000000..c93fe0414 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_real.php @@ -0,0 +1,38 @@ +register(true); + + return $loader; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_static.php b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_static.php new file mode 100644 index 000000000..692e59923 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/autoload_static.php @@ -0,0 +1,44 @@ + + array ( + 'WP_Compat_Validation_Tool\\' => 26, + ), + 'C' => + array ( + 'Composer\\Installers\\' => 20, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'WP_Compat_Validation_Tool\\' => + array ( + 0 => __DIR__ . '/../..' . '/10up-lib/wp-compat-validation-tool/src', + ), + 'Composer\\Installers\\' => + array ( + 0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit998b6fd9c25857a5c183b81c7706d47e::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit998b6fd9c25857a5c183b81c7706d47e::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit998b6fd9c25857a5c183b81c7706d47e::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installed.json b/wp-content/plugins/simple-local-avatars/vendor/composer/installed.json new file mode 100644 index 000000000..c286cb520 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installed.json @@ -0,0 +1,194 @@ +{ + "packages": [ + { + "name": "10up/wp-compat-validation-tool", + "version": "dev-trunk", + "version_normalized": "dev-trunk", + "source": { + "type": "git", + "url": "https://github.com/10up/wp-compat-validation-tool.git", + "reference": "19a8c7c1d39d3a4c896aeeac8d42edd20b8d2317" + }, + "require": { + "composer/installers": "^2.2" + }, + "time": "2023-11-09T18:48:23+00:00", + "type": "wordpress-plugin", + "extra": { + "installer-name": "10up-lib/wp-compat-validation-tool" + }, + "installation-source": "source", + "autoload": { + "psr-4": { + "WP_Compat_Validation_Tool\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "10up", + "email": "opensource@10up.com", + "homepage": "https://10up.com", + "role": "Developer" + } + ], + "description": "Perform PHP and WP version compatibility checks in your plugin.", + "homepage": "https://github.com/10up/wp-compat-validation-tool", + "install-path": "../../10up-lib/wp-compat-validation-tool" + }, + { + "name": "composer/installers", + "version": "dev-main", + "version_normalized": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "12fb2dfe5e16183de69e784a7b84046c43d97e8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/12fb2dfe5e16183de69e784a7b84046c43d97e8e", + "reference": "12fb2dfe5e16183de69e784a7b84046c43d97e8e", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "composer/composer": "^1.10.27 || ^2.7", + "composer/semver": "^1.7.2 || ^3.4.0", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-phpunit": "^1", + "symfony/phpunit-bridge": "^7.1.1", + "symfony/process": "^5 || ^6 || ^7" + }, + "time": "2024-06-24T20:46:46+00:00", + "default-branch": true, + "type": "composer-plugin", + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-main": "2.x-dev" + }, + "plugin-modifies-install-path": true + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Composer\\Installers\\": "src/Composer/Installers" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "https://composer.github.io/installers/", + "keywords": [ + "Dolibarr", + "Eliasis", + "Hurad", + "ImageCMS", + "Kanboard", + "Lan Management System", + "MODX Evo", + "MantisBT", + "Mautic", + "Maya", + "OXID", + "Plentymarkets", + "Porto", + "RadPHP", + "SMF", + "Starbug", + "Thelia", + "Whmcs", + "WolfCMS", + "agl", + "annotatecms", + "attogram", + "bitrix", + "cakephp", + "chef", + "cockpit", + "codeigniter", + "concrete5", + "concreteCMS", + "croogo", + "dokuwiki", + "drupal", + "eZ Platform", + "elgg", + "expressionengine", + "fuelphp", + "grav", + "installer", + "itop", + "known", + "kohana", + "laravel", + "lavalite", + "lithium", + "magento", + "majima", + "mako", + "matomo", + "mediawiki", + "miaoxing", + "modulework", + "modx", + "moodle", + "osclass", + "pantheon", + "phpbb", + "piwik", + "ppi", + "processwire", + "puppet", + "pxcms", + "reindex", + "roundcube", + "shopware", + "silverstripe", + "sydes", + "sylius", + "tastyigniter", + "wordpress", + "yawik", + "zend", + "zikula" + ], + "support": { + "issues": "https://github.com/composer/installers/issues", + "source": "https://github.com/composer/installers/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "install-path": "./installers" + } + ], + "dev": false, + "dev-package-names": [] +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installed.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installed.php new file mode 100644 index 000000000..81fdf1244 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installed.php @@ -0,0 +1,43 @@ + array( + 'name' => '10up/simple-local-avatars', + 'pretty_version' => '2.8.5', + 'version' => '2.8.5.0', + 'reference' => '7d4e0f6efc49cc7051140be51c9c3d88a55e11ee', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => false, + ), + 'versions' => array( + '10up/simple-local-avatars' => array( + 'pretty_version' => '2.8.5', + 'version' => '2.8.5.0', + 'reference' => '7d4e0f6efc49cc7051140be51c9c3d88a55e11ee', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + '10up/wp-compat-validation-tool' => array( + 'pretty_version' => 'dev-trunk', + 'version' => 'dev-trunk', + 'reference' => '19a8c7c1d39d3a4c896aeeac8d42edd20b8d2317', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../10up-lib/wp-compat-validation-tool', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'composer/installers' => array( + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'reference' => '12fb2dfe5e16183de69e784a7b84046c43d97e8e', + 'type' => 'composer-plugin', + 'install_path' => __DIR__ . '/./installers', + 'aliases' => array( + 0 => '2.x-dev', + ), + 'dev_requirement' => false, + ), + ), +); diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/continuous-integration.yml b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/continuous-integration.yml new file mode 100644 index 000000000..2ecae1364 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/continuous-integration.yml @@ -0,0 +1,65 @@ +name: "Continuous Integration" + +on: + - push + - pull_request + +env: + COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist" + SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT: "1" + +permissions: + contents: read + +jobs: + tests: + name: "CI" + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "7.2" + - "7.3" + - "7.4" + - "8.0" + - "8.1" + dependencies: [locked] + include: + - php-version: "7.2" + dependencies: lowest + - php-version: "8.1" + dependencies: lowest + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + tools: composer:snapshot + + - name: Get composer cache directory + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: "Handle lowest dependencies update" + if: "contains(matrix.dependencies, 'lowest')" + run: "echo \"COMPOSER_FLAGS=$COMPOSER_FLAGS --prefer-lowest\" >> $GITHUB_ENV" + + - name: "Install latest dependencies" + run: "composer update ${{ env.COMPOSER_FLAGS }}" + + - name: "Run tests" + run: "vendor/bin/simple-phpunit --verbose" diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/lint.yml b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/lint.yml new file mode 100644 index 000000000..61b563336 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/lint.yml @@ -0,0 +1,33 @@ +name: "PHP Lint" + +on: + - push + - pull_request + +permissions: + contents: read + +jobs: + tests: + name: "Lint" + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "7.2" + - "latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + + - name: "Lint PHP files" + run: "find src/ -type f -name '*.php' -print0 | xargs -0 -L1 -P4 -- php -l -f" diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/phpstan.yml b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/phpstan.yml new file mode 100644 index 000000000..c638b4404 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/.github/workflows/phpstan.yml @@ -0,0 +1,52 @@ +name: "PHPStan" + +on: + - push + - pull_request + +env: + COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist" + SYMFONY_PHPUNIT_VERSION: "" + +permissions: + contents: read + +jobs: + tests: + name: "PHPStan" + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "8.0" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + + - name: Get composer cache directory + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: "Install latest dependencies" + run: "composer update ${{ env.COMPOSER_FLAGS }}" + + - name: Run PHPStan + run: | + composer require --dev phpunit/phpunit:^8.5.18 --with-all-dependencies ${{ env.COMPOSER_FLAGS }} + vendor/bin/phpstan analyse diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/LICENSE b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/LICENSE new file mode 100644 index 000000000..85f97fc79 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012 Kyle Robinson Young + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/composer.json b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/composer.json new file mode 100644 index 000000000..910348483 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/composer.json @@ -0,0 +1,117 @@ +{ + "name": "composer/installers", + "type": "composer-plugin", + "license": "MIT", + "description": "A multi-framework Composer library installer", + "keywords": [ + "installer", + "AGL", + "AnnotateCms", + "Attogram", + "Bitrix", + "CakePHP", + "Chef", + "Cockpit", + "CodeIgniter", + "concrete5", + "ConcreteCMS", + "Croogo", + "DokuWiki", + "Dolibarr", + "Drupal", + "Elgg", + "Eliasis", + "ExpressionEngine", + "eZ Platform", + "FuelPHP", + "Grav", + "Hurad", + "ImageCMS", + "iTop", + "Kanboard", + "Known", + "Kohana", + "Lan Management System", + "Laravel", + "Lavalite", + "Lithium", + "Magento", + "majima", + "Mako", + "MantisBT", + "Matomo", + "Mautic", + "Maya", + "MODX", + "MODX Evo", + "MediaWiki", + "Miaoxing", + "OXID", + "osclass", + "MODULEWork", + "Moodle", + "Pantheon", + "Piwik", + "pxcms", + "phpBB", + "Plentymarkets", + "PPI", + "Puppet", + "Porto", + "ProcessWire", + "RadPHP", + "ReIndex", + "Roundcube", + "shopware", + "SilverStripe", + "SMF", + "Starbug", + "SyDES", + "Sylius", + "TastyIgniter", + "Thelia", + "WHMCS", + "WolfCMS", + "WordPress", + "YAWIK", + "Zend", + "Zikula" + ], + "homepage": "https://composer.github.io/installers/", + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "autoload": { + "psr-4": { "Composer\\Installers\\": "src/Composer/Installers" } + }, + "autoload-dev": { + "psr-4": { "Composer\\Installers\\Test\\": "tests/Composer/Installers/Test" } + }, + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-main": "2.x-dev" + }, + "plugin-modifies-install-path": true + }, + "require": { + "php": "^7.2 || ^8.0", + "composer-plugin-api": "^1.0 || ^2.0" + }, + "require-dev": { + "composer/composer": "^1.10.27 || ^2.7", + "composer/semver": "^1.7.2 || ^3.4.0", + "symfony/phpunit-bridge": "^7.1.1", + "phpstan/phpstan": "^1.11", + "symfony/process": "^5 || ^6 || ^7", + "phpstan/phpstan-phpunit": "^1" + }, + "scripts": { + "test": "@php vendor/bin/simple-phpunit", + "phpstan": "@php vendor/bin/phpstan analyse" + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AglInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AglInstaller.php new file mode 100644 index 000000000..b0996a6ae --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AglInstaller.php @@ -0,0 +1,29 @@ + */ + protected $locations = array( + 'module' => 'More/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $name = preg_replace_callback('/(?:^|_|-)(.?)/', function ($matches) { + return strtoupper($matches[1]); + }, $vars['name']); + + if (null === $name) { + throw new \RuntimeException('Failed to run preg_replace_callback: '.preg_last_error()); + } + + $vars['name'] = $name; + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php new file mode 100644 index 000000000..c504c70f3 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php @@ -0,0 +1,23 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php new file mode 100644 index 000000000..58a0f6669 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'module' => 'addons/modules/{$name}/', + 'component' => 'addons/components/{$name}/', + 'service' => 'addons/services/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php new file mode 100644 index 000000000..f01b3991d --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php @@ -0,0 +1,58 @@ + */ + protected $locations = array( + 'module' => 'Modules/{$name}/', + 'theme' => 'Themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type asgard-module, cut off a trailing '-plugin' if present. + * + * For package type asgard-theme, cut off a trailing '-theme' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'asgard-module') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'asgard-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectPluginVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-module$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php new file mode 100644 index 000000000..bd7dd8d76 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php new file mode 100644 index 000000000..663ec2afd --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php @@ -0,0 +1,137 @@ + */ + protected $locations = array(); + /** @var Composer */ + protected $composer; + /** @var PackageInterface */ + protected $package; + /** @var IOInterface */ + protected $io; + + /** + * Initializes base installer. + */ + public function __construct(PackageInterface $package, Composer $composer, IOInterface $io) + { + $this->composer = $composer; + $this->package = $package; + $this->io = $io; + } + + /** + * Return the install path based on package type. + */ + public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string + { + $type = $this->package->getType(); + + $prettyName = $this->package->getPrettyName(); + if (strpos($prettyName, '/') !== false) { + list($vendor, $name) = explode('/', $prettyName); + } else { + $vendor = ''; + $name = $prettyName; + } + + $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type')); + + $extra = $package->getExtra(); + if (!empty($extra['installer-name'])) { + $availableVars['name'] = $extra['installer-name']; + } + + $extra = $this->composer->getPackage()->getExtra(); + if (!empty($extra['installer-paths'])) { + $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type, $vendor); + if ($customPath !== false) { + return $this->templatePath($customPath, $availableVars); + } + } + + $packageType = substr($type, strlen($frameworkType) + 1); + $locations = $this->getLocations($frameworkType); + if (!isset($locations[$packageType])) { + throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type)); + } + + return $this->templatePath($locations[$packageType], $availableVars); + } + + /** + * For an installer to override to modify the vars per installer. + * + * @param array $vars This will normally receive array{name: string, vendor: string, type: string} + * @return array + */ + public function inflectPackageVars(array $vars): array + { + return $vars; + } + + /** + * Gets the installer's locations + * + * @return array map of package types => install path + */ + public function getLocations(string $frameworkType) + { + return $this->locations; + } + + /** + * Replace vars in a path + * + * @param array $vars + */ + protected function templatePath(string $path, array $vars = array()): string + { + if (strpos($path, '{') !== false) { + extract($vars); + preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches); + if (!empty($matches[1])) { + foreach ($matches[1] as $var) { + $path = str_replace('{$' . $var . '}', $$var, $path); + } + } + } + + return $path; + } + + /** + * Search through a passed paths array for a custom install path. + * + * @param array $paths + * @return string|false + */ + protected function mapCustomInstallPaths(array $paths, string $name, string $type, ?string $vendor = null) + { + foreach ($paths as $path => $names) { + $names = (array) $names; + if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) { + return $path; + } + } + + return false; + } + + protected function pregReplace(string $pattern, string $replacement, string $subject): string + { + $result = preg_replace($pattern, $replacement, $subject); + if (null === $result) { + throw new \RuntimeException('Failed to run preg_replace with '.$pattern.': '.preg_last_error()); + } + + return $result; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php new file mode 100644 index 000000000..705ecb4fa --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php @@ -0,0 +1,123 @@ +.`. + * - `bitrix-d7-component` — copy the component to directory `bitrix/components//`. + * - `bitrix-d7-template` — copy the template to directory `bitrix/templates/_`. + * + * You can set custom path to directory with Bitrix kernel in `composer.json`: + * + * ```json + * { + * "extra": { + * "bitrix-dir": "s1/bitrix" + * } + * } + * ``` + * + * @author Nik Samokhvalov + * @author Denis Kulichkin + */ +class BitrixInstaller extends BaseInstaller +{ + /** @var array */ + protected $locations = array( + 'module' => '{$bitrix_dir}/modules/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) + 'component' => '{$bitrix_dir}/components/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) + 'theme' => '{$bitrix_dir}/templates/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) + 'd7-module' => '{$bitrix_dir}/modules/{$vendor}.{$name}/', + 'd7-component' => '{$bitrix_dir}/components/{$vendor}/{$name}/', + 'd7-template' => '{$bitrix_dir}/templates/{$vendor}_{$name}/', + ); + + /** + * @var string[] Storage for informations about duplicates at all the time of installation packages. + */ + private static $checkedDuplicates = array(); + + public function inflectPackageVars(array $vars): array + { + /** @phpstan-ignore-next-line */ + if ($this->composer->getPackage()) { + $extra = $this->composer->getPackage()->getExtra(); + + if (isset($extra['bitrix-dir'])) { + $vars['bitrix_dir'] = $extra['bitrix-dir']; + } + } + + if (!isset($vars['bitrix_dir'])) { + $vars['bitrix_dir'] = 'bitrix'; + } + + return parent::inflectPackageVars($vars); + } + + /** + * {@inheritdoc} + */ + protected function templatePath(string $path, array $vars = array()): string + { + $templatePath = parent::templatePath($path, $vars); + $this->checkDuplicates($templatePath, $vars); + + return $templatePath; + } + + /** + * Duplicates search packages. + * + * @param array $vars + */ + protected function checkDuplicates(string $path, array $vars = array()): void + { + $packageType = substr($vars['type'], strlen('bitrix') + 1); + $localDir = explode('/', $vars['bitrix_dir']); + array_pop($localDir); + $localDir[] = 'local'; + $localDir = implode('/', $localDir); + + $oldPath = str_replace( + array('{$bitrix_dir}', '{$name}'), + array($localDir, $vars['name']), + $this->locations[$packageType] + ); + + if (in_array($oldPath, static::$checkedDuplicates)) { + return; + } + + if ($oldPath !== $path && file_exists($oldPath) && $this->io->isInteractive()) { + $this->io->writeError(' Duplication of packages:'); + $this->io->writeError(' Package ' . $oldPath . ' will be called instead package ' . $path . ''); + + while (true) { + switch ($this->io->ask(' Delete ' . $oldPath . ' [y,n,?]? ', '?')) { + case 'y': + $fs = new Filesystem(); + $fs->removeDirectory($oldPath); + break 2; + + case 'n': + break 2; + + case '?': + default: + $this->io->writeError(array( + ' y - delete package ' . $oldPath . ' and to continue with the installation', + ' n - don\'t delete and to continue with the installation', + )); + $this->io->writeError(' ? - print help'); + break; + } + } + } + + static::$checkedDuplicates[] = $oldPath; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php new file mode 100644 index 000000000..ab022d995 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'package' => 'Packages/{$vendor}/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BotbleInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BotbleInstaller.php new file mode 100644 index 000000000..35e1cb8d6 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/BotbleInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'plugin' => 'platform/plugins/{$name}/', + 'theme' => 'platform/themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php new file mode 100644 index 000000000..12b4ed408 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php @@ -0,0 +1,67 @@ + */ + protected $locations = array( + 'plugin' => 'Plugin/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + if ($this->matchesCakeVersion('>=', '3.0.0')) { + return $vars; + } + + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + + return $vars; + } + + /** + * Change the default plugin location when cakephp >= 3.0 + */ + public function getLocations(string $frameworkType): array + { + if ($this->matchesCakeVersion('>=', '3.0.0')) { + $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/'; + } + return $this->locations; + } + + /** + * Check if CakePHP version matches against a version + * + * @phpstan-param '='|'=='|'<'|'<='|'>'|'>='|'<>'|'!=' $matcher + */ + protected function matchesCakeVersion(string $matcher, string $version): bool + { + $repositoryManager = $this->composer->getRepositoryManager(); + /** @phpstan-ignore-next-line */ + if (!$repositoryManager) { + return false; + } + + $repos = $repositoryManager->getLocalRepository(); + /** @phpstan-ignore-next-line */ + if (!$repos) { + return false; + } + + return $repos->findPackage('cakephp/cakephp', new Constraint($matcher, $version)) !== null; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php new file mode 100644 index 000000000..b0d3c5f76 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'cookbook' => 'Chef/{$vendor}/{$name}/', + 'role' => 'Chef/roles/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php new file mode 100644 index 000000000..1c52e0cdc --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'ext' => 'ext/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php new file mode 100644 index 000000000..2c943b215 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'ship' => 'CCF/orbit/{$name}/', + 'theme' => 'CCF/app/themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php new file mode 100644 index 000000000..d3fcdf7d4 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php @@ -0,0 +1,36 @@ + */ + protected $locations = array( + 'module' => 'cockpit/modules/addons/{$name}/', + ); + + /** + * Format module name. + * + * Strip `module-` prefix from package name. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] == 'cockpit-module') { + return $this->inflectModuleVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + public function inflectModuleVars(array $vars): array + { + $vars['name'] = ucfirst($this->pregReplace('/cockpit-/i', '', $vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php new file mode 100644 index 000000000..a183e0781 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'library' => 'application/libraries/{$name}/', + 'third-party' => 'application/third_party/{$name}/', + 'module' => 'application/modules/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php new file mode 100644 index 000000000..2f5fecb3d --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php @@ -0,0 +1,15 @@ + */ + protected $locations = array( + 'core' => 'concrete/', + 'block' => 'application/blocks/{$name}/', + 'package' => 'packages/{$name}/', + 'theme' => 'application/themes/{$name}/', + 'update' => 'updates/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ConcreteCMSInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ConcreteCMSInstaller.php new file mode 100644 index 000000000..b6e7f009d --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ConcreteCMSInstaller.php @@ -0,0 +1,15 @@ + */ + protected $locations = array( + 'core' => 'concrete/', + 'block' => 'application/blocks/{$name}/', + 'package' => 'packages/{$name}/', + 'theme' => 'application/themes/{$name}/', + 'update' => 'updates/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php new file mode 100644 index 000000000..31d4939b0 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php @@ -0,0 +1,23 @@ + */ + protected $locations = array( + 'plugin' => 'Plugin/{$name}/', + 'theme' => 'View/Themed/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower(str_replace(array('-', '_'), ' ', $vars['name'])); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php new file mode 100644 index 000000000..88f53f731 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'app' => 'app/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php new file mode 100644 index 000000000..196f60efa --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'module' => 'modules/{$vendor}/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php new file mode 100644 index 000000000..aa3a2e600 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php @@ -0,0 +1,57 @@ + */ + protected $locations = array( + 'plugin' => 'lib/plugins/{$name}/', + 'template' => 'lib/tpl/{$name}/', + ); + + /** + * Format package name. + * + * For package type dokuwiki-plugin, cut off a trailing '-plugin', + * or leading dokuwiki_ if present. + * + * For package type dokuwiki-template, cut off a trailing '-template' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'dokuwiki-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'dokuwiki-template') { + return $this->inflectTemplateVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectPluginVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-plugin$/', '', $vars['name']); + $vars['name'] = $this->pregReplace('/^dokuwiki_?-?/', '', $vars['name']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectTemplateVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-template$/', '', $vars['name']); + $vars['name'] = $this->pregReplace('/^dokuwiki_?-?/', '', $vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php new file mode 100644 index 000000000..c583619ca --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php @@ -0,0 +1,18 @@ + + */ +class DolibarrInstaller extends BaseInstaller +{ + //TODO: Add support for scripts and themes + /** @var array */ + protected $locations = array( + 'module' => 'htdocs/custom/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php new file mode 100644 index 000000000..65a3a91a3 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php @@ -0,0 +1,25 @@ + */ + protected $locations = array( + 'core' => 'core/', + 'module' => 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + 'library' => 'libraries/{$name}/', + 'profile' => 'profiles/{$name}/', + 'database-driver' => 'drivers/lib/Drupal/Driver/Database/{$name}/', + 'drush' => 'drush/{$name}/', + 'custom-theme' => 'themes/custom/{$name}/', + 'custom-module' => 'modules/custom/{$name}/', + 'custom-profile' => 'profiles/custom/{$name}/', + 'drupal-multisite' => 'sites/{$name}/', + 'console' => 'console/{$name}/', + 'console-language' => 'console/language/{$name}/', + 'config' => 'config/sync/', + 'recipe' => 'recipes/{$name}', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php new file mode 100644 index 000000000..48ef2ecdd --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'plugin' => 'mod/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php new file mode 100644 index 000000000..d7dd9a922 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php @@ -0,0 +1,14 @@ + */ + protected $locations = array( + 'component' => 'components/{$name}/', + 'module' => 'modules/{$name}/', + 'plugin' => 'plugins/{$name}/', + 'template' => 'templates/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php new file mode 100644 index 000000000..fe1d468a9 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php @@ -0,0 +1,31 @@ + */ + private $ee2Locations = array( + 'addon' => 'system/expressionengine/third_party/{$name}/', + 'theme' => 'themes/third_party/{$name}/', + ); + + /** @var array */ + private $ee3Locations = array( + 'addon' => 'system/user/addons/{$name}/', + 'theme' => 'themes/user/{$name}/', + ); + + public function getLocations(string $frameworkType): array + { + if ($frameworkType === 'ee2') { + $this->locations = $this->ee2Locations; + } else { + $this->locations = $this->ee3Locations; + } + + return $this->locations; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php new file mode 100644 index 000000000..1f5b84e2a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'meta-assets' => 'web/assets/ezplatform/', + 'assets' => 'web/assets/ezplatform/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ForkCMSInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ForkCMSInstaller.php new file mode 100644 index 000000000..cf6292675 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ForkCMSInstaller.php @@ -0,0 +1,58 @@ + */ + protected $locations = [ + 'module' => 'src/Modules/{$name}/', + 'theme' => 'src/Themes/{$name}/' + ]; + + /** + * Format package name. + * + * For package type fork-cms-module, cut off a trailing '-plugin' if present. + * + * For package type fork-cms-theme, cut off a trailing '-theme' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'fork-cms-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'fork-cms-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectModuleVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^fork-cms-|-module|ForkCMS|ForkCms|Forkcms|forkcms|Module$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); // replace hyphens with spaces + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); // make module name camelcased + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^fork-cms-|-theme|ForkCMS|ForkCms|Forkcms|forkcms|Theme$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); // replace hyphens with spaces + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); // make theme name camelcased + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php new file mode 100644 index 000000000..5948572e2 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'module' => 'fuel/app/modules/{$name}/', + 'package' => 'fuel/packages/{$name}/', + 'theme' => 'fuel/app/themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php new file mode 100644 index 000000000..b4d80ed31 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'component' => 'components/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/GravInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/GravInstaller.php new file mode 100644 index 000000000..f5792e36b --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/GravInstaller.php @@ -0,0 +1,29 @@ + */ + protected $locations = array( + 'plugin' => 'user/plugins/{$name}/', + 'theme' => 'user/themes/{$name}/', + ); + + /** + * Format package name + */ + public function inflectPackageVars(array $vars): array + { + $restrictedWords = implode('|', array_keys($this->locations)); + + $vars['name'] = strtolower($vars['name']); + $vars['name'] = $this->pregReplace( + '/^(?:grav-)?(?:(?:'.$restrictedWords.')-)?(.*?)(?:-(?:'.$restrictedWords.'))?$/ui', + '$1', + $vars['name'] + ); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php new file mode 100644 index 000000000..dd76c5b68 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php @@ -0,0 +1,27 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + 'theme' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php new file mode 100644 index 000000000..4157cecac --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'template' => 'templates/{$name}/', + 'module' => 'application/modules/{$name}/', + 'library' => 'application/libraries/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Installer.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Installer.php new file mode 100644 index 000000000..862d8ae21 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Installer.php @@ -0,0 +1,288 @@ + + */ + private $supportedTypes = array( + 'akaunting' => 'AkauntingInstaller', + 'asgard' => 'AsgardInstaller', + 'attogram' => 'AttogramInstaller', + 'agl' => 'AglInstaller', + 'annotatecms' => 'AnnotateCmsInstaller', + 'bitrix' => 'BitrixInstaller', + 'botble' => 'BotbleInstaller', + 'bonefish' => 'BonefishInstaller', + 'cakephp' => 'CakePHPInstaller', + 'chef' => 'ChefInstaller', + 'civicrm' => 'CiviCrmInstaller', + 'ccframework' => 'ClanCatsFrameworkInstaller', + 'cockpit' => 'CockpitInstaller', + 'codeigniter' => 'CodeIgniterInstaller', + 'concrete5' => 'Concrete5Installer', + 'concretecms' => 'ConcreteCMSInstaller', + 'croogo' => 'CroogoInstaller', + 'dframe' => 'DframeInstaller', + 'dokuwiki' => 'DokuWikiInstaller', + 'dolibarr' => 'DolibarrInstaller', + 'decibel' => 'DecibelInstaller', + 'drupal' => 'DrupalInstaller', + 'elgg' => 'ElggInstaller', + 'eliasis' => 'EliasisInstaller', + 'ee3' => 'ExpressionEngineInstaller', + 'ee2' => 'ExpressionEngineInstaller', + 'ezplatform' => 'EzPlatformInstaller', + 'fork' => 'ForkCMSInstaller', + 'fuel' => 'FuelInstaller', + 'fuelphp' => 'FuelphpInstaller', + 'grav' => 'GravInstaller', + 'hurad' => 'HuradInstaller', + 'tastyigniter' => 'TastyIgniterInstaller', + 'imagecms' => 'ImageCMSInstaller', + 'itop' => 'ItopInstaller', + 'kanboard' => 'KanboardInstaller', + 'known' => 'KnownInstaller', + 'kodicms' => 'KodiCMSInstaller', + 'kohana' => 'KohanaInstaller', + 'lms' => 'LanManagementSystemInstaller', + 'laravel' => 'LaravelInstaller', + 'lavalite' => 'LavaLiteInstaller', + 'lithium' => 'LithiumInstaller', + 'magento' => 'MagentoInstaller', + 'majima' => 'MajimaInstaller', + 'mantisbt' => 'MantisBTInstaller', + 'mako' => 'MakoInstaller', + 'matomo' => 'MatomoInstaller', + 'maya' => 'MayaInstaller', + 'mautic' => 'MauticInstaller', + 'mediawiki' => 'MediaWikiInstaller', + 'miaoxing' => 'MiaoxingInstaller', + 'microweber' => 'MicroweberInstaller', + 'modulework' => 'MODULEWorkInstaller', + 'modx' => 'ModxInstaller', + 'modxevo' => 'MODXEvoInstaller', + 'moodle' => 'MoodleInstaller', + 'october' => 'OctoberInstaller', + 'ontowiki' => 'OntoWikiInstaller', + 'oxid' => 'OxidInstaller', + 'osclass' => 'OsclassInstaller', + 'pxcms' => 'PxcmsInstaller', + 'phpbb' => 'PhpBBInstaller', + 'piwik' => 'PiwikInstaller', + 'plentymarkets'=> 'PlentymarketsInstaller', + 'ppi' => 'PPIInstaller', + 'puppet' => 'PuppetInstaller', + 'radphp' => 'RadPHPInstaller', + 'phifty' => 'PhiftyInstaller', + 'porto' => 'PortoInstaller', + 'processwire' => 'ProcessWireInstaller', + 'quicksilver' => 'PantheonInstaller', + 'redaxo' => 'RedaxoInstaller', + 'redaxo5' => 'Redaxo5Installer', + 'reindex' => 'ReIndexInstaller', + 'roundcube' => 'RoundcubeInstaller', + 'shopware' => 'ShopwareInstaller', + 'sitedirect' => 'SiteDirectInstaller', + 'silverstripe' => 'SilverStripeInstaller', + 'smf' => 'SMFInstaller', + 'starbug' => 'StarbugInstaller', + 'sydes' => 'SyDESInstaller', + 'sylius' => 'SyliusInstaller', + 'tao' => 'TaoInstaller', + 'thelia' => 'TheliaInstaller', + 'tusk' => 'TuskInstaller', + 'userfrosting' => 'UserFrostingInstaller', + 'vanilla' => 'VanillaInstaller', + 'whmcs' => 'WHMCSInstaller', + 'winter' => 'WinterInstaller', + 'wolfcms' => 'WolfCMSInstaller', + 'wordpress' => 'WordPressInstaller', + 'yawik' => 'YawikInstaller', + 'zend' => 'ZendInstaller', + 'zikula' => 'ZikulaInstaller', + 'prestashop' => 'PrestashopInstaller' + ); + + /** + * Disables installers specified in main composer extra installer-disable + * list + */ + public function __construct( + IOInterface $io, + Composer $composer, + string $type = 'library', + ?Filesystem $filesystem = null, + ?BinaryInstaller $binaryInstaller = null + ) { + parent::__construct($io, $composer, $type, $filesystem, $binaryInstaller); + $this->removeDisabledInstallers(); + } + + /** + * {@inheritDoc} + */ + public function getInstallPath(PackageInterface $package) + { + $type = $package->getType(); + $frameworkType = $this->findFrameworkType($type); + + if ($frameworkType === false) { + throw new \InvalidArgumentException( + 'Sorry the package type of this package is not yet supported.' + ); + } + + $class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; + /** + * @var BaseInstaller + */ + $installer = new $class($package, $this->composer, $this->getIO()); + + $path = $installer->getInstallPath($package, $frameworkType); + if (!$this->filesystem->isAbsolutePath($path)) { + $path = getcwd() . '/' . $path; + } + + return $path; + } + + public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) + { + $installPath = $this->getPackageBasePath($package); + $io = $this->io; + $outputStatus = function () use ($io, $installPath) { + $io->write(sprintf('Deleting %s - %s', $installPath, !file_exists($installPath) ? 'deleted' : 'not deleted')); + }; + + $promise = parent::uninstall($repo, $package); + + // Composer v2 might return a promise here + if ($promise instanceof PromiseInterface) { + return $promise->then($outputStatus); + } + + // If not, execute the code right away as parent::uninstall executed synchronously (composer v1, or v2 without async) + $outputStatus(); + + return null; + } + + /** + * {@inheritDoc} + * + * @param string $packageType + */ + public function supports($packageType) + { + $frameworkType = $this->findFrameworkType($packageType); + + if ($frameworkType === false) { + return false; + } + + $locationPattern = $this->getLocationPattern($frameworkType); + + return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1; + } + + /** + * Finds a supported framework type if it exists and returns it + * + * @return string|false + */ + protected function findFrameworkType(string $type) + { + krsort($this->supportedTypes); + + foreach ($this->supportedTypes as $key => $val) { + if ($key === substr($type, 0, strlen($key))) { + return substr($type, 0, strlen($key)); + } + } + + return false; + } + + /** + * Get the second part of the regular expression to check for support of a + * package type + */ + protected function getLocationPattern(string $frameworkType): string + { + $pattern = null; + if (!empty($this->supportedTypes[$frameworkType])) { + $frameworkClass = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; + /** @var BaseInstaller $framework */ + $framework = new $frameworkClass(new Package('dummy/pkg', '1.0.0.0', '1.0.0'), $this->composer, $this->getIO()); + $locations = array_keys($framework->getLocations($frameworkType)); + if ($locations) { + $pattern = '(' . implode('|', $locations) . ')'; + } + } + + return $pattern ?: '(\w+)'; + } + + private function getIO(): IOInterface + { + return $this->io; + } + + /** + * Look for installers set to be disabled in composer's extra config and + * remove them from the list of supported installers. + * + * Globals: + * - true, "all", and "*" - disable all installers. + * - false - enable all installers (useful with + * wikimedia/composer-merge-plugin or similar) + */ + protected function removeDisabledInstallers(): void + { + $extra = $this->composer->getPackage()->getExtra(); + + if (!isset($extra['installer-disable']) || $extra['installer-disable'] === false) { + // No installers are disabled + return; + } + + // Get installers to disable + $disable = $extra['installer-disable']; + + // Ensure $disabled is an array + if (!is_array($disable)) { + $disable = array($disable); + } + + // Check which installers should be disabled + $all = array(true, "all", "*"); + $intersect = array_intersect($all, $disable); + if (!empty($intersect)) { + // Disable all installers + $this->supportedTypes = array(); + return; + } + + // Disable specified installers + foreach ($disable as $key => $installer) { + if (is_string($installer) && key_exists($installer, $this->supportedTypes)) { + unset($this->supportedTypes[$installer]); + } + } + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php new file mode 100644 index 000000000..06af06870 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'extension' => 'extensions/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php new file mode 100644 index 000000000..bca954b28 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php @@ -0,0 +1,20 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php new file mode 100644 index 000000000..61910a86b --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'plugin' => 'IdnoPlugins/{$name}/', + 'theme' => 'Themes/{$name}/', + 'console' => 'ConsolePlugins/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php new file mode 100644 index 000000000..2505ac688 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'plugin' => 'cms/plugins/{$name}/', + 'media' => 'cms/media/vendor/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php new file mode 100644 index 000000000..b6aa8097c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php new file mode 100644 index 000000000..7fe9d9b79 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php @@ -0,0 +1,27 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + 'template' => 'templates/{$name}/', + 'document-template' => 'documents/templates/{$name}/', + 'userpanel-module' => 'userpanel/modules/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php new file mode 100644 index 000000000..a69dc8890 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'library' => 'libraries/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php new file mode 100644 index 000000000..e4a7c7da8 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'package' => 'packages/{$vendor}/{$name}/', + 'theme' => 'public/themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php new file mode 100644 index 000000000..b24bea20c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'library' => 'libraries/{$name}/', + 'source' => 'libraries/_source/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php new file mode 100644 index 000000000..369e8b45c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php new file mode 100644 index 000000000..062a839ba --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php @@ -0,0 +1,18 @@ + */ + protected $locations = array( + 'snippet' => 'assets/snippets/{$name}/', + 'plugin' => 'assets/plugins/{$name}/', + 'module' => 'assets/modules/{$name}/', + 'template' => 'assets/templates/{$name}/', + 'lib' => 'assets/lib/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php new file mode 100644 index 000000000..ec07cd64e --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'theme' => 'app/design/frontend/{$name}/', + 'skin' => 'skin/frontend/default/{$name}/', + 'library' => 'lib/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php new file mode 100644 index 000000000..6fc3089d2 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php @@ -0,0 +1,46 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Transforms the names + * + * @param array $vars + * @return array + */ + public function inflectPackageVars(array $vars): array + { + return $this->correctPluginName($vars); + } + + /** + * Change hyphenated names to camelcase + * + * @param array $vars + * @return array + */ + private function correctPluginName(array $vars): array + { + $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + + if (null === $camelCasedName) { + throw new \RuntimeException('Failed to run preg_replace_callback: '.preg_last_error()); + } + + $vars['name'] = ucfirst($camelCasedName); + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php new file mode 100644 index 000000000..cbe3760ba --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'package' => 'app/packages/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php new file mode 100644 index 000000000..98e230fb4 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php @@ -0,0 +1,25 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php new file mode 100644 index 000000000..57fdb0330 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php @@ -0,0 +1,28 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php new file mode 100644 index 000000000..e48c133b8 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php @@ -0,0 +1,43 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + 'theme' => 'themes/{$name}/', + 'core' => 'app/', + ); + + private function getDirectoryName(): string + { + $extra = $this->package->getExtra(); + if (!empty($extra['install-directory-name'])) { + return $extra['install-directory-name']; + } + + return $this->toCamelCase($this->package->getPrettyName()); + } + + private function toCamelCase(string $packageName): string + { + return str_replace(' ', '', ucwords(str_replace('-', ' ', basename($packageName)))); + } + + /** + * Format package name of mautic-plugins to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] == 'mautic-plugin' || $vars['type'] == 'mautic-theme') { + $directoryName = $this->getDirectoryName(); + $vars['name'] = $directoryName; + } + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php new file mode 100644 index 000000000..df486dacd --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php @@ -0,0 +1,38 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + ); + + /** + * Format package name. + * + * For package type maya-module, cut off a trailing '-module' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'maya-module') { + return $this->inflectModuleVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectModuleVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-module$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php new file mode 100644 index 000000000..8e9d7713e --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php @@ -0,0 +1,58 @@ + */ + protected $locations = array( + 'core' => 'core/', + 'extension' => 'extensions/{$name}/', + 'skin' => 'skins/{$name}/', + ); + + /** + * Format package name. + * + * For package type mediawiki-extension, cut off a trailing '-extension' if present and transform + * to CamelCase keeping existing uppercase chars. + * + * For package type mediawiki-skin, cut off a trailing '-skin' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'mediawiki-extension') { + return $this->inflectExtensionVars($vars); + } + + if ($vars['type'] === 'mediawiki-skin') { + return $this->inflectSkinVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectExtensionVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-extension$/', '', $vars['name']); + $vars['name'] = str_replace('-', ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectSkinVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-skin$/', '', $vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php new file mode 100644 index 000000000..025417798 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php new file mode 100644 index 000000000..a4d97ab0c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php @@ -0,0 +1,145 @@ + */ + protected $locations = array( + 'module' => 'userfiles/modules/{$install_item_dir}/', + 'module-skin' => 'userfiles/modules/{$install_item_dir}/templates/', + 'template' => 'userfiles/templates/{$install_item_dir}/', + 'element' => 'userfiles/elements/{$install_item_dir}/', + 'vendor' => 'vendor/{$install_item_dir}/', + 'components' => 'components/{$install_item_dir}/' + ); + + /** + * Format package name. + * + * For package type microweber-module, cut off a trailing '-module' if present + * + * For package type microweber-template, cut off a trailing '-template' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($this->package->getTargetDir() !== null && $this->package->getTargetDir() !== '') { + $vars['install_item_dir'] = $this->package->getTargetDir(); + } else { + $vars['install_item_dir'] = $vars['name']; + if ($vars['type'] === 'microweber-template') { + return $this->inflectTemplateVars($vars); + } + if ($vars['type'] === 'microweber-templates') { + return $this->inflectTemplatesVars($vars); + } + if ($vars['type'] === 'microweber-core') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-adapter') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-module') { + return $this->inflectModuleVars($vars); + } + if ($vars['type'] === 'microweber-modules') { + return $this->inflectModulesVars($vars); + } + if ($vars['type'] === 'microweber-skin') { + return $this->inflectSkinVars($vars); + } + if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') { + return $this->inflectElementVars($vars); + } + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectTemplateVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-template$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/template-$/', '', $vars['install_item_dir']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectTemplatesVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-templates$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/templates-$/', '', $vars['install_item_dir']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectCoreVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-providers$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/-provider$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/-adapter$/', '', $vars['install_item_dir']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectModuleVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-module$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/module-$/', '', $vars['install_item_dir']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectModulesVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-modules$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/modules-$/', '', $vars['install_item_dir']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectSkinVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-skin$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/skin-$/', '', $vars['install_item_dir']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectElementVars(array $vars): array + { + $vars['install_item_dir'] = $this->pregReplace('/-elements$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/elements-$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/-element$/', '', $vars['install_item_dir']); + $vars['install_item_dir'] = $this->pregReplace('/element-$/', '', $vars['install_item_dir']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php new file mode 100644 index 000000000..e2dddec5e --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php @@ -0,0 +1,14 @@ + */ + protected $locations = array( + 'extra' => 'core/packages/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php new file mode 100644 index 000000000..eb2b8acf6 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php @@ -0,0 +1,73 @@ + */ + protected $locations = array( + 'mod' => 'mod/{$name}/', + 'admin_report' => 'admin/report/{$name}/', + 'atto' => 'lib/editor/atto/plugins/{$name}/', + 'tool' => 'admin/tool/{$name}/', + 'assignment' => 'mod/assignment/type/{$name}/', + 'assignsubmission' => 'mod/assign/submission/{$name}/', + 'assignfeedback' => 'mod/assign/feedback/{$name}/', + 'antivirus' => 'lib/antivirus/{$name}/', + 'auth' => 'auth/{$name}/', + 'availability' => 'availability/condition/{$name}/', + 'block' => 'blocks/{$name}/', + 'booktool' => 'mod/book/tool/{$name}/', + 'cachestore' => 'cache/stores/{$name}/', + 'cachelock' => 'cache/locks/{$name}/', + 'calendartype' => 'calendar/type/{$name}/', + 'communication' => 'communication/provider/{$name}/', + 'customfield' => 'customfield/field/{$name}/', + 'fileconverter' => 'files/converter/{$name}/', + 'format' => 'course/format/{$name}/', + 'coursereport' => 'course/report/{$name}/', + 'contenttype' => 'contentbank/contenttype/{$name}/', + 'customcertelement' => 'mod/customcert/element/{$name}/', + 'datafield' => 'mod/data/field/{$name}/', + 'dataformat' => 'dataformat/{$name}/', + 'datapreset' => 'mod/data/preset/{$name}/', + 'editor' => 'lib/editor/{$name}/', + 'enrol' => 'enrol/{$name}/', + 'filter' => 'filter/{$name}/', + 'forumreport' => 'mod/forum/report/{$name}/', + 'gradeexport' => 'grade/export/{$name}/', + 'gradeimport' => 'grade/import/{$name}/', + 'gradereport' => 'grade/report/{$name}/', + 'gradingform' => 'grade/grading/form/{$name}/', + 'h5plib' => 'h5p/h5plib/{$name}/', + 'local' => 'local/{$name}/', + 'logstore' => 'admin/tool/log/store/{$name}/', + 'ltisource' => 'mod/lti/source/{$name}/', + 'ltiservice' => 'mod/lti/service/{$name}/', + 'media' => 'media/player/{$name}/', + 'message' => 'message/output/{$name}/', + 'mlbackend' => 'lib/mlbackend/{$name}/', + 'mnetservice' => 'mnet/service/{$name}/', + 'paygw' => 'payment/gateway/{$name}/', + 'plagiarism' => 'plagiarism/{$name}/', + 'portfolio' => 'portfolio/{$name}/', + 'qbank' => 'question/bank/{$name}/', + 'qbehaviour' => 'question/behaviour/{$name}/', + 'qformat' => 'question/format/{$name}/', + 'qtype' => 'question/type/{$name}/', + 'quizaccess' => 'mod/quiz/accessrule/{$name}/', + 'quiz' => 'mod/quiz/report/{$name}/', + 'report' => 'report/{$name}/', + 'repository' => 'repository/{$name}/', + 'scormreport' => 'mod/scorm/report/{$name}/', + 'search' => 'search/engine/{$name}/', + 'theme' => 'theme/{$name}/', + 'tiny' => 'lib/editor/tiny/plugins/{$name}/', + 'tinymce' => 'lib/editor/tinymce/plugins/{$name}/', + 'profilefield' => 'user/profile/field/{$name}/', + 'webservice' => 'webservice/{$name}/', + 'workshopallocation' => 'mod/workshop/allocation/{$name}/', + 'workshopeval' => 'mod/workshop/eval/{$name}/', + 'workshopform' => 'mod/workshop/form/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php new file mode 100644 index 000000000..524f17d87 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php @@ -0,0 +1,57 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + 'plugin' => 'plugins/{$vendor}/{$name}/', + 'theme' => 'themes/{$vendor}-{$name}/' + ); + + /** + * Format package name. + * + * For package type october-plugin, cut off a trailing '-plugin' if present. + * + * For package type october-theme, cut off a trailing '-theme' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'october-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'october-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectPluginVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^oc-|-plugin$/', '', $vars['name']); + $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^oc-|-theme$/', '', $vars['name']); + $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php new file mode 100644 index 000000000..fd20c1a86 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php @@ -0,0 +1,26 @@ + */ + protected $locations = array( + 'extension' => 'extensions/{$name}/', + 'theme' => 'extensions/themes/{$name}/', + 'translation' => 'extensions/translations/{$name}/', + ); + + /** + * Format package name to lower case and remove ".ontowiki" suffix + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($vars['name']); + $vars['name'] = $this->pregReplace('/.ontowiki$/', '', $vars['name']); + $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']); + $vars['name'] = $this->pregReplace('/-translation$/', '', $vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php new file mode 100644 index 000000000..e61d61f88 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php @@ -0,0 +1,14 @@ + */ + protected $locations = array( + 'plugin' => 'oc-content/plugins/{$name}/', + 'theme' => 'oc-content/themes/{$name}/', + 'language' => 'oc-content/languages/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php new file mode 100644 index 000000000..6e1e8624f --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php @@ -0,0 +1,49 @@ +.+)\/.+/'; + + /** @var array */ + protected $locations = array( + 'module' => 'modules/{$name}/', + 'theme' => 'application/views/{$name}/', + 'out' => 'out/{$name}/', + ); + + public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string + { + $installPath = parent::getInstallPath($package, $frameworkType); + $type = $this->package->getType(); + if ($type === 'oxid-module') { + $this->prepareVendorDirectory($installPath); + } + return $installPath; + } + + /** + * Makes sure there is a vendormetadata.php file inside + * the vendor folder if there is a vendor folder. + */ + protected function prepareVendorDirectory(string $installPath): void + { + $matches = ''; + $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches); + if (!$hasVendorDirectory) { + return; + } + + $vendorDirectory = $matches['vendor']; + $vendorPath = getcwd() . '/modules/' . $vendorDirectory; + if (!file_exists($vendorPath)) { + mkdir($vendorPath, 0755, true); + } + + $vendorMetaDataPath = $vendorPath . '/vendormetadata.php'; + touch($vendorMetaDataPath); + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php new file mode 100644 index 000000000..714c46797 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php new file mode 100644 index 000000000..439f61a03 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'script' => 'web/private/scripts/quicksilver/{$name}', + 'module' => 'web/private/scripts/quicksilver/{$name}', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php new file mode 100644 index 000000000..3c970e217 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'bundle' => 'bundles/{$name}/', + 'library' => 'libraries/{$name}/', + 'framework' => 'frameworks/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php new file mode 100644 index 000000000..d53ee4f6c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'extension' => 'ext/{$vendor}/{$name}/', + 'language' => 'language/{$name}/', + 'style' => 'styles/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php new file mode 100644 index 000000000..b2faf44a5 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php @@ -0,0 +1,28 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php new file mode 100644 index 000000000..0c063598a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php @@ -0,0 +1,28 @@ + */ + protected $locations = array( + 'plugin' => '{$name}/' + ); + + /** + * Remove hyphen, "plugin" and format to camelcase + */ + public function inflectPackageVars(array $vars): array + { + $nameBits = explode("-", $vars['name']); + foreach ($nameBits as $key => $name) { + $nameBits[$key] = ucfirst($name); + if (strcasecmp($name, "Plugin") == 0) { + unset($nameBits[$key]); + } + } + $vars['name'] = implode('', $nameBits); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Plugin.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Plugin.php new file mode 100644 index 000000000..437a9493a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Plugin.php @@ -0,0 +1,28 @@ +installer = new Installer($io, $composer); + $composer->getInstallationManager()->addInstaller($this->installer); + } + + public function deactivate(Composer $composer, IOInterface $io): void + { + $composer->getInstallationManager()->removeInstaller($this->installer); + } + + public function uninstall(Composer $composer, IOInterface $io): void + { + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php new file mode 100644 index 000000000..a01d7a0be --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'container' => 'app/Containers/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php new file mode 100644 index 000000000..23f156f53 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php new file mode 100644 index 000000000..a7eb1eec6 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php @@ -0,0 +1,23 @@ + */ + protected $locations = array( + 'module' => 'site/modules/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php new file mode 100644 index 000000000..1a0a8a3fe --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php new file mode 100644 index 000000000..fc58b8a6d --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php @@ -0,0 +1,62 @@ + */ + protected $locations = array( + 'module' => 'app/Modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Format package name. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'pxcms-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'pxcms-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * For package type pxcms-module, cut off a trailing '-plugin' if present. + * + * @param array $vars + * @return array + */ + protected function inflectModuleVars(array $vars): array + { + $vars['name'] = str_replace('pxcms-', '', $vars['name']); // strip out pxcms- just incase (legacy) + $vars['name'] = str_replace('module-', '', $vars['name']); // strip out module- + $vars['name'] = $this->pregReplace('/-module$/', '', $vars['name']); // strip out -module + $vars['name'] = str_replace('-', '_', $vars['name']); // make -'s be _'s + $vars['name'] = ucwords($vars['name']); // make module name camelcased + + return $vars; + } + + /** + * For package type pxcms-module, cut off a trailing '-plugin' if present. + * + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = str_replace('pxcms-', '', $vars['name']); // strip out pxcms- just incase (legacy) + $vars['name'] = str_replace('theme-', '', $vars['name']); // strip out theme- + $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']); // strip out -theme + $vars['name'] = str_replace('-', '_', $vars['name']); // make -'s be _'s + $vars['name'] = ucwords($vars['name']); // make module name camelcased + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php new file mode 100644 index 000000000..4caae51d9 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php @@ -0,0 +1,26 @@ + */ + protected $locations = array( + 'bundle' => 'src/{$name}/' + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php new file mode 100644 index 000000000..a19eaaf29 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'theme' => 'themes/{$name}/', + 'plugin' => 'plugins/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php new file mode 100644 index 000000000..b62c926a3 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'addon' => 'redaxo/src/addons/{$name}/', + 'bestyle-plugin' => 'redaxo/src/addons/be_style/plugins/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php new file mode 100644 index 000000000..26b3aa84a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'addon' => 'redaxo/include/addons/{$name}/', + 'bestyle-plugin' => 'redaxo/include/addons/be_style/plugins/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php new file mode 100644 index 000000000..7e7167485 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php @@ -0,0 +1,21 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Lowercase name and changes the name to a underscores + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower(str_replace('-', '_', $vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php new file mode 100644 index 000000000..7321046f1 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'module' => 'Sources/{$name}/', + 'theme' => 'Themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php new file mode 100644 index 000000000..82b8e28c7 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php @@ -0,0 +1,66 @@ + */ + protected $locations = array( + 'backend-plugin' => 'engine/Shopware/Plugins/Local/Backend/{$name}/', + 'core-plugin' => 'engine/Shopware/Plugins/Local/Core/{$name}/', + 'frontend-plugin' => 'engine/Shopware/Plugins/Local/Frontend/{$name}/', + 'theme' => 'templates/{$name}/', + 'plugin' => 'custom/plugins/{$name}/', + 'frontend-theme' => 'themes/Frontend/{$name}/', + ); + + /** + * Transforms the names + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'shopware-theme') { + return $this->correctThemeName($vars); + } + + return $this->correctPluginName($vars); + } + + /** + * Changes the name to a camelcased combination of vendor and name + * + * @param array $vars + * @return array + */ + private function correctPluginName(array $vars): array + { + $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + + if (null === $camelCasedName) { + throw new \RuntimeException('Failed to run preg_replace_callback: '.preg_last_error()); + } + + $vars['name'] = ucfirst($vars['vendor']) . ucfirst($camelCasedName); + + return $vars; + } + + /** + * Changes the name to a underscore separated name + * + * @param array $vars + * @return array + */ + private function correctThemeName(array $vars): array + { + $vars['name'] = str_replace('-', '_', $vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php new file mode 100644 index 000000000..aa2de2163 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php @@ -0,0 +1,33 @@ + */ + protected $locations = array( + 'module' => '{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Return the install path based on package type. + * + * Relies on built-in BaseInstaller behaviour with one exception: silverstripe/framework + * must be installed to 'sapphire' and not 'framework' if the version is <3.0.0 + */ + public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string + { + if ( + $package->getName() == 'silverstripe/framework' + && preg_match('/^\d+\.\d+\.\d+/', $package->getVersion()) + && version_compare($package->getVersion(), '2.999.999') < 0 + ) { + return $this->templatePath($this->locations['module'], array('name' => 'sapphire')); + } + + return parent::getInstallPath($package, $frameworkType); + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php new file mode 100644 index 000000000..0af3239b4 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php @@ -0,0 +1,34 @@ + */ + protected $locations = array( + 'module' => 'modules/{$vendor}/{$name}/', + 'plugin' => 'plugins/{$vendor}/{$name}/' + ); + + /** + * @param array $vars + * @return array + */ + public function inflectPackageVars(array $vars): array + { + return $this->parseVars($vars); + } + + /** + * @param array $vars + * @return array + */ + protected function parseVars(array $vars): array + { + $vars['vendor'] = strtolower($vars['vendor']) == 'sitedirect' ? 'SiteDirect' : $vars['vendor']; + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php new file mode 100644 index 000000000..72afa081b --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php @@ -0,0 +1,14 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + 'custom-module' => 'app/modules/{$name}/', + 'custom-theme' => 'app/themes/{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php new file mode 100644 index 000000000..24673d2f7 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php @@ -0,0 +1,55 @@ + */ + protected $locations = array( + 'module' => 'app/modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Format module name. + * + * Strip `sydes-` prefix and a trailing '-theme' or '-module' from package name if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] == 'sydes-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'sydes-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + public function inflectModuleVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/(^sydes-|-module$)/i', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/(^sydes-|-theme$)/', '', $vars['name']); + $vars['name'] = strtolower($vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php new file mode 100644 index 000000000..c82bd8556 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'theme' => 'themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php new file mode 100644 index 000000000..8c1d81447 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php @@ -0,0 +1,32 @@ + */ + protected $locations = array( + 'extension' => '{$name}' + ); + + public function inflectPackageVars(array $vars): array + { + $extra = $this->package->getExtra(); + + if (array_key_exists(self::EXTRA_TAO_EXTENSION_NAME, $extra)) { + $vars['name'] = $extra[self::EXTRA_TAO_EXTENSION_NAME]; + return $vars; + } + + $vars['name'] = str_replace('extension-', '', $vars['name']); + $vars['name'] = str_replace('-', ' ', $vars['name']); + $vars['name'] = lcfirst(str_replace(' ', '', ucwords($vars['name']))); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php new file mode 100644 index 000000000..39ceae071 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php @@ -0,0 +1,85 @@ + */ + protected $locations = [ + 'module' => 'app/{$name}/', + 'extension' => 'extensions/{$vendor}/{$name}/', + 'theme' => 'themes/{$name}/', + ]; + + /** + * Format package name. + * + * Cut off leading 'ti-ext-' or 'ti-theme-' if present. + * Strip vendor name of characters that is not alphanumeric or an underscore + * + */ + public function inflectPackageVars(array $vars): array + { + $extra = $this->package->getExtra(); + + if ($vars['type'] === 'tastyigniter-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'tastyigniter-extension') { + return $this->inflectExtensionVars($vars, $extra); + } + + if ($vars['type'] === 'tastyigniter-theme') { + return $this->inflectThemeVars($vars, $extra); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectModuleVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^ti-module-/', '', $vars['name']); + + return $vars; + } + + /** + * @param array $vars + * @param array $extra + * @return array + */ + protected function inflectExtensionVars(array $vars, array $extra): array + { + if (!empty($extra['tastyigniter-extension']['code'])) { + $parts = explode('.', $extra['tastyigniter-extension']['code']); + $vars['vendor'] = (string)$parts[0]; + $vars['name'] = (string)($parts[1] ?? ''); + } + + $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']); + $vars['name'] = $this->pregReplace('/^ti-ext-/', '', $vars['name']); + + return $vars; + } + + /** + * @param array $vars + * @param array $extra + * @return array + */ + protected function inflectThemeVars(array $vars, array $extra): array + { + if (!empty($extra['tastyigniter-theme']['code'])) { + $vars['name'] = $extra['tastyigniter-theme']['code']; + } + + $vars['name'] = $this->pregReplace('/^ti-theme-/', '', $vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php new file mode 100644 index 000000000..896bed5c0 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php @@ -0,0 +1,14 @@ + */ + protected $locations = array( + 'module' => 'local/modules/{$name}/', + 'frontoffice-template' => 'templates/frontOffice/{$name}/', + 'backoffice-template' => 'templates/backOffice/{$name}/', + 'email-template' => 'templates/email/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php new file mode 100644 index 000000000..3b5f14249 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php @@ -0,0 +1,17 @@ + + */ +class TuskInstaller extends BaseInstaller +{ + /** @var array */ + protected $locations = array( + 'task' => '.tusk/tasks/{$name}/', + 'command' => '.tusk/commands/{$name}/', + 'asset' => 'assets/tusk/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php new file mode 100644 index 000000000..a646c5b2a --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'sprinkle' => 'app/sprinkles/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php new file mode 100644 index 000000000..06d5db3a4 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + 'theme' => 'themes/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php new file mode 100644 index 000000000..cf094dd59 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php @@ -0,0 +1,59 @@ + */ + protected $locations = array( + 'bundle' => 'src/{$vendor}/{$name}/', + 'theme' => 'themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type vgmcp-bundle, cut off a trailing '-bundle' if present. + * + * For package type vgmcp-theme, cut off a trailing '-theme' if present. + * + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'vgmcp-bundle') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'vgmcp-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectPluginVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-bundle$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php new file mode 100644 index 000000000..91b19fd03 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php @@ -0,0 +1,22 @@ + */ + protected $locations = array( + 'addons' => 'modules/addons/{$vendor}_{$name}/', + 'fraud' => 'modules/fraud/{$vendor}_{$name}/', + 'gateways' => 'modules/gateways/{$vendor}_{$name}/', + 'notifications' => 'modules/notifications/{$vendor}_{$name}/', + 'registrars' => 'modules/registrars/{$vendor}_{$name}/', + 'reports' => 'modules/reports/{$vendor}_{$name}/', + 'security' => 'modules/security/{$vendor}_{$name}/', + 'servers' => 'modules/servers/{$vendor}_{$name}/', + 'social' => 'modules/social/{$vendor}_{$name}/', + 'support' => 'modules/support/{$vendor}_{$name}/', + 'templates' => 'templates/{$vendor}_{$name}/', + 'includes' => 'includes/{$vendor}_{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WinterInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WinterInstaller.php new file mode 100644 index 000000000..f75a6817c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WinterInstaller.php @@ -0,0 +1,71 @@ + */ + protected $locations = array( + 'module' => 'modules/{$name}/', + 'plugin' => 'plugins/{$vendor}/{$name}/', + 'theme' => 'themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type winter-plugin, cut off a trailing '-plugin' if present. + * + * For package type winter-theme, cut off a trailing '-theme' if present. + */ + public function inflectPackageVars(array $vars): array + { + if ($vars['type'] === 'winter-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'winter-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'winter-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectModuleVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^wn-|-module$/', '', $vars['name']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectPluginVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^wn-|-plugin$/', '', $vars['name']); + $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']); + + return $vars; + } + + /** + * @param array $vars + * @return array + */ + protected function inflectThemeVars(array $vars): array + { + $vars['name'] = $this->pregReplace('/^wn-|-theme$/', '', $vars['name']); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php new file mode 100644 index 000000000..58a958791 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php @@ -0,0 +1,11 @@ + */ + protected $locations = array( + 'plugin' => 'wolf/plugins/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php new file mode 100644 index 000000000..d46d5ab8e --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php @@ -0,0 +1,14 @@ + */ + protected $locations = array( + 'plugin' => 'wp-content/plugins/{$name}/', + 'theme' => 'wp-content/themes/{$name}/', + 'muplugin' => 'wp-content/mu-plugins/{$name}/', + 'dropin' => 'wp-content/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php new file mode 100644 index 000000000..d609dea50 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php @@ -0,0 +1,23 @@ + */ + protected $locations = array( + 'module' => 'module/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars(array $vars): array + { + $vars['name'] = strtolower($this->pregReplace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php new file mode 100644 index 000000000..ccfcd4a0c --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php @@ -0,0 +1,13 @@ + */ + protected $locations = array( + 'library' => 'library/{$name}/', + 'extra' => 'extras/library/{$name}/', + 'module' => 'module/{$name}/', + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php new file mode 100644 index 000000000..d1fd1d789 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php @@ -0,0 +1,12 @@ + */ + protected $locations = array( + 'module' => 'modules/{$vendor}-{$name}/', + 'theme' => 'themes/{$vendor}-{$name}/' + ); +} diff --git a/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/bootstrap.php b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/bootstrap.php new file mode 100644 index 000000000..a5bb9add4 --- /dev/null +++ b/wp-content/plugins/simple-local-avatars/vendor/composer/installers/src/bootstrap.php @@ -0,0 +1,18 @@ += 70400)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + throw new \RuntimeException( + 'Composer detected issues in your platform: ' . implode(' ', $issues) + ); +} diff --git a/wp-content/uploads/2025/09/image-1-1024x683.png b/wp-content/uploads/2025/09/image-1-1024x683.png new file mode 100644 index 000000000..4654d7d4a Binary files /dev/null and b/wp-content/uploads/2025/09/image-1-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-1-150x150.png b/wp-content/uploads/2025/09/image-1-150x150.png new file mode 100644 index 000000000..7ef40786d Binary files /dev/null and b/wp-content/uploads/2025/09/image-1-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-1-300x200.png b/wp-content/uploads/2025/09/image-1-300x200.png new file mode 100644 index 000000000..4d32438e6 Binary files /dev/null and b/wp-content/uploads/2025/09/image-1-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-1-768x512.png b/wp-content/uploads/2025/09/image-1-768x512.png new file mode 100644 index 000000000..4fdaa05e9 Binary files /dev/null and b/wp-content/uploads/2025/09/image-1-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-1.png b/wp-content/uploads/2025/09/image-1.png new file mode 100644 index 000000000..19f62c0fc Binary files /dev/null and b/wp-content/uploads/2025/09/image-1.png differ diff --git a/wp-content/uploads/2025/09/image-10-1024x683.png b/wp-content/uploads/2025/09/image-10-1024x683.png new file mode 100644 index 000000000..68b10ca7f Binary files /dev/null and b/wp-content/uploads/2025/09/image-10-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-10-150x150.png b/wp-content/uploads/2025/09/image-10-150x150.png new file mode 100644 index 000000000..6d48b7d8b Binary files /dev/null and b/wp-content/uploads/2025/09/image-10-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-10-300x200.png b/wp-content/uploads/2025/09/image-10-300x200.png new file mode 100644 index 000000000..19ac6e3a2 Binary files /dev/null and b/wp-content/uploads/2025/09/image-10-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-10-768x512.png b/wp-content/uploads/2025/09/image-10-768x512.png new file mode 100644 index 000000000..f56280ffb Binary files /dev/null and b/wp-content/uploads/2025/09/image-10-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-10.png b/wp-content/uploads/2025/09/image-10.png new file mode 100644 index 000000000..b2b2fadb9 Binary files /dev/null and b/wp-content/uploads/2025/09/image-10.png differ diff --git a/wp-content/uploads/2025/09/image-1024x946.png b/wp-content/uploads/2025/09/image-1024x946.png new file mode 100644 index 000000000..83b45f339 Binary files /dev/null and b/wp-content/uploads/2025/09/image-1024x946.png differ diff --git a/wp-content/uploads/2025/09/image-11-150x150.png b/wp-content/uploads/2025/09/image-11-150x150.png new file mode 100644 index 000000000..8cb0838db Binary files /dev/null and b/wp-content/uploads/2025/09/image-11-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-11-300x300.png b/wp-content/uploads/2025/09/image-11-300x300.png new file mode 100644 index 000000000..9f7c2f97f Binary files /dev/null and b/wp-content/uploads/2025/09/image-11-300x300.png differ diff --git a/wp-content/uploads/2025/09/image-11-768x768.png b/wp-content/uploads/2025/09/image-11-768x768.png new file mode 100644 index 000000000..b4d102113 Binary files /dev/null and b/wp-content/uploads/2025/09/image-11-768x768.png differ diff --git a/wp-content/uploads/2025/09/image-11.png b/wp-content/uploads/2025/09/image-11.png new file mode 100644 index 000000000..5d2336f0f Binary files /dev/null and b/wp-content/uploads/2025/09/image-11.png differ diff --git a/wp-content/uploads/2025/09/image-12-150x150.png b/wp-content/uploads/2025/09/image-12-150x150.png new file mode 100644 index 000000000..41fc9ad02 Binary files /dev/null and b/wp-content/uploads/2025/09/image-12-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-12-300x300.png b/wp-content/uploads/2025/09/image-12-300x300.png new file mode 100644 index 000000000..ad9b4dac2 Binary files /dev/null and b/wp-content/uploads/2025/09/image-12-300x300.png differ diff --git a/wp-content/uploads/2025/09/image-12-768x768.png b/wp-content/uploads/2025/09/image-12-768x768.png new file mode 100644 index 000000000..8e61fcca6 Binary files /dev/null and b/wp-content/uploads/2025/09/image-12-768x768.png differ diff --git a/wp-content/uploads/2025/09/image-12.png b/wp-content/uploads/2025/09/image-12.png new file mode 100644 index 000000000..b37f2adba Binary files /dev/null and b/wp-content/uploads/2025/09/image-12.png differ diff --git a/wp-content/uploads/2025/09/image-150x150.png b/wp-content/uploads/2025/09/image-150x150.png new file mode 100644 index 000000000..dd6deee34 Binary files /dev/null and b/wp-content/uploads/2025/09/image-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-2-1024x683.png b/wp-content/uploads/2025/09/image-2-1024x683.png new file mode 100644 index 000000000..996242c10 Binary files /dev/null and b/wp-content/uploads/2025/09/image-2-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-2-150x150.png b/wp-content/uploads/2025/09/image-2-150x150.png new file mode 100644 index 000000000..6fabd178b Binary files /dev/null and b/wp-content/uploads/2025/09/image-2-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-2-300x200.png b/wp-content/uploads/2025/09/image-2-300x200.png new file mode 100644 index 000000000..7ab3826be Binary files /dev/null and b/wp-content/uploads/2025/09/image-2-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-2-768x512.png b/wp-content/uploads/2025/09/image-2-768x512.png new file mode 100644 index 000000000..079286473 Binary files /dev/null and b/wp-content/uploads/2025/09/image-2-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-2.png b/wp-content/uploads/2025/09/image-2.png new file mode 100644 index 000000000..559348b89 Binary files /dev/null and b/wp-content/uploads/2025/09/image-2.png differ diff --git a/wp-content/uploads/2025/09/image-3-1024x683.png b/wp-content/uploads/2025/09/image-3-1024x683.png new file mode 100644 index 000000000..d052198e8 Binary files /dev/null and b/wp-content/uploads/2025/09/image-3-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-3-150x150.png b/wp-content/uploads/2025/09/image-3-150x150.png new file mode 100644 index 000000000..d5578c861 Binary files /dev/null and b/wp-content/uploads/2025/09/image-3-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-3-300x200.png b/wp-content/uploads/2025/09/image-3-300x200.png new file mode 100644 index 000000000..930d1f245 Binary files /dev/null and b/wp-content/uploads/2025/09/image-3-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-3-768x512.png b/wp-content/uploads/2025/09/image-3-768x512.png new file mode 100644 index 000000000..64ec78053 Binary files /dev/null and b/wp-content/uploads/2025/09/image-3-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-3.png b/wp-content/uploads/2025/09/image-3.png new file mode 100644 index 000000000..23d56548a Binary files /dev/null and b/wp-content/uploads/2025/09/image-3.png differ diff --git a/wp-content/uploads/2025/09/image-300x277.png b/wp-content/uploads/2025/09/image-300x277.png new file mode 100644 index 000000000..e85505e67 Binary files /dev/null and b/wp-content/uploads/2025/09/image-300x277.png differ diff --git a/wp-content/uploads/2025/09/image-4-1024x683.png b/wp-content/uploads/2025/09/image-4-1024x683.png new file mode 100644 index 000000000..3d0bbd357 Binary files /dev/null and b/wp-content/uploads/2025/09/image-4-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-4-150x150.png b/wp-content/uploads/2025/09/image-4-150x150.png new file mode 100644 index 000000000..9537cd201 Binary files /dev/null and b/wp-content/uploads/2025/09/image-4-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-4-300x200.png b/wp-content/uploads/2025/09/image-4-300x200.png new file mode 100644 index 000000000..23759f228 Binary files /dev/null and b/wp-content/uploads/2025/09/image-4-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-4-768x512.png b/wp-content/uploads/2025/09/image-4-768x512.png new file mode 100644 index 000000000..804bee604 Binary files /dev/null and b/wp-content/uploads/2025/09/image-4-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-4.png b/wp-content/uploads/2025/09/image-4.png new file mode 100644 index 000000000..b45458511 Binary files /dev/null and b/wp-content/uploads/2025/09/image-4.png differ diff --git a/wp-content/uploads/2025/09/image-5-150x150.png b/wp-content/uploads/2025/09/image-5-150x150.png new file mode 100644 index 000000000..b35eb66f7 Binary files /dev/null and b/wp-content/uploads/2025/09/image-5-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-5-300x300.png b/wp-content/uploads/2025/09/image-5-300x300.png new file mode 100644 index 000000000..ae135ac38 Binary files /dev/null and b/wp-content/uploads/2025/09/image-5-300x300.png differ diff --git a/wp-content/uploads/2025/09/image-5-768x768.png b/wp-content/uploads/2025/09/image-5-768x768.png new file mode 100644 index 000000000..bc113c0cc Binary files /dev/null and b/wp-content/uploads/2025/09/image-5-768x768.png differ diff --git a/wp-content/uploads/2025/09/image-5.png b/wp-content/uploads/2025/09/image-5.png new file mode 100644 index 000000000..1eb5cc67e Binary files /dev/null and b/wp-content/uploads/2025/09/image-5.png differ diff --git a/wp-content/uploads/2025/09/image-6-1024x683.png b/wp-content/uploads/2025/09/image-6-1024x683.png new file mode 100644 index 000000000..826aea7b9 Binary files /dev/null and b/wp-content/uploads/2025/09/image-6-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-6-150x150.png b/wp-content/uploads/2025/09/image-6-150x150.png new file mode 100644 index 000000000..e79c33e3a Binary files /dev/null and b/wp-content/uploads/2025/09/image-6-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-6-300x200.png b/wp-content/uploads/2025/09/image-6-300x200.png new file mode 100644 index 000000000..7e6803fda Binary files /dev/null and b/wp-content/uploads/2025/09/image-6-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-6-768x512.png b/wp-content/uploads/2025/09/image-6-768x512.png new file mode 100644 index 000000000..5a570b983 Binary files /dev/null and b/wp-content/uploads/2025/09/image-6-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-6.png b/wp-content/uploads/2025/09/image-6.png new file mode 100644 index 000000000..8292efebd Binary files /dev/null and b/wp-content/uploads/2025/09/image-6.png differ diff --git a/wp-content/uploads/2025/09/image-7-150x150.png b/wp-content/uploads/2025/09/image-7-150x150.png new file mode 100644 index 000000000..112f26d18 Binary files /dev/null and b/wp-content/uploads/2025/09/image-7-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-7-188x300.png b/wp-content/uploads/2025/09/image-7-188x300.png new file mode 100644 index 000000000..f70f02e72 Binary files /dev/null and b/wp-content/uploads/2025/09/image-7-188x300.png differ diff --git a/wp-content/uploads/2025/09/image-7-641x1024.png b/wp-content/uploads/2025/09/image-7-641x1024.png new file mode 100644 index 000000000..54cfa3ea0 Binary files /dev/null and b/wp-content/uploads/2025/09/image-7-641x1024.png differ diff --git a/wp-content/uploads/2025/09/image-7-768x1228.png b/wp-content/uploads/2025/09/image-7-768x1228.png new file mode 100644 index 000000000..b01df7378 Binary files /dev/null and b/wp-content/uploads/2025/09/image-7-768x1228.png differ diff --git a/wp-content/uploads/2025/09/image-7.png b/wp-content/uploads/2025/09/image-7.png new file mode 100644 index 000000000..af3ee1bf2 Binary files /dev/null and b/wp-content/uploads/2025/09/image-7.png differ diff --git a/wp-content/uploads/2025/09/image-768x710.png b/wp-content/uploads/2025/09/image-768x710.png new file mode 100644 index 000000000..069b3a596 Binary files /dev/null and b/wp-content/uploads/2025/09/image-768x710.png differ diff --git a/wp-content/uploads/2025/09/image-8-1024x683.png b/wp-content/uploads/2025/09/image-8-1024x683.png new file mode 100644 index 000000000..925e91395 Binary files /dev/null and b/wp-content/uploads/2025/09/image-8-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-8-150x150.png b/wp-content/uploads/2025/09/image-8-150x150.png new file mode 100644 index 000000000..a8b207b3f Binary files /dev/null and b/wp-content/uploads/2025/09/image-8-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-8-300x200.png b/wp-content/uploads/2025/09/image-8-300x200.png new file mode 100644 index 000000000..98921974d Binary files /dev/null and b/wp-content/uploads/2025/09/image-8-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-8-768x512.png b/wp-content/uploads/2025/09/image-8-768x512.png new file mode 100644 index 000000000..bbf51f97c Binary files /dev/null and b/wp-content/uploads/2025/09/image-8-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-8.png b/wp-content/uploads/2025/09/image-8.png new file mode 100644 index 000000000..9d670e150 Binary files /dev/null and b/wp-content/uploads/2025/09/image-8.png differ diff --git a/wp-content/uploads/2025/09/image-9-1024x683.png b/wp-content/uploads/2025/09/image-9-1024x683.png new file mode 100644 index 000000000..7987208b3 Binary files /dev/null and b/wp-content/uploads/2025/09/image-9-1024x683.png differ diff --git a/wp-content/uploads/2025/09/image-9-150x150.png b/wp-content/uploads/2025/09/image-9-150x150.png new file mode 100644 index 000000000..dbcc43237 Binary files /dev/null and b/wp-content/uploads/2025/09/image-9-150x150.png differ diff --git a/wp-content/uploads/2025/09/image-9-300x200.png b/wp-content/uploads/2025/09/image-9-300x200.png new file mode 100644 index 000000000..08c042485 Binary files /dev/null and b/wp-content/uploads/2025/09/image-9-300x200.png differ diff --git a/wp-content/uploads/2025/09/image-9-768x512.png b/wp-content/uploads/2025/09/image-9-768x512.png new file mode 100644 index 000000000..a2dea7248 Binary files /dev/null and b/wp-content/uploads/2025/09/image-9-768x512.png differ diff --git a/wp-content/uploads/2025/09/image-9.png b/wp-content/uploads/2025/09/image-9.png new file mode 100644 index 000000000..b029a3ed9 Binary files /dev/null and b/wp-content/uploads/2025/09/image-9.png differ diff --git a/wp-content/uploads/2025/09/image.png b/wp-content/uploads/2025/09/image.png new file mode 100644 index 000000000..2fad0d51f Binary files /dev/null and b/wp-content/uploads/2025/09/image.png differ diff --git a/wp-content/uploads/2025/10/JL-Israhell.mp4 b/wp-content/uploads/2025/10/JL-Israhell.mp4 new file mode 100644 index 000000000..892de63da Binary files /dev/null and b/wp-content/uploads/2025/10/JL-Israhell.mp4 differ diff --git a/wp-content/uploads/2025/10/image-1-1024x683.png b/wp-content/uploads/2025/10/image-1-1024x683.png new file mode 100644 index 000000000..f074a7c27 Binary files /dev/null and b/wp-content/uploads/2025/10/image-1-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-1-150x150.png b/wp-content/uploads/2025/10/image-1-150x150.png new file mode 100644 index 000000000..9f3804d5d Binary files /dev/null and b/wp-content/uploads/2025/10/image-1-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-1-300x200.png b/wp-content/uploads/2025/10/image-1-300x200.png new file mode 100644 index 000000000..78b1ae356 Binary files /dev/null and b/wp-content/uploads/2025/10/image-1-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-1-768x512.png b/wp-content/uploads/2025/10/image-1-768x512.png new file mode 100644 index 000000000..ca409edf1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-1-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-1.png b/wp-content/uploads/2025/10/image-1.png new file mode 100644 index 000000000..3ccffe837 Binary files /dev/null and b/wp-content/uploads/2025/10/image-1.png differ diff --git a/wp-content/uploads/2025/10/image-10-150x150.png b/wp-content/uploads/2025/10/image-10-150x150.png new file mode 100644 index 000000000..c00692627 Binary files /dev/null and b/wp-content/uploads/2025/10/image-10-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-10-249x300.png b/wp-content/uploads/2025/10/image-10-249x300.png new file mode 100644 index 000000000..ebf3b23f7 Binary files /dev/null and b/wp-content/uploads/2025/10/image-10-249x300.png differ diff --git a/wp-content/uploads/2025/10/image-10-768x925.png b/wp-content/uploads/2025/10/image-10-768x925.png new file mode 100644 index 000000000..ac2ffc16a Binary files /dev/null and b/wp-content/uploads/2025/10/image-10-768x925.png differ diff --git a/wp-content/uploads/2025/10/image-10-850x1024.png b/wp-content/uploads/2025/10/image-10-850x1024.png new file mode 100644 index 000000000..09d950d56 Binary files /dev/null and b/wp-content/uploads/2025/10/image-10-850x1024.png differ diff --git a/wp-content/uploads/2025/10/image-10.png b/wp-content/uploads/2025/10/image-10.png new file mode 100644 index 000000000..d750edc55 Binary files /dev/null and b/wp-content/uploads/2025/10/image-10.png differ diff --git a/wp-content/uploads/2025/10/image-1024x683.png b/wp-content/uploads/2025/10/image-1024x683.png new file mode 100644 index 000000000..7731c6729 Binary files /dev/null and b/wp-content/uploads/2025/10/image-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-11-150x150.png b/wp-content/uploads/2025/10/image-11-150x150.png new file mode 100644 index 000000000..152690297 Binary files /dev/null and b/wp-content/uploads/2025/10/image-11-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-11-273x300.png b/wp-content/uploads/2025/10/image-11-273x300.png new file mode 100644 index 000000000..820c3d013 Binary files /dev/null and b/wp-content/uploads/2025/10/image-11-273x300.png differ diff --git a/wp-content/uploads/2025/10/image-11.png b/wp-content/uploads/2025/10/image-11.png new file mode 100644 index 000000000..4e65b74b2 Binary files /dev/null and b/wp-content/uploads/2025/10/image-11.png differ diff --git a/wp-content/uploads/2025/10/image-12-150x150.png b/wp-content/uploads/2025/10/image-12-150x150.png new file mode 100644 index 000000000..b4b2796d1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-12-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-12-257x300.png b/wp-content/uploads/2025/10/image-12-257x300.png new file mode 100644 index 000000000..d8a6eb27b Binary files /dev/null and b/wp-content/uploads/2025/10/image-12-257x300.png differ diff --git a/wp-content/uploads/2025/10/image-12.png b/wp-content/uploads/2025/10/image-12.png new file mode 100644 index 000000000..a66c663dc Binary files /dev/null and b/wp-content/uploads/2025/10/image-12.png differ diff --git a/wp-content/uploads/2025/10/image-13-150x150.png b/wp-content/uploads/2025/10/image-13-150x150.png new file mode 100644 index 000000000..f63bbc58f Binary files /dev/null and b/wp-content/uploads/2025/10/image-13-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-13-300x295.png b/wp-content/uploads/2025/10/image-13-300x295.png new file mode 100644 index 000000000..63684b68a Binary files /dev/null and b/wp-content/uploads/2025/10/image-13-300x295.png differ diff --git a/wp-content/uploads/2025/10/image-13.png b/wp-content/uploads/2025/10/image-13.png new file mode 100644 index 000000000..d5af4aa6a Binary files /dev/null and b/wp-content/uploads/2025/10/image-13.png differ diff --git a/wp-content/uploads/2025/10/image-14-150x150.png b/wp-content/uploads/2025/10/image-14-150x150.png new file mode 100644 index 000000000..c0c6d1919 Binary files /dev/null and b/wp-content/uploads/2025/10/image-14-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-14-300x223.png b/wp-content/uploads/2025/10/image-14-300x223.png new file mode 100644 index 000000000..57b20509d Binary files /dev/null and b/wp-content/uploads/2025/10/image-14-300x223.png differ diff --git a/wp-content/uploads/2025/10/image-14-768x572.png b/wp-content/uploads/2025/10/image-14-768x572.png new file mode 100644 index 000000000..59e119907 Binary files /dev/null and b/wp-content/uploads/2025/10/image-14-768x572.png differ diff --git a/wp-content/uploads/2025/10/image-14.png b/wp-content/uploads/2025/10/image-14.png new file mode 100644 index 000000000..68debb19f Binary files /dev/null and b/wp-content/uploads/2025/10/image-14.png differ diff --git a/wp-content/uploads/2025/10/image-15-150x150.png b/wp-content/uploads/2025/10/image-15-150x150.png new file mode 100644 index 000000000..c5f311280 Binary files /dev/null and b/wp-content/uploads/2025/10/image-15-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-15-300x241.png b/wp-content/uploads/2025/10/image-15-300x241.png new file mode 100644 index 000000000..76f349231 Binary files /dev/null and b/wp-content/uploads/2025/10/image-15-300x241.png differ diff --git a/wp-content/uploads/2025/10/image-15.png b/wp-content/uploads/2025/10/image-15.png new file mode 100644 index 000000000..eaaacd8e4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-15.png differ diff --git a/wp-content/uploads/2025/10/image-150x150.png b/wp-content/uploads/2025/10/image-150x150.png new file mode 100644 index 000000000..d2f9f5a94 Binary files /dev/null and b/wp-content/uploads/2025/10/image-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-16-1024x945.png b/wp-content/uploads/2025/10/image-16-1024x945.png new file mode 100644 index 000000000..d5298823c Binary files /dev/null and b/wp-content/uploads/2025/10/image-16-1024x945.png differ diff --git a/wp-content/uploads/2025/10/image-16-150x150.png b/wp-content/uploads/2025/10/image-16-150x150.png new file mode 100644 index 000000000..36e528898 Binary files /dev/null and b/wp-content/uploads/2025/10/image-16-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-16-300x277.png b/wp-content/uploads/2025/10/image-16-300x277.png new file mode 100644 index 000000000..e00f4994c Binary files /dev/null and b/wp-content/uploads/2025/10/image-16-300x277.png differ diff --git a/wp-content/uploads/2025/10/image-16-768x709.png b/wp-content/uploads/2025/10/image-16-768x709.png new file mode 100644 index 000000000..ab0a3198f Binary files /dev/null and b/wp-content/uploads/2025/10/image-16-768x709.png differ diff --git a/wp-content/uploads/2025/10/image-16.png b/wp-content/uploads/2025/10/image-16.png new file mode 100644 index 000000000..f7c8bebcd Binary files /dev/null and b/wp-content/uploads/2025/10/image-16.png differ diff --git a/wp-content/uploads/2025/10/image-17-1111x1536.png b/wp-content/uploads/2025/10/image-17-1111x1536.png new file mode 100644 index 000000000..e73b27cdd Binary files /dev/null and b/wp-content/uploads/2025/10/image-17-1111x1536.png differ diff --git a/wp-content/uploads/2025/10/image-17-150x150.png b/wp-content/uploads/2025/10/image-17-150x150.png new file mode 100644 index 000000000..5fbb7f151 Binary files /dev/null and b/wp-content/uploads/2025/10/image-17-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-17-217x300.png b/wp-content/uploads/2025/10/image-17-217x300.png new file mode 100644 index 000000000..b0aaf9c9a Binary files /dev/null and b/wp-content/uploads/2025/10/image-17-217x300.png differ diff --git a/wp-content/uploads/2025/10/image-17-741x1024.png b/wp-content/uploads/2025/10/image-17-741x1024.png new file mode 100644 index 000000000..a78927f67 Binary files /dev/null and b/wp-content/uploads/2025/10/image-17-741x1024.png differ diff --git a/wp-content/uploads/2025/10/image-17-768x1062.png b/wp-content/uploads/2025/10/image-17-768x1062.png new file mode 100644 index 000000000..0b8f97711 Binary files /dev/null and b/wp-content/uploads/2025/10/image-17-768x1062.png differ diff --git a/wp-content/uploads/2025/10/image-17.png b/wp-content/uploads/2025/10/image-17.png new file mode 100644 index 000000000..50957114c Binary files /dev/null and b/wp-content/uploads/2025/10/image-17.png differ diff --git a/wp-content/uploads/2025/10/image-18-150x150.png b/wp-content/uploads/2025/10/image-18-150x150.png new file mode 100644 index 000000000..a2a04f22a Binary files /dev/null and b/wp-content/uploads/2025/10/image-18-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-18-300x81.png b/wp-content/uploads/2025/10/image-18-300x81.png new file mode 100644 index 000000000..e11484e9d Binary files /dev/null and b/wp-content/uploads/2025/10/image-18-300x81.png differ diff --git a/wp-content/uploads/2025/10/image-18.png b/wp-content/uploads/2025/10/image-18.png new file mode 100644 index 000000000..8fd3171e6 Binary files /dev/null and b/wp-content/uploads/2025/10/image-18.png differ diff --git a/wp-content/uploads/2025/10/image-19-1024x683.png b/wp-content/uploads/2025/10/image-19-1024x683.png new file mode 100644 index 000000000..f9f50bd08 Binary files /dev/null and b/wp-content/uploads/2025/10/image-19-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-19-150x150.png b/wp-content/uploads/2025/10/image-19-150x150.png new file mode 100644 index 000000000..be1ae577e Binary files /dev/null and b/wp-content/uploads/2025/10/image-19-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-19-300x200.png b/wp-content/uploads/2025/10/image-19-300x200.png new file mode 100644 index 000000000..b483d64f4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-19-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-19-768x512.png b/wp-content/uploads/2025/10/image-19-768x512.png new file mode 100644 index 000000000..9b46c19cf Binary files /dev/null and b/wp-content/uploads/2025/10/image-19-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-19.png b/wp-content/uploads/2025/10/image-19.png new file mode 100644 index 000000000..572c86ac3 Binary files /dev/null and b/wp-content/uploads/2025/10/image-19.png differ diff --git a/wp-content/uploads/2025/10/image-2-1024x683.png b/wp-content/uploads/2025/10/image-2-1024x683.png new file mode 100644 index 000000000..04500d663 Binary files /dev/null and b/wp-content/uploads/2025/10/image-2-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-2-150x150.png b/wp-content/uploads/2025/10/image-2-150x150.png new file mode 100644 index 000000000..46d188f4a Binary files /dev/null and b/wp-content/uploads/2025/10/image-2-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-2-300x200.png b/wp-content/uploads/2025/10/image-2-300x200.png new file mode 100644 index 000000000..1ee67b0c9 Binary files /dev/null and b/wp-content/uploads/2025/10/image-2-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-2-768x512.png b/wp-content/uploads/2025/10/image-2-768x512.png new file mode 100644 index 000000000..2b07bc7d4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-2-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-2.png b/wp-content/uploads/2025/10/image-2.png new file mode 100644 index 000000000..1c14f01db Binary files /dev/null and b/wp-content/uploads/2025/10/image-2.png differ diff --git a/wp-content/uploads/2025/10/image-20-1024x683.png b/wp-content/uploads/2025/10/image-20-1024x683.png new file mode 100644 index 000000000..e49e8038b Binary files /dev/null and b/wp-content/uploads/2025/10/image-20-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-20-150x150.png b/wp-content/uploads/2025/10/image-20-150x150.png new file mode 100644 index 000000000..d1d1fa714 Binary files /dev/null and b/wp-content/uploads/2025/10/image-20-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-20-300x200.png b/wp-content/uploads/2025/10/image-20-300x200.png new file mode 100644 index 000000000..7924a25f2 Binary files /dev/null and b/wp-content/uploads/2025/10/image-20-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-20-768x512.png b/wp-content/uploads/2025/10/image-20-768x512.png new file mode 100644 index 000000000..6960b0398 Binary files /dev/null and b/wp-content/uploads/2025/10/image-20-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-20.png b/wp-content/uploads/2025/10/image-20.png new file mode 100644 index 000000000..aa56df25c Binary files /dev/null and b/wp-content/uploads/2025/10/image-20.png differ diff --git a/wp-content/uploads/2025/10/image-21-1024x683.png b/wp-content/uploads/2025/10/image-21-1024x683.png new file mode 100644 index 000000000..9ac68f389 Binary files /dev/null and b/wp-content/uploads/2025/10/image-21-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-21-150x150.png b/wp-content/uploads/2025/10/image-21-150x150.png new file mode 100644 index 000000000..4678d35bb Binary files /dev/null and b/wp-content/uploads/2025/10/image-21-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-21-300x200.png b/wp-content/uploads/2025/10/image-21-300x200.png new file mode 100644 index 000000000..85e4d29fb Binary files /dev/null and b/wp-content/uploads/2025/10/image-21-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-21-768x512.png b/wp-content/uploads/2025/10/image-21-768x512.png new file mode 100644 index 000000000..93884e4bf Binary files /dev/null and b/wp-content/uploads/2025/10/image-21-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-21.png b/wp-content/uploads/2025/10/image-21.png new file mode 100644 index 000000000..4f2a0cf5e Binary files /dev/null and b/wp-content/uploads/2025/10/image-21.png differ diff --git a/wp-content/uploads/2025/10/image-22-1024x436.png b/wp-content/uploads/2025/10/image-22-1024x436.png new file mode 100644 index 000000000..9382c2ac5 Binary files /dev/null and b/wp-content/uploads/2025/10/image-22-1024x436.png differ diff --git a/wp-content/uploads/2025/10/image-22-150x150.png b/wp-content/uploads/2025/10/image-22-150x150.png new file mode 100644 index 000000000..0658f361e Binary files /dev/null and b/wp-content/uploads/2025/10/image-22-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-22-1536x654.png b/wp-content/uploads/2025/10/image-22-1536x654.png new file mode 100644 index 000000000..eb6517e5c Binary files /dev/null and b/wp-content/uploads/2025/10/image-22-1536x654.png differ diff --git a/wp-content/uploads/2025/10/image-22-300x128.png b/wp-content/uploads/2025/10/image-22-300x128.png new file mode 100644 index 000000000..e5e257a82 Binary files /dev/null and b/wp-content/uploads/2025/10/image-22-300x128.png differ diff --git a/wp-content/uploads/2025/10/image-22-768x327.png b/wp-content/uploads/2025/10/image-22-768x327.png new file mode 100644 index 000000000..125671857 Binary files /dev/null and b/wp-content/uploads/2025/10/image-22-768x327.png differ diff --git a/wp-content/uploads/2025/10/image-22.png b/wp-content/uploads/2025/10/image-22.png new file mode 100644 index 000000000..60ef67203 Binary files /dev/null and b/wp-content/uploads/2025/10/image-22.png differ diff --git a/wp-content/uploads/2025/10/image-23-1024x683.png b/wp-content/uploads/2025/10/image-23-1024x683.png new file mode 100644 index 000000000..3cfb4a76b Binary files /dev/null and b/wp-content/uploads/2025/10/image-23-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-23-150x150.png b/wp-content/uploads/2025/10/image-23-150x150.png new file mode 100644 index 000000000..32f222df4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-23-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-23-300x200.png b/wp-content/uploads/2025/10/image-23-300x200.png new file mode 100644 index 000000000..5bfa4ea5b Binary files /dev/null and b/wp-content/uploads/2025/10/image-23-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-23-768x512.png b/wp-content/uploads/2025/10/image-23-768x512.png new file mode 100644 index 000000000..4d7ca9a1b Binary files /dev/null and b/wp-content/uploads/2025/10/image-23-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-23.png b/wp-content/uploads/2025/10/image-23.png new file mode 100644 index 000000000..109b95fde Binary files /dev/null and b/wp-content/uploads/2025/10/image-23.png differ diff --git a/wp-content/uploads/2025/10/image-24-1024x683.png b/wp-content/uploads/2025/10/image-24-1024x683.png new file mode 100644 index 000000000..1eb7af39f Binary files /dev/null and b/wp-content/uploads/2025/10/image-24-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-24-150x150.png b/wp-content/uploads/2025/10/image-24-150x150.png new file mode 100644 index 000000000..5f1860f7f Binary files /dev/null and b/wp-content/uploads/2025/10/image-24-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-24-300x200.png b/wp-content/uploads/2025/10/image-24-300x200.png new file mode 100644 index 000000000..9b11baa74 Binary files /dev/null and b/wp-content/uploads/2025/10/image-24-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-24-768x512.png b/wp-content/uploads/2025/10/image-24-768x512.png new file mode 100644 index 000000000..7928a40fb Binary files /dev/null and b/wp-content/uploads/2025/10/image-24-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-24.png b/wp-content/uploads/2025/10/image-24.png new file mode 100644 index 000000000..50dd0f02a Binary files /dev/null and b/wp-content/uploads/2025/10/image-24.png differ diff --git a/wp-content/uploads/2025/10/image-25-150x150.png b/wp-content/uploads/2025/10/image-25-150x150.png new file mode 100644 index 000000000..f871e8415 Binary files /dev/null and b/wp-content/uploads/2025/10/image-25-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-25-300x296.png b/wp-content/uploads/2025/10/image-25-300x296.png new file mode 100644 index 000000000..3da9f1ae0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-25-300x296.png differ diff --git a/wp-content/uploads/2025/10/image-25-768x757.png b/wp-content/uploads/2025/10/image-25-768x757.png new file mode 100644 index 000000000..2d110e0dc Binary files /dev/null and b/wp-content/uploads/2025/10/image-25-768x757.png differ diff --git a/wp-content/uploads/2025/10/image-25.png b/wp-content/uploads/2025/10/image-25.png new file mode 100644 index 000000000..f2e597adc Binary files /dev/null and b/wp-content/uploads/2025/10/image-25.png differ diff --git a/wp-content/uploads/2025/10/image-26-1024x683.png b/wp-content/uploads/2025/10/image-26-1024x683.png new file mode 100644 index 000000000..a30ab8519 Binary files /dev/null and b/wp-content/uploads/2025/10/image-26-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-26-150x150.png b/wp-content/uploads/2025/10/image-26-150x150.png new file mode 100644 index 000000000..7b63bc112 Binary files /dev/null and b/wp-content/uploads/2025/10/image-26-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-26-300x200.png b/wp-content/uploads/2025/10/image-26-300x200.png new file mode 100644 index 000000000..7a0406d0a Binary files /dev/null and b/wp-content/uploads/2025/10/image-26-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-26-768x512.png b/wp-content/uploads/2025/10/image-26-768x512.png new file mode 100644 index 000000000..c5736ee96 Binary files /dev/null and b/wp-content/uploads/2025/10/image-26-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-26.png b/wp-content/uploads/2025/10/image-26.png new file mode 100644 index 000000000..6808f7b6a Binary files /dev/null and b/wp-content/uploads/2025/10/image-26.png differ diff --git a/wp-content/uploads/2025/10/image-27-150x150.png b/wp-content/uploads/2025/10/image-27-150x150.png new file mode 100644 index 000000000..b5b821e2e Binary files /dev/null and b/wp-content/uploads/2025/10/image-27-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-27-200x300.png b/wp-content/uploads/2025/10/image-27-200x300.png new file mode 100644 index 000000000..17284311c Binary files /dev/null and b/wp-content/uploads/2025/10/image-27-200x300.png differ diff --git a/wp-content/uploads/2025/10/image-27-683x1024.png b/wp-content/uploads/2025/10/image-27-683x1024.png new file mode 100644 index 000000000..af945f31d Binary files /dev/null and b/wp-content/uploads/2025/10/image-27-683x1024.png differ diff --git a/wp-content/uploads/2025/10/image-27-768x1152.png b/wp-content/uploads/2025/10/image-27-768x1152.png new file mode 100644 index 000000000..5981b4805 Binary files /dev/null and b/wp-content/uploads/2025/10/image-27-768x1152.png differ diff --git a/wp-content/uploads/2025/10/image-27.png b/wp-content/uploads/2025/10/image-27.png new file mode 100644 index 000000000..7ddb489ca Binary files /dev/null and b/wp-content/uploads/2025/10/image-27.png differ diff --git a/wp-content/uploads/2025/10/image-28-1024x683.png b/wp-content/uploads/2025/10/image-28-1024x683.png new file mode 100644 index 000000000..9a66628a7 Binary files /dev/null and b/wp-content/uploads/2025/10/image-28-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-28-150x150.png b/wp-content/uploads/2025/10/image-28-150x150.png new file mode 100644 index 000000000..be2f745bf Binary files /dev/null and b/wp-content/uploads/2025/10/image-28-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-28-300x200.png b/wp-content/uploads/2025/10/image-28-300x200.png new file mode 100644 index 000000000..3ab6961ae Binary files /dev/null and b/wp-content/uploads/2025/10/image-28-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-28-768x512.png b/wp-content/uploads/2025/10/image-28-768x512.png new file mode 100644 index 000000000..191668f64 Binary files /dev/null and b/wp-content/uploads/2025/10/image-28-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-28.png b/wp-content/uploads/2025/10/image-28.png new file mode 100644 index 000000000..e0975c261 Binary files /dev/null and b/wp-content/uploads/2025/10/image-28.png differ diff --git a/wp-content/uploads/2025/10/image-29-1024x683.png b/wp-content/uploads/2025/10/image-29-1024x683.png new file mode 100644 index 000000000..206b8c0a2 Binary files /dev/null and b/wp-content/uploads/2025/10/image-29-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-29-150x150.png b/wp-content/uploads/2025/10/image-29-150x150.png new file mode 100644 index 000000000..781056b9d Binary files /dev/null and b/wp-content/uploads/2025/10/image-29-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-29-300x200.png b/wp-content/uploads/2025/10/image-29-300x200.png new file mode 100644 index 000000000..38c4d978b Binary files /dev/null and b/wp-content/uploads/2025/10/image-29-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-29-768x512.png b/wp-content/uploads/2025/10/image-29-768x512.png new file mode 100644 index 000000000..59e388d2b Binary files /dev/null and b/wp-content/uploads/2025/10/image-29-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-29.png b/wp-content/uploads/2025/10/image-29.png new file mode 100644 index 000000000..53da89571 Binary files /dev/null and b/wp-content/uploads/2025/10/image-29.png differ diff --git a/wp-content/uploads/2025/10/image-3-1024x683.png b/wp-content/uploads/2025/10/image-3-1024x683.png new file mode 100644 index 000000000..04500d663 Binary files /dev/null and b/wp-content/uploads/2025/10/image-3-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-3-150x150.png b/wp-content/uploads/2025/10/image-3-150x150.png new file mode 100644 index 000000000..46d188f4a Binary files /dev/null and b/wp-content/uploads/2025/10/image-3-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-3-300x200.png b/wp-content/uploads/2025/10/image-3-300x200.png new file mode 100644 index 000000000..1ee67b0c9 Binary files /dev/null and b/wp-content/uploads/2025/10/image-3-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-3-768x512.png b/wp-content/uploads/2025/10/image-3-768x512.png new file mode 100644 index 000000000..2b07bc7d4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-3-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-3.png b/wp-content/uploads/2025/10/image-3.png new file mode 100644 index 000000000..1c14f01db Binary files /dev/null and b/wp-content/uploads/2025/10/image-3.png differ diff --git a/wp-content/uploads/2025/10/image-30-1024x683.png b/wp-content/uploads/2025/10/image-30-1024x683.png new file mode 100644 index 000000000..48710b21a Binary files /dev/null and b/wp-content/uploads/2025/10/image-30-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-30-150x150.png b/wp-content/uploads/2025/10/image-30-150x150.png new file mode 100644 index 000000000..c8519a371 Binary files /dev/null and b/wp-content/uploads/2025/10/image-30-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-30-300x200.png b/wp-content/uploads/2025/10/image-30-300x200.png new file mode 100644 index 000000000..81eeadd2f Binary files /dev/null and b/wp-content/uploads/2025/10/image-30-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-30-768x512.png b/wp-content/uploads/2025/10/image-30-768x512.png new file mode 100644 index 000000000..d779e3c9a Binary files /dev/null and b/wp-content/uploads/2025/10/image-30-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-30.png b/wp-content/uploads/2025/10/image-30.png new file mode 100644 index 000000000..be4c0ede0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-30.png differ diff --git a/wp-content/uploads/2025/10/image-300x200.png b/wp-content/uploads/2025/10/image-300x200.png new file mode 100644 index 000000000..5ae9bebaa Binary files /dev/null and b/wp-content/uploads/2025/10/image-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-31-150x150.png b/wp-content/uploads/2025/10/image-31-150x150.png new file mode 100644 index 000000000..7f1b38e9a Binary files /dev/null and b/wp-content/uploads/2025/10/image-31-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-31-300x300.png b/wp-content/uploads/2025/10/image-31-300x300.png new file mode 100644 index 000000000..1bdb396f2 Binary files /dev/null and b/wp-content/uploads/2025/10/image-31-300x300.png differ diff --git a/wp-content/uploads/2025/10/image-31.png b/wp-content/uploads/2025/10/image-31.png new file mode 100644 index 000000000..cf2a1c8fa Binary files /dev/null and b/wp-content/uploads/2025/10/image-31.png differ diff --git a/wp-content/uploads/2025/10/image-32-150x150.png b/wp-content/uploads/2025/10/image-32-150x150.png new file mode 100644 index 000000000..b64258f1f Binary files /dev/null and b/wp-content/uploads/2025/10/image-32-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-32-300x187.png b/wp-content/uploads/2025/10/image-32-300x187.png new file mode 100644 index 000000000..3b0318e14 Binary files /dev/null and b/wp-content/uploads/2025/10/image-32-300x187.png differ diff --git a/wp-content/uploads/2025/10/image-32.png b/wp-content/uploads/2025/10/image-32.png new file mode 100644 index 000000000..a632a22d8 Binary files /dev/null and b/wp-content/uploads/2025/10/image-32.png differ diff --git a/wp-content/uploads/2025/10/image-33-150x150.png b/wp-content/uploads/2025/10/image-33-150x150.png new file mode 100644 index 000000000..1c22c6f84 Binary files /dev/null and b/wp-content/uploads/2025/10/image-33-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-33-300x141.png b/wp-content/uploads/2025/10/image-33-300x141.png new file mode 100644 index 000000000..71de90e1b Binary files /dev/null and b/wp-content/uploads/2025/10/image-33-300x141.png differ diff --git a/wp-content/uploads/2025/10/image-33.png b/wp-content/uploads/2025/10/image-33.png new file mode 100644 index 000000000..9e0ff7998 Binary files /dev/null and b/wp-content/uploads/2025/10/image-33.png differ diff --git a/wp-content/uploads/2025/10/image-34-150x150.png b/wp-content/uploads/2025/10/image-34-150x150.png new file mode 100644 index 000000000..c18d0500a Binary files /dev/null and b/wp-content/uploads/2025/10/image-34-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-34-300x300.png b/wp-content/uploads/2025/10/image-34-300x300.png new file mode 100644 index 000000000..f4f32bce9 Binary files /dev/null and b/wp-content/uploads/2025/10/image-34-300x300.png differ diff --git a/wp-content/uploads/2025/10/image-34-768x768.png b/wp-content/uploads/2025/10/image-34-768x768.png new file mode 100644 index 000000000..db583c495 Binary files /dev/null and b/wp-content/uploads/2025/10/image-34-768x768.png differ diff --git a/wp-content/uploads/2025/10/image-34.png b/wp-content/uploads/2025/10/image-34.png new file mode 100644 index 000000000..43c79b71c Binary files /dev/null and b/wp-content/uploads/2025/10/image-34.png differ diff --git a/wp-content/uploads/2025/10/image-35-150x150.png b/wp-content/uploads/2025/10/image-35-150x150.png new file mode 100644 index 000000000..eb6b2225a Binary files /dev/null and b/wp-content/uploads/2025/10/image-35-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-35-277x300.png b/wp-content/uploads/2025/10/image-35-277x300.png new file mode 100644 index 000000000..343519589 Binary files /dev/null and b/wp-content/uploads/2025/10/image-35-277x300.png differ diff --git a/wp-content/uploads/2025/10/image-35.png b/wp-content/uploads/2025/10/image-35.png new file mode 100644 index 000000000..ab2c02bf5 Binary files /dev/null and b/wp-content/uploads/2025/10/image-35.png differ diff --git a/wp-content/uploads/2025/10/image-36-150x150.png b/wp-content/uploads/2025/10/image-36-150x150.png new file mode 100644 index 000000000..face58bd1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-36-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-36-300x239.png b/wp-content/uploads/2025/10/image-36-300x239.png new file mode 100644 index 000000000..6159319f2 Binary files /dev/null and b/wp-content/uploads/2025/10/image-36-300x239.png differ diff --git a/wp-content/uploads/2025/10/image-36.png b/wp-content/uploads/2025/10/image-36.png new file mode 100644 index 000000000..eafbb6ec0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-36.png differ diff --git a/wp-content/uploads/2025/10/image-37-1024x683.png b/wp-content/uploads/2025/10/image-37-1024x683.png new file mode 100644 index 000000000..6c7889a89 Binary files /dev/null and b/wp-content/uploads/2025/10/image-37-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-37-150x150.png b/wp-content/uploads/2025/10/image-37-150x150.png new file mode 100644 index 000000000..80ff35f2d Binary files /dev/null and b/wp-content/uploads/2025/10/image-37-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-37-300x200.png b/wp-content/uploads/2025/10/image-37-300x200.png new file mode 100644 index 000000000..e066c06ac Binary files /dev/null and b/wp-content/uploads/2025/10/image-37-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-37-768x512.png b/wp-content/uploads/2025/10/image-37-768x512.png new file mode 100644 index 000000000..93c936546 Binary files /dev/null and b/wp-content/uploads/2025/10/image-37-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-37.png b/wp-content/uploads/2025/10/image-37.png new file mode 100644 index 000000000..89b173b9a Binary files /dev/null and b/wp-content/uploads/2025/10/image-37.png differ diff --git a/wp-content/uploads/2025/10/image-38-1024x683.png b/wp-content/uploads/2025/10/image-38-1024x683.png new file mode 100644 index 000000000..f997bb425 Binary files /dev/null and b/wp-content/uploads/2025/10/image-38-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-38-150x150.png b/wp-content/uploads/2025/10/image-38-150x150.png new file mode 100644 index 000000000..7de87d97f Binary files /dev/null and b/wp-content/uploads/2025/10/image-38-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-38-300x200.png b/wp-content/uploads/2025/10/image-38-300x200.png new file mode 100644 index 000000000..e8f26d027 Binary files /dev/null and b/wp-content/uploads/2025/10/image-38-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-38-768x512.png b/wp-content/uploads/2025/10/image-38-768x512.png new file mode 100644 index 000000000..6d08eec9a Binary files /dev/null and b/wp-content/uploads/2025/10/image-38-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-38.png b/wp-content/uploads/2025/10/image-38.png new file mode 100644 index 000000000..eb9c0965c Binary files /dev/null and b/wp-content/uploads/2025/10/image-38.png differ diff --git a/wp-content/uploads/2025/10/image-39-1024x683.png b/wp-content/uploads/2025/10/image-39-1024x683.png new file mode 100644 index 000000000..6d8c40da0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-39-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-39-150x150.png b/wp-content/uploads/2025/10/image-39-150x150.png new file mode 100644 index 000000000..db5cc963e Binary files /dev/null and b/wp-content/uploads/2025/10/image-39-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-39-300x200.png b/wp-content/uploads/2025/10/image-39-300x200.png new file mode 100644 index 000000000..0c0ee9361 Binary files /dev/null and b/wp-content/uploads/2025/10/image-39-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-39-768x512.png b/wp-content/uploads/2025/10/image-39-768x512.png new file mode 100644 index 000000000..9970b4dd1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-39-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-39.png b/wp-content/uploads/2025/10/image-39.png new file mode 100644 index 000000000..d774558ee Binary files /dev/null and b/wp-content/uploads/2025/10/image-39.png differ diff --git a/wp-content/uploads/2025/10/image-4-1024x683.png b/wp-content/uploads/2025/10/image-4-1024x683.png new file mode 100644 index 000000000..d4e9e3f41 Binary files /dev/null and b/wp-content/uploads/2025/10/image-4-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-4-150x150.png b/wp-content/uploads/2025/10/image-4-150x150.png new file mode 100644 index 000000000..010a82f82 Binary files /dev/null and b/wp-content/uploads/2025/10/image-4-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-4-300x200.png b/wp-content/uploads/2025/10/image-4-300x200.png new file mode 100644 index 000000000..e6d8598cb Binary files /dev/null and b/wp-content/uploads/2025/10/image-4-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-4-768x512.png b/wp-content/uploads/2025/10/image-4-768x512.png new file mode 100644 index 000000000..fff72f51e Binary files /dev/null and b/wp-content/uploads/2025/10/image-4-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-4.png b/wp-content/uploads/2025/10/image-4.png new file mode 100644 index 000000000..78bb1afed Binary files /dev/null and b/wp-content/uploads/2025/10/image-4.png differ diff --git a/wp-content/uploads/2025/10/image-40-150x150.png b/wp-content/uploads/2025/10/image-40-150x150.png new file mode 100644 index 000000000..8c96b18e1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-40-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-40-300x300.png b/wp-content/uploads/2025/10/image-40-300x300.png new file mode 100644 index 000000000..1fb4fd7dc Binary files /dev/null and b/wp-content/uploads/2025/10/image-40-300x300.png differ diff --git a/wp-content/uploads/2025/10/image-40-768x768.png b/wp-content/uploads/2025/10/image-40-768x768.png new file mode 100644 index 000000000..db450e870 Binary files /dev/null and b/wp-content/uploads/2025/10/image-40-768x768.png differ diff --git a/wp-content/uploads/2025/10/image-40.png b/wp-content/uploads/2025/10/image-40.png new file mode 100644 index 000000000..64f2e414b Binary files /dev/null and b/wp-content/uploads/2025/10/image-40.png differ diff --git a/wp-content/uploads/2025/10/image-41-1024x683.png b/wp-content/uploads/2025/10/image-41-1024x683.png new file mode 100644 index 000000000..e4fcf7bad Binary files /dev/null and b/wp-content/uploads/2025/10/image-41-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-41-150x150.png b/wp-content/uploads/2025/10/image-41-150x150.png new file mode 100644 index 000000000..1327daea8 Binary files /dev/null and b/wp-content/uploads/2025/10/image-41-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-41-300x200.png b/wp-content/uploads/2025/10/image-41-300x200.png new file mode 100644 index 000000000..af69f6501 Binary files /dev/null and b/wp-content/uploads/2025/10/image-41-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-41-768x512.png b/wp-content/uploads/2025/10/image-41-768x512.png new file mode 100644 index 000000000..9c143fe0e Binary files /dev/null and b/wp-content/uploads/2025/10/image-41-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-41.png b/wp-content/uploads/2025/10/image-41.png new file mode 100644 index 000000000..4995b1c27 Binary files /dev/null and b/wp-content/uploads/2025/10/image-41.png differ diff --git a/wp-content/uploads/2025/10/image-42-1024x683.png b/wp-content/uploads/2025/10/image-42-1024x683.png new file mode 100644 index 000000000..15c9b84d8 Binary files /dev/null and b/wp-content/uploads/2025/10/image-42-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-42-150x150.png b/wp-content/uploads/2025/10/image-42-150x150.png new file mode 100644 index 000000000..07c3f2fa2 Binary files /dev/null and b/wp-content/uploads/2025/10/image-42-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-42-300x200.png b/wp-content/uploads/2025/10/image-42-300x200.png new file mode 100644 index 000000000..76581e2d6 Binary files /dev/null and b/wp-content/uploads/2025/10/image-42-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-42-768x512.png b/wp-content/uploads/2025/10/image-42-768x512.png new file mode 100644 index 000000000..c0d12e33f Binary files /dev/null and b/wp-content/uploads/2025/10/image-42-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-42.png b/wp-content/uploads/2025/10/image-42.png new file mode 100644 index 000000000..d5a3a8ef1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-42.png differ diff --git a/wp-content/uploads/2025/10/image-43-150x123.png b/wp-content/uploads/2025/10/image-43-150x123.png new file mode 100644 index 000000000..5d8bd690c Binary files /dev/null and b/wp-content/uploads/2025/10/image-43-150x123.png differ diff --git a/wp-content/uploads/2025/10/image-43-300x62.png b/wp-content/uploads/2025/10/image-43-300x62.png new file mode 100644 index 000000000..5af3112a0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-43-300x62.png differ diff --git a/wp-content/uploads/2025/10/image-43.png b/wp-content/uploads/2025/10/image-43.png new file mode 100644 index 000000000..4f3d825f8 Binary files /dev/null and b/wp-content/uploads/2025/10/image-43.png differ diff --git a/wp-content/uploads/2025/10/image-44-1024x574.png b/wp-content/uploads/2025/10/image-44-1024x574.png new file mode 100644 index 000000000..01eb89740 Binary files /dev/null and b/wp-content/uploads/2025/10/image-44-1024x574.png differ diff --git a/wp-content/uploads/2025/10/image-44-150x150.png b/wp-content/uploads/2025/10/image-44-150x150.png new file mode 100644 index 000000000..907005cfd Binary files /dev/null and b/wp-content/uploads/2025/10/image-44-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-44-300x168.png b/wp-content/uploads/2025/10/image-44-300x168.png new file mode 100644 index 000000000..0d30570e7 Binary files /dev/null and b/wp-content/uploads/2025/10/image-44-300x168.png differ diff --git a/wp-content/uploads/2025/10/image-44-768x430.png b/wp-content/uploads/2025/10/image-44-768x430.png new file mode 100644 index 000000000..8dc6efc58 Binary files /dev/null and b/wp-content/uploads/2025/10/image-44-768x430.png differ diff --git a/wp-content/uploads/2025/10/image-44.png b/wp-content/uploads/2025/10/image-44.png new file mode 100644 index 000000000..0594b2661 Binary files /dev/null and b/wp-content/uploads/2025/10/image-44.png differ diff --git a/wp-content/uploads/2025/10/image-45-1024x683.png b/wp-content/uploads/2025/10/image-45-1024x683.png new file mode 100644 index 000000000..c08f20419 Binary files /dev/null and b/wp-content/uploads/2025/10/image-45-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-45-150x150.png b/wp-content/uploads/2025/10/image-45-150x150.png new file mode 100644 index 000000000..cb2a20f55 Binary files /dev/null and b/wp-content/uploads/2025/10/image-45-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-45-300x200.png b/wp-content/uploads/2025/10/image-45-300x200.png new file mode 100644 index 000000000..540f221ad Binary files /dev/null and b/wp-content/uploads/2025/10/image-45-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-45-768x512.png b/wp-content/uploads/2025/10/image-45-768x512.png new file mode 100644 index 000000000..45298a6ce Binary files /dev/null and b/wp-content/uploads/2025/10/image-45-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-45.png b/wp-content/uploads/2025/10/image-45.png new file mode 100644 index 000000000..27a9cbf8e Binary files /dev/null and b/wp-content/uploads/2025/10/image-45.png differ diff --git a/wp-content/uploads/2025/10/image-46-1024x683.png b/wp-content/uploads/2025/10/image-46-1024x683.png new file mode 100644 index 000000000..4ebd2ec85 Binary files /dev/null and b/wp-content/uploads/2025/10/image-46-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-46-150x150.png b/wp-content/uploads/2025/10/image-46-150x150.png new file mode 100644 index 000000000..2fb759b6c Binary files /dev/null and b/wp-content/uploads/2025/10/image-46-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-46-300x200.png b/wp-content/uploads/2025/10/image-46-300x200.png new file mode 100644 index 000000000..f4dacd631 Binary files /dev/null and b/wp-content/uploads/2025/10/image-46-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-46-768x512.png b/wp-content/uploads/2025/10/image-46-768x512.png new file mode 100644 index 000000000..4e7ad45b4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-46-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-46.png b/wp-content/uploads/2025/10/image-46.png new file mode 100644 index 000000000..c605aaf01 Binary files /dev/null and b/wp-content/uploads/2025/10/image-46.png differ diff --git a/wp-content/uploads/2025/10/image-47-150x116.png b/wp-content/uploads/2025/10/image-47-150x116.png new file mode 100644 index 000000000..061febe71 Binary files /dev/null and b/wp-content/uploads/2025/10/image-47-150x116.png differ diff --git a/wp-content/uploads/2025/10/image-47.png b/wp-content/uploads/2025/10/image-47.png new file mode 100644 index 000000000..ecf6ab7c3 Binary files /dev/null and b/wp-content/uploads/2025/10/image-47.png differ diff --git a/wp-content/uploads/2025/10/image-48-1024x683.png b/wp-content/uploads/2025/10/image-48-1024x683.png new file mode 100644 index 000000000..5fe13c16d Binary files /dev/null and b/wp-content/uploads/2025/10/image-48-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-48-150x150.png b/wp-content/uploads/2025/10/image-48-150x150.png new file mode 100644 index 000000000..ee2786e8d Binary files /dev/null and b/wp-content/uploads/2025/10/image-48-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-48-300x200.png b/wp-content/uploads/2025/10/image-48-300x200.png new file mode 100644 index 000000000..53e770200 Binary files /dev/null and b/wp-content/uploads/2025/10/image-48-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-48-768x512.png b/wp-content/uploads/2025/10/image-48-768x512.png new file mode 100644 index 000000000..b51d0b7e1 Binary files /dev/null and b/wp-content/uploads/2025/10/image-48-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-48.png b/wp-content/uploads/2025/10/image-48.png new file mode 100644 index 000000000..c75e6715c Binary files /dev/null and b/wp-content/uploads/2025/10/image-48.png differ diff --git a/wp-content/uploads/2025/10/image-49-150x150.png b/wp-content/uploads/2025/10/image-49-150x150.png new file mode 100644 index 000000000..55c0de945 Binary files /dev/null and b/wp-content/uploads/2025/10/image-49-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-49-300x181.png b/wp-content/uploads/2025/10/image-49-300x181.png new file mode 100644 index 000000000..9489c05e8 Binary files /dev/null and b/wp-content/uploads/2025/10/image-49-300x181.png differ diff --git a/wp-content/uploads/2025/10/image-49-768x463.png b/wp-content/uploads/2025/10/image-49-768x463.png new file mode 100644 index 000000000..acb629abe Binary files /dev/null and b/wp-content/uploads/2025/10/image-49-768x463.png differ diff --git a/wp-content/uploads/2025/10/image-49.png b/wp-content/uploads/2025/10/image-49.png new file mode 100644 index 000000000..0aabc462b Binary files /dev/null and b/wp-content/uploads/2025/10/image-49.png differ diff --git a/wp-content/uploads/2025/10/image-5-150x150.png b/wp-content/uploads/2025/10/image-5-150x150.png new file mode 100644 index 000000000..a431d9eb7 Binary files /dev/null and b/wp-content/uploads/2025/10/image-5-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-5-300x300.png b/wp-content/uploads/2025/10/image-5-300x300.png new file mode 100644 index 000000000..b0cc9b19c Binary files /dev/null and b/wp-content/uploads/2025/10/image-5-300x300.png differ diff --git a/wp-content/uploads/2025/10/image-5-768x768.png b/wp-content/uploads/2025/10/image-5-768x768.png new file mode 100644 index 000000000..3ab87ecb9 Binary files /dev/null and b/wp-content/uploads/2025/10/image-5-768x768.png differ diff --git a/wp-content/uploads/2025/10/image-5.png b/wp-content/uploads/2025/10/image-5.png new file mode 100644 index 000000000..b35058237 Binary files /dev/null and b/wp-content/uploads/2025/10/image-5.png differ diff --git a/wp-content/uploads/2025/10/image-50-150x150.png b/wp-content/uploads/2025/10/image-50-150x150.png new file mode 100644 index 000000000..4a7e50ea6 Binary files /dev/null and b/wp-content/uploads/2025/10/image-50-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-50-300x188.png b/wp-content/uploads/2025/10/image-50-300x188.png new file mode 100644 index 000000000..771ad33e9 Binary files /dev/null and b/wp-content/uploads/2025/10/image-50-300x188.png differ diff --git a/wp-content/uploads/2025/10/image-50.png b/wp-content/uploads/2025/10/image-50.png new file mode 100644 index 000000000..b4ff3e30e Binary files /dev/null and b/wp-content/uploads/2025/10/image-50.png differ diff --git a/wp-content/uploads/2025/10/image-51-1024x683.png b/wp-content/uploads/2025/10/image-51-1024x683.png new file mode 100644 index 000000000..cbb10ac1f Binary files /dev/null and b/wp-content/uploads/2025/10/image-51-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-51-150x150.png b/wp-content/uploads/2025/10/image-51-150x150.png new file mode 100644 index 000000000..4e12efc7a Binary files /dev/null and b/wp-content/uploads/2025/10/image-51-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-51-300x200.png b/wp-content/uploads/2025/10/image-51-300x200.png new file mode 100644 index 000000000..4e1bc6157 Binary files /dev/null and b/wp-content/uploads/2025/10/image-51-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-51-768x512.png b/wp-content/uploads/2025/10/image-51-768x512.png new file mode 100644 index 000000000..76ff81077 Binary files /dev/null and b/wp-content/uploads/2025/10/image-51-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-51.png b/wp-content/uploads/2025/10/image-51.png new file mode 100644 index 000000000..46e2a1f93 Binary files /dev/null and b/wp-content/uploads/2025/10/image-51.png differ diff --git a/wp-content/uploads/2025/10/image-52-1024x683.png b/wp-content/uploads/2025/10/image-52-1024x683.png new file mode 100644 index 000000000..93731c3d7 Binary files /dev/null and b/wp-content/uploads/2025/10/image-52-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-52-150x150.png b/wp-content/uploads/2025/10/image-52-150x150.png new file mode 100644 index 000000000..d63f7748f Binary files /dev/null and b/wp-content/uploads/2025/10/image-52-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-52-300x200.png b/wp-content/uploads/2025/10/image-52-300x200.png new file mode 100644 index 000000000..445d4aaeb Binary files /dev/null and b/wp-content/uploads/2025/10/image-52-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-52-768x512.png b/wp-content/uploads/2025/10/image-52-768x512.png new file mode 100644 index 000000000..c30360574 Binary files /dev/null and b/wp-content/uploads/2025/10/image-52-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-52.png b/wp-content/uploads/2025/10/image-52.png new file mode 100644 index 000000000..5c1c95a30 Binary files /dev/null and b/wp-content/uploads/2025/10/image-52.png differ diff --git a/wp-content/uploads/2025/10/image-53-1024x683.png b/wp-content/uploads/2025/10/image-53-1024x683.png new file mode 100644 index 000000000..417338387 Binary files /dev/null and b/wp-content/uploads/2025/10/image-53-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-53-150x150.png b/wp-content/uploads/2025/10/image-53-150x150.png new file mode 100644 index 000000000..2bfb083a4 Binary files /dev/null and b/wp-content/uploads/2025/10/image-53-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-53-300x200.png b/wp-content/uploads/2025/10/image-53-300x200.png new file mode 100644 index 000000000..f73fd554e Binary files /dev/null and b/wp-content/uploads/2025/10/image-53-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-53-768x512.png b/wp-content/uploads/2025/10/image-53-768x512.png new file mode 100644 index 000000000..0c03a676b Binary files /dev/null and b/wp-content/uploads/2025/10/image-53-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-53.png b/wp-content/uploads/2025/10/image-53.png new file mode 100644 index 000000000..e455dc46c Binary files /dev/null and b/wp-content/uploads/2025/10/image-53.png differ diff --git a/wp-content/uploads/2025/10/image-6-1024x683.png b/wp-content/uploads/2025/10/image-6-1024x683.png new file mode 100644 index 000000000..5060e4476 Binary files /dev/null and b/wp-content/uploads/2025/10/image-6-1024x683.png differ diff --git a/wp-content/uploads/2025/10/image-6-150x150.png b/wp-content/uploads/2025/10/image-6-150x150.png new file mode 100644 index 000000000..23e12110a Binary files /dev/null and b/wp-content/uploads/2025/10/image-6-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-6-300x200.png b/wp-content/uploads/2025/10/image-6-300x200.png new file mode 100644 index 000000000..fa4e06ab0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-6-300x200.png differ diff --git a/wp-content/uploads/2025/10/image-6-768x512.png b/wp-content/uploads/2025/10/image-6-768x512.png new file mode 100644 index 000000000..0a7258f0a Binary files /dev/null and b/wp-content/uploads/2025/10/image-6-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-6.png b/wp-content/uploads/2025/10/image-6.png new file mode 100644 index 000000000..c2b253994 Binary files /dev/null and b/wp-content/uploads/2025/10/image-6.png differ diff --git a/wp-content/uploads/2025/10/image-7-150x150.png b/wp-content/uploads/2025/10/image-7-150x150.png new file mode 100644 index 000000000..b970b36b0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-7-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-7-249x300.png b/wp-content/uploads/2025/10/image-7-249x300.png new file mode 100644 index 000000000..d0447a2c0 Binary files /dev/null and b/wp-content/uploads/2025/10/image-7-249x300.png differ diff --git a/wp-content/uploads/2025/10/image-7.png b/wp-content/uploads/2025/10/image-7.png new file mode 100644 index 000000000..0fad3e339 Binary files /dev/null and b/wp-content/uploads/2025/10/image-7.png differ diff --git a/wp-content/uploads/2025/10/image-768x512.png b/wp-content/uploads/2025/10/image-768x512.png new file mode 100644 index 000000000..d612cc622 Binary files /dev/null and b/wp-content/uploads/2025/10/image-768x512.png differ diff --git a/wp-content/uploads/2025/10/image-8-150x150.png b/wp-content/uploads/2025/10/image-8-150x150.png new file mode 100644 index 000000000..395dca201 Binary files /dev/null and b/wp-content/uploads/2025/10/image-8-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-8-229x300.png b/wp-content/uploads/2025/10/image-8-229x300.png new file mode 100644 index 000000000..4905bfb82 Binary files /dev/null and b/wp-content/uploads/2025/10/image-8-229x300.png differ diff --git a/wp-content/uploads/2025/10/image-8.png b/wp-content/uploads/2025/10/image-8.png new file mode 100644 index 000000000..5ce2afcbe Binary files /dev/null and b/wp-content/uploads/2025/10/image-8.png differ diff --git a/wp-content/uploads/2025/10/image-9-150x150.png b/wp-content/uploads/2025/10/image-9-150x150.png new file mode 100644 index 000000000..886b092ee Binary files /dev/null and b/wp-content/uploads/2025/10/image-9-150x150.png differ diff --git a/wp-content/uploads/2025/10/image-9.png b/wp-content/uploads/2025/10/image-9.png new file mode 100644 index 000000000..7cc0feedc Binary files /dev/null and b/wp-content/uploads/2025/10/image-9.png differ diff --git a/wp-content/uploads/2025/10/image.png b/wp-content/uploads/2025/10/image.png new file mode 100644 index 000000000..884c5a6d5 Binary files /dev/null and b/wp-content/uploads/2025/10/image.png differ diff --git a/wp-content/uploads/2025/10/tradition-1024x575.jpg b/wp-content/uploads/2025/10/tradition-1024x575.jpg new file mode 100644 index 000000000..49fa89d5e Binary files /dev/null and b/wp-content/uploads/2025/10/tradition-1024x575.jpg differ diff --git a/wp-content/uploads/2025/10/tradition-150x150.jpg b/wp-content/uploads/2025/10/tradition-150x150.jpg new file mode 100644 index 000000000..4a8e08bd9 Binary files /dev/null and b/wp-content/uploads/2025/10/tradition-150x150.jpg differ diff --git a/wp-content/uploads/2025/10/tradition-300x169.jpg b/wp-content/uploads/2025/10/tradition-300x169.jpg new file mode 100644 index 000000000..e82341342 Binary files /dev/null and b/wp-content/uploads/2025/10/tradition-300x169.jpg differ diff --git a/wp-content/uploads/2025/10/tradition-768x432.jpg b/wp-content/uploads/2025/10/tradition-768x432.jpg new file mode 100644 index 000000000..4bff256d9 Binary files /dev/null and b/wp-content/uploads/2025/10/tradition-768x432.jpg differ diff --git a/wp-content/uploads/2025/10/tradition.jpg b/wp-content/uploads/2025/10/tradition.jpg new file mode 100644 index 000000000..eb6d05492 Binary files /dev/null and b/wp-content/uploads/2025/10/tradition.jpg differ diff --git a/wp-content/uploads/2025/11/image-1-150x150.png b/wp-content/uploads/2025/11/image-1-150x150.png new file mode 100644 index 000000000..8a07eee0f Binary files /dev/null and b/wp-content/uploads/2025/11/image-1-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-1-300x300.png b/wp-content/uploads/2025/11/image-1-300x300.png new file mode 100644 index 000000000..8172a5b33 Binary files /dev/null and b/wp-content/uploads/2025/11/image-1-300x300.png differ diff --git a/wp-content/uploads/2025/11/image-1-768x768.png b/wp-content/uploads/2025/11/image-1-768x768.png new file mode 100644 index 000000000..23ede0055 Binary files /dev/null and b/wp-content/uploads/2025/11/image-1-768x768.png differ diff --git a/wp-content/uploads/2025/11/image-1.png b/wp-content/uploads/2025/11/image-1.png new file mode 100644 index 000000000..80759a529 Binary files /dev/null and b/wp-content/uploads/2025/11/image-1.png differ diff --git a/wp-content/uploads/2025/11/image-10-1024x683.png b/wp-content/uploads/2025/11/image-10-1024x683.png new file mode 100644 index 000000000..f0f146fe9 Binary files /dev/null and b/wp-content/uploads/2025/11/image-10-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-10-150x150.png b/wp-content/uploads/2025/11/image-10-150x150.png new file mode 100644 index 000000000..a0cef2de3 Binary files /dev/null and b/wp-content/uploads/2025/11/image-10-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-10-300x200.png b/wp-content/uploads/2025/11/image-10-300x200.png new file mode 100644 index 000000000..e90bddbd5 Binary files /dev/null and b/wp-content/uploads/2025/11/image-10-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-10-768x512.png b/wp-content/uploads/2025/11/image-10-768x512.png new file mode 100644 index 000000000..82a518a25 Binary files /dev/null and b/wp-content/uploads/2025/11/image-10-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-10.png b/wp-content/uploads/2025/11/image-10.png new file mode 100644 index 000000000..82d56c927 Binary files /dev/null and b/wp-content/uploads/2025/11/image-10.png differ diff --git a/wp-content/uploads/2025/11/image-1024x683.png b/wp-content/uploads/2025/11/image-1024x683.png new file mode 100644 index 000000000..660cbb3c0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-11-1024x683.png b/wp-content/uploads/2025/11/image-11-1024x683.png new file mode 100644 index 000000000..dd39bf856 Binary files /dev/null and b/wp-content/uploads/2025/11/image-11-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-11-150x150.png b/wp-content/uploads/2025/11/image-11-150x150.png new file mode 100644 index 000000000..dbbd90a9a Binary files /dev/null and b/wp-content/uploads/2025/11/image-11-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-11-300x200.png b/wp-content/uploads/2025/11/image-11-300x200.png new file mode 100644 index 000000000..00b3cfcbf Binary files /dev/null and b/wp-content/uploads/2025/11/image-11-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-11-768x512.png b/wp-content/uploads/2025/11/image-11-768x512.png new file mode 100644 index 000000000..f0edc60a3 Binary files /dev/null and b/wp-content/uploads/2025/11/image-11-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-11.png b/wp-content/uploads/2025/11/image-11.png new file mode 100644 index 000000000..8bb62ea67 Binary files /dev/null and b/wp-content/uploads/2025/11/image-11.png differ diff --git a/wp-content/uploads/2025/11/image-12-1024x574.png b/wp-content/uploads/2025/11/image-12-1024x574.png new file mode 100644 index 000000000..2cf0750e8 Binary files /dev/null and b/wp-content/uploads/2025/11/image-12-1024x574.png differ diff --git a/wp-content/uploads/2025/11/image-12-150x150.png b/wp-content/uploads/2025/11/image-12-150x150.png new file mode 100644 index 000000000..d385b23d0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-12-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-12-300x168.png b/wp-content/uploads/2025/11/image-12-300x168.png new file mode 100644 index 000000000..1514c5c5a Binary files /dev/null and b/wp-content/uploads/2025/11/image-12-300x168.png differ diff --git a/wp-content/uploads/2025/11/image-12-768x430.png b/wp-content/uploads/2025/11/image-12-768x430.png new file mode 100644 index 000000000..f6af48efc Binary files /dev/null and b/wp-content/uploads/2025/11/image-12-768x430.png differ diff --git a/wp-content/uploads/2025/11/image-12.png b/wp-content/uploads/2025/11/image-12.png new file mode 100644 index 000000000..b45f0cea0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-12.png differ diff --git a/wp-content/uploads/2025/11/image-13-1024x574.png b/wp-content/uploads/2025/11/image-13-1024x574.png new file mode 100644 index 000000000..9e0106a56 Binary files /dev/null and b/wp-content/uploads/2025/11/image-13-1024x574.png differ diff --git a/wp-content/uploads/2025/11/image-13-150x150.png b/wp-content/uploads/2025/11/image-13-150x150.png new file mode 100644 index 000000000..3a0ec59a9 Binary files /dev/null and b/wp-content/uploads/2025/11/image-13-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-13-300x168.png b/wp-content/uploads/2025/11/image-13-300x168.png new file mode 100644 index 000000000..7a12fc525 Binary files /dev/null and b/wp-content/uploads/2025/11/image-13-300x168.png differ diff --git a/wp-content/uploads/2025/11/image-13-768x430.png b/wp-content/uploads/2025/11/image-13-768x430.png new file mode 100644 index 000000000..56f3e5324 Binary files /dev/null and b/wp-content/uploads/2025/11/image-13-768x430.png differ diff --git a/wp-content/uploads/2025/11/image-13.png b/wp-content/uploads/2025/11/image-13.png new file mode 100644 index 000000000..1772c3b50 Binary files /dev/null and b/wp-content/uploads/2025/11/image-13.png differ diff --git a/wp-content/uploads/2025/11/image-14-1024x683.png b/wp-content/uploads/2025/11/image-14-1024x683.png new file mode 100644 index 000000000..9e21ea72d Binary files /dev/null and b/wp-content/uploads/2025/11/image-14-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-14-150x150.png b/wp-content/uploads/2025/11/image-14-150x150.png new file mode 100644 index 000000000..e52382c21 Binary files /dev/null and b/wp-content/uploads/2025/11/image-14-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-14-300x200.png b/wp-content/uploads/2025/11/image-14-300x200.png new file mode 100644 index 000000000..0d0fd255e Binary files /dev/null and b/wp-content/uploads/2025/11/image-14-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-14-768x512.png b/wp-content/uploads/2025/11/image-14-768x512.png new file mode 100644 index 000000000..eb446e263 Binary files /dev/null and b/wp-content/uploads/2025/11/image-14-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-14.png b/wp-content/uploads/2025/11/image-14.png new file mode 100644 index 000000000..ccca53e02 Binary files /dev/null and b/wp-content/uploads/2025/11/image-14.png differ diff --git a/wp-content/uploads/2025/11/image-15-1024x683.png b/wp-content/uploads/2025/11/image-15-1024x683.png new file mode 100644 index 000000000..05a262500 Binary files /dev/null and b/wp-content/uploads/2025/11/image-15-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-15-150x150.png b/wp-content/uploads/2025/11/image-15-150x150.png new file mode 100644 index 000000000..1a8052f30 Binary files /dev/null and b/wp-content/uploads/2025/11/image-15-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-15-300x200.png b/wp-content/uploads/2025/11/image-15-300x200.png new file mode 100644 index 000000000..2c7b3631b Binary files /dev/null and b/wp-content/uploads/2025/11/image-15-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-15-768x512.png b/wp-content/uploads/2025/11/image-15-768x512.png new file mode 100644 index 000000000..8fdb04b4c Binary files /dev/null and b/wp-content/uploads/2025/11/image-15-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-15.png b/wp-content/uploads/2025/11/image-15.png new file mode 100644 index 000000000..86c0d1296 Binary files /dev/null and b/wp-content/uploads/2025/11/image-15.png differ diff --git a/wp-content/uploads/2025/11/image-150x150.png b/wp-content/uploads/2025/11/image-150x150.png new file mode 100644 index 000000000..9951b24d0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-16-150x150.png b/wp-content/uploads/2025/11/image-16-150x150.png new file mode 100644 index 000000000..e729fe9d1 Binary files /dev/null and b/wp-content/uploads/2025/11/image-16-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-16-300x300.png b/wp-content/uploads/2025/11/image-16-300x300.png new file mode 100644 index 000000000..358ee8ae4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-16-300x300.png differ diff --git a/wp-content/uploads/2025/11/image-16-768x768.png b/wp-content/uploads/2025/11/image-16-768x768.png new file mode 100644 index 000000000..4b949e226 Binary files /dev/null and b/wp-content/uploads/2025/11/image-16-768x768.png differ diff --git a/wp-content/uploads/2025/11/image-16.png b/wp-content/uploads/2025/11/image-16.png new file mode 100644 index 000000000..24da58a74 Binary files /dev/null and b/wp-content/uploads/2025/11/image-16.png differ diff --git a/wp-content/uploads/2025/11/image-17-1024x683.png b/wp-content/uploads/2025/11/image-17-1024x683.png new file mode 100644 index 000000000..910a998e3 Binary files /dev/null and b/wp-content/uploads/2025/11/image-17-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-17-150x150.png b/wp-content/uploads/2025/11/image-17-150x150.png new file mode 100644 index 000000000..c61c3aef9 Binary files /dev/null and b/wp-content/uploads/2025/11/image-17-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-17-300x200.png b/wp-content/uploads/2025/11/image-17-300x200.png new file mode 100644 index 000000000..49562b362 Binary files /dev/null and b/wp-content/uploads/2025/11/image-17-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-17-768x512.png b/wp-content/uploads/2025/11/image-17-768x512.png new file mode 100644 index 000000000..c67bf4481 Binary files /dev/null and b/wp-content/uploads/2025/11/image-17-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-17.png b/wp-content/uploads/2025/11/image-17.png new file mode 100644 index 000000000..145431961 Binary files /dev/null and b/wp-content/uploads/2025/11/image-17.png differ diff --git a/wp-content/uploads/2025/11/image-18-1024x683.png b/wp-content/uploads/2025/11/image-18-1024x683.png new file mode 100644 index 000000000..7ffdba6af Binary files /dev/null and b/wp-content/uploads/2025/11/image-18-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-18-150x150.png b/wp-content/uploads/2025/11/image-18-150x150.png new file mode 100644 index 000000000..7c8464e0f Binary files /dev/null and b/wp-content/uploads/2025/11/image-18-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-18-300x200.png b/wp-content/uploads/2025/11/image-18-300x200.png new file mode 100644 index 000000000..5ce9362f5 Binary files /dev/null and b/wp-content/uploads/2025/11/image-18-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-18-768x512.png b/wp-content/uploads/2025/11/image-18-768x512.png new file mode 100644 index 000000000..fea09d93f Binary files /dev/null and b/wp-content/uploads/2025/11/image-18-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-18.png b/wp-content/uploads/2025/11/image-18.png new file mode 100644 index 000000000..f53c6a3a4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-18.png differ diff --git a/wp-content/uploads/2025/11/image-19-150x150.png b/wp-content/uploads/2025/11/image-19-150x150.png new file mode 100644 index 000000000..ecb5d1227 Binary files /dev/null and b/wp-content/uploads/2025/11/image-19-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-19-300x147.png b/wp-content/uploads/2025/11/image-19-300x147.png new file mode 100644 index 000000000..bd4f2f9b3 Binary files /dev/null and b/wp-content/uploads/2025/11/image-19-300x147.png differ diff --git a/wp-content/uploads/2025/11/image-19.png b/wp-content/uploads/2025/11/image-19.png new file mode 100644 index 000000000..290185f5f Binary files /dev/null and b/wp-content/uploads/2025/11/image-19.png differ diff --git a/wp-content/uploads/2025/11/image-2-1024x574.png b/wp-content/uploads/2025/11/image-2-1024x574.png new file mode 100644 index 000000000..9426d46a4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-2-1024x574.png differ diff --git a/wp-content/uploads/2025/11/image-2-150x150.png b/wp-content/uploads/2025/11/image-2-150x150.png new file mode 100644 index 000000000..a82f3f260 Binary files /dev/null and b/wp-content/uploads/2025/11/image-2-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-2-300x168.png b/wp-content/uploads/2025/11/image-2-300x168.png new file mode 100644 index 000000000..6f7b02eb9 Binary files /dev/null and b/wp-content/uploads/2025/11/image-2-300x168.png differ diff --git a/wp-content/uploads/2025/11/image-2-768x430.png b/wp-content/uploads/2025/11/image-2-768x430.png new file mode 100644 index 000000000..96d245684 Binary files /dev/null and b/wp-content/uploads/2025/11/image-2-768x430.png differ diff --git a/wp-content/uploads/2025/11/image-2.png b/wp-content/uploads/2025/11/image-2.png new file mode 100644 index 000000000..5ecd6b33f Binary files /dev/null and b/wp-content/uploads/2025/11/image-2.png differ diff --git a/wp-content/uploads/2025/11/image-20-150x150.png b/wp-content/uploads/2025/11/image-20-150x150.png new file mode 100644 index 000000000..304238d22 Binary files /dev/null and b/wp-content/uploads/2025/11/image-20-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-20-300x250.png b/wp-content/uploads/2025/11/image-20-300x250.png new file mode 100644 index 000000000..64500642b Binary files /dev/null and b/wp-content/uploads/2025/11/image-20-300x250.png differ diff --git a/wp-content/uploads/2025/11/image-20.png b/wp-content/uploads/2025/11/image-20.png new file mode 100644 index 000000000..f34c91f13 Binary files /dev/null and b/wp-content/uploads/2025/11/image-20.png differ diff --git a/wp-content/uploads/2025/11/image-21-1024x683.png b/wp-content/uploads/2025/11/image-21-1024x683.png new file mode 100644 index 000000000..eea676e93 Binary files /dev/null and b/wp-content/uploads/2025/11/image-21-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-21-150x150.png b/wp-content/uploads/2025/11/image-21-150x150.png new file mode 100644 index 000000000..f329f2140 Binary files /dev/null and b/wp-content/uploads/2025/11/image-21-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-21-300x200.png b/wp-content/uploads/2025/11/image-21-300x200.png new file mode 100644 index 000000000..e701e7c8c Binary files /dev/null and b/wp-content/uploads/2025/11/image-21-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-21-768x512.png b/wp-content/uploads/2025/11/image-21-768x512.png new file mode 100644 index 000000000..06f71a42f Binary files /dev/null and b/wp-content/uploads/2025/11/image-21-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-21.png b/wp-content/uploads/2025/11/image-21.png new file mode 100644 index 000000000..1f7784eeb Binary files /dev/null and b/wp-content/uploads/2025/11/image-21.png differ diff --git a/wp-content/uploads/2025/11/image-22-1024x683.png b/wp-content/uploads/2025/11/image-22-1024x683.png new file mode 100644 index 000000000..653d8d7b0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-22-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-22-150x150.png b/wp-content/uploads/2025/11/image-22-150x150.png new file mode 100644 index 000000000..acbda36bd Binary files /dev/null and b/wp-content/uploads/2025/11/image-22-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-22-300x200.png b/wp-content/uploads/2025/11/image-22-300x200.png new file mode 100644 index 000000000..55ba758d7 Binary files /dev/null and b/wp-content/uploads/2025/11/image-22-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-22-768x512.png b/wp-content/uploads/2025/11/image-22-768x512.png new file mode 100644 index 000000000..46db037f8 Binary files /dev/null and b/wp-content/uploads/2025/11/image-22-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-22.png b/wp-content/uploads/2025/11/image-22.png new file mode 100644 index 000000000..48d364747 Binary files /dev/null and b/wp-content/uploads/2025/11/image-22.png differ diff --git a/wp-content/uploads/2025/11/image-23-1024x683.png b/wp-content/uploads/2025/11/image-23-1024x683.png new file mode 100644 index 000000000..3f271ed7f Binary files /dev/null and b/wp-content/uploads/2025/11/image-23-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-23-150x150.png b/wp-content/uploads/2025/11/image-23-150x150.png new file mode 100644 index 000000000..ba44c8ee4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-23-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-23-300x200.png b/wp-content/uploads/2025/11/image-23-300x200.png new file mode 100644 index 000000000..9da10301d Binary files /dev/null and b/wp-content/uploads/2025/11/image-23-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-23-768x512.png b/wp-content/uploads/2025/11/image-23-768x512.png new file mode 100644 index 000000000..8537b5ba0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-23-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-23.png b/wp-content/uploads/2025/11/image-23.png new file mode 100644 index 000000000..6d93a6e12 Binary files /dev/null and b/wp-content/uploads/2025/11/image-23.png differ diff --git a/wp-content/uploads/2025/11/image-24-1024x683.png b/wp-content/uploads/2025/11/image-24-1024x683.png new file mode 100644 index 000000000..7ccf180ea Binary files /dev/null and b/wp-content/uploads/2025/11/image-24-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-24-150x150.png b/wp-content/uploads/2025/11/image-24-150x150.png new file mode 100644 index 000000000..d767c4ac8 Binary files /dev/null and b/wp-content/uploads/2025/11/image-24-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-24-300x200.png b/wp-content/uploads/2025/11/image-24-300x200.png new file mode 100644 index 000000000..250c88039 Binary files /dev/null and b/wp-content/uploads/2025/11/image-24-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-24-768x512.png b/wp-content/uploads/2025/11/image-24-768x512.png new file mode 100644 index 000000000..8a4da8309 Binary files /dev/null and b/wp-content/uploads/2025/11/image-24-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-24.png b/wp-content/uploads/2025/11/image-24.png new file mode 100644 index 000000000..2cdf4133d Binary files /dev/null and b/wp-content/uploads/2025/11/image-24.png differ diff --git a/wp-content/uploads/2025/11/image-25-150x150.png b/wp-content/uploads/2025/11/image-25-150x150.png new file mode 100644 index 000000000..e604b78e1 Binary files /dev/null and b/wp-content/uploads/2025/11/image-25-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-25.png b/wp-content/uploads/2025/11/image-25.png new file mode 100644 index 000000000..b4c59fcf3 Binary files /dev/null and b/wp-content/uploads/2025/11/image-25.png differ diff --git a/wp-content/uploads/2025/11/image-26-1024x554.png b/wp-content/uploads/2025/11/image-26-1024x554.png new file mode 100644 index 000000000..e5b37ed99 Binary files /dev/null and b/wp-content/uploads/2025/11/image-26-1024x554.png differ diff --git a/wp-content/uploads/2025/11/image-26-150x150.png b/wp-content/uploads/2025/11/image-26-150x150.png new file mode 100644 index 000000000..1147a0f0f Binary files /dev/null and b/wp-content/uploads/2025/11/image-26-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-26-300x162.png b/wp-content/uploads/2025/11/image-26-300x162.png new file mode 100644 index 000000000..a4eca019d Binary files /dev/null and b/wp-content/uploads/2025/11/image-26-300x162.png differ diff --git a/wp-content/uploads/2025/11/image-26-768x416.png b/wp-content/uploads/2025/11/image-26-768x416.png new file mode 100644 index 000000000..faf259d5f Binary files /dev/null and b/wp-content/uploads/2025/11/image-26-768x416.png differ diff --git a/wp-content/uploads/2025/11/image-26.png b/wp-content/uploads/2025/11/image-26.png new file mode 100644 index 000000000..a61627b70 Binary files /dev/null and b/wp-content/uploads/2025/11/image-26.png differ diff --git a/wp-content/uploads/2025/11/image-27-1024x576.png b/wp-content/uploads/2025/11/image-27-1024x576.png new file mode 100644 index 000000000..461ca9e2e Binary files /dev/null and b/wp-content/uploads/2025/11/image-27-1024x576.png differ diff --git a/wp-content/uploads/2025/11/image-27-150x150.png b/wp-content/uploads/2025/11/image-27-150x150.png new file mode 100644 index 000000000..1c4cfc0a6 Binary files /dev/null and b/wp-content/uploads/2025/11/image-27-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-27-300x169.png b/wp-content/uploads/2025/11/image-27-300x169.png new file mode 100644 index 000000000..ccc5fa6ba Binary files /dev/null and b/wp-content/uploads/2025/11/image-27-300x169.png differ diff --git a/wp-content/uploads/2025/11/image-27-768x432.png b/wp-content/uploads/2025/11/image-27-768x432.png new file mode 100644 index 000000000..8151ae195 Binary files /dev/null and b/wp-content/uploads/2025/11/image-27-768x432.png differ diff --git a/wp-content/uploads/2025/11/image-27.png b/wp-content/uploads/2025/11/image-27.png new file mode 100644 index 000000000..cbfd24cd5 Binary files /dev/null and b/wp-content/uploads/2025/11/image-27.png differ diff --git a/wp-content/uploads/2025/11/image-28-1024x574.png b/wp-content/uploads/2025/11/image-28-1024x574.png new file mode 100644 index 000000000..0c44cf3c8 Binary files /dev/null and b/wp-content/uploads/2025/11/image-28-1024x574.png differ diff --git a/wp-content/uploads/2025/11/image-28-150x150.png b/wp-content/uploads/2025/11/image-28-150x150.png new file mode 100644 index 000000000..504951343 Binary files /dev/null and b/wp-content/uploads/2025/11/image-28-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-28-300x168.png b/wp-content/uploads/2025/11/image-28-300x168.png new file mode 100644 index 000000000..1a711b142 Binary files /dev/null and b/wp-content/uploads/2025/11/image-28-300x168.png differ diff --git a/wp-content/uploads/2025/11/image-28-768x430.png b/wp-content/uploads/2025/11/image-28-768x430.png new file mode 100644 index 000000000..71388c16e Binary files /dev/null and b/wp-content/uploads/2025/11/image-28-768x430.png differ diff --git a/wp-content/uploads/2025/11/image-28.png b/wp-content/uploads/2025/11/image-28.png new file mode 100644 index 000000000..90ee9bb60 Binary files /dev/null and b/wp-content/uploads/2025/11/image-28.png differ diff --git a/wp-content/uploads/2025/11/image-29-150x150.png b/wp-content/uploads/2025/11/image-29-150x150.png new file mode 100644 index 000000000..473b0ec9c Binary files /dev/null and b/wp-content/uploads/2025/11/image-29-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-29-281x300.png b/wp-content/uploads/2025/11/image-29-281x300.png new file mode 100644 index 000000000..dfbc30fbb Binary files /dev/null and b/wp-content/uploads/2025/11/image-29-281x300.png differ diff --git a/wp-content/uploads/2025/11/image-29.png b/wp-content/uploads/2025/11/image-29.png new file mode 100644 index 000000000..da512da52 Binary files /dev/null and b/wp-content/uploads/2025/11/image-29.png differ diff --git a/wp-content/uploads/2025/11/image-3-1024x683.png b/wp-content/uploads/2025/11/image-3-1024x683.png new file mode 100644 index 000000000..1abf87e71 Binary files /dev/null and b/wp-content/uploads/2025/11/image-3-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-3-150x150.png b/wp-content/uploads/2025/11/image-3-150x150.png new file mode 100644 index 000000000..3b91322db Binary files /dev/null and b/wp-content/uploads/2025/11/image-3-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-3-300x200.png b/wp-content/uploads/2025/11/image-3-300x200.png new file mode 100644 index 000000000..79d10f7e9 Binary files /dev/null and b/wp-content/uploads/2025/11/image-3-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-3-768x512.png b/wp-content/uploads/2025/11/image-3-768x512.png new file mode 100644 index 000000000..9d4131fc4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-3-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-3.png b/wp-content/uploads/2025/11/image-3.png new file mode 100644 index 000000000..9c1f40c44 Binary files /dev/null and b/wp-content/uploads/2025/11/image-3.png differ diff --git a/wp-content/uploads/2025/11/image-30-1024x683.png b/wp-content/uploads/2025/11/image-30-1024x683.png new file mode 100644 index 000000000..683531fc1 Binary files /dev/null and b/wp-content/uploads/2025/11/image-30-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-30-150x150.png b/wp-content/uploads/2025/11/image-30-150x150.png new file mode 100644 index 000000000..e99bc88d5 Binary files /dev/null and b/wp-content/uploads/2025/11/image-30-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-30-300x200.png b/wp-content/uploads/2025/11/image-30-300x200.png new file mode 100644 index 000000000..2e7bf613d Binary files /dev/null and b/wp-content/uploads/2025/11/image-30-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-30-768x512.png b/wp-content/uploads/2025/11/image-30-768x512.png new file mode 100644 index 000000000..10981ed07 Binary files /dev/null and b/wp-content/uploads/2025/11/image-30-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-30.png b/wp-content/uploads/2025/11/image-30.png new file mode 100644 index 000000000..fcc8d7bb1 Binary files /dev/null and b/wp-content/uploads/2025/11/image-30.png differ diff --git a/wp-content/uploads/2025/11/image-300x200.png b/wp-content/uploads/2025/11/image-300x200.png new file mode 100644 index 000000000..43216ca09 Binary files /dev/null and b/wp-content/uploads/2025/11/image-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-31-150x150.png b/wp-content/uploads/2025/11/image-31-150x150.png new file mode 100644 index 000000000..5c4d8bdd2 Binary files /dev/null and b/wp-content/uploads/2025/11/image-31-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-31-189x300.png b/wp-content/uploads/2025/11/image-31-189x300.png new file mode 100644 index 000000000..e9c8fd37d Binary files /dev/null and b/wp-content/uploads/2025/11/image-31-189x300.png differ diff --git a/wp-content/uploads/2025/11/image-31.png b/wp-content/uploads/2025/11/image-31.png new file mode 100644 index 000000000..a6753462e Binary files /dev/null and b/wp-content/uploads/2025/11/image-31.png differ diff --git a/wp-content/uploads/2025/11/image-4-1024x683.png b/wp-content/uploads/2025/11/image-4-1024x683.png new file mode 100644 index 000000000..33e5a1132 Binary files /dev/null and b/wp-content/uploads/2025/11/image-4-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-4-150x150.png b/wp-content/uploads/2025/11/image-4-150x150.png new file mode 100644 index 000000000..3d02aecf8 Binary files /dev/null and b/wp-content/uploads/2025/11/image-4-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-4-300x200.png b/wp-content/uploads/2025/11/image-4-300x200.png new file mode 100644 index 000000000..251088e62 Binary files /dev/null and b/wp-content/uploads/2025/11/image-4-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-4-768x512.png b/wp-content/uploads/2025/11/image-4-768x512.png new file mode 100644 index 000000000..d20f9edce Binary files /dev/null and b/wp-content/uploads/2025/11/image-4-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-4.png b/wp-content/uploads/2025/11/image-4.png new file mode 100644 index 000000000..00c9dc64a Binary files /dev/null and b/wp-content/uploads/2025/11/image-4.png differ diff --git a/wp-content/uploads/2025/11/image-5-150x150.png b/wp-content/uploads/2025/11/image-5-150x150.png new file mode 100644 index 000000000..b278936d5 Binary files /dev/null and b/wp-content/uploads/2025/11/image-5-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-5-200x300.png b/wp-content/uploads/2025/11/image-5-200x300.png new file mode 100644 index 000000000..922ed890c Binary files /dev/null and b/wp-content/uploads/2025/11/image-5-200x300.png differ diff --git a/wp-content/uploads/2025/11/image-5-683x1024.png b/wp-content/uploads/2025/11/image-5-683x1024.png new file mode 100644 index 000000000..77a6a59ca Binary files /dev/null and b/wp-content/uploads/2025/11/image-5-683x1024.png differ diff --git a/wp-content/uploads/2025/11/image-5-768x1152.png b/wp-content/uploads/2025/11/image-5-768x1152.png new file mode 100644 index 000000000..5f027821f Binary files /dev/null and b/wp-content/uploads/2025/11/image-5-768x1152.png differ diff --git a/wp-content/uploads/2025/11/image-5.png b/wp-content/uploads/2025/11/image-5.png new file mode 100644 index 000000000..7f9ff3553 Binary files /dev/null and b/wp-content/uploads/2025/11/image-5.png differ diff --git a/wp-content/uploads/2025/11/image-6-1024x574.png b/wp-content/uploads/2025/11/image-6-1024x574.png new file mode 100644 index 000000000..4d3ed6041 Binary files /dev/null and b/wp-content/uploads/2025/11/image-6-1024x574.png differ diff --git a/wp-content/uploads/2025/11/image-6-150x150.png b/wp-content/uploads/2025/11/image-6-150x150.png new file mode 100644 index 000000000..7e64630e1 Binary files /dev/null and b/wp-content/uploads/2025/11/image-6-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-6-300x168.png b/wp-content/uploads/2025/11/image-6-300x168.png new file mode 100644 index 000000000..527a3bbe4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-6-300x168.png differ diff --git a/wp-content/uploads/2025/11/image-6-768x430.png b/wp-content/uploads/2025/11/image-6-768x430.png new file mode 100644 index 000000000..c1ddc94be Binary files /dev/null and b/wp-content/uploads/2025/11/image-6-768x430.png differ diff --git a/wp-content/uploads/2025/11/image-6.png b/wp-content/uploads/2025/11/image-6.png new file mode 100644 index 000000000..f56663beb Binary files /dev/null and b/wp-content/uploads/2025/11/image-6.png differ diff --git a/wp-content/uploads/2025/11/image-7-1024x683.png b/wp-content/uploads/2025/11/image-7-1024x683.png new file mode 100644 index 000000000..2fe141ca4 Binary files /dev/null and b/wp-content/uploads/2025/11/image-7-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-7-150x150.png b/wp-content/uploads/2025/11/image-7-150x150.png new file mode 100644 index 000000000..750c3c099 Binary files /dev/null and b/wp-content/uploads/2025/11/image-7-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-7-300x200.png b/wp-content/uploads/2025/11/image-7-300x200.png new file mode 100644 index 000000000..aff1a2053 Binary files /dev/null and b/wp-content/uploads/2025/11/image-7-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-7-768x512.png b/wp-content/uploads/2025/11/image-7-768x512.png new file mode 100644 index 000000000..588299461 Binary files /dev/null and b/wp-content/uploads/2025/11/image-7-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-7.png b/wp-content/uploads/2025/11/image-7.png new file mode 100644 index 000000000..23027642e Binary files /dev/null and b/wp-content/uploads/2025/11/image-7.png differ diff --git a/wp-content/uploads/2025/11/image-768x512.png b/wp-content/uploads/2025/11/image-768x512.png new file mode 100644 index 000000000..ea856148f Binary files /dev/null and b/wp-content/uploads/2025/11/image-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-8-1024x683.png b/wp-content/uploads/2025/11/image-8-1024x683.png new file mode 100644 index 000000000..8f06acd08 Binary files /dev/null and b/wp-content/uploads/2025/11/image-8-1024x683.png differ diff --git a/wp-content/uploads/2025/11/image-8-150x150.png b/wp-content/uploads/2025/11/image-8-150x150.png new file mode 100644 index 000000000..089f9d091 Binary files /dev/null and b/wp-content/uploads/2025/11/image-8-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-8-300x200.png b/wp-content/uploads/2025/11/image-8-300x200.png new file mode 100644 index 000000000..ea9da45b0 Binary files /dev/null and b/wp-content/uploads/2025/11/image-8-300x200.png differ diff --git a/wp-content/uploads/2025/11/image-8-768x512.png b/wp-content/uploads/2025/11/image-8-768x512.png new file mode 100644 index 000000000..d01f7adf5 Binary files /dev/null and b/wp-content/uploads/2025/11/image-8-768x512.png differ diff --git a/wp-content/uploads/2025/11/image-8.png b/wp-content/uploads/2025/11/image-8.png new file mode 100644 index 000000000..a6b473fbe Binary files /dev/null and b/wp-content/uploads/2025/11/image-8.png differ diff --git a/wp-content/uploads/2025/11/image-9-150x150.png b/wp-content/uploads/2025/11/image-9-150x150.png new file mode 100644 index 000000000..daa249754 Binary files /dev/null and b/wp-content/uploads/2025/11/image-9-150x150.png differ diff --git a/wp-content/uploads/2025/11/image-9-300x300.png b/wp-content/uploads/2025/11/image-9-300x300.png new file mode 100644 index 000000000..9c99d1a04 Binary files /dev/null and b/wp-content/uploads/2025/11/image-9-300x300.png differ diff --git a/wp-content/uploads/2025/11/image-9-768x768.png b/wp-content/uploads/2025/11/image-9-768x768.png new file mode 100644 index 000000000..56c4be735 Binary files /dev/null and b/wp-content/uploads/2025/11/image-9-768x768.png differ diff --git a/wp-content/uploads/2025/11/image-9.png b/wp-content/uploads/2025/11/image-9.png new file mode 100644 index 000000000..5a5fd612a Binary files /dev/null and b/wp-content/uploads/2025/11/image-9.png differ diff --git a/wp-content/uploads/2025/11/image.png b/wp-content/uploads/2025/11/image.png new file mode 100644 index 000000000..81c5b2626 Binary files /dev/null and b/wp-content/uploads/2025/11/image.png differ diff --git a/wp-content/uploads/2025/11/politiska-motioner-lj-vo.pdf b/wp-content/uploads/2025/11/politiska-motioner-lj-vo.pdf new file mode 100644 index 000000000..5cfcf27d7 Binary files /dev/null and b/wp-content/uploads/2025/11/politiska-motioner-lj-vo.pdf differ diff --git a/wp-content/uploads/2025/12/image-1-1024x683.png b/wp-content/uploads/2025/12/image-1-1024x683.png new file mode 100644 index 000000000..be225706e Binary files /dev/null and b/wp-content/uploads/2025/12/image-1-1024x683.png differ diff --git a/wp-content/uploads/2025/12/image-1-150x150.png b/wp-content/uploads/2025/12/image-1-150x150.png new file mode 100644 index 000000000..8bf642b2f Binary files /dev/null and b/wp-content/uploads/2025/12/image-1-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-1-300x200.png b/wp-content/uploads/2025/12/image-1-300x200.png new file mode 100644 index 000000000..9ec3f7dde Binary files /dev/null and b/wp-content/uploads/2025/12/image-1-300x200.png differ diff --git a/wp-content/uploads/2025/12/image-1-768x512.png b/wp-content/uploads/2025/12/image-1-768x512.png new file mode 100644 index 000000000..d75bf572a Binary files /dev/null and b/wp-content/uploads/2025/12/image-1-768x512.png differ diff --git a/wp-content/uploads/2025/12/image-1.png b/wp-content/uploads/2025/12/image-1.png new file mode 100644 index 000000000..c5c680fea Binary files /dev/null and b/wp-content/uploads/2025/12/image-1.png differ diff --git a/wp-content/uploads/2025/12/image-1024x576.png b/wp-content/uploads/2025/12/image-1024x576.png new file mode 100644 index 000000000..78368a091 Binary files /dev/null and b/wp-content/uploads/2025/12/image-1024x576.png differ diff --git a/wp-content/uploads/2025/12/image-150x150.png b/wp-content/uploads/2025/12/image-150x150.png new file mode 100644 index 000000000..197fe33ce Binary files /dev/null and b/wp-content/uploads/2025/12/image-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-2-1024x683.png b/wp-content/uploads/2025/12/image-2-1024x683.png new file mode 100644 index 000000000..a8740efb1 Binary files /dev/null and b/wp-content/uploads/2025/12/image-2-1024x683.png differ diff --git a/wp-content/uploads/2025/12/image-2-150x150.png b/wp-content/uploads/2025/12/image-2-150x150.png new file mode 100644 index 000000000..080e6c092 Binary files /dev/null and b/wp-content/uploads/2025/12/image-2-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-2-300x200.png b/wp-content/uploads/2025/12/image-2-300x200.png new file mode 100644 index 000000000..55362dd77 Binary files /dev/null and b/wp-content/uploads/2025/12/image-2-300x200.png differ diff --git a/wp-content/uploads/2025/12/image-2-768x512.png b/wp-content/uploads/2025/12/image-2-768x512.png new file mode 100644 index 000000000..525a21738 Binary files /dev/null and b/wp-content/uploads/2025/12/image-2-768x512.png differ diff --git a/wp-content/uploads/2025/12/image-2.png b/wp-content/uploads/2025/12/image-2.png new file mode 100644 index 000000000..09bc17035 Binary files /dev/null and b/wp-content/uploads/2025/12/image-2.png differ diff --git a/wp-content/uploads/2025/12/image-3-1024x683.png b/wp-content/uploads/2025/12/image-3-1024x683.png new file mode 100644 index 000000000..0b533069f Binary files /dev/null and b/wp-content/uploads/2025/12/image-3-1024x683.png differ diff --git a/wp-content/uploads/2025/12/image-3-150x150.png b/wp-content/uploads/2025/12/image-3-150x150.png new file mode 100644 index 000000000..66b3b3ed9 Binary files /dev/null and b/wp-content/uploads/2025/12/image-3-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-3-300x200.png b/wp-content/uploads/2025/12/image-3-300x200.png new file mode 100644 index 000000000..711ebdf1b Binary files /dev/null and b/wp-content/uploads/2025/12/image-3-300x200.png differ diff --git a/wp-content/uploads/2025/12/image-3-768x512.png b/wp-content/uploads/2025/12/image-3-768x512.png new file mode 100644 index 000000000..d208774ca Binary files /dev/null and b/wp-content/uploads/2025/12/image-3-768x512.png differ diff --git a/wp-content/uploads/2025/12/image-3.png b/wp-content/uploads/2025/12/image-3.png new file mode 100644 index 000000000..3f5d8245c Binary files /dev/null and b/wp-content/uploads/2025/12/image-3.png differ diff --git a/wp-content/uploads/2025/12/image-300x169.png b/wp-content/uploads/2025/12/image-300x169.png new file mode 100644 index 000000000..b044bf455 Binary files /dev/null and b/wp-content/uploads/2025/12/image-300x169.png differ diff --git a/wp-content/uploads/2025/12/image-4-1024x683.png b/wp-content/uploads/2025/12/image-4-1024x683.png new file mode 100644 index 000000000..80bcd41e4 Binary files /dev/null and b/wp-content/uploads/2025/12/image-4-1024x683.png differ diff --git a/wp-content/uploads/2025/12/image-4-150x150.png b/wp-content/uploads/2025/12/image-4-150x150.png new file mode 100644 index 000000000..fc2848262 Binary files /dev/null and b/wp-content/uploads/2025/12/image-4-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-4-300x200.png b/wp-content/uploads/2025/12/image-4-300x200.png new file mode 100644 index 000000000..f78b39e08 Binary files /dev/null and b/wp-content/uploads/2025/12/image-4-300x200.png differ diff --git a/wp-content/uploads/2025/12/image-4-768x512.png b/wp-content/uploads/2025/12/image-4-768x512.png new file mode 100644 index 000000000..7ac2b824c Binary files /dev/null and b/wp-content/uploads/2025/12/image-4-768x512.png differ diff --git a/wp-content/uploads/2025/12/image-4.png b/wp-content/uploads/2025/12/image-4.png new file mode 100644 index 000000000..1efd375b8 Binary files /dev/null and b/wp-content/uploads/2025/12/image-4.png differ diff --git a/wp-content/uploads/2025/12/image-5-150x150.png b/wp-content/uploads/2025/12/image-5-150x150.png new file mode 100644 index 000000000..e4e48e4fc Binary files /dev/null and b/wp-content/uploads/2025/12/image-5-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-5-300x286.png b/wp-content/uploads/2025/12/image-5-300x286.png new file mode 100644 index 000000000..d916eec6d Binary files /dev/null and b/wp-content/uploads/2025/12/image-5-300x286.png differ diff --git a/wp-content/uploads/2025/12/image-5.png b/wp-content/uploads/2025/12/image-5.png new file mode 100644 index 000000000..3c841dfea Binary files /dev/null and b/wp-content/uploads/2025/12/image-5.png differ diff --git a/wp-content/uploads/2025/12/image-6-150x150.png b/wp-content/uploads/2025/12/image-6-150x150.png new file mode 100644 index 000000000..7ea01f31c Binary files /dev/null and b/wp-content/uploads/2025/12/image-6-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-6-183x300.png b/wp-content/uploads/2025/12/image-6-183x300.png new file mode 100644 index 000000000..544e22f01 Binary files /dev/null and b/wp-content/uploads/2025/12/image-6-183x300.png differ diff --git a/wp-content/uploads/2025/12/image-6-623x1024.png b/wp-content/uploads/2025/12/image-6-623x1024.png new file mode 100644 index 000000000..74c5a8ffa Binary files /dev/null and b/wp-content/uploads/2025/12/image-6-623x1024.png differ diff --git a/wp-content/uploads/2025/12/image-6.png b/wp-content/uploads/2025/12/image-6.png new file mode 100644 index 000000000..da8dde1f9 Binary files /dev/null and b/wp-content/uploads/2025/12/image-6.png differ diff --git a/wp-content/uploads/2025/12/image-7-150x150.png b/wp-content/uploads/2025/12/image-7-150x150.png new file mode 100644 index 000000000..d1588add4 Binary files /dev/null and b/wp-content/uploads/2025/12/image-7-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-7-171x300.png b/wp-content/uploads/2025/12/image-7-171x300.png new file mode 100644 index 000000000..3247d0a48 Binary files /dev/null and b/wp-content/uploads/2025/12/image-7-171x300.png differ diff --git a/wp-content/uploads/2025/12/image-7-585x1024.png b/wp-content/uploads/2025/12/image-7-585x1024.png new file mode 100644 index 000000000..e6529a5df Binary files /dev/null and b/wp-content/uploads/2025/12/image-7-585x1024.png differ diff --git a/wp-content/uploads/2025/12/image-7.png b/wp-content/uploads/2025/12/image-7.png new file mode 100644 index 000000000..f6e5cee21 Binary files /dev/null and b/wp-content/uploads/2025/12/image-7.png differ diff --git a/wp-content/uploads/2025/12/image-768x432.png b/wp-content/uploads/2025/12/image-768x432.png new file mode 100644 index 000000000..67e701c22 Binary files /dev/null and b/wp-content/uploads/2025/12/image-768x432.png differ diff --git a/wp-content/uploads/2025/12/image-8-150x150.png b/wp-content/uploads/2025/12/image-8-150x150.png new file mode 100644 index 000000000..9136ae614 Binary files /dev/null and b/wp-content/uploads/2025/12/image-8-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-8-169x300.png b/wp-content/uploads/2025/12/image-8-169x300.png new file mode 100644 index 000000000..2bb09c508 Binary files /dev/null and b/wp-content/uploads/2025/12/image-8-169x300.png differ diff --git a/wp-content/uploads/2025/12/image-8-576x1024.png b/wp-content/uploads/2025/12/image-8-576x1024.png new file mode 100644 index 000000000..a82e14de3 Binary files /dev/null and b/wp-content/uploads/2025/12/image-8-576x1024.png differ diff --git a/wp-content/uploads/2025/12/image-8.png b/wp-content/uploads/2025/12/image-8.png new file mode 100644 index 000000000..c7cac0dd6 Binary files /dev/null and b/wp-content/uploads/2025/12/image-8.png differ diff --git a/wp-content/uploads/2025/12/image-9-150x150.png b/wp-content/uploads/2025/12/image-9-150x150.png new file mode 100644 index 000000000..e4e48e4fc Binary files /dev/null and b/wp-content/uploads/2025/12/image-9-150x150.png differ diff --git a/wp-content/uploads/2025/12/image-9-300x286.png b/wp-content/uploads/2025/12/image-9-300x286.png new file mode 100644 index 000000000..d916eec6d Binary files /dev/null and b/wp-content/uploads/2025/12/image-9-300x286.png differ diff --git a/wp-content/uploads/2025/12/image-9.png b/wp-content/uploads/2025/12/image-9.png new file mode 100644 index 000000000..3c841dfea Binary files /dev/null and b/wp-content/uploads/2025/12/image-9.png differ diff --git a/wp-content/uploads/2025/12/image.png b/wp-content/uploads/2025/12/image.png new file mode 100644 index 000000000..11e21c253 Binary files /dev/null and b/wp-content/uploads/2025/12/image.png differ diff --git a/wp-content/uploads/blocksy/css/global.css b/wp-content/uploads/blocksy/css/global.css index e405d32ab..35661450c 100644 --- a/wp-content/uploads/blocksy/css/global.css +++ b/wp-content/uploads/blocksy/css/global.css @@ -1 +1 @@ -[data-header*="type-1"] .ct-header [data-id="logo"] .site-title {--theme-font-weight:700;--theme-font-size:25px;--theme-line-height:1.5;--theme-link-initial-color:var(--theme-palette-color-4);} [data-header*="type-1"] .ct-header [data-sticky] [data-id="logo"] {--logo-sticky-shrink:0.7;} [data-header*="type-1"] .ct-header [data-id="logo"] .site-description {--theme-font-weight:500;--theme-font-size:13px;} [data-header*="type-1"] .ct-header [data-id="logo"] {--horizontal-alignment:center;} [data-header*="type-1"] .ct-header [data-id="menu"] > ul > li > a {--theme-font-weight:700;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;--theme-link-initial-color:var(--theme-text-color);--theme-link-hover-color:#ffffff;} [data-header*="type-1"] .ct-header [data-id="menu"] .sub-menu .ct-menu-link {--theme-link-initial-color:var(--theme-palette-color-8);--theme-font-weight:500;--theme-font-size:12px;} [data-header*="type-1"] .ct-header [data-id="menu"] .sub-menu {--dropdown-divider:1px dashed rgba(255, 255, 255, 0.1);--theme-box-shadow:0px 10px 20px rgba(41, 51, 61, 0.1);--theme-border-radius:0px 0px 2px 2px;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-id="menu"] .sub-menu {--sticky-state-dropdown-top-offset:0px;} [data-header*="type-1"] .ct-header [data-row*="middle"] {--height:120px;background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-row*="middle"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="middle"] {background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="middle"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] [data-id="mobile-menu"] {--theme-font-weight:700;--theme-font-size:20px;--theme-link-initial-color:#ffffff;--mobile-menu-divider:none;} [data-header*="type-1"] #offcanvas {--theme-box-shadow:0px 0px 70px rgba(0, 0, 0, 0.35);--side-panel-width:500px;--panel-content-height:100%;} [data-header*="type-1"] #offcanvas .ct-panel-inner {background-color:rgba(18, 21, 25, 0.98);} [data-header*="type-1"] [data-id="search"] .ct-label {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-header*="type-1"] #search-modal .ct-search-results {--theme-font-weight:500;--theme-font-size:14px;--theme-line-height:1.4;} [data-header*="type-1"] #search-modal .ct-search-form {--theme-link-initial-color:#ffffff;--theme-form-text-initial-color:#ffffff;--theme-form-text-focus-color:#ffffff;--theme-form-field-border-initial-color:rgba(255, 255, 255, 0.2);--theme-button-text-initial-color:rgba(255, 255, 255, 0.7);--theme-button-text-hover-color:#ffffff;--theme-button-background-initial-color:var(--theme-palette-color-1);--theme-button-background-hover-color:var(--theme-palette-color-1);} [data-header*="type-1"] #search-modal {background-color:rgba(18, 21, 25, 0.98);} [data-header*="type-1"] .ct-header [data-row*="top"] {--height:50px;background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-row*="top"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="top"] {background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="top"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] [data-id="trigger"] {--theme-icon-size:18px;--toggle-button-radius:3px;} [data-header*="type-1"] [data-id="trigger"]:not([data-design="simple"]) {--toggle-button-padding:10px;} [data-header*="type-1"] [data-id="trigger"] .ct-label {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-header*="type-1"] {--header-height:170px;--header-sticky-height:170px;--header-sticky-animation-speed:0.2s;--header-sticky-offset:0px;} [data-header*="type-1"] .ct-header {background-image:none;} [data-header*="type-1"] [data-sticky*="yes"] {background-image:none;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] > div {--container-spacing:25px;--theme-border:none;--theme-border-top:none;--theme-border-bottom:none;--grid-template-columns:initial;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] .widget-title {--theme-font-size:16px;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] {--theme-border-top:none;--theme-border-bottom:none;background-color:transparent;} [data-footer*="type-1"] [data-id="copyright"] {--theme-font-weight:400;--theme-font-size:15px;--theme-line-height:1.3;} [data-footer*="type-1"][data-footer*="reveal"] .site-main {--footer-box-shadow:0px 30px 50px rgba(0, 0, 0, 0.1);} [data-footer*="type-1"] .ct-footer {background-color:var(--theme-palette-color-6);} [data-footer*="type-1"] footer.ct-container {--footer-container-bottom-offset:50px;--footer-container-padding:0px 35px;}:root {--theme-font-family:var(--theme-font-stack-default);--theme-font-weight:400;--theme-text-transform:none;--theme-text-decoration:none;--theme-font-size:16px;--theme-line-height:1.65;--theme-letter-spacing:0em;--theme-button-font-weight:500;--theme-button-font-size:15px;--has-classic-forms:var(--true);--has-modern-forms:var(--false);--theme-form-field-border-initial-color:var(--theme-border-color);--theme-form-field-border-focus-color:var(--theme-palette-color-1);--theme-form-selection-field-initial-color:var(--theme-border-color);--theme-form-selection-field-active-color:var(--theme-palette-color-1);--theme-palette-color-1:#2872fa;--theme-palette-color-2:#1559ed;--theme-palette-color-3:#3A4F66;--theme-palette-color-4:#192a3d;--theme-palette-color-5:#e1e8ed;--theme-palette-color-6:#f2f5f7;--theme-palette-color-7:#FAFBFC;--theme-palette-color-8:#ffffff;--theme-text-color:var(--theme-palette-color-3);--theme-link-initial-color:var(--theme-palette-color-1);--theme-link-hover-color:var(--theme-palette-color-2);--theme-selection-text-color:#ffffff;--theme-selection-background-color:var(--theme-palette-color-1);--theme-border-color:var(--theme-palette-color-5);--theme-headings-color:var(--theme-palette-color-4);--theme-content-spacing:1.5em;--theme-button-min-height:40px;--theme-button-shadow:none;--theme-button-transform:none;--theme-button-text-initial-color:#ffffff;--theme-button-text-hover-color:#ffffff;--theme-button-background-initial-color:var(--theme-palette-color-1);--theme-button-background-hover-color:var(--theme-palette-color-2);--theme-button-border:none;--theme-button-padding:5px 20px;--theme-normal-container-max-width:1290px;--theme-content-vertical-spacing:60px;--theme-container-edge-spacing:90vw;--theme-narrow-container-max-width:750px;--theme-wide-offset:130px;}h1 {--theme-font-weight:700;--theme-font-size:40px;--theme-line-height:1.5;}h2 {--theme-font-weight:700;--theme-font-size:35px;--theme-line-height:1.5;}h3 {--theme-font-weight:700;--theme-font-size:30px;--theme-line-height:1.5;}h4 {--theme-font-weight:700;--theme-font-size:25px;--theme-line-height:1.5;}h5 {--theme-font-weight:700;--theme-font-size:20px;--theme-line-height:1.5;}h6 {--theme-font-weight:700;--theme-font-size:16px;--theme-line-height:1.5;}.wp-block-pullquote {--theme-font-family:Georgia;--theme-font-weight:600;--theme-font-size:25px;}pre, code, samp, kbd {--theme-font-family:monospace;--theme-font-weight:400;--theme-font-size:16px;}figcaption {--theme-font-size:14px;}.ct-sidebar .widget-title {--theme-font-size:20px;}.ct-breadcrumbs {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;}body {background-color:var(--theme-palette-color-7);background-image:none;} [data-prefix="single_blog_post"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="single_blog_post"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="categories"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="categories"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="search"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="search"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="author"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="author"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="author"] .hero-section[data-type="type-2"] {background-color:var(--theme-palette-color-6);background-image:none;--container-padding:50px 0px;} [data-prefix="single_page"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="single_page"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="tribe_events_single"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="tribe_events_single"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="tribe_events_archive"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="tribe_events_archive"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="blog"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="blog"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="blog"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="blog"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);} [data-prefix="categories"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="categories"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="categories"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="categories"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);} [data-prefix="author"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="author"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="author"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="author"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);} [data-prefix="search"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="search"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="search"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="search"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);}form textarea {--theme-form-field-height:170px;}.ct-sidebar {--theme-link-initial-color:var(--theme-text-color);}aside[data-type="type-3"] {--theme-border:1px solid rgba(224, 229, 235, 0.8);}.ct-back-to-top {--theme-icon-color:#ffffff;--theme-icon-hover-color:#ffffff;} [data-prefix="single_blog_post"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);} [data-prefix="single_page"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);} [data-prefix="tribe_events_single"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);} [data-prefix="tribe_events_archive"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);}@media (max-width: 999.98px) { [data-header*="type-1"] .ct-header [data-row*="middle"] {--height:70px;} [data-header*="type-1"] #offcanvas {--side-panel-width:65vw;} [data-header*="type-1"] {--header-height:70px;--header-sticky-height:70px;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] > div {--grid-template-columns:initial;} [data-footer*="type-1"] footer.ct-container {--footer-container-padding:0vw 4vw;} [data-prefix="blog"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));} [data-prefix="categories"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));} [data-prefix="author"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));} [data-prefix="search"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));}}@media (max-width: 689.98px) {[data-header*="type-1"] #offcanvas {--side-panel-width:90vw;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] > div {--container-spacing:15px;--grid-template-columns:initial;} [data-footer*="type-1"] footer.ct-container {--footer-container-padding:0vw 5vw;} [data-prefix="blog"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="blog"] .entry-card .entry-title {--theme-font-size:18px;} [data-prefix="categories"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="categories"] .entry-card .entry-title {--theme-font-size:18px;} [data-prefix="author"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="author"] .entry-card .entry-title {--theme-font-size:18px;} [data-prefix="search"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="search"] .entry-card .entry-title {--theme-font-size:18px;}:root {--theme-content-vertical-spacing:50px;--theme-container-edge-spacing:88vw;}} \ No newline at end of file +[data-header*="type-1"] .ct-header [data-id="logo"] .site-title {--theme-font-weight:700;--theme-font-size:25px;--theme-line-height:1.5;--theme-link-initial-color:var(--theme-palette-color-4);} [data-header*="type-1"] .ct-header [data-sticky] [data-id="logo"] {--logo-sticky-shrink:0.7;} [data-header*="type-1"] .ct-header [data-id="logo"] .site-description {--theme-font-weight:500;--theme-font-size:13px;} [data-header*="type-1"] .ct-header [data-id="logo"] {--horizontal-alignment:center;} [data-header*="type-1"] .ct-header [data-id="menu"] > ul > li > a {--theme-font-weight:700;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;--theme-link-initial-color:var(--theme-text-color);--theme-link-hover-color:#ffffff;} [data-header*="type-1"] .ct-header [data-id="menu"] .sub-menu .ct-menu-link {--theme-link-initial-color:var(--theme-palette-color-8);--theme-font-weight:500;--theme-font-size:12px;} [data-header*="type-1"] .ct-header [data-id="menu"] .sub-menu {--dropdown-divider:1px dashed rgba(255, 255, 255, 0.1);--theme-box-shadow:0px 10px 20px rgba(41, 51, 61, 0.1);--theme-border-radius:0px 0px 2px 2px;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-id="menu"] .sub-menu {--sticky-state-dropdown-top-offset:0px;} [data-header*="type-1"] .ct-header [data-row*="middle"] {--height:120px;background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-row*="middle"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="middle"] {background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="middle"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] [data-id="mobile-menu"] {--theme-font-weight:700;--theme-font-size:20px;--theme-link-initial-color:#ffffff;--mobile-menu-divider:none;} [data-header*="type-1"] #offcanvas {--theme-box-shadow:0px 0px 70px rgba(0, 0, 0, 0.35);--side-panel-width:500px;--panel-content-height:100%;} [data-header*="type-1"] #offcanvas .ct-panel-inner {background-color:rgba(18, 21, 25, 0.98);} [data-header*="type-1"] #search-modal .ct-search-results {--theme-font-weight:500;--theme-font-size:14px;--theme-line-height:1.4;} [data-header*="type-1"] #search-modal .ct-search-form {--theme-link-initial-color:#ffffff;--theme-form-text-initial-color:#ffffff;--theme-form-text-focus-color:#ffffff;--theme-form-field-border-initial-color:rgba(255, 255, 255, 0.2);--theme-button-text-initial-color:rgba(255, 255, 255, 0.7);--theme-button-text-hover-color:#ffffff;--theme-button-background-initial-color:var(--theme-palette-color-1);--theme-button-background-hover-color:var(--theme-palette-color-1);} [data-header*="type-1"] #search-modal {background-color:rgba(18, 21, 25, 0.98);} [data-header*="type-1"] .ct-header [data-row*="top"] {--height:50px;background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-row*="top"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="top"] {background-color:var(--theme-palette-color-8);background-image:none;--theme-border-top:none;--theme-border-bottom:none;--theme-box-shadow:none;} [data-header*="type-1"] .ct-header [data-sticky*="yes"] [data-row*="top"] > div {--theme-border-top:none;--theme-border-bottom:none;} [data-header*="type-1"] [data-id="trigger"] {--theme-icon-size:18px;} [data-header*="type-1"] {--header-height:170px;--header-sticky-height:170px;--header-sticky-animation-speed:0.2s;--header-sticky-offset:0px;} [data-header*="type-1"] .ct-header {background-image:none;} [data-header*="type-1"] [data-sticky*="yes"] {background-image:none;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] > div {--container-spacing:25px;--theme-border:none;--theme-border-top:none;--theme-border-bottom:none;--grid-template-columns:initial;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] .widget-title {--theme-font-size:16px;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] {--theme-border-top:none;--theme-border-bottom:none;background-color:transparent;} [data-footer*="type-1"] [data-id="copyright"] {--theme-font-weight:400;--theme-font-size:15px;--theme-line-height:1.3;} [data-footer*="type-1"] .ct-footer {background-color:var(--theme-palette-color-6);}:root {--theme-font-family:var(--theme-font-stack-default);--theme-font-weight:400;--theme-text-transform:none;--theme-text-decoration:none;--theme-font-size:16px;--theme-line-height:1.65;--theme-letter-spacing:0em;--theme-button-font-weight:500;--theme-button-font-size:15px;--has-classic-forms:var(--true);--has-modern-forms:var(--false);--theme-form-field-border-initial-color:var(--theme-border-color);--theme-form-field-border-focus-color:var(--theme-palette-color-1);--theme-form-selection-field-initial-color:var(--theme-border-color);--theme-form-selection-field-active-color:var(--theme-palette-color-1);--theme-palette-color-1:#2872fa;--theme-palette-color-2:#1559ed;--theme-palette-color-3:#3A4F66;--theme-palette-color-4:#192a3d;--theme-palette-color-5:#e1e8ed;--theme-palette-color-6:#f2f5f7;--theme-palette-color-7:#FAFBFC;--theme-palette-color-8:#ffffff;--theme-text-color:var(--theme-palette-color-3);--theme-link-initial-color:var(--theme-palette-color-1);--theme-link-hover-color:var(--theme-palette-color-2);--theme-selection-text-color:#ffffff;--theme-selection-background-color:var(--theme-palette-color-1);--theme-border-color:var(--theme-palette-color-5);--theme-headings-color:var(--theme-palette-color-4);--theme-content-spacing:1.5em;--theme-button-min-height:40px;--theme-button-shadow:none;--theme-button-transform:none;--theme-button-text-initial-color:#ffffff;--theme-button-text-hover-color:#ffffff;--theme-button-background-initial-color:var(--theme-palette-color-1);--theme-button-background-hover-color:var(--theme-palette-color-2);--theme-button-border:none;--theme-button-padding:5px 20px;--theme-normal-container-max-width:1290px;--theme-content-vertical-spacing:60px;--theme-container-edge-spacing:90vw;--theme-narrow-container-max-width:750px;--theme-wide-offset:130px;}h1 {--theme-font-weight:700;--theme-font-size:40px;--theme-line-height:1.5;}h2 {--theme-font-weight:700;--theme-font-size:35px;--theme-line-height:1.5;}h3 {--theme-font-weight:700;--theme-font-size:30px;--theme-line-height:1.5;}h4 {--theme-font-weight:700;--theme-font-size:25px;--theme-line-height:1.5;}h5 {--theme-font-weight:700;--theme-font-size:20px;--theme-line-height:1.5;}h6 {--theme-font-weight:700;--theme-font-size:16px;--theme-line-height:1.5;}.wp-block-pullquote {--theme-font-family:Georgia;--theme-font-weight:600;--theme-font-size:25px;}pre, code, samp, kbd {--theme-font-family:monospace;--theme-font-weight:400;--theme-font-size:16px;}figcaption {--theme-font-size:14px;}.ct-sidebar .widget-title {--theme-font-size:20px;}.ct-breadcrumbs {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;}body {background-color:var(--theme-palette-color-7);background-image:none;} [data-prefix="single_blog_post"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="single_blog_post"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="categories"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="categories"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="search"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="search"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="author"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="author"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="author"] .hero-section[data-type="type-2"] {background-color:var(--theme-palette-color-6);background-image:none;--container-padding:50px 0px;} [data-prefix="single_page"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="single_page"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="tribe_events_single"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="tribe_events_single"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="tribe_events_archive"] .entry-header .page-title {--theme-font-size:30px;} [data-prefix="tribe_events_archive"] .entry-header .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;--theme-line-height:1.3;} [data-prefix="blog"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="blog"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="blog"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="blog"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);} [data-prefix="categories"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="categories"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="categories"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="categories"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);} [data-prefix="author"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="author"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="author"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="author"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);} [data-prefix="search"] .entries {--grid-template-columns:repeat(3, minmax(0, 1fr));} [data-prefix="search"] .entry-card .entry-title {--theme-font-size:20px;--theme-line-height:1.3;} [data-prefix="search"] .entry-card .entry-meta {--theme-font-weight:600;--theme-text-transform:uppercase;--theme-font-size:12px;} [data-prefix="search"] .entry-card {background-color:var(--theme-palette-color-8);--theme-box-shadow:0px 12px 18px -6px rgba(34, 56, 101, 0.04);}form textarea {--theme-form-field-height:170px;}.ct-sidebar {--theme-link-initial-color:var(--theme-text-color);}.ct-back-to-top {--theme-icon-color:#ffffff;--theme-icon-hover-color:#ffffff;} [data-prefix="single_blog_post"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);} [data-prefix="single_page"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);} [data-prefix="tribe_events_single"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);} [data-prefix="tribe_events_archive"] [class*="ct-container"] > article[class*="post"] {--has-boxed:var(--false);--has-wide:var(--true);}@media (max-width: 999.98px) { [data-header*="type-1"] .ct-header [data-row*="middle"] {--height:70px;} [data-header*="type-1"] #offcanvas {--side-panel-width:65vw;} [data-header*="type-1"] {--header-height:70px;--header-sticky-height:70px;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] > div {--grid-template-columns:initial;} [data-prefix="blog"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));} [data-prefix="categories"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));} [data-prefix="author"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));} [data-prefix="search"] .entries {--grid-template-columns:repeat(2, minmax(0, 1fr));}}@media (max-width: 689.98px) {[data-header*="type-1"] #offcanvas {--side-panel-width:90vw;} [data-footer*="type-1"] .ct-footer [data-row*="bottom"] > div {--container-spacing:15px;--grid-template-columns:initial;} [data-prefix="blog"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="blog"] .entry-card .entry-title {--theme-font-size:18px;} [data-prefix="categories"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="categories"] .entry-card .entry-title {--theme-font-size:18px;} [data-prefix="author"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="author"] .entry-card .entry-title {--theme-font-size:18px;} [data-prefix="search"] .entries {--grid-template-columns:repeat(1, minmax(0, 1fr));} [data-prefix="search"] .entry-card .entry-title {--theme-font-size:18px;}:root {--theme-content-vertical-spacing:50px;--theme-container-edge-spacing:88vw;}} \ No newline at end of file