credentials();$H=Driver::connect($hc[0],$hc[1],$hc[2]);return(is_object($H)?$H:null);}function idf_unescape($u){if(!preg_match('~^[`\'"[]~',$u))return$u;$pg=substr($u,-1);return str_replace($pg.$pg,$pg,substr($u,1,-1));}function q($P){return connection()->quote($P);}function idx($Ga,$x,$l=null){return($Ga&&array_key_exists($x,$Ga)?$Ga[$x]:$l);}function number($W){return preg_replace('~[^0-9]+~','',$W);}function int_type(){return'(tiny|small|medium|big)?int(eger|\d)?';}function number_type(){return'(^('.int_type().'|decimal|numeric|number|real|(binary_|half_|scaled_)?float\d?|(binary_)?double( precision)?|(small)?money)$)';}function text_type(){return'char|text'.(JUSH=="sql"?'|enum|set':'');}function is_user_type($T){return in_array($T,idx(driver()->structuredTypes(),lang(0),array()));}function full_type_sql(array$n){$T=$n["type"];return(is_user_type($T)?idf_escape($T).substr($n["full_type"],strlen($T)):$n["full_type"]);}function is_searchable(array$n,array$W){if(!isset($n["privileges"]["where"]))return false;if(preg_match('~NULL$~',$W["op"]))return true;$T=$n["type"];$Mk=$W["val"];$Za='binary$|bytea|raw|image|bfile|^vector$'.(JUSH=="mssql"?'|^timestamp$':'|^bit').(JUSH=="oracle"?'|^blob|^long|rowid':'');if(preg_match("~$Za~",$T))return false;if(preg_match(number_type(),$T)){$Xh='-?\d+(\.\d+)?';$th='';if(preg_match('~IN$~',$W["op"])){$Mk=preg_replace('~^\s*\(\s*(.*?)\s*\)\s*$~s','\1',$Mk);$th="( *, *$Xh)*";}elseif($W["op"]=="BETWEEN")$th="\\s+AND\\s+$Xh";return(bool)preg_match('~^'.$Xh.$th.'$~i',$Mk);}if(preg_match('~^(small)?date|^timestamp~',$T))return(bool)preg_match('~^\d+-\d+-\d+~',$Mk);if(preg_match('~^time~',$T))return(bool)preg_match('~^\d+:\d+~',$Mk);if(preg_match('~^bool~',$T)||(JUSH=="mssql"&&$T=="bit"))return(bool)preg_match('~^(t|f|true|false|[01])$~i',$Mk);return true;}function remove_slashes(array$Y,$Zd=false){$H=array();foreach($Y as$x=>$W)$H[stripslashes($x)]=(is_array($W)?remove_slashes($W,$Zd):($Zd?$W:stripslashes($W)));return$H;}function bracket_escape($u,$Sa=false){static$Lm=array(':'=>':1',']'=>':2','['=>':3','"'=>':4','='=>':5');return strtr($u,($Sa?array_flip($Lm):$Lm));}function url_escape($P){static$Lm=array();if(!$Lm){$Lm=array(' '=>'+');foreach(str_split("\"'<>#%&+=?".ini_get("arg_separator.input"))as$nb)$Lm[$nb]=sprintf('%%%02X',ord($nb));for($s=0;$s<256;$s++){if($s<32||$s>126)$Lm[chr($s)]=sprintf('%%%02X',$s);}}return strtr((string)$P,$Lm);}function min_version($Kn,$Kg="",$h=null){$h=connection($h);$jl=$h->server_info;if($Kg&&preg_match('~([\d.]+)-MariaDB~',$jl,$A)){$jl=$A[1];$Kn=$Kg;}return$Kn&&version_compare($jl,$Kn)>=0;}function charset(Db$g){return(min_version("5.5.3",0,$g)?"utf8mb4":"utf8");}function ini_set($xi,$X){return(function_exists('ini_set')?\ini_set($xi,$X):false);}function ini_bool($Ef){$W=ini_get($Ef);return(preg_match('~^(on|true|yes)$~i',$W)||(int)$W);}function ini_bytes($Ef){$W=ini_get($Ef);switch(strtolower(substr($W,-1))){case'g':$W=(int)$W*1024;case'm':$W=(int)$W*1024;case'k':$W=(int)$W*1024;}return$W;}function max_input_vars($I,$Ni){$Og=(int)ini_get("max_input_vars");return($Og?(int)floor(($Og-$Ni)/$I):0);}function max_input_vars_error(){$Ef="max_input_vars";return lang(1,"$Ef = ".ini_get($Ef)."");}function sid(){static$H;if($H===null)$H=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$H;}function set_password($Jn,$M,$U,$D){$_SESSION["pwds"][$Jn][$M][$U]=($_COOKIE["adminer_key"]&&is_string($D)?array(encrypt_string($D,$_COOKIE["adminer_key"])):$D);}function get_password(){$H=get_session("pwds");if(is_array($H))$H=($_COOKIE["adminer_key"]?decrypt_string($H[0],$_COOKIE["adminer_key"]):false);return$H;}function get_val($F,$n=0,$Pb=null){$Pb=connection($Pb);$G=$Pb->query($F);if(!is_object($G))return false;$I=$G->fetch_row();return($I?$I[$n]:false);}function get_vals($F,$d=0){$H=array();$G=connection()->query($F);if(is_object($G)){while($I=$G->fetch_row())$H[]=$I[$d];}return$H;}function get_key_vals($F,$h=null,$ml=true){$h=connection($h);$H=array();$G=$h->query($F);if(is_object($G)){while($I=$G->fetch_row()){if($ml)$H[$I[0]]=$I[1];else$H[]=$I[0];}}return$H;}function get_rows($F,$h=null,$m="

"){$Pb=connection($h);$H=array();$G=$Pb->query($F);if(is_object($G)){while($I=$G->fetch_assoc())$H[]=$I;}elseif(!$G&&!$h&&$m&&(defined('Adminer\PAGE_HEADER')||$m=="-- "))echo$m.adminer()->error()."\n";return$H;}function unique_array($I,array$w){foreach($w as$v){if(preg_match("~^(PRIMARY|UNIQUE)$~",$v["type"])&&!$v["partial"]){$H=array();foreach($v["columns"]as$x){if(!isset($I[$x]))continue 2;$H[$x]=$I[$x];}return$H;}}}function where_function($xe,$d,array$n){if($xe=="md5")return driver()->md5($d,$n)?:$d;return(in_array($xe,driver()->functions)||in_array($xe,driver()->grouping)?apply_sql_function($xe,$d):$d);}function where(array$Z,array$o=array()){$H=array();foreach((array)$Z["where"]as$x=>$W){$x=bracket_escape($x,true);$d=idf_escape($x);$n=idx($o,$x,array());$Td=$n["type"];$Rf=$n&&(is_blob($n)||preg_match('~binary~',$Td));$H[]=$d.($Rf&&!is_utf8($W)?" = ".driver()->quoteBinary($W):(JUSH=="sql"&&$Td=="json"?" = CAST(".q($W)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^jsonb?$~',$n["full_type"])?"::jsonb = ".q($W)."::jsonb":(JUSH=="sql"&&is_numeric($W)&&preg_match('~\.~',$W)?" LIKE ".q($W):(JUSH=="mssql"&&strpos($Td,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$W)):" = ".unconvert_field($n,q($W)))))));if(JUSH=="sql"&&preg_match('~char|text~',$Td)&&preg_match("~[^ -@]~",$W))$H[]="$d = ".q($W)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$x)$H[]=idf_escape($x)." IS NULL";foreach((array)$Z["col"]as$s=>$Bb){$W=idx($Z["val"],$s);$H[]=where_function(idx($Z["fun"],$s),idf_escape($Bb),idx($o,$Bb,array())).($W!==null?" = ".q($W):" IS NULL");}return implode(" AND ",$H);}function where_columns(array$o){$H=array();foreach((array)$_GET["null"]as$x)$H[$x]=true;foreach(array_keys((array)$_GET["where"])as$x)$H[bracket_escape($x,true)]=true;foreach((array)$_GET["col"]as$Bb)$H[$Bb]=true;return array_intersect_key($H,$o);}function where_check($W,array$o=array()){parse_str($W,$qb);remove_slashes(array(&$qb));return where($qb,$o);}function where_link($s,$d,$X,$ui="="){$ri=($X!==null?$ui:"IS NULL");return"&where[$s][col]=".url_escape($d).($ri!=first(adminer()->operators())?"&where[$s][op]=".url_escape($ri):"")."&where[$s][val]=".url_escape($X);}function convert_fields(array$e,array$o,array$L=array()){$H="";foreach($e as$x=>$W){if($L&&!in_array(idf_escape($x),$L))continue;$Ha=convert_field($o[$x]);if($Ha)$H .=", $Ha AS ".idf_escape($x);}return$H;}function cookie_path(){return strtr(preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),array(";"=>"%3B",","=>"%2C"));}function cookie($B,$X,$zg=2592000){header("Set-Cookie: $B=".rawurlencode($X).($zg?"; expires=".gmdate("D, d M Y H:i:s",time()+$zg)." GMT":"")."; path=".cookie_path().(HTTPS?"; secure":"").($B=="adminer_import"?"":"; HttpOnly")."; SameSite=lax",false);}function get_url($un,$Yb){$http_response_header=null;$vd=array();set_error_handler(function($ud,$m)use(&$vd){$vd[]=preg_replace('~^file_get_contents\([^)]*\):\s*~','',$m);return true;});$H=file_get_contents($un,false,$Yb);restore_error_handler();$Ve=(function_exists('http_get_last_response_headers')?http_get_last_response_headers():$http_response_header);return array($H,(preg_match('~^HTTP/[\d.]+ (\d+)~',idx($Ve,0,''),$A)?$A[1]:''),(array)$Ve,($H===false?implode("\n",$vd):''),);}function json_decode_exact($ag){$ag=preg_replace('~"(\\\\u0001(?:[^"\\\\]|\\\\.)*+")|"(?:[^"\\\\]|\\\\.)*+"(*SKIP)(*FAIL)~','"\\\\u0001$1',$ag);return json_decode(preg_replace('~"(?:[^"\\\\]|\\\\.)*+"(*SKIP)(*FAIL)|-?\d[-+.\deE]*+~','"\\\\u0001$0"',$ag));}function json_scalar($W){return(is_string($W)&&substr($W,0,1)=="\1"?substr($W,1):$W);}function json_encode_exact($W,$fe=0){return preg_replace('~"\\\\u0001(-?\d[^"\\\\]*)"|(")\\\\u0001(\\\\u0001(?:[^"\\\\]|\\\\.)*+")|"(?:[^"\\\\]|\\\\.)*+"(*SKIP)(*FAIL)~','$1$2$3',json_encode($W,$fe));}function get_settings($cc){parse_str($_COOKIE[$cc],$nl);return$nl;}function get_setting($x,$cc="adminer_settings",$l=null){return idx(get_settings($cc),$x,$l);}function save_settings(array$nl,$cc="adminer_settings"){$X=http_build_query($nl+get_settings($cc));cookie($cc,$X);$_COOKIE[$cc]=$X;}function restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==PHP_SESSION_NONE))session_start();}function stop_session($ie=false){$xn=ini_bool("session.use_cookies");if(!$xn||$ie){session_write_close();if($xn&&ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($x){return$_SESSION[$x][DRIVER][SERVER][$_GET["username"]];}function set_session($x,$W){$_SESSION[$x][DRIVER][SERVER][$_GET["username"]]=$W;}function auth_url($Jn,$M,$U,$k=null){$tn=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($k!==null?"db|":"").($Jn=='mssql'||$Jn=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$tn,$A);return"$A[1]?".(sid()?SID."&":"").($_GET["ext"]?"ext=".url_escape($_GET["ext"])."&":"").($Jn!="server"||$M!=""?url_escape($Jn)."=".url_escape($M)."&":"")."username=".url_escape($U).($k!=""?"&db=".url_escape($k):"").($A[2]?"&$A[2]":"");}function is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function redirect($Gg,$eh=null){if($eh!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Gg!==null?$Gg:$_SERVER["REQUEST_URI"]))][]=$eh;}if($Gg!==null){if($Gg=="")$Gg=".";header("Location: $Gg");exit;}}function query_redirect($F,$Gg,$eh,$bk=true,$Cd=true,$Nd=false,$zm=""){if($Cd){$Il=microtime(true);$Nd=!connection()->query($F);$zm=format_time($Il);}$Bl=($F?adminer()->messageQuery($F,$zm,$Nd):"");if($Nd){adminer()->error .=adminer()->error().$Bl.script("messagesPrint();")."
";return false;}if($bk)redirect($Gg,$eh.$Bl);return true;}class Queries{static$queries=array();static$start=0;}function remember_query($F){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$F:(preg_match('~;$~',$F)?"DELIMITER ;;\n$F;\nDELIMITER ":$F).";");}function queries($F){remember_query($F);return connection()->query($F);}function apply_queries($F,array$S,$xd='Adminer\table'){foreach($S as$Q){if(!queries("$F ".$xd($Q)))return false;}return true;}function queries_redirect($Gg,$eh,$bk){$Uj=implode("\n",Queries::$queries);$zm=format_time(Queries::$start);return query_redirect($Uj,$Gg,$eh,$bk,false,!$bk,$zm);}function format_time($Il){return lang(2,max(0,microtime(true)-$Il));}function relative_uri($tn=''){return preg_replace_callback('~^[^?]*~',function($A){return str_replace(":","%3A",$A[0]);},preg_replace('~^[^?]*/([^?]*)~','\1',($tn?:$_SERVER["REQUEST_URI"])));}function remove_from_uri($Ui=""){return substr(preg_replace("~(?<=[?&])($Ui".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function get_files($B,$wc=false){$Vd=$_FILES[$B];if(!$Vd)return null;foreach($Vd as$x=>$W)$Vd[$x]=(array)$W;$H=array();foreach($Vd["error"]as$x=>$m){if($m)return$m;$p=$Vd["name"][$x];$Gm=$Vd["tmp_name"][$x];$Wb=file_get_contents($wc&&preg_match('~\.gz$~',$p)?"compress.zlib://$Gm":$Gm);if($wc){$Il=substr($Wb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Il))$Wb=iconv("utf-16","utf-8",$Wb);elseif($Il=="\xEF\xBB\xBF")$Wb=substr($Wb,3);}$H[]=array($p,$Wb);}return$H;}function get_file($x,$wc=false,$Cc=""){$Yd=get_files($x,$wc);if(!is_array($Yd))return$Yd;$H='';foreach($Yd as$Vd){$Wb=$Vd[1];$H .=$Wb;if($Cc)$H .=(preg_match("($Cc\\s*\$)",$Wb)?"":$Cc)."\n\n";}return$H;}function upload_error($m){$Wg=($m==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($m?lang(3).($Wg?" ".lang(4,$Wg):""):lang(5));}function is_utf8($W){return(preg_match('~~u',$W)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$W));}function utf8_length($W){return strlen(preg_replace('~[\x80-\xBF]~','',$W));}function format_number($W){preg_match('~^#+([^#0]+)(?:(#+)\1)?(#*0)$~u',lang(6),$A);$rl=strlen($A[3]);$H=number_format($W,0,".","");$H=preg_replace('~\B(?=(\d{'.(strlen($A[2])?:$rl).'})*\d{'.$rl.'}$)~',$A[1],$H);return strtr($H,preg_split('~~u',lang(7),-1,PREG_SPLIT_NO_EMPTY));}function format_status(array$R,$x){$W=idx($R,$x,'?');if(!is_numeric($W))return h($W);if($W<0)return'?';$Ca=($x=="Rows"&&(JUSH=="sqlite"||$R["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")));$W=in_array($x,array("Data_length","Index_length","Data_free"))?adminer()->formatSizeValue($W):format_number($W);return($Ca?"~ ":"").$W;}function friendly_url($W){return preg_replace('~\W~i','-',$W);}function table_status1($Q,$Od=false){$H=table_status($Q,$Od);return($H?reset($H):array("Name"=>$Q));}function column_foreign_keys($Q){$H=array();foreach(adminer()->foreignKeys($Q)as$q){foreach($q["source"]as$W)$H[$W][]=$q;}return$H;}function fields_from_edit(){$H=array();foreach((array)$_POST["field_keys"]as$x=>$W){if($W!=""){$W=bracket_escape($W);$_POST["function"][$W]=$_POST["field_funs"][$x];$_POST["fields"][$W]=$_POST["field_vals"][$x];}}foreach((array)$_POST["fields"]as$x=>$W){$B=bracket_escape($x,true);$H[$B]=array("field"=>$B,"full_type"=>"","type"=>"","privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>true,"auto_increment"=>($B==driver()->primary),);}return$H;}function dump_headers($jf,$xh=false){$H=adminer()->dumpHeaders($jf,$xh);$Pi=$_POST["output"];if($Pi!="text"||$H=="tar"){$Mb=($Pi!="text"&&$Pi!="file"&&preg_match('~^[0-9a-z]+$~',$Pi)?".$Pi":"");header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($jf).".$H$Mb");}session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$H;}function dump_csv(array$I){$Ym=$_POST["format"]=="tsv";foreach($I as$x=>$W){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($Ym?'\t':'[,;]|^$').'~',$W))$I[$x]='"'.str_replace('"','""',$W).'"';}echo implode(($_POST["format"]=="csv"?",":($Ym?"\t":";")),$I)."\r\n";}function parse_csv($kc,$Xk){$H=array();preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$kc,$Mg);foreach($Mg[0]as$I){preg_match_all("~((?>\"[^\"]*\")+|[^$Xk]*)$Xk~",$I.$Xk,$Ng);$H[]=$Ng[1];}return$H;}function csv_value($W){return(preg_match('~^".*"$~s',$W)?str_replace('""','"',substr($W,1,-1)):$W);}function apply_sql_function($ye,$d){return($ye?($ye=="unixepoch"?"DATETIME($d, '$ye')":($ye=="count distinct"?"COUNT(DISTINCT ":strtoupper("$ye("))."$d)"):$d);}function get_temp_dir(){return ini_get("upload_tmp_dir")?:sys_get_temp_dir();}function file_open_lock($p){if(is_link($p))return;$pe=@fopen($p,"c+");if(!$pe)return;@chmod($p,0660);if(!flock($pe,LOCK_EX)){fclose($pe);return;}return$pe;}function file_write_unlock($pe,$oc){rewind($pe);fwrite($pe,$oc);ftruncate($pe,strlen($oc));file_unlock($pe);}function file_unlock($pe){flock($pe,LOCK_UN);fclose($pe);}function first(array$Ga){return reset($Ga);}function password_file($i){$p=get_temp_dir()."/adminer.key";if(!$i&&!file_exists($p))return'';$pe=file_open_lock($p);if(!$pe)return'';$H=stream_get_contents($pe);if(!$H){$H=rand_string();file_write_unlock($pe,$H);}else file_unlock($pe);return$H;}function rand_string(){return(function_exists('random_bytes')?bin2hex(random_bytes(16)):md5(uniqid(strval(mt_rand()),true)));}function select_value($W,$_,array$n,$xm,array$oj=array()){if(is_array($W)){$H="";if(array_filter($W,'is_array')==array_values($W)){$fg=array();foreach($W as$V)$fg+=array_fill_keys(array_keys($V),null);foreach(array_keys($fg)as$cg)$H .="".h($cg);foreach($W as$V){$H .="";foreach(array_merge($fg,$V)as$Dn)$H .="".select_value($Dn,$_,$n,$xm,$oj);}}else{foreach($W as$cg=>$V)$H .="".($W!=array_values($W)?"".h($cg):"")."".select_value($V,$_,$n,$xm,$oj);}return"$H
";}if(!$_)$_=adminer()->selectLink($W,$n);if($_===null){if(is_mail($W))$_="mailto:$W";if(is_url($W))$_=$W;}$W=driver()->value($W,$n);$H=adminer()->editVal($W,$n);if($H!==null){if(!is_utf8($H))$H="\0";elseif($xm!=""&&is_shortable($n))$H=shorten_utf8($H,max(0,+$xm),"",$oj);else$H=highlight_matches($H,$oj);}return adminer()->selectVal($H,$_,$n,$W);}function is_blob(array$n){return preg_match('~blob|bytea|raw|file'.(JUSH=="mssql"?'|binary|image':'').'~',$n["type"])&&!in_array($n["type"],idx(driver()->structuredTypes(),lang(0),array()));}function is_identity_always(array$n){return$n["auto_increment"]&&(JUSH=="mssql"||$n["default"]=="GENERATED ALWAYS AS IDENTITY");}function is_mail($kd){$Ja='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$Uc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$nj="$Ja+(\\.$Ja+)*@($Uc?\\.)+$Uc";return is_string($kd)&&preg_match("(^$nj(,\\s*$nj)*\$)i",$kd);}function is_url($P){$Uc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return preg_match("~^((https?):)?//($Uc?\\.)+$Uc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$P);}function is_ipv6($pa){$r='[\da-f]{1,4}';$Qf='\d{1,3}(\.\d{1,3}){3}';return(bool)preg_match("~^(($r:){7}$r|($r:){6}$Qf|(($r:)*$r)?::(($r:)*($r|$Qf))?)$~iD",$pa);}function is_shortable(array$n){return!preg_match('~'.number_type().'|date|time|year~',$n["type"]);}function url_host($ff){return(strpos($ff,":")!==false?"[$ff]":$ff);}function server_parts(array$hj){return array("scheme"=>(string)$hj["scheme"],"host"=>(string)$hj["host"],"port"=>(string)$hj["port"],"socket"=>(string)$hj["socket"],"path"=>(string)$hj["path"],);}function parse_server($M){if($M=="")return server_parts(array());if($M[0]==":"&&!is_ipv6($M)){$pk=substr($M,1);if(preg_match('~^\d+$~D',$pk))return server_parts(array("port"=>$pk));return(preg_match('~^/[-\w.:/]*$~D',$pk)?server_parts(array("socket"=>$pk)):null);}$Kk="";if(preg_match('~^([-+.\w]+)://~',$M,$A)){$Kk=strtolower($A[1]);$M=substr($M,strlen($A[0]));}if(preg_match('~^\[(.+)](:(\d+))?(/[-\w./]*)?$~D',$M,$A))return(is_ipv6($A[1])?server_parts(array("scheme"=>$Kk,"host"=>$A[1],"port"=>$A[3],"path"=>$A[4])):null);if(is_ipv6($M))return server_parts(array("scheme"=>$Kk,"host"=>$M));if(preg_match('~^(/[-\w./]*)(:(\d+))?$~D',$M,$A))return server_parts(array("scheme"=>$Kk,"host"=>$A[1],"port"=>$A[3]));return(preg_match('~^([-\w.]*)(:(\d+))?(/[-\w./]*)?$~D',$M,$A)?server_parts(array("scheme"=>$Kk,"host"=>$A[1],"port"=>$A[3],"path"=>$A[4])):null);}function count_rows($Q,array$Z,$Sf,array$r){$F=" FROM ".table($Q).($Z?" WHERE ".implode(" AND ",$Z):"");return($Sf&&(JUSH=="sql"||count($r)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$r).")$F":"SELECT COUNT(*)".($Sf?" FROM (SELECT 1$F GROUP BY ".implode(", ",$r).") x":$F));}function slow_query($F){$k=adminer()->database();$_m=adminer()->queryTimeout();$tl=driver()->slowQuery($F,$_m);$h=null;if(!$tl&&support("kill")){$h=connect();if($h&&($k==""||$h->select_db($k))){$gg=number(get_val(connection_id(),0,$h));echo script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$gg&token=".get_token()."'); }, 1000 * $_m);");}}ob_flush();flush();$H=@get_key_vals(($tl?:$F),$h,false);if($h){echo script("clearTimeout(timeout);");ob_flush();flush();}return$H;}function get_token(){$Yj=rand(1,1e6);return($Yj^$_SESSION["token"]).":$Yj";}function verify_token(){list($Hm,$Yj)=explode(":",$_POST["token"]);return($Yj^$_SESSION["token"])==$Hm&&in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"));}function compress_alphabet(){return strtr(implode(range('"','~')),"'\\","!\n");}function decompress_string($P,$Ic=""){$_a=array_flip(str_split(compress_alphabet()));$y=strlen($P);$Gn=($y?13*($y-1)/2-$_a[$P[0]]:0);$Za="";$pk=0;$qk=0;for($s=1;$s<$y;$s+=2){$pk=($pk<<13)+$_a[$P[$s]]*93+$_a[$P[$s+1]];$qk+=13;while($qk>=8&&$Gn>=8){$qk-=8;$Gn-=8;$Za .=chr($pk>>$qk);$pk&=(1<<$qk)-1;}}if($Za=="")return"";if($Ic!=""&&function_exists('inflate_init'))return inflate_add(inflate_init(ZLIB_ENCODING_RAW,array('dictionary'=>$Ic)),$Za,ZLIB_FINISH);return($Ic==""&&function_exists('gzinflate')?gzinflate($Za):inflate($Za,$Ic));}function inflate($Za,$Ic=""){$wg=array(3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258);$xg=array(0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0);$Mc=array(1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577);$Oc=array(0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13);$H=$Ic;$E=0;do{$ae=inflate_bits($Za,$E,1);$T=inflate_bits($Za,$E,2);if(!$T){$E=($E+7)&~7;$y=inflate_bits($Za,$E,16);$E+=16;$H .=substr($Za,$E>>3,$y);$E+=$y<<3;}else{if($T==1){$Eg=array_merge(array_fill(0,144,8),array_fill(0,112,9),array_fill(0,24,7),array_fill(0,8,8));$Pc=array_fill(0,30,5);}else{$Dg=inflate_bits($Za,$E,5)+257;$Nc=inflate_bits($Za,$E,5)+1;$Ai=array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);$kh=array_fill(0,19,0);$jh=inflate_bits($Za,$E,4)+4;for($s=0;$s<$jh;$s++)$kh[$Ai[$s]]=inflate_bits($Za,$E,3);$lh=inflate_table($kh);$yg=array();while(count($yg)<$Dg+$Nc){$Vl=inflate_symbol($Za,$E,$lh);if($Vl==16)$yg=array_merge($yg,array_fill(0,inflate_bits($Za,$E,2)+3,end($yg)));elseif($Vl==17)$yg=array_merge($yg,array_fill(0,inflate_bits($Za,$E,3)+3,0));elseif($Vl==18)$yg=array_merge($yg,array_fill(0,inflate_bits($Za,$E,7)+11,0));else$yg[]=$Vl;}$Eg=array_slice($yg,0,$Dg);$Pc=array_slice($yg,$Dg);}$Fg=inflate_table($Eg);$Rc=inflate_table($Pc);while(($Vl=inflate_symbol($Za,$E,$Fg))!=256){if($Vl<256)$H .=chr($Vl);else{$y=$wg[$Vl-257]+inflate_bits($Za,$E,$xg[$Vl-257]);$Qc=inflate_symbol($Za,$E,$Rc);$fi=strlen($H)-$Mc[$Qc]-inflate_bits($Za,$E,$Oc[$Qc]);for($s=0;$s<$y;$s++)$H .=$H[$fi+$s];}}}}while(!$ae);return($Ic==""?$H:substr($H,strlen($Ic)));}function inflate_bits($Za,&$E,$ec){$H=0;for($s=0;$s<$ec;$s++){$H+=((ord($Za[$E>>3])>>($E&7))&1)<<$s;$E++;}return$H;}function inflate_table(array$yg){$Q=array();$Ab=0;for($ab=1;$ab<=max($yg);$ab++){foreach($yg as$Vl=>$y){if($y==$ab){$Q[$ab][$Ab]=$Vl;$Ab++;}}$Ab<<=1;}return$Q;}function inflate_symbol($Za,&$E,array$Q){$Ab=0;$ab=0;do{$Ab=($Ab<<1)+inflate_bits($Za,$E,1);$ab++;}while(!isset($Q[$ab][$Ab]));return$Q[$ab][$Ab];}function script($yl,$Km="\n"){return"$yl$Km";}function script_src($un,$zc=false){return"\n";}function nonce(){return' nonce="'.get_nonce().'"';}function on($yd,$Me,$Da=null){$Fa=array();foreach(array_slice(func_get_args(),2)as$W)$Fa[]=json_encode($W,256);return" data-on$yd='".str_replace(array('&','<',"'"),array('&','<','''),"$Me(".implode(", ",$Fa).")")."'";}function input_hidden($B,$X=""){return"\n";}function input_token(){return input_hidden("token",get_token());}function target_blank(){return' target="_blank" rel="noreferrer noopener"';}function h($P){return str_replace(array('&','<','"',"'","\0"),array('&','<','"',''','�'),$P);}function nl_br($P){return str_replace("\n","
",$P);}function checkbox($B,$X,$tb,$kg="",$c="",$zb="",$mg=""){$H="";return($kg!=""?"$H".h($kg)."":$H);}function optionlist($yi,$Tk=null,$yn=false){$H="";foreach($yi as$cg=>$V){$_i=array($cg=>$V);if(is_array($V)){$H .='';$_i=$V;}foreach($_i as$x=>$W)$H .=''.h($W);if(is_array($V))$H .='';}return$H;}function group_system(array$Eh,$Jk=false){$H=array();$Wl=array();foreach($Eh as$B){if($Jk?driver()->isSystem(DB,$B):driver()->isSystem($B))$Wl[]=$B;else$H[]=$B;}if($Wl)$H[lang(8,'')]=$Wl;return$H;}function html_select($B,array$yi,$X="",$c="",$mg=""){static$kg=0;$lg="";if(!$mg&&substr($yi[""],0,1)=="("){$kg++;$mg="label-$kg";$lg="

","$vg","","
\n";}function selectSearchPrint(array$Z,array$e,array$w,$Yl=null){print_fieldset("search",lang(65),$Z);foreach($w as$s=>$v){if($v["type"]=="FULLTEXT")echo"
(".implode(", ",array_map('Adminer\h',$v["columns"])).") ".h(driver()->fulltextOperator)," ",(JUSH=='sql'?checkbox("boolean[$s]",1,isset($_GET["boolean"][$s]),"BOOL"):''),"
\n";}$vi=adminer()->operators($Yl);foreach(array_merge((array)$_GET["where"],array(array()))as$s=>$W){if(!$W||(("$W[col]$W[val]"!=""||preg_match('~NULL$~',$W["op"]))&&in_array($W["op"],$vi)))echo"
".adminer()->selectColumnInput(" name='where[$s][col]' data-default=''".on('change',($W?'selectFieldChange':'selectAddRow')),$e,$W["col"],"(".lang(66).")"),html_select("where[$s][op]",$vi,$W["op"]," data-default='".h(first($vi))."'".on('change','selectFirstChange')),"","
\n";}echo"\n";}function selectOrderPrint(array$Ai,array$e,array$w){print_fieldset("sort",lang(67),$Ai);$s=0;foreach((array)$_GET["order"]as$x=>$W){if($W!=""){echo"
".adminer()->selectColumnInput(" name='order[$s]' data-default=''".on('change','selectFieldChange'),$e,$W),checkbox("desc[$s]",1,isset($_GET["desc"][$x]),lang(68))."
\n";$s++;}}echo"
".adminer()->selectColumnInput(" name='order[$s]' data-default=''".on('change','selectAddRow'),$e),checkbox("desc[$s]",1,false,lang(68))."
\n","\n";}function selectLimitPrint($z){echo"
".lang(69)."
","","
\n";}function selectLengthPrint($xm){echo"
".lang(70)."
","","
\n";}function selectActionPrint(array$w){echo"
".lang(71)."
",""," ","\n","const indexColumns = ";$e=array();foreach($w as$v){$mc=reset($v["columns"]);if($v["type"]!="FULLTEXT"&&$mc)$e[$mc]=1;}$e[""]=1;foreach($e as$x=>$W)json_row($x);echo";\n","selectFieldChange.call(qs('#form')['select']);\n","\n","
\n";}function selectCommandPrint(){return!information_schema(DB);}function selectImportPrint(){return!information_schema(DB);}function selectEmailPrint(array$ld,array$e){}function selectColumnsProcess(array$e,array$w){$L=array();$r=array();foreach((array)$_GET["columns"]as$x=>$W){if($W["fun"]=="count"||($W["col"]!=""&&(!$W["fun"]||in_array($W["fun"],driver()->functions)||in_array($W["fun"],driver()->grouping)))){$L[$x]=apply_sql_function($W["fun"],($W["col"]!=""?idf_escape($W["col"]):"*"));if(!in_array($W["fun"],driver()->grouping))$r[]=$L[$x];}}return array($L,$r);}function selectSearchProcess(array$o,array$w,$Yl=null){$H=array();foreach($w as$s=>$v){if($v["type"]=="FULLTEXT"&&idx($_GET["fulltext"],$s)!="")$H[]=driver()->fulltextSql($s,$v,$_GET["fulltext"][$s],isset($_GET["boolean"][$s]));}$vi=adminer()->operators($Yl);foreach((array)$_GET["where"]as$x=>$W){$W+=array("col"=>"","op"=>first($vi),"val"=>"");$_GET["where"][$x]=$W;$Bb=$W["col"];if(("$Bb$W[val]"!=""||preg_match('~NULL$~',$W["op"]))&&in_array($W["op"],$vi)){if($W["op"]=="SQL"&&(!$_POST||!verify_token()))SqlDb::$untrusted=true;$Nb=array();foreach(($Bb!=""?array($Bb=>idx($o,$Bb,array())):$o)as$B=>$n){if($Bb!=""||is_searchable($n,$W))$Nb[]=adminer()->selectSearchCondition(driver()->convertSearch(idf_escape($B),$W,$n),$W["op"],$W["val"]);}$H[]=(count($Nb)==1?$Nb[0]:($Nb?"(".implode(" OR ",$Nb).")":"1 = 0"));}}return$H;}function selectSearchCondition($d,$ri,$W){if(preg_match('~IN$~',$ri))return"$d $ri ".($W!=""?process_in($W):"(NULL)");if($ri=="BETWEEN")return"$d $ri ".process_between($W);if($ri=="SQL")return"$d $W";if(preg_match('~^(I?LIKE) %%$~',$ri,$A))return"$d $A[1] ".q("%$W%");if($ri=="FIND_IN_SET")return"$ri(".q($W).", $d)";return"$d $ri".(!preg_match('~NULL$~',$ri)?" ".q($W):"");}function selectOrderProcess(array$o,array$w){$H=array();foreach((array)$_GET["order"]as$x=>$W){if($W!="")$H[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$W)?$W:idf_escape($W)).(isset($_GET["desc"][$x])?" DESC".(JUSH=='pgsql'&&idx($o[$W],"null")?" NULLS LAST":""):"");}return$H;}function selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function selectLengthProcess(){return(isset($_GET["text_length"])?"$_GET[text_length]":"100");}function selectEmailProcess(array$Z,array$ke){return false;}function selectQueryBuild(array$L,array$Z,array$r,array$Ai,$z,$C){return"";}function messageQuery($F,$zm,$Nd=false){restart_session();$cf=&get_session("queries");if(!idx($cf,$_GET["db"]))$cf[$_GET["db"]]=array();if(strlen($F)>1e6)$F=preg_replace('~[\x80-\xFF]+$~','',substr($F,0,1e6))."\n…";$cf[$_GET["db"]][]=array($F,time(),$zm);$Dl="sql-".count($cf[$_GET["db"]]);$H="".lang(73)." ".copy_icon()."\n";if(!$Nd&&($Qn=driver()->warnings())){$t="warnings-".count($cf[$_GET["db"]]);$H="".lang(55).", $H\n";}return" ".@date("H:i:s").""." $H';}function error(){return error();}function editRowPrint($Q,array$o,$I,$pn,$F='',$zm=''){echo($F!=""?"

".h(str_replace("\n"," ",$F))." ($zm)\n":"");}function editFunctions(array$n){$H=($n["null"]?"NULL/":"");$Se=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$x=>$ze){if(!$x||(!isset($_GET["call"])&&$Se)){foreach($ze as$nj=>$W){if(!$nj||preg_match("~$nj~",$n["type"]))$H .="/$W";}}if($x&&$ze&&!preg_match('~set|bool~',$n["type"])&&!is_blob($n))$H .="/SQL";}if($n["auto_increment"]&&!$Se)$H=lang(60);return explode("/",$H);}function editInput($Q,array$n,$c,$X){if($n["type"]=="enum")return(isset($_GET["select"])?" ":"").enum_input("radio",$c,$n,$X,"NULL");return"";}function editHint($Q,array$n,$X){return"";}function processInput(array$n,$X,$ye=""){if($ye=="SQL")return$X;$B=$n["field"];$H=q($X);if(preg_match('~^(now|getdate|uuid)$~',$ye))$H="$ye()";elseif(preg_match('~^current_(date|timestamp)$~',$ye))$H=$ye;elseif(preg_match('~^([+-]|\|\|)$~',$ye))$H=idf_escape($B)." $ye $H";elseif(preg_match('~^[+-] interval$~',$ye))$H=idf_escape($B)." $ye ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$X)&&JUSH!="pgsql"?$X:$H);elseif(preg_match('~^(addtime|subtime|concat)$~',$ye))$H="$ye(".idf_escape($B).", $H)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$ye))$H="$ye($H)";return unconvert_field($n,$H);}function dumpOutput(){$H=array('text'=>lang(74),'file'=>lang(75));if(function_exists('gzencode'))$H['gz']='gzip';return$H;}function dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function dumpPrint(){}function dumpDatabase($k){}function dumpTable($Q,$Pl,$Xf=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Pl)dump_csv(array_keys(fields($Q)));}else{if($Xf==2){$o=array();foreach(fields($Q)as$B=>$n)$o[]=idf_escape($B)." ".full_type_sql($n);$i="CREATE TABLE ".table($Q)." (".implode(", ",$o).")";}else$i=create_sql($Q,$_POST["auto_increment"],$Pl);set_utf8mb4($i);if($Pl&&$i){if(($Pl=="DROP+CREATE"&&!function_exists('Adminer\drop_sql'))||$Xf==1)echo"DROP ".($Xf==2?"VIEW":"TABLE")." IF EXISTS ".table($Q).";\n";if($Xf==1)$i=remove_definer($i);echo"$i;\n\n";}}}function dumpData($Q,$Pl,$F,array$L=array(),array$Z=array(),array$r=array(),array$Ai=array()){if($Pl){$Sg=(JUSH=="sqlite"?0:1048576);$o=array();$lf=false;if($_POST["format"]=="sql"){if($Pl=="TRUNCATE+INSERT"&&!function_exists('Adminer\truncate_all_sql'))echo truncate_sql($Q).";\n";$o=fields($Q);if(JUSH=="mssql"){foreach($o as$n){if($n["auto_increment"]){echo"SET IDENTITY_INSERT ".table($Q)." ON;\n";$lf=true;break;}}}}$G=($F!=""?connection()->query($F,1):driver()->select($Q,($L?:array("*")),$Z,$r,$Ai,0));if($G){$Hf="";$eb="";$fg=array();$_e=array();$Rl="";$Qd=($Q!=''?'fetch_assoc':'fetch_row');$ec=0;while($I=$G->$Qd()){if(!$fg){$Y=array();foreach($I as$W){$n=$G->fetch_field();if(idx($o[$n->name],'generated')){$_e[$n->name]=true;continue;}$fg[]=$n->name;$x=idf_escape($n->name);$Y[]="$x = VALUES($x)";}$Rl=($Pl=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Y):"").";\n";}foreach($I as$x=>$W){if(is_array($W))$I[$x]=json_encode($W,256|64);}if($_POST["format"]!="sql"){if($Pl=="table"){dump_csv($fg);$Pl="INSERT";}dump_csv($I);}else{if(!$Hf)$Hf="INSERT INTO ".table($Q)." (".implode(", ",array_map('Adminer\idf_escape',$fg)).") VALUES";foreach($I as$x=>$W){if($_e[$x]){unset($I[$x]);continue;}$n=$o[$x];$I[$x]=($W===null?"NULL":($W===false?0:unconvert_field($n,preg_match(number_type(),$n["type"])&&!preg_match('~\[~',$n["full_type"])&&is_numeric($W)?$W:(!is_blob($n)||is_utf8($W)?q($W):driver()->quoteBinary($W)))));}$Gk=($Sg?"\n":" ")."(".implode(",\t",$I).")";if(!$eb)$eb=$Hf.$Gk;elseif(JUSH=='mssql'?$ec%1000!=0:strlen($eb)+4+strlen($Gk)+strlen($Rl)<$Sg)$eb .=",$Gk";else{echo$eb.$Rl;$eb=$Hf.$Gk;}}$ec++;}if($eb)echo$eb.$Rl;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";else dump_csv(array(connection()->error));if($lf)echo"SET IDENTITY_INSERT ".table($Q)." OFF;\n";}}function dumpFilename($jf){return friendly_url($jf!=""?$jf:(SERVER?:"localhost"));}function dumpHeaders($jf,$xh=false){$Pi=$_POST["output"];$Id=(preg_match('~sql~',$_POST["format"])?"sql":($xh?"tar":"csv"));header("Content-Type: ".($Pi=="gz"?"application/x-gzip":($Id=="tar"?"application/x-tar":($Id=="sql"||$Pi!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Pi=="gz"){ob_start(function($P){return gzencode($P);},1e6);}return$Id;}function dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function importServerPath(){return"adminer.sql";}function importPrint(){}function importProcess(){return false;}function homepage(){echo'

".adminer()->name()." ".VERSION;$Qh=$_COOKIE["adminer_version"];echo" ".(version_compare(VERSION,$Qh)<0?h($Qh):"").version_iframe()."","

\n";switch_lang();if($ph=="auth"){$Pi="";foreach((array)$_SESSION["pwds"]as$Jn=>$kl){foreach($kl as$M=>$Cn){$B=h(get_setting("vendor-$Jn-$M")?:get_driver($Jn));foreach($Cn as$U=>$D){if($B&&$D!==null){$vc=$_SESSION["db"][$Jn][$M][$U];foreach(($vc?array_keys($vc):array(""))as$k)$Pi .="
  • ($B) ".h("$U@").($M!=""?adminer()->serverName($M):"").h($k!=""?" - $k":"")."\n";}}}}if($Pi)echo"
      \n$Pi
    \n";}else{$S=array();if($_GET["ns"]!==""&&!$ph&&DB!=""){connection()->select_db(DB);$S=table_status('',true);}adminer()->syntaxHighlighting($S);adminer()->databasesPrint($ph);$la=array();if(DB==""||!$ph){if(support("sql")){$la['sql']="".lang(73)."";$la['import']="".lang(84)."";}$la['dump']="".lang(85)."";}$rf=$_GET["ns"]!==""&&!$ph&&DB!="";if($rf&&function_exists('Adminer\alter_table'))$la['create']='".lang(86)."";$la=adminer()->menuActions($la,$ph);echo($la?"

    ".lang(13)."

    \n";}}}function syntaxHighlighting(array$S){echo script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=6.1.2+30b83850",true);$sh=preg_replace('~<(?=/script)~i','<\\',Driver::jushModule());echo($sh?script("addEventListener('DOMContentLoaded', () => {\n$sh\n});"):"");if(support("sql")){echo"\n";if($S){$Cg=array();foreach($S as$Q=>$T)$Cg[]=js_escape_re($Q);echo"var jushLinks = { ".JUSH.":";json_row(js_escape(ME).(support("table")?"table":"select").'=$&','/\b(? { autocompleter = $Pa; });\n":"");}}echo"\n";}echo script("syntaxHighlighting('".doc_version()."', '".connection()->flavor."');");}function databasesPrint($ph){if(support("single_db"))return;$j=adminer()->databases();if(DB&&$j&&!in_array(DB,$j))array_unshift($j,DB);echo"
    \n

    \n";hidden_fields_get();$sc=on('mousedown','dbMouseDown').on('change','dbChange');echo"","\n";if(support("scheme")){if($ph!="db"&&DB!=""&&connection()->select_db(DB)){echo"
    ";if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$W){if(isset($_GET[$W])){echo input_hidden($W);break;}}echo"

    \n";}function menuActions(array$la,$ph){return$la;}function tablesPrint(array$S){echo"
      ";foreach($S as$Q=>$O){$Q="$Q";$B=adminer()->tableName($O);if($B!=""&&!$O["dependent"])echo'
    • ".lang(89)." ",(support("table")||support("indexes")?'$B":"$B")."\n";}echo"
    \n";}function showVariables(){return show_variables();}function showStatus(){return show_status();}function processList(){return process_list();}function killProcess($t){return kill_process($t);}function formatSizeValue($W){return format_number($W);}}class Plugins{private static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$drivers=array();var$driverFiles=array();var$error='';private$hooks=array();function __construct($vj){$Wc=SqlDriver::$drivers;$Ye=" href='https://www.adminer.org/plugins/#use'".target_blank();if($vj===null){$vj=array();$Xa="adminer-plugins";if(is_dir($Xa)){foreach(glob("$Xa/*.php")as$p){$Wd=SqlDriver::$drivers;$this->includeOnce($p);foreach(array_diff_key(SqlDriver::$drivers,$Wd)as$t=>$B)$this->driverFiles[$t]=$p;}}if(file_exists("$Xa.php")){$tf=$this->includeOnce("$Xa.php");if(is_array($tf)){foreach($tf as$x=>$sj)$vj[is_object($sj)?get_class($sj):$x]=$sj;}else$this->error .=lang(90,"$Xa.php",$Ye)."
    ";}foreach(get_declared_classes()as$zb){if(!$vj[$zb]&&(preg_match('~^Adminer\w~i',$zb)||is_subclass_of($zb,'Adminer\Plugin'))){$gk=new \ReflectionClass($zb);$Vb=$gk->getConstructor();if($Vb&&$Vb->getNumberOfRequiredParameters())$this->error .=lang(91,$Ye,"$zb","$Xa.php")."
    ";else$vj[$zb]=new$zb;}}}$Mf=array_filter($vj,function($sj){return!is_object($sj);});if($Mf){$this->error .=lang(92,$Ye)."
    ";$vj=array_diff_key($vj,$Mf);}$this->drivers=array_diff_key(SqlDriver::$drivers,$Wc);$this->plugins=$vj;$qa=new Adminer;$vj[]=$qa;$gk=new \ReflectionObject($qa);foreach($gk->getMethods()as$mh){foreach($vj as$sj){$B=$mh->getName();if(method_exists($sj,$B))$this->hooks[$B][]=$sj;}}}function includeOnce($p){return include_once"./$p";}static function checksum($p){$Vd=str_replace("\r","",file_get_contents($p));$Vd=preg_replace('~\n\tprotected \$translations = array\(.*?\n\t\);~s','',$Vd);return dechex(crc32($Vd));}function checksums(){$Xd=array_values($this->driverFiles);foreach($this->plugins as$sj){$gk=new \ReflectionObject($sj);$Xd[]=$gk->getFileName();}$H=array();foreach($Xd as$p)$H[basename($p,'.php')]=self::checksum($p);return$H;}static function officialChecksums(){return array('adminer.js'=>'a0599090','backward-keys'=>'5fb34a8b','before-unload'=>'2a613523','config'=>'722eb4af','dark-switcher'=>'3d490dea','database-hide'=>'e304a899','designs'=>'ed7e44e3','dump-alter'=>'896b579e','dump-bz2'=>'f0d0e336','dump-date'=>'adc7f1c7','dump-json'=>'767dd321','dump-xml'=>'4fc3cd60','dump-zip'=>'93817d96','edit-foreign'=>'eb823bb0','edit-textarea'=>'a24c3cc','editor-setup'=>'a7dc3a37','editor-views'=>'5c12b185','enum-option'=>'1e24970e','file-upload'=>'10add0e8','foreign-system'=>'ebb4c654','frames'=>'b0e1d11a','highlight-codemirror'=>'c5716555','highlight-monaco'=>'edd1b0af','highlight-prism'=>'267948e5','import-csv'=>'d429c77','login-ip'=>'4d174fea','login-otp'=>'5b5a68af','login-passkey'=>'f69f2f06','login-password-less'=>'e150daac','login-reverse-proxy'=>'24558ea2','login-servers'=>'19c42e45','login-ssl'=>'2b06a5b7','login-table'=>'811f8cef','menu-links'=>'c78461b3','name-patterns'=>'84c10d09','remote-color'=>'ddeecc48','row-numbers'=>'eec8698c','select-email'=>'f84fbd2c','select-expression'=>'4b61d59c','select-foreign'=>'38ac915c','select-image'=>'f55c0231','slugify'=>'dec64713','sql-gemini'=>'c60ab309','sql-log'=>'8e435000','sql-url-length'=>'cd70f1a0','table-indexes-structure'=>'a90cc0c9','table-structure'=>'a8458e02','tables-filter'=>'ec2bcd6e','timeout'=>'97321caf','version-github'=>'627cadf9','version-noverify'=>'966937e9','clickhouse'=>'92ca960d','elastic'=>'1582a04d','firebird'=>'1c4309b2','igdb'=>'a6a1750a','imap'=>'3da1022b','mongo'=>'63486492','redis'=>'6a653462','simpledb'=>'b8e2cc7d',);}function __call($B,array$Wi){$Fa=array();foreach($Wi as$x=>$W)$Fa[]=&$Wi[$x];$H=null;foreach($this->hooks[$B]as$sj){$X=call_user_func_array(array($sj,$B),$Fa);if($X!==null){if(!self::$append[$B])return$X;$H=$X+(array)$H;}}return$H;}}abstract class Plugin{protected$translations=array();function description(){return$this->lang('');}function screenshot(){return"";}protected function lang($u,$Xh=null){$Fa=func_get_args();$Fa[0]=idx($this->translations[LANG],$u)?:$u;return call_user_func_array('Adminer\lang_format',$Fa);}}class Password{private$password_hash;private$password_matches=null;function __construct($jj){$this->password_hash=$jj;}function description(){return lang(93);}function credentials(){$D=get_password();return array(SERVER,$_GET["username"],($this->passwordMatches($D)&&!password_required()?"":$D));}function login($Hg,$D){if($this->passwordMatches($D))return true;if(!Driver::$passwords||!password_required())return false;}protected function passwordMatches($D){if($this->password_matches===null)$this->password_matches=(function_exists('password_verify')&&password_verify(strval($D),$this->password_hash));return$this->password_matches;}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new Plugins(null):new Adminer));SqlDriver::$drivers=array("server"=>"MySQL / MariaDB")+SqlDriver::$drivers;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class Db extends \mysqli{static$instance;var$extension="MySQLi",$flavor='';function __construct(){parent::init();}function attach(array$M,$U,$D){mysqli_report(MYSQLI_REPORT_OFF);$wj=$M["port"];$nd=("$M[host]$wj$M[socket]"=="");$Hl=adminer()->connectSsl();$zn=($Hl&&($Hl['key']||$Hl['cert']||$Hl['ca']||isset($Hl['verify'])));if($zn)$this->ssl_set($Hl['key'],$Hl['cert'],$Hl['ca'],'','');$H=@$this->real_connect((!$nd?$M["host"]:ini_get("mysqli.default_host")),(!$nd||$U!=""?$U:ini_get("mysqli.default_user")),(!$nd||$U.$D!=""?$D:ini_get("mysqli.default_pw")),null,($wj!=""?intval($wj):ini_get("mysqli.default_port")),($wj!=""?null:$M["socket"]),($zn?($Hl['verify']!==false?MYSQLI_CLIENT_SSL:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($H?'':$this->error);}function set_charset($ob){if(parent::set_charset($ob))return true;parent::set_charset('utf8');return$this->query("SET NAMES $ob");}function next_result(){return self::more_results()&&parent::next_result();}function quote($P){return"'".$this->escape_string($P)."'";}function inTransaction(){return false;}function begin(){return$this->begin_transaction();}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class Db extends SqlDb{private$link;function attach(array$M,$U,$D){if(ini_bool("mysql.allow_local_infile"))return lang(94,"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$wj="$M[port]$M[socket]";$B=$M["host"].($wj!=""?":$wj":"");$this->link=@mysql_connect(($B!=""?$B:ini_get("mysql.default_host")),($B.$U!=""?$U:ini_get("mysql.default_user")),($B.$U.$D!=""?$D:ini_get("mysql.default_password")),true,131072);if(!$this->link)return mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}function set_charset($ob){return mysql_set_charset($ob,$this->link)||mysql_set_charset('utf8',$this->link);}function quote($P){return"'".mysql_real_escape_string($P,$this->link)."'";}function select_db($rc){return mysql_select_db($rc,$this->link);}function query($F,$en=false){$G=@($en?mysql_unbuffered_query($F,$this->link):mysql_query($F,$this->link));$this->error="";if(!$G){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return false;}if($G===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return true;}return new Result($G);}}class Result{var$num_rows;private$result;private$offset=0;function __construct($G){$this->result=$G;$this->num_rows=mysql_num_rows($G);}function fetch_assoc(){return mysql_fetch_assoc($this->result);}function fetch_row(){return mysql_fetch_row($this->result);}function fetch_field(){$H=mysql_fetch_field($this->result,$this->offset++);$H->orgtable=$H->table;$H->native_type=idx(array("string"=>"varchar","real"=>"double"),$H->type,$H->type);return$H;}}}elseif(extension_loaded("pdo_mysql")){class Db extends PdoDb{var$extension="PDO_MySQL";function attach(array$M,$U,$D){$yi=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);if(isset($_GET["select"]))$yi[\PDO::MYSQL_ATTR_MULTI_STATEMENTS]=false;$Hl=adminer()->connectSsl();if($Hl){if($Hl['key'])$yi[\PDO::MYSQL_ATTR_SSL_KEY]=$Hl['key'];if($Hl['cert'])$yi[\PDO::MYSQL_ATTR_SSL_CERT]=$Hl['cert'];if($Hl['ca'])$yi[\PDO::MYSQL_ATTR_SSL_CA]=$Hl['ca'];if(isset($Hl['verify']))$yi[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$Hl['verify'];}$ff=$M["host"];$wj=$M["port"];$ul=$M["socket"];return$this->dsn("mysql:charset=utf8".($ff!=""?";host=$ff":'').($wj!=""?";port=$wj":($ul!=""?";unix_socket=$ul":"")),$U,$D,$yi);}function set_charset($ob){return$this->query("SET NAMES $ob");}function select_db($rc){return$this->query("USE ".idf_escape($rc));}function query($F,$en=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$en);return parent::query($F,$en);}}}class Driver extends SqlDriver{static$extensions=array("MySQLi","MySQL","PDO_MySQL");static$jush="sql";static$serverSocket=true;var$unsigned=array("unsigned","zerofill","unsigned zerofill");var$functions=array("char_length","date","from_unixtime","lower","round","floor","ceil","sec_to_time","time_to_sec","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");var$partitionBy=array("HASH","LINEAR HASH","KEY","LINEAR KEY","RANGE","LIST");function operators($Yl){return array("=","<",">","<=",">=","!=","&","LIKE","LIKE %%","REGEXP","IN","BETWEEN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL");}static function connect($M,$U,$D){$g=parent::connect($M,$U,$D);if(is_string($g)){if(function_exists('iconv')&&!is_utf8($g)&&strlen($Gk=iconv("windows-1252","utf-8//IGNORE",$g))>strlen($g))$g=$Gk;return$g;}$g->set_charset(charset($g));$g->query("SET sql_quote_show_create = 1, autocommit = 1");$g->flavor=(preg_match('~MariaDB~',$g->server_info)?'maria':'mysql');add_driver(DRIVER,($g->flavor=='maria'?"MariaDB":"MySQL"));return$g;}function __construct(Db$g){parent::__construct($g);$this->types=array(lang(29)=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),lang(30)=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),lang(31)=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),lang(95)=>array("enum"=>65535,"set"=>64),lang(32)=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),lang(34)=>array("geometry"=>0,"point"=>0,"linestring"=>0,"polygon"=>0,"multipoint"=>0,"multilinestring"=>0,"multipolygon"=>0,"geometrycollection"=>0),);$this->insertFunctions=array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date"=>"+ interval/- interval","time"=>"addtime/subtime","char|text"=>"concat",);if(min_version('5.7.8',10.2,$g))$this->types[lang(31)]["json"]=4294967295;if(min_version('',10.7,$g)){$this->types[lang(31)]["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version('',10.5,$g)){$this->types[lang(33)]["inet6"]=39;if(min_version('','10.10',$g))$this->types[lang(33)]["inet4"]=15;}if(min_version(9,11.7,$g))$this->types[lang(29)]["vector"]=16383;if(min_version(5.7,10.2,$g))$this->generated=array("STORED","VIRTUAL");}function unconvertFunction(array$n){return(preg_match("~binary~",$n["type"])?"UNHEX":($n["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"b''"):($n["type"]=="vector"?"".($this->conn->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."":(preg_match("~geom|point|linestring|polygon~",$n["type"])?"GeomFromText":""))));}function insert($Q,array$N){return($N?parent::insert($Q,$N):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function insertUpdate($Q,array$J,array$Ij){$e=array_keys(reset($J));$Dj="INSERT INTO ".table($Q)." (".implode(", ",$e).") VALUES\n";$Y=array();foreach($e as$x)$Y[$x]="$x = VALUES($x)";$Rl="\nON DUPLICATE KEY UPDATE ".implode(", ",$Y);$Y=array();$y=0;foreach($J as$N){$X="(".implode(", ",$N).")";if($Y&&(strlen($Dj)+$y+strlen($X)+strlen($Rl)>1e6)){if(!queries($Dj.implode(",\n",$Y).$Rl))return false;$Y=array();$y=0;}$Y[]=$X;$y+=strlen($X)+2;}return queries($Dj.implode(",\n",$Y).$Rl);}function slowQuery($F,$_m){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$_m FOR $F";elseif(preg_match('~^(SELECT\b)(.+)~is',$F,$A))return"$A[1] /*+ MAX_EXECUTION_TIME(".($_m*1000).") */ $A[2]";}}function convertColumn($u,array$n){if(preg_match("~binary~",$n["type"]))return"HEX($u)";if($n["type"]=="bit")return"BIN($u + 0)";if($n["type"]=="vector")return($this->conn->flavor=='maria'?"VEC_ToText":"VECTOR_TO_STRING")."($u)";if(preg_match("~geom|point|linestring|polygon~",$n["type"]))return(min_version(8)?"ST_":"")."AsWKT($u)";return"";}function convertSearch($u,array$W,array$n){return($this->convertColumn($u,$n)?:(preg_match('~'.text_type().'~',$n["type"])&&!preg_match("~^utf8~",$n["collation"])&&preg_match('~[\x80-\xFF]~',$W['val'])?"CONVERT($u USING ".charset($this->conn).")":$u));}function typeName(\stdClass$n){$B=parent::typeName($n);if($B!=""){$dn=array("TINY"=>"tinyint","SHORT"=>"smallint","LONG"=>"int","INT24"=>"mediumint","LONGLONG"=>"bigint","NEWDECIMAL"=>"decimal","VAR_STRING"=>"varchar","STRING"=>"char",);return idx($dn,$B,strtolower($B));}$dn=array("decimal","tinyint","smallint","int","float","double",7=>"timestamp","bigint","mediumint","date","time","datetime","year",15=>"varchar","bit",242=>"vector",245=>"json","decimal","enum","set","tinytext","mediumtext","longtext","text","varchar","char","geometry",);$H=idx($dn,$n->type,"");return($n->charsetnr==63?str_replace(array("text","varchar","char"),array("blob","varbinary","binary"),$H):$H);}function quoteBinary($Gk){return"X".q(bin2hex($Gk));}function md5($d,array$n){if(is_blob($n)||preg_match('~'.text_type().'~',$n["type"]))return"MD5(".(is_blob($n)||preg_match("~^utf8~",$n["collation"])?$d:"CONVERT($d USING ".charset($this->conn).")").")";}function warnings(){$G=$this->conn->query("SHOW WARNINGS");if($G&&$G->num_rows){ob_start();print_select_result($G);return ob_get_clean();}}function tableHelp($B,$Xf=false){$Jg=($this->conn->flavor=='maria');if(information_schema(DB))return strtolower(str_replace("_","-",DB)."-".($Jg?"$B-table/":str_replace("_","-",$B)."-table.html"));if(DB=="sys")return($Jg?"sys-schema/":strtolower("sys-".str_replace("_","-",preg_replace('~^x\$~','',$B)).".html"));if(DB=="mysql")return($Jg?"mysql$B-table/":"system-schema.html");}function partitionsInfo($Q){$se="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($Q);$G=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $se ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$I=($G?$G->fetch_row():null);if(!$I)return array();$H=array();list($H["partition_by"],$H["partition"],$H["partitions"])=$I;$fj=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $se AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$H["partition_names"]=array_keys($fj);$H["partition_values"]=array_values($fj);return$H;}function checkConstraints($Q){$H=parent::checkConstraints($Q);return($this->conn->flavor=='maria'?$H:array_map('stripslashes',$H));}function hasCStyleEscapes(){static$hb;if($hb===null){$El=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$hb=(strpos($El,'NO_BACKSLASH_ESCAPES')===false);}return$hb;}function hasEstimatedRows(){return true;}function isSystem($k,$K=""){return information_schema($k,$K)||in_array($k,array("mysql","sys"));}function lineComment(){return"#|-- ";}function engines(){$H=array();foreach(get_rows("SHOW ENGINES")as$I){if(preg_match("~YES|DEFAULT~",$I["Support"]))$H[]=$I["Engine"];}return$H;}function indexAlgorithms(array$Yl){return(preg_match('~^(MEMORY|NDB)$~',$Yl["Engine"])?array("HASH","BTREE"):array());}}function idf_escape($u){return"`".str_replace("`","``",$u)."`";}function table($u){return idf_escape($u);}function get_databases($he){$H=get_session("dbs");if($H===null){$F="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$Il=microtime(true);$H=($he?slow_query($F):get_vals($F));if(microtime(true)-$Il>0.1){restart_session();set_session("dbs",$H);stop_session();}}return$H;}function limit($F,$Z,$z,$fi=0,$Xk=" "){return" $F$Z".($z?$Xk."LIMIT $z".($fi?" OFFSET $fi":""):"");}function limit1($Q,$F,$Z,$Xk="\n"){return limit($F,$Z,1,0,$Xk);}function db_collation($k,array$Eb){$H=null;$i=get_val("SHOW CREATE DATABASE ".idf_escape($k),1);if(preg_match('~ COLLATE ([^ ]+)~',$i,$A))$H=$A[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$i,$A))$H=$Eb[$A[1]][-1];return$H;}function logged_user(){return get_val("SELECT CURRENT_USER()");}function tables_list(){return get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function count_tables(array$j){$H=array();foreach($j as$k)$H[$k]=count(get_vals("SHOW TABLES IN ".idf_escape($k)));return$H;}function table_status($B="",$Od=false){$H=array();$F="SELECT ENGINE AS Engine, TABLE_NAME AS Name, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($B!=""?"AND TABLE_NAME = ".q($B):"ORDER BY Name");$K=array();foreach(($Od?array():get_rows($F))as$I)$K[$I["Name"]]=$I;$Hj=null;foreach(get_rows($Od?$F:"SHOW TABLE STATUS".($B!=""?" LIKE ".q(addcslashes($B,"%_\\")):""))as$I){$Li=idx($K,$I["Name"]);if($Li){if($I["Comment"]!==$Li["Comment"]&&$I["Comment"]!==$Hj)$I["Error"]=$I["Comment"];$Hj=$I["Comment"];$I["Comment"]=$Li["Comment"];$I["Engine"]=$Li["Engine"];}if($I["Engine"]=="InnoDB")$I["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$I["Comment"]);if(!isset($I["Engine"]))$I["Comment"]="";if($B!="")$I["Name"]=$B;$H[$I["Name"]]=$I;}return$H;}function is_view(array$R){return$R["Engine"]===null;}function fk_support(array$R){return preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$R["Engine"]);}function parse_type($ve){preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$ve,$A);return array($A[1],$A[2],ltrim($A[3].$A[4]));}function fields($Q){$Jg=(connection()->flavor=='maria');$H=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($Q)." ORDER BY ORDINAL_POSITION")as$I){$n=$I["COLUMN_NAME"];$T=$I["COLUMN_TYPE"];$Ae=$I["GENERATION_EXPRESSION"];$Ld=$I["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Ld,$_e);list($cn,$y,$nn)=parse_type($T);$l=$I["COLUMN_DEFAULT"];if($l!=""){$Vf=preg_match('~text|json~',$cn);if(!$Jg&&$Vf)$l=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($l));if($Jg||$Vf){$l=($l=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($A){return stripslashes(str_replace("''","'",$A[1]));},$l));}if(!$Jg&&preg_match('~binary~',$cn)&&preg_match('~^0x(\w*)$~',$l,$A))$l=pack("H*",$A[1]);}$H[$n]=array("field"=>$n,"full_type"=>$T,"type"=>$cn,"length"=>$y,"unsigned"=>$nn,"default"=>($_e?($Jg?$Ae:stripslashes($Ae)):$l),"null"=>($I["IS_NULLABLE"]=="YES"),"auto_increment"=>($Ld=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Ld,$A)?$A[1]:""),"collation"=>$I["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$I[PRIVILEGES],where,order")),"comment"=>$I["COLUMN_COMMENT"],"primary"=>($I["COLUMN_KEY"]=="PRI"),"generated"=>($_e[1]=="PERSISTENT"?"STORED":$_e[1]),);}return$H;}function indexes($Q,$h=null){$H=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$h)as$I){$B=$I["Key_name"];$H[$B]["type"]=($B=="PRIMARY"?"PRIMARY":($I["Index_type"]=="FULLTEXT"?"FULLTEXT":($I["Non_unique"]?(preg_match('~^(SPATIAL|VECTOR)$~',$I["Index_type"])?$I["Index_type"]:"INDEX"):"UNIQUE")));$H[$B]["columns"][]=$I["Column_name"];$H[$B]["lengths"][]=($I["Index_type"]=="SPATIAL"?null:$I["Sub_part"]);$H[$B]["descs"][]=null;$H[$B]["algorithm"]=$I["Index_type"];}return$H;}function foreign_keys($Q){static$nj='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$H=array();$fc=get_val("SHOW CREATE TABLE ".table($Q),1);if($fc){preg_match_all("~CONSTRAINT ($nj) FOREIGN KEY ?\\(((?:$nj,? ?)+)\\) REFERENCES ($nj)(?:\\.($nj))? \\(((?:$nj,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$fc,$Mg,PREG_SET_ORDER);foreach($Mg as$A){preg_match_all("~$nj~",$A[2],$yl);preg_match_all("~$nj~",$A[5],$qm);$H[idf_unescape($A[1])]=array("db"=>idf_unescape($A[4]!=""?$A[3]:$A[4]),"table"=>idf_unescape($A[4]!=""?$A[4]:$A[3]),"source"=>array_map('Adminer\idf_unescape',$yl[0]),"target"=>array_map('Adminer\idf_unescape',$qm[0]),"on_delete"=>($A[6]?:"RESTRICT"),"on_update"=>($A[7]?:"RESTRICT"),);}}return$H;}function view($B){return array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($B),1)));}function collations(){$H=array();foreach(get_rows("SHOW COLLATION")as$I){if($I["Default"])$H[$I["Charset"]][-1]=$I["Collation"];else$H[$I["Charset"]][]=$I["Collation"];}ksort($H);foreach($H as$x=>$W)sort($H[$x]);return$H;}function information_schema($k,$K=""){return($k=="information_schema")||(min_version(5.5)&&$k=="performance_schema");}function error(){return h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function create_database($k,$Db){return queries("CREATE DATABASE ".idf_escape($k).($Db?" COLLATE ".q($Db):""));}function drop_databases(array$j){$H=apply_queries("DROP DATABASE",$j,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$H;}function rename_database($B,$Db){$H=false;if(create_database($B,$Db)){$S=array();$Mn=array();foreach(tables_list()as$Q=>$T){if($T=='VIEW')$Mn[]=$Q;else$S[]=$Q;}$H=(!$S&&!$Mn)||move_tables($S,$Mn,$B);drop_databases($H?array(DB):array());}return$H;}function auto_increment(){$Oa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$v){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$v["columns"],true)){$Oa="";break;}if($v["type"]=="PRIMARY")$Oa=" UNIQUE";}}return" AUTO_INCREMENT$Oa";}function alter_table($Q,$B,array$o,array$je,$f,$pd,$Db,$Na,$ej){$b=array();foreach($o as$n){if($n[1]){$l=$n[1][3];if(preg_match('~ GENERATED~',$l)){$n[1][3]=(connection()->flavor=='maria'?"":$n[1][2]);$n[1][2]=$l;}$b[]=($Q!=""?($n[0]!=""?"CHANGE ".idf_escape($n[0]):"ADD"):" ")." ".implode($n[1]).($Q!=""?$n[2]:"");}else$b[]="DROP ".idf_escape($n[0]);}$b=array_merge($b,$je);$O=($f!==null?" COMMENT=".q($f):"").($pd?" ENGINE=".q($pd):"").($Db?" COLLATE ".q($Db):"").($Na!=""?" AUTO_INCREMENT=$Na":"");if($ej){$fj=array();if($ej["partition_by"]=='RANGE'||$ej["partition_by"]=='LIST'){foreach($ej["partition_names"]as$x=>$W){$X=$ej["partition_values"][$x];$fj[]="\n PARTITION ".idf_escape($W)." VALUES ".($ej["partition_by"]=='RANGE'?"LESS THAN":"IN").($X!=""?" ($X)":" MAXVALUE");}}$O .="\nPARTITION BY $ej[partition_by]($ej[partition])";if($fj)$O .=" (".implode(",",$fj)."\n)";elseif($ej["partitions"])$O .=" PARTITIONS ".(+$ej["partitions"]);}elseif($ej===null)$O .="\nREMOVE PARTITIONING";if($Q=="")return queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$b)."\n)$O");if($Q!=$B)$b[]="RENAME TO ".table($B);if($O)$b[]=ltrim($O);return($b?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$b)):true);}function alter_indexes($Q,$b){$mb=array();foreach($b as$W)$mb[]=($W[2]=="DROP"?"\nDROP INDEX ".idf_escape($W[1]):"\nADD $W[0] ".($W[0]=="PRIMARY"?"KEY ":"").($W[1]!=""?idf_escape($W[1])." ":"")."(".implode(", ",$W[2]).")");return queries("ALTER TABLE ".table($Q).implode(",",$mb));}function truncate_tables(array$S){return apply_queries("TRUNCATE TABLE",$S);}function drop_views(array$Mn){return queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Mn)));}function drop_tables(array$S){return queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function move_tables(array$S,array$Mn,$qm){$mk=array();foreach($S as$Q)$mk[]=table($Q)." TO ".idf_escape($qm).".".table($Q);if(!$mk||queries("RENAME TABLE ".implode(", ",$mk))){$Bc=array();foreach($Mn as$Q)$Bc[table($Q)]=view($Q);connection()->select_db($qm);$k=idf_escape(DB);foreach($Bc as$B=>$Ln){if(!queries("CREATE VIEW $B AS ".str_replace(" $k."," ",$Ln["select"]))||!queries("DROP VIEW $k.$B"))return false;}return true;}return false;}function copy_tables(array$S,array$Mn,$qm){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($S as$Q){$B=($qm==DB?table("copy_$Q"):idf_escape($qm).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $B"))||!queries("CREATE TABLE $B LIKE ".table($Q))||!queries("INSERT INTO $B SELECT * FROM ".table($Q)))return false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$I){$Sm=$I["Trigger"];list($yd,$ai)=trigger_event($I);if(!queries("CREATE TRIGGER ".($qm==DB?idf_escape("copy_$Sm"):idf_escape($qm).".".idf_escape($Sm))." $I[Timing] $yd".($ai!=""?" $ai":"")." ON $B FOR EACH ROW\n$I[Statement];"))return false;}}foreach($Mn as$Q){$B=($qm==DB?table("copy_$Q"):idf_escape($qm).".".table($Q));$Ln=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $B"))||!queries("CREATE VIEW $B AS $Ln[select]"))return false;}return true;}function trigger_event(array$I){$_d=explode(",",$I["Event"]);$H=array();foreach(array("DELETE","INSERT","UPDATE")as$yd){if(in_array($yd,$_d))$H[]=$yd;}$H=implode(" OR ",$H);if(in_array("UPDATE",$_d)&&min_version('','12.0.1')&&preg_match('~\s(?:BEFORE|AFTER)\s+(.+?)\s+ON\s~is',get_val("SHOW CREATE TRIGGER ".idf_escape($I["Trigger"]),2),$A)&&preg_match('~\bOF\s+(.+)~is',$A[1],$ai))return array("$H OF",$ai[1]);return array($H,"");}function trigger($B,$Q){if($B=="")return array();$J=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($B));$H=reset($J);if($H)list($H["Event"],$H["Of"])=trigger_event($H);return($H?:array());}function triggers($Q){$H=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$I){list($yd)=trigger_event($I);$H[$I["Trigger"]]=array($I["Timing"],$yd);}return$H;}function trigger_options(){return array("Timing"=>array("BEFORE","AFTER"),"Event"=>(min_version('','12.0.1')?array("INSERT","UPDATE","UPDATE OF","DELETE","INSERT OR UPDATE","INSERT OR UPDATE OF","DELETE OR INSERT","DELETE OR UPDATE","DELETE OR UPDATE OF","DELETE OR INSERT OR UPDATE","DELETE OR INSERT OR UPDATE OF",):array("INSERT","UPDATE","DELETE")),"Type"=>array("FOR EACH ROW"),);}function routine($B,$T){$J=get_rows("SELECT PARAMETER_NAME, DTD_IDENTIFIER, PARAMETER_MODE, COLLATION_NAME FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND SPECIFIC_NAME = ".q($B)." ORDER BY ORDINAL_POSITION");$o=array();foreach($J as$I){$ve=$I["DTD_IDENTIFIER"];list($cn,$y,$nn)=parse_type($ve);$o[]=array("field"=>$I["PARAMETER_NAME"],"type"=>$cn,"length"=>$y,"unsigned"=>$nn,"null"=>true,"full_type"=>$ve,"inout"=>($T=="FUNCTION"?"":$I["PARAMETER_MODE"]),"collation"=>$I["COLLATION_NAME"],);}$H=connection()->query("SELECT ROUTINE_COMMENT comment, ROUTINE_DEFINITION definition, LOWER(EXTERNAL_LANGUAGE) language, IF(DEFINER = CURRENT_USER(), '', DEFINER) definer, IF(IS_DETERMINISTIC = 'YES', 'DETERMINISTIC', 'NOT DETERMINISTIC') is_deterministic, SQL_DATA_ACCESS data_access, CONCAT('SQL SECURITY ', SECURITY_TYPE) security FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND ROUTINE_NAME = ".q($B))->fetch_assoc();if(!$H)return array();$H['options']=array("DEFINER"=>$H['definer'],"DETERMINISTIC"=>$H['is_deterministic'],"SQL_DATA_ACCESS"=>$H['data_access'],"SQL_SECURITY"=>$H['security'],"COMMENT"=>$H['comment'],);if($o&&$o[0]['field']=='')$H['returns']=array_shift($o);$H['fields']=$o;return$H;}function routines(){return get_rows("SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function routine_languages(){return(min_version(9,99)?array("sql"=>"sql","javascript"=>"js"):array());}function routine_options($yk){return array("DEFINER"=>array(),"DETERMINISTIC"=>array("NOT DETERMINISTIC","DETERMINISTIC"),"SQL_DATA_ACCESS"=>array("CONTAINS SQL","NO SQL","READS SQL DATA","MODIFIES SQL DATA"),"SQL_SECURITY"=>array("SQL SECURITY DEFINER","SQL SECURITY INVOKER"),"COMMENT"=>array(),);}function routine_id($B,array$I){return idf_escape($B);}function last_id($G){return get_val("SELECT LAST_INSERT_ID()");}function explain(Db$g,$F){return$g->query("EXPLAIN ".(min_version(5.7)?"":"PARTITIONS ").$F);}function found_rows(array$R,array$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function create_sql($Q,$Na,$Pl){$H=get_val("SHOW CREATE TABLE ".table($Q),1);if(!$Na)$H=preg_replace('~(\n\)[^\n]*?) AUTO_INCREMENT=\d+~','\1',$H);return$H;}function truncate_sql($Q){return"TRUNCATE ".table($Q);}function use_sql($rc,$Pl=""){$B=idf_escape($rc);$H="";if(preg_match('~CREATE~',$Pl)&&($i=get_val("SHOW CREATE DATABASE $B",1))){set_utf8mb4($i);if($Pl=="DROP+CREATE")$H="DROP DATABASE IF EXISTS $B;\n";$H .="$i;\n";}return$H."USE $B";}function trigger_sql($Q){$H="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$I){list($I["Event"],$I["Of"])=trigger_event($I);$H .="\n".create_trigger(" ON ".table($I["Table"]),$I+array("Type"=>"FOR EACH ROW")).";\n";}return$H;}function show_variables(){return get_rows("SHOW VARIABLES");}function show_status(){return get_rows("SHOW STATUS");}function process_list(){return get_rows("SHOW FULL PROCESSLIST");}function convert_field(array$n){return driver()->convertColumn(idf_escape($n["field"]),$n);}function unconvert_field(array$n,$H){if(preg_match("~binary~",$n["type"]))$H="UNHEX($H)";if($n["type"]=="bit")$H="CONVERT(b$H, UNSIGNED)";if($n["type"]=="vector")$H=(connection()->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."($H)";if(preg_match("~geom|point|linestring|polygon~",$n["type"])){$Dj=(min_version(8)?"ST_":"");$H=$Dj."GeomFromText($H, $Dj"."SRID($n[field]))";}return$H;}function support($Pd){return preg_match('~^(comment|columns|copy|database|drop_col|dump|event|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'.(min_version(8)?'|descidx':'').(min_version('8.0.16','10.2.1')?'|check':'').(min_version(8,99)?'|fast_status':'').')$~',$Pd);}function kill_process($t){return queries("KILL ".number($t));}function connection_id(){return"SELECT CONNECTION_ID()";}function max_connections(){return get_val("SELECT @@max_connections");}function types($Kd=false){return array();}function type_values($t){return"";}function type_definition($t){return array("kind"=>"","definition"=>"");}function schemas(){return array();}function get_schema(){return"";}function set_schema($K,$h=null){return true;}function schema_comment($K){return"";}function set_schema_comment($K,$f){return true;}}define('Adminer\JUSH',Driver::$jush);define('Adminer\SERVER',"".$_GET[DRIVER]);define('Adminer\DB',"$_GET[db]");define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').($_GET["ext"]?"ext=".url_escape($_GET["ext"]).'&':'').(isset($_GET[DRIVER])?DRIVER."=".url_escape(SERVER).'&':'').(isset($_GET["username"])?"username=".url_escape($_GET["username"]).'&':'').(isset($_GET["db"])?'db='.url_escape(DB).'&'.(isset($_GET["ns"])?"ns=".url_escape($_GET["ns"])."&":""):''));if(isset($_GET["manifest"])){header("Content-Type: application/manifest+json; charset=utf-8");header("Cache-Control: no-cache");echo json_encode(adminer()->manifest(),64|256);exit;}function page_header($Bm,$m="",$db=array(),$Cm="",$Th=false,$Sc=""){if($Th){header("HTTP/1.1 404 Not Found");$m=($m?:lang(96));}page_headers();if(is_ajax()&&$m){page_messages($m);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$Dm=$Bm.($Cm!=""?": $Cm":"");$Em=strip_tags($Dm.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo' ',$Em,' ';$jc=adminer()->css();if(is_int(key($jc)))$jc=array_fill_keys($jc,'light');$Pe=in_array('light',$jc)||in_array('',$jc);$Ne=in_array('dark',$jc)||in_array('',$jc);$nc=($Pe?($Ne?null:false):($Ne?:null));$bh=" media='(prefers-color-scheme: dark)'";if($nc!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=6.1.2+30b83850");if(adminer()->head($nc))echo"\n","\n";if(adminer()->manifest())echo"\n";foreach($jc as$un=>$qh){$c=($qh=='dark'&&!$nc?$bh:($qh=='light'&&$Ne?" media='(prefers-color-scheme: light)'":""));echo"\n";}echo"\n\n",script((isset($_COOKIE["adminer_version"])||!adminer()->verifyVersion()?"":"onload = partial(verifyVersion, '".VERSION."');\n")." const offlineMessage = '".js_escape(lang(98))."'; const numberFormat = '".js_escape(lang(6))."'; const numberDigits = '".js_escape(lang(7))."'; const urlSeparators = '".js_escape(ini_get("arg_separator.input"))."';"),"\n","
    \n","\n";if($db!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'

    $Dm$Sc

    \n","
    \n";restart_session();page_messages($m);adminer()->serviceWorker();$j=&get_session("dbs");if(DB!=""&&$j&&!in_array(DB,$j,true))$j=null;stop_session();define('Adminer\PAGE_HEADER',1);ob_flush();flush();if($Th){page_footer($Th===true?"":$Th);exit;}}function service_worker(){$jk=has_passwords();$Ab=($jk?"navigator.serviceWorker.register('".js_escape(preg_replace('~\?.*~','',ME)."?file=worker.js&version=6.1.2+30b83850")."', {scope: location.pathname}).catch(() => {});":"navigator.serviceWorker.getRegistration().then(registration => registration && registration.unregister()); caches.keys().then(keys => keys.forEach(key => key.startsWith('adminer-') && caches.delete(key)));");echo script("if (navigator.serviceWorker) {\n\t$Ab\n}");}function has_passwords(){foreach((array)$_SESSION["pwds"]as$kl){foreach($kl as$Cn){foreach($Cn as$D){if($D!==null)return true;}}}return false;}function page_headers(){header("Content-Type: text/html; charset=utf-8");header("Cache-Control: no-cache");header("X-Frame-Options: deny");header("X-XSS-Protection: 0");header("X-Content-Type-Options: nosniff");header("Referrer-Policy: origin-when-cross-origin");foreach(adminer()->csp(csp())as$ic){$Ue=array();foreach($ic as$x=>$W)$Ue[]="$x $W";header("Content-Security-Policy: ".implode("; ",$Ue));}adminer()->headers();}function csp(){return array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self' https://www.adminer.org","frame-src"=>"https://www.adminer.org","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function design_checksums(){$_n=array();foreach(array_keys(adminer()->css())as$un)$_n[preg_replace('~\?.*~','',$un)]=true;$H=array();foreach(array("adminer.css","adminer-dark.css")as$p){if($_n[$p]&&file_exists($p)){preg_match('~^/\* Adminer design ([-\w]+) \*/~',file_get_contents($p),$A);$H[$p]=array((string)$A[1],Plugins::checksum($p));}}return$H;}function official_design_checksums(){return array('adminer-border/adminer.css'=>'ec757f3e','adminer-dark/adminer-dark.css'=>'a26bcd7b','brade/adminer.css'=>'be4161f0','bueltge/adminer.css'=>'1a8f00b4','cpanel/adminer.css'=>'59ce604e','dracula/adminer-dark.css'=>'cfaf61dd','esterka/adminer.css'=>'1f805f36','flat/adminer.css'=>'49a61af9','galkaev/adminer-dark.css'=>'16c46f94','haeckel/adminer.css'=>'147a3565','hever/adminer.css'=>'ef0e1948','konya/adminer.css'=>'2b409696','lavender-light/adminer.css'=>'bf03f5d7','lucas-sandery/adminer.css'=>'6596353','mancave/adminer-dark.css'=>'d9169f12','mvt/adminer.css'=>'ebd3afdc','nette/adminer.css'=>'1b8ac749','ng9/adminer.css'=>'488583cf','nicu/adminer.css'=>'a38b3b6a','pappu687/adminer.css'=>'b58d128c','paranoiq/adminer.css'=>'64d27e5','pepa-linha/adminer.css'=>'baf25f0','pokorny/adminer.css'=>'ee9eea6d','price/adminer.css'=>'81be9a85','rmsoft/adminer.css'=>'6cd4a237','rmsoft_blue-dark/adminer.css'=>'32102a8','rmsoft_blue/adminer.css'=>'7d8d5b18','win98/adminer.css'=>'e82d63c3',);}function version_iframe(){return(isset($_COOKIE["adminer_version"])||!adminer()->verifyVersion()?"":"");}function get_nonce(){static$Sh;if(!$Sh)$Sh=base64_encode(rand_string());return$Sh;}function page_messages($m){$tn=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$ih=idx($_SESSION["messages"],$tn);if($ih){echo"
    ".implode("
    \n
    ",$ih)."
    ".script("messagesPrint();");unset($_SESSION["messages"][$tn]);}if($m)echo"
    $m
    \n";if(adminer()->error)echo"
    ".adminer()->error."
    \n";}function page_footer($ph=""){echo"
    \n\n\n\n",script("setupSubmitHighlight(document);");}function int32($zh){while($zh>=2147483648)$zh-=4294967296;while($zh<=-2147483649)$zh+=4294967296;return(int)$zh;}function long2str(array$V,$On){$Gk='';foreach($V as$W)$Gk .=pack('V',$W);if($On)return substr($Gk,0,end($V));return$Gk;}function str2long($Gk,$On){$V=array_values(unpack('V*',str_pad($Gk,4*ceil(strlen($Gk)/4),"\0")));if($On)$V[]=strlen($Gk);return$V;}function xxtea_mx($Zn,$Yn,$Sl,$cg){return int32((($Zn>>5&0x7FFFFFF)^$Yn<<2)+(($Yn>>3&0x1FFFFFFF)^$Zn<<4))^int32(($Sl^$Yn)+($cg^$Zn));}function encrypt_string($Ml,$x){if($Ml=="")return"";$x=array_values(unpack("V*",pack("H*",md5($x))));$V=str2long($Ml,true);$zh=count($V)-1;$Zn=$V[$zh];$Yn=$V[0];$Tj=floor(6+52/($zh+1));$Sl=0;while($Tj-->0){$Sl=int32($Sl+0x9E3779B9);$dd=$Sl>>2&3;for($Ri=0;$Ri<$zh;$Ri++){$Yn=$V[$Ri+1];$yh=xxtea_mx($Zn,$Yn,$Sl,$x[$Ri&3^$dd]);$Zn=int32($V[$Ri]+$yh);$V[$Ri]=$Zn;}$Yn=$V[0];$yh=xxtea_mx($Zn,$Yn,$Sl,$x[$Ri&3^$dd]);$Zn=int32($V[$zh]+$yh);$V[$zh]=$Zn;}return long2str($V,false);}function decrypt_string($Ml,$x){if($Ml=="")return"";if(!$x)return false;$x=array_values(unpack("V*",pack("H*",md5($x))));$V=str2long($Ml,false);$zh=count($V)-1;$Zn=$V[$zh];$Yn=$V[0];$Tj=floor(6+52/($zh+1));$Sl=int32($Tj*0x9E3779B9);while($Sl){$dd=$Sl>>2&3;for($Ri=$zh;$Ri>0;$Ri--){$Zn=$V[$Ri-1];$yh=xxtea_mx($Zn,$Yn,$Sl,$x[$Ri&3^$dd]);$Yn=int32($V[$Ri]-$yh);$V[$Ri]=$Yn;}$Zn=$V[$zh];$yh=xxtea_mx($Zn,$Yn,$Sl,$x[$Ri&3^$dd]);$Yn=int32($V[0]-$yh);$V[0]=$Yn;$Sl=int32($Sl-0x9E3779B9);}return long2str($V,true);}$qj=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$W){list($x)=explode(":",$W);$qj[$x]=$W;}}function add_invalid_login(){$Va=get_temp_dir()."/adminer-invalid";foreach(glob("$Va*")?:array($Va)as$p){$pe=file_open_lock($p);if($pe)break;}if(!$pe)$pe=file_open_lock("$Va-".rand_string());if(!$pe)return;$Of=json_decode(stream_get_contents($pe),true);$zm=time();if($Of){foreach($Of as$Pf=>$W){if($W[0]<$zm)unset($Of[$Pf]);}}$Mf=&$Of[adminer()->bruteForceKey()];if(!$Mf)$Mf=array($zm+30*60,0);$Mf[1]++;file_write_unlock($pe,json_encode($Of));}function check_invalid_login(array&$qj){$Of=array();foreach(glob(get_temp_dir()."/adminer-invalid*")as$p){$pe=file_open_lock($p);if($pe){$Of=json_decode(stream_get_contents($pe),true);file_unlock($pe);break;}}$x=adminer()->bruteForceKey();$Mf=idx($Of,$x,array());$Rh=($Mf[1]>29?$Mf[0]-time():0);if($Rh>0){$m=lang(101,ceil($Rh/60));if($_SERVER["HTTP_X_FORWARDED_FOR"]!=""&&$x==$_SERVER["REMOTE_ADDR"])$m .='
    '.lang(102,'login-reverse-proxy'," href='https://www.adminer.org/plugins/?version=".VERSION."'".target_blank());auth_error($m,$qj,false);}}function password_required(){static$H;if($H===null){$H=(bool)get_session("password_required");if(!$H){$hc=adminer()->credentials();$H=!is_object(Driver::connect($hc[0],$hc[1],""));if($H)set_session("password_required",true);}}return$H;}function require_password_link($D){$uh="".lang(103)."";if(!function_exists('password_hash'))return" $uh";$tj=($D!==null?$D:base64_encode(substr(pack("H*",rand_string()),0,12)));$Te=password_hash($tj,PASSWORD_DEFAULT);$p="adminer-plugins.php";$Ed=file_exists("adminer-plugins.php");if($Ed)$Kf=($D!==null?lang(104,"$p"):lang(105,"$p","$tj"));else{$p="";$Kf=($D!==null?lang(106,$p):lang(107,$p,"$tj"));}$Ag="\tnew Adminer\\Password('".h($Te)."'),";$H="

    $Kf

    ".($Ed?$Ag:"<?php\nreturn array(\n$Ag\n);")."

    $uh ";return" ".lang(108)."

    ";}if(preg_match('~^[-\w$./]+$~',$_POST["password_less"])&&verify_token()){header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=adminer-plugins.php");echo"verifyLoginToken()||verify_token())){session_regenerate_id();$Jn=$Ma["driver"];$M=$Ma["server"];$U=$Ma["username"];$D=(string)$Ma["password"];$k=$Ma["db"];set_password($Jn,$M,$U,$D);$_SESSION["db"][$Jn][$M][$U][$k]=true;if($Ma["permanent"]){$x=implode("-",array_map('base64_encode',array($Jn,$M,$U,$k)));$Lj=adminer()->permanentLogin(true);$qj[$x]="$x:".base64_encode($Lj?encrypt_string($D,$Lj):"");cookie("adminer_permanent",implode(" ",$qj));}if(!array_diff(array_keys($_POST),array("auth","token"))||$Jn!=DRIVER||$M!=SERVER||$U!==$_GET["username"]||$k!=DB)redirect(auth_url($Jn,$M,$U,$k));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){Driver::disconnect();foreach(array("pwds","db","dbs","queries")as$x)set_session($x,null);unset_permanent($qj);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),lang(109).' '.lang(110));}elseif($qj&&!$_SESSION["pwds"]){session_regenerate_id();$Lj=adminer()->permanentLogin();foreach($qj as$x=>$W){list(,$yb)=explode(":",$W);list($Jn,$M,$U,$k)=array_map('base64_decode',explode("-",$x));set_password($Jn,$M,$U,decrypt_string(base64_decode($yb),$Lj));$_SESSION["db"][$Jn][$M][$U][$k]=true;}}function unset_permanent(array&$qj){foreach($qj as$x=>$W){list($Jn,$M,$U,$k)=array_map('base64_decode',explode("-",$x));if($Jn==DRIVER&&$M==SERVER&&$U==$_GET["username"]&&$k==DB)unset($qj[$x]);}cookie("adminer_permanent",implode(" ",$qj));}function auth_error($m,array&$qj,$Nf=true){$ll=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$ll]||$_GET[$ll])&&!$_SESSION["token"])$m=lang(111);elseif($Nf&&($D=get_password())!==null){restart_session();add_invalid_login();if($D===false)$m .=($m?'
    ':'').lang(112,target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);unset_permanent($qj);}}if(!$_COOKIE[$ll]&&$_GET[$ll]&&ini_bool("session.use_only_cookies"))$m=lang(113);$Wi=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Wi["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header(lang(45),$m,null);echo"
    \n","
    ";if(hidden_fields($_POST,array("auth","token")))echo"

    ".lang(114)."\n";echo input_token(),"

    \n";adminer()->loginForm();echo"
    \n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($qj);page_header(lang(115),lang(116,implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$g='';if(isset($_GET["username"])&&is_string(get_password())){check_invalid_login($qj);$hc=adminer()->credentials();$g=Driver::connect($hc[0],$hc[1],$hc[2]);if(is_object($g)){Db::$instance=$g;Driver::$instance=new Driver($g);if($g->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Hg=null;if(!is_object($g)||($Hg=adminer()->login($_GET["username"],get_password()))!==true){$m=(is_string($g)?nl_br(h($g)):(is_string($Hg)?$Hg:lang(117))).(preg_match('~^ | $~',get_password())?'
    '.lang(118):'');auth_error($m,$qj);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header(lang(100),lang(119));page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($Ma&&$_POST["token"])$_POST["token"]=get_token();$m='';if($_POST){if(!verify_token()){header("HTTP/1.1 403 Forbidden");$m=lang(119).' '.lang(120);}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){header("HTTP/1.1 413 Content Too Large");$m=lang(121,"post_max_size");if(isset($_GET["sql"]))$m .=' '.lang(122);}function print_select_result($G,$h=null,array$Ei=array(),&$z=0,&$ed=false){$Cg=array();$w=array();$e=array();$S=array();$Ij=array();$id=array();$dn=array();$H=array();$rh=$ed;$ed=false;for($s=0;(!$z||$s<$z)&&($I=$G->fetch_row());$s++){if(!$s){echo"
    \n","\n","";for($Zf=0;$Zffetch_field();$B=$n->name;$Q=(isset($n->table)?$n->table:"");$Di=(isset($n->orgtable)?$n->orgtable:"");$Ci=(isset($n->orgname)?$n->orgname:$B);$cn=driver()->typeName($n);if($Ei&&JUSH=="sql")$Cg[$Zf]=($B=="table"?"table=":($B=="possible_keys"?"indexes=":null));elseif($Di!=""){$wa=($Q!=""?$Q:$Di);if($Q!="")$H[$Q]=$Di;if(!isset($w[$wa])){if(!isset($Ij[$Di])){$Ij[$Di]=array();foreach(indexes($Di,$h)as$v){if($v["type"]=="PRIMARY"){$Ij[$Di]=array_flip($v["columns"]);break;}}}$S[$wa]=$Di;$w[$wa]=$Ij[$Di];$e[$wa]=$Ij[$Di];}if(isset($e[$wa][$Ci])){unset($e[$wa][$Ci]);$w[$wa][$Ci]=$Zf;$Cg[$Zf]=$wa;}elseif($rh&&isset($n->orgname)&&$n->db==DB&&!is_blob(array("type"=>$cn)))$id[$Zf]=array($wa,$Ci,preg_match('~text|json|lob~',$cn));}$dn[$Zf]=$cn;echo"\n";}$mf=array();foreach($w as$wa=>$v){if($v&&!$e[$wa]){$u="";foreach($v as$Bb=>$Zf){if($I[$Zf]===null){$u=null;break;}$u .="&where[".url_escape(bracket_escape($Bb))."]=".url_escape($I[$Zf]);}$mf[$wa]=$u;}}echo"";foreach($I as$x=>$W){$_="";if(isset($Cg[$x])){if($Ei&&JUSH=="sql"){$Q=$I[array_search("table=",$Cg)];$_=ME.$Cg[$x].url_escape($Ei[$Q]!=""?$Ei[$Q]:$Q);}elseif(idx($mf,$Cg[$x])!==null)$_=ME."edit=".url_escape($S[$Cg[$x]]).$mf[$Cg[$x]];}$hf=select_value($W,$_,array('type'=>(preg_match('~binary~',$dn[$x])?'blob':$dn[$x])),null);$c="";$kb=idx($id,$x);if($kb&&idx($mf,$kb[0])!==null&&is_utf8($W)){$ed=true;$c=" data-name='".h("val[".bracket_escape($S[$kb[0]])."][".bracket_escape(substr($mf[$kb[0]],1))."][".bracket_escape($kb[1])."]")."' data-text='".($kb[2]?1:0)."'".(html_entity_decode(strip_tags($hf),ENT_QUOTES,"UTF-8")!==$W?" data-value='".h($W)."'":"");}echo"$hf";}}$z=$s;echo($s?"
    ".h($B).($Ei?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($B),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}foreach($id as$Zf=>$kb){if($e[$kb[0]])unset($id[$Zf]);}echo"
    \n
    ":"

    ".lang(16))."\n";return$H;}function textarea($B,$X,$J=10,$Fb=80,$bg=JUSH){echo"";}function select_input($c,array$yi,$X="",$rj=""){if($yi&&$X!=""&&!isset($yi[$X]))$yi=array($X=>$X)+$yi;$pm=($yi?"select":"input");return"<$pm$c".($yi?">

    ".lang(141,get_driver(DRIVER),"".h(connection()->server_info)."","".connection()->extension."")."\n","

    ".lang(142,"".h(logged_user())."")."\n";$j=adminer()->databases();if($j){$Kk=support("scheme");$Eb=collations();echo"

    \n","\n","".(support("database")?"\n";$j=($_GET["dbsize"]?count_tables($j):array_flip($j));foreach($j as$k=>$S){$xk=h(preg_replace('~&db=[^&]*~','',ME))."db=".url_escape($k);$t=h("Db-".$k);echo"".(support("database")?"
    ":"")."".lang(44).(get_session("dbs")!==null?" - ".lang(143)."":"")."".lang(144)."".lang(145)."".lang(146)." - ".lang(147).""."
    ".checkbox("db[]",$k,in_array($k,(array)$_POST["db"]),"","","",$t):""),"".h($k)."";$Db=h(db_collation($k,$Eb));echo"".(support("database")?"$Db":$Db),"".($_GET["dbsize"]?format_number($S):"?")."","".($_GET["dbsize"]?db_size($k):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),input_token(),"
    \n",script("tableCheck();");}$qa=adminer();$vj=($qa instanceof Plugins?$qa->plugins:array());$Wc=($qa instanceof Plugins?$qa->drivers:array());$Hc=design_checksums();if($vj||$Wc||$Hc){$wb=($qa instanceof Plugins?$qa->checksums():array());$ci=Plugins::officialChecksums();$qn=function($un){return" (".VERSION.")";};$uj=function($Vd)use($wb,$ci,$qn){return($wb[$Vd]&&$ci[$Vd]&&$wb[$Vd]!==$ci[$Vd]?$qn("https://www.adminer.org/plugins/?version=".VERSION):"");};echo"
    \n","

    ".lang(150)."

    \n
      \n";foreach($vj as$sj){$gk=new \ReflectionObject($sj);$Ec=(method_exists($sj,'description')?$sj->description():"");if(!$Ec){if(preg_match('~^/[\s*]+(.+)~',$gk->getDocComment(),$A))$Ec=$A[1];}$Lk=(method_exists($sj,'screenshot')?$sj->screenshot():"");echo"
    • ".get_class($sj)."".h($Ec?": $Ec":"").($Lk?" (".lang(151).")":"").$uj(basename((string)$gk->getFileName(),'.php'))."\n";}foreach($Wc as$t=>$B)echo"
    • ".h($t).": ".h($B).$uj(basename((string)$qa->driverFiles[$t],'.php'))."\n";if($Hc){$ei=official_design_checksums();foreach($Hc as$p=>$Gc){list($B,$vb)=$Gc;$di=$ei["$B/$p"];echo"
    • ".h($p)."".h($B?": $B":"").($di&&$di!==$vb?$qn("https://www.adminer.org/?version=".VERSION."#extras"):"")."\n";}}echo"
    \n";adminer()->pluginsLinks();echo"
    \n";}}page_footer("db");exit;}if(support("scheme")){if(DB!=""&&$_GET["ns"]!==""){if(!isset($_GET["ns"]))redirect(preg_replace('~&db=[^&]+~','\0&ns='.url_escape(get_schema()),relative_uri()));if(!set_schema($_GET["ns"]))page_header(lang(88).h(": $_GET[ns]"),adminer()->error(),true,"","ns");}}adminer()->afterConnect();class TmpFile{private$handler;var$size=0;function __construct(){$this->handler=tmpfile();}function write($Xb){$this->size+=strlen($Xb);fwrite($this->handler,$Xb);}function send(){fseek($this->handler,0);fpassthru($this->handler);fclose($this->handler);}}if($_GET["select"]!=""&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["callf"]))$_GET["call"]=$_GET["callf"];if(isset($_GET["function"]))$_GET["procedure"]=$_GET["function"];if(isset($_GET["download"])){$a=$_GET["download"];$o=fields($a);header("Content-Type: application/octet-stream");$Y=array_merge((array)$_GET["where"],(array)$_GET["val"]);header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$Y)).".".friendly_url($_GET["field"]));$L=array(idf_escape($_GET["field"]));$G=driver()->select($a,$L,array(where($_GET,$o)),$L);$I=($G?$G->fetch_row():array());echo driver()->value($I[0],$o[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$o=fields($a);if(!$o)$m=adminer()->error();$R=table_status1($a);$B=adminer()->tableName($R);$m=$m?:h($R["Error"]);page_header(($o&&is_view($R)?$R['Engine']=='materialized view'?lang(152):lang(153):lang(154)).": ".($B!=""?$B:h($a)),$m,array(),"",!$o,($o?doc_link(array(JUSH=>driver()->tableHelp($a,is_view($R)))):""));$wk=array();foreach($o as$x=>$n)$wk+=$n["privileges"];adminer()->selectLinks($R,(isset($wk["insert"])||!support("table")?"":null));$f=$R["Comment"];if($f!="")echo"

    ".lang(59).": ".adminer()->commentValue('TABLE',$f)."\n";if($o)adminer()->tableStructurePrint($o,$R);function tables_links(array$S){echo"

    \n";}$Df=driver()->inheritsFrom($a);if($Df){echo"

    ".lang(155)."

    \n";tables_links($Df);}if(support("indexes")&&driver()->supportsIndex($R)){echo"
    \n","

    ".lang(156)."

    \n";$w=indexes($a);if($w)adminer()->tableIndexesPrint($w,$R);if(driver()->supportsAlterIndex($R))echo'
    \n";}if(!is_view($R)&&driver()->supportsAlterTable($R)){if(fk_support($R)){echo"
    \n","

    ".lang(123)."

    \n";$le=foreign_keys($a);if($le){echo"\n","\n";foreach($le as$B=>$q){echo"","
    ".lang(158)."".lang(159)."".lang(126)."".lang(125)."
    ".implode(", ",array_map('Adminer\h',$q["source"]))."";$_=($q["db"]!=""?preg_replace('~&db=[^&]*~',"&db=".url_escape($q["db"]),ME):($q["ns"]!=""?preg_replace('~&ns=[^&]*~',"&ns=".url_escape($q["ns"]),ME):ME));echo"".($q["db"]!=""&&$q["db"]!=DB?"".h($q["db"]).".":"").($q["ns"]!=""&&$q["ns"]!=$_GET["ns"]?"".h($q["ns"]).".":"").h($q["table"])."","(".implode(", ",array_map('Adminer\h',$q["target"])).")","".h($q["on_delete"]),"".h($q["on_update"]),''.lang(160).'',"\n";}echo"
    \n";}echo'
    \n";}if(support("check")){echo"
    \n","

    ".lang(162)."

    \n";$rb=driver()->checkConstraints($a);if($rb){echo"\n";foreach($rb as$x=>$W)echo"","
    ".shorten_utf8(preg_replace('~\s+~',' ',ltrim($W)),80,""),"".lang(160)."","\n";echo"
    \n";}echo'
    \n";}}if(support(is_view($R)?"view_trigger":"trigger")&&driver()->supportsAlterTable($R)){echo"
    \n","

    ".lang(164)."

    \n";$Wm=triggers($a);if($Wm){echo"\n";foreach($Wm as$x=>$W){echo"
    ".h($W[0])."".h($W[1])."".h($x)."".lang(160)."";$yk=$W[2];if($yk){$_k=preg_replace('~&ns=[^&]*~',"&ns=".url_escape($yk["ns"]),ME).'function='.url_escape($yk["function"]).'&name='.url_escape($yk["name"]);echo", ".lang(165)."";}echo"\n";}echo"
    \n";}echo'
    \n";}$ol=driver()->shadowTables($a);if($ol){echo"

    ".lang(167)."

    \n";tables_links($ol);}$Cf=driver()->inheritedTables($a);if($Cf){echo"

    ".lang(168)."

    \n";$aj=driver()->partitionsInfo($a);if($aj)echo"

    BY ".h("$aj[partition_by]($aj[partition])")."\n";tables_links($Cf);}}elseif(isset($_GET["schema"])){page_header(lang(79),"",array(),h(DB.($_GET["ns"]?".$_GET[ns]":"")));function schema_column($Q,array$fk,array&$e){if(!isset($e[$Q])){$e[$Q]=0;foreach((array)idx($fk,$Q)as$B=>$hk){if($B!=$Q)$e[$Q]=max($e[$Q],schema_column($B,$fk,$e)+1);}}return$e[$Q];}function type_class($T){foreach(array('char'=>'text','date'=>'time|year','binary'=>'blob','enum'=>'set',)as$x=>$W){if(preg_match("~$x|$W~",$T))return" class='$x'";}}$gm=array();$im=array();$hm=array();$Sd=array();$da=($_GET["schema"]?:$_COOKIE["adminer_schema-".str_replace(".","_",DB)]);preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~',$da,$Mg,PREG_SET_ORDER);foreach($Mg as$s=>$A){$gm[$A[1]]=array((float)$A[2],(float)$A[3]);$im[]="\n\t'".js_escape($A[1])."': [ $A[2], $A[3] ]";}$K=array();$fk=array();$le=array();$za=driver()->allFields();$Ze=array();$jm=array();foreach(table_status('',true)as$Q=>$R){if(!is_view($R)){if(adminer()->tableName($R)!=""&&!$R["dependent"])$jm[$Q]=$R;else$Ze[$Q]=true;}}foreach($jm as$Q=>$R){$E=0;$K[$Q]["fields"]=array();foreach($za[$Q]as$n){$E+=1.25;$Sd[$Q][$n["field"]]=$E;$K[$Q]["fields"][$n["field"]]=$n;}foreach(adminer()->foreignKeys($Q)as$W){if($W["db"]==""&&$W["ns"]==""&&!$Ze[$W["table"]]){$le[$Q][]=$W;$fk[$W["table"]][$Q]=array();}}}$e=array();$De=array();$Xn=array();$Je=array();foreach(array_keys($K)as$B)schema_column($B,$fk,$e);arsort($e);foreach($e as$B=>$d){$nh=null;foreach((array)idx($le,$B)as$W){if($W["table"]!=$B&&$K[$W["table"]])$nh=($nh===null?$e[$W["table"]]:min($nh,$e[$W["table"]]));}$e[$B]=max($d,(int)$nh-1);}foreach($K as$B=>$Q){$d=$e[$B];$De[$d][]=$B;$ym=.75*strlen($B);foreach($Q["fields"]as$n)$ym=max($ym,.65*strlen($n["field"]));$Xn[$d]=max(idx($Xn,$d,0),ceil($ym)+1);}foreach($le as$B=>$Hn){foreach($Hn as$W){$Ie=$e[$B]+(idx($e,$W["table"],$e[$B])>$e[$B]?1:0);$Je[$Ie]=idx($Je,$Ie,0)+1;}}ksort($De);$Xe=0;$Wn=0;$Gb=0;$Gj=null;$cm=array();$lm=array();foreach($De as$d=>$S){if($Gj!==null){$Gb=round($Gb+$Xn[$Gj]+1.7+idx($Je,$d,0)*.1,1);$Ai=array();foreach($S as$B){$Sl=0;$ec=0;$Gh=array_keys((array)idx($fk,$B));foreach((array)idx($le,$B)as$W)$Gh[]=$W["table"];foreach($Gh as$_h){if($K[$_h]&&$e[$_h]<$d){$Sl+=$K[$_h]["pos"][0];$ec++;}}$Ai[$B]=($ec?$Sl/$ec:$Xe);}asort($Ai);$S=array_keys($Ai);}$Im=0;foreach($S as$B){$E=1.25*count($K[$B]["fields"]);$K[$B]["pos"]=($gm[$B]?:array($Im,$Gb));$cm[$B]=$K[$B]["pos"][1];$lm[$B]=$Xn[$d];$Im+=2.5+$E;$Xe=max($Xe,$K[$B]["pos"][0]+2.5+$E);$Wn=max($Wn,round($K[$B]["pos"][1]+$Xn[$d],1));if(!$gm[$B])$hm[]="\n\t'".js_escape($B)."': [ ".$K[$B]["pos"][0].", ".$K[$B]["pos"][1]." ]";}$Gj=$d;}$ug=array();$Wa=array();foreach($le as$B=>$Hn){foreach($Hn as$W){$rm=idx($cm,$W["table"],$cm[$B]);$zl=$cm[$B]+$lm[$B];$vk=($rm-1>$zl);$sg=($vk?$zl+1:min($cm[$B],$rm)-1);$Va=idx($Wa,(string)$sg,0);$Wa[(string)$sg]=$Va+1;$sg=round($vk?min($sg+$Va*.1,$rm-1):$sg-$Va*.1,1);while($ug[(string)$sg])$sg-=.0001;$K[$B]["references"][$W["table"]][(string)$sg]=array($W["source"],$W["target"]);$fk[$W["table"]][$B][(string)$sg]=$W["target"];$ug[(string)$sg]=true;}}echo'

    const tablePos = {',implode(",",$im)."\n",'}; const tablePosDefault = {',implode(",",$hm)."\n",'}; const em = qs(\'#schema\').offsetHeight / ',$Xe,'; document.onmousemove = schemaMousemove; document.onmouseup = event => schemaMouseup(event, \'',js_escape(DB),'\'); ';foreach($K as$B=>$Q){echo"
    ",''.h($B)."";foreach($Q["fields"]as$n){$W=''.h($n["field"]).'';echo"
    ".($n["primary"]?"$W":$W);}foreach((array)$Q["references"]as$sm=>$hk){foreach($hk as$sg=>$ck){$tg=$sg-$Q["pos"][1];$Pl=($tg>0?"left: 100%; width: calc($tg"."em - 100%)":"left: $tg"."em");$Wn=($tg>0?"100%":(-$tg)."em");$s=0;foreach($ck[0]as$yl)echo"\n
    "."
    ";}}foreach((array)$fk[$B]as$sm=>$hk){foreach($hk as$sg=>$tm){$tg=$sg-$Q["pos"][1];$s=0;foreach($tm as$qm)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($K as$B=>$Q){foreach((array)$Q["references"]as$sm=>$hk){if($K[$sm]){foreach($hk as$sg=>$ck){$oh=$Xe;$Ug=-10;foreach($ck[0]as$x=>$yl){$xj=$Q["pos"][0]+$Sd[$B][$yl];$yj=$K[$sm]["pos"][0]+$Sd[$sm][$ck[1][$x]];$oh=min($oh,$xj,$yj);$Ug=max($Ug,$xj,$yj);}echo"
    \n";}}}}echo'
    ';$uc=array('','USE','DROP+CREATE','CREATE');$Ik=(JUSH=="mssql"?array('','DROP+CREATE','CREATE'):$uc);$km=array('','DROP+CREATE','CREATE');$pc=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$pc[]='INSERT+UPDATE';$I=get_settings("adminer_export");if(!$I)$I=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"schema_style"=>"","table_style"=>"DROP+CREATE","data_style"=>"INSERT");echo"
    ".lang(170)."".html_radios("output",adminer()->dumpOutput(),$I["output"])."\n","
    ".lang(171)."".html_radios("format",adminer()->dumpFormat(),$I["format"])."\n",(JUSH=="sqlite"?"":"
    ".lang(44)."".html_select('db_style',$uc,$I["db_style"]).(support("type")?checkbox("types",1,$I["types"],lang(0)):"").(support("routine")?checkbox("routines",1,$I["routines"],lang(81)):"").(support("event")?checkbox("events",1,$I["events"],lang(83)):"")),(function_exists('Adminer\use_schema_sql')?"
    ".lang(88)."".html_select('schema_style',$Ik,$I["schema_style"]):""),"
    ".lang(145)."".html_select('table_style',$km,$I["table_style"]).checkbox("auto_increment",1,$I["auto_increment"],lang(60)).(support("trigger")?checkbox("triggers",1,$I["triggers"],lang(164)):""),"
    ".lang(172)."".html_select('data_style',$pc,$I["data_style"]),'
    ';adminer()->dumpPrint();echo'

    ',input_token(),' ';$Ej=array();if($_GET["ns"]===""&&support("scheme")){echo"","","\n";foreach(adminer()->schemas()as$K){if(!information_schema(DB,$K))echo"".checkbox("schemas[]",$K,true,$K,"","block")."\n";}}elseif(DB!=""){$tb=($a!=""?"":" checked");echo"","","","\n";$Mn="";$nm=tables_list();foreach($nm as$B=>$T){$Dj=preg_replace('~_.*~','',$B);$tb=($a==""||$a==(substr($a,-1)=="%"?"$Dj%":$B));$Kj="".checkbox("tables[]",$B,$tb,$B,"","block");if($T!==null&&!preg_match('~table~i',$T))$Mn .="$Kj\n";else echo"$Kj\n";$Ej[$Dj]++;}echo$Mn;if($nm)echo script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{$j=adminer()->databases();echo"","","\n";if($j){foreach($j as$k){if(!information_schema($k)){$Dj=preg_replace('~_.*~','',$k);echo"".checkbox("databases[]",$k,$a==""||$a=="$Dj%",$k,"","block")."\n";$Ej[$Dj]++;}}}else echo"";}echo' ';$be=true;foreach($Ej as$x=>$W){if($x!=""&&$W>1){echo($be?"

    ":" ")."".h($x)."";$be=false;}}}elseif(isset($_GET["privileges"])){page_header(lang(80));echo'

    \n";hidden_fields_get();echo input_hidden("db",DB),($Be?"":input_hidden("grant")),"\n","\n";while($I=$G->fetch_assoc())echo'
    ".lang(42)."".lang(40)."
    '.h($I["User"]),"".h($I["Host"]),''.lang(14)."\n";if(!$Be||DB!="")echo"
    ","","\n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$m&&$_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers("sql");if($_POST["format"]=="sql")echo"$_POST[query]\n";else{adminer()->dumpTable("","");adminer()->dumpData("","table",$_POST["query"]);adminer()->dumpFooter();}exit;}if(!$m&&$_POST["val"]){$ta=0;$Ql=true;$lb=array();$Fk=0;foreach($_POST["val"]as$J)$Fk+=count($J);$Ya=$Fk>1&&driver()->begin();foreach($_POST["val"]as$am=>$J){$Q=bracket_escape($am,true);$o=fields($Q);$bm=indexes($Q);foreach($J as$u=>$I){parse_str(bracket_escape($u,true),$Z);$hn=array();foreach($Z["where"]as$x=>$W)$hn[bracket_escape($x,true)]=$W;if(!$o||$Z["null"]||array_diff_key($hn,$o)||!unique_array($hn,$bm)){$Ql=false;break 2;}$N=array();$L=array();foreach($I as$dg=>$W){$x=bracket_escape($dg,true);$n=idx($o,$x);if(!$n){$Ql=false;break 3;}$N[idf_escape($x)]=(preg_match('~char|text~',$n["type"])||$W!=""?adminer()->processInput($n,$W):"NULL");$L[$dg]=$x;}$Wj=where($Z,$o);if(!driver()->update($Q,$N," WHERE $Wj",0," ")){$Ql=false;break 2;}$ta+=connection()->affected_rows;$e=array();foreach($L as$x)$e[]=idf_escape($x);$rn=driver()->select($Q,$e,array($Wj),$e);$Nh=($rn?$rn->fetch_row():array());$Zf=0;foreach($L as$dg=>$x){$n=$o[$x];$Ol=array('type'=>(preg_match('~binary~',$n["type"])?'blob':$n["type"]));$lb["val[$am][$u][$dg]"]=select_value(idx($Nh,$Zf++),"",$Ol,null);}}}if($Ya&&$Ql)$Ql=driver()->commit();queries_redirect(null,lang(175,$ta),$Ql);if($Ya&&!$Ql)driver()->rollback();page_headers();page_messages($m);foreach($lb as$B=>$W)echo"\n";exit;}restart_session();$df=&get_session("queries");$cf=&$df[DB];if(!$m&&$_POST["clear"]){$cf=array();redirect(remove_from_uri("history"));}stop_session();$ra=get_settings("adminer_import");if($_POST&&$ra)save_settings($ra,"adminer_import");page_header((isset($_GET["import"])?lang(84):lang(73)),$m);$Bg=driver()->lineComment();if(!$m&&$_POST&&!(isset($_GET["import"])&&adminer()->importProcess())){$Cc=driver()->delimiter;$pe=false;if(!isset($_GET["import"]))$F=$_POST["query"];elseif($_POST["webfile"]){$Cl=adminer()->importServerPath();$pe=@fopen((file_exists($Cl)?$Cl:"compress.zlib://$Cl.gz"),"rb");$F=($pe?fread($pe,1e6):false);}else$F=get_file("sql_file",true,$Cc);if(is_string($F)){if(($ch=ini_bytes("memory_limit"))!="-1")ini_set("memory_limit",max($ch,strval(2*strlen($F)+memory_get_usage()+8e6)));if($F!=""&&strlen($F)<1e6){$Tj=$F.(preg_match("~$Cc\\s*\$~",$F)?"":$Cc);if(!$cf||first(end($cf))!=$Tj){restart_session();$cf[]=array($Tj,time());set_session("queries",$df);stop_session();}}$_l="(?:\\s|\xEF\xBB\xBF|/\\*[\s\S]*?\\*/|(?:$Bg)[^\n]*\n?|--\r?\n)";$fi=0;$nd=true;$dc=false;$h=connect();if($h&&DB!=""){$h->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$h);}$Ib=0;$vd=array();$Xi='[\'"'.(JUSH=="sql"?'`':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|'.$Bg.'|$'.(JUSH=="pgsql"?'|\$([a-zA-Z]\w*)?\$':'');$Jm=microtime(true);while($F!=""){if(!$fi&&preg_match("~^$_l*+DELIMITER\\s+(\\S+)~i",$F,$A)){$Cc=preg_quote($A[1]);$F=substr($F,strlen($A[0]));}elseif(!$fi&&JUSH=='pgsql'&&preg_match("~^($_l*+COPY\\s+)[^;]+\\s+FROM\\s+stdin;~i",$F,$A)){$Cc="\n\\\\\\.\r?\n";$dc=true;$fi=strlen($A[0]);}else{preg_match("($Cc\\s*|$Xi)",$F,$A,PREG_OFFSET_CAPTURE,$fi);list($ne,$E)=$A[0];if(!$ne&&$pe&&!feof($pe))$F .=fread($pe,1e5);else{if(!$ne&&rtrim($F)=="")break;$fi=$E+strlen($ne);if($ne&&!preg_match("(^$Cc)",$ne)){$ib=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($E>0&&strtolower($F[$E-1])=="e"));$nj=($ne=='/*'?'\*/':($ne=='['?']':(preg_match("~^(?:$Bg)~",$ne)?"\n":preg_quote($ne).($ib?'|\\\\.':''))));while(preg_match("($nj|\$)s",$F,$A,PREG_OFFSET_CAPTURE,$fi)){$Gk=$A[0][0];if(!$Gk&&$pe&&!feof($pe))$F .=fread($pe,1e5);else{$fi=$A[0][1]+strlen($Gk);if(!$Gk||$Gk[0]!="\\")break;}}}else{$Tj=substr($F,0,$E+($dc?3:0));$F=substr($F,$fi);$fi=0;if($dc){$Cc=driver()->delimiter;$dc=false;}$Ab="".adminer()->sqlCommandQuery($Tj)."";if(preg_match("~^$_l*+\$~",$Tj)&&!preg_match('~/\*M?!~',$Tj)){echo($_POST["only_errors"]?"":"
    $Ab
    \n");continue;}$nd=false;$Ib++;$Kj="
    $Ab
    \n";if(JUSH=="sqlite"&&preg_match("~^$_l*+(ATTACH|VACUUM\\b.*\\bINTO)\\b~is",$Tj,$A)!==0){echo$Kj,"

    ".lang(176,preg_match('~ATTACH~i',$A[1])?'ATTACH':'VACUUM INTO')."\n";$vd[]=" $Ib";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$Kj;ob_flush();flush();}$Il=microtime(true);if(connection()->multi_query($Tj)&&$h&&preg_match("~^$_l*+USE\\b~i",$Tj))$h->query($Tj);do{$G=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$Kj:""),"

    ".lang(177).(connection()->errno?" (".connection()->errno.")":"").": ".adminer()->error()."\n";$vd[]=" $Ib";if($_POST["error_stops"])break 2;}else{$_=ME."sql=".url_escape(trim($Tj));$zm=" (".format_time($Il).")".(strlen($_)sqlUrlLength()-100?" ".lang(14)."":"");$ta=connection()->affected_rows;$Qn=($_POST["only_errors"]?"":driver()->warnings());$Rn="warnings-$Ib";if($Qn)$zm .=", ".lang(55)."";$Fd="";$Gd="explain-$Ib";if(is_object($G)){$z=$_POST["limit"];$Wh=$z;$ed=!$_POST["only_errors"];if($ed)echo"

    \n";$Ei=print_select_result($G,$h,array(),$Wh,$ed);if(!$_POST["only_errors"]){$Wh=max($G->num_rows,$Wh);echo"
    \n";}}else{if(preg_match("~^$_l*+(CREATE|DROP|ALTER)$_l++(DATABASE|SCHEMA)\\b~i",$Tj)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"

    ".lang(181,$ta)."$zm\n";}echo($Qn?"

    \n":""),($Fd!=""?"\n":"");}$Il=microtime(true);}while(connection()->next_result());}}}}}if($nd)echo"

    ".lang(182)."\n";else{$sf=connection()->inTransaction();driver()->rollback();if($sf)echo"

    ROLLBACK".(JUSH=="mssql"?" TRANSACTION":"")." -- Adminer
    \n";if($_POST["only_errors"])echo"

    ".lang(183,$Ib-count($vd))," (".format_time($Jm).")\n";elseif($vd&&$Ib>1)echo"

    ".lang(177).": ".implode("",$vd)."\n";}}else echo"

    ".upload_error($F)."\n";}echo'

    sqlUrlLength());else echo on_upload_progress($sn);echo'> ';$Cd="";if(!isset($_GET["import"])){$Tj=$_GET["sql"];if($_POST)$Tj=$_POST["query"];elseif($_GET["history"]=="all")$Tj=$cf;elseif($_GET["history"]!="")$Tj=idx($cf[$_GET["history"]],0);echo"

    ";textarea("query",$Tj,20);echo($_POST?"":script("qs('textarea').focus();")),"

    ";adminer()->sqlPrintAfter();echo"$Cd\n",lang(185).": \n";}else{$Ke=(extension_loaded("zlib")?"[.gz]":"");echo"

    ".lang(186)."
    ",($sn?input_hidden(ini_get("session.upload_progress.name"),$sn):""),"SQL$Ke: ".file_input(" name='sql_file[]' multiple","\n$Cd"),($sn?" ":""),"
    \n";$pf=adminer()->importServerPath();if($pf)echo"
    ".lang(187)."
    ",lang(188,"".h($pf)."$Ke")," ","
    \n";adminer()->importPrint();echo"

    ";}echo checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),lang(190))."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),lang(191))."\n",input_token();if(!isset($_GET["import"])&&$cf){print_fieldset("history",lang(192),$_GET["history"]!="");for($W=end($cf);$W;$W=prev($cf)){$x=key($cf);list($Tj,$zm,$jd)=$W;echo'

    '.lang(14).""." ".@date("H:i:s",$zm).""." ".shorten_utf8(preg_replace('~\s+~',' ',ltrim(preg_replace("~^(?:$Bg).*~m",'',$Tj))),80,"").($jd?" ($jd)":"")."
    \n";}echo"\n","".lang(194)."\n","\n";}echo'
    ';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$o=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$o):""):where($_GET,$o));$pn=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($o as$B=>$n){if((!$pn&&!isset($n["privileges"]["insert"]))||adminer()->fieldName($n)=="")unset($o[$B]);}if($_POST&&!$m&&!isset($_GET["select"])){$Gg=relative_uri((string)$_POST["referer"]);if($_POST["insert"])$Gg=($pn?null:relative_uri());elseif(!preg_match('~^.+&select=.+$~',$Gg))$Gg=ME."select=".url_escape($a);$w=indexes($a);$in=unique_array($_GET["where"],$w);$Wj="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($Gg,lang(195),driver()->delete($a,$Wj,$in?0:1));else{$N=array();foreach($o as$B=>$n){$W=process_input($n);if($W!==false&&$W!==null)$N[idf_escape($B)]=$W;}if($pn){if(!$N)redirect($Gg);queries_redirect($Gg,lang(196),driver()->update($a,$N,$Wj,$in?0:1));if(is_ajax()){page_headers();page_messages($m);exit;}}else{$G=driver()->insert($a,$N);$rg=($G?last_id($G):0);queries_redirect($Gg,lang(197,($rg?" $rg":"")),$G);}}}$I=null;$F="";$zm="";if($Z){$L=array();$Sk=array("*");foreach($o as$B=>$n){if(isset($n["privileges"]["select"])){$Ha=($_POST["clone"]&&$n["auto_increment"]?"''":convert_field($n));$d=($Ha?"$Ha AS ":"").idf_escape($B);$L[]=$d;if($Ha)$Sk[]=$d;}}$I=array();if(!support("table")){$L=array("*");$Sk=$L;}if($L){$Il=microtime(true);$G=driver()->select($a,$L,array($Z),$L,array(),(isset($_GET["select"])?2:1));$F=str_replace("SELECT ".implode(", ",$L),"SELECT ".implode(", ",$Sk),driver()->query);$zm=format_time($Il);if(!$G)$m=adminer()->error();else{$I=$G->fetch_assoc();if(!$I)$I=false;}if(isset($_GET["select"])&&(!$I||$G->fetch_assoc()))$I=null;}}if(!$o&&driver()->primary!=""){if(!$Z){$G=driver()->select($a,array("*"),array(),array("*"));$I=($G?$G->fetch_assoc():false);if(!$I)$I=array(driver()->primary=>"");}if($I){foreach($I as$x=>$W){if(!$Z)$I[$x]=null;$o[$x]=array("field"=>$x,"null"=>($x!=driver()->primary),"auto_increment"=>($x==driver()->primary));}}}if($_POST["save"]){$zj=array();foreach((array)$_POST["fields"]as$x=>$W)$zj[bracket_escape($x,true)]=$W;$I=$zj+($I?$I:array());}edit_form($a,$o,$I,$pn,$m,$F,$zm);}elseif(isset($_GET["create"])){function referencable_primary($Vk){$H=array();foreach(table_status('',true)as$em=>$Q){if($em!=$Vk&&!$Q["dependent"]&&fk_support($Q)){foreach(fields($em)as$n){if($n["primary"]){if($H[$em]){unset($H[$em]);break;}$H[$em]=$n;}}}}return$H;}$a=$_GET["create"];$cj=driver()->partitionBy;$gj=($cj&&$a!=""?driver()->partitionsInfo($a):array());$ek=referencable_primary($a);$le=array();foreach($ek as$em=>$n)$le[str_replace("`","``",$em)."`".str_replace("`","``",$n["field"])]=$em;$Ii=array();$R=array();$Th=false;if($a!=""){$Ii=fields($a);$R=table_status1($a);$Th=(count($R)<2);}$Aa=($a==""||driver()->supportsAlterTable($R));$I=$_POST;$I["fields"]=(array)$I["fields"];if($I["auto_increment_col"])$I["fields"][$I["auto_increment_col"]]["auto_increment"]=true;if($_POST&&!$m)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($I["fields"])&&!$m){if($_POST["drop"])queries_redirect(substr(ME,0,-1),lang(198),drop_tables(array($a)));else{$o=array();$za=array();$wn=false;$je=array();$Hi=reset($Ii);$va=" FIRST";foreach($I["fields"]as$n){$q=$le[$n["type"]];$Zm=($q!==null?$ek[$q]:$n);if($n["field"]!=""){if(!$n["generated"])$n["default"]=null;$Pj=process_field($n,$Zm);$za[]=array($n["orig"],$Pj,$va);if(!$Hi||$Pj!==process_field($Hi,$Hi)){$o[]=array($n["orig"],$Pj,$va);if($n["orig"]!=""||$va)$wn=true;}if($q!==null)$je[idf_escape($n["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$le[$n["type"]],'source'=>array($n["field"]),'target'=>array($Zm["field"]),'on_delete'=>$n["on_delete"],),object_name("FOREIGN",trim($I["name"]),array($n["field"])));$va=" AFTER ".idf_escape($n["field"]);}elseif($n["orig"]!=""){$wn=true;$o[]=array($n["orig"]);}if($n["orig"]!=""){$Hi=next($Ii);if(!$Hi)$va="";}}$ej=array();if(in_array($I["partition_by"],$cj)){foreach($I as$x=>$W){if(preg_match('~^partition~',$x))$ej[$x]=$W;}foreach($ej["partition_names"]as$x=>$B){if($B==""){unset($ej["partition_names"][$x]);unset($ej["partition_values"][$x]);}}$ej["partition_names"]=array_values($ej["partition_names"]);$ej["partition_values"]=array_values($ej["partition_values"]);if($ej==$gj)$ej=array();}elseif(preg_match("~partitioned~",$R["Create_options"]))$ej=null;$eh=lang(199);if($a==""){cookie("adminer_engine",$I["Engine"]);$eh=lang(200);}$B=trim($I["name"]);$Gg=ME.(support("table")?"table=":"select=").url_escape($B);$G=alter_table($a,$B,(JUSH=="sqlite"&&($wn||$je)?$za:$o),$je,($I["Comment"]!=$R["Comment"]?$I["Comment"]:null),($I["Engine"]&&$I["Engine"]!=$R["Engine"]?$I["Engine"]:""),($I["Collation"]&&$I["Collation"]!=$R["Collation"]?$I["Collation"]:""),($I["Auto_increment"]!=""?number($I["Auto_increment"]):""),$ej);if($G&&!Queries::$queries&&$a!=""&&!$o&&!$je)redirect($Gg);queries_redirect($Gg,$eh,$G);}}$Jl=($a!=""?"alter":"create");page_header(($a!=""?lang(53):lang(86)),$m,array("table"=>$a),h($a),$Th,doc_link(array('sql'=>"$Jl-table.html",'mariadb'=>($a!=""?"$Jl-table":""),'pgsql'=>"sql-$Jl"."table.html",'cockroach'=>"$Jl-table",'mssql'=>"t-sql/statements/$Jl-table-transact-sql",'sqlite'=>"lang_{$Jl}table.html",'oracle'=>"sqlrf/".strtoupper($Jl)."-TABLE.html",)));if(!$_POST){$dn=driver()->types();$I=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($dn["int"])?"int":(isset($dn["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$I=$R;$I["name"]=$a;$I["fields"]=array();if(!$_GET["auto_increment"])$I["Auto_increment"]="";foreach($Ii as$n){if($n["generated"])$n["default"]=ltrim($n["default"]);$n["generated"]=$n["generated"]?:(isset($n["default"])?"DEFAULT":"");$I["fields"][]=$n;}if($cj){$I+=$gj;$I["partition_names"][]="";$I["partition_values"][]="";}}}$Eb=flat_collations();$qd=driver()->engines();foreach($qd as$pd){if(!strcasecmp($pd,$I["Engine"])){$I["Engine"]=$pd;break;}}$Pg=max_input_vars(12,20);if($Pg){$Ze=(count($I["fields"])>$Pg?"":" hidden");echo"".max_input_vars_error()."\n";}echo'

    ';if(support("columns")||$a==""){echo lang(201).": \n",(!$Aa?h($R["Engine"])."\n":($qd?html_select("Engine",array(""=>"(".lang(202).")")+$qd,$I["Engine"],on('change','helpClose').on_help_value())."\n":""));if($Eb)echo"".optionlist($Eb)."\n",(preg_match("~sqlite|mssql~",JUSH)?"":"\n");echo"\n";}if(support("columns")&&$Aa){echo"

    \n","\n";edit_fields($I["fields"],$Eb,"TABLE",$le);echo"
    \n",script("editFields();"),"
    \n

    \n",lang(60).": \n",checkbox("defaults",1,($_POST?$_POST["defaults"]:get_setting("defaults")),lang(203),on('click','columnShowClick',6),"jsonly");$Lb=($_POST?$_POST["comments"]:get_setting("comments"));if(support("comment")){echo checkbox("comments",1,$Lb,lang(59),on('click','editingCommentsClick',true),"jsonly").' ';$c=" name='Comment' data-maxlength='".(min_version(5.5)?2048:60)."'".($Lb?"":" class='hidden'");echo adminer()->commentInput('TABLE',$c,$I["Comment"]);}echo'

    ';}echo' ';if($a!="")echo' ';if($cj&&(JUSH=='sql'||$a=="")){$dj=preg_match('~RANGE|LIST~',$I["partition_by"]);print_fieldset("partition",lang(205),$I["partition_by"]);echo"

    ".html_select("partition_by",array_merge(array(""),$cj),$I["partition_by"],on('change','partitionByChange').on_help_value('.','PARTITION BY $&'))."\n","()\n",lang(206).": \n","\n","\n";foreach($I["partition_names"]as$x=>$W)echo'','\n\n";}echo input_token(),'

    ';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$yf=array("PRIMARY","UNIQUE","INDEX");$R=table_status1($a,true);$vf=driver()->indexAlgorithms($R);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$R["Engine"]))$yf[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$R["Engine"]))$yf[]="SPATIAL";if(min_version('',11.7)&&preg_match('~MyISAM|InnoDB~i',$R["Engine"]))$yf[]="VECTOR";$w=indexes($a);$o=fields($a);$Ij=array();if(JUSH=="mongo"){$Ij=$w["_id_"];unset($yf[0]);unset($w["_id_"]);}$I=$_POST;if($I)save_settings(array("index_options"=>$I["options"]));if($_POST&&!$m&&!$_POST["add"]&&!$_POST["drop_col"]){$b=array();foreach($I["indexes"]as$v){$B=$v["name"];if(in_array($v["type"],$yf)){$e=array();$yg=array();$Fc=array();$ti=array();$wf=(support("partial_indexes")?$v["partial"]:"");$uf=(in_array($v["algorithm"],$vf)?$v["algorithm"]:"");$N=array();ksort($v["columns"]);foreach($v["columns"]as$x=>$d){if($d!=""){$y=idx($v["lengths"],$x);$Dc=idx($v["descs"],$x);$si=idx($v["opclasses"],$x);$N[]=($o[$d]?idf_escape($d):$d).($y?"(".(+$y).")":"").($si!=""?" ".idf_escape($si):"").($Dc?" DESC":"");$e[]=$d;$yg[]=($y?:null);$Fc[]=$Dc;$ti[]="$si";}}$Dd=$w[$B];if($Dd){ksort($Dd["columns"]);ksort($Dd["lengths"]);ksort($Dd["descs"]);if($v["type"]==$Dd["type"]&&array_values($Dd["columns"])===$e&&(!$Dd["lengths"]||array_values($Dd["lengths"])===$yg)&&array_values($Dd["descs"])===$Fc&&(!$Dd["opclasses"]||array_values($Dd["opclasses"])===$ti)&&$Dd["partial"]==$wf&&(!$vf||$Dd["algorithm"]==$uf)){unset($w[$B]);continue;}}if($e)$b[]=array($v["type"],$B,$N,$uf,$wf);}}foreach($w as$B=>$Dd)$b[]=array($Dd["type"],$B,"DROP");if(!$b)redirect(ME."table=".url_escape($a));queries_redirect(ME."table=".url_escape($a),lang(209),alter_indexes($a,$b));}page_header(lang(156),$m,array("table"=>$a),h($a),false,doc_link(array('sql'=>"create-index.html",'pgsql'=>"sql-createindex.html",'cockroach'=>"create-index",'mssql'=>"t-sql/statements/create-index-transact-sql",'sqlite'=>"lang_createindex.html",'oracle'=>"sqlrf/CREATE-INDEX.html",)));$Ud=array_keys($o);if($_POST["add"]){foreach($I["indexes"]as$x=>$v){if($v["columns"][count($v["columns"])]!="")$I["indexes"][$x]["columns"][]="";}$v=end($I["indexes"]);if($v["type"]||array_filter($v["columns"],'strlen'))$I["indexes"][]=array("columns"=>array(1=>""));}if(!$I){foreach($w as$x=>$v){$w[$x]["name"]=$x;$w[$x]["columns"][]="";}$w[]=array("columns"=>array(1=>""));$I["indexes"]=$w;}$yg=(JUSH=="sql"||JUSH=="mssql");$ti=driver()->indexOpclasses();$pl=($_POST?$_POST["options"]:get_setting("index_options"));$Bh=array();foreach($yf as$T)$Bh[$T]=str_replace("{table}",$a,adminer()->namePattern($T));echo'
    ';if($Ij){echo"
    ',lang(210);$nf=" class='idxopts".($pl?"":" hidden")."'";if($vf)echo"".lang(211).doc_link(array('sql'=>'create-index.html#create-index-storage-engine-index-types','mariadb'=>'storage-engine-index-types/','pgsql'=>'indexes-types.html','cockroach'=>'create-index#parameters',));echo'',lang(212).($yg?" (".lang(213).")":"");if($yg||support("descidx"))echo checkbox("options",1,$pl,lang(130),on('click','indexOptionsShow'),"jsonly")."\n";echo'',lang(214);if(support("partial_indexes"))echo"".lang(215);echo'
    PRIMARY";foreach($Ij["columns"]as$x=>$d)echo select_input(" disabled",array_combine($Ud,$Ud),$d)," ";echo"\n";}$Zf=1;foreach($I["indexes"]as$v){if(!$_POST["drop_col"]||$Zf!=key($_POST["drop_col"])){echo"
    ".html_select("indexes[$Zf][type]",array(-1=>"")+$yf,$v["type"],on('change','indexesChangeType',$Bh),"label-type");if($vf)echo"".html_select("indexes[$Zf][algorithm]",array_merge(array(""),$vf),$v['algorithm'],"","label-algorithm");echo"";ksort($v["columns"]);$s=1;foreach($v["columns"]as$x=>$d){echo"".select_input(" name='indexes[$Zf][columns][$s]' title='".lang(57)."'".on('change','indexesChangeColumn',$Bh),($o&&($d==""||$o[$d])?array_combine($Ud,$Ud):array()),$d)," ",($yg?"":"");if($ti){$si=idx($v["opclasses"],$x);echo html_select("indexes[$Zf][opclasses][$s]",array(""=>"(".lang(216).")")+array_combine($ti,$ti)+($si!=""?array($si=>$si):array()),$si),doc_link(array('pgsql'=>'indexes-opclass.html'));}echo(support("descidx")?checkbox("indexes[$Zf][descs][$s]",1,idx($v["descs"],$x),lang(68)):""),"
    ","
    ";$s++;}echo"
    \n";if(support("partial_indexes"))echo"\n";echo"".icon("cross","drop_col[$Zf]","x",lang(133),on('click','editingRemoveRow','indexes$1[type]'));}$Zf++;}echo'

    ',input_token(),'

    ';}elseif(isset($_GET["database"])){$I=$_POST;if($_POST&&!$m&&!$_POST["add"]){$B=trim($I["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),lang(217),drop_databases(array(DB)));}elseif($B!==DB){if(DB!=""){$_GET["db"]=$B;queries_redirect(preg_replace('~\bdb=[^&]*&~','',ME)."db=".url_escape($B),lang(218),rename_database($B,(string)$I["collation"]));}else{$j=explode("\n",str_replace("\r","",$B));$Ql=true;$pg="";foreach($j as$k){if(count($j)==1||$k!=""){if(!create_database($k,(string)$I["collation"]))$Ql=false;$pg=$k;}}restart_session();set_session("dbs",null);queries_redirect(preg_replace('~&db=[^&]*~','',ME)."db=".url_escape($pg),lang(219),$Ql);}}else{if(!$I["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($B).(preg_match('~^[a-z0-9_]+$~i',$I["collation"])?" COLLATE $I[collation]":""),substr(ME,0,-1),lang(220));}}$Jl=(DB!=""?"alter":"create");page_header(DB!=""?lang(76):lang(137),$m,array(),h(DB),false,doc_link(array('sql'=>"$Jl-database.html",'mariadb'=>(DB!=""?"":"$Jl-database"),'pgsql'=>"sql-$Jl"."database.html",'cockroach'=>"$Jl-database",'mssql'=>"t-sql/statements/$Jl-database-transact-sql",'oracle'=>"sqlrf/".strtoupper($Jl)."-USER.html",)));$Eb=collations();$B=DB;if($_POST)$B=$I["name"];elseif(DB!="")$I["collation"]=db_collation(DB,$Eb);elseif(JUSH=="sql"){foreach(get_vals("SHOW GRANTS")as$Be){if(preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~',$Be,$A)&&$A[1]){$B=stripcslashes(idf_unescape("`$A[2]`"));break;}}}echo'

    ',($_POST["add"]||strpos($B,"\n")?'
    ':'')."\n",($Eb?html_select("collation",array(""=>"(".lang(124).")")+$Eb,$I["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",'mssql'=>"relational-databases/system-functions/sys-fn-helpcollations-transact-sql",)):"")."\n",' ';if(DB!="")echo"\n";elseif(!$_POST["add"]&&$_GET["db"]=="")echo icon("plus","add[0]","+",lang(131))."\n";echo input_token(),'

    ';}elseif(isset($_GET["scheme"])){$I=$_POST;$f=(support("comment")&&$_GET["ns"]!=""?schema_comment($_GET["ns"]):"");if($_POST&&!$m){$_=preg_replace('~&ns=[^&]*~','',ME)."ns=";if($_POST["drop"])query_redirect("DROP SCHEMA ".idf_escape($_GET["ns"]),$_,lang(221));else{$B=trim($I["name"]);$_ .=url_escape($B);$Ih=(support("comment")?$I["comment"]:$f);$G=true;$eh=lang(222);if($_GET["ns"]==""){$G=queries("CREATE SCHEMA ".idf_escape($B));$eh=lang(223);}elseif($_GET["ns"]!=$B)$G=queries("ALTER SCHEMA ".idf_escape($_GET["ns"])." RENAME TO ".idf_escape($B));elseif($Ih===$f)redirect($_);if($G&&$Ih!==$f)$G=set_schema_comment($B,$Ih);queries_redirect($_,$eh,$G);}}$Jl=($_GET["ns"]!=""?"alter":"create");page_header($_GET["ns"]!=""?lang(77):lang(78),$m,array(),"",false,doc_link(array('pgsql'=>"sql-$Jl"."schema.html",'cockroach'=>"$Jl-schema",'mssql'=>"t-sql/statements/create-schema-transact-sql",)));if(!$I){$I["name"]=$_GET["ns"];$I["comment"]=$f;}echo'

    ';if($_GET["ns"]!="")echo"\n";echo(support("comment")?"

    ".lang(59).": ".adminer()->commentInput('SCHEMA'," name='comment'",$I["comment"])."\n":""),input_token(),'

    ';}elseif(isset($_GET["call"])){$ca=($_GET["name"]?:$_GET["call"]);$Ck=(isset($_GET["callf"])?"FUNCTION":"PROCEDURE");$yk=routine($_GET["call"],$Ck);$Wf=(idx($yk["returns"],"type")=="trigger");page_header(($Wf?lang(164):lang(224)).": ".h($ca),$m,"#routines","",!$yk,(isset($_GET["callf"])?"":doc_link(array('sql'=>"call.html",'pgsql'=>"sql-call.html",'cockroach'=>"call",'mssql'=>"t-sql/language-elements/execute-transact-sql",))));$qf=array();$Oi=array();foreach($yk["fields"]as$s=>$n){if(substr($n["inout"],-3)=="OUT"&&JUSH=='sql')$Oi[$s]="@".idf_escape($n["field"])." AS ".idf_escape($n["field"]);if(!$n["inout"]||preg_match('~^(IN|OUTPUT)~',$n["inout"]))$qf[]=$s;}if(!$m&&$_POST){$jb=array();foreach($yk["fields"]as$x=>$n){$W="";if(in_array($x,$qf)){$W=process_input($n);if($W===false)$W="''";if(isset($Oi[$x]))connection()->query("SET @".idf_escape($n["field"])." = $W");}if(isset($Oi[$x]))$jb[]="@".idf_escape($n["field"]);elseif(in_array($x,$qf))$jb[]=$W;}$Fa=implode(", ",$jb);$F=(isset($_GET["callf"])||JUSH!="mssql"?(isset($_GET["callf"])?"SELECT ":"CALL ").(idx($yk["returns"],"type")=="record"?"* FROM ":"").table($ca)."($Fa)":"EXEC ".table($ca).($Fa!=""?" $Fa":""));$Il=microtime(true);$G=connection()->multi_query($F);$ta=connection()->affected_rows;echo adminer()->selectQuery($F,$Il,!$G);if(!$G)echo"

    ".adminer()->error()."\n";else{$h=connect();if($h)$h->select_db(DB);do{$G=connection()->store_result();if(is_object($G))print_select_result($G,$h);else echo"

    ".lang(225,$ta)." ".@date("H:i:s")."\n";}while(connection()->next_result());if($Oi)print_select_result(connection()->query("SELECT ".implode(", ",$Oi)));}}if($Wf){$Wm=driver()->routineTriggers($_GET["call"]);if($Wm){echo"\n";foreach($Wm as$I){$_=preg_replace('~&ns=[^&]*~',"&ns=".url_escape($I["ns"]),ME);echo"
    ".h($I["trigger"])."".($I["ns"]!=$_GET["ns"]?"".h($I["ns"]).".":"").h($I["table"]).""."".lang(160)."\n";}echo"
    \n";}}else{echo'

    ';if($qf){echo"\n";foreach($qf as$x){$n=$yk["fields"][$x];$B=$n["field"];echo"
    ".adminer()->fieldName($n);$X=idx($_POST["fields"],$B);if($X!=""){if($n["type"]=="set")$X=implode(",",$X);}input($n,$X,idx($_POST["function"],$B,""));echo"\n";}echo"
    \n";}echo'

    ',input_token(),'

    ';}echo' ',adminer()->commentValue($Ck,$yk['comment']);}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$B=$_GET["name"];$I=$_POST;if($_POST&&!$m&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$I["source"]=array_filter($I["source"],'strlen');ksort($I["source"]);$qm=array();foreach($I["source"]as$x=>$W)$qm[$x]=$I["target"][$x];$I["target"]=$qm;}$Tb=object_name("FOREIGN",$a,$I["source"]);$Ya=false;if(JUSH=="sqlite")$G=recreate_table($a,$a,array(),array(),array(" $B"=>($I["drop"]?"":" ".format_foreign_key($I,$Tb))));else{$b="ALTER TABLE ".table($a);$Xc="$b DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($B?:'');if($I["drop"])$G=queries($Xc);else{$ma=" ADD".format_foreign_key($I,$Tb);if($B=="")$G=queries($b.$ma);elseif(JUSH=="pgsql"||(JUSH=="sql"&&$Tb!=$B))$G=queries("$Xc,$ma");else{$Ya=support("transaction_ddl")&&driver()->begin();$G=($Ya||idx(foreign_keys($a),$B)?queries($Xc):true)&&queries($b.$ma)&&(!$Ya||driver()->commit());}}}queries_redirect(ME."table=".url_escape($a),($I["drop"]?lang(226):($B!=""?lang(227):lang(228))),$G);if($Ya)driver()->rollback();if(!$I["drop"])$m=lang(229);}$Th=false;if(!$_POST&&$B!=""){$le=foreign_keys($a);$I=idx($le,$B,array());$Th=!$I;}page_header(($B!=""?lang(230):lang(161)),$m,array("table"=>$a),h($B!=""?$B:$a),$Th,doc_link(array('sql'=>"innodb-foreign-key-constraints.html",'mariadb'=>"foreign-keys/",'pgsql'=>"sql-createtable.html#SQL-CREATETABLE-PARMS-REFERENCES",'cockroach'=>"foreign-key",'mssql'=>"t-sql/statements/create-table-transact-sql",'oracle'=>"sqlrf/constraint.html",)));if($_POST){ksort($I["source"]);if($_POST["change"]||$_POST["change-js"])$I["target"]=array();else$I["source"][]="";}elseif($B!="")$I["source"][]="";else{$I["table"]=$a;$I["source"]=array("");}echo'
    ';$yl=array_keys(fields($a));if($I["db"]!="")connection()->select_db($I["db"]);if($I["ns"]!=""){$Ji=get_schema();set_schema($I["ns"]);}$dk=array_keys(array_filter(table_status('',true),function(array$R){return!$R["dependent"]&&fk_support($R);}));$qm=array_keys(fields(in_array($I["table"],$dk)?$I["table"]:reset($dk)));$c=on('change','foreignChange');echo"

    \n";if(support("scheme")){$Jk=array_filter(adminer()->schemas(),function($K){return!information_schema(DB,$K);});echo"";if($I["ns"]!="")set_schema($Ji);}elseif(JUSH!="sqlite"){$vc=array();foreach(adminer()->databases()as$k){if(!information_schema($k))$vc[]=$k;}echo"";}echo input_hidden("change-js"),'

    ';$Zf=0;foreach($I["source"]as$x=>$W){echo"","
    ',lang(158),'',lang(159),'
    ".html_select("source[".(+$x)."]",array(-1=>"")+$yl,$W,($Zf==count($I["source"])-1?on('change','foreignAddRow'):""),"label-source"),"".html_select("target[".(+$x)."]",$qm,idx($I["target"],$x),"","label-target");$Zf++;}echo'

    ',(support("deferrable")?html_select("deferrable",array('NOT DEFERRABLE','DEFERRABLE','DEFERRABLE INITIALLY DEFERRED'),$I["deferrable"]):''),'

    ';if($B!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["view"])){$a=$_GET["view"];$I=$_POST;$Ki="VIEW";if(JUSH=="pgsql"&&$a!=""){$O=table_status1($a);$Ki=strtoupper($O["Engine"]);}if($_POST&&!$m){$B=trim($I["name"]);$Ha=" AS\n$I[select]";$Gg=ME."table=".url_escape($B);$eh=lang(234);$T=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$B&&JUSH!="sqlite"&&$T=="VIEW"&&$Ki=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($B).$Ha,$Gg,$eh);else{$um="adminer_".uniqid();drop_create("DROP $Ki ".table($a),"CREATE $T ".table($B).$Ha,"DROP $T ".table($B),"CREATE $T ".table($um).$Ha,"DROP $T ".table($um),($_POST["drop"]?substr(ME,0,-1):$Gg),lang(235),$eh,lang(236),$a,$B);}}$Th=false;if(!$_POST&&$a!=""){$I=view($a);$Th=!$I["select"];$I["name"]=$a;$I["materialized"]=($Ki!="VIEW");if(!$m)$m=adminer()->error();}page_header(($a!=""?lang(52):lang(237)),$m,array("table"=>$a),h($a),$Th,doc_link(array('sql'=>"create-view.html",'pgsql'=>"sql-createview.html",'cockroach'=>"create-view",'mssql'=>"t-sql/statements/create-view-transact-sql",'sqlite'=>"lang_createview.html",'oracle'=>"sqlrf/CREATE-VIEW.html",)));echo'

    ',lang(214),': ',(support("materializedview")?" ".checkbox("materialized",1,$I["materialized"],lang(152)):""),'

    ';textarea("select",$I["select"]);echo'

    ';if($a!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$Lf=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Ll=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$I=$_POST;if($_POST&&!$m){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),lang(238));elseif(in_array($I["INTERVAL_FIELD"],$Lf)&&isset($Ll[$I["STATUS"]])){$Hk="\nON SCHEDULE ".($I["INTERVAL_VALUE"]?"EVERY ".q($I["INTERVAL_VALUE"])." $I[INTERVAL_FIELD]".($I["STARTS"]?" STARTS ".q($I["STARTS"]):"").($I["ENDS"]?" ENDS ".q($I["ENDS"]):""):"AT ".q($I["STARTS"]))." ON COMPLETION".($I["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?lang(239):lang(240)),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$Hk.($aa!=$I["EVENT_NAME"]?"\nRENAME TO ".idf_escape($I["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($I["EVENT_NAME"]).$Hk)."\n".$Ll[$I["STATUS"]]." COMMENT ".q($I["EVENT_COMMENT"]).rtrim(" DO\n$I[EVENT_DEFINITION]",";").";"));}}$Th=false;if(!$I&&$aa!=""){$J=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$Th=!$J;$I=reset($J);}page_header(($aa!=""?lang(241).": ".h($aa):lang(242)),$m,"#events","",$Th,doc_link(array('sql'=>"create-event.html")));echo'
    ',lang(214),'
    ',lang(243),'
    ',lang(244),'
    ',lang(245),' ',html_select("INTERVAL_FIELD",$Lf,$I["INTERVAL_FIELD"]),'
    ',lang(140),'',html_select("STATUS",$Ll,$I["STATUS"]),'
    ',lang(59),'
    ',checkbox("ON_COMPLETION","PRESERVE",$I["ON_COMPLETION"]=="PRESERVE",lang(246)),'

    ';textarea("EVENT_DEFINITION",$I["EVENT_DEFINITION"]);echo'

    ';if($aa!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["procedure"])){$ca=($_GET["name"]?:$_GET["procedure"]);$yk=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$I=$_POST;$I["fields"]=(array)$I["fields"];if($_POST&&!process_fields($I["fields"])&&!$m){foreach($I["fields"]as$x=>$n){if($n["field"]=="")unset($I["fields"][$x]);}$li=routine($_GET["procedure"],$yk);$ji=($li?routine_id($ca,$li):"");$Kh=routine_id($I["name"],$I);$i=create_routine($yk,$I);$Gg=substr(ME,0,-1);$eh=lang(247);if(!$_POST["drop"]&&$ji==$Kh&&connection()->flavor!="mysql")queries_redirect($Gg,$eh,queries(substr_replace($i,(JUSH=="mssql"?' OR ALTER':' OR REPLACE'),6,0)));else{$um="adminer_".uniqid();drop_create("DROP $yk $ji",$i,"DROP $yk $Kh",create_routine($yk,array("name"=>$um)+$I),"DROP $yk ".routine_id($um,$I),$Gg,lang(248),$eh,lang(249),$ca,$I["name"]);}}$Th=false;if(!$_POST&&$ca!=""){$I=routine($_GET["procedure"],$yk);$Th=!$I;$I["name"]=$ca;}$Ak=strtolower($yk);page_header(($ca!=""?(isset($_GET["function"])?lang(165):lang(250)).": ".h($ca):(isset($_GET["function"])?lang(251):lang(252))),$m,"#routines","",$Th,doc_link(array('sql'=>"create-procedure.html",'mariadb'=>"create-$Ak/",'pgsql'=>"sql-create$Ak.html",'cockroach'=>"create-$Ak",'mssql'=>"t-sql/statements/create-$Ak-transact-sql",)));if(!$_POST&&$ca=="")$I["language"]="sql";$Eb=(JUSH=="sql"?flat_collations():array());$zk=routine_languages();echo($Eb?"".optionlist($Eb)."":""),'

    ',lang(214),': ',($zk?"\n":""),'

    ';edit_fields($I["fields"],$Eb,$yk);if(isset($_GET["function"])){echo"
    ".lang(253);edit_type("returns",(array)$I["returns"],$Eb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo'
    ',script("editFields();"),'

    ';textarea("definition",$I["definition"],20,80,($zk[$I["language"]]?:JUSH));echo'

    ';if($ca!="")echo' ';$Bk=routine_options($yk);if($Bk){$zi=false;foreach($Bk as$x=>$Y){$l=($Y?reset($Y):"");$I["options"][$x]=idx($I["options"],$x,$l);if($I["options"][$x]!=$l)$zi=true;}print_fieldset("options",lang(130),$zi);echo"\n";foreach($Bk as$x=>$Y){$kg="label-option-$x";$Bm=str_replace("_"," ",$x);$L=array();foreach($Y as$X)$L[$X]=(strpos($X,"$Bm ")===0?substr($X,strlen($Bm)+1):$X);echo"
    $Bm".($L?html_select("options[$x]",$L,$I["options"][$x],"",$kg):"")."\n";}echo"
    \n\n";}echo input_token(),'

    ';}elseif(isset($_GET["sequence"])){$ea=$_GET["sequence"];$I=$_POST;if($_POST&&!$m){$_=substr(ME,0,-1);$B=trim($I["name"]);if($_POST["drop"])query_redirect("DROP SEQUENCE ".idf_escape($ea),$_,lang(254));elseif($ea=="")query_redirect("CREATE SEQUENCE ".idf_escape($B),$_,lang(255));elseif($ea!=$B)query_redirect("ALTER SEQUENCE ".idf_escape($ea)." RENAME TO ".idf_escape($B),$_,lang(256));else redirect($_);}$Th=(!$_POST&&$ea!=""&&!get_val("SELECT relname FROM pg_class WHERE relkind = 'S' AND relnamespace = ".driver()->nsOid." AND relname = ".q($ea)));page_header(($ea!=""?lang(257).": ".h($ea):lang(258)),$m,"#sequences","",$Th,doc_link(array('pgsql'=>"sql-createsequence.html",'cockroach'=>"create-sequence",)));if(!$I)$I["name"]=$ea;echo'

    ';if($ea!="")echo"\n";echo input_token(),'

    ';}elseif(isset($_GET["type"])){function enum_values($Ac){$X="'(?:[^']|'')*'";if(!preg_match('~^AS\s+ENUM\s*\(\s*('.$X.'(?:\s*,\s*'.$X.')*)\s*\)$~i',$Ac,$A))return null;preg_match_all('~'.$X.'~',$A[1],$Mg);return$Mg[0];}function add_enum_values($T,$hi,$Hh){$ni=enum_values($hi);$Ph=enum_values($Hh);if($ni===null||$Ph===null)return null;$H=array();$s=0;foreach($Ph as$X){if($X===idx($ni,$s))$s++;else$H[]="ALTER TYPE ".idf_escape($T)." ADD VALUE $X".($s"sql-createtype.html",'cockroach'=>"create-type",)));if(!$I){$I["name"]=$fa;$I["as"]=($fa!=""?$T["definition"]:"AS ");}echo'

    ',lang(214).": \n";textarea("as",$I["as"]);echo"

    \n";if($fa!="")echo"\n";echo input_token(),'

    ';}elseif(isset($_GET["check"])){$a=$_GET["check"];$B="$_GET[name]";$I=$_POST;if($I&&!$m){$Gg=ME."table=".url_escape($a);$hh=lang(264);$fh=lang(265);$gh=lang(266);if(JUSH=="sqlite")queries_redirect($Gg,($I["drop"]?$hh:($B!=""?$fh:$gh)),recreate_table($a,$a,array(),array(),array(),"",array(),"$B",($I["drop"]?"":$I["clause"])));else{$b="ALTER TABLE ".table($a);$qb=" CHECK ($I[clause])";$um="adminer_".uniqid();drop_create("$b DROP CONSTRAINT ".idf_escape($B),"$b ADD".($I["name"]!=""?" CONSTRAINT ".idf_escape($I["name"]):"").$qb,"$b DROP CONSTRAINT ".idf_escape($I["name"]),"$b ADD CONSTRAINT ".idf_escape($um).$qb,"$b DROP CONSTRAINT ".idf_escape($um),$Gg,$hh,$fh,$gh,$B,$I["name"]);}}$Th=false;if(!$I){$ub=driver()->checkConstraints($a);$Th=($B!=""&&!$ub[$B]);$I=array("name"=>($B!=""?$B:object_name("CHECK",$a,array())),"clause"=>$ub[$B]);}page_header(($B!=""?lang(267):lang(163)),$m,array("table"=>$a),h($B!=""?$B:$a),$Th,doc_link(array('sql'=>"create-table-check-constraints.html",'mariadb'=>"constraint/",'pgsql'=>"ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS",'cockroach'=>"check",'mssql'=>"relational-databases/tables/create-check-constraints",'sqlite'=>"lang_createtable.html#check_constraints",)));echo'
    ';if(JUSH!="sqlite")echo'

    '.lang(214).': ';echo'

    ';textarea("clause",$I["clause"]);echo'

    ';if($B!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$B="$_GET[name]";$Vm=trigger_options();$I=trigger($B,$a);$Th=($B!=""&&!$I);$Ah=str_replace("{table}",$a,adminer()->namePattern("TRIGGER"));$I+=array("Trigger"=>strtr($Ah,array("{timing}"=>"b","{event}"=>"i","{columns}"=>"","{type}"=>"row")));if($_POST){if(!$m&&in_array($_POST["Timing"],$Vm["Timing"])&&in_array($_POST["Event"],$Vm["Event"])&&in_array($_POST["Type"],$Vm["Type"])){$oi=" ON ".table($a);$Xc="DROP TRIGGER ".idf_escape($B).(JUSH=="pgsql"?$oi:"");$Gg=ME."table=".url_escape($a);if($_POST["drop"])query_redirect($Xc,$Gg,lang(268));else{if($B!="")queries($Xc);queries_redirect($Gg,($B!=""?lang(269):lang(270)),queries(create_trigger($oi,$_POST)));if($B!="")queries(create_trigger($oi,$I+array("Type"=>reset($Vm["Type"]))));}}$I=$_POST;}page_header(($B!=""?lang(271):lang(166)),$m,array("table"=>$a),h($B!=""?$B:$a),$Th,doc_link(array('sql'=>"create-trigger.html",'pgsql'=>"sql-createtrigger.html",'cockroach'=>"create-trigger",'mssql'=>"t-sql/statements/create-trigger-transact-sql",'sqlite'=>"lang_createtrigger.html",'oracle'=>"lnpls/CREATE-TRIGGER-statement.html",)));$Dh=strtr(preg_quote($Ah),array('\{timing\}'=>'[abi]','\{event\}'=>'[iud]*','\{columns\}'=>'.*','\{type\}'=>'(row|statement)'));$Tm=on('change','triggerChange',"^$Dh$",$Ah);$bi=on('input','triggerChange',"^$Dh$",$Ah);echo'
    ',lang(272),'',html_select("Timing",$Vm["Timing"],$I["Timing"],$Tm),'
    ',lang(273),'',html_select("Event",$Vm["Event"],$I["Event"],$Tm),(in_array("UPDATE OF",$Vm["Event"])?" ":""),'
    ',lang(58),'',html_select("Type",$Vm["Type"],$I["Type"],$Tm),'
    ',lang(214),'
    ',script("fire(qs('#form')['Timing'], 'change');"),'

    ';textarea("Statement",$I["Statement"]);echo'

    ';if($B!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["user"])){function grant($Be,array$Nj,$e,$oi){if(!$Nj)return true;if($Nj==array("ALL PRIVILEGES","GRANT OPTION"))return($Be=="GRANT"?queries("$Be ALL PRIVILEGES$oi WITH GRANT OPTION"):queries("$Be ALL PRIVILEGES$oi")&&queries("$Be GRANT OPTION$oi"));return queries("$Be ".preg_replace('~(GRANT OPTION)\([^)]*\)~','\1',implode("$e, ",$Nj).$e).$oi);}$ga=$_GET["user"];$Nj=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$I){foreach(explode(",",($I["Privilege"]=="Grant option"?"":$I["Context"]))as$Yb)$Nj[$Yb=="File access on server"?"Server Admin":$Yb][$I["Privilege"]]=$I["Comment"];}unset($Nj["Server Admin"]["Usage"]);foreach($Nj["Tables"]as$x=>$W)unset($Nj["Databases"][$x]);$Jh=array();if($_POST){foreach($_POST["objects"]as$x=>$W)$Jh[$W]=(array)$Jh[$W]+idx($_POST["grants"],$x,array());}$Ce=array();$G=(isset($_GET["host"])?connection()->query("SHOW GRANTS FOR ".q($ga)."@".q($_GET["host"])):null);$Th=(isset($_GET["host"])&&!$G);if($G){while($I=$G->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$I[0],$A)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$A[1],$Mg,PREG_SET_ORDER)){foreach($Mg as$W){if($W[1]!="USAGE")$Ce["$A[2]$W[2]"][$W[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$I[0]))$Ce["$A[2]$W[2]"]["GRANT OPTION"]=true;}}}}if($_POST&&!$m){$mi=(isset($_GET["host"])?q($ga)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $mi",ME."privileges=",lang(274));else{$Oh=q($_POST["user"])."@".q($_POST["host"]);$ij=$_POST["pass"];$gc=false;$G=true;if($mi!=$Oh){$gc=queries("CREATE USER $Oh IDENTIFIED BY ".($_POST["hashed"]?"PASSWORD ":"").q($ij));$G=$gc;}elseif($ij!="")$G=queries("SET PASSWORD FOR $Oh = ".(min_version(8,99)||$_POST["hashed"]?q($ij):"PASSWORD(".q($ij).")"));if($G){$uk=array();foreach($Jh as$Yh=>$Be){if(isset($_GET["grant"]))$Be=array_filter($Be);$Be=array_keys($Be);if(isset($_GET["grant"]))$uk=array_diff(array_keys(array_filter($Jh[$Yh],'strlen')),$Be);elseif($mi==$Oh){$ii=array_keys((array)$Ce[$Yh]);$uk=array_diff($ii,$Be);$Be=array_diff($Be,$ii);unset($Ce[$Yh]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$Yh,$A)&&(!grant("REVOKE",$uk,$A[2]," ON $A[1] FROM $Oh")||!grant("GRANT",$Be,$A[2]," ON $A[1] TO $Oh"))){$G=false;break;}}}if($G&&isset($_GET["host"])){if($mi!=$Oh)queries("DROP USER $mi");elseif(!isset($_GET["grant"])){foreach($Ce as$Yh=>$uk){if(preg_match('~^(.+)(\(.*\))?$~U',$Yh,$A))grant("REVOKE",array_keys($uk),$A[2]," ON $A[1] FROM $Oh");}}}if($G&&!Queries::$queries)redirect(ME."privileges=");queries_redirect(ME."privileges=",(isset($_GET["host"])?lang(275):lang(276)),$G);if($gc)connection()->query("DROP USER $Oh");}}page_header((isset($_GET["host"])?lang(42).": ".h("$ga@$_GET[host]"):lang(174)),$m,array("privileges"=>array('',lang(80))),"",$Th,doc_link(array('sql'=>"grant.html",'mariadb'=>"grant")));$I=$_POST;if($I)$Ce=$Jh;else{$I=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$Ce[(DB==""||$Ce?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'
    ',lang(40),'
    ',lang(42),'
    ',lang(43),' ',($I["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8,99)?"":checkbox("hashed",1,$I["hashed"],lang(277),on('click','hashedClick'))),'
    ',"\n","\n";foreach(array(""=>"","Server Admin"=>lang(40),"Databases"=>lang(44),"Tables"=>lang(154),"Procedures"=>lang(278),)as$Yb=>$Dc){foreach((array)$Nj[$Yb]as$Mj=>$f){echo"$Dc'.h($Mj);$s=0;foreach($Ce as$Yh=>$Be){$B="'grants[$s][".h(strtoupper($Mj))."]'";$X=$Be[strtoupper($Mj)];if($Yb=="Server Admin"&&$Yh!=(isset($Ce["*.*"])?"*.*":".*"))echo"
    ".lang(80);$s=0;foreach($Ce as$Yh=>$Be){echo''.($Yh!="*.*"?"":input_hidden("objects[$s]","*.*")."*.*");$s++;}echo"
    ";elseif(isset($_GET["grant"]))echo"";else echo"";$s++;}}}echo"
    \n",'

    ';if(isset($_GET["host"]))echo' ';echo input_token(),'

    ';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$m){$hg=0;foreach((array)$_POST["kill"]as$W){if(adminer()->killProcess($W))$hg++;}queries_redirect(ME."processlist=",lang(281,$hg),$hg||!$_POST["kill"]);}}page_header(lang(138),$m);echo'
    ';$s=-1;foreach(adminer()->processList()as$s=>$I){if(!$s){echo"".(support("kill")?"\n";}echo"".(support("kill")?"
    ":"");foreach($I as$x=>$W)echo"$x".doc_link(array('sql'=>"show-processlist.html#processlist_".strtolower($x),'pgsql'=>"monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",'oracle'=>"refrn/V-SESSION.html",));echo"
    ".checkbox("kill[]",$I[JUSH=="sql"?"Id":"pid"],0):"");foreach($I as$x=>$W)echo"".($W!=""&&((JUSH=="sql"&&$x=="Info"&&preg_match("~Query|Killed~",$I["Command"]))||(JUSH=="pgsql"&&$x=="query")||(JUSH=="oracle"&&$x=="sql_text"))?"".shorten_utf8($W,100,"").' '.lang(282).''.' '.copy_icon():h($W));echo"\n";}echo'

    ',script("copyCode(qsl('table'));");if(support("kill"))echo format_number($s+1)."/".lang(283,max_connections()),"

    \n";echo input_token(),'

    ',script("tableCheck();");}elseif($_GET["select"]!=""){$a=$_GET["select"];$R=table_status1($a);$w=indexes($a);$o=fields($a);$le=column_foreign_keys($a);$gi=$R["Oid"];$wk=array();$e=array();$Nk=array();$Bi=array();$xm=null;foreach($o as$x=>$n){$B=adminer()->fieldName($n);$Ch=html_entity_decode(strip_tags($B),ENT_QUOTES);if(isset($n["privileges"]["select"])&&$B!=""){$e[$x]=$Ch;if(is_shortable($n))$xm=adminer()->selectLengthProcess();}if(isset($n["privileges"]["where"])&&$B!="")$Nk[$x]=$Ch;if(isset($n["privileges"]["order"])&&$B!="")$Bi[$x]=$Ch;$wk+=$n["privileges"];}list($L,$r)=adminer()->selectColumnsProcess($e,$w);$L=array_unique($L);$r=array_unique($r);$Sf=count($r)selectSearchProcess($o,$w,$R);$Ai=adminer()->selectOrderProcess($o,$w);$z=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$jn=>$I){$Ha=convert_field($o[key($I)]);$L=array($Ha?:idf_escape(key($I)));$Z[]=where_check(bracket_escape($jn,true),$o);$H=driver()->select($a,$L,$Z,$L);if($H)echo first($H->fetch_row());}exit;}$Ij=$mn=array();foreach($w as$v){if($v["type"]=="PRIMARY"){$Ij=array_flip($v["columns"]);$mn=($L?$Ij:array());foreach($mn as$x=>$W){if(in_array(idf_escape($x),$L))unset($mn[$x]);}break;}}if($gi&&!$Ij){$Ij=$mn=array($gi=>0);$w[]=array("type"=>"PRIMARY","columns"=>array($gi));}if($_POST&&!$m){$Tn=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$ub=array();foreach($_POST["check"]as$qb)$ub[]=where_check($qb,$o);$Tn[]="((".implode(") OR (",$ub)."))";}$Vn=$Tn;$Tn=($Tn?"\nWHERE ".implode(" AND ",$Tn):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$Rk=($L?:array("*"));$bc=convert_fields($e,$o,$L);if($bc)$Rk[]=substr($bc,2);$F="";if(is_array($_POST["check"])&&!$Ij){$se=implode(", ",$Rk)."\nFROM ".table($a);$Fe=($r&&$Sf?"\nGROUP BY ".implode(", ",$r):"").($Ai?"\nORDER BY ".implode(", ",$Ai):"");$gn=array();foreach($_POST["check"]as$W)$gn[]="(SELECT".limit($se,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$o).$Fe,1).")";$F=implode(" UNION ALL ",$gn);}adminer()->dumpData($a,"table",$F,$Rk,$Vn,($Sf?$r:array()),$Ai);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$le)){if($_POST["save"]||$_POST["delete"]){$G=true;$ta=0;$Ya=false;$N=array();if(!$_POST["delete"]){foreach($o as$B=>$W){$u=bracket_escape($B);if(isset($_POST["fields"][$u])||$_FILES["fields-$u"]){$W=process_input($o[$B]);if($W!==null&&($_POST["clone"]||$W!==false))$N[idf_escape($B)]=($W!==false?$W:idf_escape($B));}}}if($_POST["delete"]||$N){$F=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($N)).")\nSELECT ".implode(", ",$N)."\nFROM ".table($a):"");if($_POST["all"]||($Ij&&is_array($_POST["check"]))||$Sf){$G=($_POST["delete"]?driver()->delete($a,$Tn):($_POST["clone"]?queries("INSERT $F$Tn".driver()->insertReturning($a)):driver()->update($a,$N,$Tn)));$ta=connection()->affected_rows;if(is_object($G))$ta+=$G->num_rows;}else{$Ya=count((array)$_POST["check"])>1&&driver()->begin();foreach((array)$_POST["check"]as$W){$Sn="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$o);$G=($_POST["delete"]?driver()->delete($a,$Sn,1):($_POST["clone"]?queries("INSERT".limit1($a,$F,$Sn)):driver()->update($a,$N,$Sn,1)));if(!$G)break;$ta+=connection()->affected_rows;}if($Ya&&$G&&!driver()->commit())$G=false;}}$eh=lang(175,$ta);if($_POST["clone"]&&$G&&$ta==1){$rg=last_id($G);if($rg)$eh=lang(197," $rg");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page|next":""),$eh,$G);if($Ya)driver()->rollback();if(!$_POST["delete"]){$zj=(array)$_POST["fields"];edit_form($a,array_intersect_key($o,$zj),$zj,!$_POST["clone"],$m);page_footer();exit;}}elseif(!$_POST["import"]){$G=true;$ta=0;$Ya=count((array)$_POST["val"])>1&&driver()->begin();foreach((array)$_POST["val"]as$jn=>$I){$N=array();foreach($I as$x=>$W){$x=bracket_escape($x,true);$N[idf_escape($x)]=(preg_match('~char|text~',$o[$x]["type"])||$W!=""?adminer()->processInput($o[$x],$W):"NULL");}$G=driver()->update($a,$N," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check(bracket_escape($jn,true),$o),($Sf||$Ij?0:1)," ");if(!$G)break;$ta+=connection()->affected_rows;}if($Ya)$G=$G&&driver()->commit();queries_redirect(remove_from_uri(),lang(175,$ta),$G);if($Ya)driver()->rollback();}else{save_settings(array("format"=>$_POST["separator"]),"adminer_import");$Vd=get_file("csv_file",true);if(!is_string($Vd))$m=upload_error($Vd);elseif(!preg_match('~~u',$Vd))$m=lang(285);else{$Fb=array_keys($o);$Xk=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$kc=parse_csv($Vd,$Xk);$ta=count($kc);driver()->begin();$J=array();foreach($kc as$x=>$Y){if(!$x&&!array_diff($Y,$Fb)){$Fb=$Y;$ta--;}else{$N=array();foreach($Y as$s=>$Bb)$N[idf_escape($Fb[$s])]=($Bb==""&&$o[$Fb[$s]]["null"]?"NULL":q(csv_value($Bb)));$J[]=$N;}}$G=(!$J||driver()->insertUpdate($a,$J,$Ij));if($G)driver()->commit();queries_redirect(remove_from_uri("page|next"),lang(286,$ta),$G);driver()->rollback();}}}}$em=adminer()->tableName($R);if(is_ajax()){page_headers();ob_start();}else page_header(lang(62).": $em",$m,array(),"",(!$o&&support("table")),($o?doc_link(array(JUSH=>driver()->tableHelp($a,is_view($R)))):""));$N=null;if(isset($wk["insert"])||!support("table")){$N="";foreach((array)$_GET["where"]as$W){$X=$W["val"];if(is_array($X))$X=(count($X)==1&&preg_match('~^val-(.*)~s',reset($X),$A)?$A[1]:"");if($W["col"]!=""&&$X!=""&&($W["op"]=="="||(!$W["op"]&&(is_array($W["val"])||!preg_match('~[_%]~',$X)))))$N .="&set[".url_escape(bracket_escape($W["col"]))."]=".url_escape($X);}}adminer()->selectLinks($R,$N);if(!$e&&support("table"))echo"

    ".lang(287)."\n";else{echo"

    \n","\n";adminer()->selectColumnsPrint($L,$e);adminer()->selectSearchPrint($Z,$Nk,$w,$R);adminer()->selectOrderPrint($Ai,$Bi,$w);adminer()->selectLimitPrint($z);if($xm!==null)adminer()->selectLengthPrint($xm);adminer()->selectActionPrint($w);echo"
    \n";foreach((array)$_GET["where"]as$W){if($W["op"]=="SQL"&&!in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"))){echo"

    ".lang(119).' '.lang(120)."\n";page_footer();exit;}}$C=$_GET["page"];$oe=null;if($C=="last"){$oe=get_val(count_rows($a,$Z,$Sf,$r));$C=floor(max(0,intval($oe)-1)/$z);}$Qk=$L;$Ee=$r;if(!$Qk){$Qk[]="*";$bc=convert_fields($e,$o,$L);if($bc)$Qk[]=substr($bc,2);}foreach($L as$x=>$W){$n=$o[idf_unescape($W)];if($n&&($Ha=convert_field($n)))$Qk[$x]="$Ha AS $W";}if(JUSH=="pgsql"||JUSH=="mssql"){foreach((array)$_GET["columns"]as$x=>$W){if(isset($Qk[$x])&&$W["fun"])$Qk[$x].=" AS ".idf_escape(apply_sql_function($W["fun"],($W["col"]!=""?$W["col"]:"*")));}}if(!$Sf&&$mn){foreach($mn as$x=>$W){$Qk[]=idf_escape($x);if($Ee)$Ee[]=idf_escape($x);}}$G=driver()->select($a,$Qk,$Z,$Ee,$Ai,$z,$C,true);if(!is_object($G))echo"

    ".(adminer()->error()?:lang(26))."\n";else{if(JUSH=="mssql"&&$C)$G->seek($z*$C);$md=array();$J=array();while($I=$G->fetch_assoc()){if($C&&JUSH=="oracle")unset($I["RNUM"]);$J[]=$I;}$Qe=($z&&(support("cursor")?$_GET["next"]!="":count($J)>=$z));if(is_ajax()&&$Qe)header("X-Next-Page: ".pagination_href($C+1));if($_GET["modify"]&&$J){$Vg=max_input_vars(count($J[0])+1,20);echo($Vg&&count($J)>$Vg?"

    ".max_input_vars_error()."\n":"");}echo"

    \n";if($_GET["page"]!="last"&&$z&&$r&&$Sf&&JUSH=="sql")$oe=get_val(" SELECT FOUND_ROWS()");if(!$J)echo"

    ".lang(16)."\n";else{$Ua=adminer()->backwardKeys($a,$em);$sk=array();reset($L);foreach($J[0]as$x=>$W){if(!isset($mn[$x])){$W=idx($_GET["columns"],key($L))?:array();$sk[$x]=array("fun"=>$W["fun"],"col"=>($L?$W["col"]:$x));next($L);}}echo"

    ","\n","".(!$r&&$L?"":"\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($J,$le)as$zh=>$I){$in=unique_array($J[$zh],$w);if(!$in){$in=array();foreach($J[$zh]as$x=>$W){if(!in_array(idx(idx($sk,$x,array()),"fun"),driver()->grouping))$in[$x]=$W;}}$jn="";$s=0;foreach($in as$x=>$W){$rk=idx($sk,$x,array());if($L&&$rk&&!isset($o[$rk["col"]]))continue;$xe=idx($rk,"fun","");$Bb=($xe?$rk["col"]:$x);$n=(array)$o[$Bb];$Rf=is_blob($n);if(!$xe&&strlen($W)>64&&driver()->md5(idf_escape($Bb),$n)){$xe="md5";$W=md5($Rf?(string)driver()->value($W,$n):$W);}if($xe){$jn .="&fun[$s]=".url_escape($xe)."&col[$s]=".url_escape($Bb).($W!==null?"&val[$s]=".url_escape($W===false?"f":$W):"");$s++;}else$jn .="&".($W!==null?"where[".url_escape(bracket_escape($Bb))."]=".url_escape($W===false?"f":$W):"null[]=".url_escape($Bb));}echo"".(!$r&&$L?"":"\n";}if(is_ajax())exit;echo"
    ");$Eh=array();$ak=1;foreach($sk as$x=>$W){$n=$o[$W["col"]];$B=($n?adminer()->fieldName($n,$ak):($W["fun"]?($W["col"]!=""?h($W["col"]):"*"):h($x)));if($B!=""){$ak++;$Eh[$x]=$B;$d=idf_escape($x);$gf=remove_from_uri('(order|desc)[^=]*|page|next').'&order[0]='.url_escape($x);$Dc="&desc[0]=1";$vl=preg_replace('~ DESC( NULLS LAST)?$~','',$Ai[0]);$xl=($vl==$d||$vl==$x);echo"";$xe=apply_sql_function(h($W["fun"]),$B);$wl=isset($n["privileges"]["order"])||$W["fun"];echo($wl?"$xe":$xe);$dh=($wl?" ↓":'');if(!$W["fun"]&&isset($n["privileges"]["where"]))$dh .=" =";echo($dh?"$dh":"");}}$yg=array();if($_GET["modify"]){foreach($J as$I){foreach($I as$x=>$W)$yg[$x]=max($yg[$x],min(40,utf8_length((string)$W)));}}$bf=array();$af=array();foreach((array)$_GET["where"]as$W){$W+=array("col"=>"","op"=>"","val"=>"");$Bb=$W["col"];$Mk=$W["val"];if(!is_array($Mk)&&($Mk!=""||preg_match('~NULL$~',$W["op"]))&&(!$W["op"]||in_array($W["op"],adminer()->operators($R)))){$_g=strtr(preg_quote($Mk),array("%"=>".*?","_"=>"."));$oj=array("LIKE %%"=>$_g,"ILIKE %%"=>$_g,"REGEXP"=>$Mk)+(JUSH=="pgsql"?array("~"=>$Mk,"~*"=>$Mk):array())+($Bb!=""?array():array("="=>'^'.preg_quote($Mk).'\z',"IN"=>'^(?:'.implode("|",array_map('preg_quote',array_map('trim',explode(",",$Mk)))).')\z',"LIKE"=>"^$_g\\z","ILIKE"=>"^$_g\\z","FIND_IN_SET"=>'(?<=^|,)'.preg_quote($Mk).'(?=,|\z)',));foreach(($Bb!=""?array($Bb=>$o[$Bb]):$o)as$B=>$n){if($Bb!=""||is_searchable($n,$W)){$ri=$W["op"]?:(!preg_match('~'.text_type().'~',$n["type"])?"IN":(preg_match('~%~',$Mk)?"LIKE":"LIKE %%"));if(isset($oj[$ri])){$xb=preg_match('~^ILIKE|\*$~',$ri)||($ri!="~"&&preg_match('~^(sql|mssql|sqlite)$~',JUSH));$bf[$B][]="(?".($xb?"i":"").":$oj[$ri])";}elseif($ri=="IS NULL"&&$Bb=="")$af[$B]=true;}}}}echo($Ua?"".lang(289):"")."
    ".($Sf||information_schema(DB)?"":"".lang(290)." ").checkbox("check[]",substr($jn,1),in_array(substr($jn,1),(array)$_POST["check"])));foreach($I as$x=>$W){if(isset($Eh[$x])){$xe=$sk[$x]["fun"];$Bb=$sk[$x]["col"];$n=(array)$o[$x];if($W!=""&&(!isset($md[$x])||$md[$x]!=""))$md[$x]=(is_mail($W)?$Eh[$x]:"");$_="";if(is_blob($n)&&$W!="")$_=ME.'download='.url_escape($a).'&field='.url_escape($x).$jn;if(!$_&&$W!==null){foreach((array)$le[$x]as$q){if(count($le[$x])==1||end($q["source"])==$x){$_="";foreach($q["source"]as$s=>$yl)$_ .=where_link($s,$q["target"][$s],$J[$zh][$yl]);$_=($q["db"]!=""?preg_replace('~&db=[^&]*~',"&db=".url_escape($q["db"]),ME):ME).'select='.url_escape($q["table"]).$_;if($q["ns"]!="")$_=preg_replace('~&ns=[^&]*~',"&ns=".url_escape($q["ns"]),$_);if(count($q["source"])==1)break;}}}if($xe=="count"&&$Bb==""){$_=ME."select=".url_escape($a);$s=0;foreach((array)$_GET["where"]as$V){if(!array_key_exists($V["col"],$in))$_ .=where_link($s++,$V["col"],$V["val"],$V["op"]);}foreach($in as$cg=>$V){if(idx(idx($sk,$cg,array()),"fun")){$_="";break;}$_ .=where_link($s++,$cg,$V);}}$hf=select_value($W,$_,$n,$xm,($xe?array():idx($bf,$x,array())));if($W===null&&!$xe&&isset($af[$x]))$hf="$hf";$u=bracket_escape($jn);$t=h("val[$u][".bracket_escape($x)."]");$Aj=idx(idx($_POST["val"],$u),bracket_escape($x));$pn=idx($n["privileges"],"update")&&!is_identity_always($n);$hd=$J[$zh][$x];$id=!is_array($I[$x])&&!is_blob($n)&&is_utf8($hd)&&!$xe&&!$n["generated"]&&$pn;$T=($xe=="min"||$xe=="max"?$o[$Bb]["type"]:$n["type"]);$wm=preg_match('~text|json|lob~',$T);$Tf=preg_match(number_type(),$T)||preg_match('~^(avg|ceil|char_length|count|count distinct|floor|len|length|round|sum|time_to_sec)$~',$xe);echo"".($wm?"":"");}else{$Ig=strpos($hf,"…");$gd=adminer()->editVal($hd,$n);echo($pn?" data-text='".($Ig?2:($wm?1:0))."'".($id?"":" data-warning='".lang(291)."'").($id&&!$Ig&&html_entity_decode(strip_tags($hf),ENT_QUOTES,"UTF-8")!==$gd?" data-value='".h($gd)."'":""):"").">$hf";}}}if($Ua)echo"";adminer()->backwardKeysPrint($Ua,$J[$zh]);echo"
    \n","
    \n";}if(!is_ajax()){$sa=get_settings("adminer_import");if($J||$C||$Qe){$Bd=true;if($_GET["page"]!="last"){if(!$z||(count($J)<$z&&($J||!$C)))$oe=($C?$C*$z:0)+count($J);elseif(JUSH!="sql"||!$Sf){$oe=($Sf?null:found_rows($R,$Z));$Bd=!driver()->hasEstimatedRows();if($oe===null||(!$Bd&&$oe$z);$Ti=($z&&($Qe||$C));if($Ti)echo($Qe?'

    '.lang(293).'':''),"\n";echo"

    \n";}if(adminer()->selectImportPrint())echo"

    ","".lang(84)."","";echo input_token(),"

    \n",(!$r&&$L?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$O=isset($_GET["status"]);page_header($O?lang(140):lang(139));$In=($O?adminer()->showStatus():adminer()->showVariables());if(!$In)echo"

    ".lang(16)."\n";else{echo"\n";foreach($In as$I){echo"";$x=array_shift($I);echo"
    ".h($x)."";foreach($I as$W)echo"".nl_br(h($W));}echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: application/json; charset=utf-8");if($_GET["script"]=="db"){$Tl=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$B=>$R){json_row("Comment-$B",h($R["Comment"]).($R["Error"]?" ".h($R["Error"])."":""));if(!is_view($R)||preg_match('~materialized~i',$R["Engine"])){foreach(array("Engine","Collation")as$x)json_row("$x-$B",h($R[$x]));foreach(array_keys($Tl+array("Auto_increment"=>0,"Rows"=>0))as$x){if(array_key_exists($x,$R))json_row("$x-$B",format_status($R,$x));if($R[$x]!=""&&isset($Tl[$x]))$Tl[$x]+=($R["Engine"]!="InnoDB"||$x!="Data_free"?$R[$x]:0);}}}if(function_exists('Adminer\db_status'))$Tl=db_status();foreach($Tl as$x=>$W)json_row("sum-$x",adminer()->formatSizeValue($W));json_row("");}elseif($_GET["script"]=="kill"){if(!$m)connection()->query("KILL ".number($_POST["kill"]));}else{foreach(count_tables(adminer()->databases(false))as$k=>$W){json_row("tables-$k",format_number($W));json_row("size-$k",db_size($k));}json_row("");}exit;}else{if(!isset($_GET["select"])&&support("single_table")){$S=tables_list();if($S)redirect(ME.(support("table")?"table=":"select=").url_escape(key($S)));}$ah=ME.(isset($_GET["select"])?"select=&":"");$om=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($om&&!$m&&!$_POST["search"]){$G=true;$eh="";if(JUSH=="sql"&&$_POST["tables"]&&count($_POST["tables"])>1&&($_POST["drop"]||$_POST["truncate"]||$_POST["copy"]))queries("SET foreign_key_checks = 0");if($_POST["truncate"]){if($_POST["tables"])$G=truncate_tables($_POST["tables"]);$eh=lang(298);}elseif($_POST["move"]){$G=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$eh=lang(299);}elseif($_POST["copy"]){$G=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$eh=lang(300);}elseif($_POST["drop"]){if($_POST["views"])$G=drop_views($_POST["views"]);if($G&&$_POST["tables"])$G=drop_tables($_POST["tables"]);$eh=lang(301);}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$Q){foreach(get_rows("PRAGMA integrity_check(".q($Q).")")as$I)$eh .="".h($Q).": ".h($I["integrity_check"])."
    ";}}elseif(JUSH=="mssql"&&$_POST["check"]){foreach((array)$_POST["tables"]as$Q){foreach(get_rows("DBCC CHECKTABLE (".q(table($Q)).") WITH TABLERESULTS")as$I)$eh .="".h($Q).": ".h($I["MessageText"])."
    ";}}elseif(JUSH!="sql"){$G=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?" ANALYZE":""),(array)$_POST["tables"]));$eh=lang(302);}elseif(!$_POST["tables"])$eh=lang(13);elseif($G=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($I=$G->fetch_assoc())$eh .="".h($I["Table"]).": ".h($I["Msg_text"])."
    ";}queries_redirect(relative_uri(),$eh,$G);}page_header(($_GET["ns"]==""?lang(44).": ".h(DB):lang(88).": ".h($_GET["ns"])),$m,true);if(adminer()->homepage()){if($_GET["ns"]!==""){if(support("scheme")&&support("comment")){$f=schema_comment($_GET["ns"]);if($f!="")echo"

    ".lang(59).": ".adminer()->commentValue('SCHEMA',$f)."\n";}$Ai=$_GET["order"];$ue=($Ai||support("fast_status"));echo"

    \n","

    ".lang(303)."

    \n";$nm=($ue?table_status():tables_list());if(!$nm)echo"

    ".lang(13)."\n";else{echo"

    \n";if(support("table")){echo"
    ".lang(304)."
    ",html_select("op",adminer()->operators(),idx($_POST,"op",JUSH=="elastic"?"should":"LIKE %%"))," "," \n","
    \n";if(!$m&&$_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]=$_POST["op"];search_tables();}}echo"
    \n","\n",'','\n";if($Ai){uasort($nm,function($ia,$Ra)use($Ai,$Ia){$H=($ia[$Ai]<$Ra[$Ai]?-1:($ia[$Ai]>$Ra[$Ai]?1:0));return(in_array($Ai,$Ia)?$H:-$H);});}$S=0;$Tl=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach($nm as$B=>$O){$Ln=($ue?is_view($O):$O!==null&&!preg_match('~table|sequence~i',$O));$O=($ue?$O:array('Engine'=>$O));$t=h("Table-".$B);echo'
    ',''.lang(154).'';$e=array("Engine"=>array(lang(305).doc_link(array('sql'=>'storage-engines.html'))));if(collations())$e["Collation"]=array(lang(144).doc_link(array('sql'=>'charset-charsets.html','mariadb'=>'supported-character-sets-and-collations/')));if(function_exists('Adminer\alter_table'))$e["Data_length"]=array(lang(306).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT','oracle'=>'refrn/ALL_TABLES.html')),"create",lang(53),);if(support("indexes"))$e["Index_length"]=array(lang(307).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT')),"indexes",lang(157),);$e["Data_free"]=array(lang(308).doc_link(array('sql'=>'show-table-status.html')),"edit",lang(54));if(function_exists('Adminer\alter_table'))$e["Auto_increment"]=array(lang(60).doc_link(array('sql'=>'example-auto-increment.html','mariadb'=>'auto_increment/')),"auto_increment=1&create",lang(53),);$e["Rows"]=array(lang(309).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'catalog-pg-class.html#CATALOG-PG-CLASS','oracle'=>'refrn/ALL_TABLES.html')),"select",lang(50),);if(support("comment"))$e["Comment"]=array(lang(59).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE','cockroach'=>'comment-on')),);$Ia=array('Engine','Collation','Comment');foreach($e as$x=>$d)echo"$d[0]";echo"
    '.checkbox(($Ln?"views[]":"tables[]"),$B,in_array("$B",$om,true),"","","",$t),''.(support("table")||support("indexes")?"".h($B).'':h($B));if($Ln&&!preg_match('~materialized~i',$O['Engine'])){$Bm=lang(153);echo''.(support("view")?"$Bm":$Bm),"?";if(support("comment"))echo''.h($O['Comment']);}else{if($ue){foreach(array_keys($Tl)as$x)$Tl[$x]+=($O["Engine"]!="InnoDB"||$x!="Data_free"?idx($O,$x):0);}foreach($e as$x=>$d){$t=" id='$x-".h($B)."'";echo($d[1]?"".format_status($O,$x)."":"".h(idx($O,$x,'?')).($x=="Comment"&&$O["Error"]?" ".h($O["Error"])."":""));}$S++;}echo"\n";}echo"
    ".lang(283,count($nm)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),(collations()?"".h(db_collation(DB,collations())):'');if($ue&&function_exists('Adminer\db_status'))$Tl=db_status();foreach($Tl as$x=>$Sl)echo($e[$x]?"".($ue?adminer()->formatSizeValue($Sl):""):"");echo"\n","
    \n",($ue?'':script("ajaxSetHtml('".js_escape(ME)."script=db');")),"
    \n";if(!information_schema(DB)){$En=" ";$wi=" ";$Kj=(JUSH=="sqlite"?$En." ":(JUSH=="pgsql"?$En.$wi:(JUSH=="mssql"?" ":(JUSH=="sql"?" ".$wi." "." ":"")))).(function_exists('Adminer\truncate_tables')?" ":"").(function_exists('Adminer\drop_tables')?"":"");echo($Kj?"\n";}echo"
    \n",script("tableCheck();");}echo(function_exists('Adminer\alter_table')?"
    \n";if(support("routine")){echo"
    \n","

    ".lang(81)."

    \n";$Dk=routines();if($Dk){echo"\n",'\n";foreach($Dk as$I){$B=($I["SPECIFIC_NAME"]==$I["ROUTINE_NAME"]?"":"&name=".url_escape($I["ROUTINE_NAME"]));echo'','
    '.lang(214).''.lang(58).''.lang(253)."
    '.h($I["ROUTINE_NAME"]).'',''.h($I["ROUTINE_TYPE"]),''.h($I["DTD_IDENTIFIER"]),''.lang(160)."";}echo"
    \n";}echo'
    \n";}if(support("sequence")){echo"
    \n","

    ".lang(82)."

    \n";$bl=get_vals("SELECT relname FROM pg_class WHERE relkind = 'S' AND relnamespace = ".driver()->nsOid." ORDER BY relname");if($bl){echo"\n","\n";foreach($bl as$W)echo"
    ".lang(214)."
    ".h($W)."\n";echo"
    \n";}echo"
    \n";}if(support("type")){echo"
    \n","

    ".lang(0)."

    \n";$Bn=types();if($Bn){echo"\n","\n";foreach($Bn as$W)echo"
    ".lang(214)."
    ".h($W)."\n";echo"
    \n";}echo"
    \n";}if(support("event")){echo"
    \n","

    ".lang(83)."

    \n";$J=get_rows("SHOW EVENTS");if($J){echo"\n","\n";foreach($J as$I)echo"","
    ".lang(214)."".lang(318)."".lang(243)."".lang(244)."
    ".h($I["Name"]),"".($I["Execute at"]?lang(319)."".h($I["Execute at"]):lang(245)." ".h($I["Interval value"])." ".h($I["Interval field"])."".h($I["Starts"])),"".h($I["Ends"]),''.lang(160).'';echo"
    \n";$zd=get_val("SELECT @@event_scheduler");if($zd&&$zd!="ON")echo"

    event_scheduler: ".h($zd)."\n";}echo'

    \n";}}elseif(support("extension")){$Kd=get_rows("SELECT e.extname, e.extversion, n.nspname, obj_description(e.oid, 'pg_extension') AS comment FROM pg_extension e JOIN pg_namespace n ON n.oid = e.extnamespace ORDER BY e.extname");if($Kd){echo"
    \n","

    ".lang(320)."

    \n","\n","\n";foreach($Kd as$I)echo"
    ".lang(214)."".lang(321)."".lang(88)."".lang(59)."
    ".h($I["extname"])."","".h($I["extversion"]),"".h($I["nspname"])."","".h($I["comment"]),"\n";echo"
    \n","
    \n";}}}}page_footer();